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,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One central-directory entry.
|
|
3
|
+
*
|
|
4
|
+
* `offset` is the local file header offset in the archive, not the payload
|
|
5
|
+
* offset; `compressedSize` and `uncompressedSize` are the central-directory
|
|
6
|
+
* values, which are authoritative even when a data descriptor follows the
|
|
7
|
+
* payload.
|
|
8
|
+
*/
|
|
9
|
+
export interface ZipEntry {
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly compressedSize: number;
|
|
12
|
+
readonly uncompressedSize: number;
|
|
13
|
+
readonly method: number;
|
|
14
|
+
readonly offset: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Read every ZIP entry into an in-memory map.
|
|
18
|
+
*
|
|
19
|
+
* The archive is never extracted to disk. Names are validated before the map is
|
|
20
|
+
* built, so a caller cannot receive a key that would be unsafe to join against
|
|
21
|
+
* a path. Duplicate names are rejected because the map would otherwise silently
|
|
22
|
+
* let the last entry win, which is a classic archive-confusion bug.
|
|
23
|
+
*
|
|
24
|
+
* @param bytes - Archive bytes.
|
|
25
|
+
* @returns Entry name to expanded bytes.
|
|
26
|
+
*/
|
|
27
|
+
export declare const readZipEntries: (bytes: Uint8Array) => Map<string, Uint8Array>;
|
|
28
|
+
/**
|
|
29
|
+
* Decode a UTF-8 text part and remove a leading byte-order mark.
|
|
30
|
+
*
|
|
31
|
+
* @param entries - Entry map from `readZipEntries`.
|
|
32
|
+
* @param name - Part name, for example `word/document.xml`.
|
|
33
|
+
* @returns Decoded text, or `undefined` when the part is absent.
|
|
34
|
+
*/
|
|
35
|
+
export declare const zipText: (entries: ReadonlyMap<string, Uint8Array>, name: string) => string | undefined;
|
package/lib/file/zip.js
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded, read-only ZIP container reader.
|
|
3
|
+
*
|
|
4
|
+
* Office Open XML documents are ZIP archives. Parsing them does not require a
|
|
5
|
+
* general-purpose unzip implementation, but it does require the same resource
|
|
6
|
+
* discipline as the rest of the filesystem domain: every offset is checked
|
|
7
|
+
* against the buffer, every chain is bounded, unsupported features are rejected
|
|
8
|
+
* instead of guessed, and expansion is capped per entry and in aggregate.
|
|
9
|
+
*
|
|
10
|
+
* The reader deliberately implements only what OOXML packages use:
|
|
11
|
+
*
|
|
12
|
+
* - the end-of-central-directory record (EOCD), including the archive comment;
|
|
13
|
+
* - the central directory and its local file headers;
|
|
14
|
+
* - method `0` (stored) and method `8` (deflate, through `node:zlib`);
|
|
15
|
+
* - entry names as UTF-8 (or Latin-1 when the UTF-8 flag is absent).
|
|
16
|
+
*
|
|
17
|
+
* Encrypted entries, ZIP64 archives, multi-disk archives and out-of-bounds
|
|
18
|
+
* offsets are rejected with the closed `parse_failed` / `quota_exceeded` error
|
|
19
|
+
* codes. Central-directory CRCs are not verified because Office readers rely on
|
|
20
|
+
* the XML parser and the per-entry size checks instead; a caller that needs CRC
|
|
21
|
+
* verification should do it on the extracted bytes.
|
|
22
|
+
*
|
|
23
|
+
* Expansion limits are 64 MiB for one entry and 256 MiB in total. Both are
|
|
24
|
+
* enforced against the declared size *and* the actual inflate output so a lying
|
|
25
|
+
* header cannot exhaust memory.
|
|
26
|
+
*/
|
|
27
|
+
import { inflateRawSync } from "node:zlib";
|
|
28
|
+
import { fail } from "./errors.js";
|
|
29
|
+
const EocdSignature = 0x06054b50;
|
|
30
|
+
const CentralSignature = 0x02014b50;
|
|
31
|
+
const LocalSignature = 0x04034b50;
|
|
32
|
+
const EocdLength = 22;
|
|
33
|
+
const CentralLength = 46;
|
|
34
|
+
const LocalLength = 30;
|
|
35
|
+
const MaxCommentLength = 0xffff;
|
|
36
|
+
const MaxEntries = 16384;
|
|
37
|
+
const MaxCentralBytes = 64 * 1024 * 1024;
|
|
38
|
+
const MaxEntryBytes = 64 * 1024 * 1024;
|
|
39
|
+
const MaxTotalBytes = 256 * 1024 * 1024;
|
|
40
|
+
const Zip64ExtraId = 0x0001;
|
|
41
|
+
const Utf8Flag = 0x0800;
|
|
42
|
+
const EncryptedFlag = 0x0001;
|
|
43
|
+
const StrongEncryptionFlag = 0x0040;
|
|
44
|
+
const MaskedHeaderFlag = 0x2000;
|
|
45
|
+
const Zip64Sentinel16 = 0xffff;
|
|
46
|
+
const Zip64Sentinel32 = 0xffffffff;
|
|
47
|
+
/**
|
|
48
|
+
* Create a little-endian view over the exact bytes the caller supplied.
|
|
49
|
+
* A Node `Buffer` is a `Uint8Array` with its own `byteOffset`, so the view must
|
|
50
|
+
* not assume that the backing array starts at zero.
|
|
51
|
+
*
|
|
52
|
+
* @param bytes - Archive bytes.
|
|
53
|
+
* @returns A view sharing the caller's memory.
|
|
54
|
+
*/
|
|
55
|
+
const viewOf = (bytes) => new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
56
|
+
const uint16 = (view, offset) => view.getUint16(offset, true);
|
|
57
|
+
const uint32 = (view, offset) => view.getUint32(offset, true);
|
|
58
|
+
/**
|
|
59
|
+
* Decode an entry name. The UTF-8 flag is optional for ASCII-only archives,
|
|
60
|
+
* where Latin-1 and UTF-8 agree; a genuinely non-ASCII name without the flag is
|
|
61
|
+
* decoded as Latin-1 rather than rejected, matching common ZIP writers.
|
|
62
|
+
*
|
|
63
|
+
* @param bytes - Archive bytes.
|
|
64
|
+
* @param offset - Name start.
|
|
65
|
+
* @param length - Name byte length.
|
|
66
|
+
* @param utf8 - Whether the UTF-8 name flag was set.
|
|
67
|
+
* @returns Decoded name.
|
|
68
|
+
*/
|
|
69
|
+
const decodeName = (bytes, offset, length, utf8) => {
|
|
70
|
+
const slice = bytes.subarray(offset, offset + length);
|
|
71
|
+
if (utf8) {
|
|
72
|
+
try {
|
|
73
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(slice);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return fail("parse_failed");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
let name = "";
|
|
80
|
+
for (let index = 0; index < slice.length; index += 1) {
|
|
81
|
+
name += String.fromCharCode(slice[index]);
|
|
82
|
+
}
|
|
83
|
+
return name;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Reject an entry name that could escape the conceptual archive root.
|
|
87
|
+
*
|
|
88
|
+
* The returned map is keyed by the entry name, not extracted to disk, so this
|
|
89
|
+
* is defence in depth rather than the only barrier: an OOXML parser that joins
|
|
90
|
+
* a relationship target with a part name must never see `..` in a part name.
|
|
91
|
+
* Absolute names, backslashes, drive letters and NUL/control characters are
|
|
92
|
+
* rejected for the same reason.
|
|
93
|
+
*
|
|
94
|
+
* @param name - Decoded entry name.
|
|
95
|
+
* @returns The same name when safe.
|
|
96
|
+
*/
|
|
97
|
+
const assertSafeName = (name) => {
|
|
98
|
+
if (name.length === 0 || name.length > 4096) {
|
|
99
|
+
return fail("parse_failed");
|
|
100
|
+
}
|
|
101
|
+
if (name.startsWith("/") || name.startsWith("\\") || name.startsWith("//") || /^[A-Za-z]:/.test(name)) {
|
|
102
|
+
return fail("parse_failed");
|
|
103
|
+
}
|
|
104
|
+
if (name.includes("\\")) {
|
|
105
|
+
return fail("parse_failed");
|
|
106
|
+
}
|
|
107
|
+
for (let index = 0; index < name.length; index += 1) {
|
|
108
|
+
const code = name.charCodeAt(index);
|
|
109
|
+
if (code < 0x20 || code === 0x7f) {
|
|
110
|
+
return fail("parse_failed");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const segments = name.split("/");
|
|
114
|
+
for (let index = 0; index < segments.length; index += 1) {
|
|
115
|
+
if (segments[index] === "..") {
|
|
116
|
+
return fail("parse_failed");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return name;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Scan a ZIP extra field for the ZIP64 marker. The sizes in the central
|
|
123
|
+
* directory are then usually `0xffffffff`, but the extra field alone is enough
|
|
124
|
+
* to reject the archive: silently reading a ZIP64 entry as 4 GiB is worse than
|
|
125
|
+
* a clear failure.
|
|
126
|
+
*
|
|
127
|
+
* @param bytes - Archive bytes.
|
|
128
|
+
* @param offset - Extra field start.
|
|
129
|
+
* @param length - Extra field byte length.
|
|
130
|
+
* @returns Nothing; throws when a ZIP64 field is present.
|
|
131
|
+
*/
|
|
132
|
+
const rejectZip64Extra = (bytes, offset, length) => {
|
|
133
|
+
const end = offset + length;
|
|
134
|
+
let cursor = offset;
|
|
135
|
+
while (cursor + 4 <= end) {
|
|
136
|
+
const id = bytes[cursor] | (bytes[cursor + 1] << 8);
|
|
137
|
+
const size = bytes[cursor + 2] | (bytes[cursor + 3] << 8);
|
|
138
|
+
if (id === Zip64ExtraId) {
|
|
139
|
+
return fail("parse_failed");
|
|
140
|
+
}
|
|
141
|
+
cursor += 4 + size;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Parse the EOCD and return its byte offset. The comment length is validated so
|
|
146
|
+
* a `PK\x05\x06` byte sequence inside a comment is not mistaken for the record.
|
|
147
|
+
*
|
|
148
|
+
* @param view - Archive view.
|
|
149
|
+
* @param length - Archive byte length.
|
|
150
|
+
* @returns EOCD offset.
|
|
151
|
+
*/
|
|
152
|
+
const findEocd = (view, length) => {
|
|
153
|
+
if (length < EocdLength) {
|
|
154
|
+
return fail("parse_failed");
|
|
155
|
+
}
|
|
156
|
+
const first = Math.max(0, length - EocdLength - MaxCommentLength);
|
|
157
|
+
for (let offset = length - EocdLength; offset >= first; offset -= 1) {
|
|
158
|
+
if (uint32(view, offset) !== EocdSignature) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const commentLength = uint16(view, offset + 20);
|
|
162
|
+
if (offset + EocdLength + commentLength === length) {
|
|
163
|
+
return offset;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return fail("parse_failed");
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Read and expand one entry from its local file header.
|
|
170
|
+
*
|
|
171
|
+
* The local header is re-read rather than trusted from the central directory so
|
|
172
|
+
* a payload offset is always derived from bytes this reader has validated. The
|
|
173
|
+
* local name must match the central name; a mismatch means the archive is
|
|
174
|
+
* malformed or deliberately ambiguous.
|
|
175
|
+
*
|
|
176
|
+
* @param view - Archive view.
|
|
177
|
+
* @param bytes - Archive bytes.
|
|
178
|
+
* @param entry - Parsed central-directory entry.
|
|
179
|
+
* @param offset - Local header offset.
|
|
180
|
+
* @param utf8 - Whether the central name used UTF-8.
|
|
181
|
+
* @param remaining - Bytes still allowed by the aggregate expansion limit.
|
|
182
|
+
* @returns Expanded entry bytes.
|
|
183
|
+
*/
|
|
184
|
+
const readPayload = (view, bytes, entry, offset, utf8, remaining) => {
|
|
185
|
+
if (offset < 0 || offset + LocalLength > bytes.byteLength) {
|
|
186
|
+
return fail("parse_failed");
|
|
187
|
+
}
|
|
188
|
+
if (uint32(view, offset) !== LocalSignature) {
|
|
189
|
+
return fail("parse_failed");
|
|
190
|
+
}
|
|
191
|
+
const localFlags = uint16(view, offset + 6);
|
|
192
|
+
if ((localFlags & EncryptedFlag) !== 0 || (localFlags & StrongEncryptionFlag) !== 0 || (localFlags & MaskedHeaderFlag) !== 0) {
|
|
193
|
+
return fail("parse_failed");
|
|
194
|
+
}
|
|
195
|
+
const localMethod = uint16(view, offset + 8);
|
|
196
|
+
if (localMethod !== entry.method) {
|
|
197
|
+
return fail("parse_failed");
|
|
198
|
+
}
|
|
199
|
+
const localNameLength = uint16(view, offset + 26);
|
|
200
|
+
const localExtraLength = uint16(view, offset + 28);
|
|
201
|
+
const nameStart = offset + LocalLength;
|
|
202
|
+
const nameEnd = nameStart + localNameLength;
|
|
203
|
+
if (nameEnd > bytes.byteLength) {
|
|
204
|
+
return fail("parse_failed");
|
|
205
|
+
}
|
|
206
|
+
const localName = decodeName(bytes, nameStart, localNameLength, utf8);
|
|
207
|
+
if (localName !== entry.name) {
|
|
208
|
+
return fail("parse_failed");
|
|
209
|
+
}
|
|
210
|
+
rejectZip64Extra(bytes, nameEnd, localExtraLength);
|
|
211
|
+
const payloadStart = nameEnd + localExtraLength;
|
|
212
|
+
const payloadEnd = payloadStart + entry.compressedSize;
|
|
213
|
+
if (payloadStart < 0 || payloadEnd > bytes.byteLength) {
|
|
214
|
+
return fail("parse_failed");
|
|
215
|
+
}
|
|
216
|
+
if (entry.method === 0) {
|
|
217
|
+
if (entry.compressedSize !== entry.uncompressedSize) {
|
|
218
|
+
return fail("parse_failed");
|
|
219
|
+
}
|
|
220
|
+
return bytes.slice(payloadStart, payloadEnd);
|
|
221
|
+
}
|
|
222
|
+
const allowance = Math.min(MaxEntryBytes, remaining);
|
|
223
|
+
if (allowance <= 0 || entry.uncompressedSize > allowance) {
|
|
224
|
+
return fail("quota_exceeded");
|
|
225
|
+
}
|
|
226
|
+
let output;
|
|
227
|
+
try {
|
|
228
|
+
output = inflateRawSync(bytes.subarray(payloadStart, payloadEnd), { maxOutputLength: allowance });
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return fail("parse_failed");
|
|
232
|
+
}
|
|
233
|
+
if (output.byteLength !== entry.uncompressedSize) {
|
|
234
|
+
return fail("parse_failed");
|
|
235
|
+
}
|
|
236
|
+
return output;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Read every ZIP entry into an in-memory map.
|
|
240
|
+
*
|
|
241
|
+
* The archive is never extracted to disk. Names are validated before the map is
|
|
242
|
+
* built, so a caller cannot receive a key that would be unsafe to join against
|
|
243
|
+
* a path. Duplicate names are rejected because the map would otherwise silently
|
|
244
|
+
* let the last entry win, which is a classic archive-confusion bug.
|
|
245
|
+
*
|
|
246
|
+
* @param bytes - Archive bytes.
|
|
247
|
+
* @returns Entry name to expanded bytes.
|
|
248
|
+
*/
|
|
249
|
+
export const readZipEntries = (bytes) => {
|
|
250
|
+
const view = viewOf(bytes);
|
|
251
|
+
const eocd = findEocd(view, bytes.byteLength);
|
|
252
|
+
const diskNumber = uint16(view, eocd + 4);
|
|
253
|
+
const centralDisk = uint16(view, eocd + 6);
|
|
254
|
+
const entriesOnDisk = uint16(view, eocd + 8);
|
|
255
|
+
const entryCount = uint16(view, eocd + 10);
|
|
256
|
+
const centralSize = uint32(view, eocd + 12);
|
|
257
|
+
const centralOffset = uint32(view, eocd + 16);
|
|
258
|
+
if (diskNumber !== 0 || centralDisk !== 0 || entriesOnDisk !== entryCount) {
|
|
259
|
+
return fail("parse_failed");
|
|
260
|
+
}
|
|
261
|
+
if (entryCount === Zip64Sentinel16 || centralSize === Zip64Sentinel32 || centralOffset === Zip64Sentinel32) {
|
|
262
|
+
return fail("parse_failed");
|
|
263
|
+
}
|
|
264
|
+
if (entryCount > MaxEntries) {
|
|
265
|
+
return fail("quota_exceeded");
|
|
266
|
+
}
|
|
267
|
+
if (centralSize > MaxCentralBytes) {
|
|
268
|
+
return fail("quota_exceeded");
|
|
269
|
+
}
|
|
270
|
+
if (centralOffset < 0 || centralOffset + centralSize > eocd) {
|
|
271
|
+
return fail("parse_failed");
|
|
272
|
+
}
|
|
273
|
+
const centralEnd = centralOffset + centralSize;
|
|
274
|
+
const entries = new Map();
|
|
275
|
+
let cursor = centralOffset;
|
|
276
|
+
let expanded = 0;
|
|
277
|
+
for (let index = 0; index < entryCount; index += 1) {
|
|
278
|
+
if (cursor < 0 || cursor + CentralLength > centralEnd) {
|
|
279
|
+
return fail("parse_failed");
|
|
280
|
+
}
|
|
281
|
+
if (uint32(view, cursor) !== CentralSignature) {
|
|
282
|
+
return fail("parse_failed");
|
|
283
|
+
}
|
|
284
|
+
const flags = uint16(view, cursor + 8);
|
|
285
|
+
const method = uint16(view, cursor + 10);
|
|
286
|
+
const compressedSize = uint32(view, cursor + 20);
|
|
287
|
+
const uncompressedSize = uint32(view, cursor + 24);
|
|
288
|
+
const nameLength = uint16(view, cursor + 28);
|
|
289
|
+
const extraLength = uint16(view, cursor + 30);
|
|
290
|
+
const commentLength = uint16(view, cursor + 32);
|
|
291
|
+
const diskStart = uint16(view, cursor + 34);
|
|
292
|
+
const localOffset = uint32(view, cursor + 42);
|
|
293
|
+
if ((flags & EncryptedFlag) !== 0 || (flags & StrongEncryptionFlag) !== 0 || (flags & MaskedHeaderFlag) !== 0) {
|
|
294
|
+
return fail("parse_failed");
|
|
295
|
+
}
|
|
296
|
+
if (method !== 0 && method !== 8) {
|
|
297
|
+
return fail("parse_failed");
|
|
298
|
+
}
|
|
299
|
+
if (compressedSize === Zip64Sentinel32 || uncompressedSize === Zip64Sentinel32 || localOffset === Zip64Sentinel32 || diskStart === Zip64Sentinel16) {
|
|
300
|
+
return fail("parse_failed");
|
|
301
|
+
}
|
|
302
|
+
if (diskStart !== 0) {
|
|
303
|
+
return fail("parse_failed");
|
|
304
|
+
}
|
|
305
|
+
if (uncompressedSize > MaxEntryBytes || expanded + uncompressedSize > MaxTotalBytes) {
|
|
306
|
+
return fail("quota_exceeded");
|
|
307
|
+
}
|
|
308
|
+
const nameStart = cursor + CentralLength;
|
|
309
|
+
const nameEnd = nameStart + nameLength;
|
|
310
|
+
const extraStart = nameEnd;
|
|
311
|
+
const extraEnd = extraStart + extraLength;
|
|
312
|
+
const next = extraEnd + commentLength;
|
|
313
|
+
if (nameLength === 0 || nameEnd > centralEnd || extraEnd > centralEnd || next > centralEnd) {
|
|
314
|
+
return fail("parse_failed");
|
|
315
|
+
}
|
|
316
|
+
rejectZip64Extra(bytes, extraStart, extraLength);
|
|
317
|
+
const name = assertSafeName(decodeName(bytes, nameStart, nameLength, (flags & Utf8Flag) !== 0));
|
|
318
|
+
if (entries.has(name)) {
|
|
319
|
+
return fail("parse_failed");
|
|
320
|
+
}
|
|
321
|
+
const entry = { name, compressedSize, uncompressedSize, method, offset: localOffset };
|
|
322
|
+
const payload = readPayload(view, bytes, entry, localOffset, (flags & Utf8Flag) !== 0, MaxTotalBytes - expanded);
|
|
323
|
+
expanded += payload.byteLength;
|
|
324
|
+
if (expanded > MaxTotalBytes || payload.byteLength !== uncompressedSize) {
|
|
325
|
+
return fail("quota_exceeded");
|
|
326
|
+
}
|
|
327
|
+
entries.set(name, payload);
|
|
328
|
+
cursor = next;
|
|
329
|
+
}
|
|
330
|
+
return entries;
|
|
331
|
+
};
|
|
332
|
+
/**
|
|
333
|
+
* Decode a UTF-8 text part and remove a leading byte-order mark.
|
|
334
|
+
*
|
|
335
|
+
* @param entries - Entry map from `readZipEntries`.
|
|
336
|
+
* @param name - Part name, for example `word/document.xml`.
|
|
337
|
+
* @returns Decoded text, or `undefined` when the part is absent.
|
|
338
|
+
*/
|
|
339
|
+
export const zipText = (entries, name) => {
|
|
340
|
+
const bytes = entries.get(name);
|
|
341
|
+
if (bytes === (void 0)) {
|
|
342
|
+
return undefined;
|
|
343
|
+
}
|
|
344
|
+
let start = 0;
|
|
345
|
+
if (bytes.length >= 3 && bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) {
|
|
346
|
+
start = 3;
|
|
347
|
+
}
|
|
348
|
+
return new TextDecoder("utf-8").decode(bytes.subarray(start));
|
|
349
|
+
};
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frozen algorithm identifiers. Adding one is a wire-format change: it must ship
|
|
3
|
+
* with known-answer vectors and a cross-check against `node:crypto`.
|
|
4
|
+
*/
|
|
5
|
+
export type AlgorithmId = "sha256" | "sha512" | "sha3-256" | "blake2b-512";
|
|
6
|
+
/**
|
|
7
|
+
* Registry row. `digestBytes` is needed even for algorithms without a backend
|
|
8
|
+
* because `parseShort`/`parseRef` must reject a hex string of the wrong length
|
|
9
|
+
* for the algorithm it claims to be.
|
|
10
|
+
*/
|
|
11
|
+
export interface AlgorithmSpec {
|
|
12
|
+
readonly id: AlgorithmId;
|
|
13
|
+
readonly digestBytes: number;
|
|
14
|
+
readonly backend: "portable" | "unavailable";
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Declaration order is the canonical listing order; nothing in the module
|
|
18
|
+
* depends on iteration order, but diagnostics and future catalogues do.
|
|
19
|
+
*/
|
|
20
|
+
export declare const AlgorithmIds: readonly AlgorithmId[];
|
|
21
|
+
/**
|
|
22
|
+
* True for a value that is one of the four registered identifiers. Used by the
|
|
23
|
+
* parsers, which must reject an unknown algorithm instead of guessing.
|
|
24
|
+
*/
|
|
25
|
+
export declare const isAlgorithmId: (value: string) => value is AlgorithmId;
|
|
26
|
+
/**
|
|
27
|
+
* Look up a registered algorithm. A value that is syntactically fine but not
|
|
28
|
+
* registered is an `UnsupportedAlgorithm`, because at this point a hasher is
|
|
29
|
+
* required and there is nothing safe to substitute.
|
|
30
|
+
*/
|
|
31
|
+
export declare const algorithmSpec: (algorithm: AlgorithmId) => AlgorithmSpec;
|
|
32
|
+
/**
|
|
33
|
+
* Expected lowercase-hex length of a digest for this algorithm. Both parsers
|
|
34
|
+
* use it so "wrong length" and "wrong algorithm" cannot be confused.
|
|
35
|
+
*/
|
|
36
|
+
export declare const digestHexLength: (algorithm: AlgorithmId) => number;
|
|
37
|
+
/**
|
|
38
|
+
* Lowercase hex encoding. Lowercase is required by the OCI digest grammar and
|
|
39
|
+
* by every existing `sha256:` reference in this repository; emitting uppercase
|
|
40
|
+
* would create a second spelling of the same digest.
|
|
41
|
+
*/
|
|
42
|
+
export declare const bytesToHex: (bytes: Uint8Array) => string;
|
|
43
|
+
/**
|
|
44
|
+
* Decode a hex digest back to bytes. Used by the tree leaf serialisation, which
|
|
45
|
+
* has to embed a child digest as 32 raw bytes.
|
|
46
|
+
*/
|
|
47
|
+
export declare const hexToBytes: (hex: string) => Uint8Array;
|
|
48
|
+
/**
|
|
49
|
+
* Strict lowercase-hex check. Uppercase is rejected rather than folded, because
|
|
50
|
+
* `sha256:AB...` and `sha256:ab...` are different strings and a parser that
|
|
51
|
+
* accepts both silently creates two names for one digest.
|
|
52
|
+
*/
|
|
53
|
+
export declare const isLowerHex: (text: string, length: number) => boolean;
|
|
54
|
+
/**
|
|
55
|
+
* A streaming digest sink.
|
|
56
|
+
*
|
|
57
|
+
* `update` accepts arbitrary chunk boundaries and buffers a partial block
|
|
58
|
+
* internally, so a file can be read in 1 MiB slices without the caller tracking
|
|
59
|
+
* alignment. `digest` finalises the hash and is single-shot: a second call would
|
|
60
|
+
* need a second padding pass over state that is already mutated, so it throws
|
|
61
|
+
* instead of returning a silently wrong value.
|
|
62
|
+
*/
|
|
63
|
+
export interface ByteHasher {
|
|
64
|
+
update(bytes: Uint8Array): ByteHasher;
|
|
65
|
+
digest(): Uint8Array;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Portable incremental SHA-256 over raw bytes.
|
|
69
|
+
*
|
|
70
|
+
* The implementation tracks the total byte count separately from the buffered
|
|
71
|
+
* block because the FIPS padding needs the input length in bits; computing the
|
|
72
|
+
* final eight bytes from `totalBytes` (high = bits >> 32, low = low 32 bits)
|
|
73
|
+
* avoids the overflow a 32-bit byte counter would hit at 512 MiB.
|
|
74
|
+
*/
|
|
75
|
+
export declare const createSha256: () => ByteHasher;
|
|
76
|
+
/**
|
|
77
|
+
* One-shot SHA-256 over raw bytes. Thin wrapper so call sites do not repeat the
|
|
78
|
+
* create/update/digest sequence and cannot forget the update.
|
|
79
|
+
*/
|
|
80
|
+
export declare const sha256Bytes: (bytes: Uint8Array) => Uint8Array;
|
|
81
|
+
/**
|
|
82
|
+
* Fail closed unless this build can actually compute the named algorithm.
|
|
83
|
+
*
|
|
84
|
+
* The registry must answer before any payload is touched: a caller that gets a
|
|
85
|
+
* hasher is entitled to assume the algorithm in the reference is the algorithm
|
|
86
|
+
* that ran. The same guard is called by the file layer before it opens a file,
|
|
87
|
+
* so an unsupported algorithm fails without a pointless read instead of after
|
|
88
|
+
* the work has already been done.
|
|
89
|
+
*/
|
|
90
|
+
export declare const assertBackend: (algorithm: AlgorithmId) => AlgorithmSpec;
|
|
91
|
+
/**
|
|
92
|
+
* Construct a hasher for any registered algorithm, or fail closed.
|
|
93
|
+
*
|
|
94
|
+
* Kept as a thin wrapper over `assertBackend` so the availability rule lives in
|
|
95
|
+
* exactly one place.
|
|
96
|
+
*/
|
|
97
|
+
export declare const createHasher: (algorithm: AlgorithmId) => ByteHasher;
|