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/concept/concept.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AMP v0.1 — Concept: a compressed pattern that can occupy one attention slot.
|
|
3
|
-
* Mirrors docs/schemas/concept.schema.json.
|
|
4
|
-
*/
|
|
5
|
-
import type { Confidence, Id, Provenance, Ref, Timestamp } from "../types/common.ts";
|
|
6
|
-
|
|
7
|
-
export type ConceptStatus = "proposed" | "active" | "deprecated" | "merged" | "split";
|
|
8
|
-
|
|
9
|
-
export interface ConceptFeature {
|
|
10
|
-
feature: string;
|
|
11
|
-
weight?: Confidence;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface ConceptDimension {
|
|
15
|
-
name: string;
|
|
16
|
-
scale?: "nominal" | "ordinal" | "interval" | "ratio";
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export type ConceptRelationType = "is-a" | "part-of" | "causes" | "enables" | "contrasts-with" | "derived-from" | "precedes";
|
|
20
|
-
|
|
21
|
-
export interface ConceptRelation {
|
|
22
|
-
type: ConceptRelationType;
|
|
23
|
-
target: Ref;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface ConceptExample {
|
|
27
|
-
ref?: Ref;
|
|
28
|
-
description: string;
|
|
29
|
-
typicality?: Confidence;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Operations are recorded, never applied in place.
|
|
34
|
-
*/
|
|
35
|
-
export interface ConceptRevision {
|
|
36
|
-
op: "merge" | "split" | "refine" | "retire";
|
|
37
|
-
at: Timestamp;
|
|
38
|
-
from?: Ref[];
|
|
39
|
-
reason?: string;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface Concept {
|
|
43
|
-
amp: "0.1";
|
|
44
|
-
kind: "concept";
|
|
45
|
-
id: Id;
|
|
46
|
-
label: string;
|
|
47
|
-
definition: string;
|
|
48
|
-
/**
|
|
49
|
-
* Defining features (prototype-style, graded — not an OWL class expression).
|
|
50
|
-
*/
|
|
51
|
-
intension: ConceptFeature[];
|
|
52
|
-
/**
|
|
53
|
-
* Conceptual-space dimensions, when the concept is geometric rather than featural.
|
|
54
|
-
*/
|
|
55
|
-
dimensions?: ConceptDimension[];
|
|
56
|
-
/**
|
|
57
|
-
* Anti-vacuity: external theory this concept is answerable to.
|
|
58
|
-
*/
|
|
59
|
-
theory_refs?: string[];
|
|
60
|
-
extension?: Ref[];
|
|
61
|
-
prototype?: string;
|
|
62
|
-
/**
|
|
63
|
-
* Grounding: at least one real instance. A concept with none is a label.
|
|
64
|
-
*/
|
|
65
|
-
examples?: ConceptExample[];
|
|
66
|
-
counterexamples?: ConceptExample[];
|
|
67
|
-
relations?: ConceptRelation[];
|
|
68
|
-
grounded_in?: Ref[];
|
|
69
|
-
status: ConceptStatus;
|
|
70
|
-
confidence: Confidence;
|
|
71
|
-
provenance: Provenance;
|
|
72
|
-
version: number;
|
|
73
|
-
created: Timestamp;
|
|
74
|
-
revision?: ConceptRevision;
|
|
75
|
-
}
|
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
import { digestOf } from "../semantic/canonical.ts";
|
|
2
|
-
import type { Concept, ConceptExample, ConceptRelation } from "./concept.ts";
|
|
3
|
-
import type { ConceptBudget, ConceptCheckpoint, ConceptDrop, ConceptPrunePlan } from "./conceptBudgetTypes.ts";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Concept economy: bound one concept's content, and bound how many versions of
|
|
7
|
-
* it are kept in storage.
|
|
8
|
-
*
|
|
9
|
-
* The rules answer one question: what may be removed without making the concept
|
|
10
|
-
* worse at being a concept? Duplicated examples, duplicated relations, relation
|
|
11
|
-
* targets that no longer resolve, and examples beyond the reading budget. Never
|
|
12
|
-
* the definition, the intension, the counterexamples, or the last example that
|
|
13
|
-
* keeps the concept grounded.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
export const DefaultConceptBudget: ConceptBudget = {
|
|
17
|
-
amp: "0.1",
|
|
18
|
-
kind: "concept-budget",
|
|
19
|
-
maxExamples: 8,
|
|
20
|
-
minExamples: 1,
|
|
21
|
-
maxRelations: 12,
|
|
22
|
-
keepVersions: 1,
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
function normaliseText(text: string): string {
|
|
26
|
-
return text.trim().toLowerCase().replace(/\s+/g, " ");
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function utf8Bytes(value: unknown): number {
|
|
30
|
-
return new TextEncoder().encode(JSON.stringify(value)).length;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function typicalityOf(example: ConceptExample): number {
|
|
34
|
-
return typeof(example.typicality) === "number" ? example.typicality : 0.5;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function clip(text: string, limit = 60): string {
|
|
38
|
-
const flat = text.trim().replace(/\s+/g, " ");
|
|
39
|
-
return flat.length <= limit ? flat : `${flat.slice(0, limit - 1)}…`;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface ConceptPruneOptions {
|
|
43
|
-
/**
|
|
44
|
-
* Resolvers for relation targets. Without one, dangling relations cannot be detected.
|
|
45
|
-
*/
|
|
46
|
-
known?: (kind: string, id: string) => boolean;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface ConceptPruneResult {
|
|
50
|
-
concept: Concept;
|
|
51
|
-
plan: ConceptPrunePlan;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function resolveBudget(overrides: Partial<ConceptBudget>): ConceptBudget {
|
|
55
|
-
const budget: ConceptBudget = { ...DefaultConceptBudget, ...overrides, amp: "0.1", kind: "concept-budget" };
|
|
56
|
-
const minExamples = Math.max(0, Math.floor(budget.minExamples));
|
|
57
|
-
return {
|
|
58
|
-
...budget,
|
|
59
|
-
minExamples,
|
|
60
|
-
maxExamples: Math.max(minExamples, Math.floor(budget.maxExamples)),
|
|
61
|
-
maxRelations: Math.max(0, Math.floor(budget.maxRelations)),
|
|
62
|
-
keepVersions: Math.max(1, Math.floor(budget.keepVersions)),
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* A bounded view of one concept.
|
|
68
|
-
*
|
|
69
|
-
* Deterministic: the input is not mutated, and the same input yields the same
|
|
70
|
-
* plan. `version` is carried over unchanged — a view is not a revision, and
|
|
71
|
-
* bumping the version here would forge lineage.
|
|
72
|
-
*/
|
|
73
|
-
export function pruneConcept(concept: Concept, overrides: Partial<ConceptBudget> = {}, options: ConceptPruneOptions = {}): ConceptPruneResult {
|
|
74
|
-
const budget = resolveBudget(overrides);
|
|
75
|
-
const dropped: ConceptDrop[] = [];
|
|
76
|
-
let reclaimed = 0;
|
|
77
|
-
|
|
78
|
-
const drop = (item: ConceptDrop, raw: unknown): void => {
|
|
79
|
-
dropped.push(item);
|
|
80
|
-
reclaimed += utf8Bytes(raw);
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const view: Concept = { ...concept };
|
|
84
|
-
|
|
85
|
-
// Examples: collapse duplicates, then trim past the ceiling, never past the floor.
|
|
86
|
-
if (concept.examples) {
|
|
87
|
-
const unique = new Map<string, { example: ConceptExample; index: number }>();
|
|
88
|
-
concept.examples.forEach((example, index) => {
|
|
89
|
-
const key = normaliseText(example.description);
|
|
90
|
-
const existing = unique.get(key);
|
|
91
|
-
if (!existing) {
|
|
92
|
-
unique.set(key, { example, index });
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
if (typicalityOf(example) > typicalityOf(existing.example)) {
|
|
96
|
-
// The newcomer is the better example of the pair; the earlier one goes.
|
|
97
|
-
drop(
|
|
98
|
-
{
|
|
99
|
-
slot: "example",
|
|
100
|
-
index: existing.index,
|
|
101
|
-
summary: clip(existing.example.description),
|
|
102
|
-
reason: "duplicate",
|
|
103
|
-
revisit_if: "if the kept example is removed as atypical",
|
|
104
|
-
},
|
|
105
|
-
existing.example,
|
|
106
|
-
);
|
|
107
|
-
unique.set(key, { example, index });
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
drop(
|
|
111
|
-
{
|
|
112
|
-
slot: "example",
|
|
113
|
-
index,
|
|
114
|
-
summary: clip(example.description),
|
|
115
|
-
reason: "duplicate",
|
|
116
|
-
revisit_if: "if this example is rewritten with a detail the kept one lacks",
|
|
117
|
-
},
|
|
118
|
-
example,
|
|
119
|
-
);
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
const kept = [...unique.values()].sort((a, b) => a.index - b.index);
|
|
123
|
-
if (kept.length > budget.maxExamples) {
|
|
124
|
-
const ranked = [...kept].sort((a, b) => typicalityOf(b.example) - typicalityOf(a.example) || a.index - b.index);
|
|
125
|
-
const keep = new Set(ranked.slice(0, budget.maxExamples).map((item) => item.index));
|
|
126
|
-
for (const item of ranked) {
|
|
127
|
-
if (keep.has(item.index)) {
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
drop(
|
|
131
|
-
{
|
|
132
|
-
slot: "example",
|
|
133
|
-
index: item.index,
|
|
134
|
-
summary: clip(item.example.description),
|
|
135
|
-
reason: "over-budget",
|
|
136
|
-
revisit_if: "if the concept needs a broader extension again",
|
|
137
|
-
},
|
|
138
|
-
item.example,
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
view.examples = kept.filter((item) => keep.has(item.index)).map((item) => item.example);
|
|
142
|
-
} else {
|
|
143
|
-
view.examples = kept.map((item) => item.example);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Counterexamples are the falsifiers; they are never trimmed (W-2).
|
|
148
|
-
|
|
149
|
-
// Relations: duplicate, dangling, then over budget.
|
|
150
|
-
if (concept.relations) {
|
|
151
|
-
const seen = new Set<string>();
|
|
152
|
-
const surviving: { relation: ConceptRelation; index: number }[] = [];
|
|
153
|
-
concept.relations.forEach((relation, index) => {
|
|
154
|
-
const key = `${relation.type}|${relation.target.kind}|${relation.target.id}`;
|
|
155
|
-
if (seen.has(key)) {
|
|
156
|
-
drop(
|
|
157
|
-
{
|
|
158
|
-
slot: "relation",
|
|
159
|
-
index,
|
|
160
|
-
summary: `${relation.type} → ${relation.target.kind}:${relation.target.id}`,
|
|
161
|
-
reason: "duplicate",
|
|
162
|
-
revisit_if: "if the duplicate gains a distinct provenance or weight",
|
|
163
|
-
},
|
|
164
|
-
relation,
|
|
165
|
-
);
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
seen.add(key);
|
|
169
|
-
if (options.known && options.known(relation.target.kind, relation.target.id) === false) {
|
|
170
|
-
drop(
|
|
171
|
-
{
|
|
172
|
-
slot: "relation",
|
|
173
|
-
index,
|
|
174
|
-
summary: `${relation.type} → ${relation.target.kind}:${relation.target.id}`,
|
|
175
|
-
reason: "dangling",
|
|
176
|
-
revisit_if: `if ${relation.target.kind}:${relation.target.id} is imported again`,
|
|
177
|
-
},
|
|
178
|
-
relation,
|
|
179
|
-
);
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
surviving.push({ relation, index });
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
const keep = surviving.slice(0, budget.maxRelations);
|
|
186
|
-
for (const item of surviving.slice(budget.maxRelations)) {
|
|
187
|
-
drop(
|
|
188
|
-
{
|
|
189
|
-
slot: "relation",
|
|
190
|
-
index: item.index,
|
|
191
|
-
summary: `${item.relation.type} → ${item.relation.target.kind}:${item.relation.target.id}`,
|
|
192
|
-
reason: "over-budget",
|
|
193
|
-
revisit_if: "if the relation becomes load-bearing for a query",
|
|
194
|
-
},
|
|
195
|
-
item.relation,
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
view.relations = keep.map((item) => item.relation);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Extension: exact duplicates only. Membership refs may be external, so no dangling check.
|
|
202
|
-
if (concept.extension) {
|
|
203
|
-
const seen = new Set<string>();
|
|
204
|
-
const kept = concept.extension.filter((ref, index) => {
|
|
205
|
-
const key = `${ref.kind}:${ref.id}`;
|
|
206
|
-
if (!seen.has(key)) {
|
|
207
|
-
seen.add(key);
|
|
208
|
-
return true;
|
|
209
|
-
}
|
|
210
|
-
drop({ slot: "extension", index, summary: key, reason: "duplicate", revisit_if: "if the duplicate comes from a different source" }, ref);
|
|
211
|
-
return false;
|
|
212
|
-
});
|
|
213
|
-
view.extension = kept;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return {
|
|
217
|
-
concept: view,
|
|
218
|
-
plan: {
|
|
219
|
-
amp: "0.1",
|
|
220
|
-
kind: "concept-prune-plan",
|
|
221
|
-
concept: concept.id,
|
|
222
|
-
version: concept.version,
|
|
223
|
-
dropped,
|
|
224
|
-
reclaimedBytes: reclaimed,
|
|
225
|
-
budget,
|
|
226
|
-
},
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
export class ConceptCompactionRefused extends Error {
|
|
231
|
-
constructor(message: string) {
|
|
232
|
-
super(message);
|
|
233
|
-
this.name = "ConceptCompactionRefused";
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
export interface ConceptHistoryCompaction {
|
|
238
|
-
checkpoint: ConceptCheckpoint;
|
|
239
|
-
head: Concept;
|
|
240
|
-
removed: Concept[];
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* Replace every version except the retained tail with a checkpoint.
|
|
245
|
-
*
|
|
246
|
-
* Refuses on a gap in the version sequence: a checkpoint over a broken lineage
|
|
247
|
-
* would assert that nothing is missing while being unable to prove it.
|
|
248
|
-
*/
|
|
249
|
-
export function compactConceptHistory(versions: Concept[], options: { keepVersions?: number; now?: string } = {}): ConceptHistoryCompaction {
|
|
250
|
-
if (versions.length === 0) {
|
|
251
|
-
throw new ConceptCompactionRefused("no versions to compact");
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
const ordered = [...versions].sort((a, b) => a.version - b.version);
|
|
255
|
-
const id = ordered[0].id;
|
|
256
|
-
for (const version of ordered) {
|
|
257
|
-
if (version.id !== id) {
|
|
258
|
-
throw new ConceptCompactionRefused(`versions belong to different concepts: ${id} and ${version.id}`);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
for (let index = 1; index < ordered.length; index++) {
|
|
262
|
-
if (ordered[index].version !== ordered[index - 1].version + 1) {
|
|
263
|
-
throw new ConceptCompactionRefused(`lineage is broken between version ${ordered[index - 1].version} and ${ordered[index].version}`);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
const keepVersions = Math.max(1, Math.floor(options.keepVersions ?? 1));
|
|
268
|
-
const cut = ordered.length - keepVersions;
|
|
269
|
-
if (cut <= 0) {
|
|
270
|
-
throw new ConceptCompactionRefused("nothing to compact: every version is inside the retention window");
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
const removed = ordered.slice(0, cut);
|
|
274
|
-
const head = ordered[ordered.length - 1];
|
|
275
|
-
const last = removed[removed.length - 1];
|
|
276
|
-
|
|
277
|
-
return {
|
|
278
|
-
checkpoint: {
|
|
279
|
-
amp: "0.1",
|
|
280
|
-
kind: "concept-checkpoint",
|
|
281
|
-
id: `cp.concept.${id}.${last.version}`,
|
|
282
|
-
concept: id,
|
|
283
|
-
from: removed[0].version,
|
|
284
|
-
to: last.version,
|
|
285
|
-
count: removed.length,
|
|
286
|
-
tip: digestOf(last),
|
|
287
|
-
root: digestOf(removed),
|
|
288
|
-
created: options.now ?? new Date().toISOString(),
|
|
289
|
-
budget: { keepVersions },
|
|
290
|
-
},
|
|
291
|
-
head,
|
|
292
|
-
removed,
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* Check a concept checkpoint against the versions it claims to cover.
|
|
298
|
-
*/
|
|
299
|
-
export function verifyConceptCheckpoint(checkpoint: ConceptCheckpoint, removed: Concept[], head?: Concept): { ok: boolean; reasons: string[] } {
|
|
300
|
-
const reasons: string[] = [];
|
|
301
|
-
|
|
302
|
-
if (digestOf(removed) !== checkpoint.root) {
|
|
303
|
-
reasons.push("checkpoint root does not cover the removed versions");
|
|
304
|
-
}
|
|
305
|
-
if (removed.length !== checkpoint.count) {
|
|
306
|
-
reasons.push(`checkpoint count ${checkpoint.count} does not match ${removed.length} removed versions`);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
for (let index = 1; index < removed.length; index++) {
|
|
310
|
-
if (removed[index].version !== removed[index - 1].version + 1) {
|
|
311
|
-
reasons.push(`removed versions are not contiguous at ${removed[index - 1].version} → ${removed[index].version}`);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
const first = removed[0];
|
|
316
|
-
const last = removed[removed.length - 1];
|
|
317
|
-
if (!first || !last) {
|
|
318
|
-
reasons.push("no versions were removed");
|
|
319
|
-
} else {
|
|
320
|
-
if (first.version !== checkpoint.from) {
|
|
321
|
-
reasons.push(`checkpoint starts at ${checkpoint.from} but the first removed version is ${first.version}`);
|
|
322
|
-
}
|
|
323
|
-
if (last.version !== checkpoint.to) {
|
|
324
|
-
reasons.push(`checkpoint ends at ${checkpoint.to} but the last removed version is ${last.version}`);
|
|
325
|
-
}
|
|
326
|
-
if (digestOf(last) !== checkpoint.tip) {
|
|
327
|
-
reasons.push("checkpoint tip does not match the last removed version");
|
|
328
|
-
}
|
|
329
|
-
for (const version of removed) {
|
|
330
|
-
if (version.id !== checkpoint.concept) {
|
|
331
|
-
reasons.push(`removed version ${version.version} belongs to ${version.id}`);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
if (head) {
|
|
337
|
-
if (head.id !== checkpoint.concept) {
|
|
338
|
-
reasons.push(`head belongs to ${head.id}, not ${checkpoint.concept}`);
|
|
339
|
-
}
|
|
340
|
-
if (head.version !== checkpoint.to + 1) {
|
|
341
|
-
reasons.push(`head version ${head.version} does not continue from ${checkpoint.to}`);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
return { ok: reasons.length === 0, reasons };
|
|
346
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AMP v0.1 — concept economy.
|
|
3
|
-
*
|
|
4
|
-
* A concept is the unit that occupies an attention slot, so its size is paid on
|
|
5
|
-
* every turn that uses it. Left alone, a concept accretes: examples pile up,
|
|
6
|
-
* relations duplicate, old versions accumulate in the ledger. This layer bounds
|
|
7
|
-
* both, without letting either the definition or the falsifiers be trimmed away.
|
|
8
|
-
*
|
|
9
|
-
* Two operations, deliberately separate:
|
|
10
|
-
*
|
|
11
|
-
* - **pruneConcept** returns a bounded *view* of one concept. Storage is
|
|
12
|
-
* untouched and `version` does not move: a view is not a revision.
|
|
13
|
-
* - **compactConceptHistory** replaces every version except the head with a
|
|
14
|
-
* checkpoint that commits to their digest, so lineage stays provable.
|
|
15
|
-
*/
|
|
16
|
-
import type { Digest, Id, Timestamp } from "../types/common.ts";
|
|
17
|
-
|
|
18
|
-
export interface ConceptBudget {
|
|
19
|
-
amp: "0.1";
|
|
20
|
-
kind: "concept-budget";
|
|
21
|
-
/**
|
|
22
|
-
* Hard ceiling on examples in a view.
|
|
23
|
-
*/
|
|
24
|
-
maxExamples: number;
|
|
25
|
-
/**
|
|
26
|
-
* Floor that keeps a concept grounded: zero examples would make it a label.
|
|
27
|
-
*/
|
|
28
|
-
minExamples: number;
|
|
29
|
-
maxRelations: number;
|
|
30
|
-
/**
|
|
31
|
-
* Versions kept in storage besides the head. 1 means head only.
|
|
32
|
-
*/
|
|
33
|
-
keepVersions: number;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export type ConceptDropReason = "duplicate" | "over-budget" | "dangling";
|
|
37
|
-
|
|
38
|
-
export interface ConceptDrop {
|
|
39
|
-
slot: "example" | "relation" | "extension";
|
|
40
|
-
index: number;
|
|
41
|
-
/**
|
|
42
|
-
* Human-readable identification of what left the view.
|
|
43
|
-
*/
|
|
44
|
-
summary: string;
|
|
45
|
-
reason: ConceptDropReason;
|
|
46
|
-
revisit_if: string;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface ConceptPrunePlan {
|
|
50
|
-
amp: "0.1";
|
|
51
|
-
kind: "concept-prune-plan";
|
|
52
|
-
concept: Id;
|
|
53
|
-
version: number;
|
|
54
|
-
dropped: ConceptDrop[];
|
|
55
|
-
reclaimedBytes: number;
|
|
56
|
-
budget: ConceptBudget;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface ConceptCheckpoint {
|
|
60
|
-
amp: "0.1";
|
|
61
|
-
kind: "concept-checkpoint";
|
|
62
|
-
id: Id;
|
|
63
|
-
concept: Id;
|
|
64
|
-
from: number;
|
|
65
|
-
to: number;
|
|
66
|
-
count: number;
|
|
67
|
-
/**
|
|
68
|
-
* Digest of the last removed version, so a holder can spot a swap.
|
|
69
|
-
*/
|
|
70
|
-
tip: Digest;
|
|
71
|
-
/**
|
|
72
|
-
* Digest over the removed versions, in version order.
|
|
73
|
-
*/
|
|
74
|
-
root: Digest;
|
|
75
|
-
created: Timestamp;
|
|
76
|
-
budget: {
|
|
77
|
-
keepVersions: number;
|
|
78
|
-
};
|
|
79
|
-
}
|
package/src/concept/index.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Idempotency for external effects.
|
|
3
|
-
*
|
|
4
|
-
* A message send or a tool call carries a key; the first successful attempt
|
|
5
|
-
* stores its result, and a retry after a crash returns that result instead of
|
|
6
|
-
* performing the effect twice. The unique primary key is the arbiter, so two
|
|
7
|
-
* workers racing on the same key cannot both execute.
|
|
8
|
-
*/
|
|
9
|
-
import type { DatabaseSync } from "node:sqlite";
|
|
10
|
-
|
|
11
|
-
export interface OnceResult<T> {
|
|
12
|
-
value: T;
|
|
13
|
-
replayed: boolean;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
type IdempotencyRow = {
|
|
17
|
-
result: string;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
type Once = <T>(db: DatabaseSync, key: string, at: string, fn: () => T) => OnceResult<T>;
|
|
21
|
-
|
|
22
|
-
export const once: Once = <T>(db: DatabaseSync, key: string, at: string, fn: () => T): OnceResult<T> => {
|
|
23
|
-
const existing: IdempotencyRow | undefined = db.prepare("SELECT result FROM idempotency WHERE key = ?").get(key) as IdempotencyRow | undefined;
|
|
24
|
-
if (existing !== (void 0)) {
|
|
25
|
-
return { value: JSON.parse(existing.result) as T, replayed: true };
|
|
26
|
-
}
|
|
27
|
-
const value: T = fn();
|
|
28
|
-
try {
|
|
29
|
-
db.prepare("INSERT INTO idempotency (key, result, created_at) VALUES (?, ?, ?)").run(key, JSON.stringify(value), at);
|
|
30
|
-
return { value, replayed: false };
|
|
31
|
-
} catch {
|
|
32
|
-
/**
|
|
33
|
-
* Another worker won the insert between our SELECT and INSERT.
|
|
34
|
-
*/
|
|
35
|
-
const row: IdempotencyRow | undefined = db.prepare("SELECT result FROM idempotency WHERE key = ?").get(key) as IdempotencyRow | undefined;
|
|
36
|
-
if (row === (void 0)) {
|
|
37
|
-
throw new Error(`idempotency key ${key} was not stored`);
|
|
38
|
-
}
|
|
39
|
-
return { value: JSON.parse(row.result) as T, replayed: true };
|
|
40
|
-
}
|
|
41
|
-
};
|
package/src/concurrency/index.ts
DELETED
package/src/concurrency/mutex.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* An async mutex for in-process critical sections.
|
|
3
|
-
*
|
|
4
|
-
* The kernel's own writes are synchronous and serialized by SQLite, so this is
|
|
5
|
-
* for handlers that interleave at `await` points: a tool call, an LLM request,
|
|
6
|
-
* a file write. It is not a cross-worker lock — for that, use the database
|
|
7
|
-
* lease (`claimThread` + fencing token), because a promise cannot be shared
|
|
8
|
-
* between `worker_threads`.
|
|
9
|
-
*/
|
|
10
|
-
export class Mutex {
|
|
11
|
-
private tail: Promise<void> = Promise.resolve();
|
|
12
|
-
|
|
13
|
-
async run<T>(fn: () => Promise<T> | T): Promise<T> {
|
|
14
|
-
const previous: Promise<void> = this.tail;
|
|
15
|
-
let release: () => void = () => {};
|
|
16
|
-
this.tail = new Promise<void>((resolve) => {
|
|
17
|
-
release = resolve;
|
|
18
|
-
});
|
|
19
|
-
await previous;
|
|
20
|
-
try {
|
|
21
|
-
return await fn();
|
|
22
|
-
} finally {
|
|
23
|
-
release();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Named mutexes for one worker.
|
|
3
|
-
*
|
|
4
|
-
* A single process may need to serialize access to a resource (a file, a
|
|
5
|
-
* browser tab, an MCP session) without blocking unrelated work. The registry
|
|
6
|
-
* keeps one {@link Mutex} per name; `UnorderedMap` is enough because names are
|
|
7
|
-
* opaque and the lock itself carries no ordering.
|
|
8
|
-
*
|
|
9
|
-
* This is intra-worker only. Cross-worker exclusion is the database lease
|
|
10
|
-
* (`claimThread`), not a promise.
|
|
11
|
-
*/
|
|
12
|
-
import { UnorderedMap } from "../structure/unordered.ts";
|
|
13
|
-
import { Mutex } from "./mutex.ts";
|
|
14
|
-
|
|
15
|
-
export class NamedLocks {
|
|
16
|
-
private readonly locks: UnorderedMap<string, Mutex> = new UnorderedMap<string, Mutex>();
|
|
17
|
-
|
|
18
|
-
forName(name: string): Mutex {
|
|
19
|
-
const existing: Mutex | undefined = this.locks.get(name);
|
|
20
|
-
if (existing !== (void 0)) {
|
|
21
|
-
return existing;
|
|
22
|
-
}
|
|
23
|
-
const mutex: Mutex = new Mutex();
|
|
24
|
-
this.locks.set(name, mutex);
|
|
25
|
-
return mutex;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
run<T>(name: string, fn: () => Promise<T> | T): Promise<T> {
|
|
29
|
-
return this.forName(name).run(fn);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
get size(): number {
|
|
33
|
-
return this.locks.size;
|
|
34
|
-
}
|
|
35
|
-
}
|
package/src/concurrency/retry.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry helpers for the two kinds of contention a kernel sees.
|
|
3
|
-
*
|
|
4
|
-
* - SQLite write contention between `worker_threads`: `SQLITE_BUSY`. The
|
|
5
|
-
* connection sets `busy_timeout`, and async callers can additionally back off
|
|
6
|
-
* with {@link withBusyRetry}.
|
|
7
|
-
* - Application-level contention: a lease or a row version that moved. Callers
|
|
8
|
-
* should re-read and decide, not retry blindly.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
export interface RetryOptions {
|
|
12
|
-
attempts?: number;
|
|
13
|
-
baseMs?: number;
|
|
14
|
-
maxMs?: number;
|
|
15
|
-
sleep?: (ms: number) => Promise<void>;
|
|
16
|
-
isRetryable?: (error: unknown) => boolean;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export const isBusyError: (error: unknown) => boolean = (error: unknown): boolean => {
|
|
20
|
-
const message: string = error instanceof Error ? error.message : `${error}`;
|
|
21
|
-
return message.includes("database is locked") || message.includes("SQLITE_BUSY");
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const defaultSleep: (ms: number) => Promise<void> = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));
|
|
25
|
-
|
|
26
|
-
type BusyRetry = <T>(fn: () => Promise<T> | T, options?: RetryOptions) => Promise<T>;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Retry an async operation with exponential backoff while it is busy.
|
|
30
|
-
*/
|
|
31
|
-
export const withBusyRetry: BusyRetry = async <T>(fn: () => Promise<T> | T, options: RetryOptions = {}): Promise<T> => {
|
|
32
|
-
const attempts: number = options.attempts ?? 5;
|
|
33
|
-
const baseMs: number = options.baseMs ?? 25;
|
|
34
|
-
const maxMs: number = options.maxMs ?? 1000;
|
|
35
|
-
const sleep: (ms: number) => Promise<void> = options.sleep ?? defaultSleep;
|
|
36
|
-
const retryable: (error: unknown) => boolean = options.isRetryable ?? isBusyError;
|
|
37
|
-
let lastError: unknown;
|
|
38
|
-
for (let attempt: number = 0; attempt < attempts; attempt += 1) {
|
|
39
|
-
try {
|
|
40
|
-
return await fn();
|
|
41
|
-
} catch (error) {
|
|
42
|
-
lastError = error;
|
|
43
|
-
if (!retryable(error) || attempt === attempts - 1) {
|
|
44
|
-
throw error;
|
|
45
|
-
}
|
|
46
|
-
await sleep(Math.min(maxMs, baseMs * 2 ** attempt));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
throw lastError;
|
|
50
|
-
};
|