poly-weaver 0.15.3 → 1.0.0
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/dist/agents/implementors/handler.d.ts.map +1 -1
- package/dist/agents/implementors/handler.js +7 -2
- package/dist/agents/implementors/handler.js.map +1 -1
- package/dist/agents/interviewers/handler.d.ts.map +1 -1
- package/dist/agents/interviewers/handler.js +3 -1
- package/dist/agents/interviewers/handler.js.map +1 -1
- package/dist/agents/planners/adapter.d.ts.map +1 -1
- package/dist/agents/planners/adapter.js +30 -11
- package/dist/agents/planners/adapter.js.map +1 -1
- package/dist/agents/planners/handler.d.ts.map +1 -1
- package/dist/agents/planners/handler.js +7 -2
- package/dist/agents/planners/handler.js.map +1 -1
- package/dist/agents/reviewers/adapter.d.ts.map +1 -1
- package/dist/agents/reviewers/adapter.js +1 -0
- package/dist/agents/reviewers/adapter.js.map +1 -1
- package/dist/agents/reviewers/handler.d.ts.map +1 -1
- package/dist/agents/reviewers/handler.js +23 -4
- package/dist/agents/reviewers/handler.js.map +1 -1
- package/dist/agents/reviewers/types.d.ts +2 -0
- package/dist/agents/reviewers/types.d.ts.map +1 -1
- package/dist/agents/runner.d.ts +18 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +136 -20
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/simplifiers/handler.d.ts.map +1 -1
- package/dist/agents/simplifiers/handler.js +7 -2
- package/dist/agents/simplifiers/handler.js.map +1 -1
- package/dist/auto-update/detect-agents.d.ts +1 -0
- package/dist/auto-update/detect-agents.d.ts.map +1 -1
- package/dist/auto-update/detect-agents.js +8 -7
- package/dist/auto-update/detect-agents.js.map +1 -1
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/crosscheck/coordinator.d.ts +5 -0
- package/dist/crosscheck/coordinator.d.ts.map +1 -1
- package/dist/crosscheck/coordinator.js +177 -91
- package/dist/crosscheck/coordinator.js.map +1 -1
- package/dist/crosscheck/live-agent-session.d.ts +7 -1
- package/dist/crosscheck/live-agent-session.d.ts.map +1 -1
- package/dist/crosscheck/live-agent-session.js +61 -7
- package/dist/crosscheck/live-agent-session.js.map +1 -1
- package/dist/crosscheck/state.d.ts +3 -0
- package/dist/crosscheck/state.d.ts.map +1 -1
- package/dist/crosscheck/state.js +17 -2
- package/dist/crosscheck/state.js.map +1 -1
- package/dist/dump/collector.d.ts.map +1 -1
- package/dist/dump/collector.js +3 -0
- package/dist/dump/collector.js.map +1 -1
- package/dist/dump/service.d.ts.map +1 -1
- package/dist/dump/service.js +3 -0
- package/dist/dump/service.js.map +1 -1
- package/dist/dump/types.d.ts +3 -0
- package/dist/dump/types.d.ts.map +1 -1
- package/dist/dump/types.js.map +1 -1
- package/dist/flow/executor.d.ts.map +1 -1
- package/dist/flow/executor.js +5 -0
- package/dist/flow/executor.js.map +1 -1
- package/dist/flow/types.d.ts +5 -0
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/flow/types.js.map +1 -1
- package/dist/offscreen/controller.d.ts +13 -2
- package/dist/offscreen/controller.d.ts.map +1 -1
- package/dist/offscreen/controller.js +212 -91
- package/dist/offscreen/controller.js.map +1 -1
- package/dist/offscreen/fork-launch.d.ts +2 -2
- package/dist/offscreen/fork-launch.d.ts.map +1 -1
- package/dist/offscreen/fork-launch.js +2 -2
- package/dist/offscreen/fork-launch.js.map +1 -1
- package/dist/offscreen/fork.d.ts +16 -2
- package/dist/offscreen/fork.d.ts.map +1 -1
- package/dist/offscreen/fork.js +79 -40
- package/dist/offscreen/fork.js.map +1 -1
- package/dist/offscreen/inquiry-pane.d.ts +2 -1
- package/dist/offscreen/inquiry-pane.d.ts.map +1 -1
- package/dist/offscreen/inquiry-pane.js +8 -2
- package/dist/offscreen/inquiry-pane.js.map +1 -1
- package/dist/offscreen/panes.d.ts +1 -0
- package/dist/offscreen/panes.d.ts.map +1 -1
- package/dist/offscreen/registry.d.ts +2 -2
- package/dist/offscreen/registry.d.ts.map +1 -1
- package/dist/offscreen/registry.js +5 -1
- package/dist/offscreen/registry.js.map +1 -1
- package/dist/offscreen/resolve.d.ts +2 -0
- package/dist/offscreen/resolve.d.ts.map +1 -1
- package/dist/offscreen/resolve.js +5 -1
- package/dist/offscreen/resolve.js.map +1 -1
- package/dist/offscreen/session-turn-monitor.d.ts +3 -1
- package/dist/offscreen/session-turn-monitor.d.ts.map +1 -1
- package/dist/offscreen/session-turn-monitor.js +10 -2
- package/dist/offscreen/session-turn-monitor.js.map +1 -1
- package/dist/offscreen/split-inquiry.d.ts.map +1 -1
- package/dist/offscreen/split-inquiry.js +5 -0
- package/dist/offscreen/split-inquiry.js.map +1 -1
- package/dist/offscreen/starting-pane.d.ts +13 -0
- package/dist/offscreen/starting-pane.d.ts.map +1 -0
- package/dist/offscreen/starting-pane.js +24 -0
- package/dist/offscreen/starting-pane.js.map +1 -0
- package/dist/offscreen/surface.d.ts +1 -0
- package/dist/offscreen/surface.d.ts.map +1 -1
- package/dist/offscreen/surface.js +5 -3
- package/dist/offscreen/surface.js.map +1 -1
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +7 -1
- package/dist/orchestrator.js.map +1 -1
- package/dist/providers/copilot/completion.d.ts +32 -21
- package/dist/providers/copilot/completion.d.ts.map +1 -1
- package/dist/providers/copilot/completion.js +100 -165
- package/dist/providers/copilot/completion.js.map +1 -1
- package/dist/providers/copilot/environment.d.ts +2 -0
- package/dist/providers/copilot/environment.d.ts.map +1 -0
- package/dist/providers/copilot/environment.js +8 -0
- package/dist/providers/copilot/environment.js.map +1 -0
- package/dist/providers/copilot/fork-state.d.ts +7 -0
- package/dist/providers/copilot/fork-state.d.ts.map +1 -0
- package/dist/providers/copilot/fork-state.js +150 -0
- package/dist/providers/copilot/fork-state.js.map +1 -0
- package/dist/providers/copilot/observation.d.ts +275 -0
- package/dist/providers/copilot/observation.d.ts.map +1 -0
- package/dist/providers/copilot/observation.js +2072 -0
- package/dist/providers/copilot/observation.js.map +1 -0
- package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.d.mts +2 -0
- package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.d.mts.map +1 -0
- package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.mjs +426 -0
- package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.mjs.map +1 -0
- package/dist/providers/copilot/observer-extension/plugin.json +6 -0
- package/dist/providers/copilot/record-properties.d.ts +4 -0
- package/dist/providers/copilot/record-properties.d.ts.map +1 -0
- package/dist/providers/copilot/record-properties.js +14 -0
- package/dist/providers/copilot/record-properties.js.map +1 -0
- package/dist/providers/copilot/session.d.ts +8 -33
- package/dist/providers/copilot/session.d.ts.map +1 -1
- package/dist/providers/copilot/session.js +10 -176
- package/dist/providers/copilot/session.js.map +1 -1
- package/dist/providers/copilot/strategy.d.ts +3 -5
- package/dist/providers/copilot/strategy.d.ts.map +1 -1
- package/dist/providers/copilot/strategy.js +59 -66
- package/dist/providers/copilot/strategy.js.map +1 -1
- package/dist/providers/fork-cleanup.d.ts +4 -0
- package/dist/providers/fork-cleanup.d.ts.map +1 -0
- package/dist/providers/fork-cleanup.js +21 -0
- package/dist/providers/fork-cleanup.js.map +1 -0
- package/dist/providers/fork.d.ts +8 -3
- package/dist/providers/fork.d.ts.map +1 -1
- package/dist/providers/fork.js.map +1 -1
- package/dist/providers/invoke.d.ts.map +1 -1
- package/dist/providers/invoke.js +85 -34
- package/dist/providers/invoke.js.map +1 -1
- package/dist/providers/live.d.ts.map +1 -1
- package/dist/providers/live.js +43 -17
- package/dist/providers/live.js.map +1 -1
- package/dist/providers/observer-run.d.ts +4 -0
- package/dist/providers/observer-run.d.ts.map +1 -0
- package/dist/providers/observer-run.js +23 -0
- package/dist/providers/observer-run.js.map +1 -0
- package/dist/providers/session-launch.d.ts +3 -1
- package/dist/providers/session-launch.d.ts.map +1 -1
- package/dist/providers/session-launch.js +38 -19
- package/dist/providers/session-launch.js.map +1 -1
- package/dist/providers/types.d.ts +156 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/session/resume.d.ts.map +1 -1
- package/dist/session/resume.js +16 -2
- package/dist/session/resume.js.map +1 -1
- package/dist/terminal/paste-submit.d.ts.map +1 -1
- package/dist/terminal/paste-submit.js +43 -37
- package/dist/terminal/paste-submit.js.map +1 -1
- package/dist/user/host-curate-prompt.d.ts.map +1 -1
- package/dist/user/host-curate-prompt.js +9 -6
- package/dist/user/host-curate-prompt.js.map +1 -1
- package/dist/user/host-prompt.d.ts.map +1 -1
- package/dist/user/host-prompt.js +9 -6
- package/dist/user/host-prompt.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { isRecord } from "../trust-utils.js";
|
|
2
|
+
export function recordProp(record, key) {
|
|
3
|
+
const value = record?.[key];
|
|
4
|
+
return isRecord(value) ? value : undefined;
|
|
5
|
+
}
|
|
6
|
+
export function stringProp(record, key) {
|
|
7
|
+
const value = record?.[key];
|
|
8
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
9
|
+
}
|
|
10
|
+
export function rawStringProp(record, key) {
|
|
11
|
+
const value = record?.[key];
|
|
12
|
+
return typeof value === "string" ? value : undefined;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=record-properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-properties.js","sourceRoot":"","sources":["../../../src/providers/copilot/record-properties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,UAAU,UAAU,CACxB,MAA2C,EAC3C,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,MAA2C,EAC3C,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAA2C,EAC3C,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
|
|
@@ -1,34 +1,15 @@
|
|
|
1
1
|
import type { SessionHandler, SessionSnapshot } from "../types.js";
|
|
2
|
-
import {
|
|
2
|
+
import type { SessionLine } from "../../session/reader.js";
|
|
3
3
|
import type { UserClarification } from "../../agents/planners/types.js";
|
|
4
|
-
import type { OrchestrationOutput } from "../../terminal/output.js";
|
|
5
4
|
/**
|
|
6
5
|
* Get the Copilot session-state directory.
|
|
7
6
|
* Copilot stores sessions at: ~/.copilot/session-state/
|
|
8
7
|
*/
|
|
9
8
|
export declare function getCopilotSessionDir(): string;
|
|
10
9
|
/**
|
|
11
|
-
*
|
|
12
|
-
* Reads the `session.start` event and checks `data.context.cwd`.
|
|
13
|
-
*
|
|
14
|
-
* Returns:
|
|
15
|
-
* - `true` — CWD matches
|
|
16
|
-
* - `false` — `session.start` found with a different CWD (definitive mismatch)
|
|
17
|
-
* - `null` — inconclusive (file missing, empty, or no `session.start` event yet)
|
|
18
|
-
*/
|
|
19
|
-
export declare function verifyCopilotSessionCwd(eventsFile: string, expectedCwd: string): Promise<boolean | null>;
|
|
20
|
-
/**
|
|
21
|
-
* Extract the last response text from Copilot session events.
|
|
22
|
-
*
|
|
23
|
-
* Finds the last completed turn (bounded by `assistant.turn_start` and
|
|
24
|
-
* `assistant.turn_end`) and collects `data.content` from all
|
|
25
|
-
* `assistant.message` events within that turn.
|
|
26
|
-
*/
|
|
27
|
-
export declare function extractCopilotResponse(lines: SessionLine[]): string;
|
|
28
|
-
/**
|
|
29
|
-
* Thrown when a tracked `ask_user` round in a Copilot session JSONL has a
|
|
10
|
+
* Thrown when a tracked `ask_user` round in the Copilot event stream has a
|
|
30
11
|
* missing or malformed payload. Carries `noRetry = true` so
|
|
31
|
-
* `runPhaseWithRetries` skips
|
|
12
|
+
* `runPhaseWithRetries` skips reprocessing the same broken event stream and the
|
|
32
13
|
* orchestrator's executor-level hook triggers a session dump before the
|
|
33
14
|
* error propagates and the CLI exits.
|
|
34
15
|
*/
|
|
@@ -37,7 +18,7 @@ export declare class CopilotQACaptureError extends Error {
|
|
|
37
18
|
constructor(message: string);
|
|
38
19
|
}
|
|
39
20
|
/**
|
|
40
|
-
* Extract `ask_user` Q&A pairs from Copilot
|
|
21
|
+
* Extract `ask_user` Q&A pairs from Copilot observer events.
|
|
41
22
|
*
|
|
42
23
|
* Each round is a `tool.execution_start` + `tool.execution_complete` pair
|
|
43
24
|
* matched by `data.toolCallId`. Single-question rounds use
|
|
@@ -48,7 +29,7 @@ export declare class CopilotQACaptureError extends Error {
|
|
|
48
29
|
* Strict-throw contract (mirrors Claude's): malformed start- or
|
|
49
30
|
* completion-side payloads throw `CopilotQACaptureError` (with
|
|
50
31
|
* `noRetry: true`) so the orchestrator's executor-level hook can dump the
|
|
51
|
-
* broken
|
|
32
|
+
* broken event stream alongside the failed step's artifacts. Narrow,
|
|
52
33
|
* well-formed cancellation/failure signals (`success: false`, a
|
|
53
34
|
* single-question non-`"answered"` outcome, or a multi-question form
|
|
54
35
|
* non-`"accept"` action) consume the round silently without emitting.
|
|
@@ -59,10 +40,8 @@ export declare function extractCopilotClarifications(lines: SessionLine[]): User
|
|
|
59
40
|
/**
|
|
60
41
|
* Copilot session handler.
|
|
61
42
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* rounds (paired `tool.execution_start` + `tool.execution_complete`
|
|
65
|
-
* events) — same strict throw-and-dump contract as Claude for malformed payloads.
|
|
43
|
+
* Predicts and resolves opaque resume anchors in Copilot's UUID-based session
|
|
44
|
+
* directory. Live session discovery and observation belong to the SDK observer.
|
|
66
45
|
*/
|
|
67
46
|
export declare class CopilotSessionHandler implements SessionHandler {
|
|
68
47
|
private readonly getSessionDir;
|
|
@@ -70,14 +49,10 @@ export declare class CopilotSessionHandler implements SessionHandler {
|
|
|
70
49
|
predictSessionFile(_workdir: string, sessionId: string): string;
|
|
71
50
|
locateSessionById(workdir: string, sessionId: string): Promise<string | undefined>;
|
|
72
51
|
snapshot(_workdir: string): Promise<SessionSnapshot>;
|
|
73
|
-
findSessionFile(
|
|
74
|
-
output?: OrchestrationOutput;
|
|
52
|
+
findSessionFile(_snapshot: SessionSnapshot, _workdir: string, _opts?: {
|
|
75
53
|
timeoutMs?: number;
|
|
76
54
|
signal?: AbortSignal;
|
|
77
55
|
}): Promise<string>;
|
|
78
56
|
extractSessionId(sessionFilePath: string): Promise<string>;
|
|
79
|
-
extractPlanFilePath(sessionFilePath: string, _lineOffset: number): Promise<string | undefined>;
|
|
80
|
-
extractClarifications(sessionFilePath: string, lineOffset: number): Promise<UserClarification[]>;
|
|
81
|
-
private readNewLines;
|
|
82
57
|
}
|
|
83
58
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,OAAO,QAAQ;gBACZ,OAAO,EAAE,MAAM;CAI5B;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAgKtF;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,GAAE,MAAM,MAA6B;IAE/E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAKzD,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKlF,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAIpD,eAAe,CACnB,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnD,OAAO,CAAC,MAAM,CAAC;IAIZ,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAKjE"}
|
|
@@ -1,115 +1,17 @@
|
|
|
1
1
|
import { join, dirname, basename } from "node:path";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
|
-
import { access, readdir } from "node:fs/promises";
|
|
5
|
-
import { readSessionFile } from "../../session/reader.js";
|
|
6
|
-
import { normalizePath } from "../path-utils.js";
|
|
7
|
-
import { pollUntil, SESSION_FILE_WAIT_MS, throwIfAborted, } from "../../session/locator.js";
|
|
8
4
|
/**
|
|
9
5
|
* Get the Copilot session-state directory.
|
|
10
6
|
* Copilot stores sessions at: ~/.copilot/session-state/
|
|
11
7
|
*/
|
|
12
8
|
export function getCopilotSessionDir() {
|
|
13
|
-
return join(homedir(), ".copilot", "session-state");
|
|
9
|
+
return join(process.env.COPILOT_HOME || join(homedir(), ".copilot"), "session-state");
|
|
14
10
|
}
|
|
15
11
|
/**
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
async function snapshotSessionDirs(dir) {
|
|
19
|
-
const dirs = new Set();
|
|
20
|
-
try {
|
|
21
|
-
const entries = await readdir(dir, { withFileTypes: true });
|
|
22
|
-
for (const entry of entries) {
|
|
23
|
-
if (entry.isDirectory()) {
|
|
24
|
-
dirs.add(entry.name);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
// Directory might not exist yet
|
|
30
|
-
}
|
|
31
|
-
return dirs;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Verify a Copilot session belongs to the expected working directory.
|
|
35
|
-
* Reads the `session.start` event and checks `data.context.cwd`.
|
|
36
|
-
*
|
|
37
|
-
* Returns:
|
|
38
|
-
* - `true` — CWD matches
|
|
39
|
-
* - `false` — `session.start` found with a different CWD (definitive mismatch)
|
|
40
|
-
* - `null` — inconclusive (file missing, empty, or no `session.start` event yet)
|
|
41
|
-
*/
|
|
42
|
-
export async function verifyCopilotSessionCwd(eventsFile, expectedCwd) {
|
|
43
|
-
try {
|
|
44
|
-
const lines = await readSessionFile(eventsFile);
|
|
45
|
-
if (lines.length === 0)
|
|
46
|
-
return null;
|
|
47
|
-
for (const line of lines) {
|
|
48
|
-
if (line.type === "session.start") {
|
|
49
|
-
const data = line.data;
|
|
50
|
-
const cwd = data?.context?.cwd;
|
|
51
|
-
if (!cwd)
|
|
52
|
-
return false;
|
|
53
|
-
return normalizePath(cwd) === normalizePath(expectedCwd);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// File has content but no session.start yet — inconclusive
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
// File doesn't exist or can't be read yet — inconclusive
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Extract the last response text from Copilot session events.
|
|
66
|
-
*
|
|
67
|
-
* Finds the last completed turn (bounded by `assistant.turn_start` and
|
|
68
|
-
* `assistant.turn_end`) and collects `data.content` from all
|
|
69
|
-
* `assistant.message` events within that turn.
|
|
70
|
-
*/
|
|
71
|
-
export function extractCopilotResponse(lines) {
|
|
72
|
-
// Find the last turn_end, then the matching turn_start before it
|
|
73
|
-
let lastTurnEnd = -1;
|
|
74
|
-
let lastTurnStart = -1;
|
|
75
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
76
|
-
if (lines[i].type === "assistant.turn_end" && lastTurnEnd === -1) {
|
|
77
|
-
lastTurnEnd = i;
|
|
78
|
-
}
|
|
79
|
-
else if (lines[i].type === "assistant.turn_start" && lastTurnEnd !== -1) {
|
|
80
|
-
lastTurnStart = i;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// When turn_end is missing (e.g., exit tool short-circuit), fall back to
|
|
85
|
-
// collecting all messages after the last turn_start.
|
|
86
|
-
if (lastTurnStart === -1 && lastTurnEnd === -1) {
|
|
87
|
-
// No turn markers at all — find the last turn_start forward
|
|
88
|
-
for (let i = 0; i < lines.length; i++) {
|
|
89
|
-
if (lines[i].type === "assistant.turn_start")
|
|
90
|
-
lastTurnStart = i;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (lastTurnStart === -1)
|
|
94
|
-
return "";
|
|
95
|
-
const endIdx = lastTurnEnd !== -1 ? lastTurnEnd : lines.length;
|
|
96
|
-
// Collect assistant.message content strictly within the turn boundaries
|
|
97
|
-
const parts = [];
|
|
98
|
-
for (let i = lastTurnStart + 1; i < endIdx; i++) {
|
|
99
|
-
const line = lines[i];
|
|
100
|
-
if (line.type === "assistant.message") {
|
|
101
|
-
const data = line.data;
|
|
102
|
-
if (data?.content) {
|
|
103
|
-
parts.push(data.content);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return parts.join("\n");
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Thrown when a tracked `ask_user` round in a Copilot session JSONL has a
|
|
12
|
+
* Thrown when a tracked `ask_user` round in the Copilot event stream has a
|
|
111
13
|
* missing or malformed payload. Carries `noRetry = true` so
|
|
112
|
-
* `runPhaseWithRetries` skips
|
|
14
|
+
* `runPhaseWithRetries` skips reprocessing the same broken event stream and the
|
|
113
15
|
* orchestrator's executor-level hook triggers a session dump before the
|
|
114
16
|
* error propagates and the CLI exits.
|
|
115
17
|
*/
|
|
@@ -124,7 +26,7 @@ function isRecord(value) {
|
|
|
124
26
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
125
27
|
}
|
|
126
28
|
/**
|
|
127
|
-
* Extract `ask_user` Q&A pairs from Copilot
|
|
29
|
+
* Extract `ask_user` Q&A pairs from Copilot observer events.
|
|
128
30
|
*
|
|
129
31
|
* Each round is a `tool.execution_start` + `tool.execution_complete` pair
|
|
130
32
|
* matched by `data.toolCallId`. Single-question rounds use
|
|
@@ -135,7 +37,7 @@ function isRecord(value) {
|
|
|
135
37
|
* Strict-throw contract (mirrors Claude's): malformed start- or
|
|
136
38
|
* completion-side payloads throw `CopilotQACaptureError` (with
|
|
137
39
|
* `noRetry: true`) so the orchestrator's executor-level hook can dump the
|
|
138
|
-
* broken
|
|
40
|
+
* broken event stream alongside the failed step's artifacts. Narrow,
|
|
139
41
|
* well-formed cancellation/failure signals (`success: false`, a
|
|
140
42
|
* single-question non-`"answered"` outcome, or a multi-question form
|
|
141
43
|
* non-`"accept"` action) consume the round silently without emitting.
|
|
@@ -258,10 +160,8 @@ export function extractCopilotClarifications(lines) {
|
|
|
258
160
|
/**
|
|
259
161
|
* Copilot session handler.
|
|
260
162
|
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
* rounds (paired `tool.execution_start` + `tool.execution_complete`
|
|
264
|
-
* events) — same strict throw-and-dump contract as Claude for malformed payloads.
|
|
163
|
+
* Predicts and resolves opaque resume anchors in Copilot's UUID-based session
|
|
164
|
+
* directory. Live session discovery and observation belong to the SDK observer.
|
|
265
165
|
*/
|
|
266
166
|
export class CopilotSessionHandler {
|
|
267
167
|
getSessionDir;
|
|
@@ -277,80 +177,14 @@ export class CopilotSessionHandler {
|
|
|
277
177
|
return existsSync(path) ? path : undefined;
|
|
278
178
|
}
|
|
279
179
|
async snapshot(_workdir) {
|
|
280
|
-
|
|
281
|
-
const dirs = await snapshotSessionDirs(dir);
|
|
282
|
-
// Store directory names as the "files" set — the snapshot type uses
|
|
283
|
-
// Set<string> generically, and we repurpose it for directory names.
|
|
284
|
-
return { skipped: false, dir, files: dirs };
|
|
180
|
+
throw new Error("Copilot JSONL session discovery is disabled; use the SDK live observer");
|
|
285
181
|
}
|
|
286
|
-
async findSessionFile(
|
|
287
|
-
|
|
288
|
-
throw new Error("Cannot find session file: snapshot was skipped");
|
|
289
|
-
}
|
|
290
|
-
const { dir, files: knownDirs } = snapshot;
|
|
291
|
-
const signal = opts?.signal;
|
|
292
|
-
return pollUntil(async () => {
|
|
293
|
-
let entries;
|
|
294
|
-
try {
|
|
295
|
-
const dirEntries = await readdir(dir, { withFileTypes: true });
|
|
296
|
-
entries = dirEntries
|
|
297
|
-
.filter((e) => e.isDirectory())
|
|
298
|
-
.map((e) => e.name);
|
|
299
|
-
}
|
|
300
|
-
catch {
|
|
301
|
-
entries = [];
|
|
302
|
-
}
|
|
303
|
-
for (const name of entries) {
|
|
304
|
-
throwIfAborted(signal);
|
|
305
|
-
if (knownDirs.has(name))
|
|
306
|
-
continue;
|
|
307
|
-
const eventsFile = join(dir, name, "events.jsonl");
|
|
308
|
-
const result = await verifyCopilotSessionCwd(eventsFile, workdir);
|
|
309
|
-
if (result === true)
|
|
310
|
-
return eventsFile;
|
|
311
|
-
if (result === false) {
|
|
312
|
-
// Definitive CWD mismatch — belongs to a different concurrent
|
|
313
|
-
// Copilot process. Skip permanently.
|
|
314
|
-
knownDirs.add(name);
|
|
315
|
-
}
|
|
316
|
-
// result === null → inconclusive (file missing/empty/no session.start
|
|
317
|
-
// yet). Don't add to knownDirs — retry on next poll.
|
|
318
|
-
}
|
|
319
|
-
return undefined;
|
|
320
|
-
}, {
|
|
321
|
-
timeoutMs: opts?.timeoutMs ?? SESSION_FILE_WAIT_MS,
|
|
322
|
-
pollMs: 500,
|
|
323
|
-
signal,
|
|
324
|
-
timeoutMessage: `Timed out waiting for new Copilot session directory in ${dir}`,
|
|
325
|
-
});
|
|
182
|
+
async findSessionFile(_snapshot, _workdir, _opts) {
|
|
183
|
+
throw new Error("Copilot JSONL session discovery is disabled; use the SDK live observer");
|
|
326
184
|
}
|
|
327
185
|
async extractSessionId(sessionFilePath) {
|
|
328
186
|
// Session ID is the UUID directory name (parent of events.jsonl)
|
|
329
187
|
return basename(dirname(sessionFilePath));
|
|
330
188
|
}
|
|
331
|
-
async extractPlanFilePath(sessionFilePath, _lineOffset) {
|
|
332
|
-
const planPath = join(dirname(sessionFilePath), "plan.md");
|
|
333
|
-
// Bounded retry: completion detector fires on exit_plan_mode, but plan.md
|
|
334
|
-
// may not be flushed to disk yet. Poll up to 5s at 250ms intervals.
|
|
335
|
-
const deadline = Date.now() + 5_000;
|
|
336
|
-
const pollMs = 250;
|
|
337
|
-
while (Date.now() < deadline) {
|
|
338
|
-
try {
|
|
339
|
-
await access(planPath);
|
|
340
|
-
return planPath;
|
|
341
|
-
}
|
|
342
|
-
catch {
|
|
343
|
-
await new Promise((r) => setTimeout(r, pollMs));
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
return undefined;
|
|
347
|
-
}
|
|
348
|
-
async extractClarifications(sessionFilePath, lineOffset) {
|
|
349
|
-
return extractCopilotClarifications(await this.readNewLines(sessionFilePath, lineOffset));
|
|
350
|
-
}
|
|
351
|
-
async readNewLines(sessionFilePath, lineOffset) {
|
|
352
|
-
const allLines = await readSessionFile(sessionFilePath);
|
|
353
|
-
return allLines.slice(lineOffset);
|
|
354
|
-
}
|
|
355
189
|
}
|
|
356
190
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/providers/copilot/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/providers/copilot/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { ForkHandler } from "../fork.js";
|
|
2
|
-
import type { CancelSequence, PlanModeConfig, ProviderStrategy, SessionHandler, BuildArgsOpts,
|
|
3
|
-
import type { CompletionDetectorOptions } from "../types.js";
|
|
4
|
-
import { CopilotCompletionDetector } from "./completion.js";
|
|
2
|
+
import type { CancelSequence, PlanModeConfig, ProviderStrategy, SessionHandler, BuildArgsOpts, OptionCatalog, SimplifierPromptOptions, SubagentOptionCatalog, LiveSessionHandler, ProviderObserverRun } from "../types.js";
|
|
5
3
|
import { CopilotComposerInspector } from "./composer.js";
|
|
6
4
|
export declare class CopilotStrategy implements ProviderStrategy {
|
|
7
5
|
readonly name = "copilot";
|
|
@@ -14,16 +12,16 @@ export declare class CopilotStrategy implements ProviderStrategy {
|
|
|
14
12
|
readonly live: LiveSessionHandler;
|
|
15
13
|
readonly fork: ForkHandler;
|
|
16
14
|
readonly composer: CopilotComposerInspector;
|
|
17
|
-
readonly forkSubmitFloor: ForkSubmitFloorPolicy;
|
|
18
15
|
readonly simplifierSubagentType = "explore";
|
|
19
16
|
version: string | undefined;
|
|
20
17
|
readonly planMode: PlanModeConfig;
|
|
21
18
|
readonly options: OptionCatalog;
|
|
22
19
|
readonly subagentOptions: SubagentOptionCatalog;
|
|
23
20
|
buildArgs(prompt: string, opts: BuildArgsOpts): Promise<string[]>;
|
|
21
|
+
createObserverRun(): Promise<ProviderObserverRun>;
|
|
24
22
|
ensureTrust(workdir: string): Promise<void>;
|
|
25
23
|
simplifierPrompt(opts: SimplifierPromptOptions): string;
|
|
26
|
-
createDetector(
|
|
24
|
+
createDetector(): never;
|
|
27
25
|
private copilotModels;
|
|
28
26
|
private copilotSubagentModels;
|
|
29
27
|
private copilotSupportsMaxEffort;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/strategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/strategy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EAMZ,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAElB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAYrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAuDzD,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,wBAAwB;IAC5C,QAAQ,CAAC,OAAO,aAAa;IAC7B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAIrC;IACF,QAAQ,CAAC,sBAAsB,YAAY;IAC3C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA+B;IAC/D,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAuC;IACxE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAgC;IAC1D,QAAQ,CAAC,QAAQ,2BAAkC;IACnD,QAAQ,CAAC,sBAAsB,aAAa;IAC5C,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAI/B;IACF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAkC7B;IACF,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAM7C;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoCvE,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI3C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM;IAOvD,cAAc,IAAI,KAAK;IAIvB,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,gBAAgB;CAKzB"}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { rmSync } from "node:fs";
|
|
3
|
-
import { cp } from "node:fs/promises";
|
|
4
1
|
import { dirname, join } from "node:path";
|
|
5
2
|
import { fileURLToPath } from "node:url";
|
|
6
3
|
import { DefaultLiveSessionHandler } from "../live.js";
|
|
7
|
-
import {
|
|
8
|
-
import { SESSION_FILE_WAIT_MS, pollUntil, waitForFile, } from "../../session/locator.js";
|
|
4
|
+
import { SESSION_FILE_WAIT_MS, waitForFile, } from "../../session/locator.js";
|
|
9
5
|
import { effectiveFastFromCatalog, flagIf } from "../types.js";
|
|
10
6
|
import { versionGte } from "../version.js";
|
|
11
|
-
import { countCopilotResumeSeparators, countCopilotSubmits, isCopilotTurnLivenessSettled, latestCopilotSubmitIndex, nthCopilotResumeSeparatorIndex, CopilotCompletionDetector, compareCopilotSessionHistory, copilotSessionHistorySnapshot, } from "./completion.js";
|
|
12
7
|
import { CopilotSessionHandler, getCopilotSessionDir } from "./session.js";
|
|
13
8
|
import { ensureCopilotTrust } from "./trust.js";
|
|
14
9
|
import { buildSimplifierPrompt } from "../../agents/simplifiers/prompts.js";
|
|
15
10
|
import { CopilotComposerInspector } from "./composer.js";
|
|
11
|
+
import { createCopilotObserverRun, prepareCopilotLaunchObserver, } from "./observation.js";
|
|
12
|
+
import { prepareCopilotForkState } from "./fork-state.js";
|
|
13
|
+
import { cleanupForkResources } from "../fork-cleanup.js";
|
|
16
14
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
15
|
const COPILOT_INQUIRY_DIR = join(__dirname, "../../offscreen/copilot-inquiry");
|
|
18
16
|
const DEFAULT_FORK_LOCATE_POLL_MS = 500;
|
|
@@ -73,7 +71,6 @@ export class CopilotStrategy {
|
|
|
73
71
|
live = new DefaultLiveSessionHandler(this);
|
|
74
72
|
fork = new CopilotForkHandler(this);
|
|
75
73
|
composer = new CopilotComposerInspector();
|
|
76
|
-
forkSubmitFloor = { from: "fork-file", offset: 0 };
|
|
77
74
|
simplifierSubagentType = "explore";
|
|
78
75
|
version = undefined;
|
|
79
76
|
planMode = {
|
|
@@ -123,12 +120,15 @@ export class CopilotStrategy {
|
|
|
123
120
|
isKnownModel: (model) => this.copilotSubagentModels().includes(model),
|
|
124
121
|
};
|
|
125
122
|
async buildArgs(prompt, opts) {
|
|
126
|
-
const optionFlags =
|
|
123
|
+
const optionFlags = [
|
|
124
|
+
...copilotConfigurationFlags(opts, this.options, flagIf(opts.yolo, "--allow-all")),
|
|
125
|
+
...(opts.extraArgs ?? []),
|
|
126
|
+
];
|
|
127
127
|
if (opts.resumeSessionId) {
|
|
128
128
|
return [
|
|
129
129
|
"--resume",
|
|
130
130
|
opts.resumeSessionId,
|
|
131
|
-
...(prompt.length > 0 ? ["-i", prompt] : []),
|
|
131
|
+
...(prompt.length > 0 && !opts.deferPrompt ? ["-i", prompt] : []),
|
|
132
132
|
...optionFlags,
|
|
133
133
|
];
|
|
134
134
|
}
|
|
@@ -139,14 +139,19 @@ export class CopilotStrategy {
|
|
|
139
139
|
: `--resume=${opts.sessionId}`;
|
|
140
140
|
return [
|
|
141
141
|
sessionFlag,
|
|
142
|
-
"-i",
|
|
143
|
-
`${prefix}${prompt}`,
|
|
142
|
+
...(!opts.deferPrompt ? ["-i", `${prefix}${prompt}`] : []),
|
|
144
143
|
...optionFlags,
|
|
145
144
|
];
|
|
146
145
|
}
|
|
147
146
|
// Copilot requires `-i` for input (no positional args).
|
|
148
147
|
const prefix = opts.promptPrefix ?? "";
|
|
149
|
-
return [
|
|
148
|
+
return [
|
|
149
|
+
...(!opts.deferPrompt ? ["-i", `${prefix}${prompt}`] : []),
|
|
150
|
+
...optionFlags,
|
|
151
|
+
];
|
|
152
|
+
}
|
|
153
|
+
createObserverRun() {
|
|
154
|
+
return createCopilotObserverRun();
|
|
150
155
|
}
|
|
151
156
|
async ensureTrust(workdir) {
|
|
152
157
|
await ensureCopilotTrust(workdir);
|
|
@@ -157,8 +162,8 @@ export class CopilotStrategy {
|
|
|
157
162
|
subagentType: this.simplifierSubagentType,
|
|
158
163
|
});
|
|
159
164
|
}
|
|
160
|
-
createDetector(
|
|
161
|
-
|
|
165
|
+
createDetector() {
|
|
166
|
+
throw new Error("Copilot completion detection requires the SDK live observer");
|
|
162
167
|
}
|
|
163
168
|
copilotModels() {
|
|
164
169
|
const gptModels = this.copilotGptModels();
|
|
@@ -225,41 +230,56 @@ class CopilotForkHandler {
|
|
|
225
230
|
constructor(strategy) {
|
|
226
231
|
this.strategy = strategy;
|
|
227
232
|
}
|
|
228
|
-
async buildLaunch(slot) {
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
const targetDir = join(getCopilotSessionDir(), clonedId);
|
|
232
|
-
const cleanup = () => {
|
|
233
|
-
rmSync(targetDir, { recursive: true, force: true });
|
|
234
|
-
};
|
|
233
|
+
async buildLaunch(slot, workdir, opts = {}) {
|
|
234
|
+
const { sessionId: branchId, sessionDir: targetDir, cleanup } = await prepareCopilotForkState(copilotSourceDir(slot), slot.sourceSessionId, getCopilotSessionDir(), opts.signal);
|
|
235
|
+
let observer;
|
|
235
236
|
try {
|
|
236
|
-
|
|
237
|
+
const observerPrepareOptions = {
|
|
238
|
+
workdir,
|
|
239
|
+
prompt: "",
|
|
240
|
+
resumeSessionId: branchId,
|
|
241
|
+
excludeInheritedHistory: true,
|
|
242
|
+
};
|
|
243
|
+
observer = opts.observerRun
|
|
244
|
+
? await opts.observerRun.prepareLaunchObserver(observerPrepareOptions)
|
|
245
|
+
: await prepareCopilotLaunchObserver(observerPrepareOptions);
|
|
246
|
+
if (!observer) {
|
|
247
|
+
throw new Error("Copilot observer run did not create a launch observer");
|
|
248
|
+
}
|
|
249
|
+
if (observer.sessionId !== branchId) {
|
|
250
|
+
throw new Error("Copilot inquiry observer does not own the prepared branch");
|
|
251
|
+
}
|
|
252
|
+
opts.signal?.throwIfAborted();
|
|
237
253
|
const existing = process.env.COPILOT_CUSTOM_INSTRUCTIONS_DIRS;
|
|
238
254
|
const dirs = existing ? `${existing},${COPILOT_INQUIRY_DIR}` : COPILOT_INQUIRY_DIR;
|
|
239
255
|
return {
|
|
240
|
-
command:
|
|
256
|
+
command: this.strategy.command,
|
|
241
257
|
args: [
|
|
242
258
|
"--resume",
|
|
243
|
-
|
|
259
|
+
branchId,
|
|
244
260
|
...copilotConfigurationFlags(slot, this.strategy.options, slot.yolo ? ["--allow-all"] : []),
|
|
261
|
+
...(observer.args ?? []),
|
|
245
262
|
],
|
|
246
|
-
env: {
|
|
263
|
+
env: {
|
|
264
|
+
COPILOT_CUSTOM_INSTRUCTIONS_DIRS: dirs,
|
|
265
|
+
...(observer.env ?? {}),
|
|
266
|
+
},
|
|
267
|
+
observer,
|
|
247
268
|
forkSessionFile: join(targetDir, "events.jsonl"),
|
|
248
269
|
cleanup,
|
|
249
270
|
};
|
|
250
271
|
}
|
|
251
272
|
catch (err) {
|
|
252
|
-
|
|
273
|
+
await cleanupForkResources([() => observer?.dispose(), cleanup], { error: err });
|
|
253
274
|
throw err;
|
|
254
275
|
}
|
|
255
276
|
}
|
|
256
277
|
async captureLineage(_slot, _workdir, launch) {
|
|
257
278
|
if (!launch.forkSessionFile) {
|
|
258
|
-
throw new Error("Copilot fork launch did not provide a
|
|
279
|
+
throw new Error("Copilot fork launch did not provide a branch diagnostic path");
|
|
259
280
|
}
|
|
260
281
|
const file = launch.forkSessionFile;
|
|
261
|
-
|
|
262
|
-
return { kind: "copilot", file, copiedSeparatorCount };
|
|
282
|
+
return { kind: "copilot", file };
|
|
263
283
|
}
|
|
264
284
|
async locateSessionFile(lineage, opts = {}) {
|
|
265
285
|
if (lineage.kind !== "copilot")
|
|
@@ -267,55 +287,28 @@ class CopilotForkHandler {
|
|
|
267
287
|
const timeoutMs = opts.timeoutMs ?? SESSION_FILE_WAIT_MS;
|
|
268
288
|
const pollMs = opts.pollMs ?? DEFAULT_FORK_LOCATE_POLL_MS;
|
|
269
289
|
try {
|
|
270
|
-
|
|
271
|
-
return await pollUntil(async () => {
|
|
272
|
-
try {
|
|
273
|
-
const lines = await readSessionFile(file);
|
|
274
|
-
return countCopilotResumeSeparators(lines) > lineage.copiedSeparatorCount
|
|
275
|
-
? file
|
|
276
|
-
: undefined;
|
|
277
|
-
}
|
|
278
|
-
catch {
|
|
279
|
-
return undefined;
|
|
280
|
-
}
|
|
281
|
-
}, {
|
|
282
|
-
timeoutMs,
|
|
283
|
-
pollMs,
|
|
284
|
-
signal: opts.signal,
|
|
285
|
-
timeoutMessage: `Timed out waiting for Copilot fork resume separator in ${file}`,
|
|
286
|
-
});
|
|
290
|
+
return await waitForFile(lineage.file, timeoutMs, pollMs, opts.signal);
|
|
287
291
|
}
|
|
288
292
|
catch {
|
|
289
293
|
return undefined;
|
|
290
294
|
}
|
|
291
295
|
}
|
|
292
296
|
turnComplete(lines, latestSubmitIndex = 0) {
|
|
293
|
-
|
|
297
|
+
void lines;
|
|
298
|
+
void latestSubmitIndex;
|
|
299
|
+
throw copilotJsonlRuntimeDisabled();
|
|
294
300
|
}
|
|
295
301
|
latestSubmitIndex(lines) {
|
|
296
|
-
|
|
302
|
+
void lines;
|
|
303
|
+
throw copilotJsonlRuntimeDisabled();
|
|
297
304
|
}
|
|
298
305
|
submitCount(lines) {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
forkFileSubmitFloor(lineage, lines) {
|
|
302
|
-
if (lineage.kind !== "copilot")
|
|
303
|
-
return undefined;
|
|
304
|
-
const copiedSeparatorCount = lineage.copiedSeparatorCount;
|
|
305
|
-
if (copiedSeparatorCount === 0)
|
|
306
|
-
return 0;
|
|
307
|
-
const boundaryIndex = nthCopilotResumeSeparatorIndex(lines, copiedSeparatorCount);
|
|
308
|
-
if (boundaryIndex < 0)
|
|
309
|
-
return undefined;
|
|
310
|
-
return countCopilotSubmits(lines.slice(0, boundaryIndex + 1));
|
|
311
|
-
}
|
|
312
|
-
sessionHistorySnapshot(lines) {
|
|
313
|
-
return copilotSessionHistorySnapshot(lines);
|
|
306
|
+
void lines;
|
|
307
|
+
throw copilotJsonlRuntimeDisabled();
|
|
314
308
|
}
|
|
315
|
-
compareSessionHistory = compareCopilotSessionHistory;
|
|
316
309
|
}
|
|
317
|
-
|
|
318
|
-
|
|
310
|
+
function copilotJsonlRuntimeDisabled() {
|
|
311
|
+
throw new Error("Copilot fork runtime liveness requires the SDK live observer; JSONL parsing is diagnostics-only");
|
|
319
312
|
}
|
|
320
313
|
function copilotConfigurationFlags(slot, options, permissionFlags) {
|
|
321
314
|
const effectiveModel = effectiveFastFromCatalog(options, slot.fast, slot.model)
|