@flyingrobots/graft 0.6.1 → 0.7.1
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 +148 -0
- package/README.md +1 -2
- package/bin/graft.js +26 -26
- package/dist/adapters/json-text-decoder.d.ts +3 -0
- package/dist/adapters/json-text-decoder.d.ts.map +1 -0
- package/dist/adapters/json-text-decoder.js +12 -0
- package/dist/adapters/json-text-decoder.js.map +1 -0
- package/dist/adapters/node-paths.d.ts +3 -0
- package/dist/adapters/node-paths.d.ts.map +1 -0
- package/dist/adapters/node-paths.js +29 -0
- package/dist/adapters/node-paths.js.map +1 -0
- package/dist/adapters/repo-paths.d.ts.map +1 -1
- package/dist/adapters/repo-paths.js +40 -5
- package/dist/adapters/repo-paths.js.map +1 -1
- package/dist/api/tool-bridge.d.ts +1 -1
- package/dist/api/tool-bridge.d.ts.map +1 -1
- package/dist/api/tool-bridge.js +1 -1
- package/dist/api/tool-bridge.js.map +1 -1
- package/dist/cli/cli-error.d.ts.map +1 -1
- package/dist/cli/cli-error.js +47 -10
- package/dist/cli/cli-error.js.map +1 -1
- package/dist/cli/command-parser.d.ts +12 -3
- package/dist/cli/command-parser.d.ts.map +1 -1
- package/dist/cli/command-parser.js +161 -2
- package/dist/cli/command-parser.js.map +1 -1
- package/dist/cli/daemon-status-model.d.ts +87 -0
- package/dist/cli/daemon-status-model.d.ts.map +1 -0
- package/dist/cli/daemon-status-model.js +142 -0
- package/dist/cli/daemon-status-model.js.map +1 -0
- package/dist/cli/daemon-status-render.d.ts +3 -0
- package/dist/cli/daemon-status-render.d.ts.map +1 -0
- package/dist/cli/daemon-status-render.js +100 -0
- package/dist/cli/daemon-status-render.js.map +1 -0
- package/dist/cli/daemon-status.d.ts +7 -0
- package/dist/cli/daemon-status.d.ts.map +1 -0
- package/dist/cli/daemon-status.js +79 -0
- package/dist/cli/daemon-status.js.map +1 -0
- package/dist/cli/git-graft-enhance-model.d.ts +67 -0
- package/dist/cli/git-graft-enhance-model.d.ts.map +1 -0
- package/dist/cli/git-graft-enhance-model.js +55 -0
- package/dist/cli/git-graft-enhance-model.js.map +1 -0
- package/dist/cli/git-graft-enhance-render.d.ts +3 -0
- package/dist/cli/git-graft-enhance-render.d.ts.map +1 -0
- package/dist/cli/git-graft-enhance-render.js +29 -0
- package/dist/cli/git-graft-enhance-render.js.map +1 -0
- package/dist/cli/git-graft-enhance.d.ts +14 -0
- package/dist/cli/git-graft-enhance.d.ts.map +1 -0
- package/dist/cli/git-graft-enhance.js +29 -0
- package/dist/cli/git-graft-enhance.js.map +1 -0
- package/dist/cli/index-cmd.d.ts.map +1 -1
- package/dist/cli/index-cmd.js +18 -21
- package/dist/cli/index-cmd.js.map +1 -1
- package/dist/cli/index-model.d.ts +5 -9
- package/dist/cli/index-model.d.ts.map +1 -1
- package/dist/cli/index-model.js +20 -18
- package/dist/cli/index-model.js.map +1 -1
- package/dist/cli/init-client-config.d.ts +12 -7
- package/dist/cli/init-client-config.d.ts.map +1 -1
- package/dist/cli/init-client-config.js +145 -47
- package/dist/cli/init-client-config.js.map +1 -1
- package/dist/cli/init-model.d.ts +9 -2
- package/dist/cli/init-model.d.ts.map +1 -1
- package/dist/cli/init-model.js +54 -6
- package/dist/cli/init-model.js.map +1 -1
- package/dist/cli/init-render.d.ts.map +1 -1
- package/dist/cli/init-render.js +2 -2
- package/dist/cli/init-render.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +11 -9
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/json-document.d.ts +6 -0
- package/dist/cli/json-document.d.ts.map +1 -1
- package/dist/cli/json-document.js +12 -0
- package/dist/cli/json-document.js.map +1 -1
- package/dist/cli/main.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +49 -7
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migrate-local-history.d.ts.map +1 -1
- package/dist/cli/migrate-local-history.js +3 -2
- package/dist/cli/migrate-local-history.js.map +1 -1
- package/dist/cli/peer-command.d.ts +1 -1
- package/dist/cli/peer-command.d.ts.map +1 -1
- package/dist/cli/peer-command.js +1 -1
- package/dist/cli/peer-command.js.map +1 -1
- package/dist/contracts/capabilities.d.ts +5 -5
- package/dist/contracts/capabilities.d.ts.map +1 -1
- package/dist/contracts/capabilities.js +89 -0
- package/dist/contracts/capabilities.js.map +1 -1
- package/dist/contracts/causal-ontology.d.ts +17 -17
- package/dist/contracts/json-object.d.ts +0 -1
- package/dist/contracts/json-object.d.ts.map +1 -1
- package/dist/contracts/json-object.js +0 -10
- package/dist/contracts/json-object.js.map +1 -1
- package/dist/contracts/output-schema-cli.d.ts +277 -25
- package/dist/contracts/output-schema-cli.d.ts.map +1 -1
- package/dist/contracts/output-schema-cli.js +35 -3
- package/dist/contracts/output-schema-cli.js.map +1 -1
- package/dist/contracts/output-schema-fragments.d.ts +212 -87
- package/dist/contracts/output-schema-fragments.d.ts.map +1 -1
- package/dist/contracts/output-schema-fragments.js +49 -2
- package/dist/contracts/output-schema-fragments.js.map +1 -1
- package/dist/contracts/output-schema-mcp.d.ts +372 -47
- package/dist/contracts/output-schema-mcp.d.ts.map +1 -1
- package/dist/contracts/output-schema-mcp.js +217 -1
- package/dist/contracts/output-schema-mcp.js.map +1 -1
- package/dist/contracts/output-schema-meta.d.ts +2 -2
- package/dist/contracts/output-schema-meta.d.ts.map +1 -1
- package/dist/contracts/output-schemas.d.ts +7 -7
- package/dist/contracts/output-schemas.d.ts.map +1 -1
- package/dist/contracts/output-schemas.js +294 -6
- package/dist/contracts/output-schemas.js.map +1 -1
- package/dist/git/diff.d.ts +11 -0
- package/dist/git/diff.d.ts.map +1 -1
- package/dist/git/diff.js +50 -6
- package/dist/git/diff.js.map +1 -1
- package/dist/hooks/posttooluse-read.js +1 -1
- package/dist/hooks/posttooluse-read.js.map +1 -1
- package/dist/hooks/pretooluse-read.js +1 -1
- package/dist/hooks/pretooluse-read.js.map +1 -1
- package/dist/mcp/burden.d.ts.map +1 -1
- package/dist/mcp/burden.js +9 -0
- package/dist/mcp/burden.js.map +1 -1
- package/dist/mcp/context.d.ts +3 -2
- package/dist/mcp/context.d.ts.map +1 -1
- package/dist/mcp/context.js +2 -37
- package/dist/mcp/context.js.map +1 -1
- package/dist/mcp/daemon-server.d.ts +2 -0
- package/dist/mcp/daemon-server.d.ts.map +1 -1
- package/dist/mcp/daemon-server.js +6 -1
- package/dist/mcp/daemon-server.js.map +1 -1
- package/dist/mcp/daemon-session-host.d.ts +1 -0
- package/dist/mcp/daemon-session-host.d.ts.map +1 -1
- package/dist/mcp/daemon-session-host.js +3 -0
- package/dist/mcp/daemon-session-host.js.map +1 -1
- package/dist/mcp/daemon-stdio-bridge.d.ts +1 -0
- package/dist/mcp/daemon-stdio-bridge.d.ts.map +1 -1
- package/dist/mcp/daemon-stdio-bridge.js +1 -0
- package/dist/mcp/daemon-stdio-bridge.js.map +1 -1
- package/dist/mcp/daemon-worker-child-pool.d.ts +2 -0
- package/dist/mcp/daemon-worker-child-pool.d.ts.map +1 -1
- package/dist/mcp/daemon-worker-child-pool.js +10 -3
- package/dist/mcp/daemon-worker-child-pool.js.map +1 -1
- package/dist/mcp/daemon-worker-pool.d.ts +1 -1
- package/dist/mcp/daemon-worker-pool.d.ts.map +1 -1
- package/dist/mcp/daemon-worker-pool.js +1 -1
- package/dist/mcp/daemon-worker-pool.js.map +1 -1
- package/dist/mcp/monitor-tick-job.d.ts +1 -0
- package/dist/mcp/monitor-tick-job.d.ts.map +1 -1
- package/dist/mcp/monitor-tick-job.js +84 -29
- package/dist/mcp/monitor-tick-job.js.map +1 -1
- package/dist/mcp/monitor-types.d.ts +1 -1
- package/dist/mcp/monitor-types.d.ts.map +1 -1
- package/dist/mcp/persisted-local-history-graph.d.ts +2 -2
- package/dist/mcp/persisted-local-history-graph.d.ts.map +1 -1
- package/dist/mcp/persisted-local-history-graph.js +3 -2
- package/dist/mcp/persisted-local-history-graph.js.map +1 -1
- package/dist/mcp/persisted-local-history.d.ts +5 -5
- package/dist/mcp/persisted-local-history.js +2 -2
- package/dist/mcp/persisted-local-history.js.map +1 -1
- package/dist/mcp/persistent-monitor-runtime.d.ts +1 -0
- package/dist/mcp/persistent-monitor-runtime.d.ts.map +1 -1
- package/dist/mcp/persistent-monitor-runtime.js +35 -0
- package/dist/mcp/persistent-monitor-runtime.js.map +1 -1
- package/dist/mcp/repo-tool-worker-context.d.ts.map +1 -1
- package/dist/mcp/repo-tool-worker-context.js +5 -2
- package/dist/mcp/repo-tool-worker-context.js.map +1 -1
- package/dist/mcp/server-context.d.ts.map +1 -1
- package/dist/mcp/server-context.js +13 -0
- package/dist/mcp/server-context.js.map +1 -1
- package/dist/mcp/server-tool-access.d.ts +1 -1
- package/dist/mcp/server-tool-access.d.ts.map +1 -1
- package/dist/mcp/server-tool-access.js +3 -1
- package/dist/mcp/server-tool-access.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +5 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +18 -0
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/mcp/tools/code-find.d.ts.map +1 -1
- package/dist/mcp/tools/code-find.js +20 -0
- package/dist/mcp/tools/code-find.js.map +1 -1
- package/dist/mcp/tools/code-show.d.ts.map +1 -1
- package/dist/mcp/tools/code-show.js +24 -0
- package/dist/mcp/tools/code-show.js.map +1 -1
- package/dist/mcp/tools/diagnostic-models.d.ts +2 -0
- package/dist/mcp/tools/diagnostic-models.d.ts.map +1 -1
- package/dist/mcp/tools/doctor.d.ts.map +1 -1
- package/dist/mcp/tools/doctor.js +18 -1
- package/dist/mcp/tools/doctor.js.map +1 -1
- package/dist/mcp/tools/export-surface-diff.d.ts +3 -0
- package/dist/mcp/tools/export-surface-diff.d.ts.map +1 -0
- package/dist/mcp/tools/export-surface-diff.js +24 -0
- package/dist/mcp/tools/export-surface-diff.js.map +1 -0
- package/dist/mcp/tools/file-outline.js +1 -1
- package/dist/mcp/tools/file-outline.js.map +1 -1
- package/dist/mcp/tools/graft-edit.d.ts +3 -0
- package/dist/mcp/tools/graft-edit.d.ts.map +1 -0
- package/dist/mcp/tools/graft-edit.js +192 -0
- package/dist/mcp/tools/graft-edit.js.map +1 -0
- package/dist/mcp/tools/knowledge-map.d.ts +3 -0
- package/dist/mcp/tools/knowledge-map.d.ts.map +1 -0
- package/dist/mcp/tools/knowledge-map.js +31 -0
- package/dist/mcp/tools/knowledge-map.js.map +1 -0
- package/dist/mcp/tools/monitor-nudge.d.ts +3 -0
- package/dist/mcp/tools/monitor-nudge.d.ts.map +1 -0
- package/dist/mcp/tools/monitor-nudge.js +17 -0
- package/dist/mcp/tools/monitor-nudge.js.map +1 -0
- package/dist/mcp/tools/precision-warp.d.ts +3 -3
- package/dist/mcp/tools/precision-warp.d.ts.map +1 -1
- package/dist/mcp/tools/precision-warp.js +24 -15
- package/dist/mcp/tools/precision-warp.js.map +1 -1
- package/dist/mcp/tools/refactor-difficulty.d.ts +3 -0
- package/dist/mcp/tools/refactor-difficulty.d.ts.map +1 -0
- package/dist/mcp/tools/refactor-difficulty.js +36 -0
- package/dist/mcp/tools/refactor-difficulty.js.map +1 -0
- package/dist/mcp/tools/safe-read.js +2 -2
- package/dist/mcp/tools/safe-read.js.map +1 -1
- package/dist/mcp/tools/structural-blame.d.ts +3 -0
- package/dist/mcp/tools/structural-blame.d.ts.map +1 -0
- package/dist/mcp/tools/structural-blame.js +44 -0
- package/dist/mcp/tools/structural-blame.js.map +1 -0
- package/dist/mcp/tools/structural-churn.d.ts +3 -0
- package/dist/mcp/tools/structural-churn.d.ts.map +1 -0
- package/dist/mcp/tools/structural-churn.js +28 -0
- package/dist/mcp/tools/structural-churn.js.map +1 -0
- package/dist/mcp/tools/structural-log.d.ts +3 -0
- package/dist/mcp/tools/structural-log.d.ts.map +1 -0
- package/dist/mcp/tools/structural-log.js +38 -0
- package/dist/mcp/tools/structural-log.js.map +1 -0
- package/dist/mcp/tools/structural-review.d.ts +3 -0
- package/dist/mcp/tools/structural-review.d.ts.map +1 -0
- package/dist/mcp/tools/structural-review.js +55 -0
- package/dist/mcp/tools/structural-review.js.map +1 -0
- package/dist/mcp/warp-pool.d.ts +4 -4
- package/dist/mcp/warp-pool.d.ts.map +1 -1
- package/dist/mcp/warp-pool.js.map +1 -1
- package/dist/mcp/workspace-router-model.d.ts +2 -2
- package/dist/mcp/workspace-router-model.d.ts.map +1 -1
- package/dist/mcp/workspace-router-runtime.d.ts +3 -3
- package/dist/mcp/workspace-router-runtime.d.ts.map +1 -1
- package/dist/mcp/workspace-router-runtime.js +4 -1
- package/dist/mcp/workspace-router-runtime.js.map +1 -1
- package/dist/mcp/workspace-router.d.ts +3 -2
- package/dist/mcp/workspace-router.d.ts.map +1 -1
- package/dist/mcp/workspace-router.js +6 -0
- package/dist/mcp/workspace-router.js.map +1 -1
- package/dist/operations/adaptive-projection.d.ts +22 -0
- package/dist/operations/adaptive-projection.d.ts.map +1 -0
- package/dist/operations/adaptive-projection.js +36 -0
- package/dist/operations/adaptive-projection.js.map +1 -0
- package/dist/operations/agent-handoff.d.ts +25 -0
- package/dist/operations/agent-handoff.d.ts.map +1 -0
- package/dist/operations/agent-handoff.js +36 -0
- package/dist/operations/agent-handoff.js.map +1 -0
- package/dist/operations/capture-range.d.ts +33 -0
- package/dist/operations/capture-range.d.ts.map +1 -0
- package/dist/operations/capture-range.js +45 -0
- package/dist/operations/capture-range.js.map +1 -0
- package/dist/operations/conversation-primer.d.ts +27 -0
- package/dist/operations/conversation-primer.d.ts.map +1 -0
- package/dist/operations/conversation-primer.js +52 -0
- package/dist/operations/conversation-primer.js.map +1 -0
- package/dist/operations/cross-session-resume.d.ts +28 -0
- package/dist/operations/cross-session-resume.d.ts.map +1 -0
- package/dist/operations/cross-session-resume.js +79 -0
- package/dist/operations/cross-session-resume.js.map +1 -0
- package/dist/operations/deterministic-replay.d.ts +39 -0
- package/dist/operations/deterministic-replay.d.ts.map +1 -0
- package/dist/operations/deterministic-replay.js +90 -0
- package/dist/operations/deterministic-replay.js.map +1 -0
- package/dist/operations/export-surface-diff.d.ts +36 -0
- package/dist/operations/export-surface-diff.d.ts.map +1 -0
- package/dist/operations/export-surface-diff.js +298 -0
- package/dist/operations/export-surface-diff.js.map +1 -0
- package/dist/operations/footprint-parallelism.d.ts +25 -0
- package/dist/operations/footprint-parallelism.d.ts.map +1 -0
- package/dist/operations/footprint-parallelism.js +79 -0
- package/dist/operations/footprint-parallelism.js.map +1 -0
- package/dist/operations/graft-diff.d.ts.map +1 -1
- package/dist/operations/graft-diff.js +14 -7
- package/dist/operations/graft-diff.js.map +1 -1
- package/dist/operations/horizon-of-readability.d.ts +23 -0
- package/dist/operations/horizon-of-readability.d.ts.map +1 -0
- package/dist/operations/horizon-of-readability.js +39 -0
- package/dist/operations/horizon-of-readability.js.map +1 -0
- package/dist/operations/import-reference-impact.d.ts +13 -0
- package/dist/operations/import-reference-impact.d.ts.map +1 -0
- package/dist/operations/import-reference-impact.js +101 -0
- package/dist/operations/import-reference-impact.js.map +1 -0
- package/dist/operations/knowledge-map.d.ts +30 -0
- package/dist/operations/knowledge-map.d.ts.map +1 -0
- package/dist/operations/knowledge-map.js +64 -0
- package/dist/operations/knowledge-map.js.map +1 -0
- package/dist/operations/observation-cache.d.ts +8 -2
- package/dist/operations/observation-cache.d.ts.map +1 -1
- package/dist/operations/observation-cache.js +17 -5
- package/dist/operations/observation-cache.js.map +1 -1
- package/dist/operations/projection-safety.d.ts +31 -0
- package/dist/operations/projection-safety.d.ts.map +1 -0
- package/dist/operations/projection-safety.js +77 -0
- package/dist/operations/projection-safety.js.map +1 -0
- package/dist/operations/repo-workspace.js +3 -3
- package/dist/operations/repo-workspace.js.map +1 -1
- package/dist/operations/semantic-drift.d.ts +27 -0
- package/dist/operations/semantic-drift.d.ts.map +1 -0
- package/dist/operations/semantic-drift.js +46 -0
- package/dist/operations/semantic-drift.js.map +1 -0
- package/dist/operations/session-filtration.d.ts +36 -0
- package/dist/operations/session-filtration.d.ts.map +1 -0
- package/dist/operations/session-filtration.js +48 -0
- package/dist/operations/session-filtration.js.map +1 -0
- package/dist/operations/session-replay.d.ts +17 -0
- package/dist/operations/session-replay.d.ts.map +1 -0
- package/dist/operations/session-replay.js +59 -0
- package/dist/operations/session-replay.js.map +1 -0
- package/dist/operations/sludge-detector.d.ts +45 -0
- package/dist/operations/sludge-detector.d.ts.map +1 -0
- package/dist/operations/sludge-detector.js +278 -0
- package/dist/operations/sludge-detector.js.map +1 -0
- package/dist/operations/structural-blame.d.ts +67 -0
- package/dist/operations/structural-blame.d.ts.map +1 -0
- package/dist/operations/structural-blame.js +111 -0
- package/dist/operations/structural-blame.js.map +1 -0
- package/dist/operations/structural-review.d.ts +47 -0
- package/dist/operations/structural-review.d.ts.map +1 -0
- package/dist/operations/structural-review.js +225 -0
- package/dist/operations/structural-review.js.map +1 -0
- package/dist/operations/teaching-hints.d.ts +18 -0
- package/dist/operations/teaching-hints.d.ts.map +1 -0
- package/dist/operations/teaching-hints.js +35 -0
- package/dist/operations/teaching-hints.js.map +1 -0
- package/dist/parser/diff.d.ts +2 -0
- package/dist/parser/diff.d.ts.map +1 -1
- package/dist/parser/diff.js +7 -0
- package/dist/parser/diff.js.map +1 -1
- package/dist/ports/paths.d.ts +17 -0
- package/dist/ports/paths.d.ts.map +1 -0
- package/dist/ports/{warp.js → paths.js} +2 -2
- package/dist/ports/paths.js.map +1 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +3 -1
- package/dist/version.js.map +1 -1
- package/dist/warp/ast-emitter.d.ts +28 -0
- package/dist/warp/ast-emitter.d.ts.map +1 -0
- package/dist/warp/ast-emitter.js +90 -0
- package/dist/warp/ast-emitter.js.map +1 -0
- package/dist/warp/ast-import-resolver.d.ts +13 -0
- package/dist/warp/ast-import-resolver.d.ts.map +1 -0
- package/dist/warp/ast-import-resolver.js +259 -0
- package/dist/warp/ast-import-resolver.js.map +1 -0
- package/dist/warp/commit-meta.d.ts +8 -0
- package/dist/warp/commit-meta.d.ts.map +1 -0
- package/dist/warp/commit-meta.js +13 -0
- package/dist/warp/commit-meta.js.map +1 -0
- package/dist/warp/context.d.ts +10 -0
- package/dist/warp/context.d.ts.map +1 -0
- package/dist/warp/context.js +26 -0
- package/dist/warp/context.js.map +1 -0
- package/dist/warp/dead-symbols.d.ts +40 -0
- package/dist/warp/dead-symbols.d.ts.map +1 -0
- package/dist/warp/dead-symbols.js +127 -0
- package/dist/warp/dead-symbols.js.map +1 -0
- package/dist/warp/drift-sentinel.d.ts +30 -0
- package/dist/warp/drift-sentinel.d.ts.map +1 -0
- package/dist/warp/drift-sentinel.js +65 -0
- package/dist/warp/drift-sentinel.js.map +1 -0
- package/dist/warp/index-head.d.ts +32 -0
- package/dist/warp/index-head.d.ts.map +1 -0
- package/dist/warp/index-head.js +245 -0
- package/dist/warp/index-head.js.map +1 -0
- package/dist/warp/observers.d.ts +6 -6
- package/dist/warp/observers.d.ts.map +1 -1
- package/dist/warp/observers.js +5 -4
- package/dist/warp/observers.js.map +1 -1
- package/dist/warp/open.d.ts +5 -4
- package/dist/warp/open.d.ts.map +1 -1
- package/dist/warp/open.js +24 -49
- package/dist/warp/open.js.map +1 -1
- package/dist/warp/outline-diff-trailer.d.ts +26 -0
- package/dist/warp/outline-diff-trailer.d.ts.map +1 -0
- package/dist/warp/outline-diff-trailer.js +68 -0
- package/dist/warp/outline-diff-trailer.js.map +1 -0
- package/dist/warp/refactor-difficulty.d.ts +38 -0
- package/dist/warp/refactor-difficulty.d.ts.map +1 -0
- package/dist/warp/refactor-difficulty.js +169 -0
- package/dist/warp/refactor-difficulty.js.map +1 -0
- package/dist/warp/references.d.ts +22 -0
- package/dist/warp/references.d.ts.map +1 -0
- package/dist/warp/references.js +57 -0
- package/dist/warp/references.js.map +1 -0
- package/dist/warp/stale-docs.d.ts +56 -0
- package/dist/warp/stale-docs.d.ts.map +1 -0
- package/dist/warp/stale-docs.js +149 -0
- package/dist/warp/stale-docs.js.map +1 -0
- package/dist/warp/structural-drift-detection.d.ts +49 -0
- package/dist/warp/structural-drift-detection.d.ts.map +1 -0
- package/dist/warp/structural-drift-detection.js +51 -0
- package/dist/warp/structural-drift-detection.js.map +1 -0
- package/dist/warp/structural-queries.d.ts +49 -0
- package/dist/warp/structural-queries.d.ts.map +1 -0
- package/dist/warp/structural-queries.js +175 -0
- package/dist/warp/structural-queries.js.map +1 -0
- package/dist/warp/symbol-timeline.d.ts +34 -0
- package/dist/warp/symbol-timeline.d.ts.map +1 -0
- package/dist/warp/symbol-timeline.js +127 -0
- package/dist/warp/symbol-timeline.js.map +1 -0
- package/dist/warp/traverse-hydrate.d.ts +23 -0
- package/dist/warp/traverse-hydrate.d.ts.map +1 -0
- package/dist/warp/traverse-hydrate.js +39 -0
- package/dist/warp/traverse-hydrate.js.map +1 -0
- package/dist/warp/warp-reference-count.d.ts +19 -0
- package/dist/warp/warp-reference-count.d.ts.map +1 -0
- package/dist/warp/warp-reference-count.js +32 -0
- package/dist/warp/warp-reference-count.js.map +1 -0
- package/dist/warp/warp-structural-blame.d.ts +20 -0
- package/dist/warp/warp-structural-blame.d.ts.map +1 -0
- package/dist/warp/warp-structural-blame.js +43 -0
- package/dist/warp/warp-structural-blame.js.map +1 -0
- package/dist/warp/warp-structural-churn.d.ts +30 -0
- package/dist/warp/warp-structural-churn.d.ts.map +1 -0
- package/dist/warp/warp-structural-churn.js +213 -0
- package/dist/warp/warp-structural-churn.js.map +1 -0
- package/dist/warp/warp-structural-log.d.ts +35 -0
- package/dist/warp/warp-structural-log.d.ts.map +1 -0
- package/dist/warp/warp-structural-log.js +104 -0
- package/dist/warp/warp-structural-log.js.map +1 -0
- package/docs/CLI.md +68 -4
- package/docs/MCP.md +23 -0
- package/docs/SETUP.md +112 -27
- package/package.json +13 -6
- package/dist/ports/warp.d.ts +0 -45
- package/dist/ports/warp.d.ts.map +0 -1
- package/dist/ports/warp.js.map +0 -1
- package/dist/warp/identity-resolver.d.ts +0 -14
- package/dist/warp/identity-resolver.d.ts.map +0 -1
- package/dist/warp/identity-resolver.js +0 -31
- package/dist/warp/identity-resolver.js.map +0 -1
- package/dist/warp/indexer-git.d.ts +0 -22
- package/dist/warp/indexer-git.d.ts.map +0 -1
- package/dist/warp/indexer-git.js +0 -148
- package/dist/warp/indexer-git.js.map +0 -1
- package/dist/warp/indexer-graph.d.ts +0 -17
- package/dist/warp/indexer-graph.d.ts.map +0 -1
- package/dist/warp/indexer-graph.js +0 -179
- package/dist/warp/indexer-graph.js.map +0 -1
- package/dist/warp/indexer-model.d.ts +0 -51
- package/dist/warp/indexer-model.d.ts.map +0 -1
- package/dist/warp/indexer-model.js +0 -21
- package/dist/warp/indexer-model.js.map +0 -1
- package/dist/warp/indexer.d.ts +0 -9
- package/dist/warp/indexer.d.ts.map +0 -1
- package/dist/warp/indexer.js +0 -112
- package/dist/warp/indexer.js.map +0 -1
- package/dist/warp/symbol-identity.d.ts +0 -11
- package/dist/warp/symbol-identity.d.ts.map +0 -1
- package/dist/warp/symbol-identity.js +0 -67
- package/dist/warp/symbol-identity.js.map +0 -1
- package/src/adapters/canonical-json.ts +0 -56
- package/src/adapters/node-fs.ts +0 -43
- package/src/adapters/node-git.ts +0 -47
- package/src/adapters/node-process-runner.ts +0 -27
- package/src/adapters/repo-paths.ts +0 -22
- package/src/adapters/rotating-ndjson-log.ts +0 -66
- package/src/api/index.ts +0 -107
- package/src/api/repo-local-graft.ts +0 -21
- package/src/api/repo-workspace.ts +0 -34
- package/src/api/tool-bridge.ts +0 -21
- package/src/cli/activity-render.ts +0 -112
- package/src/cli/cli-error.ts +0 -153
- package/src/cli/command-parser.ts +0 -302
- package/src/cli/entrypoint.ts +0 -18
- package/src/cli/index-cmd.ts +0 -94
- package/src/cli/index-model.ts +0 -76
- package/src/cli/init-bootstrap.ts +0 -47
- package/src/cli/init-client-config.ts +0 -299
- package/src/cli/init-model.ts +0 -229
- package/src/cli/init-render.ts +0 -54
- package/src/cli/init-target-hooks.ts +0 -93
- package/src/cli/init.ts +0 -122
- package/src/cli/json-document.ts +0 -144
- package/src/cli/local-history-dag-model.ts +0 -437
- package/src/cli/local-history-dag-render.ts +0 -133
- package/src/cli/local-history-dag.ts +0 -103
- package/src/cli/main.ts +0 -150
- package/src/cli/migrate-local-history.ts +0 -118
- package/src/cli/peer-command.ts +0 -59
- package/src/contracts/capabilities.ts +0 -450
- package/src/contracts/causal-ontology.ts +0 -627
- package/src/contracts/causal-surface-next-action.ts +0 -18
- package/src/contracts/json-object.ts +0 -28
- package/src/contracts/mcp-runtime.ts +0 -16
- package/src/contracts/output-schema-cli.ts +0 -70
- package/src/contracts/output-schema-fragments.ts +0 -831
- package/src/contracts/output-schema-mcp.ts +0 -282
- package/src/contracts/output-schema-meta.ts +0 -119
- package/src/contracts/output-schemas.ts +0 -1230
- package/src/git/diff.ts +0 -100
- package/src/git/target-git-hook-bootstrap.ts +0 -56
- package/src/guards/stream-boundary.ts +0 -110
- package/src/hooks/posttooluse-read.ts +0 -54
- package/src/hooks/pretooluse-read.ts +0 -52
- package/src/hooks/read-governor.ts +0 -95
- package/src/hooks/read-messages.ts +0 -53
- package/src/hooks/shared.ts +0 -168
- package/src/index.ts +0 -1
- package/src/mcp/burden.ts +0 -123
- package/src/mcp/cache.ts +0 -7
- package/src/mcp/cached-file.ts +0 -1
- package/src/mcp/context.ts +0 -187
- package/src/mcp/control-plane/authz-storage.ts +0 -129
- package/src/mcp/control-plane/session-registry.ts +0 -115
- package/src/mcp/control-plane/status-projection.ts +0 -76
- package/src/mcp/control-plane/types.ts +0 -144
- package/src/mcp/daemon-bootstrap.ts +0 -100
- package/src/mcp/daemon-control-plane.ts +0 -310
- package/src/mcp/daemon-job-scheduler.ts +0 -279
- package/src/mcp/daemon-repos.ts +0 -99
- package/src/mcp/daemon-server.ts +0 -165
- package/src/mcp/daemon-session-host.ts +0 -230
- package/src/mcp/daemon-stdio-bridge.ts +0 -260
- package/src/mcp/daemon-worker-child-pool.ts +0 -213
- package/src/mcp/daemon-worker-inline-pool.ts +0 -46
- package/src/mcp/daemon-worker-pool.ts +0 -7
- package/src/mcp/daemon-worker-process.ts +0 -52
- package/src/mcp/daemon-worker-types.ts +0 -66
- package/src/mcp/metrics.ts +0 -176
- package/src/mcp/monitor-health.ts +0 -83
- package/src/mcp/monitor-persistence.ts +0 -54
- package/src/mcp/monitor-tick-job.ts +0 -102
- package/src/mcp/monitor-types.ts +0 -103
- package/src/mcp/persisted-local-history-graph.ts +0 -591
- package/src/mcp/persisted-local-history-policy.ts +0 -501
- package/src/mcp/persisted-local-history-views.ts +0 -250
- package/src/mcp/persisted-local-history.ts +0 -1621
- package/src/mcp/persistent-monitor-runtime.ts +0 -445
- package/src/mcp/policy.ts +0 -75
- package/src/mcp/receipt.ts +0 -201
- package/src/mcp/repo-concurrency.ts +0 -392
- package/src/mcp/repo-overview/filter.ts +0 -44
- package/src/mcp/repo-overview/types.ts +0 -63
- package/src/mcp/repo-overview/view-projection.ts +0 -90
- package/src/mcp/repo-state-git.ts +0 -247
- package/src/mcp/repo-state-observation.ts +0 -203
- package/src/mcp/repo-state-transition.ts +0 -151
- package/src/mcp/repo-state-types.ts +0 -107
- package/src/mcp/repo-state.ts +0 -146
- package/src/mcp/repo-tool-job.ts +0 -102
- package/src/mcp/repo-tool-worker-context.ts +0 -212
- package/src/mcp/repo-workspace.ts +0 -21
- package/src/mcp/run-capture-config.ts +0 -33
- package/src/mcp/runtime-causal-context.ts +0 -72
- package/src/mcp/runtime-observability.ts +0 -217
- package/src/mcp/runtime-staged-target.ts +0 -161
- package/src/mcp/runtime-workspace-overlay.ts +0 -255
- package/src/mcp/secret-scrub.ts +0 -89
- package/src/mcp/semantic-transition-guidance.ts +0 -60
- package/src/mcp/semantic-transition-summary.ts +0 -130
- package/src/mcp/server-context.ts +0 -223
- package/src/mcp/server-invocation.ts +0 -388
- package/src/mcp/server-tool-access.ts +0 -145
- package/src/mcp/server.ts +0 -265
- package/src/mcp/stdio-server.ts +0 -26
- package/src/mcp/stdio.ts +0 -3
- package/src/mcp/tool-registry.ts +0 -80
- package/src/mcp/tools/activity-view.ts +0 -325
- package/src/mcp/tools/budget.ts +0 -23
- package/src/mcp/tools/causal-attach.ts +0 -67
- package/src/mcp/tools/causal-status.ts +0 -58
- package/src/mcp/tools/changed-since.ts +0 -71
- package/src/mcp/tools/code-find.ts +0 -169
- package/src/mcp/tools/code-refs.ts +0 -470
- package/src/mcp/tools/code-show.ts +0 -262
- package/src/mcp/tools/daemon-monitors.ts +0 -14
- package/src/mcp/tools/daemon-repos.ts +0 -22
- package/src/mcp/tools/daemon-sessions.ts +0 -14
- package/src/mcp/tools/daemon-status.ts +0 -12
- package/src/mcp/tools/diagnostic-models.ts +0 -95
- package/src/mcp/tools/doctor.ts +0 -66
- package/src/mcp/tools/explain.ts +0 -84
- package/src/mcp/tools/file-outline.ts +0 -67
- package/src/mcp/tools/git-files.ts +0 -73
- package/src/mcp/tools/graft-diff.ts +0 -35
- package/src/mcp/tools/map-collector.ts +0 -338
- package/src/mcp/tools/map.ts +0 -185
- package/src/mcp/tools/monitor-pause.ts +0 -18
- package/src/mcp/tools/monitor-resume.ts +0 -18
- package/src/mcp/tools/monitor-start.ts +0 -20
- package/src/mcp/tools/monitor-stop.ts +0 -18
- package/src/mcp/tools/precision-live.ts +0 -158
- package/src/mcp/tools/precision-match.ts +0 -54
- package/src/mcp/tools/precision-paths.ts +0 -59
- package/src/mcp/tools/precision-query.ts +0 -127
- package/src/mcp/tools/precision-show.ts +0 -86
- package/src/mcp/tools/precision-visibility.ts +0 -44
- package/src/mcp/tools/precision-warp.ts +0 -90
- package/src/mcp/tools/precision.ts +0 -21
- package/src/mcp/tools/read-range.ts +0 -28
- package/src/mcp/tools/run-capture.ts +0 -149
- package/src/mcp/tools/safe-read.ts +0 -148
- package/src/mcp/tools/since.ts +0 -53
- package/src/mcp/tools/state.ts +0 -39
- package/src/mcp/tools/stats.ts +0 -24
- package/src/mcp/tools/workspace-authorizations.ts +0 -14
- package/src/mcp/tools/workspace-authorize.ts +0 -20
- package/src/mcp/tools/workspace-bind.ts +0 -25
- package/src/mcp/tools/workspace-rebind.ts +0 -25
- package/src/mcp/tools/workspace-revoke.ts +0 -18
- package/src/mcp/tools/workspace-status.ts +0 -12
- package/src/mcp/warp-pool.ts +0 -36
- package/src/mcp/workspace-read-observation-model.ts +0 -48
- package/src/mcp/workspace-read-observation.ts +0 -103
- package/src/mcp/workspace-router-capability.ts +0 -32
- package/src/mcp/workspace-router-history.ts +0 -233
- package/src/mcp/workspace-router-model.ts +0 -131
- package/src/mcp/workspace-router-resolution.ts +0 -71
- package/src/mcp/workspace-router-runtime.ts +0 -243
- package/src/mcp/workspace-router.ts +0 -681
- package/src/metrics/logger.ts +0 -40
- package/src/metrics/types.ts +0 -40
- package/src/operations/cached-file.ts +0 -40
- package/src/operations/diff-identity.ts +0 -127
- package/src/operations/file-outline.ts +0 -48
- package/src/operations/graft-diff.ts +0 -162
- package/src/operations/observation-cache.ts +0 -149
- package/src/operations/read-range.ts +0 -64
- package/src/operations/repo-workspace.ts +0 -339
- package/src/operations/result-dto.ts +0 -23
- package/src/operations/safe-read.ts +0 -118
- package/src/operations/state.ts +0 -66
- package/src/operations/structured-buffer-compare.ts +0 -429
- package/src/operations/structured-buffer-model.ts +0 -456
- package/src/operations/structured-buffer-query.ts +0 -794
- package/src/operations/structured-buffer.ts +0 -181
- package/src/parser/diff.ts +0 -313
- package/src/parser/lang.ts +0 -71
- package/src/parser/markdown.ts +0 -197
- package/src/parser/outline.ts +0 -316
- package/src/parser/runtime.ts +0 -71
- package/src/parser/types.ts +0 -75
- package/src/policy/evaluate.ts +0 -178
- package/src/policy/graftignore.ts +0 -6
- package/src/policy/types.ts +0 -87
- package/src/ports/codec.ts +0 -13
- package/src/ports/filesystem.ts +0 -18
- package/src/ports/git.ts +0 -16
- package/src/ports/guards.ts +0 -68
- package/src/ports/process-runner.ts +0 -22
- package/src/ports/warp.ts +0 -55
- package/src/release/security-gate.ts +0 -102
- package/src/session/tracker.ts +0 -145
- package/src/session/types.ts +0 -23
- package/src/version.ts +0 -3
- package/src/warp/identity-resolver.ts +0 -35
- package/src/warp/indexer-git.ts +0 -182
- package/src/warp/indexer-graph.ts +0 -276
- package/src/warp/indexer-model.ts +0 -69
- package/src/warp/indexer.ts +0 -186
- package/src/warp/observers.ts +0 -100
- package/src/warp/open.ts +0 -93
- package/src/warp/plumbing.d.ts +0 -15
- package/src/warp/symbol-identity.ts +0 -100
- package/src/warp/writer-id.ts +0 -30
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { ZodError } from "zod";
|
|
3
|
-
import { RotatingNdjsonLog } from "../adapters/rotating-ndjson-log.js";
|
|
4
|
-
import type { JsonCodec } from "../ports/codec.js";
|
|
5
|
-
import type { FileSystem } from "../ports/filesystem.js";
|
|
6
|
-
import type { MetricsSnapshot } from "./metrics.js";
|
|
7
|
-
import type { BurdenKind } from "./burden.js";
|
|
8
|
-
import type { GovernorDepth } from "../session/types.js";
|
|
9
|
-
|
|
10
|
-
export type RuntimeLogPolicy = "metadata_only";
|
|
11
|
-
|
|
12
|
-
export interface RuntimeObservabilityState {
|
|
13
|
-
readonly enabled: boolean;
|
|
14
|
-
readonly logPath: string;
|
|
15
|
-
readonly maxBytes: number;
|
|
16
|
-
readonly logPolicy: RuntimeLogPolicy;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface ResolveRuntimeObservabilityOptions {
|
|
20
|
-
readonly graftDir: string;
|
|
21
|
-
readonly env?: Readonly<Record<string, string | undefined>>;
|
|
22
|
-
readonly overrides?: Partial<RuntimeObservabilityState>;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const DEFAULT_MAX_BYTES = 1_048_576;
|
|
26
|
-
const DEFAULT_POLICY: RuntimeLogPolicy = "metadata_only";
|
|
27
|
-
|
|
28
|
-
function parseBooleanFlag(value: string | undefined, fallback: boolean): boolean {
|
|
29
|
-
if (value === undefined) return fallback;
|
|
30
|
-
const normalized = value.trim().toLowerCase();
|
|
31
|
-
if ([ "0", "false", "no", "off" ].includes(normalized)) return false;
|
|
32
|
-
if ([ "1", "true", "yes", "on" ].includes(normalized)) return true;
|
|
33
|
-
return fallback;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function parsePositiveInteger(value: string | undefined, fallback: number): number {
|
|
37
|
-
if (value === undefined) return fallback;
|
|
38
|
-
const parsed = Number.parseInt(value, 10);
|
|
39
|
-
return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function resolveRuntimeObservabilityState(
|
|
43
|
-
options: ResolveRuntimeObservabilityOptions,
|
|
44
|
-
): RuntimeObservabilityState {
|
|
45
|
-
const env = options.env ?? process.env;
|
|
46
|
-
const base: RuntimeObservabilityState = {
|
|
47
|
-
enabled: parseBooleanFlag(env["GRAFT_ENABLE_MCP_RUNTIME_LOG"], true),
|
|
48
|
-
logPath: env["GRAFT_MCP_RUNTIME_LOG_PATH"]?.trim() ?? path.join(options.graftDir, "logs", "mcp-runtime.ndjson"),
|
|
49
|
-
maxBytes: parsePositiveInteger(env["GRAFT_MCP_RUNTIME_LOG_MAX_BYTES"], DEFAULT_MAX_BYTES),
|
|
50
|
-
logPolicy: DEFAULT_POLICY,
|
|
51
|
-
};
|
|
52
|
-
return {
|
|
53
|
-
...base,
|
|
54
|
-
...options.overrides,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export interface RuntimeSessionStartedEvent {
|
|
59
|
-
readonly event: "session_started";
|
|
60
|
-
readonly sessionId: string;
|
|
61
|
-
readonly logPath: string;
|
|
62
|
-
readonly logPolicy: RuntimeLogPolicy;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export interface RuntimeToolCallStartedEvent {
|
|
66
|
-
readonly event: "tool_call_started";
|
|
67
|
-
readonly sessionId: string;
|
|
68
|
-
readonly traceId: string;
|
|
69
|
-
readonly tool: string;
|
|
70
|
-
readonly argKeys: readonly string[];
|
|
71
|
-
readonly sessionDepth: GovernorDepth;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Per-tool-call footprint capturing which files, symbols, and regions
|
|
76
|
-
* were observed. Enables provenance tracing at sub-file granularity.
|
|
77
|
-
*/
|
|
78
|
-
export interface ToolCallFootprint {
|
|
79
|
-
/** File paths read or scanned by this tool call. */
|
|
80
|
-
readonly paths: readonly string[];
|
|
81
|
-
/** Symbol names inspected (when available from outline/precision tools). */
|
|
82
|
-
readonly symbols: readonly string[];
|
|
83
|
-
/** Line regions accessed (when available from read_range). */
|
|
84
|
-
readonly regions: readonly ToolCallFootprintRegion[];
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** A line region within a specific file. */
|
|
88
|
-
export interface ToolCallFootprintRegion {
|
|
89
|
-
readonly path: string;
|
|
90
|
-
readonly startLine: number;
|
|
91
|
-
readonly endLine: number;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export interface RuntimeToolCallCompletedEvent {
|
|
95
|
-
readonly event: "tool_call_completed";
|
|
96
|
-
readonly sessionId: string;
|
|
97
|
-
readonly traceId: string;
|
|
98
|
-
readonly seq: number;
|
|
99
|
-
readonly tool: string;
|
|
100
|
-
readonly latencyMs: number;
|
|
101
|
-
readonly projection: string;
|
|
102
|
-
readonly reason: string;
|
|
103
|
-
readonly burdenKind: BurdenKind;
|
|
104
|
-
readonly nonReadBurden: boolean;
|
|
105
|
-
readonly returnedBytes: number;
|
|
106
|
-
readonly fileBytes: number | null;
|
|
107
|
-
readonly sessionDepth: GovernorDepth;
|
|
108
|
-
readonly tripwireSignals: readonly string[];
|
|
109
|
-
readonly metrics: MetricsSnapshot;
|
|
110
|
-
/** Optional sub-file footprint for provenance granularity. */
|
|
111
|
-
readonly footprint?: ToolCallFootprint;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export type RuntimeFailureKind = "validation_error" | "tool_error" | "unknown_error";
|
|
115
|
-
|
|
116
|
-
export interface RuntimeToolCallFailedEvent {
|
|
117
|
-
readonly event: "tool_call_failed";
|
|
118
|
-
readonly sessionId: string;
|
|
119
|
-
readonly traceId: string;
|
|
120
|
-
readonly tool: string;
|
|
121
|
-
readonly latencyMs: number;
|
|
122
|
-
readonly sessionDepth: GovernorDepth;
|
|
123
|
-
readonly argKeys: readonly string[];
|
|
124
|
-
readonly errorKind: RuntimeFailureKind;
|
|
125
|
-
readonly errorName: string;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
type RuntimeEvent =
|
|
129
|
-
| RuntimeSessionStartedEvent
|
|
130
|
-
| RuntimeToolCallStartedEvent
|
|
131
|
-
| RuntimeToolCallCompletedEvent
|
|
132
|
-
| RuntimeToolCallFailedEvent;
|
|
133
|
-
|
|
134
|
-
export interface RuntimeEventLoggerOptions {
|
|
135
|
-
readonly fs: FileSystem;
|
|
136
|
-
readonly codec: JsonCodec;
|
|
137
|
-
readonly logPath: string;
|
|
138
|
-
readonly maxBytes: number;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export async function ensureGraftDirExcluded(
|
|
142
|
-
projectRoot: string,
|
|
143
|
-
graftDir: string,
|
|
144
|
-
fs: FileSystem,
|
|
145
|
-
): Promise<void> {
|
|
146
|
-
const relative = path.relative(projectRoot, graftDir);
|
|
147
|
-
if (relative.length === 0 || relative.startsWith("..") || path.isAbsolute(relative)) {
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const entry = relative.replaceAll(path.sep, "/").replace(/\/?$/, "/");
|
|
152
|
-
const excludePath = path.join(projectRoot, ".git", "info", "exclude");
|
|
153
|
-
|
|
154
|
-
let existing: string;
|
|
155
|
-
try {
|
|
156
|
-
existing = await fs.readFile(excludePath, "utf-8");
|
|
157
|
-
} catch {
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
const entries = existing
|
|
162
|
-
.split(/\r?\n/u)
|
|
163
|
-
.map((line) => line.trim())
|
|
164
|
-
.filter((line) => line.length > 0);
|
|
165
|
-
|
|
166
|
-
if (entries.includes(entry)) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const prefix = existing.length === 0 || existing.endsWith("\n") ? "" : "\n";
|
|
171
|
-
await fs.appendFile(excludePath, `${prefix}${entry}\n`, "utf-8");
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
export function classifyRuntimeFailure(error: unknown): {
|
|
175
|
-
kind: RuntimeFailureKind;
|
|
176
|
-
name: string;
|
|
177
|
-
} {
|
|
178
|
-
if (error instanceof ZodError) {
|
|
179
|
-
return { kind: "validation_error", name: error.name };
|
|
180
|
-
}
|
|
181
|
-
if (error instanceof Error) {
|
|
182
|
-
return { kind: "tool_error", name: error.name };
|
|
183
|
-
}
|
|
184
|
-
return { kind: "unknown_error", name: "UnknownError" };
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
export { sanitizeArgValues } from "./secret-scrub.js";
|
|
188
|
-
|
|
189
|
-
export function sanitizeArgKeys(args: Record<string, unknown>): string[] {
|
|
190
|
-
return Object.keys(args).sort();
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
export class RuntimeEventLogger {
|
|
194
|
-
private readonly logWriter: RotatingNdjsonLog;
|
|
195
|
-
private queue: Promise<void> = Promise.resolve();
|
|
196
|
-
|
|
197
|
-
constructor(options: RuntimeEventLoggerOptions) {
|
|
198
|
-
this.logWriter = new RotatingNdjsonLog({
|
|
199
|
-
fs: options.fs,
|
|
200
|
-
codec: options.codec,
|
|
201
|
-
logPath: options.logPath,
|
|
202
|
-
maxBytes: options.maxBytes,
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
log(event: RuntimeEvent): Promise<void> {
|
|
207
|
-
const prior = this.queue.catch((_error: unknown) => undefined);
|
|
208
|
-
this.queue = prior
|
|
209
|
-
.then(async () => {
|
|
210
|
-
await this.logWriter.append({
|
|
211
|
-
ts: new Date().toISOString(),
|
|
212
|
-
...event,
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
return this.queue;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import * as crypto from "node:crypto";
|
|
2
|
-
import type { AttributionSummary, StagedTarget } from "../contracts/causal-ontology.js";
|
|
3
|
-
import type { RepoObservation } from "./repo-state.js";
|
|
4
|
-
import type { RuntimeCausalContext } from "./runtime-causal-context.js";
|
|
5
|
-
import type { WorkspaceStatus } from "./workspace-router.js";
|
|
6
|
-
|
|
7
|
-
const FULL_FILE_SAFE_STATUSES = new Set(["A", "D", "R", "C", "T"]);
|
|
8
|
-
|
|
9
|
-
export interface RuntimeStagedTargetNone {
|
|
10
|
-
readonly availability: "none";
|
|
11
|
-
readonly stability: "runtime_local";
|
|
12
|
-
readonly provenanceLevel: "artifact_history";
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface RuntimeStagedTargetFullFile {
|
|
16
|
-
readonly availability: "full_file";
|
|
17
|
-
readonly stability: "runtime_local";
|
|
18
|
-
readonly provenanceLevel: "artifact_history";
|
|
19
|
-
readonly attribution: AttributionSummary;
|
|
20
|
-
readonly target: StagedTarget;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface RuntimeStagedTargetAmbiguous {
|
|
24
|
-
readonly availability: "ambiguous";
|
|
25
|
-
readonly stability: "runtime_local";
|
|
26
|
-
readonly provenanceLevel: "artifact_history";
|
|
27
|
-
readonly attribution: AttributionSummary;
|
|
28
|
-
readonly reason:
|
|
29
|
-
| "missing_head_commit"
|
|
30
|
-
| "missing_workspace_overlay"
|
|
31
|
-
| "modified_path_selection_requires_deeper_evidence";
|
|
32
|
-
readonly observedStagedPaths: number;
|
|
33
|
-
readonly ambiguousPaths: readonly string[];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export type RuntimeStagedTarget =
|
|
37
|
-
| RuntimeStagedTargetNone
|
|
38
|
-
| RuntimeStagedTargetFullFile
|
|
39
|
-
| RuntimeStagedTargetAmbiguous;
|
|
40
|
-
|
|
41
|
-
interface MergedStatusEntry {
|
|
42
|
-
readonly path: string;
|
|
43
|
-
readonly stagedStatus: string;
|
|
44
|
-
readonly worktreeStatus: string;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function stableId(prefix: string, input: string): string {
|
|
48
|
-
return `${prefix}:${crypto.createHash("sha256").update(input).digest("hex").slice(0, 16)}`;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function parseMergedStatusLine(line: string): MergedStatusEntry | null {
|
|
52
|
-
if (line.length < 4) return null;
|
|
53
|
-
return {
|
|
54
|
-
stagedStatus: line[0] ?? " ",
|
|
55
|
-
worktreeStatus: line[1] ?? " ",
|
|
56
|
-
path: line.slice(3),
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function stagedEntries(statusLines: readonly string[]): readonly MergedStatusEntry[] {
|
|
61
|
-
return statusLines
|
|
62
|
-
.map(parseMergedStatusLine)
|
|
63
|
-
.filter((entry): entry is MergedStatusEntry => entry !== null && entry.stagedStatus !== " " && entry.stagedStatus !== "?");
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function isFullFileSafe(entry: MergedStatusEntry): boolean {
|
|
67
|
-
return entry.worktreeStatus === " " && FULL_FILE_SAFE_STATUSES.has(entry.stagedStatus);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export function buildRuntimeStagedTarget(
|
|
71
|
-
status: WorkspaceStatus,
|
|
72
|
-
causalContext: RuntimeCausalContext,
|
|
73
|
-
repoState: RepoObservation,
|
|
74
|
-
attribution: AttributionSummary,
|
|
75
|
-
): RuntimeStagedTarget {
|
|
76
|
-
const observedEntries = stagedEntries(repoState.statusLines);
|
|
77
|
-
if (observedEntries.length === 0) {
|
|
78
|
-
return {
|
|
79
|
-
availability: "none",
|
|
80
|
-
stability: "runtime_local",
|
|
81
|
-
provenanceLevel: "artifact_history",
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (repoState.headSha === null) {
|
|
86
|
-
return {
|
|
87
|
-
availability: "ambiguous",
|
|
88
|
-
stability: "runtime_local",
|
|
89
|
-
provenanceLevel: "artifact_history",
|
|
90
|
-
attribution,
|
|
91
|
-
reason: "missing_head_commit",
|
|
92
|
-
observedStagedPaths: observedEntries.length,
|
|
93
|
-
ambiguousPaths: observedEntries.map((entry) => entry.path),
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (repoState.workspaceOverlayId === null || status.repoId === null || status.worktreeId === null) {
|
|
98
|
-
return {
|
|
99
|
-
availability: "ambiguous",
|
|
100
|
-
stability: "runtime_local",
|
|
101
|
-
provenanceLevel: "artifact_history",
|
|
102
|
-
attribution,
|
|
103
|
-
reason: "missing_workspace_overlay",
|
|
104
|
-
observedStagedPaths: observedEntries.length,
|
|
105
|
-
ambiguousPaths: observedEntries.map((entry) => entry.path),
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const ambiguousEntries = observedEntries.filter((entry) => !isFullFileSafe(entry));
|
|
110
|
-
if (ambiguousEntries.length > 0) {
|
|
111
|
-
return {
|
|
112
|
-
availability: "ambiguous",
|
|
113
|
-
stability: "runtime_local",
|
|
114
|
-
provenanceLevel: "artifact_history",
|
|
115
|
-
attribution,
|
|
116
|
-
reason: "modified_path_selection_requires_deeper_evidence",
|
|
117
|
-
observedStagedPaths: observedEntries.length,
|
|
118
|
-
ambiguousPaths: ambiguousEntries.map((entry) => entry.path),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const selectionEntries = observedEntries.map((entry) => ({
|
|
123
|
-
path: entry.path,
|
|
124
|
-
symbols: [],
|
|
125
|
-
regions: [],
|
|
126
|
-
}));
|
|
127
|
-
|
|
128
|
-
const target: StagedTarget = {
|
|
129
|
-
targetId: stableId(
|
|
130
|
-
"target",
|
|
131
|
-
JSON.stringify({
|
|
132
|
-
repoId: status.repoId,
|
|
133
|
-
worktreeId: status.worktreeId,
|
|
134
|
-
checkoutEpochId: causalContext.checkoutEpochId,
|
|
135
|
-
workspaceOverlayId: repoState.workspaceOverlayId,
|
|
136
|
-
headSha: repoState.headSha,
|
|
137
|
-
paths: selectionEntries.map((entry) => entry.path),
|
|
138
|
-
}),
|
|
139
|
-
),
|
|
140
|
-
targetKind: "staged_target",
|
|
141
|
-
repoId: status.repoId,
|
|
142
|
-
worktreeId: status.worktreeId,
|
|
143
|
-
checkoutEpochId: causalContext.checkoutEpochId,
|
|
144
|
-
workspaceOverlayId: repoState.workspaceOverlayId,
|
|
145
|
-
selectedAt: repoState.observedAt,
|
|
146
|
-
selectionKind: "full_file",
|
|
147
|
-
selectionEntries,
|
|
148
|
-
base: {
|
|
149
|
-
headCommitSha: repoState.headSha,
|
|
150
|
-
indexTreeSha: null,
|
|
151
|
-
},
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
return {
|
|
155
|
-
availability: "full_file",
|
|
156
|
-
stability: "runtime_local",
|
|
157
|
-
provenanceLevel: "artifact_history",
|
|
158
|
-
attribution,
|
|
159
|
-
target,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import type { FileSystem } from "../ports/filesystem.js";
|
|
3
|
-
import type { GitClient } from "../ports/git.js";
|
|
4
|
-
import {
|
|
5
|
-
isRecognizedTargetGitHook,
|
|
6
|
-
isTargetGitTransitionHookName,
|
|
7
|
-
resolveGitHooksPath,
|
|
8
|
-
TARGET_GIT_TRANSITION_HOOKS,
|
|
9
|
-
} from "../git/target-git-hook-bootstrap.js";
|
|
10
|
-
import type {
|
|
11
|
-
RepoTransition,
|
|
12
|
-
WorkspaceOverlaySummary,
|
|
13
|
-
} from "./repo-state.js";
|
|
14
|
-
|
|
15
|
-
export type GitHookBootstrapPosture = "absent" | "external_unknown" | "installed";
|
|
16
|
-
export type WorkspaceOverlayObservationMode =
|
|
17
|
-
| "inferred_between_tool_calls"
|
|
18
|
-
| "hook_observed_checkout_boundaries";
|
|
19
|
-
export type WorkspaceOverlayLineagePosture =
|
|
20
|
-
| "stable"
|
|
21
|
-
| "forked_after_transition";
|
|
22
|
-
export type WorkspaceOverlayBoundaryAuthority =
|
|
23
|
-
| "none"
|
|
24
|
-
| "repo_snapshot"
|
|
25
|
-
| "hook_observed";
|
|
26
|
-
export type WorkspaceOverlayDegradedReason =
|
|
27
|
-
| "target_repo_hooks_absent"
|
|
28
|
-
| "target_repo_hooks_unrecognized"
|
|
29
|
-
| "local_edit_watchers_absent";
|
|
30
|
-
|
|
31
|
-
export interface GitTransitionHookEvent {
|
|
32
|
-
readonly hookName: (typeof TARGET_GIT_TRANSITION_HOOKS)[number];
|
|
33
|
-
readonly hookArgs: readonly string[];
|
|
34
|
-
readonly worktreeRoot: string;
|
|
35
|
-
readonly observedAt: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface GitHookBootstrapStatus {
|
|
39
|
-
readonly posture: GitHookBootstrapPosture;
|
|
40
|
-
readonly configuredCoreHooksPath: string | null;
|
|
41
|
-
readonly resolvedHooksPath: string;
|
|
42
|
-
readonly requiredHooks: readonly string[];
|
|
43
|
-
readonly presentHooks: readonly string[];
|
|
44
|
-
readonly missingHooks: readonly string[];
|
|
45
|
-
readonly supportsCheckoutBoundaries: boolean;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export interface RuntimeWorkspaceOverlayFooting {
|
|
49
|
-
readonly observationMode: WorkspaceOverlayObservationMode;
|
|
50
|
-
readonly lineagePosture: WorkspaceOverlayLineagePosture;
|
|
51
|
-
readonly boundaryAuthority: WorkspaceOverlayBoundaryAuthority;
|
|
52
|
-
readonly degraded: true;
|
|
53
|
-
readonly degradedReason: WorkspaceOverlayDegradedReason;
|
|
54
|
-
readonly checkoutEpoch: number;
|
|
55
|
-
readonly lastTransition: RepoTransition | null;
|
|
56
|
-
readonly workspaceOverlayId: string | null;
|
|
57
|
-
readonly workspaceOverlay: WorkspaceOverlaySummary | null;
|
|
58
|
-
readonly hookBootstrap: GitHookBootstrapStatus;
|
|
59
|
-
readonly latestHookEvent: GitTransitionHookEvent | null;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async function readGitConfig(
|
|
63
|
-
gitClient: GitClient,
|
|
64
|
-
cwd: string,
|
|
65
|
-
key: string,
|
|
66
|
-
): Promise<string | null> {
|
|
67
|
-
const result = await gitClient.run({
|
|
68
|
-
args: ["config", "--get", key],
|
|
69
|
-
cwd,
|
|
70
|
-
});
|
|
71
|
-
if (result.status !== 0) {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
const value = result.stdout.trim();
|
|
75
|
-
return value.length > 0 ? value : null;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async function fileExists(fs: FileSystem, targetPath: string): Promise<boolean> {
|
|
79
|
-
try {
|
|
80
|
-
await fs.readFile(targetPath, "utf-8");
|
|
81
|
-
return true;
|
|
82
|
-
} catch {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function equivalentWorktreeRoots(left: string, right: string): boolean {
|
|
88
|
-
const leftResolved = path.resolve(left);
|
|
89
|
-
const rightResolved = path.resolve(right);
|
|
90
|
-
if (leftResolved === rightResolved) {
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
return (
|
|
94
|
-
leftResolved === `/private${rightResolved}`
|
|
95
|
-
|| rightResolved === `/private${leftResolved}`
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function parseHookEventLine(
|
|
100
|
-
line: string,
|
|
101
|
-
worktreeRoot: string,
|
|
102
|
-
): GitTransitionHookEvent | null {
|
|
103
|
-
try {
|
|
104
|
-
const parsed = JSON.parse(line) as Record<string, unknown>;
|
|
105
|
-
const hookName = parsed["hookName"];
|
|
106
|
-
const hookArgs = parsed["hookArgs"];
|
|
107
|
-
const observedAt = parsed["observedAt"];
|
|
108
|
-
const observedWorktreeRoot = parsed["worktreeRoot"];
|
|
109
|
-
if (
|
|
110
|
-
typeof hookName !== "string"
|
|
111
|
-
|| !isTargetGitTransitionHookName(hookName)
|
|
112
|
-
|| !Array.isArray(hookArgs)
|
|
113
|
-
|| !hookArgs.every((value) => typeof value === "string")
|
|
114
|
-
|| typeof observedAt !== "string"
|
|
115
|
-
|| typeof observedWorktreeRoot !== "string"
|
|
116
|
-
|| !equivalentWorktreeRoots(observedWorktreeRoot, worktreeRoot)
|
|
117
|
-
) {
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
hookName,
|
|
122
|
-
hookArgs,
|
|
123
|
-
worktreeRoot: observedWorktreeRoot,
|
|
124
|
-
observedAt,
|
|
125
|
-
};
|
|
126
|
-
} catch {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
async function readLatestHookEvent(
|
|
132
|
-
fs: FileSystem,
|
|
133
|
-
worktreeRoot: string,
|
|
134
|
-
): Promise<GitTransitionHookEvent | null> {
|
|
135
|
-
const logPath = path.join(worktreeRoot, ".graft", "runtime", "git-transitions.ndjson");
|
|
136
|
-
try {
|
|
137
|
-
const content = await fs.readFile(logPath, "utf-8");
|
|
138
|
-
const lines = content.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0);
|
|
139
|
-
for (let index = lines.length - 1; index >= 0; index -= 1) {
|
|
140
|
-
const line = lines[index];
|
|
141
|
-
if (line === undefined) continue;
|
|
142
|
-
const parsed = parseHookEventLine(line, worktreeRoot);
|
|
143
|
-
if (parsed !== null) {
|
|
144
|
-
return parsed;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return null;
|
|
148
|
-
} catch {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export async function inspectGitHookBootstrap(
|
|
154
|
-
fs: FileSystem,
|
|
155
|
-
gitClient: GitClient,
|
|
156
|
-
worktreeRoot: string,
|
|
157
|
-
gitCommonDir: string,
|
|
158
|
-
): Promise<GitHookBootstrapStatus> {
|
|
159
|
-
const configuredCoreHooksPath = await readGitConfig(
|
|
160
|
-
gitClient,
|
|
161
|
-
worktreeRoot,
|
|
162
|
-
"core.hooksPath",
|
|
163
|
-
);
|
|
164
|
-
const resolvedHooksPath = resolveGitHooksPath(
|
|
165
|
-
worktreeRoot,
|
|
166
|
-
gitCommonDir,
|
|
167
|
-
configuredCoreHooksPath,
|
|
168
|
-
);
|
|
169
|
-
|
|
170
|
-
const presentHooks: string[] = [];
|
|
171
|
-
const missingHooks: string[] = [];
|
|
172
|
-
let recognizedHooks = 0;
|
|
173
|
-
let externalHooks = 0;
|
|
174
|
-
for (const hookName of TARGET_GIT_TRANSITION_HOOKS) {
|
|
175
|
-
const hookPath = path.join(resolvedHooksPath, hookName);
|
|
176
|
-
if (await fileExists(fs, hookPath)) {
|
|
177
|
-
presentHooks.push(hookName);
|
|
178
|
-
try {
|
|
179
|
-
const content = await fs.readFile(hookPath, "utf-8");
|
|
180
|
-
if (isRecognizedTargetGitHook(content, hookName)) {
|
|
181
|
-
recognizedHooks += 1;
|
|
182
|
-
} else {
|
|
183
|
-
externalHooks += 1;
|
|
184
|
-
}
|
|
185
|
-
} catch {
|
|
186
|
-
externalHooks += 1;
|
|
187
|
-
}
|
|
188
|
-
} else {
|
|
189
|
-
missingHooks.push(hookName);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const allHooksInstalled = recognizedHooks === TARGET_GIT_TRANSITION_HOOKS.length;
|
|
194
|
-
return {
|
|
195
|
-
posture: allHooksInstalled
|
|
196
|
-
? "installed"
|
|
197
|
-
: (presentHooks.length === 0 ? "absent" : "external_unknown"),
|
|
198
|
-
configuredCoreHooksPath,
|
|
199
|
-
resolvedHooksPath,
|
|
200
|
-
requiredHooks: [...TARGET_GIT_TRANSITION_HOOKS],
|
|
201
|
-
presentHooks,
|
|
202
|
-
missingHooks,
|
|
203
|
-
supportsCheckoutBoundaries: allHooksInstalled && externalHooks === 0,
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
export async function buildRuntimeWorkspaceOverlayFooting(
|
|
208
|
-
fs: FileSystem,
|
|
209
|
-
gitClient: GitClient,
|
|
210
|
-
worktreeRoot: string,
|
|
211
|
-
gitCommonDir: string,
|
|
212
|
-
repoState: {
|
|
213
|
-
readonly checkoutEpoch: number;
|
|
214
|
-
readonly lastTransition: RepoTransition | null;
|
|
215
|
-
readonly workspaceOverlayId: string | null;
|
|
216
|
-
readonly workspaceOverlay: WorkspaceOverlaySummary | null;
|
|
217
|
-
},
|
|
218
|
-
): Promise<RuntimeWorkspaceOverlayFooting> {
|
|
219
|
-
const hookBootstrap = await inspectGitHookBootstrap(
|
|
220
|
-
fs,
|
|
221
|
-
gitClient,
|
|
222
|
-
worktreeRoot,
|
|
223
|
-
gitCommonDir,
|
|
224
|
-
);
|
|
225
|
-
const latestHookEvent = hookBootstrap.supportsCheckoutBoundaries
|
|
226
|
-
? await readLatestHookEvent(fs, worktreeRoot)
|
|
227
|
-
: null;
|
|
228
|
-
const lineagePosture = repoState.checkoutEpoch > 0 || latestHookEvent !== null || repoState.lastTransition !== null
|
|
229
|
-
? "forked_after_transition"
|
|
230
|
-
: "stable";
|
|
231
|
-
const boundaryAuthority = latestHookEvent !== null
|
|
232
|
-
? "hook_observed"
|
|
233
|
-
: (repoState.lastTransition !== null || repoState.checkoutEpoch > 0
|
|
234
|
-
? "repo_snapshot"
|
|
235
|
-
: "none");
|
|
236
|
-
return {
|
|
237
|
-
observationMode: latestHookEvent === null
|
|
238
|
-
? "inferred_between_tool_calls"
|
|
239
|
-
: "hook_observed_checkout_boundaries",
|
|
240
|
-
lineagePosture,
|
|
241
|
-
boundaryAuthority,
|
|
242
|
-
degraded: true,
|
|
243
|
-
degradedReason: hookBootstrap.supportsCheckoutBoundaries
|
|
244
|
-
? "local_edit_watchers_absent"
|
|
245
|
-
: (hookBootstrap.posture === "absent"
|
|
246
|
-
? "target_repo_hooks_absent"
|
|
247
|
-
: "target_repo_hooks_unrecognized"),
|
|
248
|
-
checkoutEpoch: repoState.checkoutEpoch,
|
|
249
|
-
lastTransition: repoState.lastTransition,
|
|
250
|
-
workspaceOverlayId: repoState.workspaceOverlayId,
|
|
251
|
-
workspaceOverlay: repoState.workspaceOverlay,
|
|
252
|
-
hookBootstrap,
|
|
253
|
-
latestHookEvent,
|
|
254
|
-
};
|
|
255
|
-
}
|