attention-manifest-protocol 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +341 -293
- package/CHANGELOG.zh-CN.md +41 -8
- package/README.md +250 -171
- package/README.zh-CN.md +251 -171
- package/lib/assignment/assign.d.ts +102 -0
- package/lib/assignment/assign.js +556 -0
- package/lib/assignment/binding.d.ts +103 -0
- package/lib/assignment/binding.js +575 -0
- package/lib/assignment/errors.d.ts +14 -0
- package/lib/assignment/errors.js +16 -0
- package/lib/assignment/guards.d.ts +18 -0
- package/lib/assignment/guards.js +28 -0
- package/lib/assignment/index.d.ts +10 -0
- package/lib/assignment/index.js +10 -0
- package/lib/assignment/types.d.ts +169 -0
- package/lib/assignment/types.js +1 -0
- package/lib/attention/budget.d.ts +1 -1
- package/lib/attention/budget.js +31 -9
- package/lib/bayes/engine.js +2 -1
- package/lib/bayes/reliability.js +25 -10
- package/lib/boundary/frame.d.ts +10 -4
- package/lib/boundary/frame.js +346 -109
- package/lib/boundary/kinds.d.ts +11 -0
- package/lib/boundary/kinds.js +33 -0
- package/lib/boundary/refTable.d.ts +19 -9
- package/lib/boundary/refTable.js +128 -30
- package/lib/boundary/toolCall.d.ts +22 -10
- package/lib/boundary/toolCall.js +798 -97
- package/lib/concept/conceptBudget.js +10 -1
- package/lib/concurrency/idempotency.d.ts +4 -3
- package/lib/concurrency/idempotency.js +57 -13
- package/lib/concurrency/retry.js +18 -3
- package/lib/context/agentContext.d.ts +13 -0
- package/lib/context/agentContext.js +14 -1
- package/lib/context/ast.d.ts +4 -1
- package/lib/context/ast.js +13 -3
- package/lib/context/contentStore.js +22 -9
- package/lib/context/contextBuilder.d.ts +457 -0
- package/lib/context/contextBuilder.js +1395 -0
- package/lib/context/contextPackage.d.ts +214 -0
- package/lib/context/contextPackage.js +191 -0
- package/lib/context/index.d.ts +14 -3
- package/lib/context/index.js +9 -1
- package/lib/context/relevance.d.ts +171 -0
- package/lib/context/relevance.js +250 -0
- package/lib/context/workspaceDiff.d.ts +105 -0
- package/lib/context/workspaceDiff.js +238 -0
- package/lib/context/workspaceService.d.ts +236 -1
- package/lib/context/workspaceService.js +1501 -73
- package/lib/cooperation/collaboration.d.ts +9 -0
- package/lib/cooperation/session.d.ts +4 -4
- package/lib/cooperation/session.js +3 -3
- package/lib/database/adapter/filesystemStore.d.ts +145 -0
- package/lib/database/adapter/filesystemStore.js +321 -0
- package/lib/database/adapter/index.d.ts +2 -0
- package/lib/database/adapter/index.js +2 -0
- package/lib/database/adapter/workspaceSessionStore.d.ts +118 -0
- package/lib/database/adapter/workspaceSessionStore.js +120 -0
- package/lib/database/entity/fileGraph.d.ts +53 -0
- package/lib/database/entity/fileGraph.js +15 -0
- package/lib/database/entity/fileTree.d.ts +76 -0
- package/lib/database/entity/fileTree.js +39 -0
- package/lib/database/entity/hook.d.ts +29 -0
- package/lib/database/entity/hook.js +18 -0
- package/lib/database/entity/index.d.ts +4 -0
- package/lib/database/entity/index.js +4 -0
- package/lib/database/entity/workspaceSession.d.ts +53 -0
- package/lib/database/entity/workspaceSession.js +28 -0
- package/lib/database/repository/fileAnnotationRepository.d.ts +75 -0
- package/lib/database/repository/fileAnnotationRepository.js +109 -0
- package/lib/database/repository/fileGraphRepository.d.ts +188 -0
- package/lib/database/repository/fileGraphRepository.js +648 -0
- package/lib/database/repository/fileNodeRepository.d.ts +116 -0
- package/lib/database/repository/fileNodeRepository.js +263 -0
- package/lib/database/repository/fileOutlineRepository.d.ts +40 -0
- package/lib/database/repository/fileOutlineRepository.js +104 -0
- package/lib/database/repository/fileWriteRepository.d.ts +41 -0
- package/lib/database/repository/fileWriteRepository.js +93 -0
- package/lib/database/repository/hookRepository.d.ts +67 -0
- package/lib/database/repository/hookRepository.js +150 -0
- package/lib/database/repository/index.d.ts +7 -0
- package/lib/database/repository/index.js +7 -0
- package/lib/database/repository/workspaceSessionRepository.d.ts +134 -0
- package/lib/database/repository/workspaceSessionRepository.js +327 -0
- package/lib/database/service/database.d.ts +14 -0
- package/lib/database/service/database.js +21 -0
- package/lib/database/sql/schema.js +187 -0
- package/lib/database/store/database.js +6 -1
- package/lib/delegate/team.d.ts +5 -0
- package/lib/delegate/team.js +83 -20
- package/lib/discover/classify.d.ts +20 -0
- package/lib/discover/classify.js +85 -0
- package/lib/discover/host.d.ts +20 -0
- package/lib/discover/host.js +89 -0
- package/lib/discover/index.d.ts +11 -0
- package/lib/discover/index.js +11 -0
- package/lib/discover/kinds.d.ts +14 -0
- package/lib/discover/kinds.js +23 -0
- package/lib/discover/tree.d.ts +7 -0
- package/lib/discover/tree.js +432 -0
- package/lib/discover/types.d.ts +115 -0
- package/lib/discover/types.js +1 -0
- package/lib/error/boundaryRejection.d.ts +1 -1
- package/lib/evaluation/agreement.js +2 -2
- package/lib/execution/handles.js +6 -0
- package/lib/execution/pin.js +2 -2
- package/lib/file/cfb.d.ts +56 -0
- package/lib/file/cfb.js +396 -0
- package/lib/file/dependency.d.ts +151 -0
- package/lib/file/dependency.js +568 -0
- package/lib/file/directory.d.ts +34 -0
- package/lib/file/directory.js +141 -0
- package/lib/file/errors.d.ts +20 -0
- package/lib/file/errors.js +18 -0
- package/lib/file/exportGraph.d.ts +31 -0
- package/lib/file/exportGraph.js +554 -0
- package/lib/file/file.d.ts +40 -0
- package/lib/file/file.js +339 -0
- package/lib/file/importGraph.d.ts +121 -0
- package/lib/file/importGraph.js +1022 -0
- package/lib/file/index.d.ts +45 -0
- package/lib/file/index.js +30 -0
- package/lib/file/metadata.d.ts +66 -0
- package/lib/file/metadata.js +470 -0
- package/lib/file/path.d.ts +60 -0
- package/lib/file/path.js +259 -0
- package/lib/file/read.d.ts +168 -0
- package/lib/file/read.js +541 -0
- package/lib/file/runtime.d.ts +95 -0
- package/lib/file/runtime.js +150 -0
- package/lib/file/service.d.ts +227 -0
- package/lib/file/service.js +663 -0
- package/lib/file/syntaxTree.d.ts +7 -0
- package/lib/file/syntaxTree.js +38 -0
- package/lib/file/time.d.ts +38 -0
- package/lib/file/time.js +44 -0
- package/lib/file/tree.d.ts +53 -0
- package/lib/file/tree.js +417 -0
- package/lib/file/types.d.ts +371 -0
- package/lib/file/types.js +1 -0
- package/lib/file/write.d.ts +159 -0
- package/lib/file/write.js +1028 -0
- package/lib/file/zip.d.ts +35 -0
- package/lib/file/zip.js +349 -0
- package/lib/fingerprint/algorithm.d.ts +97 -0
- package/lib/fingerprint/algorithm.js +271 -0
- package/lib/fingerprint/bytes.d.ts +18 -0
- package/lib/fingerprint/bytes.js +31 -0
- package/lib/fingerprint/error.d.ts +73 -0
- package/lib/fingerprint/error.js +86 -0
- package/lib/fingerprint/file.d.ts +71 -0
- package/lib/fingerprint/file.js +254 -0
- package/lib/fingerprint/index.d.ts +37 -0
- package/lib/fingerprint/index.js +12 -0
- package/lib/fingerprint/json.d.ts +41 -0
- package/lib/fingerprint/json.js +94 -0
- package/lib/fingerprint/number.d.ts +32 -0
- package/lib/fingerprint/number.js +95 -0
- package/lib/fingerprint/policy.d.ts +54 -0
- package/lib/fingerprint/policy.js +50 -0
- package/lib/fingerprint/preimage.d.ts +84 -0
- package/lib/fingerprint/preimage.js +133 -0
- package/lib/fingerprint/raw.d.ts +26 -0
- package/lib/fingerprint/raw.js +45 -0
- package/lib/fingerprint/ref.d.ts +39 -0
- package/lib/fingerprint/ref.js +178 -0
- package/lib/fingerprint/text.d.ts +42 -0
- package/lib/fingerprint/text.js +155 -0
- package/lib/fingerprint/tree.d.ts +56 -0
- package/lib/fingerprint/tree.js +288 -0
- package/lib/fingerprint/verify.d.ts +20 -0
- package/lib/fingerprint/verify.js +99 -0
- package/lib/global/filesystem.d.ts +43 -0
- package/lib/global/filesystem.js +75 -0
- package/lib/global/index.d.ts +8 -0
- package/lib/global/index.js +8 -0
- package/lib/global/service.d.ts +51 -0
- package/lib/global/service.js +98 -0
- package/lib/governance/transport.js +18 -6
- package/lib/hook/ast.d.ts +29 -0
- package/lib/hook/ast.js +22 -0
- package/lib/hook/code.d.ts +55 -0
- package/lib/hook/code.js +47 -0
- package/lib/hook/dependency.d.ts +45 -0
- package/lib/hook/dependency.js +28 -0
- package/lib/hook/diff.d.ts +114 -0
- package/lib/hook/diff.js +327 -0
- package/lib/hook/exportation.d.ts +31 -0
- package/lib/hook/exportation.js +24 -0
- package/lib/hook/file.d.ts +44 -0
- package/lib/hook/file.js +154 -0
- package/lib/hook/importation.d.ts +33 -0
- package/lib/hook/importation.js +22 -0
- package/lib/hook/index.d.ts +30 -0
- package/lib/hook/index.js +23 -0
- package/lib/hook/outline.d.ts +35 -0
- package/lib/hook/outline.js +27 -0
- package/lib/hook/project.d.ts +65 -0
- package/lib/hook/project.js +217 -0
- package/lib/hook/types.d.ts +114 -0
- package/lib/hook/types.js +407 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +9 -0
- package/lib/lock/lease.js +28 -3
- package/lib/manifest/cardSign.d.ts +1 -1
- package/lib/manifest/cardSign.js +37 -7
- package/lib/manifest/federation.js +13 -6
- package/lib/manifest/trust.d.ts +2 -0
- package/lib/manifest/trust.js +27 -6
- package/lib/module/index.d.ts +4 -0
- package/lib/module/index.js +4 -0
- package/lib/module/mcp/client.js +21 -2
- package/lib/module/mcp/filesystemServer.d.ts +24 -0
- package/lib/module/mcp/filesystemServer.js +102 -0
- package/lib/module/mcp/http.js +32 -19
- package/lib/module/mcp/workspaceServer.js +20 -3
- package/lib/module/tool/filesystemExecutor.d.ts +18 -0
- package/lib/module/tool/filesystemExecutor.js +49 -0
- package/lib/module/tool/globalExecutor.d.ts +17 -0
- package/lib/module/tool/globalExecutor.js +39 -0
- package/lib/module/tool/globalFilesystemExecutor.d.ts +18 -0
- package/lib/module/tool/globalFilesystemExecutor.js +49 -0
- package/lib/module/tool/workspaceExecutor.d.ts +9 -0
- package/lib/module/tool/workspaceExecutor.js +16 -3
- package/lib/naming/aliases.d.ts +48 -0
- package/lib/naming/aliases.js +79 -0
- package/lib/naming/catalog.d.ts +117 -0
- package/lib/naming/catalog.js +108 -0
- package/lib/naming/grammar.d.ts +67 -0
- package/lib/naming/grammar.js +212 -0
- package/lib/naming/ids.d.ts +157 -0
- package/lib/naming/ids.js +119 -0
- package/lib/naming/index.d.ts +13 -0
- package/lib/naming/index.js +13 -0
- package/lib/outline/index.d.ts +9 -0
- package/lib/outline/index.js +8 -0
- package/lib/outline/office.d.ts +160 -0
- package/lib/outline/office.js +2375 -0
- package/lib/outline/officeBridge.d.ts +32 -0
- package/lib/outline/officeBridge.js +27 -0
- package/lib/outline/outline.d.ts +159 -0
- package/lib/outline/outline.js +837 -0
- package/lib/outline/outlineIndex.d.ts +97 -0
- package/lib/outline/outlineIndex.js +325 -0
- package/lib/outline/outlineKeywords.d.ts +59 -0
- package/lib/outline/outlineKeywords.js +143 -0
- package/lib/outline/outlineStrategies.d.ts +414 -0
- package/lib/outline/outlineStrategies.js +8324 -0
- package/lib/outline/reactOutline.d.ts +37 -0
- package/lib/outline/reactOutline.js +1070 -0
- package/lib/outline/shellOutline.d.ts +65 -0
- package/lib/outline/shellOutline.js +873 -0
- package/lib/outline/sqlOutline.d.ts +170 -0
- package/lib/outline/sqlOutline.js +1536 -0
- package/lib/outline/strategy.d.ts +46 -0
- package/lib/outline/strategy.js +1 -0
- package/lib/outline/types.d.ts +95 -0
- package/lib/outline/types.js +1 -0
- package/lib/outline/visualBasicOutline.d.ts +27 -0
- package/lib/outline/visualBasicOutline.js +750 -0
- package/lib/protocol/filesystem.d.ts +55 -0
- package/lib/protocol/filesystem.js +105 -0
- package/lib/protocol/global.d.ts +42 -0
- package/lib/protocol/global.js +63 -0
- package/lib/protocol/globalFilesystem.d.ts +40 -0
- package/lib/protocol/globalFilesystem.js +59 -0
- package/lib/protocol/index.d.ts +4 -0
- package/lib/protocol/index.js +4 -0
- package/lib/protocol/protocol.d.ts +4 -0
- package/lib/protocol/wire.js +5 -2
- package/lib/protocol/workspace.d.ts +305 -0
- package/lib/protocol/workspace.js +258 -0
- package/lib/receipt/receipt.d.ts +8 -0
- package/lib/registry/content.js +9 -3
- package/lib/runtime/kernelRuntime.js +9 -1
- package/lib/scenario/scenario.js +5 -4
- package/lib/semantic/canonical.d.ts +61 -0
- package/lib/semantic/canonical.js +135 -8
- package/lib/semantic/jsonValue.d.ts +31 -0
- package/lib/semantic/jsonValue.js +122 -0
- package/lib/semantic/sha256.js +3 -0
- package/lib/semantic/time.d.ts +14 -0
- package/lib/semantic/time.js +56 -0
- package/lib/session/context.d.ts +76 -0
- package/lib/session/context.js +419 -0
- package/lib/session/errors.d.ts +24 -0
- package/lib/session/errors.js +22 -0
- package/lib/session/identity.d.ts +24 -0
- package/lib/session/identity.js +56 -0
- package/lib/session/index.d.ts +14 -0
- package/lib/session/index.js +12 -0
- package/lib/session/registry.d.ts +130 -0
- package/lib/session/registry.js +908 -0
- package/lib/session/types.d.ts +227 -0
- package/lib/session/types.js +14 -0
- package/lib/structure/index.d.ts +1 -0
- package/lib/structure/index.js +1 -0
- package/lib/structure/trie.d.ts +88 -0
- package/lib/structure/trie.js +183 -0
- package/lib/syntax/byteIndex.d.ts +44 -0
- package/lib/syntax/byteIndex.js +148 -0
- package/lib/syntax/charset.d.ts +88 -0
- package/lib/syntax/charset.js +276 -0
- package/lib/syntax/index.d.ts +6 -0
- package/lib/syntax/index.js +5 -0
- package/lib/syntax/syntaxRegistry.d.ts +150 -0
- package/lib/syntax/syntaxRegistry.js +314 -0
- package/lib/syntax/syntaxTree.d.ts +106 -0
- package/lib/syntax/syntaxTree.js +668 -0
- package/lib/syntax/types.d.ts +15 -0
- package/lib/syntax/types.js +1 -0
- package/lib/types/common.d.ts +1 -1
- package/package.json +72 -193
- package/.editorconfig +0 -12
- package/.prettierignore +0 -17
- package/MCP-Token/347/250/216/344/270/216/344/270/213/344/270/200/344/273/243/345/267/245/345/205/267/345/215/217/350/256/256.html +0 -1763
- package/docs/annotation-campaign-A.csv +0 -54
- package/docs/annotation-campaign-B.csv +0 -54
- package/docs/annotation-campaign.csv +0 -54
- package/docs/eval/annotations-A.jsonl +0 -16
- package/docs/eval/annotations.json +0 -122
- package/docs/eval/recorded-labels.json +0 -12
- package/docs/eval/replay-cases.json +0 -14
- package/docs/eval/replay-labels-b.json +0 -14
- package/docs/examples/attention-request.json +0 -16
- package/docs/examples/checkpoint.json +0 -15
- package/docs/examples/claim.json +0 -66
- package/docs/examples/collaboration.json +0 -66
- package/docs/examples/concept-checkpoint.json +0 -15
- package/docs/examples/concept-prune-plan.json +0 -45
- package/docs/examples/federation.json +0 -126
- package/docs/examples/frame-chain.json +0 -77
- package/docs/examples/ledger-snapshot.json +0 -108
- package/docs/examples/manifest.json +0 -77
- package/docs/examples/message.json +0 -19
- package/docs/examples/other-model.json +0 -45
- package/docs/examples/plan.json +0 -50
- package/docs/examples/prune-plan.json +0 -48
- package/docs/examples/receipt.json +0 -22
- package/docs/examples/runtime-run.json +0 -573
- package/docs/examples/team.json +0 -66
- package/docs/examples/verb-note.json +0 -11
- package/docs/probes/bayes-scores.json +0 -1452
- package/docs/probes/calibration-imported.json +0 -141
- package/docs/probes/context-ast-deepseek.json +0 -1577
- package/docs/probes/deepseek-probe.json +0 -917
- package/docs/probes/eval-recorded-replay.json +0 -597
- package/docs/probes/eval-replay.json +0 -124
- package/docs/probes/eval-summary.json +0 -42
- package/docs/probes/runtime-eval.json +0 -4230
- package/docs/schemas/collaboration.schema.json +0 -73
- package/docs/schemas/common.schema.json +0 -125
- package/docs/schemas/compaction.schema.json +0 -121
- package/docs/schemas/concept-compaction.schema.json +0 -73
- package/docs/schemas/concept.schema.json +0 -97
- package/docs/schemas/epistemic.schema.json +0 -178
- package/docs/schemas/federation.schema.json +0 -66
- package/docs/schemas/frame.schema.json +0 -86
- package/docs/schemas/ledger-snapshot.schema.json +0 -30
- package/docs/schemas/manifest.schema.json +0 -169
- package/docs/schemas/message.schema.json +0 -41
- package/docs/schemas/plan.schema.json +0 -189
- package/docs/schemas/receipt.schema.json +0 -45
- package/docs/schemas/social.schema.json +0 -153
- package/docs/schemas/team.schema.json +0 -56
- package/docs/schemas/verb.schema.json +0 -120
- package/eslint.config.mts +0 -96
- package/index.html +0 -13
- package/lib/context/workspaceProtocol.d.ts +0 -30
- package/lib/context/workspaceProtocol.js +0 -49
- package/prettier.config.mts +0 -37
- package/public/favicon.svg +0 -1
- package/public/icons.svg +0 -24
- package/src/attention/attention.ts +0 -347
- package/src/attention/budget.ts +0 -72
- package/src/attention/cognition.ts +0 -519
- package/src/attention/index.ts +0 -8
- package/src/attention/interrupts.ts +0 -228
- package/src/attention/resource.ts +0 -316
- package/src/attention/social.ts +0 -217
- package/src/attention/socialTypes.ts +0 -115
- package/src/authz/authz.ts +0 -305
- package/src/authz/index.ts +0 -1
- package/src/bayes/calibration.ts +0 -204
- package/src/bayes/calibrationRegistry.ts +0 -111
- package/src/bayes/calibrationSelection.ts +0 -154
- package/src/bayes/engine.ts +0 -532
- package/src/bayes/index.ts +0 -6
- package/src/bayes/reliability.ts +0 -62
- package/src/bayes/scopedPriors.ts +0 -88
- package/src/boundary/frame.ts +0 -322
- package/src/boundary/ids.ts +0 -14
- package/src/boundary/index.ts +0 -12
- package/src/boundary/refTable.ts +0 -125
- package/src/boundary/toolCall.ts +0 -212
- package/src/concept/concept.ts +0 -75
- package/src/concept/conceptBudget.ts +0 -346
- package/src/concept/conceptBudgetTypes.ts +0 -79
- package/src/concept/index.ts +0 -3
- package/src/concurrency/idempotency.ts +0 -41
- package/src/concurrency/index.ts +0 -5
- package/src/concurrency/mutex.ts +0 -26
- package/src/concurrency/namedLocks.ts +0 -35
- package/src/concurrency/retry.ts +0 -50
- package/src/concurrency/worker.ts +0 -128
- package/src/context/agentContext.ts +0 -308
- package/src/context/ast.ts +0 -499
- package/src/context/contentStore.ts +0 -75
- package/src/context/context.ts +0 -65
- package/src/context/contextIndex.ts +0 -85
- package/src/context/document.ts +0 -137
- package/src/context/fileStorePath.ts +0 -14
- package/src/context/index.ts +0 -43
- package/src/context/lifecycle.ts +0 -221
- package/src/context/projections.ts +0 -151
- package/src/context/workspace.ts +0 -422
- package/src/context/workspaceProtocol.ts +0 -112
- package/src/context/workspaceService.ts +0 -423
- package/src/cooperation/board.ts +0 -104
- package/src/cooperation/collaboration.ts +0 -60
- package/src/cooperation/index.ts +0 -6
- package/src/cooperation/merge.ts +0 -190
- package/src/cooperation/metrics.ts +0 -57
- package/src/cooperation/session.ts +0 -131
- package/src/cooperation/unified.ts +0 -56
- package/src/counter.ts +0 -9
- package/src/database/adapter/adapters.ts +0 -35
- package/src/database/adapter/index.ts +0 -4
- package/src/database/adapter/runtimeSink.ts +0 -74
- package/src/database/adapter/sessionStore.ts +0 -32
- package/src/database/adapter/turnStore.ts +0 -23
- package/src/database/entity/agent.ts +0 -199
- package/src/database/entity/entity.ts +0 -1046
- package/src/database/entity/handle.ts +0 -79
- package/src/database/entity/index.ts +0 -32
- package/src/database/entity/message.ts +0 -74
- package/src/database/entity/meta.ts +0 -11
- package/src/database/entity/object.ts +0 -42
- package/src/database/entity/outbox.ts +0 -15
- package/src/database/entity/process.ts +0 -65
- package/src/database/entity/registry.ts +0 -155
- package/src/database/entity/runtimeApproval.ts +0 -30
- package/src/database/entity/runtimeSession.ts +0 -13
- package/src/database/entity/runtimeTurn.ts +0 -15
- package/src/database/entity/thread.ts +0 -85
- package/src/database/entity/window.ts +0 -85
- package/src/database/entity/worker.ts +0 -90
- package/src/database/index.ts +0 -6
- package/src/database/repository/addressSpaceRepository.ts +0 -72
- package/src/database/repository/agentRepository.ts +0 -460
- package/src/database/repository/base.ts +0 -41
- package/src/database/repository/executionRepository.ts +0 -477
- package/src/database/repository/handleRepository.ts +0 -64
- package/src/database/repository/index.ts +0 -20
- package/src/database/repository/messageRepository.ts +0 -52
- package/src/database/repository/objectRepository.ts +0 -69
- package/src/database/repository/outboxRepository.ts +0 -63
- package/src/database/repository/processRepository.ts +0 -58
- package/src/database/repository/registryRepository.ts +0 -119
- package/src/database/repository/repository.ts +0 -491
- package/src/database/repository/runtimeApprovalRepository.ts +0 -44
- package/src/database/repository/runtimeSessionRepository.ts +0 -27
- package/src/database/repository/runtimeTurnRepository.ts +0 -39
- package/src/database/repository/socialRepository.ts +0 -185
- package/src/database/repository/threadRepository.ts +0 -57
- package/src/database/repository/windowRepository.ts +0 -88
- package/src/database/repository/workerRepository.ts +0 -69
- package/src/database/service/database.ts +0 -90
- package/src/database/service/handleService.ts +0 -48
- package/src/database/service/index.ts +0 -16
- package/src/database/service/messageService.ts +0 -61
- package/src/database/service/objectService.ts +0 -59
- package/src/database/service/processService.ts +0 -61
- package/src/database/service/registryServices.ts +0 -88
- package/src/database/service/service.ts +0 -183
- package/src/database/service/stepService.ts +0 -53
- package/src/database/service/threadService.ts +0 -65
- package/src/database/service/windowService.ts +0 -30
- package/src/database/service/workerService.ts +0 -57
- package/src/database/sql/index.ts +0 -3
- package/src/database/sql/schema.ts +0 -418
- package/src/database/sql/sql.ts +0 -543
- package/src/database/store/database.ts +0 -210
- package/src/database/store/index.ts +0 -3
- package/src/database/store/store.ts +0 -266
- package/src/delegate/index.ts +0 -2
- package/src/delegate/team.ts +0 -268
- package/src/delegate/teamTypes.ts +0 -47
- package/src/diagnosis/checklist.ts +0 -74
- package/src/diagnosis/context.ts +0 -93
- package/src/diagnosis/frame.ts +0 -256
- package/src/diagnosis/index.ts +0 -5
- package/src/diagnosis/router.ts +0 -72
- package/src/diagnosis/types.ts +0 -89
- package/src/error/agentError.ts +0 -16
- package/src/error/ampError.ts +0 -20
- package/src/error/authzError.ts +0 -14
- package/src/error/boundaryRejection.ts +0 -20
- package/src/error/index.ts +0 -7
- package/src/error/kernelError.ts +0 -27
- package/src/error/mailboxError.ts +0 -9
- package/src/error/windowError.ts +0 -12
- package/src/evaluation/agreement.ts +0 -96
- package/src/evaluation/index.ts +0 -2
- package/src/evaluation/labels.ts +0 -241
- package/src/evidence/evidenceGraph.ts +0 -205
- package/src/evidence/index.ts +0 -4
- package/src/evidence/revalidation.ts +0 -191
- package/src/execution/exec.ts +0 -408
- package/src/execution/handles.ts +0 -65
- package/src/execution/index.ts +0 -3
- package/src/execution/pin.ts +0 -154
- package/src/frame/frame.ts +0 -70
- package/src/frame/index.ts +0 -1
- package/src/goal/goal.ts +0 -43
- package/src/goal/index.ts +0 -2
- package/src/goal/plan.ts +0 -196
- package/src/governance/attentionManifest.ts +0 -802
- package/src/governance/audit.ts +0 -362
- package/src/governance/budget.ts +0 -628
- package/src/governance/context.ts +0 -356
- package/src/governance/control.ts +0 -159
- package/src/governance/cooperation.ts +0 -479
- package/src/governance/credential.ts +0 -359
- package/src/governance/httpServer.ts +0 -99
- package/src/governance/index.ts +0 -32
- package/src/governance/legal.ts +0 -574
- package/src/governance/matrix.ts +0 -460
- package/src/governance/perspectives.ts +0 -406
- package/src/governance/signing.ts +0 -407
- package/src/governance/store.ts +0 -125
- package/src/governance/switching.ts +0 -459
- package/src/governance/toolPolicy.ts +0 -80
- package/src/governance/transport.ts +0 -204
- package/src/governance/types.ts +0 -380
- package/src/governance/workflow.ts +0 -743
- package/src/index.ts +0 -11
- package/src/interaction/index.ts +0 -1
- package/src/interaction/interaction.ts +0 -391
- package/src/ipc/index.ts +0 -4
- package/src/ipc/mailbox.ts +0 -132
- package/src/ipc/memorySocialStore.ts +0 -93
- package/src/ipc/social.ts +0 -93
- package/src/kernel/index.ts +0 -14
- package/src/kernel/scheduler.ts +0 -498
- package/src/ledger/checkpoint.ts +0 -304
- package/src/ledger/index.ts +0 -4
- package/src/ledger/ledger.ts +0 -31
- package/src/ledger/persistence.ts +0 -159
- package/src/ledger/share.ts +0 -80
- package/src/lock/index.ts +0 -2
- package/src/lock/lease.ts +0 -74
- package/src/main.ts +0 -199
- package/src/manifest/agentCard.ts +0 -72
- package/src/manifest/cardSign.ts +0 -87
- package/src/manifest/federation.ts +0 -237
- package/src/manifest/federationTypes.ts +0 -55
- package/src/manifest/index.ts +0 -8
- package/src/manifest/keys.ts +0 -643
- package/src/manifest/manifest.ts +0 -114
- package/src/manifest/sign.ts +0 -134
- package/src/manifest/trust.ts +0 -146
- package/src/mission/index.ts +0 -2
- package/src/mission/missionQueue.ts +0 -75
- package/src/module/index.ts +0 -9
- package/src/module/llm/deepseek.ts +0 -214
- package/src/module/llm/llm.ts +0 -84
- package/src/module/mcp/client.ts +0 -110
- package/src/module/mcp/http.ts +0 -102
- package/src/module/mcp/protocol.ts +0 -77
- package/src/module/mcp/server.ts +0 -148
- package/src/module/mcp/transport.ts +0 -30
- package/src/module/mcp/workspaceServer.ts +0 -111
- package/src/module/sandbox/sandbox.ts +0 -29
- package/src/module/tool/mcpExecutor.ts +0 -54
- package/src/module/tool/policy.ts +0 -52
- package/src/module/tool/redact.ts +0 -29
- package/src/module/tool/tool.ts +0 -53
- package/src/module/tool/workspaceExecutor.ts +0 -35
- package/src/policy/guard.ts +0 -240
- package/src/policy/index.ts +0 -2
- package/src/policy/policy.ts +0 -561
- package/src/process/agent.ts +0 -341
- package/src/process/agentService.ts +0 -236
- package/src/process/agentStore.ts +0 -378
- package/src/process/executionStore.ts +0 -151
- package/src/process/index.ts +0 -5
- package/src/process/process.ts +0 -240
- package/src/process/transitions.ts +0 -19
- package/src/progress/index.ts +0 -2
- package/src/progress/progress.ts +0 -85
- package/src/protocol/a2a.ts +0 -120
- package/src/protocol/channel.ts +0 -44
- package/src/protocol/envelope.ts +0 -655
- package/src/protocol/httpChannel.ts +0 -87
- package/src/protocol/index.ts +0 -6
- package/src/protocol/protocol.ts +0 -138
- package/src/protocol/wire.ts +0 -60
- package/src/receipt/index.ts +0 -1
- package/src/receipt/receipt.ts +0 -47
- package/src/registry/content.ts +0 -69
- package/src/registry/index.ts +0 -23
- package/src/registry/registry.ts +0 -599
- package/src/runtime/action.ts +0 -87
- package/src/runtime/behavior.ts +0 -330
- package/src/runtime/behaviorTuning.ts +0 -163
- package/src/runtime/cognitiveRuntime.ts +0 -703
- package/src/runtime/escalation.ts +0 -35
- package/src/runtime/governedTask.ts +0 -233
- package/src/runtime/index.ts +0 -15
- package/src/runtime/kernelRuntime.ts +0 -144
- package/src/runtime/operation.ts +0 -35
- package/src/runtime/replay.ts +0 -71
- package/src/runtime/routing.ts +0 -58
- package/src/runtime/safety.ts +0 -48
- package/src/runtime/session.ts +0 -341
- package/src/runtime/sessionStore.ts +0 -43
- package/src/runtime/telemetry.ts +0 -55
- package/src/runtime/turnStore.ts +0 -30
- package/src/scenario/index.ts +0 -1
- package/src/scenario/scenario.ts +0 -299
- package/src/semantic/canonical.ts +0 -24
- package/src/semantic/index.ts +0 -2
- package/src/semantic/sha256.ts +0 -82
- package/src/storage/appendLog.ts +0 -372
- package/src/storage/fileAppendSink.ts +0 -40
- package/src/storage/index.ts +0 -2
- package/src/store/bindCache.ts +0 -22
- package/src/store/cache.ts +0 -191
- package/src/store/context.ts +0 -31
- package/src/store/handleStore.ts +0 -31
- package/src/store/index.ts +0 -9
- package/src/store/messageStore.ts +0 -31
- package/src/store/objectStore.ts +0 -31
- package/src/store/processStore.ts +0 -31
- package/src/store/threadStore.ts +0 -31
- package/src/store/windowStore.ts +0 -31
- package/src/structure/abstractSyntaxTree.ts +0 -493
- package/src/structure/avlTree.ts +0 -408
- package/src/structure/binarySearchTree.ts +0 -352
- package/src/structure/binaryTree.ts +0 -525
- package/src/structure/bloomFilter.ts +0 -231
- package/src/structure/compare.ts +0 -110
- package/src/structure/cuckooFilter.ts +0 -337
- package/src/structure/deque.ts +0 -223
- package/src/structure/filterKey.ts +0 -36
- package/src/structure/hash.ts +0 -279
- package/src/structure/heap.ts +0 -268
- package/src/structure/index.ts +0 -20
- package/src/structure/iterator.ts +0 -22
- package/src/structure/lru.ts +0 -619
- package/src/structure/ordered.ts +0 -399
- package/src/structure/priority.ts +0 -915
- package/src/structure/queue.ts +0 -168
- package/src/structure/redBlackTree.ts +0 -680
- package/src/structure/segmentTree.ts +0 -248
- package/src/structure/stack.ts +0 -118
- package/src/structure/unordered.ts +0 -407
- package/src/style.css +0 -278
- package/src/thread/index.ts +0 -2
- package/src/thread/thread.ts +0 -176
- package/src/thread/transitions.ts +0 -17
- package/src/types/common.ts +0 -119
- package/src/types/index.ts +0 -23
- package/src/warrant/epistemic.ts +0 -154
- package/src/warrant/index.ts +0 -3
- package/src/warrant/inquiry.ts +0 -166
- package/src/warrant/warrant.ts +0 -179
- package/src/window/compaction.ts +0 -403
- package/src/window/compactionTypes.ts +0 -119
- package/src/window/index.ts +0 -7
- package/src/window/page.ts +0 -18
- package/src/window/window.ts +0 -244
- package/tools/_helpers.ts +0 -34
- package/tools/a2a-check.ts +0 -110
- package/tools/a2a-flow-check.ts +0 -78
- package/tools/agent-card-check.ts +0 -76
- package/tools/agent-check.ts +0 -236
- package/tools/agent-store-check.ts +0 -153
- package/tools/agreement-check.ts +0 -27
- package/tools/annotation-server-check.ts +0 -48
- package/tools/annotation-server.ts +0 -230
- package/tools/annotation-status.ts +0 -65
- package/tools/approval-access-check.ts +0 -66
- package/tools/arch-check.ts +0 -72
- package/tools/attention-core-check.ts +0 -48
- package/tools/attention-resource-check.ts +0 -169
- package/tools/audit-check.ts +0 -207
- package/tools/authority-check.ts +0 -124
- package/tools/authz-check.ts +0 -138
- package/tools/bayes-check.ts +0 -162
- package/tools/bayes-probe.ts +0 -154
- package/tools/behavior-tuning-check.ts +0 -53
- package/tools/board-check.ts +0 -87
- package/tools/boundary-check.ts +0 -199
- package/tools/bundle-trust-check.ts +0 -96
- package/tools/calibrate-imported.ts +0 -108
- package/tools/calibration-check.ts +0 -44
- package/tools/calibration-registry-check.ts +0 -40
- package/tools/calibration-sim.ts +0 -40
- package/tools/card-sign-check.ts +0 -71
- package/tools/card-trust-check.ts +0 -78
- package/tools/channel-check.ts +0 -86
- package/tools/checkpoint-check.ts +0 -620
- package/tools/cleanup-style-configs.ts +0 -29
- package/tools/cognition-check.ts +0 -648
- package/tools/cognitive-runtime-check.ts +0 -609
- package/tools/collaboration-demo.ts +0 -78
- package/tools/compaction-check.ts +0 -266
- package/tools/concept-check.ts +0 -260
- package/tools/concurrency-check.ts +0 -242
- package/tools/conformance-runtime.ts +0 -389
- package/tools/conformance.ts +0 -651
- package/tools/context-ast-check.ts +0 -90
- package/tools/context-ast-deepseek.ts +0 -242
- package/tools/context-graph-bench.ts +0 -50
- package/tools/context-graph-check.ts +0 -229
- package/tools/context-index-check.ts +0 -48
- package/tools/context-lifecycle-check.ts +0 -69
- package/tools/context-projection-check.ts +0 -73
- package/tools/context-scope-check.ts +0 -134
- package/tools/context-storage-check.ts +0 -113
- package/tools/cooperation-check.ts +0 -517
- package/tools/cooperation-http-check.ts +0 -125
- package/tools/deepseek-llm-check.ts +0 -147
- package/tools/deepseek-probe.ts +0 -494
- package/tools/diagnosis-check.ts +0 -109
- package/tools/diagnosis-router-check.ts +0 -50
- package/tools/document-context-check.ts +0 -237
- package/tools/envelope-check.ts +0 -659
- package/tools/eslint-rules/index.ts +0 -26
- package/tools/eslint-rules/rules/jsdoc-comment-format.ts +0 -105
- package/tools/eslint-rules/rules/no-function-keyword.ts +0 -60
- package/tools/eslint-rules/rules/no-multiline-parameters.ts +0 -71
- package/tools/eslint-rules/rules/no-multiline-type-parameters.ts +0 -57
- package/tools/eslint-rules/rules/no-undefined-comparison.ts +0 -115
- package/tools/eslint-rules/rules/prefer-template-for-string-conversion.ts +0 -97
- package/tools/eslint-rules/rules/require-typeof-parentheses.ts +0 -49
- package/tools/eslint-rules/rules/require-variable-type.ts +0 -36
- package/tools/eslint-rules/rules/variable-naming.ts +0 -175
- package/tools/eval-recorded-replay.ts +0 -215
- package/tools/eval-replay.ts +0 -139
- package/tools/eval-summary.ts +0 -136
- package/tools/evidence-revalidation-check.ts +0 -235
- package/tools/exec-check.ts +0 -217
- package/tools/federation-check.ts +0 -166
- package/tools/federation-demo.ts +0 -45
- package/tools/filter-check.ts +0 -243
- package/tools/governance-check.ts +0 -680
- package/tools/governance-store-check.ts +0 -131
- package/tools/governed-task-check.ts +0 -227
- package/tools/guard-check.ts +0 -122
- package/tools/http-channel-check.ts +0 -125
- package/tools/import-campaign.ts +0 -28
- package/tools/inquiry-check.ts +0 -126
- package/tools/interaction-check.ts +0 -171
- package/tools/interrupts-check.ts +0 -173
- package/tools/ipc-check.ts +0 -170
- package/tools/kernel-async-check.ts +0 -136
- package/tools/kernel-check.ts +0 -369
- package/tools/kernel-runtime-check.ts +0 -276
- package/tools/keys-check.ts +0 -559
- package/tools/label-audit.ts +0 -70
- package/tools/labels-workflow-check.ts +0 -49
- package/tools/linear-structure-check.ts +0 -524
- package/tools/live-exec.ts +0 -62
- package/tools/live-governance-eval.ts +0 -813
- package/tools/live-legacy.ts +0 -50
- package/tools/lru-check.ts +0 -182
- package/tools/make-annotation-campaign.ts +0 -57
- package/tools/mcp-executor-check.ts +0 -33
- package/tools/merge-annotations.ts +0 -32
- package/tools/merge-check.ts +0 -98
- package/tools/metrics-check.ts +0 -84
- package/tools/net-probe.ts +0 -107
- package/tools/oauth-probe.ts +0 -117
- package/tools/outbox-check.ts +0 -50
- package/tools/persistence-check.ts +0 -144
- package/tools/pin-check.ts +0 -116
- package/tools/platform-check.ts +0 -281
- package/tools/policy-check.ts +0 -514
- package/tools/prettier-plugin/index.mts +0 -84
- package/tools/priority-check.ts +0 -627
- package/tools/probe-context7.ts +0 -63
- package/tools/registry-check.ts +0 -252
- package/tools/reliability-check.ts +0 -25
- package/tools/retry-check.ts +0 -85
- package/tools/rewrite-declaration-extensions.ts +0 -98
- package/tools/runtime-check.ts +0 -165
- package/tools/runtime-deepseek-check.ts +0 -85
- package/tools/runtime-eval.ts +0 -358
- package/tools/scenario-check.ts +0 -161
- package/tools/scenario-incident.ts +0 -162
- package/tools/scoped-priors-check.ts +0 -35
- package/tools/scoped-priors-pooling.ts +0 -34
- package/tools/segment-ast-check.ts +0 -649
- package/tools/session-check.ts +0 -196
- package/tools/session-store-check.ts +0 -73
- package/tools/share-check.ts +0 -88
- package/tools/sign-check.ts +0 -95
- package/tools/signing-check.ts +0 -275
- package/tools/snapshot-demo.ts +0 -65
- package/tools/social-check.ts +0 -146
- package/tools/structure-compare-check.ts +0 -95
- package/tools/support/documentScanner.ts +0 -577
- package/tools/support/texScanner.ts +0 -631
- package/tools/support/workspaceScanner.ts +0 -476
- package/tools/team-check.ts +0 -163
- package/tools/team-demo.ts +0 -36
- package/tools/telemetry-check.ts +0 -44
- package/tools/tex-context-check.ts +0 -263
- package/tools/tool-gate-check.ts +0 -98
- package/tools/tree-structure-check.ts +0 -786
- package/tools/trust-flow-check.ts +0 -158
- package/tools/turn-store-check.ts +0 -57
- package/tools/unified-check.ts +0 -83
- package/tools/validate.ts +0 -309
- package/tools/wire-check.ts +0 -96
- package/tools/workspace-agent-check.ts +0 -486
- package/tools/workspace-agent-demo.ts +0 -62
- package/tools/workspace-agent-server.ts +0 -101
- package/tools/workspace-context-check.ts +0 -331
- package/tools/workspace-context.ts +0 -131
- package/tsconfig.build.json +0 -14
- package/tsconfig.json +0 -24
- package/tsconfig.tools.json +0 -31
- package/viz/context-ast.json +0 -1577
package/src/boundary/frame.ts
DELETED
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Frame boundary: the only place a `Frame` may be constructed.
|
|
3
|
-
*
|
|
4
|
-
* The reference runtime builds frames from object literals, so a frame can
|
|
5
|
-
* currently cite a target that does not exist, omit a reason, or carry an
|
|
6
|
-
* unbounded exclusion list. This module turns those into rejections and returns
|
|
7
|
-
* the part of the exclusion list that does not fit as `deferred`, so nothing is
|
|
8
|
-
* silently dropped.
|
|
9
|
-
*
|
|
10
|
-
* The frame is not extended with new fields: `frame.schema.json` sets
|
|
11
|
-
* `additionalProperties: false`, so aggregates belong to a later capacity layer,
|
|
12
|
-
* not to this object.
|
|
13
|
-
*/
|
|
14
|
-
import type { Id, Ref, Timestamp } from "../types/common.ts";
|
|
15
|
-
import type { Frame, FrameBudget, FrameMode, Ignored, Impasse, Slot } from "../frame/frame.ts";
|
|
16
|
-
|
|
17
|
-
import { digestOf } from "../semantic/canonical.ts";
|
|
18
|
-
import { isId } from "./ids.ts";
|
|
19
|
-
import { BoundaryRejection } from "../error/boundaryRejection.ts";
|
|
20
|
-
import type { RefTable } from "./refTable.ts";
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Draft accepted by {@link frameFrom}; `digest` is computed here, never supplied.
|
|
24
|
-
*/
|
|
25
|
-
export interface FrameDraft {
|
|
26
|
-
id: Id;
|
|
27
|
-
agent: Id;
|
|
28
|
-
cycle: number;
|
|
29
|
-
ts?: Timestamp;
|
|
30
|
-
parent?: Ref;
|
|
31
|
-
mode: FrameMode;
|
|
32
|
-
goal?: Ref;
|
|
33
|
-
slots: Slot[];
|
|
34
|
-
ignored?: Ignored[];
|
|
35
|
-
budget: FrameBudget;
|
|
36
|
-
open_questions?: Ref[];
|
|
37
|
-
impasse?: Impasse;
|
|
38
|
-
note?: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface FrameBoundaryOptions {
|
|
42
|
-
/**
|
|
43
|
-
* May lower the schema ceiling of 9, never raise it. Defaults to 9.
|
|
44
|
-
*/
|
|
45
|
-
maxSlots?: number;
|
|
46
|
-
/**
|
|
47
|
-
* Visible exclusions kept on the frame; the rest is returned as `deferred`. Defaults to 50.
|
|
48
|
-
*/
|
|
49
|
-
maxIgnored?: number;
|
|
50
|
-
/**
|
|
51
|
-
* Clock for `ts` when the draft omits it. Hosts should pass their ledger clock.
|
|
52
|
-
*/
|
|
53
|
-
now?: () => Timestamp;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export interface FrameBoundaryResult {
|
|
57
|
-
frame: Frame;
|
|
58
|
-
/**
|
|
59
|
-
* Exclusions beyond `maxIgnored`, in input order. Never silently dropped.
|
|
60
|
-
*/
|
|
61
|
-
deferred: Ignored[];
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const SchemaMaxSlots: number = 9;
|
|
65
|
-
const DefaultMaxIgnored: number = 50;
|
|
66
|
-
|
|
67
|
-
const BudgetDimensions: readonly string[] = ["tokens", "ms", "calls", "interrupts", "money"];
|
|
68
|
-
const FrameModes: readonly FrameMode[] = ["explore", "exploit", "triage", "reflect", "rest"];
|
|
69
|
-
const SlotRoles: readonly Slot["role"][] = ["goal", "question", "evidence", "concept", "process", "tool", "memory", "self", "other", "threat", "artifact"];
|
|
70
|
-
const SlotStates: readonly Slot["state"][] = ["active", "released", "evicted", "done"];
|
|
71
|
-
const IgnoredReasons: readonly Ignored["reason"][] = ["low_voi", "out_of_scope", "untrusted", "budget", "blocked", "habituated", "deferred"];
|
|
72
|
-
const ImpasseStates: readonly Impasse["state"][] = ["TIE", "STUCK", "STALLED", "CONFLICT", "INFEASIBLE", "UNKNOWN", "UNVERIFIED", "DRIFT", "BUDGET"];
|
|
73
|
-
const Tiers: readonly NonNullable<Slot["tier"]>[] = ["T0", "T1", "T2", "T3", "T4"];
|
|
74
|
-
|
|
75
|
-
type ProblemChecker = (value: unknown, at: string, problems: string[]) => void;
|
|
76
|
-
|
|
77
|
-
type RefTableChecker = (value: unknown, refs: RefTable, at: string, problems: string[]) => void;
|
|
78
|
-
|
|
79
|
-
type FrameBoundaryBuilder = (draft: FrameDraft, refs: RefTable, options?: FrameBoundaryOptions) => FrameBoundaryResult;
|
|
80
|
-
|
|
81
|
-
const isRecord: (value: unknown) => value is Record<string, unknown> = (value: unknown): value is Record<string, unknown> =>
|
|
82
|
-
typeof(value) === "object" && value !== null && !Array.isArray(value);
|
|
83
|
-
|
|
84
|
-
const checkBudget: ProblemChecker = (value: unknown, at: string, problems: string[]): void => {
|
|
85
|
-
if (!isRecord(value)) {
|
|
86
|
-
problems.push(`${at} must be an object`);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const budgetKeys: string[] = Object.keys(value);
|
|
90
|
-
for (let keyIndex: number = 0; keyIndex < budgetKeys.length; keyIndex += 1) {
|
|
91
|
-
const key: string = budgetKeys[keyIndex];
|
|
92
|
-
const amount: unknown = value[key];
|
|
93
|
-
if (!BudgetDimensions.includes(key)) {
|
|
94
|
-
problems.push(`${at}.${key} is not a budget dimension`);
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if (typeof(amount) !== "number" || !Number.isFinite(amount) || amount < 0) {
|
|
98
|
-
problems.push(`${at}.${key} must be a non-negative finite number`);
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
if (key !== "money" && !Number.isInteger(amount)) {
|
|
102
|
-
problems.push(`${at}.${key} must be an integer`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
const checkRef: RefTableChecker = (value: unknown, refs: RefTable, at: string, problems: string[]): void => {
|
|
108
|
-
if (!isRecord(value)) {
|
|
109
|
-
problems.push(`${at} must be a Ref object`);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
if (typeof(value.kind) !== "string" || !isId(value.id)) {
|
|
113
|
-
problems.push(`${at} must have a string kind and a valid id`);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
if (!refs.has(value as unknown as Ref)) {
|
|
117
|
-
const problem: string | undefined = refs.check(value as unknown as Ref);
|
|
118
|
-
if (problem !== (void 0)) {
|
|
119
|
-
problems.push(`${at} ${problem}`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
const checkSlot: RefTableChecker = (value: unknown, refs: RefTable, at: string, problems: string[]): void => {
|
|
125
|
-
if (!isRecord(value)) {
|
|
126
|
-
problems.push(`${at} must be an object`);
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
checkRef(value.target, refs, `${at}.target`, problems);
|
|
130
|
-
if (typeof(value.role) !== "string" || !SlotRoles.includes(value.role as Slot["role"])) {
|
|
131
|
-
problems.push(`${at}.role is not a slot role`);
|
|
132
|
-
}
|
|
133
|
-
const salience: unknown = value.salience;
|
|
134
|
-
if (typeof(salience) !== "number" || salience < 0 || salience > 1) {
|
|
135
|
-
problems.push(`${at}.salience must be in [0,1]`);
|
|
136
|
-
}
|
|
137
|
-
if (typeof(value.why) !== "string" || value.why.trim().length === 0) {
|
|
138
|
-
problems.push(`${at}.why is empty`);
|
|
139
|
-
}
|
|
140
|
-
checkBudget(value.cost, `${at}.cost`, problems);
|
|
141
|
-
if (typeof(value.state) !== "string" || !SlotStates.includes(value.state as Slot["state"])) {
|
|
142
|
-
problems.push(`${at}.state is not a slot state`);
|
|
143
|
-
}
|
|
144
|
-
if (value.tier !== (void 0) && (typeof(value.tier) !== "string" || !Tiers.includes(value.tier as NonNullable<Slot["tier"]>))) {
|
|
145
|
-
problems.push(`${at}.tier is not a tier`);
|
|
146
|
-
}
|
|
147
|
-
const voi: unknown = value.voi;
|
|
148
|
-
if (voi !== (void 0) && (typeof(voi) !== "number" || voi < 0 || voi > 1)) {
|
|
149
|
-
problems.push(`${at}.voi must be in [0,1]`);
|
|
150
|
-
}
|
|
151
|
-
if (value.budget !== (void 0)) {
|
|
152
|
-
checkBudget(value.budget, `${at}.budget`, problems);
|
|
153
|
-
}
|
|
154
|
-
const ttlTurns: unknown = value.ttl_turns;
|
|
155
|
-
if (ttlTurns !== (void 0) && (typeof(ttlTurns) !== "number" || !Number.isInteger(ttlTurns) || ttlTurns < 0)) {
|
|
156
|
-
problems.push(`${at}.ttl_turns must be a non-negative integer`);
|
|
157
|
-
}
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
const checkIgnored: RefTableChecker = (value: unknown, refs: RefTable, at: string, problems: string[]): void => {
|
|
161
|
-
if (!isRecord(value)) {
|
|
162
|
-
problems.push(`${at} must be an object`);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
checkRef(value.target, refs, `${at}.target`, problems);
|
|
166
|
-
if (typeof(value.reason) !== "string" || !IgnoredReasons.includes(value.reason as Ignored["reason"])) {
|
|
167
|
-
problems.push(`${at}.reason is not an ignored reason`);
|
|
168
|
-
}
|
|
169
|
-
if (typeof(value.revisit_if) !== "string" || value.revisit_if.trim().length === 0) {
|
|
170
|
-
problems.push(`${at}.revisit_if is empty`);
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
const checkImpasse: ProblemChecker = (value: unknown, at: string, problems: string[]): void => {
|
|
175
|
-
if (!isRecord(value)) {
|
|
176
|
-
problems.push(`${at} must be an object`);
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
if (typeof(value.state) !== "string" || !ImpasseStates.includes(value.state as Impasse["state"])) {
|
|
180
|
-
problems.push(`${at}.state is not an impasse state`);
|
|
181
|
-
}
|
|
182
|
-
if (value.detail !== (void 0) && typeof(value.detail) !== "string") {
|
|
183
|
-
problems.push(`${at}.detail must be a string`);
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Validate a draft and return the only frame it permits.
|
|
189
|
-
*
|
|
190
|
-
* @throws BoundaryRejection `invalid_frame` with every problem found.
|
|
191
|
-
*/
|
|
192
|
-
export const frameFrom: FrameBoundaryBuilder = (draft: FrameDraft, refs: RefTable, options: FrameBoundaryOptions = {}): FrameBoundaryResult => {
|
|
193
|
-
const problems: string[] = [];
|
|
194
|
-
|
|
195
|
-
if (!isId(draft.id)) {
|
|
196
|
-
problems.push("id is not a valid AMP id");
|
|
197
|
-
}
|
|
198
|
-
if (!isId(draft.agent)) {
|
|
199
|
-
problems.push("agent is not a valid AMP id");
|
|
200
|
-
}
|
|
201
|
-
if (!Number.isSafeInteger(draft.cycle) || draft.cycle < 0) {
|
|
202
|
-
problems.push("cycle must be a non-negative integer");
|
|
203
|
-
}
|
|
204
|
-
if (!FrameModes.includes(draft.mode)) {
|
|
205
|
-
problems.push("mode is not a frame mode");
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
const ts: Timestamp = draft.ts ?? (options.now ? options.now() : new Date().toISOString());
|
|
209
|
-
if (typeof(ts) !== "string" || Number.isNaN(Date.parse(ts))) {
|
|
210
|
-
problems.push("ts is not a date-time");
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
const requestedMaxSlots: number = options.maxSlots ?? SchemaMaxSlots;
|
|
214
|
-
if (!Number.isInteger(requestedMaxSlots) || requestedMaxSlots < 0 || requestedMaxSlots > SchemaMaxSlots) {
|
|
215
|
-
problems.push(`maxSlots must be an integer in [0,${SchemaMaxSlots}]`);
|
|
216
|
-
}
|
|
217
|
-
const maxSlots: number = Math.min(Math.max(0, requestedMaxSlots), SchemaMaxSlots);
|
|
218
|
-
|
|
219
|
-
const requestedMaxIgnored: number = options.maxIgnored ?? DefaultMaxIgnored;
|
|
220
|
-
if (!Number.isInteger(requestedMaxIgnored) || requestedMaxIgnored < 0) {
|
|
221
|
-
problems.push("maxIgnored must be a non-negative integer");
|
|
222
|
-
}
|
|
223
|
-
const maxIgnored: number = Math.max(0, requestedMaxIgnored);
|
|
224
|
-
|
|
225
|
-
if (!Array.isArray(draft.slots)) {
|
|
226
|
-
problems.push("slots must be an array");
|
|
227
|
-
} else {
|
|
228
|
-
if (draft.slots.length > maxSlots) {
|
|
229
|
-
problems.push(`slots has ${draft.slots.length} entries, max is ${maxSlots}`);
|
|
230
|
-
}
|
|
231
|
-
draft.slots.forEach((slot, index) => checkSlot(slot, refs, `slots[${index}]`, problems));
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
const declaredIgnored: unknown = draft.ignored;
|
|
235
|
-
const ignored: Ignored[] = Array.isArray(declaredIgnored) ? declaredIgnored : [];
|
|
236
|
-
if (declaredIgnored !== (void 0) && !Array.isArray(declaredIgnored)) {
|
|
237
|
-
problems.push("ignored must be an array");
|
|
238
|
-
}
|
|
239
|
-
ignored.forEach((item, index) => checkIgnored(item, refs, `ignored[${index}]`, problems));
|
|
240
|
-
|
|
241
|
-
const budgetValue: unknown = draft.budget;
|
|
242
|
-
if (!isRecord(budgetValue)) {
|
|
243
|
-
problems.push("budget must be an object");
|
|
244
|
-
} else {
|
|
245
|
-
const allocated: unknown = budgetValue.allocated;
|
|
246
|
-
const spent: unknown = budgetValue.spent;
|
|
247
|
-
checkBudget(allocated, "budget.allocated", problems);
|
|
248
|
-
checkBudget(spent, "budget.spent", problems);
|
|
249
|
-
if (isRecord(allocated) && isRecord(spent)) {
|
|
250
|
-
if (Object.keys(allocated).length === 0) {
|
|
251
|
-
problems.push("budget.allocated must set at least one dimension");
|
|
252
|
-
}
|
|
253
|
-
for (let dimensionIndex: number = 0; dimensionIndex < BudgetDimensions.length; dimensionIndex += 1) {
|
|
254
|
-
const key: string = BudgetDimensions[dimensionIndex];
|
|
255
|
-
const limit: unknown = allocated[key];
|
|
256
|
-
const used: unknown = spent[key];
|
|
257
|
-
if (typeof(limit) === "number" && typeof(used) === "number" && used > limit) {
|
|
258
|
-
problems.push(`budget.spent.${key} exceeds budget.allocated.${key}`);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
if (draft.parent !== (void 0)) {
|
|
265
|
-
checkRef(draft.parent, refs, "parent", problems);
|
|
266
|
-
}
|
|
267
|
-
if (draft.goal !== (void 0)) {
|
|
268
|
-
checkRef(draft.goal, refs, "goal", problems);
|
|
269
|
-
}
|
|
270
|
-
if (draft.open_questions !== (void 0)) {
|
|
271
|
-
if (!Array.isArray(draft.open_questions)) {
|
|
272
|
-
problems.push("open_questions must be an array");
|
|
273
|
-
} else {
|
|
274
|
-
draft.open_questions.forEach((ref, index) => checkRef(ref, refs, `open_questions[${index}]`, problems));
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
if (draft.impasse !== (void 0)) {
|
|
278
|
-
checkImpasse(draft.impasse, "impasse", problems);
|
|
279
|
-
}
|
|
280
|
-
if (draft.note !== (void 0) && typeof(draft.note) !== "string") {
|
|
281
|
-
problems.push("note must be a string");
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
if (problems.length > 0) {
|
|
285
|
-
throw new BoundaryRejection("invalid_frame", problems);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
const visible: Ignored[] = ignored.slice(0, maxIgnored);
|
|
289
|
-
const deferred: Ignored[] = ignored.slice(maxIgnored);
|
|
290
|
-
const body: Omit<Frame, "digest"> = {
|
|
291
|
-
amp: "0.1",
|
|
292
|
-
kind: "frame",
|
|
293
|
-
id: draft.id,
|
|
294
|
-
agent: draft.agent,
|
|
295
|
-
cycle: draft.cycle,
|
|
296
|
-
ts,
|
|
297
|
-
mode: draft.mode,
|
|
298
|
-
slots: [...draft.slots],
|
|
299
|
-
budget: { allocated: { ...draft.budget.allocated }, spent: { ...draft.budget.spent } },
|
|
300
|
-
};
|
|
301
|
-
if (draft.parent !== (void 0)) {
|
|
302
|
-
body.parent = draft.parent;
|
|
303
|
-
}
|
|
304
|
-
if (draft.goal !== (void 0)) {
|
|
305
|
-
body.goal = draft.goal;
|
|
306
|
-
}
|
|
307
|
-
if (visible.length > 0) {
|
|
308
|
-
body.ignored = visible;
|
|
309
|
-
}
|
|
310
|
-
if (draft.open_questions !== (void 0)) {
|
|
311
|
-
body.open_questions = [...draft.open_questions];
|
|
312
|
-
}
|
|
313
|
-
if (draft.impasse !== (void 0)) {
|
|
314
|
-
body.impasse = draft.impasse;
|
|
315
|
-
}
|
|
316
|
-
if (draft.note !== (void 0)) {
|
|
317
|
-
body.note = draft.note;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
const frame: Frame = { ...body, digest: digestOf(body) };
|
|
321
|
-
return { frame, deferred };
|
|
322
|
-
};
|
package/src/boundary/ids.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Identifier grammar from `docs/schemas/common.schema.json#/$defs/id`.
|
|
3
|
-
*
|
|
4
|
-
* An id that does not match this pattern cannot be referenced by any other AMP
|
|
5
|
-
* object, so the boundary rejects it instead of creating an object nothing can
|
|
6
|
-
* point at.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Top-level data, hence PascalCase under the project's naming rule.
|
|
11
|
-
*/
|
|
12
|
-
const IdPattern: RegExp = /^[a-z][a-z0-9._:-]{0,63}$/;
|
|
13
|
-
|
|
14
|
-
export const isId: (value: unknown) => value is string = (value: unknown): value is string => typeof(value) === "string" && IdPattern.test(value);
|
package/src/boundary/index.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Boundary barrel: constructors that reject instead of returning invalid objects.
|
|
3
|
-
*/
|
|
4
|
-
export { BoundaryRejection } from "../error/boundaryRejection.ts";
|
|
5
|
-
export type { BoundaryCode } from "../error/boundaryRejection.ts";
|
|
6
|
-
export { isId } from "./ids.ts";
|
|
7
|
-
export { RefTable } from "./refTable.ts";
|
|
8
|
-
export type { RefScope } from "./refTable.ts";
|
|
9
|
-
export { frameFrom } from "./frame.ts";
|
|
10
|
-
export type { FrameBoundaryOptions, FrameBoundaryResult, FrameDraft } from "./frame.ts";
|
|
11
|
-
export { parseToolCall } from "./toolCall.ts";
|
|
12
|
-
export type { ParsedToolCall, ToolSchema } from "./toolCall.ts";
|
package/src/boundary/refTable.ts
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reference resolution for the construction boundary.
|
|
3
|
-
*
|
|
4
|
-
* A `Ref` is only a pointer. Until it is resolved against a scope, nothing
|
|
5
|
-
* prevents it from naming an object that does not exist — which is how a frame
|
|
6
|
-
* ends up citing a tool, concept or claim that the ledger never held. The table
|
|
7
|
-
* makes resolution explicit and gives the scope a name, so "unresolvable" is a
|
|
8
|
-
* rejection rather than a silent dangling pointer.
|
|
9
|
-
*
|
|
10
|
-
* Canonicalisation rules:
|
|
11
|
-
* - `tool` and `capability` share one namespace; the `mcp.` prefix is transport
|
|
12
|
-
* detail, not identity.
|
|
13
|
-
* - `self` resolves to the agent id registered for the scope.
|
|
14
|
-
*/
|
|
15
|
-
import type { Id, Ref, RefKind } from "../types/common.ts";
|
|
16
|
-
|
|
17
|
-
import { isId } from "./ids.ts";
|
|
18
|
-
import { BoundaryRejection } from "../error/boundaryRejection.ts";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Where a reference is expected to resolve.
|
|
22
|
-
*/
|
|
23
|
-
export type RefScope = "run" | "ledger" | "bundle";
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Kinds that name something outside the ledger. They still need a valid id and
|
|
27
|
-
* a kind, but they cannot be required to resolve here: a human, an org or an
|
|
28
|
-
* external entity lives in a directory the host owns, not in the run.
|
|
29
|
-
*/
|
|
30
|
-
const DefaultOpaqueKinds: readonly RefKind[] = ["human", "org", "entity", "other"];
|
|
31
|
-
|
|
32
|
-
const stripToolPrefix = (id: string): string => (id.startsWith("mcp.") ? id.slice(4) : id);
|
|
33
|
-
|
|
34
|
-
const canonicalId = (kind: RefKind, id: string): string => `${kind}:${kind === "tool" ? stripToolPrefix(id) : id}`;
|
|
35
|
-
|
|
36
|
-
export class RefTable {
|
|
37
|
-
readonly scope: RefScope;
|
|
38
|
-
readonly opaqueKinds: ReadonlySet<RefKind>;
|
|
39
|
-
private readonly entries: Map<string, unknown>;
|
|
40
|
-
|
|
41
|
-
constructor(scope: RefScope, agentId?: string, opaqueKinds: readonly RefKind[] = DefaultOpaqueKinds) {
|
|
42
|
-
this.scope = scope;
|
|
43
|
-
this.opaqueKinds = new Set<RefKind>(opaqueKinds);
|
|
44
|
-
this.entries = new Map<string, unknown>();
|
|
45
|
-
if (agentId !== (void 0)) {
|
|
46
|
-
this.entries.set(`agent:${agentId}`, { kind: "self", id: agentId });
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
static forScope(scope: RefScope, agentId?: string, opaqueKinds?: readonly RefKind[]): RefTable {
|
|
51
|
-
return new RefTable(scope, agentId, opaqueKinds);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Register an object under its reference key.
|
|
56
|
-
*
|
|
57
|
-
* @throws BoundaryRejection `invalid_id` when the id cannot be referenced,
|
|
58
|
-
* `duplicate_ref` when the same key is registered twice.
|
|
59
|
-
*/
|
|
60
|
-
add(kind: RefKind, id: Id, value: unknown): this {
|
|
61
|
-
if (!isId(id)) {
|
|
62
|
-
throw new BoundaryRejection("invalid_id", [`${kind}:${id} is not a valid AMP id`]);
|
|
63
|
-
}
|
|
64
|
-
const key: string = canonicalId(kind, id);
|
|
65
|
-
if (this.entries.has(key)) {
|
|
66
|
-
throw new BoundaryRejection("duplicate_ref", [`${key} is already registered in scope ${this.scope}`]);
|
|
67
|
-
}
|
|
68
|
-
this.entries.set(key, value);
|
|
69
|
-
return this;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
resolve(ref: Ref): unknown | undefined {
|
|
73
|
-
if (!isId(ref.id)) {
|
|
74
|
-
return (void 0);
|
|
75
|
-
}
|
|
76
|
-
const direct: unknown = this.entries.get(canonicalId(ref.kind, ref.id));
|
|
77
|
-
if (direct !== (void 0)) {
|
|
78
|
-
return direct;
|
|
79
|
-
}
|
|
80
|
-
if (ref.kind === "tool") {
|
|
81
|
-
return this.entries.get(`capability:${stripToolPrefix(ref.id)}`);
|
|
82
|
-
}
|
|
83
|
-
if (ref.kind === "self") {
|
|
84
|
-
return this.entries.get(`agent:${ref.id}`);
|
|
85
|
-
}
|
|
86
|
-
return (void 0);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Resolve or reject. The message names the scope so a host can tell a
|
|
91
|
-
* missing run object from a missing federated object.
|
|
92
|
-
*/
|
|
93
|
-
require(ref: Ref): unknown {
|
|
94
|
-
const hit: unknown = this.resolve(ref);
|
|
95
|
-
if (hit === (void 0)) {
|
|
96
|
-
throw new BoundaryRejection("unresolvable_ref", [`${ref.kind}:${ref.id} is not present in scope ${this.scope}`]);
|
|
97
|
-
}
|
|
98
|
-
return hit;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
has(ref: Ref): boolean {
|
|
102
|
-
return this.resolve(ref) !== (void 0);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Resolution verdict used by `frameFrom`.
|
|
107
|
-
*
|
|
108
|
-
* Opaque kinds pass on shape alone; every other kind must be present in the
|
|
109
|
-
* scope. Returns a problem string instead of throwing so callers can report
|
|
110
|
-
* every dangling reference at once.
|
|
111
|
-
*/
|
|
112
|
-
check(ref: Ref): string | undefined {
|
|
113
|
-
if (this.opaqueKinds.has(ref.kind)) {
|
|
114
|
-
return (void 0);
|
|
115
|
-
}
|
|
116
|
-
if (this.resolve(ref) !== (void 0)) {
|
|
117
|
-
return (void 0);
|
|
118
|
-
}
|
|
119
|
-
return `${ref.kind}:${ref.id} is not present in scope ${this.scope}`;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
get size(): number {
|
|
123
|
-
return this.entries.size;
|
|
124
|
-
}
|
|
125
|
-
}
|
package/src/boundary/toolCall.ts
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool-call boundary: parse arguments before anything touches the world.
|
|
3
|
-
*
|
|
4
|
-
* The reference executor passes `Record<string, unknown>` straight to a server.
|
|
5
|
-
* This module checks the arguments against the tool's `inputSchema` and returns
|
|
6
|
-
* a digest of exactly what was accepted, so an approval can bind to the parsed
|
|
7
|
-
* call instead of to a mutable object.
|
|
8
|
-
*
|
|
9
|
-
* The validator implements the subset of JSON Schema that MCP tool definitions
|
|
10
|
-
* actually use: `type`, `properties`, `required`, `additionalProperties`,
|
|
11
|
-
* `items`, `enum`, `const`, `anyOf`/`oneOf`/`allOf`, length and numeric bounds,
|
|
12
|
-
* and `pattern`. Keywords outside that subset are ignored rather than guessed
|
|
13
|
-
* at; a schema that needs more should be narrowed before it reaches this layer.
|
|
14
|
-
*/
|
|
15
|
-
import type { Digest } from "../types/common.ts";
|
|
16
|
-
|
|
17
|
-
import { canonical, digestOf } from "../semantic/canonical.ts";
|
|
18
|
-
import { BoundaryRejection } from "../error/boundaryRejection.ts";
|
|
19
|
-
|
|
20
|
-
export interface ToolSchema {
|
|
21
|
-
name: string;
|
|
22
|
-
inputSchema: unknown;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface ParsedToolCall {
|
|
26
|
-
tool: string;
|
|
27
|
-
args: Record<string, unknown>;
|
|
28
|
-
/**
|
|
29
|
-
* Digest of the accepted arguments; approvals bind to this value.
|
|
30
|
-
*/
|
|
31
|
-
digest: Digest;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const isRecord: (value: unknown) => value is Record<string, unknown> = (value: unknown): value is Record<string, unknown> =>
|
|
35
|
-
typeof(value) === "object" && value !== null && !Array.isArray(value);
|
|
36
|
-
|
|
37
|
-
const matchesType: (type: string, value: unknown) => boolean = (type: string, value: unknown): boolean => {
|
|
38
|
-
if (type === "null") {
|
|
39
|
-
return value === null;
|
|
40
|
-
}
|
|
41
|
-
if (type === "array") {
|
|
42
|
-
return Array.isArray(value);
|
|
43
|
-
}
|
|
44
|
-
if (type === "object") {
|
|
45
|
-
return isRecord(value);
|
|
46
|
-
}
|
|
47
|
-
if (type === "string") {
|
|
48
|
-
return typeof(value) === "string";
|
|
49
|
-
}
|
|
50
|
-
if (type === "boolean") {
|
|
51
|
-
return typeof(value) === "boolean";
|
|
52
|
-
}
|
|
53
|
-
if (type === "number") {
|
|
54
|
-
return typeof(value) === "number" && Number.isFinite(value);
|
|
55
|
-
}
|
|
56
|
-
if (type === "integer") {
|
|
57
|
-
return typeof(value) === "number" && Number.isInteger(value);
|
|
58
|
-
}
|
|
59
|
-
return true;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
type SchemaCheck = (schema: unknown, value: unknown, at: string, depth: number, problems: string[]) => void;
|
|
63
|
-
|
|
64
|
-
const checkSchema: SchemaCheck = (schema: unknown, value: unknown, at: string, depth: number, problems: string[]): void => {
|
|
65
|
-
if (depth > 32) {
|
|
66
|
-
problems.push(`${at}: schema nesting exceeds 32`);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
if (!isRecord(schema)) {
|
|
70
|
-
problems.push(`${at}: schema must be an object`);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if ("const" in schema && canonical(schema.const) !== canonical(value)) {
|
|
75
|
-
problems.push(`${at} must equal the const value`);
|
|
76
|
-
}
|
|
77
|
-
if (Array.isArray(schema.enum) && !schema.enum.some((item) => canonical(item) === canonical(value))) {
|
|
78
|
-
problems.push(`${at} is not one of the allowed values`);
|
|
79
|
-
}
|
|
80
|
-
if (Array.isArray(schema.allOf)) {
|
|
81
|
-
schema.allOf.forEach((branch) => checkSchema(branch, value, at, depth + 1, problems));
|
|
82
|
-
}
|
|
83
|
-
if (Array.isArray(schema.anyOf) && !schema.anyOf.some((branch) => schemaMatches(branch, value, depth + 1))) {
|
|
84
|
-
problems.push(`${at} matches none of anyOf`);
|
|
85
|
-
}
|
|
86
|
-
if (Array.isArray(schema.oneOf)) {
|
|
87
|
-
const matched: number = schema.oneOf.filter((branch) => schemaMatches(branch, value, depth + 1)).length;
|
|
88
|
-
if (matched !== 1) {
|
|
89
|
-
problems.push(`${at} matches ${matched} of oneOf, expected exactly 1`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const declared: unknown = schema.type;
|
|
94
|
-
const types: string[] = Array.isArray(declared)
|
|
95
|
-
? declared.filter((item): item is string => typeof(item) === "string")
|
|
96
|
-
: typeof(declared) === "string"
|
|
97
|
-
? [declared]
|
|
98
|
-
: [];
|
|
99
|
-
if (types.length > 0 && !types.some((type) => matchesType(type, value))) {
|
|
100
|
-
problems.push(`${at} expected ${types.join("|")}`);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
if (Array.isArray(value)) {
|
|
105
|
-
if (Array.isArray(schema.items)) {
|
|
106
|
-
schema.items.forEach((item, index) => {
|
|
107
|
-
if (index < value.length) {
|
|
108
|
-
checkSchema(item, value[index], `${at}[${index}]`, depth + 1, problems);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
} else if (schema.items !== (void 0)) {
|
|
112
|
-
value.forEach((item, index) => checkSchema(schema.items, item, `${at}[${index}]`, depth + 1, problems));
|
|
113
|
-
}
|
|
114
|
-
const minItems: unknown = schema.minItems;
|
|
115
|
-
const maxItems: unknown = schema.maxItems;
|
|
116
|
-
if (typeof(minItems) === "number" && value.length < minItems) {
|
|
117
|
-
problems.push(`${at} needs at least ${minItems} items`);
|
|
118
|
-
}
|
|
119
|
-
if (typeof(maxItems) === "number" && value.length > maxItems) {
|
|
120
|
-
problems.push(`${at} allows at most ${maxItems} items`);
|
|
121
|
-
}
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
if (isRecord(value)) {
|
|
126
|
-
const required: unknown = schema.required;
|
|
127
|
-
if (Array.isArray(required)) {
|
|
128
|
-
for (let index: number = 0; index < required.length; index += 1) {
|
|
129
|
-
const name: unknown = required[index];
|
|
130
|
-
if (typeof(name) === "string" && !(name in value)) {
|
|
131
|
-
problems.push(`${at}.${name} is required`);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
const properties: unknown = schema.properties;
|
|
136
|
-
if (isRecord(properties)) {
|
|
137
|
-
const keys: string[] = Object.keys(value);
|
|
138
|
-
for (let index: number = 0; index < keys.length; index += 1) {
|
|
139
|
-
const key: string = keys[index];
|
|
140
|
-
const child: unknown = properties[key];
|
|
141
|
-
if (child !== (void 0)) {
|
|
142
|
-
checkSchema(child, value[key], `${at}.${key}`, depth + 1, problems);
|
|
143
|
-
} else if (schema.additionalProperties === false) {
|
|
144
|
-
problems.push(`${at}.${key} is not allowed`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
} else if (schema.additionalProperties === false && Object.keys(value).length > 0) {
|
|
148
|
-
problems.push(`${at} does not allow properties`);
|
|
149
|
-
}
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (typeof(value) === "string") {
|
|
154
|
-
const minLength: unknown = schema.minLength;
|
|
155
|
-
const maxLength: unknown = schema.maxLength;
|
|
156
|
-
const pattern: unknown = schema.pattern;
|
|
157
|
-
if (typeof(minLength) === "number" && value.length < minLength) {
|
|
158
|
-
problems.push(`${at} is shorter than ${minLength}`);
|
|
159
|
-
}
|
|
160
|
-
if (typeof(maxLength) === "number" && value.length > maxLength) {
|
|
161
|
-
problems.push(`${at} is longer than ${maxLength}`);
|
|
162
|
-
}
|
|
163
|
-
if (typeof(pattern) === "string") {
|
|
164
|
-
try {
|
|
165
|
-
if (!new RegExp(pattern).test(value)) {
|
|
166
|
-
problems.push(`${at} does not match ${pattern}`);
|
|
167
|
-
}
|
|
168
|
-
} catch {
|
|
169
|
-
problems.push(`${at} has an invalid pattern`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (typeof(value) === "number") {
|
|
175
|
-
const minimum: unknown = schema.minimum;
|
|
176
|
-
const maximum: unknown = schema.maximum;
|
|
177
|
-
if (typeof(minimum) === "number" && value < minimum) {
|
|
178
|
-
problems.push(`${at} is below ${minimum}`);
|
|
179
|
-
}
|
|
180
|
-
if (typeof(maximum) === "number" && value > maximum) {
|
|
181
|
-
problems.push(`${at} is above ${maximum}`);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
const schemaMatches: (schema: unknown, value: unknown, depth: number) => boolean = (schema: unknown, value: unknown, depth: number): boolean => {
|
|
187
|
-
const problems: string[] = [];
|
|
188
|
-
checkSchema(schema, value, "$", depth, problems);
|
|
189
|
-
return problems.length === 0;
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Parse a tool call's arguments against its declared schema.
|
|
194
|
-
*
|
|
195
|
-
* @throws BoundaryRejection `invalid_tool_args` with every problem found.
|
|
196
|
-
*/
|
|
197
|
-
export const parseToolCall: (tool: ToolSchema, raw: unknown) => ParsedToolCall = (tool: ToolSchema, raw: unknown): ParsedToolCall => {
|
|
198
|
-
const problems: string[] = [];
|
|
199
|
-
if (typeof(tool.name) !== "string" || tool.name.length === 0) {
|
|
200
|
-
problems.push("tool.name is empty");
|
|
201
|
-
}
|
|
202
|
-
if (!isRecord(raw)) {
|
|
203
|
-
problems.push("arguments must be an object");
|
|
204
|
-
} else {
|
|
205
|
-
checkSchema(tool.inputSchema, raw, "$", 0, problems);
|
|
206
|
-
}
|
|
207
|
-
if (problems.length > 0) {
|
|
208
|
-
throw new BoundaryRejection("invalid_tool_args", problems);
|
|
209
|
-
}
|
|
210
|
-
const args: Record<string, unknown> = raw as Record<string, unknown>;
|
|
211
|
-
return { tool: tool.name, args, digest: digestOf(args) };
|
|
212
|
-
};
|