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
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Read-only syntax-tree construction through a session's filesystem sandbox. */
|
|
2
|
+
import { readFileSync, statSync } from "node:fs";
|
|
3
|
+
import { rawDigest } from "../fingerprint/raw.js";
|
|
4
|
+
import { detectCharset, decodeText } from "../syntax/charset.js";
|
|
5
|
+
import { buildSyntaxTreeFromText, DefaultSyntaxRegistry } from "../syntax/syntaxTree.js";
|
|
6
|
+
import { fail, isFilesystemError } from "./errors.js";
|
|
7
|
+
const DefaultMaxBytes = 4 * 1024 * 1024;
|
|
8
|
+
/**
|
|
9
|
+
* Read and parse one file through the session sandbox. The parser is read-only:
|
|
10
|
+
* it never evaluates the file, resolves an import or launches a subprocess.
|
|
11
|
+
*/
|
|
12
|
+
export const buildSyntaxTree = (sandbox, path, options = {}) => {
|
|
13
|
+
const rooted = sandbox.resolve(path, "read");
|
|
14
|
+
sandbox.revalidate(rooted);
|
|
15
|
+
const stat = statSync(rooted.absolute);
|
|
16
|
+
if (!stat.isFile()) {
|
|
17
|
+
return fail("not_file");
|
|
18
|
+
}
|
|
19
|
+
const maxBytes = Math.min(options.maxBytes ?? DefaultMaxBytes, DefaultMaxBytes);
|
|
20
|
+
if (stat.size > maxBytes) {
|
|
21
|
+
return fail("quota_exceeded");
|
|
22
|
+
}
|
|
23
|
+
const bytes = readFileSync(rooted.absolute);
|
|
24
|
+
const detected = detectCharset(bytes);
|
|
25
|
+
if (detected.binary) {
|
|
26
|
+
return fail("binary_file");
|
|
27
|
+
}
|
|
28
|
+
let text;
|
|
29
|
+
try {
|
|
30
|
+
text = decodeText(bytes, detected.charset);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return isFilesystemError(error) ? fail(error.code) : fail("charset_unsupported");
|
|
34
|
+
}
|
|
35
|
+
const registry = options.registry ?? DefaultSyntaxRegistry;
|
|
36
|
+
const built = buildSyntaxTreeFromText(rooted.relative, text, registry.languageOf(rooted.relative), options);
|
|
37
|
+
return { ...built, fingerprint: rawDigest(bytes), charset: detected.charset };
|
|
38
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timestamp formatting shared by tree nodes, journal rows and protocol
|
|
3
|
+
* envelopes.
|
|
4
|
+
*
|
|
5
|
+
* Node metadata uses the wire shape `yyyy-MM-ddTHH:mm:ss` with no zone suffix.
|
|
6
|
+
* The default is host-local wall time because that is what a person sees in an
|
|
7
|
+
* explorer; `timeZone: "utc"` provides a reproducible snapshot for tests and
|
|
8
|
+
* cross-host comparison.
|
|
9
|
+
*/
|
|
10
|
+
import type { NodeTime } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Format a date as `yyyy-MM-ddTHH:mm:ss`.
|
|
13
|
+
*
|
|
14
|
+
* @param date - Date to format.
|
|
15
|
+
* @param timeZone - `local` (default) or `utc`.
|
|
16
|
+
* @returns The truncated timestamp.
|
|
17
|
+
*/
|
|
18
|
+
export declare const formatNodeTime: (date: Date, timeZone?: "local" | "utc") => NodeTime;
|
|
19
|
+
/**
|
|
20
|
+
* Format an audit/envelope timestamp with milliseconds and a `Z` suffix.
|
|
21
|
+
*/
|
|
22
|
+
export declare const formatIsoTime: (date: Date) => string;
|
|
23
|
+
/**
|
|
24
|
+
* Parse either a `yyyy-MM-ddTHH:mm:ss` node time or an ISO timestamp.
|
|
25
|
+
*
|
|
26
|
+
* @param value - Timestamp text.
|
|
27
|
+
* @returns The parsed date, or `undefined` when invalid.
|
|
28
|
+
*/
|
|
29
|
+
export declare const parseNodeTime: (value: string) => Date | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Pick the useful creation time. Some filesystems report a zero birth time;
|
|
32
|
+
* the caller then falls back to change time, and finally to modification time.
|
|
33
|
+
*/
|
|
34
|
+
export declare const creationTime: (stat: {
|
|
35
|
+
birthtimeMs: number;
|
|
36
|
+
ctimeMs: number;
|
|
37
|
+
mtimeMs: number;
|
|
38
|
+
}) => Date;
|
package/lib/file/time.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const pad = (value, width = 2) => String(value).padStart(width, "0");
|
|
2
|
+
/**
|
|
3
|
+
* Format a date as `yyyy-MM-ddTHH:mm:ss`.
|
|
4
|
+
*
|
|
5
|
+
* @param date - Date to format.
|
|
6
|
+
* @param timeZone - `local` (default) or `utc`.
|
|
7
|
+
* @returns The truncated timestamp.
|
|
8
|
+
*/
|
|
9
|
+
export const formatNodeTime = (date, timeZone = "local") => {
|
|
10
|
+
const year = timeZone === "utc" ? date.getUTCFullYear() : date.getFullYear();
|
|
11
|
+
const month = timeZone === "utc" ? date.getUTCMonth() + 1 : date.getMonth() + 1;
|
|
12
|
+
const day = timeZone === "utc" ? date.getUTCDate() : date.getDate();
|
|
13
|
+
const hour = timeZone === "utc" ? date.getUTCHours() : date.getHours();
|
|
14
|
+
const minute = timeZone === "utc" ? date.getUTCMinutes() : date.getMinutes();
|
|
15
|
+
const second = timeZone === "utc" ? date.getUTCSeconds() : date.getSeconds();
|
|
16
|
+
return `${year}-${pad(month)}-${pad(day)}T${pad(hour)}:${pad(minute)}:${pad(second)}`;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Format an audit/envelope timestamp with milliseconds and a `Z` suffix.
|
|
20
|
+
*/
|
|
21
|
+
export const formatIsoTime = (date) => date.toISOString();
|
|
22
|
+
/**
|
|
23
|
+
* Parse either a `yyyy-MM-ddTHH:mm:ss` node time or an ISO timestamp.
|
|
24
|
+
*
|
|
25
|
+
* @param value - Timestamp text.
|
|
26
|
+
* @returns The parsed date, or `undefined` when invalid.
|
|
27
|
+
*/
|
|
28
|
+
export const parseNodeTime = (value) => {
|
|
29
|
+
const parsed = new Date(value);
|
|
30
|
+
return Number.isFinite(parsed.getTime()) ? parsed : undefined;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Pick the useful creation time. Some filesystems report a zero birth time;
|
|
34
|
+
* the caller then falls back to change time, and finally to modification time.
|
|
35
|
+
*/
|
|
36
|
+
export const creationTime = (stat) => {
|
|
37
|
+
if (Number.isFinite(stat.birthtimeMs) && stat.birthtimeMs > 0) {
|
|
38
|
+
return new Date(stat.birthtimeMs);
|
|
39
|
+
}
|
|
40
|
+
if (Number.isFinite(stat.ctimeMs) && stat.ctimeMs > 0) {
|
|
41
|
+
return new Date(stat.ctimeMs);
|
|
42
|
+
}
|
|
43
|
+
return new Date(stat.mtimeMs);
|
|
44
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SessionRoot } from "../session/types.js";
|
|
2
|
+
import type { TreeNode, TreeOptions, TreeSnapshot, TreeStats } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build one immutable snapshot of a session root.
|
|
5
|
+
*
|
|
6
|
+
* The walk skips hidden entries unless `includeHidden`, skips excluded paths,
|
|
7
|
+
* refuses symbolic links unless `followSymlinks`, and records read failures in
|
|
8
|
+
* `stats.truncated` rather than throwing mid-tree.
|
|
9
|
+
*
|
|
10
|
+
* @param root - Session root to scan.
|
|
11
|
+
* @param options - Bounds and metadata options.
|
|
12
|
+
* @returns A snapshot whose root is the session root directory.
|
|
13
|
+
*/
|
|
14
|
+
export declare const buildTree: (root: SessionRoot, options?: TreeOptions) => TreeSnapshot;
|
|
15
|
+
/**
|
|
16
|
+
* Cached, immutable view of one session root.
|
|
17
|
+
*/
|
|
18
|
+
export declare class WorkspaceTree {
|
|
19
|
+
readonly root: SessionRoot;
|
|
20
|
+
readonly options: TreeOptions;
|
|
21
|
+
private cached;
|
|
22
|
+
private index;
|
|
23
|
+
constructor(root: SessionRoot, options?: TreeOptions);
|
|
24
|
+
/**
|
|
25
|
+
* Return the cached snapshot, building it on first use.
|
|
26
|
+
*/
|
|
27
|
+
snapshot(): TreeSnapshot;
|
|
28
|
+
/**
|
|
29
|
+
* Look up one node by root-relative POSIX path.
|
|
30
|
+
*/
|
|
31
|
+
node(relative: string): TreeNode | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Direct children of a directory; an empty array for a file or missing path.
|
|
34
|
+
*/
|
|
35
|
+
children(relative: string): readonly TreeNode[];
|
|
36
|
+
/**
|
|
37
|
+
* Current tree revision.
|
|
38
|
+
*/
|
|
39
|
+
revision(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Discard the cache and rebuild the whole tree.
|
|
42
|
+
*
|
|
43
|
+
* @param relative - Subtree hint accepted for future targeted rebuilds.
|
|
44
|
+
* @returns The fresh snapshot.
|
|
45
|
+
*/
|
|
46
|
+
refresh(relative?: string): TreeSnapshot;
|
|
47
|
+
/**
|
|
48
|
+
* Aggregate statistics for the current snapshot.
|
|
49
|
+
*/
|
|
50
|
+
stats(): TreeStats;
|
|
51
|
+
private ensure;
|
|
52
|
+
private rebuild;
|
|
53
|
+
}
|
package/lib/file/tree.js
ADDED
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded workspace tree construction, indexing and revisioning.
|
|
3
|
+
*
|
|
4
|
+
* The tree is the read side of the filesystem domain: every file and directory
|
|
5
|
+
* becomes one immutable node, directories aggregate their descendants' bytes and
|
|
6
|
+
* lines, and a bounded walk stops with `truncated: true` instead of exhausting
|
|
7
|
+
* memory. Exclusions come from `PathSandbox` so the tree service and the tool
|
|
8
|
+
* resolver cannot disagree about what a root excludes.
|
|
9
|
+
*
|
|
10
|
+
* A snapshot is cached per `WorkspaceTree`. `refresh()` rebuilds it (a targeted
|
|
11
|
+
* subtree rebuild is an optimisation this implementation does not need yet) and
|
|
12
|
+
* the revision covers structure, annotations and the truncated flag, not
|
|
13
|
+
* timestamps or raw bytes.
|
|
14
|
+
*/
|
|
15
|
+
import { lstatSync, readdirSync, realpathSync, statSync } from "node:fs";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
import { digestOf } from "../semantic/canonical.js";
|
|
18
|
+
import { buildDirectoryNode } from "./directory.js";
|
|
19
|
+
import { fail } from "./errors.js";
|
|
20
|
+
import { buildFileNode } from "./file.js";
|
|
21
|
+
import { annotationFor, describeDirectory } from "./metadata.js";
|
|
22
|
+
import { PathSandbox } from "./path.js";
|
|
23
|
+
import { creationTime } from "./time.js";
|
|
24
|
+
const DefaultMaxNodes = 20000;
|
|
25
|
+
const DefaultMaxBytes = 268435456n;
|
|
26
|
+
const ControlCharacters = /[\u0000-\u001f\u007f]/;
|
|
27
|
+
const DriveLetter = /^[A-Za-z]:/;
|
|
28
|
+
const ReadmeName = /^readme(?:\.(?:md|markdown|mdx|txt|rst))?$/i;
|
|
29
|
+
const compareNames = (left, right) => (left < right ? -1 : left > right ? 1 : 0);
|
|
30
|
+
const compareCandidates = (left, right) => {
|
|
31
|
+
if (left.directory !== right.directory) {
|
|
32
|
+
return left.directory ? -1 : 1;
|
|
33
|
+
}
|
|
34
|
+
return compareNames(left.name, right.name);
|
|
35
|
+
};
|
|
36
|
+
const errnoCode = (error) => {
|
|
37
|
+
if (typeof (error) === "object" && error !== null) {
|
|
38
|
+
const candidate = error;
|
|
39
|
+
if (typeof (candidate.code) === "string") {
|
|
40
|
+
return candidate.code;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return "";
|
|
44
|
+
};
|
|
45
|
+
const rootStat = (path) => {
|
|
46
|
+
try {
|
|
47
|
+
return lstatSync(path);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const code = errnoCode(error);
|
|
51
|
+
if (code === "ENOENT") {
|
|
52
|
+
return fail("not_found");
|
|
53
|
+
}
|
|
54
|
+
if (code === "EACCES" || code === "EPERM") {
|
|
55
|
+
return fail("permission_denied");
|
|
56
|
+
}
|
|
57
|
+
return fail("internal_error");
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const normalizeMaxNodes = (value) => {
|
|
61
|
+
if (value === (void 0) || !Number.isFinite(value)) {
|
|
62
|
+
return DefaultMaxNodes;
|
|
63
|
+
}
|
|
64
|
+
return Math.max(1, Math.floor(value));
|
|
65
|
+
};
|
|
66
|
+
const normalizeMaxBytes = (value) => {
|
|
67
|
+
if (value === (void 0)) {
|
|
68
|
+
return DefaultMaxBytes;
|
|
69
|
+
}
|
|
70
|
+
return value < 0n ? 0n : value;
|
|
71
|
+
};
|
|
72
|
+
const normalizeTreePath = (input) => {
|
|
73
|
+
if (typeof (input) !== "string" || ControlCharacters.test(input)) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
const text = input.trim();
|
|
77
|
+
if (text.length === 0 || text === ".") {
|
|
78
|
+
return ".";
|
|
79
|
+
}
|
|
80
|
+
if (text.includes("\\") || DriveLetter.test(text) || text.startsWith("/")) {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
const segments = [];
|
|
84
|
+
const parts = text.split("/");
|
|
85
|
+
for (let index = 0; index < parts.length; index += 1) {
|
|
86
|
+
const part = parts[index];
|
|
87
|
+
if (part === "" || part === ".") {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (part === "..") {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
segments.push(part);
|
|
94
|
+
}
|
|
95
|
+
return segments.length === 0 ? "." : segments.join("/");
|
|
96
|
+
};
|
|
97
|
+
const freezeNode = (node) => {
|
|
98
|
+
if (node.type === "Directory") {
|
|
99
|
+
for (let index = 0; index < node.children.length; index += 1) {
|
|
100
|
+
freezeNode(node.children[index]);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
Object.freeze(node.children);
|
|
104
|
+
return Object.freeze(node);
|
|
105
|
+
};
|
|
106
|
+
const indexNode = (node, index) => {
|
|
107
|
+
index.set(node.path, node);
|
|
108
|
+
if (node.type === "Directory") {
|
|
109
|
+
for (let child = 0; child < node.children.length; child += 1) {
|
|
110
|
+
indexNode(node.children[child], index);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Apply a directory's direct README paragraph as its purpose. The README file
|
|
116
|
+
* node already carries the deterministic first-paragraph summary, so this needs
|
|
117
|
+
* no second read. An explicit annotation always wins.
|
|
118
|
+
*/
|
|
119
|
+
const withReadmePurpose = (node, relative, children, options) => {
|
|
120
|
+
const annotation = annotationFor(options.annotations, relative);
|
|
121
|
+
if (annotation !== (void 0) && annotation.purpose !== (void 0)) {
|
|
122
|
+
return node;
|
|
123
|
+
}
|
|
124
|
+
let readme;
|
|
125
|
+
for (let index = 0; index < children.length; index += 1) {
|
|
126
|
+
const child = children[index];
|
|
127
|
+
if (child.type === "File" && ReadmeName.test(child.name) && child.charset !== "binary") {
|
|
128
|
+
readme = child;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (readme === (void 0) || readme.type !== "File") {
|
|
133
|
+
return node;
|
|
134
|
+
}
|
|
135
|
+
const fallback = `File ${readme.name}.`;
|
|
136
|
+
const source = readme.purpose !== "not declared" ? readme.purpose : readme.summary;
|
|
137
|
+
if (source.length === 0 || source === fallback) {
|
|
138
|
+
return node;
|
|
139
|
+
}
|
|
140
|
+
const described = describeDirectory(relative, children, annotation, source);
|
|
141
|
+
if (described.purpose === "not declared" || described.purpose === node.purpose) {
|
|
142
|
+
return node;
|
|
143
|
+
}
|
|
144
|
+
return { ...node, purpose: described.purpose };
|
|
145
|
+
};
|
|
146
|
+
const revisionOf = (root, options, truncated) => {
|
|
147
|
+
const annotations = [];
|
|
148
|
+
const configured = options.annotations;
|
|
149
|
+
if (configured !== (void 0)) {
|
|
150
|
+
const paths = Object.keys(configured).sort(compareNames);
|
|
151
|
+
for (let index = 0; index < paths.length; index += 1) {
|
|
152
|
+
const path = paths[index];
|
|
153
|
+
const annotation = configured[path];
|
|
154
|
+
annotations.push({
|
|
155
|
+
path,
|
|
156
|
+
description: annotation.description === (void 0) ? null : annotation.description,
|
|
157
|
+
summary: annotation.summary === (void 0) ? null : annotation.summary,
|
|
158
|
+
purpose: annotation.purpose === (void 0) ? null : annotation.purpose,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return digestOf({
|
|
163
|
+
version: "amp.fs.rev/1",
|
|
164
|
+
tree: root.fingerprint,
|
|
165
|
+
annotations,
|
|
166
|
+
truncated,
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Build one immutable snapshot of a session root.
|
|
171
|
+
*
|
|
172
|
+
* The walk skips hidden entries unless `includeHidden`, skips excluded paths,
|
|
173
|
+
* refuses symbolic links unless `followSymlinks`, and records read failures in
|
|
174
|
+
* `stats.truncated` rather than throwing mid-tree.
|
|
175
|
+
*
|
|
176
|
+
* @param root - Session root to scan.
|
|
177
|
+
* @param options - Bounds and metadata options.
|
|
178
|
+
* @returns A snapshot whose root is the session root directory.
|
|
179
|
+
*/
|
|
180
|
+
export const buildTree = (root, options = {}) => {
|
|
181
|
+
const maxNodes = normalizeMaxNodes(options.maxNodes);
|
|
182
|
+
const maxBytes = normalizeMaxBytes(options.maxBytes);
|
|
183
|
+
const includeHidden = options.includeHidden === true;
|
|
184
|
+
const rootExclude = Array.isArray(root.exclude) ? root.exclude : [];
|
|
185
|
+
const scopedRoot = {
|
|
186
|
+
...root,
|
|
187
|
+
exclude: [...rootExclude, ...(Array.isArray(options.exclude) ? options.exclude : [])],
|
|
188
|
+
};
|
|
189
|
+
const sandbox = new PathSandbox([scopedRoot], { followSymlinks: options.followSymlinks === true });
|
|
190
|
+
const state = {
|
|
191
|
+
nodes: 1,
|
|
192
|
+
files: 0n,
|
|
193
|
+
directories: 1n,
|
|
194
|
+
lines: 0n,
|
|
195
|
+
bytes: 0n,
|
|
196
|
+
truncated: false,
|
|
197
|
+
};
|
|
198
|
+
const walkDirectory = (relative, absolute, stat, ancestry) => {
|
|
199
|
+
let names;
|
|
200
|
+
try {
|
|
201
|
+
names = readdirSync(absolute);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
state.truncated = true;
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
const candidates = [];
|
|
208
|
+
for (let index = 0; index < names.length; index += 1) {
|
|
209
|
+
const name = names[index];
|
|
210
|
+
if (!includeHidden && name.startsWith(".")) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
const childRelative = relative === "." ? name : `${relative}/${name}`;
|
|
214
|
+
if (sandbox.isExcluded(scopedRoot, childRelative)) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const childAbsolute = join(absolute, name);
|
|
218
|
+
let linkStat;
|
|
219
|
+
try {
|
|
220
|
+
linkStat = lstatSync(childAbsolute);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
state.truncated = true;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
let entryStat = linkStat;
|
|
227
|
+
let realPath;
|
|
228
|
+
const symbolic = linkStat.isSymbolicLink();
|
|
229
|
+
if (symbolic) {
|
|
230
|
+
if (options.followSymlinks !== true) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
entryStat = statSync(childAbsolute);
|
|
235
|
+
realPath = realpathSync(childAbsolute);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
state.truncated = true;
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
if (!sandbox.contains(root.path, realPath)) {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (!entryStat.isDirectory() && !entryStat.isFile()) {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (entryStat.isDirectory() && options.followSymlinks === true) {
|
|
249
|
+
let directoryReal;
|
|
250
|
+
if (realPath === (void 0)) {
|
|
251
|
+
try {
|
|
252
|
+
directoryReal = realpathSync(childAbsolute);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
state.truncated = true;
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
directoryReal = realPath;
|
|
261
|
+
}
|
|
262
|
+
if (!sandbox.contains(root.path, directoryReal)) {
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
realPath = directoryReal;
|
|
266
|
+
}
|
|
267
|
+
candidates.push({ name, relative: childRelative, absolute: childAbsolute, stat: entryStat, directory: entryStat.isDirectory(), real: realPath });
|
|
268
|
+
}
|
|
269
|
+
candidates.sort(compareCandidates);
|
|
270
|
+
const children = [];
|
|
271
|
+
for (let index = 0; index < candidates.length; index += 1) {
|
|
272
|
+
const candidate = candidates[index];
|
|
273
|
+
if (state.nodes + 1 > maxNodes) {
|
|
274
|
+
state.truncated = true;
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
if (candidate.directory) {
|
|
278
|
+
if (candidate.real !== (void 0) && ancestry.has(candidate.real)) {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
state.nodes += 1;
|
|
282
|
+
state.directories += 1n;
|
|
283
|
+
const childAncestry = candidate.real === (void 0) ? ancestry : new Set([...ancestry, candidate.real]);
|
|
284
|
+
const child = walkDirectory(candidate.relative, candidate.absolute, candidate.stat, childAncestry);
|
|
285
|
+
if (child === (void 0)) {
|
|
286
|
+
state.nodes -= 1;
|
|
287
|
+
state.directories -= 1n;
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
children.push(child);
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
const size = BigInt(candidate.stat.size);
|
|
294
|
+
if (state.bytes + size > maxBytes) {
|
|
295
|
+
state.truncated = true;
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
try {
|
|
299
|
+
const child = buildFileNode(root, candidate.relative, options);
|
|
300
|
+
state.nodes += 1;
|
|
301
|
+
state.files += 1n;
|
|
302
|
+
state.bytes += child.bytes;
|
|
303
|
+
state.lines += child.lines;
|
|
304
|
+
children.push(child);
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
state.truncated = true;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
const built = buildDirectoryNode(relative, children, options, creationTime(stat), new Date(stat.mtimeMs));
|
|
311
|
+
return withReadmePurpose(built, relative, children, options);
|
|
312
|
+
};
|
|
313
|
+
const stat = rootStat(root.path);
|
|
314
|
+
if (!stat.isDirectory()) {
|
|
315
|
+
return fail("not_directory");
|
|
316
|
+
}
|
|
317
|
+
let rootReal = root.path;
|
|
318
|
+
try {
|
|
319
|
+
rootReal = realpathSync(root.path);
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
rootReal = root.path;
|
|
323
|
+
}
|
|
324
|
+
const rootNode = walkDirectory(".", root.path, stat, new Set([rootReal])) ??
|
|
325
|
+
buildDirectoryNode(".", [], options, creationTime(stat), new Date(stat.mtimeMs));
|
|
326
|
+
const frozen = freezeNode(rootNode);
|
|
327
|
+
const stats = Object.freeze({
|
|
328
|
+
files: state.files,
|
|
329
|
+
directories: state.directories,
|
|
330
|
+
lines: state.lines,
|
|
331
|
+
bytes: state.bytes,
|
|
332
|
+
truncated: state.truncated,
|
|
333
|
+
});
|
|
334
|
+
return Object.freeze({
|
|
335
|
+
root: frozen,
|
|
336
|
+
revision: revisionOf(frozen, options, state.truncated),
|
|
337
|
+
stats,
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
/**
|
|
341
|
+
* Cached, immutable view of one session root.
|
|
342
|
+
*/
|
|
343
|
+
export class WorkspaceTree {
|
|
344
|
+
root;
|
|
345
|
+
options;
|
|
346
|
+
cached;
|
|
347
|
+
index;
|
|
348
|
+
constructor(root, options = {}) {
|
|
349
|
+
this.root = { ...root, exclude: Array.isArray(root.exclude) ? [...root.exclude] : [] };
|
|
350
|
+
this.options = { ...options };
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Return the cached snapshot, building it on first use.
|
|
354
|
+
*/
|
|
355
|
+
snapshot() {
|
|
356
|
+
return this.ensure();
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Look up one node by root-relative POSIX path.
|
|
360
|
+
*/
|
|
361
|
+
node(relative) {
|
|
362
|
+
this.ensure();
|
|
363
|
+
const normalized = normalizeTreePath(relative);
|
|
364
|
+
if (normalized === (void 0)) {
|
|
365
|
+
return undefined;
|
|
366
|
+
}
|
|
367
|
+
const index = this.index;
|
|
368
|
+
return index === (void 0) ? undefined : index.get(normalized);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Direct children of a directory; an empty array for a file or missing path.
|
|
372
|
+
*/
|
|
373
|
+
children(relative) {
|
|
374
|
+
const found = this.node(relative);
|
|
375
|
+
if (found === (void 0) || found.type === "File") {
|
|
376
|
+
return [];
|
|
377
|
+
}
|
|
378
|
+
return found.children;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Current tree revision.
|
|
382
|
+
*/
|
|
383
|
+
revision() {
|
|
384
|
+
return this.ensure().revision;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Discard the cache and rebuild the whole tree.
|
|
388
|
+
*
|
|
389
|
+
* @param relative - Subtree hint accepted for future targeted rebuilds.
|
|
390
|
+
* @returns The fresh snapshot.
|
|
391
|
+
*/
|
|
392
|
+
refresh(relative) {
|
|
393
|
+
void relative;
|
|
394
|
+
return this.rebuild();
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Aggregate statistics for the current snapshot.
|
|
398
|
+
*/
|
|
399
|
+
stats() {
|
|
400
|
+
return this.ensure().stats;
|
|
401
|
+
}
|
|
402
|
+
ensure() {
|
|
403
|
+
const cached = this.cached;
|
|
404
|
+
if (cached !== (void 0)) {
|
|
405
|
+
return cached;
|
|
406
|
+
}
|
|
407
|
+
return this.rebuild();
|
|
408
|
+
}
|
|
409
|
+
rebuild() {
|
|
410
|
+
const snapshot = buildTree(this.root, this.options);
|
|
411
|
+
this.cached = snapshot;
|
|
412
|
+
const index = new Map();
|
|
413
|
+
indexNode(snapshot.root, index);
|
|
414
|
+
this.index = index;
|
|
415
|
+
return snapshot;
|
|
416
|
+
}
|
|
417
|
+
}
|