@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
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import * as crypto from "node:crypto";
|
|
2
|
-
import * as fs from "node:fs";
|
|
3
|
-
import * as path from "node:path";
|
|
4
|
-
import type { GitClient } from "../ports/git.js";
|
|
5
|
-
import type { ResolvedWorkspace, WorkspaceBindRequest } from "./workspace-router-model.js";
|
|
6
|
-
|
|
7
|
-
interface WorkspaceBindError {
|
|
8
|
-
readonly code: string;
|
|
9
|
-
readonly message: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function stableWorkspaceId(prefix: string, input: string): string {
|
|
13
|
-
return `${prefix}:${crypto.createHash("sha256").update(input).digest("hex").slice(0, 16)}`;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async function readGitValue(git: GitClient, cwd: string, args: readonly string[]): Promise<string | null> {
|
|
17
|
-
const result = await git.run({ args, cwd });
|
|
18
|
-
if (result.error !== undefined || result.status !== 0) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
const trimmed = result.stdout.trim();
|
|
22
|
-
return trimmed.length > 0 ? trimmed : null;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function toAbsolutePath(base: string, value: string): string {
|
|
26
|
-
return path.isAbsolute(value) ? value : path.resolve(base, value);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Resolve symlinks to get the canonical filesystem path.
|
|
31
|
-
* Prevents identity drift from path aliases (e.g. /tmp vs /private/tmp on macOS).
|
|
32
|
-
* Falls back to the input path if realpath fails (e.g. path does not exist yet).
|
|
33
|
-
*/
|
|
34
|
-
function canonicalize(inputPath: string): string {
|
|
35
|
-
try {
|
|
36
|
-
return fs.realpathSync(inputPath);
|
|
37
|
-
} catch {
|
|
38
|
-
return inputPath;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export async function resolveWorkspaceRequest(
|
|
43
|
-
git: GitClient,
|
|
44
|
-
request: WorkspaceBindRequest,
|
|
45
|
-
): Promise<ResolvedWorkspace | WorkspaceBindError> {
|
|
46
|
-
const cwd = path.resolve(request.cwd);
|
|
47
|
-
const worktreeRoot = await readGitValue(git, cwd, ["rev-parse", "--path-format=absolute", "--show-toplevel"]);
|
|
48
|
-
if (worktreeRoot === null) {
|
|
49
|
-
return {
|
|
50
|
-
code: "NOT_A_GIT_REPO",
|
|
51
|
-
message: `cwd is not inside a git worktree: ${cwd}`,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const rawGitCommonDir = await readGitValue(git, cwd, ["rev-parse", "--path-format=absolute", "--git-common-dir"]);
|
|
56
|
-
if (rawGitCommonDir === null) {
|
|
57
|
-
return {
|
|
58
|
-
code: "WORKSPACE_RESOLUTION_FAILED",
|
|
59
|
-
message: `Unable to resolve git common dir from ${cwd}`,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const gitCommonDir = canonicalize(toAbsolutePath(worktreeRoot, rawGitCommonDir));
|
|
64
|
-
const canonicalWorktreeRoot = canonicalize(worktreeRoot);
|
|
65
|
-
return {
|
|
66
|
-
repoId: stableWorkspaceId("repo", gitCommonDir),
|
|
67
|
-
worktreeId: stableWorkspaceId("worktree", canonicalWorktreeRoot),
|
|
68
|
-
worktreeRoot: canonicalWorktreeRoot,
|
|
69
|
-
gitCommonDir,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { createRepoPathResolver } from "../adapters/repo-paths.js";
|
|
3
|
-
import type { FileSystem } from "../ports/filesystem.js";
|
|
4
|
-
import type { GitClient } from "../ports/git.js";
|
|
5
|
-
import type { WarpContext } from "../warp/context.js";
|
|
6
|
-
import { DEFAULT_WARP_WRITER_ID } from "../warp/writer-id.js";
|
|
7
|
-
import { GovernorTracker } from "../session/tracker.js";
|
|
8
|
-
import { ObservationCache } from "./cache.js";
|
|
9
|
-
import { Metrics } from "./metrics.js";
|
|
10
|
-
import { loadProjectGraftignore } from "./policy.js";
|
|
11
|
-
import {
|
|
12
|
-
type PersistedLocalHistoryContext,
|
|
13
|
-
type PersistedLocalHistoryStore,
|
|
14
|
-
} from "./persisted-local-history.js";
|
|
15
|
-
import type { PersistedLocalHistoryGraphContext } from "./persisted-local-history-graph.js";
|
|
16
|
-
import { RepoStateTracker, type RepoObservation } from "./repo-state.js";
|
|
17
|
-
import { buildRuntimeCausalContext, type RuntimeCausalContext } from "./runtime-causal-context.js";
|
|
18
|
-
import {
|
|
19
|
-
buildRuntimeWorkspaceOverlayFooting,
|
|
20
|
-
type GitTransitionHookEvent,
|
|
21
|
-
} from "./runtime-workspace-overlay.js";
|
|
22
|
-
import type {
|
|
23
|
-
ResolvedWorkspace,
|
|
24
|
-
WorkspaceCapabilityProfile,
|
|
25
|
-
WorkspaceExecutionContext,
|
|
26
|
-
WorkspaceMode,
|
|
27
|
-
WorkspaceStatus,
|
|
28
|
-
} from "./workspace-router-model.js";
|
|
29
|
-
import type { WarpPool } from "./warp-pool.js";
|
|
30
|
-
|
|
31
|
-
export interface WorkspaceSlice {
|
|
32
|
-
readonly sliceId: string;
|
|
33
|
-
readonly governor: GovernorTracker;
|
|
34
|
-
readonly cache: ObservationCache;
|
|
35
|
-
readonly metrics: Metrics;
|
|
36
|
-
readonly graftDir: string;
|
|
37
|
-
readonly repoState: RepoStateTracker | null;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface BoundWorkspace {
|
|
41
|
-
readonly repoId: string;
|
|
42
|
-
readonly worktreeId: string;
|
|
43
|
-
readonly worktreeRoot: string;
|
|
44
|
-
readonly gitCommonDir: string;
|
|
45
|
-
readonly graftignorePatterns: readonly string[];
|
|
46
|
-
readonly resolvePath: (input: string) => string;
|
|
47
|
-
readonly capabilityProfile: WorkspaceCapabilityProfile;
|
|
48
|
-
readonly warpWriterId: string;
|
|
49
|
-
readonly transportSessionId: string;
|
|
50
|
-
readonly slice: WorkspaceSlice;
|
|
51
|
-
readonly getWarp: () => Promise<WarpContext>;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function createWorkspaceSlice(input: {
|
|
55
|
-
readonly graftDir: string;
|
|
56
|
-
readonly projectRoot?: string;
|
|
57
|
-
readonly fs: FileSystem;
|
|
58
|
-
readonly git: GitClient;
|
|
59
|
-
readonly nextSliceId: string;
|
|
60
|
-
}): WorkspaceSlice {
|
|
61
|
-
return {
|
|
62
|
-
sliceId: input.nextSliceId,
|
|
63
|
-
governor: new GovernorTracker(),
|
|
64
|
-
cache: new ObservationCache(),
|
|
65
|
-
metrics: new Metrics(),
|
|
66
|
-
graftDir: input.graftDir,
|
|
67
|
-
repoState: input.projectRoot !== undefined
|
|
68
|
-
? new RepoStateTracker(input.projectRoot, input.fs, input.git)
|
|
69
|
-
: null,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export async function createBoundWorkspace(input: {
|
|
74
|
-
readonly resolved: ResolvedWorkspace;
|
|
75
|
-
readonly graftDir: string;
|
|
76
|
-
readonly capabilityProfile: WorkspaceCapabilityProfile;
|
|
77
|
-
readonly actionName?: string | undefined;
|
|
78
|
-
readonly slice: WorkspaceSlice;
|
|
79
|
-
readonly fs: FileSystem;
|
|
80
|
-
readonly transportSessionId: string;
|
|
81
|
-
readonly warpWriterId?: string | undefined;
|
|
82
|
-
readonly warpPool: WarpPool;
|
|
83
|
-
}): Promise<BoundWorkspace> {
|
|
84
|
-
if (input.actionName !== undefined) {
|
|
85
|
-
input.slice.governor.recordMessage();
|
|
86
|
-
input.slice.governor.recordToolCall(input.actionName);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return {
|
|
90
|
-
...input.resolved,
|
|
91
|
-
graftignorePatterns: await loadProjectGraftignore(input.fs, input.resolved.worktreeRoot),
|
|
92
|
-
resolvePath: createRepoPathResolver(input.resolved.worktreeRoot),
|
|
93
|
-
capabilityProfile: input.capabilityProfile,
|
|
94
|
-
transportSessionId: input.transportSessionId,
|
|
95
|
-
warpWriterId: input.warpWriterId ?? DEFAULT_WARP_WRITER_ID,
|
|
96
|
-
slice: input.slice,
|
|
97
|
-
getWarp: async () => ({
|
|
98
|
-
app: await input.warpPool.getOrOpen(
|
|
99
|
-
input.resolved.repoId,
|
|
100
|
-
input.resolved.worktreeRoot,
|
|
101
|
-
input.warpWriterId ?? DEFAULT_WARP_WRITER_ID,
|
|
102
|
-
),
|
|
103
|
-
strandId: null,
|
|
104
|
-
}),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export function buildWorkspaceCausalContext(
|
|
109
|
-
binding: BoundWorkspace,
|
|
110
|
-
observation: { readonly checkoutEpoch: number },
|
|
111
|
-
): RuntimeCausalContext {
|
|
112
|
-
return buildRuntimeCausalContext({
|
|
113
|
-
transportSessionId: binding.transportSessionId,
|
|
114
|
-
workspaceSliceId: binding.slice.sliceId,
|
|
115
|
-
repoId: binding.repoId,
|
|
116
|
-
worktreeId: binding.worktreeId,
|
|
117
|
-
checkoutEpoch: observation.checkoutEpoch,
|
|
118
|
-
warpWriterId: binding.warpWriterId,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export function buildPersistedLocalHistoryContext(input: {
|
|
123
|
-
readonly persistedLocalHistory: PersistedLocalHistoryStore;
|
|
124
|
-
readonly mode: WorkspaceMode;
|
|
125
|
-
readonly binding: BoundWorkspace;
|
|
126
|
-
readonly observation: RepoObservation;
|
|
127
|
-
readonly hookEvent?: GitTransitionHookEvent | null;
|
|
128
|
-
}): PersistedLocalHistoryContext {
|
|
129
|
-
const context = input.persistedLocalHistory.buildContext(
|
|
130
|
-
{
|
|
131
|
-
sessionMode: input.mode,
|
|
132
|
-
bindState: "bound",
|
|
133
|
-
repoId: input.binding.repoId,
|
|
134
|
-
worktreeId: input.binding.worktreeId,
|
|
135
|
-
worktreeRoot: input.binding.worktreeRoot,
|
|
136
|
-
gitCommonDir: input.binding.gitCommonDir,
|
|
137
|
-
graftDir: input.binding.slice.graftDir,
|
|
138
|
-
capabilityProfile: input.binding.capabilityProfile,
|
|
139
|
-
},
|
|
140
|
-
buildWorkspaceCausalContext(input.binding, input.observation),
|
|
141
|
-
input.observation,
|
|
142
|
-
input.hookEvent ?? null,
|
|
143
|
-
);
|
|
144
|
-
if (context === null) {
|
|
145
|
-
throw new Error("persisted local history context unavailable for bound workspace");
|
|
146
|
-
}
|
|
147
|
-
return context;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export function buildPersistedLocalHistoryContextFromExecution(input: {
|
|
151
|
-
readonly persistedLocalHistory: PersistedLocalHistoryStore;
|
|
152
|
-
readonly execution: WorkspaceExecutionContext;
|
|
153
|
-
readonly observation: RepoObservation;
|
|
154
|
-
}): PersistedLocalHistoryContext {
|
|
155
|
-
const context = input.persistedLocalHistory.buildContext(
|
|
156
|
-
input.execution.status,
|
|
157
|
-
input.execution.getCausalContext(),
|
|
158
|
-
input.observation,
|
|
159
|
-
);
|
|
160
|
-
if (context === null) {
|
|
161
|
-
throw new Error("persisted local history context unavailable for execution");
|
|
162
|
-
}
|
|
163
|
-
return context;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
export async function resolveCheckoutBoundaryHookEvent(input: {
|
|
167
|
-
readonly fs: FileSystem;
|
|
168
|
-
readonly git: GitClient;
|
|
169
|
-
readonly binding: BoundWorkspace;
|
|
170
|
-
readonly previousObservedAt: string;
|
|
171
|
-
readonly observation: RepoObservation;
|
|
172
|
-
}): Promise<GitTransitionHookEvent | null> {
|
|
173
|
-
const footing = await buildRuntimeWorkspaceOverlayFooting(
|
|
174
|
-
input.fs,
|
|
175
|
-
input.git,
|
|
176
|
-
input.binding.worktreeRoot,
|
|
177
|
-
input.binding.gitCommonDir,
|
|
178
|
-
input.observation,
|
|
179
|
-
);
|
|
180
|
-
const latestHookEvent = footing.latestHookEvent;
|
|
181
|
-
if (latestHookEvent === null) {
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
const previousObservedAtMs = Date.parse(input.previousObservedAt);
|
|
186
|
-
const hookObservedAtMs = Date.parse(latestHookEvent.observedAt);
|
|
187
|
-
if (
|
|
188
|
-
Number.isFinite(previousObservedAtMs) &&
|
|
189
|
-
Number.isFinite(hookObservedAtMs) &&
|
|
190
|
-
hookObservedAtMs < previousObservedAtMs
|
|
191
|
-
) {
|
|
192
|
-
return null;
|
|
193
|
-
}
|
|
194
|
-
return latestHookEvent;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export async function buildPersistedLocalHistoryGraphContext(
|
|
198
|
-
worktreeRoot: string,
|
|
199
|
-
getWarp: () => Promise<WarpContext>,
|
|
200
|
-
): Promise<PersistedLocalHistoryGraphContext | null> {
|
|
201
|
-
try {
|
|
202
|
-
return {
|
|
203
|
-
warp: await getWarp(),
|
|
204
|
-
worktreeRoot,
|
|
205
|
-
};
|
|
206
|
-
} catch {
|
|
207
|
-
return null;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
export function boundWorkspaceStatus(
|
|
212
|
-
mode: WorkspaceMode,
|
|
213
|
-
binding: BoundWorkspace,
|
|
214
|
-
): WorkspaceStatus {
|
|
215
|
-
return {
|
|
216
|
-
sessionMode: mode,
|
|
217
|
-
bindState: "bound",
|
|
218
|
-
repoId: binding.repoId,
|
|
219
|
-
worktreeId: binding.worktreeId,
|
|
220
|
-
worktreeRoot: binding.worktreeRoot,
|
|
221
|
-
gitCommonDir: binding.gitCommonDir,
|
|
222
|
-
graftDir: binding.slice.graftDir,
|
|
223
|
-
capabilityProfile: binding.capabilityProfile,
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
export function unboundWorkspaceStatus(mode: WorkspaceMode): WorkspaceStatus {
|
|
228
|
-
return {
|
|
229
|
-
sessionMode: mode,
|
|
230
|
-
bindState: "unbound",
|
|
231
|
-
repoId: null,
|
|
232
|
-
worktreeId: null,
|
|
233
|
-
worktreeRoot: null,
|
|
234
|
-
gitCommonDir: null,
|
|
235
|
-
graftDir: null,
|
|
236
|
-
capabilityProfile: null,
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
export function nextBindingSliceDir(graftDir: string, nextBindingCounter: number): string {
|
|
241
|
-
return path.join(
|
|
242
|
-
graftDir,
|
|
243
|
-
"bindings",
|
|
244
|
-
`slice-${String(nextBindingCounter).padStart(4, "0")}`,
|
|
245
|
-
);
|
|
246
|
-
}
|