attention-manifest-protocol 0.4.2 → 0.4.4
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/eslint.config.mts +0 -96
- package/index.html +0 -13
- 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
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-session JSON context with canonical byte accounting.
|
|
3
|
+
*
|
|
4
|
+
* The context is the only mutable data a session owns that is not a file. It is
|
|
5
|
+
* partitioned by session id so two sessions in one process can never observe
|
|
6
|
+
* each other's entries. Values are canonicalised before they are stored: that
|
|
7
|
+
* proves the value round-trips through strict JSON, gives one definition of
|
|
8
|
+
* "bytes" for quotas, and rejects `bigint`, functions, `undefined`, cycles and
|
|
9
|
+
* unpaired surrogates instead of silently coercing them.
|
|
10
|
+
*
|
|
11
|
+
* Every returned entry is a `structuredClone`, so a caller that mutates a
|
|
12
|
+
* result cannot corrupt the store. Persistence is a separate port: a host that
|
|
13
|
+
* only wants identity persistence can omit it, and a host that supplies it gets
|
|
14
|
+
* synchronous `put`/`delete`/`replace` writes on the same calls that mutate
|
|
15
|
+
* memory. Loading is lazy (`ensure`) because a restored registry may hold many
|
|
16
|
+
* sessions the process never touches.
|
|
17
|
+
*/
|
|
18
|
+
import { Buffer } from "node:buffer";
|
|
19
|
+
import { canonical } from "../semantic/canonical.js";
|
|
20
|
+
import { fail } from "./errors.js";
|
|
21
|
+
const DefaultMaxEntries = 256;
|
|
22
|
+
const DefaultMaxBytes = 1024 * 1024;
|
|
23
|
+
const MaxNameLength = 128;
|
|
24
|
+
const ControlCharacters = /[\u0000-\u001f\u007f-\u009f]/;
|
|
25
|
+
const SystemClock = { now: () => new Date() };
|
|
26
|
+
const clone = (value) => structuredClone(value);
|
|
27
|
+
/**
|
|
28
|
+
* A name must be well-formed Unicode. `JSON.stringify` tolerates a lone
|
|
29
|
+
* surrogate by escaping it, but a persistence adapter that binds UTF-8 cannot,
|
|
30
|
+
* so accepting one would make the stored key differ from the key the caller
|
|
31
|
+
* wrote.
|
|
32
|
+
*/
|
|
33
|
+
const isWellFormed = (value) => {
|
|
34
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
35
|
+
const unit = value.charCodeAt(index);
|
|
36
|
+
if (unit >= 0xd800 && unit <= 0xdbff) {
|
|
37
|
+
const next = index + 1 < value.length ? value.charCodeAt(index + 1) : 0;
|
|
38
|
+
if (next < 0xdc00 || next > 0xdfff) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
index += 1;
|
|
42
|
+
}
|
|
43
|
+
else if (unit >= 0xdc00 && unit <= 0xdfff) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Session ids are opaque handles. They share the text rules but not the
|
|
51
|
+
* 128-code-unit namespace/key ceiling, because the ceiling is a context key
|
|
52
|
+
* contract rather than a session-id contract.
|
|
53
|
+
*/
|
|
54
|
+
const sessionIdIsValid = (value) => typeof (value) === "string" && value.length > 0 && value.trim().length > 0 && !ControlCharacters.test(value) && isWellFormed(value);
|
|
55
|
+
const requireSessionId = (value) => (sessionIdIsValid(value) ? value : fail("invalid_arguments"));
|
|
56
|
+
/**
|
|
57
|
+
* Namespace and key share one grammar: non-empty, at most 128 code units, no
|
|
58
|
+
* control characters and well-formed Unicode. The rule stays out of the error
|
|
59
|
+
* message; the code is the entire contract.
|
|
60
|
+
*/
|
|
61
|
+
const nameIsValid = (value) => sessionIdIsValid(value) && value.length <= MaxNameLength;
|
|
62
|
+
const requireName = (value) => (nameIsValid(value) ? value : fail("invalid_arguments"));
|
|
63
|
+
const requireLimit = (value, fallback) => {
|
|
64
|
+
if (value === (void 0)) {
|
|
65
|
+
return fallback;
|
|
66
|
+
}
|
|
67
|
+
if (!Number.isSafeInteger(value) || value < 1) {
|
|
68
|
+
return fail("invalid_arguments");
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
};
|
|
72
|
+
const entryIdentity = (namespace, key) => `${namespace}\u0000${key}`;
|
|
73
|
+
export class SessionContexts {
|
|
74
|
+
persistence;
|
|
75
|
+
clock;
|
|
76
|
+
maxEntries;
|
|
77
|
+
maxBytes;
|
|
78
|
+
sessions = new Map();
|
|
79
|
+
sizes = new Map();
|
|
80
|
+
loaded = new Set();
|
|
81
|
+
constructor(options = {}) {
|
|
82
|
+
this.persistence = options.persistence;
|
|
83
|
+
this.clock = options.clock ?? SystemClock;
|
|
84
|
+
this.maxEntries = requireLimit(options.limits?.maxContextEntries, DefaultMaxEntries);
|
|
85
|
+
this.maxBytes = requireLimit(options.limits?.maxContextBytes, DefaultMaxBytes);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Load one session's persisted entries exactly once. An absent store, a
|
|
89
|
+
* store that has no row for the session and an empty result all mean "this
|
|
90
|
+
* session has no entries yet". A persisted partition that exceeds the
|
|
91
|
+
* current limits is rejected with `context_quota` rather than silently
|
|
92
|
+
* bypassing the quota; `clear` and `remove` still work without loading.
|
|
93
|
+
*/
|
|
94
|
+
ensure(sessionId) {
|
|
95
|
+
const id = requireSessionId(sessionId);
|
|
96
|
+
if (this.loaded.has(id)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const partition = new Map();
|
|
100
|
+
let total = 0;
|
|
101
|
+
const persistence = this.persistence;
|
|
102
|
+
if (persistence !== (void 0)) {
|
|
103
|
+
let loaded;
|
|
104
|
+
try {
|
|
105
|
+
loaded = persistence.load(id);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return fail("store_failure");
|
|
109
|
+
}
|
|
110
|
+
if (loaded === (void 0)) {
|
|
111
|
+
loaded = [];
|
|
112
|
+
}
|
|
113
|
+
if (!Array.isArray(loaded)) {
|
|
114
|
+
return fail("store_failure");
|
|
115
|
+
}
|
|
116
|
+
const stored = loaded;
|
|
117
|
+
const seen = new Set();
|
|
118
|
+
for (let index = 0; index < stored.length; index += 1) {
|
|
119
|
+
const storedEntry = stored[index];
|
|
120
|
+
if (!this.storedEntryIsValid(storedEntry)) {
|
|
121
|
+
return fail("store_failure");
|
|
122
|
+
}
|
|
123
|
+
const entry = clone(storedEntry);
|
|
124
|
+
const identity = entryIdentity(entry.namespace, entry.key);
|
|
125
|
+
if (seen.has(identity)) {
|
|
126
|
+
return fail("store_failure");
|
|
127
|
+
}
|
|
128
|
+
seen.add(identity);
|
|
129
|
+
let bucket = partition.get(entry.namespace);
|
|
130
|
+
if (bucket === (void 0)) {
|
|
131
|
+
bucket = new Map();
|
|
132
|
+
partition.set(entry.namespace, bucket);
|
|
133
|
+
}
|
|
134
|
+
bucket.set(entry.key, entry);
|
|
135
|
+
total += entry.bytes;
|
|
136
|
+
}
|
|
137
|
+
if (stored.length > this.maxEntries || total > this.maxBytes) {
|
|
138
|
+
return fail("context_quota");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
this.sessions.set(id, partition);
|
|
142
|
+
this.sizes.set(id, total);
|
|
143
|
+
this.loaded.add(id);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Return one entry, or `undefined`. A missing session is an empty context,
|
|
147
|
+
* not an error: the registry owns session existence.
|
|
148
|
+
*/
|
|
149
|
+
get(sessionId, namespace, key) {
|
|
150
|
+
const id = requireSessionId(sessionId);
|
|
151
|
+
const space = requireName(namespace);
|
|
152
|
+
const entryKey = requireName(key);
|
|
153
|
+
const bucket = this.partitionOf(id).get(space);
|
|
154
|
+
if (bucket === (void 0)) {
|
|
155
|
+
return (void 0);
|
|
156
|
+
}
|
|
157
|
+
const entry = bucket.get(entryKey);
|
|
158
|
+
return entry === (void 0) ? (void 0) : clone(entry);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Canonicalise, quota-check and store one value, returning the stored entry
|
|
162
|
+
* as a detached copy.
|
|
163
|
+
*/
|
|
164
|
+
set(sessionId, namespace, key, value, at) {
|
|
165
|
+
const id = requireSessionId(sessionId);
|
|
166
|
+
const space = requireName(namespace);
|
|
167
|
+
const entryKey = requireName(key);
|
|
168
|
+
if (typeof (at) !== "string") {
|
|
169
|
+
return fail("invalid_arguments");
|
|
170
|
+
}
|
|
171
|
+
let updatedAt;
|
|
172
|
+
if (at.length === 0) {
|
|
173
|
+
updatedAt = this.clock.now().toISOString();
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
updatedAt = at;
|
|
177
|
+
}
|
|
178
|
+
let text;
|
|
179
|
+
try {
|
|
180
|
+
text = canonical(value);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return fail("invalid_arguments");
|
|
184
|
+
}
|
|
185
|
+
const normalized = JSON.parse(text);
|
|
186
|
+
const bytes = Buffer.byteLength(text, "utf8");
|
|
187
|
+
const partition = this.partitionOf(id);
|
|
188
|
+
const bucket = partition.get(space);
|
|
189
|
+
const previous = bucket === (void 0) ? (void 0) : bucket.get(entryKey);
|
|
190
|
+
const total = (this.sizes.get(id) ?? 0) - (previous === (void 0) ? 0 : previous.bytes);
|
|
191
|
+
if (previous === (void 0) && this.countOf(id) + 1 > this.maxEntries) {
|
|
192
|
+
return fail("context_quota");
|
|
193
|
+
}
|
|
194
|
+
if (total + bytes > this.maxBytes) {
|
|
195
|
+
return fail("context_quota");
|
|
196
|
+
}
|
|
197
|
+
const entry = { namespace: space, key: entryKey, value: normalized, bytes, updatedAt };
|
|
198
|
+
this.persistPut(id, entry);
|
|
199
|
+
const target = bucket === (void 0) ? new Map() : bucket;
|
|
200
|
+
if (bucket === (void 0)) {
|
|
201
|
+
partition.set(space, target);
|
|
202
|
+
}
|
|
203
|
+
target.set(entryKey, entry);
|
|
204
|
+
this.sizes.set(id, total + bytes);
|
|
205
|
+
return clone(entry);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Remove one entry. Returns `false` when it never existed.
|
|
209
|
+
*/
|
|
210
|
+
delete(sessionId, namespace, key) {
|
|
211
|
+
const id = requireSessionId(sessionId);
|
|
212
|
+
const space = requireName(namespace);
|
|
213
|
+
const entryKey = requireName(key);
|
|
214
|
+
const partition = this.partitionOf(id);
|
|
215
|
+
const bucket = partition.get(space);
|
|
216
|
+
if (bucket === (void 0)) {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
const entry = bucket.get(entryKey);
|
|
220
|
+
if (entry === (void 0)) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
const persistence = this.persistence;
|
|
224
|
+
if (persistence !== (void 0)) {
|
|
225
|
+
try {
|
|
226
|
+
persistence.delete(id, space, entryKey);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return fail("store_failure");
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
bucket.delete(entryKey);
|
|
233
|
+
if (bucket.size === 0) {
|
|
234
|
+
partition.delete(space);
|
|
235
|
+
}
|
|
236
|
+
this.sizes.set(id, Math.max(0, (this.sizes.get(id) ?? 0) - entry.bytes));
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* List entries for one session, optionally narrowed to one namespace.
|
|
241
|
+
* Ordering is deterministic (namespace, then key) so snapshots diff cleanly.
|
|
242
|
+
*/
|
|
243
|
+
list(sessionId, namespace) {
|
|
244
|
+
const id = requireSessionId(sessionId);
|
|
245
|
+
const wanted = namespace === (void 0) ? (void 0) : requireName(namespace);
|
|
246
|
+
const partition = this.partitionOf(id);
|
|
247
|
+
const entries = [];
|
|
248
|
+
const namespaces = [...partition.keys()].sort();
|
|
249
|
+
for (let spaceIndex = 0; spaceIndex < namespaces.length; spaceIndex += 1) {
|
|
250
|
+
const space = namespaces[spaceIndex];
|
|
251
|
+
if (wanted !== (void 0) && space !== wanted) {
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
const bucket = partition.get(space);
|
|
255
|
+
if (bucket === (void 0)) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
const keys = [...bucket.keys()].sort();
|
|
259
|
+
for (let keyIndex = 0; keyIndex < keys.length; keyIndex += 1) {
|
|
260
|
+
const entry = bucket.get(keys[keyIndex]);
|
|
261
|
+
if (entry !== (void 0)) {
|
|
262
|
+
entries.push(clone(entry));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return entries;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Immutable view of one session's whole context.
|
|
270
|
+
*/
|
|
271
|
+
snapshot(sessionId) {
|
|
272
|
+
const id = requireSessionId(sessionId);
|
|
273
|
+
const entries = this.list(id);
|
|
274
|
+
return { sessionId: id, entries, bytes: this.sizes.get(id) ?? 0 };
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Canonical UTF-8 bytes charged against one session.
|
|
278
|
+
*/
|
|
279
|
+
bytes(sessionId) {
|
|
280
|
+
const id = requireSessionId(sessionId);
|
|
281
|
+
this.ensure(id);
|
|
282
|
+
return this.sizes.get(id) ?? 0;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Drop every entry for one session. The empty state is persisted as a
|
|
286
|
+
* `replace`, which is atomic for an adapter that honours the port. This is
|
|
287
|
+
* deliberately an overwrite rather than a load-then-clear: a corrupt or
|
|
288
|
+
* over-quota persisted partition must still be removable by its host.
|
|
289
|
+
*/
|
|
290
|
+
clear(sessionId) {
|
|
291
|
+
const id = requireSessionId(sessionId);
|
|
292
|
+
const persistence = this.persistence;
|
|
293
|
+
if (persistence !== (void 0)) {
|
|
294
|
+
try {
|
|
295
|
+
persistence.replace(id, []);
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
return fail("store_failure");
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
this.sessions.set(id, new Map());
|
|
302
|
+
this.sizes.set(id, 0);
|
|
303
|
+
this.loaded.add(id);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Copy the source context into the target session. Values are deep copies,
|
|
307
|
+
* so the two sessions share no mutable object. The target's previous
|
|
308
|
+
* context, if any, is replaced.
|
|
309
|
+
*/
|
|
310
|
+
fork(from, to) {
|
|
311
|
+
const source = requireSessionId(from);
|
|
312
|
+
const target = requireSessionId(to);
|
|
313
|
+
if (source === target) {
|
|
314
|
+
return fail("invalid_arguments");
|
|
315
|
+
}
|
|
316
|
+
const entries = this.list(source);
|
|
317
|
+
let total = 0;
|
|
318
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
319
|
+
total += entries[index].bytes;
|
|
320
|
+
}
|
|
321
|
+
if (entries.length > this.maxEntries || total > this.maxBytes) {
|
|
322
|
+
return fail("context_quota");
|
|
323
|
+
}
|
|
324
|
+
const persistence = this.persistence;
|
|
325
|
+
if (persistence !== (void 0)) {
|
|
326
|
+
try {
|
|
327
|
+
persistence.replace(target, entries.map((entry) => clone(entry)));
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
return fail("store_failure");
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
const partition = new Map();
|
|
334
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
335
|
+
const entry = clone(entries[index]);
|
|
336
|
+
let bucket = partition.get(entry.namespace);
|
|
337
|
+
if (bucket === (void 0)) {
|
|
338
|
+
bucket = new Map();
|
|
339
|
+
partition.set(entry.namespace, bucket);
|
|
340
|
+
}
|
|
341
|
+
bucket.set(entry.key, entry);
|
|
342
|
+
}
|
|
343
|
+
this.sessions.set(target, partition);
|
|
344
|
+
this.sizes.set(target, total);
|
|
345
|
+
this.loaded.add(target);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Remove every entry for one session and its persisted partition.
|
|
349
|
+
*/
|
|
350
|
+
remove(sessionId) {
|
|
351
|
+
const id = requireSessionId(sessionId);
|
|
352
|
+
const persistence = this.persistence;
|
|
353
|
+
if (persistence !== (void 0)) {
|
|
354
|
+
try {
|
|
355
|
+
persistence.deleteSession(id);
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
return fail("store_failure");
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
this.sessions.delete(id);
|
|
362
|
+
this.sizes.delete(id);
|
|
363
|
+
this.loaded.delete(id);
|
|
364
|
+
}
|
|
365
|
+
partitionOf(sessionId) {
|
|
366
|
+
this.ensure(sessionId);
|
|
367
|
+
const existing = this.sessions.get(sessionId);
|
|
368
|
+
if (existing !== (void 0)) {
|
|
369
|
+
return existing;
|
|
370
|
+
}
|
|
371
|
+
const created = new Map();
|
|
372
|
+
this.sessions.set(sessionId, created);
|
|
373
|
+
this.sizes.set(sessionId, 0);
|
|
374
|
+
return created;
|
|
375
|
+
}
|
|
376
|
+
countOf(sessionId) {
|
|
377
|
+
const partition = this.sessions.get(sessionId);
|
|
378
|
+
if (partition === (void 0)) {
|
|
379
|
+
return 0;
|
|
380
|
+
}
|
|
381
|
+
let count = 0;
|
|
382
|
+
const buckets = [...partition.values()];
|
|
383
|
+
for (let index = 0; index < buckets.length; index += 1) {
|
|
384
|
+
count += buckets[index].size;
|
|
385
|
+
}
|
|
386
|
+
return count;
|
|
387
|
+
}
|
|
388
|
+
storedEntryIsValid(entry) {
|
|
389
|
+
if (entry === null || typeof (entry) !== "object") {
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
if (!nameIsValid(entry.namespace) || !nameIsValid(entry.key)) {
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
if (typeof (entry.updatedAt) !== "string" || entry.updatedAt.length === 0 || !Number.isSafeInteger(entry.bytes) || entry.bytes < 0) {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
let text;
|
|
399
|
+
try {
|
|
400
|
+
text = canonical(entry.value);
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
405
|
+
return Buffer.byteLength(text, "utf8") === entry.bytes;
|
|
406
|
+
}
|
|
407
|
+
persistPut(sessionId, entry) {
|
|
408
|
+
const persistence = this.persistence;
|
|
409
|
+
if (persistence === (void 0)) {
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
try {
|
|
413
|
+
persistence.put(sessionId, clone(entry));
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
fail("store_failure");
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Closed error taxonomy for the session domain.
|
|
3
|
+
*
|
|
4
|
+
* Messages are the code itself. Root paths, agent ids, context keys and bearer
|
|
5
|
+
* tokens stay out of the error string so a transport can forward it to a model
|
|
6
|
+
* without leaking host layout or credentials.
|
|
7
|
+
*/
|
|
8
|
+
import type { SessionErrorCode } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* One classified session failure. The message mirrors {@link code} exactly so
|
|
11
|
+
* an adapter never has to parse English prose and never receives a host path.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SessionError extends Error {
|
|
14
|
+
readonly code: SessionErrorCode;
|
|
15
|
+
constructor(code: SessionErrorCode);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Throw one classified failure.
|
|
19
|
+
*/
|
|
20
|
+
export declare const fail: (code: SessionErrorCode) => never;
|
|
21
|
+
/**
|
|
22
|
+
* Narrow an unknown thrown value to this domain's error.
|
|
23
|
+
*/
|
|
24
|
+
export declare const isSessionError: (error: unknown) => error is SessionError;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One classified session failure. The message mirrors {@link code} exactly so
|
|
3
|
+
* an adapter never has to parse English prose and never receives a host path.
|
|
4
|
+
*/
|
|
5
|
+
export class SessionError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
constructor(code) {
|
|
8
|
+
super(code);
|
|
9
|
+
this.name = "SessionError";
|
|
10
|
+
this.code = code;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Throw one classified failure.
|
|
15
|
+
*/
|
|
16
|
+
export const fail = (code) => {
|
|
17
|
+
throw new SessionError(code);
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Narrow an unknown thrown value to this domain's error.
|
|
21
|
+
*/
|
|
22
|
+
export const isSessionError = (error) => error instanceof SessionError;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SessionId } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Allocate a public session handle: `ses_` plus 32 lowercase hex characters.
|
|
4
|
+
*/
|
|
5
|
+
export declare const createSessionId: () => SessionId;
|
|
6
|
+
/**
|
|
7
|
+
* Allocate a 32-byte bearer token encoded as base64url without padding.
|
|
8
|
+
*/
|
|
9
|
+
export declare const createSessionToken: () => string;
|
|
10
|
+
/**
|
|
11
|
+
* Hash a token for storage as `sha256:<hex>`.
|
|
12
|
+
*
|
|
13
|
+
* The raw token never reaches the store; callers that persist the hash cannot
|
|
14
|
+
* reconstruct the secret from it.
|
|
15
|
+
*/
|
|
16
|
+
export declare const hashSessionToken: (token: string) => string;
|
|
17
|
+
/**
|
|
18
|
+
* Compare a token against a stored `sha256:<hex>` digest in constant time.
|
|
19
|
+
*
|
|
20
|
+
* Both sides are copied into equal-width buffers before `timingSafeEqual`, so a
|
|
21
|
+
* length mismatch performs one comparison and returns `false` instead of
|
|
22
|
+
* throwing. A non-string argument is rejected the same way.
|
|
23
|
+
*/
|
|
24
|
+
export declare const verifySessionToken: (token: string, expectedHash: string) => boolean;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session identity generation and token verification.
|
|
3
|
+
*
|
|
4
|
+
* A session id is a public handle; the bearer token is the secret. Only the
|
|
5
|
+
* token hash is ever stored, and verification uses a constant-time comparison
|
|
6
|
+
* that still runs when the stored hash is missing, truncated or otherwise
|
|
7
|
+
* malformed, so a caller cannot learn the expected length from a throw.
|
|
8
|
+
*/
|
|
9
|
+
import { Buffer } from "node:buffer";
|
|
10
|
+
import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
|
|
11
|
+
import { fail } from "./errors.js";
|
|
12
|
+
const SessionIdPrefix = "ses_";
|
|
13
|
+
const SessionIdBytes = 16;
|
|
14
|
+
const TokenBytes = 32;
|
|
15
|
+
const HashPrefix = "sha256:";
|
|
16
|
+
/**
|
|
17
|
+
* Allocate a public session handle: `ses_` plus 32 lowercase hex characters.
|
|
18
|
+
*/
|
|
19
|
+
export const createSessionId = () => `${SessionIdPrefix}${randomBytes(SessionIdBytes).toString("hex")}`;
|
|
20
|
+
/**
|
|
21
|
+
* Allocate a 32-byte bearer token encoded as base64url without padding.
|
|
22
|
+
*/
|
|
23
|
+
export const createSessionToken = () => randomBytes(TokenBytes).toString("base64url");
|
|
24
|
+
/**
|
|
25
|
+
* Hash a token for storage as `sha256:<hex>`.
|
|
26
|
+
*
|
|
27
|
+
* The raw token never reaches the store; callers that persist the hash cannot
|
|
28
|
+
* reconstruct the secret from it.
|
|
29
|
+
*/
|
|
30
|
+
export const hashSessionToken = (token) => {
|
|
31
|
+
if (typeof (token) !== "string") {
|
|
32
|
+
return fail("invalid_arguments");
|
|
33
|
+
}
|
|
34
|
+
return `${HashPrefix}${createHash("sha256").update(token, "utf8").digest("hex")}`;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Compare a token against a stored `sha256:<hex>` digest in constant time.
|
|
38
|
+
*
|
|
39
|
+
* Both sides are copied into equal-width buffers before `timingSafeEqual`, so a
|
|
40
|
+
* length mismatch performs one comparison and returns `false` instead of
|
|
41
|
+
* throwing. A non-string argument is rejected the same way.
|
|
42
|
+
*/
|
|
43
|
+
export const verifySessionToken = (token, expectedHash) => {
|
|
44
|
+
if (typeof (token) !== "string" || typeof (expectedHash) !== "string") {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
const actual = Buffer.from(hashSessionToken(token), "utf8");
|
|
48
|
+
const expected = Buffer.from(expectedHash, "utf8");
|
|
49
|
+
const width = Math.max(actual.length, expected.length, 1);
|
|
50
|
+
const left = Buffer.alloc(width);
|
|
51
|
+
const right = Buffer.alloc(width);
|
|
52
|
+
actual.copy(left, 0);
|
|
53
|
+
expected.copy(right, 0);
|
|
54
|
+
const equal = timingSafeEqual(left, right);
|
|
55
|
+
return equal && actual.length === expected.length;
|
|
56
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public session entry: identity, lifecycle, context isolation and ports.
|
|
3
|
+
*
|
|
4
|
+
* `src/session` is the data-isolation boundary for one agent's workspace work.
|
|
5
|
+
* It is intentionally separate from `runtime/session.ts`, the cognitive memory
|
|
6
|
+
* of a turn loop, and it never shares mutable state with it.
|
|
7
|
+
*/
|
|
8
|
+
export { SessionError, fail, isSessionError } from "./errors.js";
|
|
9
|
+
export { createSessionId, createSessionToken, hashSessionToken, verifySessionToken } from "./identity.js";
|
|
10
|
+
export { SessionContexts } from "./context.js";
|
|
11
|
+
export type { SessionContextOptions } from "./context.js";
|
|
12
|
+
export { SessionRegistry } from "./registry.js";
|
|
13
|
+
export type { SessionRotationStore } from "./registry.js";
|
|
14
|
+
export * from "./types.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public session entry: identity, lifecycle, context isolation and ports.
|
|
3
|
+
*
|
|
4
|
+
* `src/session` is the data-isolation boundary for one agent's workspace work.
|
|
5
|
+
* It is intentionally separate from `runtime/session.ts`, the cognitive memory
|
|
6
|
+
* of a turn loop, and it never shares mutable state with it.
|
|
7
|
+
*/
|
|
8
|
+
export { SessionError, fail, isSessionError } from "./errors.js";
|
|
9
|
+
export { createSessionId, createSessionToken, hashSessionToken, verifySessionToken } from "./identity.js";
|
|
10
|
+
export { SessionContexts } from "./context.js";
|
|
11
|
+
export { SessionRegistry } from "./registry.js";
|
|
12
|
+
export * from "./types.js";
|