attention-manifest-protocol 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +341 -293
- package/CHANGELOG.zh-CN.md +41 -8
- package/README.md +250 -171
- package/README.zh-CN.md +251 -171
- package/lib/assignment/assign.d.ts +102 -0
- package/lib/assignment/assign.js +556 -0
- package/lib/assignment/binding.d.ts +103 -0
- package/lib/assignment/binding.js +575 -0
- package/lib/assignment/errors.d.ts +14 -0
- package/lib/assignment/errors.js +16 -0
- package/lib/assignment/guards.d.ts +18 -0
- package/lib/assignment/guards.js +28 -0
- package/lib/assignment/index.d.ts +10 -0
- package/lib/assignment/index.js +10 -0
- package/lib/assignment/types.d.ts +169 -0
- package/lib/assignment/types.js +1 -0
- package/lib/attention/budget.d.ts +1 -1
- package/lib/attention/budget.js +31 -9
- package/lib/bayes/engine.js +2 -1
- package/lib/bayes/reliability.js +25 -10
- package/lib/boundary/frame.d.ts +10 -4
- package/lib/boundary/frame.js +346 -109
- package/lib/boundary/kinds.d.ts +11 -0
- package/lib/boundary/kinds.js +33 -0
- package/lib/boundary/refTable.d.ts +19 -9
- package/lib/boundary/refTable.js +128 -30
- package/lib/boundary/toolCall.d.ts +22 -10
- package/lib/boundary/toolCall.js +798 -97
- package/lib/concept/conceptBudget.js +10 -1
- package/lib/concurrency/idempotency.d.ts +4 -3
- package/lib/concurrency/idempotency.js +57 -13
- package/lib/concurrency/retry.js +18 -3
- package/lib/context/agentContext.d.ts +13 -0
- package/lib/context/agentContext.js +14 -1
- package/lib/context/ast.d.ts +4 -1
- package/lib/context/ast.js +13 -3
- package/lib/context/contentStore.js +22 -9
- package/lib/context/contextBuilder.d.ts +457 -0
- package/lib/context/contextBuilder.js +1395 -0
- package/lib/context/contextPackage.d.ts +214 -0
- package/lib/context/contextPackage.js +191 -0
- package/lib/context/index.d.ts +14 -3
- package/lib/context/index.js +9 -1
- package/lib/context/relevance.d.ts +171 -0
- package/lib/context/relevance.js +250 -0
- package/lib/context/workspaceDiff.d.ts +105 -0
- package/lib/context/workspaceDiff.js +238 -0
- package/lib/context/workspaceService.d.ts +236 -1
- package/lib/context/workspaceService.js +1501 -73
- package/lib/cooperation/collaboration.d.ts +9 -0
- package/lib/cooperation/session.d.ts +4 -4
- package/lib/cooperation/session.js +3 -3
- package/lib/database/adapter/filesystemStore.d.ts +145 -0
- package/lib/database/adapter/filesystemStore.js +321 -0
- package/lib/database/adapter/index.d.ts +2 -0
- package/lib/database/adapter/index.js +2 -0
- package/lib/database/adapter/workspaceSessionStore.d.ts +118 -0
- package/lib/database/adapter/workspaceSessionStore.js +120 -0
- package/lib/database/entity/fileGraph.d.ts +53 -0
- package/lib/database/entity/fileGraph.js +15 -0
- package/lib/database/entity/fileTree.d.ts +76 -0
- package/lib/database/entity/fileTree.js +39 -0
- package/lib/database/entity/hook.d.ts +29 -0
- package/lib/database/entity/hook.js +18 -0
- package/lib/database/entity/index.d.ts +4 -0
- package/lib/database/entity/index.js +4 -0
- package/lib/database/entity/workspaceSession.d.ts +53 -0
- package/lib/database/entity/workspaceSession.js +28 -0
- package/lib/database/repository/fileAnnotationRepository.d.ts +75 -0
- package/lib/database/repository/fileAnnotationRepository.js +109 -0
- package/lib/database/repository/fileGraphRepository.d.ts +188 -0
- package/lib/database/repository/fileGraphRepository.js +648 -0
- package/lib/database/repository/fileNodeRepository.d.ts +116 -0
- package/lib/database/repository/fileNodeRepository.js +263 -0
- package/lib/database/repository/fileOutlineRepository.d.ts +40 -0
- package/lib/database/repository/fileOutlineRepository.js +104 -0
- package/lib/database/repository/fileWriteRepository.d.ts +41 -0
- package/lib/database/repository/fileWriteRepository.js +93 -0
- package/lib/database/repository/hookRepository.d.ts +67 -0
- package/lib/database/repository/hookRepository.js +150 -0
- package/lib/database/repository/index.d.ts +7 -0
- package/lib/database/repository/index.js +7 -0
- package/lib/database/repository/workspaceSessionRepository.d.ts +134 -0
- package/lib/database/repository/workspaceSessionRepository.js +327 -0
- package/lib/database/service/database.d.ts +14 -0
- package/lib/database/service/database.js +21 -0
- package/lib/database/sql/schema.js +187 -0
- package/lib/database/store/database.js +6 -1
- package/lib/delegate/team.d.ts +5 -0
- package/lib/delegate/team.js +83 -20
- package/lib/discover/classify.d.ts +20 -0
- package/lib/discover/classify.js +85 -0
- package/lib/discover/host.d.ts +20 -0
- package/lib/discover/host.js +89 -0
- package/lib/discover/index.d.ts +11 -0
- package/lib/discover/index.js +11 -0
- package/lib/discover/kinds.d.ts +14 -0
- package/lib/discover/kinds.js +23 -0
- package/lib/discover/tree.d.ts +7 -0
- package/lib/discover/tree.js +432 -0
- package/lib/discover/types.d.ts +115 -0
- package/lib/discover/types.js +1 -0
- package/lib/error/boundaryRejection.d.ts +1 -1
- package/lib/evaluation/agreement.js +2 -2
- package/lib/execution/handles.js +6 -0
- package/lib/execution/pin.js +2 -2
- package/lib/file/cfb.d.ts +56 -0
- package/lib/file/cfb.js +396 -0
- package/lib/file/dependency.d.ts +151 -0
- package/lib/file/dependency.js +568 -0
- package/lib/file/directory.d.ts +34 -0
- package/lib/file/directory.js +141 -0
- package/lib/file/errors.d.ts +20 -0
- package/lib/file/errors.js +18 -0
- package/lib/file/exportGraph.d.ts +31 -0
- package/lib/file/exportGraph.js +554 -0
- package/lib/file/file.d.ts +40 -0
- package/lib/file/file.js +339 -0
- package/lib/file/importGraph.d.ts +121 -0
- package/lib/file/importGraph.js +1022 -0
- package/lib/file/index.d.ts +45 -0
- package/lib/file/index.js +30 -0
- package/lib/file/metadata.d.ts +66 -0
- package/lib/file/metadata.js +470 -0
- package/lib/file/path.d.ts +60 -0
- package/lib/file/path.js +259 -0
- package/lib/file/read.d.ts +168 -0
- package/lib/file/read.js +541 -0
- package/lib/file/runtime.d.ts +95 -0
- package/lib/file/runtime.js +150 -0
- package/lib/file/service.d.ts +227 -0
- package/lib/file/service.js +663 -0
- package/lib/file/syntaxTree.d.ts +7 -0
- package/lib/file/syntaxTree.js +38 -0
- package/lib/file/time.d.ts +38 -0
- package/lib/file/time.js +44 -0
- package/lib/file/tree.d.ts +53 -0
- package/lib/file/tree.js +417 -0
- package/lib/file/types.d.ts +371 -0
- package/lib/file/types.js +1 -0
- package/lib/file/write.d.ts +159 -0
- package/lib/file/write.js +1028 -0
- package/lib/file/zip.d.ts +35 -0
- package/lib/file/zip.js +349 -0
- package/lib/fingerprint/algorithm.d.ts +97 -0
- package/lib/fingerprint/algorithm.js +271 -0
- package/lib/fingerprint/bytes.d.ts +18 -0
- package/lib/fingerprint/bytes.js +31 -0
- package/lib/fingerprint/error.d.ts +73 -0
- package/lib/fingerprint/error.js +86 -0
- package/lib/fingerprint/file.d.ts +71 -0
- package/lib/fingerprint/file.js +254 -0
- package/lib/fingerprint/index.d.ts +37 -0
- package/lib/fingerprint/index.js +12 -0
- package/lib/fingerprint/json.d.ts +41 -0
- package/lib/fingerprint/json.js +94 -0
- package/lib/fingerprint/number.d.ts +32 -0
- package/lib/fingerprint/number.js +95 -0
- package/lib/fingerprint/policy.d.ts +54 -0
- package/lib/fingerprint/policy.js +50 -0
- package/lib/fingerprint/preimage.d.ts +84 -0
- package/lib/fingerprint/preimage.js +133 -0
- package/lib/fingerprint/raw.d.ts +26 -0
- package/lib/fingerprint/raw.js +45 -0
- package/lib/fingerprint/ref.d.ts +39 -0
- package/lib/fingerprint/ref.js +178 -0
- package/lib/fingerprint/text.d.ts +42 -0
- package/lib/fingerprint/text.js +155 -0
- package/lib/fingerprint/tree.d.ts +56 -0
- package/lib/fingerprint/tree.js +288 -0
- package/lib/fingerprint/verify.d.ts +20 -0
- package/lib/fingerprint/verify.js +99 -0
- package/lib/global/filesystem.d.ts +43 -0
- package/lib/global/filesystem.js +75 -0
- package/lib/global/index.d.ts +8 -0
- package/lib/global/index.js +8 -0
- package/lib/global/service.d.ts +51 -0
- package/lib/global/service.js +98 -0
- package/lib/governance/transport.js +18 -6
- package/lib/hook/ast.d.ts +29 -0
- package/lib/hook/ast.js +22 -0
- package/lib/hook/code.d.ts +55 -0
- package/lib/hook/code.js +47 -0
- package/lib/hook/dependency.d.ts +45 -0
- package/lib/hook/dependency.js +28 -0
- package/lib/hook/diff.d.ts +114 -0
- package/lib/hook/diff.js +327 -0
- package/lib/hook/exportation.d.ts +31 -0
- package/lib/hook/exportation.js +24 -0
- package/lib/hook/file.d.ts +44 -0
- package/lib/hook/file.js +154 -0
- package/lib/hook/importation.d.ts +33 -0
- package/lib/hook/importation.js +22 -0
- package/lib/hook/index.d.ts +30 -0
- package/lib/hook/index.js +23 -0
- package/lib/hook/outline.d.ts +35 -0
- package/lib/hook/outline.js +27 -0
- package/lib/hook/project.d.ts +65 -0
- package/lib/hook/project.js +217 -0
- package/lib/hook/types.d.ts +114 -0
- package/lib/hook/types.js +407 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +9 -0
- package/lib/lock/lease.js +28 -3
- package/lib/manifest/cardSign.d.ts +1 -1
- package/lib/manifest/cardSign.js +37 -7
- package/lib/manifest/federation.js +13 -6
- package/lib/manifest/trust.d.ts +2 -0
- package/lib/manifest/trust.js +27 -6
- package/lib/module/index.d.ts +4 -0
- package/lib/module/index.js +4 -0
- package/lib/module/mcp/client.js +21 -2
- package/lib/module/mcp/filesystemServer.d.ts +24 -0
- package/lib/module/mcp/filesystemServer.js +102 -0
- package/lib/module/mcp/http.js +32 -19
- package/lib/module/mcp/workspaceServer.js +20 -3
- package/lib/module/tool/filesystemExecutor.d.ts +18 -0
- package/lib/module/tool/filesystemExecutor.js +49 -0
- package/lib/module/tool/globalExecutor.d.ts +17 -0
- package/lib/module/tool/globalExecutor.js +39 -0
- package/lib/module/tool/globalFilesystemExecutor.d.ts +18 -0
- package/lib/module/tool/globalFilesystemExecutor.js +49 -0
- package/lib/module/tool/workspaceExecutor.d.ts +9 -0
- package/lib/module/tool/workspaceExecutor.js +16 -3
- package/lib/naming/aliases.d.ts +48 -0
- package/lib/naming/aliases.js +79 -0
- package/lib/naming/catalog.d.ts +117 -0
- package/lib/naming/catalog.js +108 -0
- package/lib/naming/grammar.d.ts +67 -0
- package/lib/naming/grammar.js +212 -0
- package/lib/naming/ids.d.ts +157 -0
- package/lib/naming/ids.js +119 -0
- package/lib/naming/index.d.ts +13 -0
- package/lib/naming/index.js +13 -0
- package/lib/outline/index.d.ts +9 -0
- package/lib/outline/index.js +8 -0
- package/lib/outline/office.d.ts +160 -0
- package/lib/outline/office.js +2375 -0
- package/lib/outline/officeBridge.d.ts +32 -0
- package/lib/outline/officeBridge.js +27 -0
- package/lib/outline/outline.d.ts +159 -0
- package/lib/outline/outline.js +837 -0
- package/lib/outline/outlineIndex.d.ts +97 -0
- package/lib/outline/outlineIndex.js +325 -0
- package/lib/outline/outlineKeywords.d.ts +59 -0
- package/lib/outline/outlineKeywords.js +143 -0
- package/lib/outline/outlineStrategies.d.ts +414 -0
- package/lib/outline/outlineStrategies.js +8324 -0
- package/lib/outline/reactOutline.d.ts +37 -0
- package/lib/outline/reactOutline.js +1070 -0
- package/lib/outline/shellOutline.d.ts +65 -0
- package/lib/outline/shellOutline.js +873 -0
- package/lib/outline/sqlOutline.d.ts +170 -0
- package/lib/outline/sqlOutline.js +1536 -0
- package/lib/outline/strategy.d.ts +46 -0
- package/lib/outline/strategy.js +1 -0
- package/lib/outline/types.d.ts +95 -0
- package/lib/outline/types.js +1 -0
- package/lib/outline/visualBasicOutline.d.ts +27 -0
- package/lib/outline/visualBasicOutline.js +750 -0
- package/lib/protocol/filesystem.d.ts +55 -0
- package/lib/protocol/filesystem.js +105 -0
- package/lib/protocol/global.d.ts +42 -0
- package/lib/protocol/global.js +63 -0
- package/lib/protocol/globalFilesystem.d.ts +40 -0
- package/lib/protocol/globalFilesystem.js +59 -0
- package/lib/protocol/index.d.ts +4 -0
- package/lib/protocol/index.js +4 -0
- package/lib/protocol/protocol.d.ts +4 -0
- package/lib/protocol/wire.js +5 -2
- package/lib/protocol/workspace.d.ts +305 -0
- package/lib/protocol/workspace.js +258 -0
- package/lib/receipt/receipt.d.ts +8 -0
- package/lib/registry/content.js +9 -3
- package/lib/runtime/kernelRuntime.js +9 -1
- package/lib/scenario/scenario.js +5 -4
- package/lib/semantic/canonical.d.ts +61 -0
- package/lib/semantic/canonical.js +135 -8
- package/lib/semantic/jsonValue.d.ts +31 -0
- package/lib/semantic/jsonValue.js +122 -0
- package/lib/semantic/sha256.js +3 -0
- package/lib/semantic/time.d.ts +14 -0
- package/lib/semantic/time.js +56 -0
- package/lib/session/context.d.ts +76 -0
- package/lib/session/context.js +419 -0
- package/lib/session/errors.d.ts +24 -0
- package/lib/session/errors.js +22 -0
- package/lib/session/identity.d.ts +24 -0
- package/lib/session/identity.js +56 -0
- package/lib/session/index.d.ts +14 -0
- package/lib/session/index.js +12 -0
- package/lib/session/registry.d.ts +130 -0
- package/lib/session/registry.js +908 -0
- package/lib/session/types.d.ts +227 -0
- package/lib/session/types.js +14 -0
- package/lib/structure/index.d.ts +1 -0
- package/lib/structure/index.js +1 -0
- package/lib/structure/trie.d.ts +88 -0
- package/lib/structure/trie.js +183 -0
- package/lib/syntax/byteIndex.d.ts +44 -0
- package/lib/syntax/byteIndex.js +148 -0
- package/lib/syntax/charset.d.ts +88 -0
- package/lib/syntax/charset.js +276 -0
- package/lib/syntax/index.d.ts +6 -0
- package/lib/syntax/index.js +5 -0
- package/lib/syntax/syntaxRegistry.d.ts +150 -0
- package/lib/syntax/syntaxRegistry.js +314 -0
- package/lib/syntax/syntaxTree.d.ts +106 -0
- package/lib/syntax/syntaxTree.js +668 -0
- package/lib/syntax/types.d.ts +15 -0
- package/lib/syntax/types.js +1 -0
- package/lib/types/common.d.ts +1 -1
- package/package.json +72 -193
- package/.editorconfig +0 -12
- package/.prettierignore +0 -17
- package/MCP-Token/347/250/216/344/270/216/344/270/213/344/270/200/344/273/243/345/267/245/345/205/267/345/215/217/350/256/256.html +0 -1763
- package/docs/annotation-campaign-A.csv +0 -54
- package/docs/annotation-campaign-B.csv +0 -54
- package/docs/annotation-campaign.csv +0 -54
- package/docs/eval/annotations-A.jsonl +0 -16
- package/docs/eval/annotations.json +0 -122
- package/docs/eval/recorded-labels.json +0 -12
- package/docs/eval/replay-cases.json +0 -14
- package/docs/eval/replay-labels-b.json +0 -14
- package/docs/examples/attention-request.json +0 -16
- package/docs/examples/checkpoint.json +0 -15
- package/docs/examples/claim.json +0 -66
- package/docs/examples/collaboration.json +0 -66
- package/docs/examples/concept-checkpoint.json +0 -15
- package/docs/examples/concept-prune-plan.json +0 -45
- package/docs/examples/federation.json +0 -126
- package/docs/examples/frame-chain.json +0 -77
- package/docs/examples/ledger-snapshot.json +0 -108
- package/docs/examples/manifest.json +0 -77
- package/docs/examples/message.json +0 -19
- package/docs/examples/other-model.json +0 -45
- package/docs/examples/plan.json +0 -50
- package/docs/examples/prune-plan.json +0 -48
- package/docs/examples/receipt.json +0 -22
- package/docs/examples/runtime-run.json +0 -573
- package/docs/examples/team.json +0 -66
- package/docs/examples/verb-note.json +0 -11
- package/docs/probes/bayes-scores.json +0 -1452
- package/docs/probes/calibration-imported.json +0 -141
- package/docs/probes/context-ast-deepseek.json +0 -1577
- package/docs/probes/deepseek-probe.json +0 -917
- package/docs/probes/eval-recorded-replay.json +0 -597
- package/docs/probes/eval-replay.json +0 -124
- package/docs/probes/eval-summary.json +0 -42
- package/docs/probes/runtime-eval.json +0 -4230
- package/eslint.config.mts +0 -96
- package/index.html +0 -13
- package/prettier.config.mts +0 -37
- package/public/favicon.svg +0 -1
- package/public/icons.svg +0 -24
- package/src/attention/attention.ts +0 -347
- package/src/attention/budget.ts +0 -72
- package/src/attention/cognition.ts +0 -519
- package/src/attention/index.ts +0 -8
- package/src/attention/interrupts.ts +0 -228
- package/src/attention/resource.ts +0 -316
- package/src/attention/social.ts +0 -217
- package/src/attention/socialTypes.ts +0 -115
- package/src/authz/authz.ts +0 -305
- package/src/authz/index.ts +0 -1
- package/src/bayes/calibration.ts +0 -204
- package/src/bayes/calibrationRegistry.ts +0 -111
- package/src/bayes/calibrationSelection.ts +0 -154
- package/src/bayes/engine.ts +0 -532
- package/src/bayes/index.ts +0 -6
- package/src/bayes/reliability.ts +0 -62
- package/src/bayes/scopedPriors.ts +0 -88
- package/src/boundary/frame.ts +0 -322
- package/src/boundary/ids.ts +0 -14
- package/src/boundary/index.ts +0 -12
- package/src/boundary/refTable.ts +0 -125
- package/src/boundary/toolCall.ts +0 -212
- package/src/concept/concept.ts +0 -75
- package/src/concept/conceptBudget.ts +0 -346
- package/src/concept/conceptBudgetTypes.ts +0 -79
- package/src/concept/index.ts +0 -3
- package/src/concurrency/idempotency.ts +0 -41
- package/src/concurrency/index.ts +0 -5
- package/src/concurrency/mutex.ts +0 -26
- package/src/concurrency/namedLocks.ts +0 -35
- package/src/concurrency/retry.ts +0 -50
- package/src/concurrency/worker.ts +0 -128
- package/src/context/agentContext.ts +0 -308
- package/src/context/ast.ts +0 -499
- package/src/context/contentStore.ts +0 -75
- package/src/context/context.ts +0 -65
- package/src/context/contextIndex.ts +0 -85
- package/src/context/document.ts +0 -137
- package/src/context/fileStorePath.ts +0 -14
- package/src/context/index.ts +0 -43
- package/src/context/lifecycle.ts +0 -221
- package/src/context/projections.ts +0 -151
- package/src/context/workspace.ts +0 -422
- package/src/context/workspaceProtocol.ts +0 -112
- package/src/context/workspaceService.ts +0 -423
- package/src/cooperation/board.ts +0 -104
- package/src/cooperation/collaboration.ts +0 -60
- package/src/cooperation/index.ts +0 -6
- package/src/cooperation/merge.ts +0 -190
- package/src/cooperation/metrics.ts +0 -57
- package/src/cooperation/session.ts +0 -131
- package/src/cooperation/unified.ts +0 -56
- package/src/counter.ts +0 -9
- package/src/database/adapter/adapters.ts +0 -35
- package/src/database/adapter/index.ts +0 -4
- package/src/database/adapter/runtimeSink.ts +0 -74
- package/src/database/adapter/sessionStore.ts +0 -32
- package/src/database/adapter/turnStore.ts +0 -23
- package/src/database/entity/agent.ts +0 -199
- package/src/database/entity/entity.ts +0 -1046
- package/src/database/entity/handle.ts +0 -79
- package/src/database/entity/index.ts +0 -32
- package/src/database/entity/message.ts +0 -74
- package/src/database/entity/meta.ts +0 -11
- package/src/database/entity/object.ts +0 -42
- package/src/database/entity/outbox.ts +0 -15
- package/src/database/entity/process.ts +0 -65
- package/src/database/entity/registry.ts +0 -155
- package/src/database/entity/runtimeApproval.ts +0 -30
- package/src/database/entity/runtimeSession.ts +0 -13
- package/src/database/entity/runtimeTurn.ts +0 -15
- package/src/database/entity/thread.ts +0 -85
- package/src/database/entity/window.ts +0 -85
- package/src/database/entity/worker.ts +0 -90
- package/src/database/index.ts +0 -6
- package/src/database/repository/addressSpaceRepository.ts +0 -72
- package/src/database/repository/agentRepository.ts +0 -460
- package/src/database/repository/base.ts +0 -41
- package/src/database/repository/executionRepository.ts +0 -477
- package/src/database/repository/handleRepository.ts +0 -64
- package/src/database/repository/index.ts +0 -20
- package/src/database/repository/messageRepository.ts +0 -52
- package/src/database/repository/objectRepository.ts +0 -69
- package/src/database/repository/outboxRepository.ts +0 -63
- package/src/database/repository/processRepository.ts +0 -58
- package/src/database/repository/registryRepository.ts +0 -119
- package/src/database/repository/repository.ts +0 -491
- package/src/database/repository/runtimeApprovalRepository.ts +0 -44
- package/src/database/repository/runtimeSessionRepository.ts +0 -27
- package/src/database/repository/runtimeTurnRepository.ts +0 -39
- package/src/database/repository/socialRepository.ts +0 -185
- package/src/database/repository/threadRepository.ts +0 -57
- package/src/database/repository/windowRepository.ts +0 -88
- package/src/database/repository/workerRepository.ts +0 -69
- package/src/database/service/database.ts +0 -90
- package/src/database/service/handleService.ts +0 -48
- package/src/database/service/index.ts +0 -16
- package/src/database/service/messageService.ts +0 -61
- package/src/database/service/objectService.ts +0 -59
- package/src/database/service/processService.ts +0 -61
- package/src/database/service/registryServices.ts +0 -88
- package/src/database/service/service.ts +0 -183
- package/src/database/service/stepService.ts +0 -53
- package/src/database/service/threadService.ts +0 -65
- package/src/database/service/windowService.ts +0 -30
- package/src/database/service/workerService.ts +0 -57
- package/src/database/sql/index.ts +0 -3
- package/src/database/sql/schema.ts +0 -418
- package/src/database/sql/sql.ts +0 -543
- package/src/database/store/database.ts +0 -210
- package/src/database/store/index.ts +0 -3
- package/src/database/store/store.ts +0 -266
- package/src/delegate/index.ts +0 -2
- package/src/delegate/team.ts +0 -268
- package/src/delegate/teamTypes.ts +0 -47
- package/src/diagnosis/checklist.ts +0 -74
- package/src/diagnosis/context.ts +0 -93
- package/src/diagnosis/frame.ts +0 -256
- package/src/diagnosis/index.ts +0 -5
- package/src/diagnosis/router.ts +0 -72
- package/src/diagnosis/types.ts +0 -89
- package/src/error/agentError.ts +0 -16
- package/src/error/ampError.ts +0 -20
- package/src/error/authzError.ts +0 -14
- package/src/error/boundaryRejection.ts +0 -20
- package/src/error/index.ts +0 -7
- package/src/error/kernelError.ts +0 -27
- package/src/error/mailboxError.ts +0 -9
- package/src/error/windowError.ts +0 -12
- package/src/evaluation/agreement.ts +0 -96
- package/src/evaluation/index.ts +0 -2
- package/src/evaluation/labels.ts +0 -241
- package/src/evidence/evidenceGraph.ts +0 -205
- package/src/evidence/index.ts +0 -4
- package/src/evidence/revalidation.ts +0 -191
- package/src/execution/exec.ts +0 -408
- package/src/execution/handles.ts +0 -65
- package/src/execution/index.ts +0 -3
- package/src/execution/pin.ts +0 -154
- package/src/frame/frame.ts +0 -70
- package/src/frame/index.ts +0 -1
- package/src/goal/goal.ts +0 -43
- package/src/goal/index.ts +0 -2
- package/src/goal/plan.ts +0 -196
- package/src/governance/attentionManifest.ts +0 -802
- package/src/governance/audit.ts +0 -362
- package/src/governance/budget.ts +0 -628
- package/src/governance/context.ts +0 -356
- package/src/governance/control.ts +0 -159
- package/src/governance/cooperation.ts +0 -479
- package/src/governance/credential.ts +0 -359
- package/src/governance/httpServer.ts +0 -99
- package/src/governance/index.ts +0 -32
- package/src/governance/legal.ts +0 -574
- package/src/governance/matrix.ts +0 -460
- package/src/governance/perspectives.ts +0 -406
- package/src/governance/signing.ts +0 -407
- package/src/governance/store.ts +0 -125
- package/src/governance/switching.ts +0 -459
- package/src/governance/toolPolicy.ts +0 -80
- package/src/governance/transport.ts +0 -204
- package/src/governance/types.ts +0 -380
- package/src/governance/workflow.ts +0 -743
- package/src/index.ts +0 -11
- package/src/interaction/index.ts +0 -1
- package/src/interaction/interaction.ts +0 -391
- package/src/ipc/index.ts +0 -4
- package/src/ipc/mailbox.ts +0 -132
- package/src/ipc/memorySocialStore.ts +0 -93
- package/src/ipc/social.ts +0 -93
- package/src/kernel/index.ts +0 -14
- package/src/kernel/scheduler.ts +0 -498
- package/src/ledger/checkpoint.ts +0 -304
- package/src/ledger/index.ts +0 -4
- package/src/ledger/ledger.ts +0 -31
- package/src/ledger/persistence.ts +0 -159
- package/src/ledger/share.ts +0 -80
- package/src/lock/index.ts +0 -2
- package/src/lock/lease.ts +0 -74
- package/src/main.ts +0 -199
- package/src/manifest/agentCard.ts +0 -72
- package/src/manifest/cardSign.ts +0 -87
- package/src/manifest/federation.ts +0 -237
- package/src/manifest/federationTypes.ts +0 -55
- package/src/manifest/index.ts +0 -8
- package/src/manifest/keys.ts +0 -643
- package/src/manifest/manifest.ts +0 -114
- package/src/manifest/sign.ts +0 -134
- package/src/manifest/trust.ts +0 -146
- package/src/mission/index.ts +0 -2
- package/src/mission/missionQueue.ts +0 -75
- package/src/module/index.ts +0 -9
- package/src/module/llm/deepseek.ts +0 -214
- package/src/module/llm/llm.ts +0 -84
- package/src/module/mcp/client.ts +0 -110
- package/src/module/mcp/http.ts +0 -102
- package/src/module/mcp/protocol.ts +0 -77
- package/src/module/mcp/server.ts +0 -148
- package/src/module/mcp/transport.ts +0 -30
- package/src/module/mcp/workspaceServer.ts +0 -111
- package/src/module/sandbox/sandbox.ts +0 -29
- package/src/module/tool/mcpExecutor.ts +0 -54
- package/src/module/tool/policy.ts +0 -52
- package/src/module/tool/redact.ts +0 -29
- package/src/module/tool/tool.ts +0 -53
- package/src/module/tool/workspaceExecutor.ts +0 -35
- package/src/policy/guard.ts +0 -240
- package/src/policy/index.ts +0 -2
- package/src/policy/policy.ts +0 -561
- package/src/process/agent.ts +0 -341
- package/src/process/agentService.ts +0 -236
- package/src/process/agentStore.ts +0 -378
- package/src/process/executionStore.ts +0 -151
- package/src/process/index.ts +0 -5
- package/src/process/process.ts +0 -240
- package/src/process/transitions.ts +0 -19
- package/src/progress/index.ts +0 -2
- package/src/progress/progress.ts +0 -85
- package/src/protocol/a2a.ts +0 -120
- package/src/protocol/channel.ts +0 -44
- package/src/protocol/envelope.ts +0 -655
- package/src/protocol/httpChannel.ts +0 -87
- package/src/protocol/index.ts +0 -6
- package/src/protocol/protocol.ts +0 -138
- package/src/protocol/wire.ts +0 -60
- package/src/receipt/index.ts +0 -1
- package/src/receipt/receipt.ts +0 -47
- package/src/registry/content.ts +0 -69
- package/src/registry/index.ts +0 -23
- package/src/registry/registry.ts +0 -599
- package/src/runtime/action.ts +0 -87
- package/src/runtime/behavior.ts +0 -330
- package/src/runtime/behaviorTuning.ts +0 -163
- package/src/runtime/cognitiveRuntime.ts +0 -703
- package/src/runtime/escalation.ts +0 -35
- package/src/runtime/governedTask.ts +0 -233
- package/src/runtime/index.ts +0 -15
- package/src/runtime/kernelRuntime.ts +0 -144
- package/src/runtime/operation.ts +0 -35
- package/src/runtime/replay.ts +0 -71
- package/src/runtime/routing.ts +0 -58
- package/src/runtime/safety.ts +0 -48
- package/src/runtime/session.ts +0 -341
- package/src/runtime/sessionStore.ts +0 -43
- package/src/runtime/telemetry.ts +0 -55
- package/src/runtime/turnStore.ts +0 -30
- package/src/scenario/index.ts +0 -1
- package/src/scenario/scenario.ts +0 -299
- package/src/semantic/canonical.ts +0 -24
- package/src/semantic/index.ts +0 -2
- package/src/semantic/sha256.ts +0 -82
- package/src/storage/appendLog.ts +0 -372
- package/src/storage/fileAppendSink.ts +0 -40
- package/src/storage/index.ts +0 -2
- package/src/store/bindCache.ts +0 -22
- package/src/store/cache.ts +0 -191
- package/src/store/context.ts +0 -31
- package/src/store/handleStore.ts +0 -31
- package/src/store/index.ts +0 -9
- package/src/store/messageStore.ts +0 -31
- package/src/store/objectStore.ts +0 -31
- package/src/store/processStore.ts +0 -31
- package/src/store/threadStore.ts +0 -31
- package/src/store/windowStore.ts +0 -31
- package/src/structure/abstractSyntaxTree.ts +0 -493
- package/src/structure/avlTree.ts +0 -408
- package/src/structure/binarySearchTree.ts +0 -352
- package/src/structure/binaryTree.ts +0 -525
- package/src/structure/bloomFilter.ts +0 -231
- package/src/structure/compare.ts +0 -110
- package/src/structure/cuckooFilter.ts +0 -337
- package/src/structure/deque.ts +0 -223
- package/src/structure/filterKey.ts +0 -36
- package/src/structure/hash.ts +0 -279
- package/src/structure/heap.ts +0 -268
- package/src/structure/index.ts +0 -20
- package/src/structure/iterator.ts +0 -22
- package/src/structure/lru.ts +0 -619
- package/src/structure/ordered.ts +0 -399
- package/src/structure/priority.ts +0 -915
- package/src/structure/queue.ts +0 -168
- package/src/structure/redBlackTree.ts +0 -680
- package/src/structure/segmentTree.ts +0 -248
- package/src/structure/stack.ts +0 -118
- package/src/structure/unordered.ts +0 -407
- package/src/style.css +0 -278
- package/src/thread/index.ts +0 -2
- package/src/thread/thread.ts +0 -176
- package/src/thread/transitions.ts +0 -17
- package/src/types/common.ts +0 -119
- package/src/types/index.ts +0 -23
- package/src/warrant/epistemic.ts +0 -154
- package/src/warrant/index.ts +0 -3
- package/src/warrant/inquiry.ts +0 -166
- package/src/warrant/warrant.ts +0 -179
- package/src/window/compaction.ts +0 -403
- package/src/window/compactionTypes.ts +0 -119
- package/src/window/index.ts +0 -7
- package/src/window/page.ts +0 -18
- package/src/window/window.ts +0 -244
- package/tools/_helpers.ts +0 -34
- package/tools/a2a-check.ts +0 -110
- package/tools/a2a-flow-check.ts +0 -78
- package/tools/agent-card-check.ts +0 -76
- package/tools/agent-check.ts +0 -236
- package/tools/agent-store-check.ts +0 -153
- package/tools/agreement-check.ts +0 -27
- package/tools/annotation-server-check.ts +0 -48
- package/tools/annotation-server.ts +0 -230
- package/tools/annotation-status.ts +0 -65
- package/tools/approval-access-check.ts +0 -66
- package/tools/arch-check.ts +0 -72
- package/tools/attention-core-check.ts +0 -48
- package/tools/attention-resource-check.ts +0 -169
- package/tools/audit-check.ts +0 -207
- package/tools/authority-check.ts +0 -124
- package/tools/authz-check.ts +0 -138
- package/tools/bayes-check.ts +0 -162
- package/tools/bayes-probe.ts +0 -154
- package/tools/behavior-tuning-check.ts +0 -53
- package/tools/board-check.ts +0 -87
- package/tools/boundary-check.ts +0 -199
- package/tools/bundle-trust-check.ts +0 -96
- package/tools/calibrate-imported.ts +0 -108
- package/tools/calibration-check.ts +0 -44
- package/tools/calibration-registry-check.ts +0 -40
- package/tools/calibration-sim.ts +0 -40
- package/tools/card-sign-check.ts +0 -71
- package/tools/card-trust-check.ts +0 -78
- package/tools/channel-check.ts +0 -86
- package/tools/checkpoint-check.ts +0 -620
- package/tools/cleanup-style-configs.ts +0 -29
- package/tools/cognition-check.ts +0 -648
- package/tools/cognitive-runtime-check.ts +0 -609
- package/tools/collaboration-demo.ts +0 -78
- package/tools/compaction-check.ts +0 -266
- package/tools/concept-check.ts +0 -260
- package/tools/concurrency-check.ts +0 -242
- package/tools/conformance-runtime.ts +0 -389
- package/tools/conformance.ts +0 -651
- package/tools/context-ast-check.ts +0 -90
- package/tools/context-ast-deepseek.ts +0 -242
- package/tools/context-graph-bench.ts +0 -50
- package/tools/context-graph-check.ts +0 -229
- package/tools/context-index-check.ts +0 -48
- package/tools/context-lifecycle-check.ts +0 -69
- package/tools/context-projection-check.ts +0 -73
- package/tools/context-scope-check.ts +0 -134
- package/tools/context-storage-check.ts +0 -113
- package/tools/cooperation-check.ts +0 -517
- package/tools/cooperation-http-check.ts +0 -125
- package/tools/deepseek-llm-check.ts +0 -147
- package/tools/deepseek-probe.ts +0 -494
- package/tools/diagnosis-check.ts +0 -109
- package/tools/diagnosis-router-check.ts +0 -50
- package/tools/document-context-check.ts +0 -237
- package/tools/envelope-check.ts +0 -659
- package/tools/eslint-rules/index.ts +0 -26
- package/tools/eslint-rules/rules/jsdoc-comment-format.ts +0 -105
- package/tools/eslint-rules/rules/no-function-keyword.ts +0 -60
- package/tools/eslint-rules/rules/no-multiline-parameters.ts +0 -71
- package/tools/eslint-rules/rules/no-multiline-type-parameters.ts +0 -57
- package/tools/eslint-rules/rules/no-undefined-comparison.ts +0 -115
- package/tools/eslint-rules/rules/prefer-template-for-string-conversion.ts +0 -97
- package/tools/eslint-rules/rules/require-typeof-parentheses.ts +0 -49
- package/tools/eslint-rules/rules/require-variable-type.ts +0 -36
- package/tools/eslint-rules/rules/variable-naming.ts +0 -175
- package/tools/eval-recorded-replay.ts +0 -215
- package/tools/eval-replay.ts +0 -139
- package/tools/eval-summary.ts +0 -136
- package/tools/evidence-revalidation-check.ts +0 -235
- package/tools/exec-check.ts +0 -217
- package/tools/federation-check.ts +0 -166
- package/tools/federation-demo.ts +0 -45
- package/tools/filter-check.ts +0 -243
- package/tools/governance-check.ts +0 -680
- package/tools/governance-store-check.ts +0 -131
- package/tools/governed-task-check.ts +0 -227
- package/tools/guard-check.ts +0 -122
- package/tools/http-channel-check.ts +0 -125
- package/tools/import-campaign.ts +0 -28
- package/tools/inquiry-check.ts +0 -126
- package/tools/interaction-check.ts +0 -171
- package/tools/interrupts-check.ts +0 -173
- package/tools/ipc-check.ts +0 -170
- package/tools/kernel-async-check.ts +0 -136
- package/tools/kernel-check.ts +0 -369
- package/tools/kernel-runtime-check.ts +0 -276
- package/tools/keys-check.ts +0 -559
- package/tools/label-audit.ts +0 -70
- package/tools/labels-workflow-check.ts +0 -49
- package/tools/linear-structure-check.ts +0 -524
- package/tools/live-exec.ts +0 -62
- package/tools/live-governance-eval.ts +0 -813
- package/tools/live-legacy.ts +0 -50
- package/tools/lru-check.ts +0 -182
- package/tools/make-annotation-campaign.ts +0 -57
- package/tools/mcp-executor-check.ts +0 -33
- package/tools/merge-annotations.ts +0 -32
- package/tools/merge-check.ts +0 -98
- package/tools/metrics-check.ts +0 -84
- package/tools/net-probe.ts +0 -107
- package/tools/oauth-probe.ts +0 -117
- package/tools/outbox-check.ts +0 -50
- package/tools/persistence-check.ts +0 -144
- package/tools/pin-check.ts +0 -116
- package/tools/platform-check.ts +0 -281
- package/tools/policy-check.ts +0 -514
- package/tools/prettier-plugin/index.mts +0 -84
- package/tools/priority-check.ts +0 -627
- package/tools/probe-context7.ts +0 -63
- package/tools/registry-check.ts +0 -252
- package/tools/reliability-check.ts +0 -25
- package/tools/retry-check.ts +0 -85
- package/tools/rewrite-declaration-extensions.ts +0 -98
- package/tools/runtime-check.ts +0 -165
- package/tools/runtime-deepseek-check.ts +0 -85
- package/tools/runtime-eval.ts +0 -358
- package/tools/scenario-check.ts +0 -161
- package/tools/scenario-incident.ts +0 -162
- package/tools/scoped-priors-check.ts +0 -35
- package/tools/scoped-priors-pooling.ts +0 -34
- package/tools/segment-ast-check.ts +0 -649
- package/tools/session-check.ts +0 -196
- package/tools/session-store-check.ts +0 -73
- package/tools/share-check.ts +0 -88
- package/tools/sign-check.ts +0 -95
- package/tools/signing-check.ts +0 -275
- package/tools/snapshot-demo.ts +0 -65
- package/tools/social-check.ts +0 -146
- package/tools/structure-compare-check.ts +0 -95
- package/tools/support/documentScanner.ts +0 -577
- package/tools/support/texScanner.ts +0 -631
- package/tools/support/workspaceScanner.ts +0 -476
- package/tools/team-check.ts +0 -163
- package/tools/team-demo.ts +0 -36
- package/tools/telemetry-check.ts +0 -44
- package/tools/tex-context-check.ts +0 -263
- package/tools/tool-gate-check.ts +0 -98
- package/tools/tree-structure-check.ts +0 -786
- package/tools/trust-flow-check.ts +0 -158
- package/tools/turn-store-check.ts +0 -57
- package/tools/unified-check.ts +0 -83
- package/tools/validate.ts +0 -309
- package/tools/wire-check.ts +0 -96
- package/tools/workspace-agent-check.ts +0 -486
- package/tools/workspace-agent-demo.ts +0 -62
- package/tools/workspace-agent-server.ts +0 -101
- package/tools/workspace-context-check.ts +0 -331
- package/tools/workspace-context.ts +0 -131
- package/tsconfig.build.json +0 -14
- package/tsconfig.json +0 -24
- package/tsconfig.tools.json +0 -31
- package/viz/context-ast.json +0 -1577
package/lib/hook/diff.js
ADDED
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Line diff for the workspace hook layer.
|
|
3
|
+
*
|
|
4
|
+
* The implementation is a linear-space LCS (Hirschberg) rather than a full
|
|
5
|
+
* dynamic-programming matrix: two 5000-line inputs would otherwise allocate a
|
|
6
|
+
* 25M-cell table and a diff of two generated files could exhaust the worker.
|
|
7
|
+
* Hirschberg keeps only two `Int32Array` rows at a time and still reconstructs
|
|
8
|
+
* the actual match list, so hunks stay stable and ordered rather than merely
|
|
9
|
+
* reporting counts.
|
|
10
|
+
*
|
|
11
|
+
* The result is bounded by {@link DiffMaxLines}. A larger input is diffed on
|
|
12
|
+
* its first 5000 lines and reports `truncated: true`; the fingerprints always
|
|
13
|
+
* cover the whole input, so a truncated display is never mistaken for an
|
|
14
|
+
* unchanged file.
|
|
15
|
+
*
|
|
16
|
+
* Every hunk line carries both coordinates. `beforeLine` and `afterLine` are
|
|
17
|
+
* 1-based; on an added line `beforeLine` is the insertion point in the original
|
|
18
|
+
* file, and on a removed line `afterLine` is the insertion point in the new
|
|
19
|
+
* file. That makes it possible to render either side without re-counting.
|
|
20
|
+
*/
|
|
21
|
+
import { rawTextDigest } from "../fingerprint/raw.js";
|
|
22
|
+
/**
|
|
23
|
+
* Maximum number of lines diffed per side. Beyond this the computation is
|
|
24
|
+
* bounded and the result says `truncated`.
|
|
25
|
+
*/
|
|
26
|
+
export const DiffMaxLines = 5000;
|
|
27
|
+
/**
|
|
28
|
+
* Default number of unchanged lines kept on each side of a change.
|
|
29
|
+
*/
|
|
30
|
+
export const DiffDefaultContext = 3;
|
|
31
|
+
/**
|
|
32
|
+
* Hard ceiling for a caller-supplied context size.
|
|
33
|
+
*/
|
|
34
|
+
export const DiffMaxContext = 20;
|
|
35
|
+
/**
|
|
36
|
+
* Split text into logical lines. A trailing newline terminates the last line
|
|
37
|
+
* rather than creating an empty one; `\r` is stripped so CRLF files diff
|
|
38
|
+
* cleanly against LF content.
|
|
39
|
+
*
|
|
40
|
+
* @param text - Text to split.
|
|
41
|
+
* @returns Lines without terminators.
|
|
42
|
+
*/
|
|
43
|
+
export const splitDiffLines = (text) => {
|
|
44
|
+
if (text.length === 0) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const lines = text.split("\n");
|
|
48
|
+
if (lines[lines.length - 1] === "") {
|
|
49
|
+
lines.pop();
|
|
50
|
+
}
|
|
51
|
+
return lines.map((line) => (line.endsWith("\r") ? line.slice(0, -1) : line));
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Build a diff source from caller-supplied text. The fingerprint covers the
|
|
55
|
+
* exact input, including its trailing newline.
|
|
56
|
+
*
|
|
57
|
+
* @param text - Whole text.
|
|
58
|
+
* @returns Source lines, fingerprint and truncation flag.
|
|
59
|
+
*/
|
|
60
|
+
export const textDiffSource = (text) => ({
|
|
61
|
+
lines: splitDiffLines(text),
|
|
62
|
+
fingerprint: rawTextDigest(text),
|
|
63
|
+
truncated: false,
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* Forward LCS row for `a[aStart..aEnd)` against `b[bStart..bEnd)`.
|
|
67
|
+
*
|
|
68
|
+
* @returns Row where index `k` is the LCS length for the first `k` items of b.
|
|
69
|
+
*/
|
|
70
|
+
const lcsForward = (sides, aStart, aEnd, bStart, bEnd) => {
|
|
71
|
+
const a = sides.a;
|
|
72
|
+
const b = sides.b;
|
|
73
|
+
const width = bEnd - bStart;
|
|
74
|
+
let previous = new Int32Array(width + 1);
|
|
75
|
+
let current = new Int32Array(width + 1);
|
|
76
|
+
for (let index = aStart; index < aEnd; index += 1) {
|
|
77
|
+
current[0] = 0;
|
|
78
|
+
const left = a[index];
|
|
79
|
+
for (let column = 1; column <= width; column += 1) {
|
|
80
|
+
if (left === b[bStart + column - 1]) {
|
|
81
|
+
current[column] = previous[column - 1] + 1;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
current[column] = Math.max(previous[column], current[column - 1]);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const swap = previous;
|
|
88
|
+
previous = current;
|
|
89
|
+
current = swap;
|
|
90
|
+
}
|
|
91
|
+
return previous;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Backward LCS row. Index `k` is the LCS length of the suffix paired with the
|
|
95
|
+
* last `k` items of b, which is what makes a Hirschberg split possible.
|
|
96
|
+
*/
|
|
97
|
+
const lcsBackward = (sides, aStart, aEnd, bStart, bEnd) => {
|
|
98
|
+
const a = sides.a;
|
|
99
|
+
const b = sides.b;
|
|
100
|
+
const width = bEnd - bStart;
|
|
101
|
+
let previous = new Int32Array(width + 1);
|
|
102
|
+
let current = new Int32Array(width + 1);
|
|
103
|
+
for (let index = aEnd - 1; index >= aStart; index -= 1) {
|
|
104
|
+
current[0] = 0;
|
|
105
|
+
const left = a[index];
|
|
106
|
+
for (let column = 1; column <= width; column += 1) {
|
|
107
|
+
if (left === b[bEnd - column]) {
|
|
108
|
+
current[column] = previous[column - 1] + 1;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
current[column] = Math.max(previous[column], current[column - 1]);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const swap = previous;
|
|
115
|
+
previous = current;
|
|
116
|
+
current = swap;
|
|
117
|
+
}
|
|
118
|
+
return previous;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Collect the matched index pairs of one LCS in order.
|
|
122
|
+
*
|
|
123
|
+
* The recursion splits `a` in half, picks the `b` split that maximises the sum
|
|
124
|
+
* of the forward and backward LCS lengths, and recurses on both halves. Memory
|
|
125
|
+
* stays O(|b|) and the result is the same match list a full LCS table would
|
|
126
|
+
* produce.
|
|
127
|
+
*
|
|
128
|
+
* @param sides - Both line arrays.
|
|
129
|
+
* @param aStart - Inclusive start in `a`.
|
|
130
|
+
* @param aEnd - Exclusive end in `a`.
|
|
131
|
+
* @param bStart - Inclusive start in `b`.
|
|
132
|
+
* @param bEnd - Exclusive end in `b`.
|
|
133
|
+
* @param matchA - Output indices in `a`.
|
|
134
|
+
* @param matchB - Output indices in `b`.
|
|
135
|
+
*/
|
|
136
|
+
const collectMatches = (sides, aStart, aEnd, bStart, bEnd, matchA, matchB) => {
|
|
137
|
+
if (aStart >= aEnd || bStart >= bEnd) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const a = sides.a;
|
|
141
|
+
const b = sides.b;
|
|
142
|
+
if (aEnd - aStart === 1) {
|
|
143
|
+
for (let index = bStart; index < bEnd; index += 1) {
|
|
144
|
+
if (a[aStart] === b[index]) {
|
|
145
|
+
matchA.push(aStart);
|
|
146
|
+
matchB.push(index);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const middle = Math.floor((aStart + aEnd) / 2);
|
|
153
|
+
const forward = lcsForward(sides, aStart, middle, bStart, bEnd);
|
|
154
|
+
const backward = lcsBackward(sides, middle, aEnd, bStart, bEnd);
|
|
155
|
+
const width = bEnd - bStart;
|
|
156
|
+
let split = 0;
|
|
157
|
+
let best = -1;
|
|
158
|
+
for (let column = 0; column <= width; column += 1) {
|
|
159
|
+
const score = forward[column] + backward[width - column];
|
|
160
|
+
if (score > best) {
|
|
161
|
+
best = score;
|
|
162
|
+
split = column;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
collectMatches(sides, aStart, middle, bStart, bStart + split, matchA, matchB);
|
|
166
|
+
collectMatches(sides, middle, aEnd, bStart + split, bEnd, matchA, matchB);
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Turn two line arrays into an ordered operation list with 1-based counters.
|
|
170
|
+
*
|
|
171
|
+
* @param before - Original lines.
|
|
172
|
+
* @param after - New lines.
|
|
173
|
+
* @returns Diff lines in document order.
|
|
174
|
+
*/
|
|
175
|
+
const diffSequences = (before, after) => {
|
|
176
|
+
const matchA = [];
|
|
177
|
+
const matchB = [];
|
|
178
|
+
collectMatches({ a: before, b: after }, 0, before.length, 0, after.length, matchA, matchB);
|
|
179
|
+
const lines = [];
|
|
180
|
+
let beforeIndex = 0;
|
|
181
|
+
let afterIndex = 0;
|
|
182
|
+
let beforeLine = 1;
|
|
183
|
+
let afterLine = 1;
|
|
184
|
+
for (let index = 0; index < matchA.length; index += 1) {
|
|
185
|
+
const targetA = matchA[index];
|
|
186
|
+
const targetB = matchB[index];
|
|
187
|
+
while (beforeIndex < targetA) {
|
|
188
|
+
lines.push({ type: "remove", text: before[beforeIndex], beforeLine, afterLine });
|
|
189
|
+
beforeIndex += 1;
|
|
190
|
+
beforeLine += 1;
|
|
191
|
+
}
|
|
192
|
+
while (afterIndex < targetB) {
|
|
193
|
+
lines.push({ type: "add", text: after[afterIndex], beforeLine, afterLine });
|
|
194
|
+
afterIndex += 1;
|
|
195
|
+
afterLine += 1;
|
|
196
|
+
}
|
|
197
|
+
lines.push({ type: "context", text: before[beforeIndex], beforeLine, afterLine });
|
|
198
|
+
beforeIndex += 1;
|
|
199
|
+
afterIndex += 1;
|
|
200
|
+
beforeLine += 1;
|
|
201
|
+
afterLine += 1;
|
|
202
|
+
}
|
|
203
|
+
while (beforeIndex < before.length) {
|
|
204
|
+
lines.push({ type: "remove", text: before[beforeIndex], beforeLine, afterLine });
|
|
205
|
+
beforeIndex += 1;
|
|
206
|
+
beforeLine += 1;
|
|
207
|
+
}
|
|
208
|
+
while (afterIndex < after.length) {
|
|
209
|
+
lines.push({ type: "add", text: after[afterIndex], beforeLine, afterLine });
|
|
210
|
+
afterIndex += 1;
|
|
211
|
+
afterLine += 1;
|
|
212
|
+
}
|
|
213
|
+
return lines;
|
|
214
|
+
};
|
|
215
|
+
/**
|
|
216
|
+
* Group a flat operation list into hunks with at most `context` unchanged
|
|
217
|
+
* lines on either side. Two changes separated by at most `2 * context`
|
|
218
|
+
* unchanged lines share one hunk.
|
|
219
|
+
*
|
|
220
|
+
* @param lines - Flat diff lines.
|
|
221
|
+
* @param context - Unchanged lines retained on each side.
|
|
222
|
+
* @returns Hunks in document order.
|
|
223
|
+
*/
|
|
224
|
+
const buildHunks = (lines, context) => {
|
|
225
|
+
const changes = [];
|
|
226
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
227
|
+
if (lines[index].type !== "context") {
|
|
228
|
+
changes.push(index);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const hunks = [];
|
|
232
|
+
let index = 0;
|
|
233
|
+
while (index < changes.length) {
|
|
234
|
+
const start = Math.max(0, changes[index] - context);
|
|
235
|
+
let last = changes[index];
|
|
236
|
+
let next = index + 1;
|
|
237
|
+
while (next < changes.length && changes[next] - last <= context * 2 + 1) {
|
|
238
|
+
last = changes[next];
|
|
239
|
+
next += 1;
|
|
240
|
+
}
|
|
241
|
+
const end = Math.min(lines.length, last + context + 1);
|
|
242
|
+
const slice = lines.slice(start, end);
|
|
243
|
+
let beforeCount = 0;
|
|
244
|
+
let afterCount = 0;
|
|
245
|
+
for (let cursor = 0; cursor < slice.length; cursor += 1) {
|
|
246
|
+
if (slice[cursor].type !== "add") {
|
|
247
|
+
beforeCount += 1;
|
|
248
|
+
}
|
|
249
|
+
if (slice[cursor].type !== "remove") {
|
|
250
|
+
afterCount += 1;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
hunks.push({
|
|
254
|
+
beforeStart: slice[0].beforeLine,
|
|
255
|
+
beforeLines: beforeCount,
|
|
256
|
+
afterStart: slice[0].afterLine,
|
|
257
|
+
afterLines: afterCount,
|
|
258
|
+
lines: slice,
|
|
259
|
+
});
|
|
260
|
+
index = next;
|
|
261
|
+
}
|
|
262
|
+
return hunks;
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* Clamp a context request into `[0, DiffMaxContext]`.
|
|
266
|
+
*
|
|
267
|
+
* @param value - Caller context, or `undefined` for the default.
|
|
268
|
+
* @returns Effective context size.
|
|
269
|
+
*/
|
|
270
|
+
const contextOf = (value) => {
|
|
271
|
+
if (value === (void 0) || !Number.isSafeInteger(value)) {
|
|
272
|
+
return DiffDefaultContext;
|
|
273
|
+
}
|
|
274
|
+
return Math.min(DiffMaxContext, Math.max(0, value));
|
|
275
|
+
};
|
|
276
|
+
/**
|
|
277
|
+
* Diff two prepared sources. The fingerprints on the result always cover the
|
|
278
|
+
* whole input, even when the diff was truncated to `DiffMaxLines`.
|
|
279
|
+
*
|
|
280
|
+
* @param path - Root-relative path the result describes.
|
|
281
|
+
* @param before - Original side.
|
|
282
|
+
* @param after - New side.
|
|
283
|
+
* @param context - Unchanged lines retained on each side.
|
|
284
|
+
* @returns Diff result with counts and hunks.
|
|
285
|
+
*/
|
|
286
|
+
export const diffSources = (path, before, after, context = DiffDefaultContext) => {
|
|
287
|
+
const boundedContext = contextOf(context);
|
|
288
|
+
const beforeTruncated = before.lines.length > DiffMaxLines;
|
|
289
|
+
const afterTruncated = after.lines.length > DiffMaxLines;
|
|
290
|
+
const beforeLines = beforeTruncated ? before.lines.slice(0, DiffMaxLines) : before.lines;
|
|
291
|
+
const afterLines = afterTruncated ? after.lines.slice(0, DiffMaxLines) : after.lines;
|
|
292
|
+
const lines = diffSequences(beforeLines, afterLines);
|
|
293
|
+
let added = 0;
|
|
294
|
+
let removed = 0;
|
|
295
|
+
let unchanged = 0;
|
|
296
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
297
|
+
if (lines[index].type === "add") {
|
|
298
|
+
added += 1;
|
|
299
|
+
}
|
|
300
|
+
else if (lines[index].type === "remove") {
|
|
301
|
+
removed += 1;
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
unchanged += 1;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
path,
|
|
309
|
+
beforeFingerprint: before.fingerprint,
|
|
310
|
+
afterFingerprint: after.fingerprint,
|
|
311
|
+
added,
|
|
312
|
+
removed,
|
|
313
|
+
unchanged,
|
|
314
|
+
hunks: buildHunks(lines, boundedContext),
|
|
315
|
+
truncated: before.truncated || after.truncated || beforeTruncated || afterTruncated,
|
|
316
|
+
};
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* Diff two texts directly.
|
|
320
|
+
*
|
|
321
|
+
* @param path - Root-relative path the result describes.
|
|
322
|
+
* @param before - Original text.
|
|
323
|
+
* @param after - New text.
|
|
324
|
+
* @param options - Context size.
|
|
325
|
+
* @returns Diff result.
|
|
326
|
+
*/
|
|
327
|
+
export const diffText = (path, before, after, options = {}) => diffSources(path, textDiffSource(before), textDiffSource(after), options.context);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export hooks.
|
|
3
|
+
*
|
|
4
|
+
* `useParse` is the cheap read helper; `useExportation` is the observable hook.
|
|
5
|
+
* Both call `FilesystemSession.exports`, so re-export edges, signatures and the
|
|
6
|
+
* fingerprint come from the one extractor the service already uses.
|
|
7
|
+
*/
|
|
8
|
+
import type { ExportRequest } from "../file/service.js";
|
|
9
|
+
import type { ExportReport } from "../file/types.js";
|
|
10
|
+
import type { Hook, HookOptions, HookSession } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Parse helper shape: one path in, one export report out.
|
|
13
|
+
*/
|
|
14
|
+
export type ExportationParse = (path: string) => ExportReport;
|
|
15
|
+
/**
|
|
16
|
+
* Read the export report for one path. Re-exports are included because a
|
|
17
|
+
* module's public surface is incomplete without them.
|
|
18
|
+
*
|
|
19
|
+
* @param session - Bound filesystem session.
|
|
20
|
+
* @returns Parse helper.
|
|
21
|
+
*/
|
|
22
|
+
export declare const useParse: (session: HookSession) => ExportationParse;
|
|
23
|
+
/**
|
|
24
|
+
* Exportation hook. `includeReexports` is forwarded unchanged, so a caller can
|
|
25
|
+
* ask for the narrow symbol list or the complete surface.
|
|
26
|
+
*
|
|
27
|
+
* @param session - Bound filesystem session.
|
|
28
|
+
* @param options - Recorder and cache options.
|
|
29
|
+
* @returns Hook producing one export report.
|
|
30
|
+
*/
|
|
31
|
+
export declare const useExportation: (session: HookSession, options?: HookOptions) => Hook<ExportRequest, ExportReport>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createHook } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Read the export report for one path. Re-exports are included because a
|
|
4
|
+
* module's public surface is incomplete without them.
|
|
5
|
+
*
|
|
6
|
+
* @param session - Bound filesystem session.
|
|
7
|
+
* @returns Parse helper.
|
|
8
|
+
*/
|
|
9
|
+
export const useParse = (session) => (path) => session.exports({ path, includeReexports: true });
|
|
10
|
+
/**
|
|
11
|
+
* Exportation hook. `includeReexports` is forwarded unchanged, so a caller can
|
|
12
|
+
* ask for the narrow symbol list or the complete surface.
|
|
13
|
+
*
|
|
14
|
+
* @param session - Bound filesystem session.
|
|
15
|
+
* @param options - Recorder and cache options.
|
|
16
|
+
* @returns Hook producing one export report.
|
|
17
|
+
*/
|
|
18
|
+
export const useExportation = (session, options = {}) => createHook({
|
|
19
|
+
name: "exportation",
|
|
20
|
+
session,
|
|
21
|
+
execute: (request) => session.exports(request),
|
|
22
|
+
pathOf: (request) => request.path,
|
|
23
|
+
options,
|
|
24
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ReadPage, ReadRequest, WriteRequest, WriteResult } from "../file/types.js";
|
|
2
|
+
import type { DiffRequest, DiffResult } from "./diff.js";
|
|
3
|
+
import type { Hook, HookOptions, HookSession } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Read hook. Delegates one `ReadRequest` to the session and keeps `bigint`
|
|
6
|
+
* totals (`totalLines`/`totalBytes`) intact; the hook layer never projects a
|
|
7
|
+
* domain value onto JSON.
|
|
8
|
+
*
|
|
9
|
+
* Caching is opt-in through `options.cache`. The cache key covers the request
|
|
10
|
+
* only, so a host that enables it after a write should reset the hook or create
|
|
11
|
+
* a new one; the default is uncached because a stale read is worse than a
|
|
12
|
+
* repeated one.
|
|
13
|
+
*
|
|
14
|
+
* @param session - Bound filesystem session.
|
|
15
|
+
* @param options - Recorder and cache options.
|
|
16
|
+
* @returns Hook producing one bounded read page.
|
|
17
|
+
*/
|
|
18
|
+
export declare const useRead: (session: HookSession, options?: HookOptions) => Hook<ReadRequest, ReadPage>;
|
|
19
|
+
/**
|
|
20
|
+
* Write hook. This is the only mutable operation in the hook layer.
|
|
21
|
+
*
|
|
22
|
+
* The success revision is `WriteResult.revision`, the revision the write
|
|
23
|
+
* actually produced, rather than a later session read that could include an
|
|
24
|
+
* unrelated change. The cache is always disabled.
|
|
25
|
+
*
|
|
26
|
+
* @param session - Bound filesystem session.
|
|
27
|
+
* @param options - Recorder options; `cache` is ignored.
|
|
28
|
+
* @returns Hook producing one write result.
|
|
29
|
+
*/
|
|
30
|
+
export declare const useWrite: (session: HookSession, options?: HookOptions) => Hook<WriteRequest, WriteResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Diff hook.
|
|
33
|
+
*
|
|
34
|
+
* `request.before` overrides the old side and `request.content` overrides the
|
|
35
|
+
* new side; an omitted side is read from the session. With both omitted the
|
|
36
|
+
* file is read once and compared with itself, which reports no hunks. The
|
|
37
|
+
* request cache is disabled because the result depends on the file on disk,
|
|
38
|
+
* not only on the request.
|
|
39
|
+
*
|
|
40
|
+
* @param session - Bound filesystem session.
|
|
41
|
+
* @param options - Recorder options; `cache` is ignored.
|
|
42
|
+
* @returns Hook producing one bounded diff.
|
|
43
|
+
*/
|
|
44
|
+
export declare const useDiff: (session: HookSession, options?: HookOptions) => Hook<DiffRequest, DiffResult>;
|
package/lib/hook/file.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File hooks: read, write and diff.
|
|
3
|
+
*
|
|
4
|
+
* `useWrite` is the only mutating hook in the whole layer. It forwards one
|
|
5
|
+
* `WriteRequest` to the bound `FilesystemSession.write` and reports the
|
|
6
|
+
* post-write revision from the result; it never enables the request cache,
|
|
7
|
+
* because replaying a write from cache would silently skip the second write
|
|
8
|
+
* and turn a "create" into a success that never touched the disk.
|
|
9
|
+
*
|
|
10
|
+
* `useRead` and `useDiff` are read-only. `useDiff` reconstructs the current file
|
|
11
|
+
* page by page (the read contract caps one page at 2000 lines and 256 KiB) and
|
|
12
|
+
* treats a missing file as the empty string, so "new file" and "deleted file"
|
|
13
|
+
* are both expressible without a special request shape.
|
|
14
|
+
*/
|
|
15
|
+
import { isFilesystemError } from "../file/errors.js";
|
|
16
|
+
import { rawTextDigest } from "../fingerprint/raw.js";
|
|
17
|
+
import { DiffMaxLines, diffSources, textDiffSource } from "./diff.js";
|
|
18
|
+
import { createHook } from "./types.js";
|
|
19
|
+
/**
|
|
20
|
+
* Largest page the read contract returns, in lines.
|
|
21
|
+
*/
|
|
22
|
+
const ReadPageLines = 2000;
|
|
23
|
+
/**
|
|
24
|
+
* Largest page the read contract returns, in UTF-8 bytes.
|
|
25
|
+
*/
|
|
26
|
+
const ReadPageBytes = 256 * 1024;
|
|
27
|
+
/**
|
|
28
|
+
* Read a whole file as diff lines. A missing file is the empty side; every
|
|
29
|
+
* other classified failure propagates. The fingerprint comes from the first
|
|
30
|
+
* page, which already covers the entire file bytes.
|
|
31
|
+
*
|
|
32
|
+
* Page text is returned without a trailing newline, so a page that ends on a
|
|
33
|
+
* blank line would lose that line if it were split naively. The page's
|
|
34
|
+
* inclusive `startLine`/`endLine` range is authoritative; missing trailing
|
|
35
|
+
* blanks are restored so a multi-page diff keeps every line.
|
|
36
|
+
*/
|
|
37
|
+
const readDiffSource = (session, path) => {
|
|
38
|
+
const lines = [];
|
|
39
|
+
let startLine = 1;
|
|
40
|
+
let fingerprint = rawTextDigest("");
|
|
41
|
+
let truncated = false;
|
|
42
|
+
let first = true;
|
|
43
|
+
while (lines.length <= DiffMaxLines) {
|
|
44
|
+
let page;
|
|
45
|
+
try {
|
|
46
|
+
page = session.read({
|
|
47
|
+
path,
|
|
48
|
+
startLine,
|
|
49
|
+
maxLines: Math.min(ReadPageLines, DiffMaxLines + 1 - lines.length),
|
|
50
|
+
maxBytes: ReadPageBytes,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (isFilesystemError(error) && error.code === "not_found") {
|
|
55
|
+
return { lines: [], fingerprint: rawTextDigest(""), truncated: false };
|
|
56
|
+
}
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
if (first) {
|
|
60
|
+
fingerprint = page.fingerprint;
|
|
61
|
+
first = false;
|
|
62
|
+
}
|
|
63
|
+
const expected = page.endLine - page.startLine + 1;
|
|
64
|
+
if (expected > 0) {
|
|
65
|
+
const pageLines = page.text.length === 0 ? [] : page.text.split("\n").map((line) => (line.endsWith("\r") ? line.slice(0, -1) : line));
|
|
66
|
+
for (let index = 0; index < pageLines.length; index += 1) {
|
|
67
|
+
lines.push(pageLines[index]);
|
|
68
|
+
}
|
|
69
|
+
while (pageLines.length < expected) {
|
|
70
|
+
lines.push("");
|
|
71
|
+
pageLines.push("");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (page.nextStartLine === null) {
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
if (page.nextStartLine <= startLine) {
|
|
78
|
+
truncated = true;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
startLine = page.nextStartLine;
|
|
82
|
+
}
|
|
83
|
+
if (lines.length > DiffMaxLines) {
|
|
84
|
+
lines.length = DiffMaxLines;
|
|
85
|
+
truncated = true;
|
|
86
|
+
}
|
|
87
|
+
return { lines, fingerprint, truncated };
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Read hook. Delegates one `ReadRequest` to the session and keeps `bigint`
|
|
91
|
+
* totals (`totalLines`/`totalBytes`) intact; the hook layer never projects a
|
|
92
|
+
* domain value onto JSON.
|
|
93
|
+
*
|
|
94
|
+
* Caching is opt-in through `options.cache`. The cache key covers the request
|
|
95
|
+
* only, so a host that enables it after a write should reset the hook or create
|
|
96
|
+
* a new one; the default is uncached because a stale read is worse than a
|
|
97
|
+
* repeated one.
|
|
98
|
+
*
|
|
99
|
+
* @param session - Bound filesystem session.
|
|
100
|
+
* @param options - Recorder and cache options.
|
|
101
|
+
* @returns Hook producing one bounded read page.
|
|
102
|
+
*/
|
|
103
|
+
export const useRead = (session, options = {}) => createHook({
|
|
104
|
+
name: "read",
|
|
105
|
+
session,
|
|
106
|
+
execute: (request) => session.read(request),
|
|
107
|
+
pathOf: (request) => request.path,
|
|
108
|
+
options,
|
|
109
|
+
});
|
|
110
|
+
/**
|
|
111
|
+
* Write hook. This is the only mutable operation in the hook layer.
|
|
112
|
+
*
|
|
113
|
+
* The success revision is `WriteResult.revision`, the revision the write
|
|
114
|
+
* actually produced, rather than a later session read that could include an
|
|
115
|
+
* unrelated change. The cache is always disabled.
|
|
116
|
+
*
|
|
117
|
+
* @param session - Bound filesystem session.
|
|
118
|
+
* @param options - Recorder options; `cache` is ignored.
|
|
119
|
+
* @returns Hook producing one write result.
|
|
120
|
+
*/
|
|
121
|
+
export const useWrite = (session, options = {}) => createHook({
|
|
122
|
+
name: "write",
|
|
123
|
+
session,
|
|
124
|
+
execute: (request) => session.write(request),
|
|
125
|
+
pathOf: (request) => request.path,
|
|
126
|
+
revisionOf: (result) => result.revision,
|
|
127
|
+
options: { ...options, cache: false },
|
|
128
|
+
});
|
|
129
|
+
/**
|
|
130
|
+
* Diff hook.
|
|
131
|
+
*
|
|
132
|
+
* `request.before` overrides the old side and `request.content` overrides the
|
|
133
|
+
* new side; an omitted side is read from the session. With both omitted the
|
|
134
|
+
* file is read once and compared with itself, which reports no hunks. The
|
|
135
|
+
* request cache is disabled because the result depends on the file on disk,
|
|
136
|
+
* not only on the request.
|
|
137
|
+
*
|
|
138
|
+
* @param session - Bound filesystem session.
|
|
139
|
+
* @param options - Recorder options; `cache` is ignored.
|
|
140
|
+
* @returns Hook producing one bounded diff.
|
|
141
|
+
*/
|
|
142
|
+
export const useDiff = (session, options = {}) => createHook({
|
|
143
|
+
name: "diff",
|
|
144
|
+
session,
|
|
145
|
+
execute: (request) => {
|
|
146
|
+
const beforeText = request.before;
|
|
147
|
+
const afterText = request.content;
|
|
148
|
+
const before = beforeText === (void 0) ? readDiffSource(session, request.path) : textDiffSource(beforeText);
|
|
149
|
+
const after = afterText === (void 0) ? (beforeText === (void 0) ? before : readDiffSource(session, request.path)) : textDiffSource(afterText);
|
|
150
|
+
return diffSources(request.path, before, after, request.context);
|
|
151
|
+
},
|
|
152
|
+
pathOf: (request) => request.path,
|
|
153
|
+
options: { ...options, cache: false },
|
|
154
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import hooks.
|
|
3
|
+
*
|
|
4
|
+
* `useParse` reports the outgoing imports of one file; `useImportation` wraps
|
|
5
|
+
* the same session call as an observable hook and forwards `direction`,
|
|
6
|
+
* `depth`, `includeExternal` and `limit` unchanged.
|
|
7
|
+
*
|
|
8
|
+
* Incoming edges are expensive because they require the root graph. The parse
|
|
9
|
+
* helper therefore keeps the service default (`outgoing`); a caller that wants
|
|
10
|
+
* `importedBy` asks for `direction: "incoming"` or `"both"` explicitly.
|
|
11
|
+
*/
|
|
12
|
+
import type { ImportRequest } from "../file/service.js";
|
|
13
|
+
import type { ImportReport } from "../file/types.js";
|
|
14
|
+
import type { Hook, HookOptions, HookSession } from "./types.js";
|
|
15
|
+
/**
|
|
16
|
+
* Parse helper shape: one path in, one import report out.
|
|
17
|
+
*/
|
|
18
|
+
export type ImportationParse = (path: string) => ImportReport;
|
|
19
|
+
/**
|
|
20
|
+
* Read the outgoing import report for one path.
|
|
21
|
+
*
|
|
22
|
+
* @param session - Bound filesystem session.
|
|
23
|
+
* @returns Parse helper.
|
|
24
|
+
*/
|
|
25
|
+
export declare const useParse: (session: HookSession) => ImportationParse;
|
|
26
|
+
/**
|
|
27
|
+
* Importation hook.
|
|
28
|
+
*
|
|
29
|
+
* @param session - Bound filesystem session.
|
|
30
|
+
* @param options - Recorder and cache options.
|
|
31
|
+
* @returns Hook producing one import report.
|
|
32
|
+
*/
|
|
33
|
+
export declare const useImportation: (session: HookSession, options?: HookOptions) => Hook<ImportRequest, ImportReport>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createHook } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Read the outgoing import report for one path.
|
|
4
|
+
*
|
|
5
|
+
* @param session - Bound filesystem session.
|
|
6
|
+
* @returns Parse helper.
|
|
7
|
+
*/
|
|
8
|
+
export const useParse = (session) => (path) => session.imports({ path });
|
|
9
|
+
/**
|
|
10
|
+
* Importation hook.
|
|
11
|
+
*
|
|
12
|
+
* @param session - Bound filesystem session.
|
|
13
|
+
* @param options - Recorder and cache options.
|
|
14
|
+
* @returns Hook producing one import report.
|
|
15
|
+
*/
|
|
16
|
+
export const useImportation = (session, options = {}) => createHook({
|
|
17
|
+
name: "importation",
|
|
18
|
+
session,
|
|
19
|
+
execute: (request) => session.imports(request),
|
|
20
|
+
pathOf: (request) => request.path,
|
|
21
|
+
options,
|
|
22
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public surface of the hook layer.
|
|
3
|
+
*
|
|
4
|
+
* The concrete `use*` hooks and their shared types are exported here. Each
|
|
5
|
+
* module has its own `useParse` read helper, so those collide by design; they
|
|
6
|
+
* are re-exported under module-qualified names (`useCodeParse`,
|
|
7
|
+
* `useProjectParse`, ...) and the original name remains available from the
|
|
8
|
+
* module itself.
|
|
9
|
+
*
|
|
10
|
+
* `createHook` is re-exported explicitly because it is the extension point a
|
|
11
|
+
* host uses to add a hook without changing this package.
|
|
12
|
+
*/
|
|
13
|
+
export * from "./types.js";
|
|
14
|
+
export * from "./diff.js";
|
|
15
|
+
export * from "./file.js";
|
|
16
|
+
export { createHook } from "./types.js";
|
|
17
|
+
export type { DependencyFacts, DependencyParse } from "./dependency.js";
|
|
18
|
+
export { useDependency, useParse as useDependencyParse } from "./dependency.js";
|
|
19
|
+
export type { ExportationParse } from "./exportation.js";
|
|
20
|
+
export { useExportation, useParse as useExportationParse } from "./exportation.js";
|
|
21
|
+
export type { ImportationParse } from "./importation.js";
|
|
22
|
+
export { useImportation, useParse as useImportationParse } from "./importation.js";
|
|
23
|
+
export type { OutlineParse } from "./outline.js";
|
|
24
|
+
export { useOutline, useParse as useOutlineParse } from "./outline.js";
|
|
25
|
+
export type { AstParse } from "./ast.js";
|
|
26
|
+
export { useAst, useParse as useAstParse } from "./ast.js";
|
|
27
|
+
export type { CodeModel, CodeParse, CodeRequest } from "./code.js";
|
|
28
|
+
export { useCode, useParse as useCodeParse } from "./code.js";
|
|
29
|
+
export type { ProjectKind, ProjectModel, ProjectParse, ProjectRequest } from "./project.js";
|
|
30
|
+
export { projectKindOf, useProject, useParse as useProjectParse } from "./project.js";
|