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/lib/file/path.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Root-confined path resolution.
|
|
3
|
+
*
|
|
4
|
+
* Every tool path is a POSIX path relative to one of the session's roots. The
|
|
5
|
+
* sandbox rejects absolute paths, `..`, NUL/control characters and backslashes,
|
|
6
|
+
* then verifies that no existing component is a symlink (unless the host opted
|
|
7
|
+
* into following them). The session root itself is resolved through `realpath`
|
|
8
|
+
* when the session is opened, so replacing a parent directory afterwards cannot
|
|
9
|
+
* move an already-authorized root.
|
|
10
|
+
*/
|
|
11
|
+
import { lstatSync, realpathSync, statSync } from "node:fs";
|
|
12
|
+
import { isAbsolute, join, relative as relativePath, resolve as resolvePath, sep } from "node:path";
|
|
13
|
+
import { fail } from "./errors.js";
|
|
14
|
+
const ControlCharacters = /[\u0000-\u001f\u007f]/;
|
|
15
|
+
const DriveLetter = /^[A-Za-z]:/;
|
|
16
|
+
/**
|
|
17
|
+
* Normalize one caller-supplied relative path into slash-separated segments.
|
|
18
|
+
* A `.` or empty path means the root itself.
|
|
19
|
+
*/
|
|
20
|
+
const normalizeRelative = (input) => {
|
|
21
|
+
if (typeof (input) !== "string" || ControlCharacters.test(input)) {
|
|
22
|
+
return fail("invalid_path");
|
|
23
|
+
}
|
|
24
|
+
const text = input.trim();
|
|
25
|
+
if (text.length === 0 || text === "." || text === "./") {
|
|
26
|
+
return ".";
|
|
27
|
+
}
|
|
28
|
+
if (text.includes("\\")) {
|
|
29
|
+
return fail("invalid_path");
|
|
30
|
+
}
|
|
31
|
+
if (isAbsolute(text) || DriveLetter.test(text) || text.startsWith("//")) {
|
|
32
|
+
return fail("invalid_path");
|
|
33
|
+
}
|
|
34
|
+
const segments = [];
|
|
35
|
+
const parts = text.split("/");
|
|
36
|
+
for (let index = 0; index < parts.length; index += 1) {
|
|
37
|
+
const part = parts[index];
|
|
38
|
+
if (part === "" || part === ".") {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (part === "..") {
|
|
42
|
+
return fail("path_escape");
|
|
43
|
+
}
|
|
44
|
+
segments.push(part);
|
|
45
|
+
}
|
|
46
|
+
return segments.length === 0 ? "." : segments.join("/");
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Convert a host-relative path to POSIX separators without resolving it.
|
|
50
|
+
*/
|
|
51
|
+
const toPosix = (value) => value.split(sep).join("/");
|
|
52
|
+
/**
|
|
53
|
+
* Case-fold only on case-insensitive platforms; the check must not make a
|
|
54
|
+
* POSIX host accept `Readme.md` as `README.md`.
|
|
55
|
+
*/
|
|
56
|
+
const fold = (value) => (process.platform === "win32" ? value.toLowerCase() : value);
|
|
57
|
+
export class PathSandbox {
|
|
58
|
+
roots;
|
|
59
|
+
byId = new Map();
|
|
60
|
+
followSymlinks;
|
|
61
|
+
defaultRootId;
|
|
62
|
+
constructor(roots, options = {}) {
|
|
63
|
+
if (!Array.isArray(roots) || roots.length === 0) {
|
|
64
|
+
throw new Error("path sandbox requires at least one root");
|
|
65
|
+
}
|
|
66
|
+
const seenIds = new Set();
|
|
67
|
+
const seenPaths = new Set();
|
|
68
|
+
const normalized = [];
|
|
69
|
+
for (let index = 0; index < roots.length; index += 1) {
|
|
70
|
+
const root = roots[index];
|
|
71
|
+
if (root === null ||
|
|
72
|
+
typeof (root) !== "object" ||
|
|
73
|
+
typeof (root.id) !== "string" ||
|
|
74
|
+
root.id.trim().length === 0 ||
|
|
75
|
+
typeof (root.path) !== "string" ||
|
|
76
|
+
!isAbsolute(root.path) ||
|
|
77
|
+
typeof (root.writable) !== "boolean" ||
|
|
78
|
+
!Array.isArray(root.exclude) ||
|
|
79
|
+
root.exclude.some((entry) => typeof (entry) !== "string") ||
|
|
80
|
+
seenIds.has(root.id)) {
|
|
81
|
+
throw new Error("invalid or duplicate session root");
|
|
82
|
+
}
|
|
83
|
+
let real;
|
|
84
|
+
try {
|
|
85
|
+
if (!statSync(root.path).isDirectory()) {
|
|
86
|
+
throw new Error("root is not a directory");
|
|
87
|
+
}
|
|
88
|
+
real = realpathSync(root.path);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
throw new Error("invalid or inaccessible session root");
|
|
92
|
+
}
|
|
93
|
+
const identity = fold(real);
|
|
94
|
+
if (seenPaths.has(identity)) {
|
|
95
|
+
throw new Error("invalid or duplicate session root");
|
|
96
|
+
}
|
|
97
|
+
seenIds.add(root.id);
|
|
98
|
+
seenPaths.add(identity);
|
|
99
|
+
normalized.push({ id: root.id, path: real, writable: root.writable, exclude: [...root.exclude] });
|
|
100
|
+
}
|
|
101
|
+
this.roots = normalized;
|
|
102
|
+
for (const root of normalized) {
|
|
103
|
+
this.byId.set(root.id, root);
|
|
104
|
+
}
|
|
105
|
+
this.followSymlinks = options.followSymlinks === true;
|
|
106
|
+
this.defaultRootId = normalized[0].id;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* All roots, in the order the session declared them.
|
|
110
|
+
*/
|
|
111
|
+
listRoots() {
|
|
112
|
+
return this.roots.map((root) => ({ ...root, exclude: [...root.exclude] }));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The root used when a path does not name one explicitly.
|
|
116
|
+
*/
|
|
117
|
+
defaultRoot() {
|
|
118
|
+
return this.root(this.defaultRootId);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Look up a root by id.
|
|
122
|
+
*/
|
|
123
|
+
root(id) {
|
|
124
|
+
const root = this.byId.get(id);
|
|
125
|
+
return root === (void 0) ? fail("invalid_path") : { ...root, exclude: [...root.exclude] };
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Resolve a caller path to a root, a normalized relative path and an
|
|
129
|
+
* absolute host path. The method does not require the target to exist; a
|
|
130
|
+
* write may create it. Symlink checks stop at the first missing component.
|
|
131
|
+
*
|
|
132
|
+
* @param input - Root-relative POSIX path, optionally prefixed by `rootId/`.
|
|
133
|
+
* @param operation - Operation used for writability checks.
|
|
134
|
+
* @returns Resolved path.
|
|
135
|
+
*/
|
|
136
|
+
resolve(input, operation) {
|
|
137
|
+
if (typeof (input) !== "string") {
|
|
138
|
+
return fail("invalid_path");
|
|
139
|
+
}
|
|
140
|
+
const normalized = normalizeRelative(input);
|
|
141
|
+
let root = this.defaultRoot();
|
|
142
|
+
let relative = normalized;
|
|
143
|
+
const firstSlash = normalized.indexOf("/");
|
|
144
|
+
const firstSegment = firstSlash === -1 ? normalized : normalized.slice(0, firstSlash);
|
|
145
|
+
const named = this.byId.get(firstSegment);
|
|
146
|
+
if (named !== (void 0)) {
|
|
147
|
+
root = named;
|
|
148
|
+
relative = firstSlash === -1 ? "." : normalized.slice(firstSlash + 1);
|
|
149
|
+
}
|
|
150
|
+
if (this.isExcluded(root, relative)) {
|
|
151
|
+
return fail("excluded_path");
|
|
152
|
+
}
|
|
153
|
+
if ((operation === "write" || operation === "create" || operation === "remove") && !root.writable) {
|
|
154
|
+
return fail("permission_denied");
|
|
155
|
+
}
|
|
156
|
+
const absolute = resolvePath(join(root.path, relative));
|
|
157
|
+
if (!this.contains(root.path, absolute)) {
|
|
158
|
+
return fail("path_escape");
|
|
159
|
+
}
|
|
160
|
+
this.assertNoSymlinkEscape(root, relative, absolute);
|
|
161
|
+
return { root: { ...root, exclude: [...root.exclude] }, relative, absolute };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Whether an absolute path is inside a root, using the platform's case
|
|
165
|
+
* sensitivity.
|
|
166
|
+
*/
|
|
167
|
+
contains(rootPath, absolute) {
|
|
168
|
+
const path = relativePath(rootPath, absolute);
|
|
169
|
+
if (path === "") {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
if (isAbsolute(path)) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
return path !== ".." && !path.startsWith(`..${sep}`) && !path.startsWith("../");
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Prefix/name exclusion. A bare name excludes a segment at any depth; a
|
|
179
|
+
* value containing `/` is a root-relative prefix.
|
|
180
|
+
*/
|
|
181
|
+
isExcluded(root, relative) {
|
|
182
|
+
const target = relative === "." ? "" : relative;
|
|
183
|
+
return root.exclude.some((entry) => {
|
|
184
|
+
const value = entry.replace(/^\.?\//, "").replace(/\/+$/, "");
|
|
185
|
+
if (value.length === 0) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
if (value.includes("/")) {
|
|
189
|
+
return target === value || target.startsWith(`${value}/`);
|
|
190
|
+
}
|
|
191
|
+
return target.split("/").includes(value);
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The root-relative POSIX path for an absolute path already known to be in
|
|
196
|
+
* the root.
|
|
197
|
+
*/
|
|
198
|
+
relative(root, absolute) {
|
|
199
|
+
return toPosix(relativePath(root.path, absolute)) || ".";
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Re-check that a path still resolves inside its root. Used after a write
|
|
203
|
+
* rename and before a read, so a component swapped for a symlink between
|
|
204
|
+
* resolution and I/O is rejected.
|
|
205
|
+
*/
|
|
206
|
+
revalidate(rooted) {
|
|
207
|
+
const root = this.byId.get(rooted.root.id) ?? fail("invalid_path");
|
|
208
|
+
if (root.path !== rooted.root.path || rooted.absolute !== resolvePath(join(root.path, rooted.relative)) || !this.contains(root.path, rooted.absolute)) {
|
|
209
|
+
return fail("path_escape");
|
|
210
|
+
}
|
|
211
|
+
this.assertNoSymlinkEscape(root, rooted.relative, rooted.absolute);
|
|
212
|
+
}
|
|
213
|
+
assertNoSymlinkEscape(root, relative, absolute) {
|
|
214
|
+
try {
|
|
215
|
+
if (realpathSync(root.path) !== root.path) {
|
|
216
|
+
return fail("path_escape");
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return fail("invalid_path");
|
|
221
|
+
}
|
|
222
|
+
if (relative === ".") {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const segments = relative.split("/");
|
|
226
|
+
let current = root.path;
|
|
227
|
+
for (let index = 0; index < segments.length; index += 1) {
|
|
228
|
+
current = join(current, segments[index]);
|
|
229
|
+
let stat;
|
|
230
|
+
try {
|
|
231
|
+
stat = lstatSync(current);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (stat.isSymbolicLink()) {
|
|
237
|
+
if (!this.followSymlinks) {
|
|
238
|
+
return fail("symlink_denied");
|
|
239
|
+
}
|
|
240
|
+
const real = realpathSync(current);
|
|
241
|
+
if (!this.contains(root.path, real)) {
|
|
242
|
+
return fail("path_escape");
|
|
243
|
+
}
|
|
244
|
+
current = real;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (this.followSymlinks) {
|
|
248
|
+
try {
|
|
249
|
+
const real = realpathSync(absolute);
|
|
250
|
+
if (!this.contains(root.path, real)) {
|
|
251
|
+
return fail("path_escape");
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { PathSandbox } from "./path.js";
|
|
2
|
+
import type { Charset } from "../syntax/types.js";
|
|
3
|
+
import type { ReadPage, ReadRequest } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Options for {@link readPage}. `maxBytes` bounds the *file*, not the page; the
|
|
6
|
+
* page budget travels in {@link ReadRequest.maxBytes}.
|
|
7
|
+
*/
|
|
8
|
+
export interface ReadOptions {
|
|
9
|
+
readonly maxBytes?: number;
|
|
10
|
+
readonly timeZone?: "local" | "utc";
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Per-session page cache.
|
|
14
|
+
*
|
|
15
|
+
* The value is the page text *without* line-number prefixes, so the same page
|
|
16
|
+
* can serve a numbered and an unnumbered request. Keys are built by the caller
|
|
17
|
+
* and must contain the root-relative path, the whole-file fingerprint, the
|
|
18
|
+
* 1-based start line and the effective line and byte budgets; the fingerprint
|
|
19
|
+
* is what makes a cached page impossible to serve against changed bytes.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ReadCache {
|
|
22
|
+
private readonly pages;
|
|
23
|
+
constructor(options?: {
|
|
24
|
+
entries?: number;
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Read a cached page and mark it most recently used.
|
|
28
|
+
*/
|
|
29
|
+
get(key: string): string | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Insert or replace a page; the entry becomes most recently used.
|
|
32
|
+
*/
|
|
33
|
+
set(key: string, value: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Number of cached pages.
|
|
36
|
+
*/
|
|
37
|
+
get size(): number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Read one bounded page of a workspace file.
|
|
41
|
+
*
|
|
42
|
+
* The flow is deliberately strict: sandbox resolution, regular-file check,
|
|
43
|
+
* file-size ceiling, a second sandbox revalidation before the read, charset
|
|
44
|
+
* sniffing, decode, line-index paging and finally the UTF-8 byte budget. A
|
|
45
|
+
* `startLine` past EOF returns an empty page with `nextStartLine: null` rather
|
|
46
|
+
* than an error, which lets a client keep paging without a special case.
|
|
47
|
+
*
|
|
48
|
+
* @param sandbox - Session sandbox that owns path resolution.
|
|
49
|
+
* @param request - Path, 1-based start line and page budgets.
|
|
50
|
+
* @param options - File-size ceiling and timestamp mode.
|
|
51
|
+
* @returns The decoded page plus its fingerprint and total sizes.
|
|
52
|
+
*/
|
|
53
|
+
export declare const readPage: (sandbox: PathSandbox, request: ReadRequest, options?: ReadOptions) => ReadPage;
|
|
54
|
+
/**
|
|
55
|
+
* Canonical fingerprint of one raw byte range.
|
|
56
|
+
*
|
|
57
|
+
* The preimage binds the absolute offsets, so the same bytes at a different
|
|
58
|
+
* place do not share a fingerprint. Line spans are hashed through this same
|
|
59
|
+
* function after they are mapped to raw bytes, which is what lets the read and
|
|
60
|
+
* write helpers agree on a single range identity.
|
|
61
|
+
*
|
|
62
|
+
* @param startByte - 0-based inclusive start offset in the raw file.
|
|
63
|
+
* @param endByte - 0-based exclusive end offset in the raw file.
|
|
64
|
+
* @param bytes - Raw bytes of the range.
|
|
65
|
+
* @returns `sha256:<hex>` of the domain-separated range preimage.
|
|
66
|
+
*/
|
|
67
|
+
export declare const byteRangeFingerprint: (startByte: number, endByte: number, bytes: Uint8Array) => string;
|
|
68
|
+
/**
|
|
69
|
+
* Dominant line terminator seen in a decoded text, or `none` when the text has
|
|
70
|
+
* no newline at all.
|
|
71
|
+
*/
|
|
72
|
+
export type LineEnding = "\n" | "\r\n" | "none";
|
|
73
|
+
/**
|
|
74
|
+
* Request for {@link useByte}. Offsets are 0-based and half-open over the raw
|
|
75
|
+
* file bytes, including any BOM.
|
|
76
|
+
*/
|
|
77
|
+
export interface ByteUseRequest {
|
|
78
|
+
readonly path: string;
|
|
79
|
+
readonly startByte: number;
|
|
80
|
+
readonly endByte: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Raw byte range plus the fingerprints needed to patch it safely.
|
|
84
|
+
*/
|
|
85
|
+
export interface ByteUse {
|
|
86
|
+
readonly path: string;
|
|
87
|
+
readonly fingerprint: string;
|
|
88
|
+
readonly rangeFingerprint: string;
|
|
89
|
+
readonly charset: Charset;
|
|
90
|
+
readonly startByte: number;
|
|
91
|
+
readonly endByte: number;
|
|
92
|
+
readonly totalBytes: bigint;
|
|
93
|
+
readonly bytes: Uint8Array;
|
|
94
|
+
readonly text: string;
|
|
95
|
+
readonly binary: boolean;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Request for {@link useLine}. Line numbers are 1-based and inclusive;
|
|
99
|
+
* `endLine = startLine - 1` describes the empty insertion point before
|
|
100
|
+
* `startLine`.
|
|
101
|
+
*/
|
|
102
|
+
export interface LineUseRequest {
|
|
103
|
+
readonly path: string;
|
|
104
|
+
readonly startLine: number;
|
|
105
|
+
readonly endLine: number;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Byte span of one line range. `startByte`/`endByte` cover the raw bytes of the
|
|
109
|
+
* first character through the terminator of the last line, so a line write and
|
|
110
|
+
* a byte write address exactly the same region.
|
|
111
|
+
*/
|
|
112
|
+
export interface LineSpan {
|
|
113
|
+
readonly charset: Charset;
|
|
114
|
+
readonly startLine: number;
|
|
115
|
+
readonly endLine: number;
|
|
116
|
+
readonly startChar: number;
|
|
117
|
+
readonly endChar: number;
|
|
118
|
+
readonly startByte: number;
|
|
119
|
+
readonly endByte: number;
|
|
120
|
+
readonly totalLines: bigint;
|
|
121
|
+
readonly totalBytes: bigint;
|
|
122
|
+
readonly bomLength: number;
|
|
123
|
+
readonly lineEnding: LineEnding;
|
|
124
|
+
readonly finalNewline: boolean;
|
|
125
|
+
readonly text: string;
|
|
126
|
+
readonly rangeFingerprint: string;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Line range plus the whole-file fingerprint of the read.
|
|
130
|
+
*/
|
|
131
|
+
export interface LineUse extends LineSpan {
|
|
132
|
+
readonly path: string;
|
|
133
|
+
readonly fingerprint: string;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Read one raw byte range and return exact bytes, the whole-file fingerprint
|
|
137
|
+
* and the canonical range fingerprint. Binary content is allowed here: this is
|
|
138
|
+
* the byte-oriented companion to {@link readPage}, not a text tool.
|
|
139
|
+
*
|
|
140
|
+
* @param sandbox - Session sandbox that owns path resolution.
|
|
141
|
+
* @param request - Path and half-open raw byte offsets.
|
|
142
|
+
* @param options - File-size ceiling.
|
|
143
|
+
* @returns Range bytes, text, charset and both fingerprints.
|
|
144
|
+
*/
|
|
145
|
+
export declare const useByte: (sandbox: PathSandbox, request: ByteUseRequest, options?: ReadOptions) => ByteUse;
|
|
146
|
+
/**
|
|
147
|
+
* Read one line range and return its decoded text plus the exact byte span and
|
|
148
|
+
* range fingerprint a matching write needs. An empty range (`endLine =
|
|
149
|
+
* startLine - 1`) describes an insertion point; EOF and empty files are
|
|
150
|
+
* supported because `startLine = totalLines + 1` is a valid insertion point.
|
|
151
|
+
*
|
|
152
|
+
* @param sandbox - Session sandbox that owns path resolution.
|
|
153
|
+
* @param request - Path and 1-based inclusive line range.
|
|
154
|
+
* @param options - File-size ceiling.
|
|
155
|
+
* @returns Line span, text, EOL metadata and both fingerprints.
|
|
156
|
+
*/
|
|
157
|
+
export declare const useLine: (sandbox: PathSandbox, request: LineUseRequest, options?: ReadOptions) => LineUse;
|
|
158
|
+
/**
|
|
159
|
+
* Locate a line range directly from raw bytes. This is the shared mapping used
|
|
160
|
+
* by {@link useLine} and by the write-side line patch, so both sides compute the
|
|
161
|
+
* same byte span and range fingerprint.
|
|
162
|
+
*
|
|
163
|
+
* @param bytes - Raw file bytes.
|
|
164
|
+
* @param startLine - 1-based inclusive start line.
|
|
165
|
+
* @param endLine - 1-based inclusive end line, or `startLine - 1` for insertion.
|
|
166
|
+
* @returns The canonical line span.
|
|
167
|
+
*/
|
|
168
|
+
export declare const locateLineSpan: (bytes: Uint8Array, startLine: number, endLine: number) => LineSpan;
|