@flyingrobots/graft 0.7.0 → 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 +13 -0
- package/README.md +0 -1
- package/bin/graft.js +26 -26
- package/dist/cli/init-client-config.d.ts.map +1 -1
- package/dist/cli/init-client-config.js +40 -4
- package/dist/cli/init-client-config.js.map +1 -1
- package/dist/cli/init-model.js +2 -2
- package/dist/cli/init-model.js.map +1 -1
- package/dist/cli/json-document.d.ts +1 -0
- package/dist/cli/json-document.d.ts.map +1 -1
- package/dist/cli/json-document.js +3 -0
- package/dist/cli/json-document.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/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/version.d.ts.map +1 -1
- package/dist/version.js +3 -1
- package/dist/version.js.map +1 -1
- package/docs/SETUP.md +11 -7
- package/package.json +9 -4
- package/src/adapters/canonical-json.ts +0 -56
- package/src/adapters/json-text-decoder.ts +0 -11
- package/src/adapters/node-fs.ts +0 -43
- package/src/adapters/node-git.ts +0 -47
- package/src/adapters/node-paths.ts +0 -35
- package/src/adapters/node-process-runner.ts +0 -27
- package/src/adapters/repo-paths.ts +0 -63
- 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 -22
- package/src/cli/activity-render.ts +0 -112
- package/src/cli/cli-error.ts +0 -192
- package/src/cli/command-parser.ts +0 -484
- package/src/cli/daemon-status-model.ts +0 -238
- package/src/cli/daemon-status-render.ts +0 -102
- package/src/cli/daemon-status.ts +0 -100
- package/src/cli/entrypoint.ts +0 -18
- package/src/cli/git-graft-enhance-model.ts +0 -131
- package/src/cli/git-graft-enhance-render.ts +0 -33
- package/src/cli/git-graft-enhance.ts +0 -54
- package/src/cli/index-cmd.ts +0 -90
- package/src/cli/index-model.ts +0 -75
- package/src/cli/init-bootstrap.ts +0 -47
- package/src/cli/init-client-config.ts +0 -428
- package/src/cli/init-model.ts +0 -284
- package/src/cli/init-render.ts +0 -54
- package/src/cli/init-target-hooks.ts +0 -93
- package/src/cli/init.ts +0 -124
- package/src/cli/json-document.ts +0 -155
- 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 -197
- package/src/cli/migrate-local-history.ts +0 -119
- package/src/cli/peer-command.ts +0 -60
- package/src/contracts/capabilities.ts +0 -540
- 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 -18
- package/src/contracts/mcp-runtime.ts +0 -16
- package/src/contracts/output-schema-cli.ts +0 -103
- package/src/contracts/output-schema-fragments.ts +0 -881
- package/src/contracts/output-schema-mcp.ts +0 -501
- package/src/contracts/output-schema-meta.ts +0 -119
- package/src/contracts/output-schemas.ts +0 -1524
- package/src/git/diff.ts +0 -161
- 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 -132
- package/src/mcp/cache.ts +0 -7
- package/src/mcp/cached-file.ts +0 -1
- package/src/mcp/context.ts +0 -150
- 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 -172
- package/src/mcp/daemon-session-host.ts +0 -234
- package/src/mcp/daemon-stdio-bridge.ts +0 -262
- 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 -153
- package/src/mcp/monitor-types.ts +0 -103
- package/src/mcp/persisted-local-history-graph.ts +0 -592
- 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 -482
- 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 -215
- 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 -236
- package/src/mcp/server-invocation.ts +0 -388
- package/src/mcp/server-tool-access.ts +0 -148
- package/src/mcp/server.ts +0 -270
- package/src/mcp/stdio-server.ts +0 -26
- package/src/mcp/stdio.ts +0 -3
- package/src/mcp/tool-registry.ts +0 -98
- 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 -192
- package/src/mcp/tools/code-refs.ts +0 -470
- package/src/mcp/tools/code-show.ts +0 -289
- 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 -97
- package/src/mcp/tools/doctor.ts +0 -83
- package/src/mcp/tools/explain.ts +0 -84
- package/src/mcp/tools/export-surface-diff.ts +0 -26
- 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/graft-edit.ts +0 -276
- package/src/mcp/tools/knowledge-map.ts +0 -34
- package/src/mcp/tools/map-collector.ts +0 -338
- package/src/mcp/tools/map.ts +0 -185
- package/src/mcp/tools/monitor-nudge.ts +0 -19
- 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 -101
- package/src/mcp/tools/precision.ts +0 -21
- package/src/mcp/tools/read-range.ts +0 -28
- package/src/mcp/tools/refactor-difficulty.ts +0 -42
- 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/structural-blame.ts +0 -55
- package/src/mcp/tools/structural-churn.ts +0 -28
- package/src/mcp/tools/structural-log.ts +0 -41
- package/src/mcp/tools/structural-review.ts +0 -63
- 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 -246
- package/src/mcp/workspace-router.ts +0 -688
- package/src/metrics/logger.ts +0 -40
- package/src/metrics/types.ts +0 -40
- package/src/operations/adaptive-projection.ts +0 -54
- package/src/operations/agent-handoff.ts +0 -59
- package/src/operations/cached-file.ts +0 -40
- package/src/operations/capture-range.ts +0 -64
- package/src/operations/conversation-primer.ts +0 -82
- package/src/operations/cross-session-resume.ts +0 -104
- package/src/operations/deterministic-replay.ts +0 -143
- package/src/operations/diff-identity.ts +0 -127
- package/src/operations/export-surface-diff.ts +0 -355
- package/src/operations/file-outline.ts +0 -48
- package/src/operations/footprint-parallelism.ts +0 -98
- package/src/operations/graft-diff.ts +0 -169
- package/src/operations/horizon-of-readability.ts +0 -60
- package/src/operations/import-reference-impact.ts +0 -143
- package/src/operations/knowledge-map.ts +0 -96
- package/src/operations/observation-cache.ts +0 -165
- package/src/operations/projection-safety.ts +0 -111
- 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/semantic-drift.ts +0 -70
- package/src/operations/session-filtration.ts +0 -76
- package/src/operations/session-replay.ts +0 -73
- package/src/operations/sludge-detector.ts +0 -356
- package/src/operations/state.ts +0 -66
- package/src/operations/structural-blame.ts +0 -197
- package/src/operations/structural-review.ts +0 -317
- 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/operations/teaching-hints.ts +0 -52
- package/src/parser/diff.ts +0 -320
- 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/paths.ts +0 -22
- package/src/ports/process-runner.ts +0 -22
- 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/ast-emitter.ts +0 -133
- package/src/warp/ast-import-resolver.ts +0 -333
- package/src/warp/commit-meta.ts +0 -19
- package/src/warp/context.ts +0 -48
- package/src/warp/dead-symbols.ts +0 -174
- package/src/warp/drift-sentinel.ts +0 -101
- package/src/warp/index-head.ts +0 -348
- package/src/warp/observers.ts +0 -101
- package/src/warp/open.ts +0 -67
- package/src/warp/outline-diff-trailer.ts +0 -100
- package/src/warp/plumbing.d.ts +0 -24
- package/src/warp/refactor-difficulty.ts +0 -257
- package/src/warp/references.ts +0 -77
- package/src/warp/stale-docs.ts +0 -210
- package/src/warp/structural-drift-detection.ts +0 -97
- package/src/warp/structural-queries.ts +0 -258
- package/src/warp/symbol-timeline.ts +0 -209
- package/src/warp/traverse-hydrate.ts +0 -61
- package/src/warp/warp-reference-count.ts +0 -47
- package/src/warp/warp-structural-blame.ts +0 -65
- package/src/warp/warp-structural-churn.ts +0 -309
- package/src/warp/warp-structural-log.ts +0 -149
- package/src/warp/writer-id.ts +0 -30
package/src/cli/main.ts
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CAPABILITY_REGISTRY,
|
|
3
|
-
cliCommandKey,
|
|
4
|
-
cliCommandPath,
|
|
5
|
-
} from "../contracts/capabilities.js";
|
|
6
|
-
import {
|
|
7
|
-
cliCommandMcpTool,
|
|
8
|
-
} from "../contracts/output-schemas.js";
|
|
9
|
-
import { startDaemonServer, type GraftDaemonServer } from "../mcp/daemon-server.js";
|
|
10
|
-
import { startDaemonBackedStdioBridge, type StartDaemonBackedStdioBridgeOptions } from "../mcp/daemon-stdio-bridge.js";
|
|
11
|
-
import { startStdioServer } from "../mcp/stdio-server.js";
|
|
12
|
-
import {
|
|
13
|
-
parseCommand,
|
|
14
|
-
parseDaemonCommand,
|
|
15
|
-
parseGlobalOptions,
|
|
16
|
-
parseServeCommand,
|
|
17
|
-
} from "./command-parser.js";
|
|
18
|
-
import { describeCliFailure, writeCliError } from "./cli-error.js";
|
|
19
|
-
import { readDaemonStatusSnapshot, type ReadDaemonStatusOptions } from "./daemon-status.js";
|
|
20
|
-
import { buildDaemonStatusModel, type DaemonStatusReadSnapshot } from "./daemon-status-model.js";
|
|
21
|
-
import { renderDaemonStatus } from "./daemon-status-render.js";
|
|
22
|
-
import { runGitGraftEnhance, type GitGraftEnhancePeerInvoker } from "./git-graft-enhance.js";
|
|
23
|
-
import { runIndex } from "./index-cmd.js";
|
|
24
|
-
import { runInit } from "./init.js";
|
|
25
|
-
import { runLocalHistoryDag } from "./local-history-dag.js";
|
|
26
|
-
import { runMigrateLocalHistory } from "./migrate-local-history.js";
|
|
27
|
-
import { emitPeerCommand, invokePeerCommand, writeLine, type Writer } from "./peer-command.js";
|
|
28
|
-
|
|
29
|
-
export { resolveEntrypointArgs } from "./command-parser.js";
|
|
30
|
-
|
|
31
|
-
export interface RunCliOptions {
|
|
32
|
-
cwd?: string | undefined;
|
|
33
|
-
args?: readonly string[] | undefined;
|
|
34
|
-
stdout?: Writer | undefined;
|
|
35
|
-
stderr?: Writer | undefined;
|
|
36
|
-
startServer?: ((cwd: string) => Promise<void>) | undefined;
|
|
37
|
-
startDaemonBridge?: ((options: StartDaemonBackedStdioBridgeOptions) => Promise<void>) | undefined;
|
|
38
|
-
startDaemon?: ((options: { socketPath?: string | undefined }) => Promise<GraftDaemonServer>) | undefined;
|
|
39
|
-
readDaemonStatus?: ((options: ReadDaemonStatusOptions) => Promise<DaemonStatusReadSnapshot>) | undefined;
|
|
40
|
-
invokeGitGraftEnhancePeer?: GitGraftEnhancePeerInvoker | undefined;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function renderHelp(writer: Writer): void {
|
|
44
|
-
writeLine(writer, "graft CLI");
|
|
45
|
-
writeLine(writer);
|
|
46
|
-
writeLine(writer, "No args prints help.");
|
|
47
|
-
writeLine(writer);
|
|
48
|
-
writeLine(writer, "Global options:");
|
|
49
|
-
writeLine(writer, " --cwd <path> Run a command against another repo root");
|
|
50
|
-
writeLine(writer, " help Show this help");
|
|
51
|
-
writeLine(writer, " serve Start the repo-local MCP stdio server");
|
|
52
|
-
writeLine(writer, " serve --runtime daemon");
|
|
53
|
-
writeLine(writer, " Start stdio bridge to the local graft daemon");
|
|
54
|
-
writeLine(writer, " daemon Start the local MCP daemon");
|
|
55
|
-
writeLine(writer, " daemon status Show read-only daemon status");
|
|
56
|
-
writeLine(writer);
|
|
57
|
-
|
|
58
|
-
const grouped = new Map<string, { path: readonly string[]; description: string }[]>();
|
|
59
|
-
for (const capability of CAPABILITY_REGISTRY) {
|
|
60
|
-
if (capability.cliPath === undefined) continue;
|
|
61
|
-
const section = capability.cliPath.length > 1 ? capability.cliPath[0] : "project";
|
|
62
|
-
const bucket = grouped.get(section) ?? [];
|
|
63
|
-
bucket.push({ path: capability.cliPath, description: capability.description });
|
|
64
|
-
grouped.set(section, bucket);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
for (const section of ["project", "migrate", "read", "struct", "symbol", "diag"]) {
|
|
68
|
-
const entries = grouped.get(section);
|
|
69
|
-
if (entries === undefined) continue;
|
|
70
|
-
writeLine(writer, `${section}:`);
|
|
71
|
-
for (const entry of entries) {
|
|
72
|
-
writeLine(writer, ` ${entry.path.join(" ")} ${entry.description}`);
|
|
73
|
-
}
|
|
74
|
-
writeLine(writer);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export async function runCli(options: RunCliOptions = {}): Promise<void> {
|
|
79
|
-
const stdout = options.stdout ?? process.stdout;
|
|
80
|
-
const stderr = options.stderr ?? process.stderr;
|
|
81
|
-
const baseCwd = options.cwd ?? process.cwd();
|
|
82
|
-
let cwd: string;
|
|
83
|
-
let argv: string[];
|
|
84
|
-
try {
|
|
85
|
-
({ cwd, argv } = parseGlobalOptions(baseCwd, options.args ?? process.argv.slice(2)));
|
|
86
|
-
} catch (err: unknown) {
|
|
87
|
-
process.exitCode = 1;
|
|
88
|
-
writeCliError(stderr, err instanceof Error ? err.message : String(err), {
|
|
89
|
-
usage: "graft [--cwd <path>] <command> ...",
|
|
90
|
-
nextSteps: ["Run `graft help` to see the grouped command surface."],
|
|
91
|
-
});
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (argv.length === 0 || argv[0] === "help" || argv[0] === "--help") {
|
|
96
|
-
renderHelp(stdout);
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (argv[0] === "init") {
|
|
101
|
-
runInit({ cwd, args: argv.slice(1), stdout, stderr });
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (argv[0] === "index") {
|
|
106
|
-
await runIndex({ cwd, args: argv.slice(1), stdout, stderr });
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (argv[0] === "serve") {
|
|
111
|
-
try {
|
|
112
|
-
const parsedServe = parseServeCommand(cwd, argv.slice(1));
|
|
113
|
-
if (parsedServe.runtime === "daemon") {
|
|
114
|
-
await (options.startDaemonBridge ?? startDaemonBackedStdioBridge)({
|
|
115
|
-
...(parsedServe.socketPath !== undefined ? { socketPath: parsedServe.socketPath } : {}),
|
|
116
|
-
...(parsedServe.spawnIfMissing !== undefined ? { spawnIfMissing: parsedServe.spawnIfMissing } : {}),
|
|
117
|
-
});
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
await (options.startServer ?? startStdioServer)(cwd);
|
|
121
|
-
} catch (err: unknown) {
|
|
122
|
-
process.exitCode = 1;
|
|
123
|
-
writeCliError(stderr, err instanceof Error ? err.message : String(err), describeCliFailure(argv));
|
|
124
|
-
}
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
if (argv[0] === "daemon") {
|
|
129
|
-
try {
|
|
130
|
-
const parsedDaemon = parseDaemonCommand(cwd, argv.slice(1));
|
|
131
|
-
if (parsedDaemon.action === "status") {
|
|
132
|
-
const snapshot = await (options.readDaemonStatus ?? readDaemonStatusSnapshot)({
|
|
133
|
-
cwd,
|
|
134
|
-
...(parsedDaemon.socketPath !== undefined ? { socketPath: parsedDaemon.socketPath } : {}),
|
|
135
|
-
});
|
|
136
|
-
writeLine(stdout, renderDaemonStatus(buildDaemonStatusModel({ cwd, snapshot })));
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
const daemon = await (options.startDaemon ?? startDaemonServer)(
|
|
140
|
-
parsedDaemon.socketPath === undefined ? {} : { socketPath: parsedDaemon.socketPath },
|
|
141
|
-
);
|
|
142
|
-
writeLine(stdout, `Daemon listening on ${daemon.socketPath}`);
|
|
143
|
-
} catch (err: unknown) {
|
|
144
|
-
process.exitCode = 1;
|
|
145
|
-
writeCliError(stderr, err instanceof Error ? err.message : String(err), describeCliFailure(argv));
|
|
146
|
-
}
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
try {
|
|
151
|
-
const parsed = parseCommand([...argv]);
|
|
152
|
-
if (parsed.command === "migrate_local_history") {
|
|
153
|
-
await runMigrateLocalHistory({
|
|
154
|
-
cwd,
|
|
155
|
-
json: parsed.json,
|
|
156
|
-
stdout,
|
|
157
|
-
stderr,
|
|
158
|
-
});
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (parsed.command === "diag_local_history_dag") {
|
|
162
|
-
await runLocalHistoryDag({
|
|
163
|
-
cwd,
|
|
164
|
-
limit: typeof parsed.args["limit"] === "number" ? parsed.args["limit"] : 12,
|
|
165
|
-
json: parsed.json,
|
|
166
|
-
stdout,
|
|
167
|
-
stderr,
|
|
168
|
-
});
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
if (parsed.command === "git_graft_enhance") {
|
|
172
|
-
const since = parsed.args["since"];
|
|
173
|
-
const head = parsed.args["head"];
|
|
174
|
-
if (typeof since !== "string") {
|
|
175
|
-
throw new Error("Missing --since");
|
|
176
|
-
}
|
|
177
|
-
await runGitGraftEnhance({
|
|
178
|
-
cwd,
|
|
179
|
-
since,
|
|
180
|
-
...(typeof head === "string" ? { head } : {}),
|
|
181
|
-
json: parsed.json,
|
|
182
|
-
stdout,
|
|
183
|
-
invokePeer: options.invokeGitGraftEnhancePeer,
|
|
184
|
-
});
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
const tool = cliCommandMcpTool(parsed.command);
|
|
188
|
-
if (tool === null) {
|
|
189
|
-
throw new Error(`Command ${cliCommandKey(cliCommandPath(parsed.command))} has no MCP peer`);
|
|
190
|
-
}
|
|
191
|
-
const result = await invokePeerCommand(cwd, tool, parsed.args);
|
|
192
|
-
emitPeerCommand(parsed.command, result, parsed.json, stdout);
|
|
193
|
-
} catch (err: unknown) {
|
|
194
|
-
process.exitCode = 1;
|
|
195
|
-
writeCliError(stderr, err instanceof Error ? err.message : String(err), describeCliFailure(argv));
|
|
196
|
-
}
|
|
197
|
-
}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { CanonicalJsonCodec } from "../adapters/canonical-json.js";
|
|
3
|
-
import { nodeFs } from "../adapters/node-fs.js";
|
|
4
|
-
import { attachCliSchemaMeta, validateCliOutput } from "../contracts/output-schemas.js";
|
|
5
|
-
import { migrateLegacyPersistedLocalHistoryToGraph } from "../mcp/persisted-local-history.js";
|
|
6
|
-
import { openWarp } from "../warp/open.js";
|
|
7
|
-
|
|
8
|
-
const codec = new CanonicalJsonCodec();
|
|
9
|
-
|
|
10
|
-
interface Writer {
|
|
11
|
-
write(chunk: string): unknown;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface RunMigrateLocalHistoryOptions {
|
|
15
|
-
readonly cwd: string;
|
|
16
|
-
readonly json: boolean;
|
|
17
|
-
readonly stdout?: Writer | undefined;
|
|
18
|
-
readonly stderr?: Writer | undefined;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
interface MigrateLocalHistoryPayload {
|
|
22
|
-
readonly cwd: string;
|
|
23
|
-
readonly graftDir: string;
|
|
24
|
-
readonly discoveredArtifacts: number;
|
|
25
|
-
readonly migratedArtifacts: number;
|
|
26
|
-
readonly malformedArtifacts: number;
|
|
27
|
-
readonly importedContinuityRecords: number;
|
|
28
|
-
readonly importedReadEvents: number;
|
|
29
|
-
readonly importedStageEvents: number;
|
|
30
|
-
readonly importedTransitionEvents: number;
|
|
31
|
-
readonly skippedContinuityRecords: number;
|
|
32
|
-
readonly skippedReadEvents: number;
|
|
33
|
-
readonly skippedStageEvents: number;
|
|
34
|
-
readonly skippedTransitionEvents: number;
|
|
35
|
-
readonly error?: string | undefined;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function writeLine(writer: Writer, line = ""): void {
|
|
39
|
-
writer.write(`${line}\n`);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function emitJson(payload: MigrateLocalHistoryPayload, writer: Writer): void {
|
|
43
|
-
writer.write(
|
|
44
|
-
`${codec.encode(validateCliOutput("migrate_local_history", attachCliSchemaMeta("migrate_local_history", payload)))}\n`,
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function renderHuman(payload: MigrateLocalHistoryPayload): string {
|
|
49
|
-
return [
|
|
50
|
-
"Local History Migration",
|
|
51
|
-
`cwd: ${payload.cwd}`,
|
|
52
|
-
`graftDir: ${payload.graftDir}`,
|
|
53
|
-
`legacy artifacts discovered: ${String(payload.discoveredArtifacts)}`,
|
|
54
|
-
`legacy artifacts migrated: ${String(payload.migratedArtifacts)}`,
|
|
55
|
-
`malformed artifacts: ${String(payload.malformedArtifacts)}`,
|
|
56
|
-
`continuity records imported: ${String(payload.importedContinuityRecords)}`,
|
|
57
|
-
`read events imported: ${String(payload.importedReadEvents)}`,
|
|
58
|
-
`stage events imported: ${String(payload.importedStageEvents)}`,
|
|
59
|
-
`transition events imported: ${String(payload.importedTransitionEvents)}`,
|
|
60
|
-
`continuity records skipped: ${String(payload.skippedContinuityRecords)}`,
|
|
61
|
-
`read events skipped: ${String(payload.skippedReadEvents)}`,
|
|
62
|
-
`stage events skipped: ${String(payload.skippedStageEvents)}`,
|
|
63
|
-
`transition events skipped: ${String(payload.skippedTransitionEvents)}`,
|
|
64
|
-
].join("\n");
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export async function runMigrateLocalHistory(options: RunMigrateLocalHistoryOptions): Promise<void> {
|
|
68
|
-
const stdout = options.stdout ?? process.stdout;
|
|
69
|
-
const stderr = options.stderr ?? process.stderr;
|
|
70
|
-
const graftDir = path.join(options.cwd, ".graft");
|
|
71
|
-
|
|
72
|
-
try {
|
|
73
|
-
const app = await openWarp({ cwd: options.cwd });
|
|
74
|
-
const warpCtx = { app, strandId: null };
|
|
75
|
-
const payload: MigrateLocalHistoryPayload = {
|
|
76
|
-
cwd: options.cwd,
|
|
77
|
-
...await migrateLegacyPersistedLocalHistoryToGraph({
|
|
78
|
-
fs: nodeFs,
|
|
79
|
-
codec,
|
|
80
|
-
graftDir,
|
|
81
|
-
graph: {
|
|
82
|
-
warp: warpCtx,
|
|
83
|
-
worktreeRoot: options.cwd,
|
|
84
|
-
},
|
|
85
|
-
}),
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
if (options.json) {
|
|
89
|
-
emitJson(payload, stdout);
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
writeLine(stdout, renderHuman(payload));
|
|
94
|
-
} catch (error: unknown) {
|
|
95
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
96
|
-
process.exitCode = 1;
|
|
97
|
-
const payload: MigrateLocalHistoryPayload = {
|
|
98
|
-
cwd: options.cwd,
|
|
99
|
-
graftDir,
|
|
100
|
-
discoveredArtifacts: 0,
|
|
101
|
-
migratedArtifacts: 0,
|
|
102
|
-
malformedArtifacts: 0,
|
|
103
|
-
importedContinuityRecords: 0,
|
|
104
|
-
importedReadEvents: 0,
|
|
105
|
-
importedStageEvents: 0,
|
|
106
|
-
importedTransitionEvents: 0,
|
|
107
|
-
skippedContinuityRecords: 0,
|
|
108
|
-
skippedReadEvents: 0,
|
|
109
|
-
skippedStageEvents: 0,
|
|
110
|
-
skippedTransitionEvents: 0,
|
|
111
|
-
error: message,
|
|
112
|
-
};
|
|
113
|
-
if (options.json) {
|
|
114
|
-
emitJson(payload, stdout);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
writeLine(stderr, `Error: ${message}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
package/src/cli/peer-command.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { CanonicalJsonCodec } from "../adapters/canonical-json.js";
|
|
3
|
-
import type { CliCommandName, McpToolName } from "../contracts/capabilities.js";
|
|
4
|
-
import type { JsonObject } from "../contracts/json-object.js";
|
|
5
|
-
import { parseJsonTextObject } from "../adapters/json-text-decoder.js";
|
|
6
|
-
import {
|
|
7
|
-
attachCliSchemaMeta,
|
|
8
|
-
validateCliOutput,
|
|
9
|
-
} from "../contracts/output-schemas.js";
|
|
10
|
-
import { createGraftServer, type McpToolResult } from "../mcp/server.js";
|
|
11
|
-
import { renderActivityView } from "./activity-render.js";
|
|
12
|
-
|
|
13
|
-
const codec = new CanonicalJsonCodec();
|
|
14
|
-
|
|
15
|
-
export interface Writer {
|
|
16
|
-
write(chunk: string): unknown;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function parseToolResult(result: McpToolResult): JsonObject {
|
|
20
|
-
const payload = result.content.find((item) => item.type === "text");
|
|
21
|
-
if (payload === undefined) {
|
|
22
|
-
throw new Error("Tool result did not contain a text payload");
|
|
23
|
-
}
|
|
24
|
-
return parseJsonTextObject(payload.text, "Tool result");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function writeLine(writer: Writer, line = ""): void {
|
|
28
|
-
writer.write(`${line}\n`);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function emitPeerCommand(
|
|
32
|
-
command: CliCommandName,
|
|
33
|
-
data: JsonObject,
|
|
34
|
-
json: boolean,
|
|
35
|
-
writer: Writer,
|
|
36
|
-
): void {
|
|
37
|
-
const { _schema: _mcpSchema, ...rest } = data;
|
|
38
|
-
const validated = validateCliOutput(command, attachCliSchemaMeta(command, rest));
|
|
39
|
-
if (json) {
|
|
40
|
-
writer.write(`${codec.encode(validated)}\n`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
if (command === "diag_activity") {
|
|
44
|
-
writer.write(`${renderActivityView(validated)}\n`);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
writer.write(`${JSON.stringify(validated, null, 2)}\n`);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export async function invokePeerCommand(
|
|
51
|
-
cwd: string,
|
|
52
|
-
tool: McpToolName,
|
|
53
|
-
args: JsonObject,
|
|
54
|
-
): Promise<JsonObject> {
|
|
55
|
-
const server = createGraftServer({
|
|
56
|
-
projectRoot: cwd,
|
|
57
|
-
graftDir: path.join(cwd, ".graft"),
|
|
58
|
-
});
|
|
59
|
-
return parseToolResult(await server.callTool(tool, args));
|
|
60
|
-
}
|