Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

## Unreleased

## 7.2.0

### Changed

- Changed `@tangle-network/agent-eval` and `@tangle-network/agent-interface` to required compatible peers.
- Kept exact development pins at Eval `0.144.10` and Interface `0.46.1`.
- Consumers now select one shared Eval and Interface cohort instead of nested package copies.

## 7.1.3

### Changed
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Supply application callbacks for those decisions, or use `@tangle-network/agent-
## Install

```bash
pnpm add @tangle-network/agent-knowledge@7.1.3 @tangle-network/agent-eval@0.144.8
pnpm add @tangle-network/agent-knowledge@7.2.0 @tangle-network/agent-eval@0.144.10 @tangle-network/agent-interface@0.46.1
```

Requires Node.js 20.19 or later.
Expand Down
10 changes: 7 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@tangle-network/agent-knowledge",
"version": "7.1.3",
"version": "7.2.0",
"description": "Build, search, evaluate, and improve source-backed knowledge bases.",
"homepage": "https://github.com/tangle-network/agent-knowledge#readme",
"repository": {
Expand Down Expand Up @@ -75,15 +75,19 @@
"verify:official-optimizers": "node scripts/verify-official-optimizers.mjs"
},
"dependencies": {
"@tangle-network/agent-eval": "0.144.8",
"@tangle-network/agent-interface": "0.46.1",
"proper-lockfile": "4.1.2",
"zod": "^4.4.3"
},
"peerDependencies": {
"@tangle-network/agent-eval": ">=0.144.10 <0.145.0",
"@tangle-network/agent-interface": ">=0.46.1 <0.47.0"
},
"devDependencies": {
"@arethetypeswrong/cli": "^0.18.5",
"@biomejs/biome": "^2.5.5",
"@neo4j-labs/agent-memory": "0.4.1",
"@tangle-network/agent-eval": "0.144.10",
"@tangle-network/agent-interface": "0.46.1",
"@types/node": "^26.1.1",
"@types/proper-lockfile": "4.1.4",
"mem0ai": "3.1.2",
Expand Down
18 changes: 9 additions & 9 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 22 additions & 2 deletions scripts/verify-official-optimizers.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,27 @@ import { fileURLToPath, pathToFileURL } from 'node:url'

const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const sourcePackage = JSON.parse(readFileSync(join(repoRoot, 'package.json'), 'utf8'))
const agentEvalVersion = sourcePackage.dependencies?.['@tangle-network/agent-eval']
const agentEvalVersion = sourcePackage.devDependencies?.['@tangle-network/agent-eval']
if (!/^\d+\.\d+\.\d+$/.test(agentEvalVersion)) {
throw new Error('@tangle-network/agent-eval must be pinned to one exact version')
throw new Error('@tangle-network/agent-eval must have one exact development pin')
}
const [agentEvalMajor, agentEvalMinor] = agentEvalVersion.split('.').map(Number)
const expectedEvalPeerRange = `>=${agentEvalVersion} <${agentEvalMajor}.${agentEvalMinor + 1}.0`
if (sourcePackage.peerDependencies?.['@tangle-network/agent-eval'] !== expectedEvalPeerRange) {
throw new Error(
`@tangle-network/agent-eval peer range must be ${expectedEvalPeerRange} to match the development pin`,
)
}
const agentInterfaceVersion = sourcePackage.devDependencies?.['@tangle-network/agent-interface']
if (!/^\d+\.\d+\.\d+$/.test(agentInterfaceVersion)) {
throw new Error('@tangle-network/agent-interface must have one exact development pin')
}
const [agentInterfaceMajor, agentInterfaceMinor] = agentInterfaceVersion.split('.').map(Number)
const expectedInterfacePeerRange = `>=${agentInterfaceVersion} <${agentInterfaceMajor}.${agentInterfaceMinor + 1}.0`
if (sourcePackage.peerDependencies?.['@tangle-network/agent-interface'] !== expectedInterfacePeerRange) {
throw new Error(
`@tangle-network/agent-interface peer range must be ${expectedInterfacePeerRange} to match the development pin`,
)
}
const tempRoot = mkdtempSync(join(tmpdir(), 'agent-knowledge-official-'))

Expand Down Expand Up @@ -69,6 +87,8 @@ try {
join(tempRoot, 'npm-cache'),
'--prefer-online',
join(packDir, tarballs[0]),
`@tangle-network/agent-eval@${agentEvalVersion}`,
`@tangle-network/agent-interface@${agentInterfaceVersion}`,
],
appDir,
)
Expand Down
64 changes: 45 additions & 19 deletions scripts/verify-package.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,12 @@ const agentCorePackage = '@tangle-network/agent-core'
const agentInterfacePackage = '@tangle-network/agent-interface'
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const sourcePackage = JSON.parse(readFileSync(join(repoRoot, 'package.json'), 'utf8'))
const agentEvalVersion = sourcePackage.dependencies?.[agentEvalPackage]
if (!/^\d+\.\d+\.\d+$/.test(agentEvalVersion)) {
throw new Error('@tangle-network/agent-eval must be pinned to one exact version')
}
const agentInterfaceVersion = sourcePackage.dependencies?.[agentInterfacePackage]
if (!/^\d+\.\d+\.\d+$/.test(agentInterfaceVersion)) {
throw new Error('@tangle-network/agent-interface must be pinned to one exact version')
}
const agentEvalVersion = exactDevelopmentPin(sourcePackage, agentEvalPackage)
const agentEvalPeerRange = exactMinorPeerRange(agentEvalVersion)
const agentInterfaceVersion = exactDevelopmentPin(sourcePackage, agentInterfacePackage)
const agentInterfacePeerRange = exactMinorPeerRange(agentInterfaceVersion)
assertRequiredPeer(sourcePackage, agentEvalPackage, agentEvalPeerRange)
assertRequiredPeer(sourcePackage, agentInterfacePackage, agentInterfacePeerRange)
assertNoAgentStackOverrides(sourcePackage)
assertEdgeUnsafeStaticImportMatcher()
const tempRoot = mkdtempSync(join(tmpdir(), 'agent-knowledge-package-'))
Expand Down Expand Up @@ -154,23 +152,18 @@ try {
'utf8',
),
)
if (
installedPackage.dependencies?.['@tangle-network/agent-eval'] !== agentEvalVersion ||
installedAgentEval.version !== agentEvalVersion
) {
if (installedAgentEval.version !== agentEvalVersion) {
throw new Error(
`agent-eval version mismatch: dependency=${installedPackage.dependencies?.['@tangle-network/agent-eval']} installed=${installedAgentEval.version} expected=${agentEvalVersion}`,
`agent-eval version mismatch: installed=${installedAgentEval.version} expected=${agentEvalVersion}`,
)
}
if (
installedPackage.dependencies?.['@tangle-network/agent-interface'] !==
agentInterfaceVersion ||
installedAgentInterface.version !== agentInterfaceVersion
) {
if (installedAgentInterface.version !== agentInterfaceVersion) {
throw new Error(
`agent-interface version mismatch: dependency=${installedPackage.dependencies?.['@tangle-network/agent-interface']} installed=${installedAgentInterface.version} expected=${agentInterfaceVersion}`,
`agent-interface version mismatch: installed=${installedAgentInterface.version} expected=${agentInterfaceVersion}`,
)
}
assertPublishedRequiredPeer(installedPackage, agentEvalPackage, agentEvalPeerRange)
assertPublishedRequiredPeer(installedPackage, agentInterfacePackage, agentInterfacePeerRange)
const agentCoreVersion = installedAgentEval.dependencies?.[agentCorePackage]
if (!/^\d+\.\d+\.\d+$/.test(agentCoreVersion)) {
throw new Error('@tangle-network/agent-eval must pin @tangle-network/agent-core exactly')
Expand Down Expand Up @@ -274,6 +267,39 @@ function assertNoAgentStackOverrides(packageManifest) {
}
}

function exactDevelopmentPin(packageManifest, packageName) {
const version = packageManifest.devDependencies?.[packageName]
if (!/^\d+\.\d+\.\d+$/.test(version)) {
throw new Error(`${packageName} must have one exact development pin`)
}
return version
}

function exactMinorPeerRange(version) {
const [major, minor] = version.split('.').map(Number)
return `>=${version} <${major}.${minor + 1}.0`
}

function assertRequiredPeer(packageManifest, packageName, expectedRange) {
if (packageManifest.peerDependencies?.[packageName] !== expectedRange) {
throw new Error(`${packageName} must be a required peer at ${expectedRange}`)
}
if (packageManifest.dependencies?.[packageName] !== undefined) {
throw new Error(`${packageName} must not be a runtime dependency`)
}
}

function assertPublishedRequiredPeer(packageManifest, packageName, expectedRange) {
if (packageManifest.peerDependencies?.[packageName] !== expectedRange) {
throw new Error(
`published ${packageName} peer mismatch: ${packageManifest.peerDependencies?.[packageName]} expected=${expectedRange}`,
)
}
if (packageManifest.dependencies?.[packageName] !== undefined) {
throw new Error(`published ${packageName} must not be a runtime dependency`)
}
}

function assertSingleInstalledAgentStack(appDir, expectedVersions) {
const installedPaths = run(
'npm',
Expand Down