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.
Files changed (174) hide show
  1. package/dist/agents/implementors/handler.d.ts.map +1 -1
  2. package/dist/agents/implementors/handler.js +7 -2
  3. package/dist/agents/implementors/handler.js.map +1 -1
  4. package/dist/agents/interviewers/handler.d.ts.map +1 -1
  5. package/dist/agents/interviewers/handler.js +3 -1
  6. package/dist/agents/interviewers/handler.js.map +1 -1
  7. package/dist/agents/planners/adapter.d.ts.map +1 -1
  8. package/dist/agents/planners/adapter.js +30 -11
  9. package/dist/agents/planners/adapter.js.map +1 -1
  10. package/dist/agents/planners/handler.d.ts.map +1 -1
  11. package/dist/agents/planners/handler.js +7 -2
  12. package/dist/agents/planners/handler.js.map +1 -1
  13. package/dist/agents/reviewers/adapter.d.ts.map +1 -1
  14. package/dist/agents/reviewers/adapter.js +1 -0
  15. package/dist/agents/reviewers/adapter.js.map +1 -1
  16. package/dist/agents/reviewers/handler.d.ts.map +1 -1
  17. package/dist/agents/reviewers/handler.js +23 -4
  18. package/dist/agents/reviewers/handler.js.map +1 -1
  19. package/dist/agents/reviewers/types.d.ts +2 -0
  20. package/dist/agents/reviewers/types.d.ts.map +1 -1
  21. package/dist/agents/runner.d.ts +18 -1
  22. package/dist/agents/runner.d.ts.map +1 -1
  23. package/dist/agents/runner.js +136 -20
  24. package/dist/agents/runner.js.map +1 -1
  25. package/dist/agents/simplifiers/handler.d.ts.map +1 -1
  26. package/dist/agents/simplifiers/handler.js +7 -2
  27. package/dist/agents/simplifiers/handler.js.map +1 -1
  28. package/dist/auto-update/detect-agents.d.ts +1 -0
  29. package/dist/auto-update/detect-agents.d.ts.map +1 -1
  30. package/dist/auto-update/detect-agents.js +8 -7
  31. package/dist/auto-update/detect-agents.js.map +1 -1
  32. package/dist/cli.js +16 -4
  33. package/dist/cli.js.map +1 -1
  34. package/dist/crosscheck/coordinator.d.ts +5 -0
  35. package/dist/crosscheck/coordinator.d.ts.map +1 -1
  36. package/dist/crosscheck/coordinator.js +177 -91
  37. package/dist/crosscheck/coordinator.js.map +1 -1
  38. package/dist/crosscheck/live-agent-session.d.ts +7 -1
  39. package/dist/crosscheck/live-agent-session.d.ts.map +1 -1
  40. package/dist/crosscheck/live-agent-session.js +61 -7
  41. package/dist/crosscheck/live-agent-session.js.map +1 -1
  42. package/dist/crosscheck/state.d.ts +3 -0
  43. package/dist/crosscheck/state.d.ts.map +1 -1
  44. package/dist/crosscheck/state.js +17 -2
  45. package/dist/crosscheck/state.js.map +1 -1
  46. package/dist/dump/collector.d.ts.map +1 -1
  47. package/dist/dump/collector.js +3 -0
  48. package/dist/dump/collector.js.map +1 -1
  49. package/dist/dump/service.d.ts.map +1 -1
  50. package/dist/dump/service.js +3 -0
  51. package/dist/dump/service.js.map +1 -1
  52. package/dist/dump/types.d.ts +3 -0
  53. package/dist/dump/types.d.ts.map +1 -1
  54. package/dist/dump/types.js.map +1 -1
  55. package/dist/flow/executor.d.ts.map +1 -1
  56. package/dist/flow/executor.js +5 -0
  57. package/dist/flow/executor.js.map +1 -1
  58. package/dist/flow/types.d.ts +5 -0
  59. package/dist/flow/types.d.ts.map +1 -1
  60. package/dist/flow/types.js.map +1 -1
  61. package/dist/offscreen/controller.d.ts +13 -2
  62. package/dist/offscreen/controller.d.ts.map +1 -1
  63. package/dist/offscreen/controller.js +212 -91
  64. package/dist/offscreen/controller.js.map +1 -1
  65. package/dist/offscreen/fork-launch.d.ts +2 -2
  66. package/dist/offscreen/fork-launch.d.ts.map +1 -1
  67. package/dist/offscreen/fork-launch.js +2 -2
  68. package/dist/offscreen/fork-launch.js.map +1 -1
  69. package/dist/offscreen/fork.d.ts +16 -2
  70. package/dist/offscreen/fork.d.ts.map +1 -1
  71. package/dist/offscreen/fork.js +79 -40
  72. package/dist/offscreen/fork.js.map +1 -1
  73. package/dist/offscreen/inquiry-pane.d.ts +2 -1
  74. package/dist/offscreen/inquiry-pane.d.ts.map +1 -1
  75. package/dist/offscreen/inquiry-pane.js +8 -2
  76. package/dist/offscreen/inquiry-pane.js.map +1 -1
  77. package/dist/offscreen/panes.d.ts +1 -0
  78. package/dist/offscreen/panes.d.ts.map +1 -1
  79. package/dist/offscreen/registry.d.ts +2 -2
  80. package/dist/offscreen/registry.d.ts.map +1 -1
  81. package/dist/offscreen/registry.js +5 -1
  82. package/dist/offscreen/registry.js.map +1 -1
  83. package/dist/offscreen/resolve.d.ts +2 -0
  84. package/dist/offscreen/resolve.d.ts.map +1 -1
  85. package/dist/offscreen/resolve.js +5 -1
  86. package/dist/offscreen/resolve.js.map +1 -1
  87. package/dist/offscreen/session-turn-monitor.d.ts +3 -1
  88. package/dist/offscreen/session-turn-monitor.d.ts.map +1 -1
  89. package/dist/offscreen/session-turn-monitor.js +10 -2
  90. package/dist/offscreen/session-turn-monitor.js.map +1 -1
  91. package/dist/offscreen/split-inquiry.d.ts.map +1 -1
  92. package/dist/offscreen/split-inquiry.js +5 -0
  93. package/dist/offscreen/split-inquiry.js.map +1 -1
  94. package/dist/offscreen/starting-pane.d.ts +13 -0
  95. package/dist/offscreen/starting-pane.d.ts.map +1 -0
  96. package/dist/offscreen/starting-pane.js +24 -0
  97. package/dist/offscreen/starting-pane.js.map +1 -0
  98. package/dist/offscreen/surface.d.ts +1 -0
  99. package/dist/offscreen/surface.d.ts.map +1 -1
  100. package/dist/offscreen/surface.js +5 -3
  101. package/dist/offscreen/surface.js.map +1 -1
  102. package/dist/orchestrator.d.ts.map +1 -1
  103. package/dist/orchestrator.js +7 -1
  104. package/dist/orchestrator.js.map +1 -1
  105. package/dist/providers/copilot/completion.d.ts +32 -21
  106. package/dist/providers/copilot/completion.d.ts.map +1 -1
  107. package/dist/providers/copilot/completion.js +100 -165
  108. package/dist/providers/copilot/completion.js.map +1 -1
  109. package/dist/providers/copilot/environment.d.ts +2 -0
  110. package/dist/providers/copilot/environment.d.ts.map +1 -0
  111. package/dist/providers/copilot/environment.js +8 -0
  112. package/dist/providers/copilot/environment.js.map +1 -0
  113. package/dist/providers/copilot/fork-state.d.ts +7 -0
  114. package/dist/providers/copilot/fork-state.d.ts.map +1 -0
  115. package/dist/providers/copilot/fork-state.js +150 -0
  116. package/dist/providers/copilot/fork-state.js.map +1 -0
  117. package/dist/providers/copilot/observation.d.ts +275 -0
  118. package/dist/providers/copilot/observation.d.ts.map +1 -0
  119. package/dist/providers/copilot/observation.js +2072 -0
  120. package/dist/providers/copilot/observation.js.map +1 -0
  121. package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.d.mts +2 -0
  122. package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.d.mts.map +1 -0
  123. package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.mjs +426 -0
  124. package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.mjs.map +1 -0
  125. package/dist/providers/copilot/observer-extension/plugin.json +6 -0
  126. package/dist/providers/copilot/record-properties.d.ts +4 -0
  127. package/dist/providers/copilot/record-properties.d.ts.map +1 -0
  128. package/dist/providers/copilot/record-properties.js +14 -0
  129. package/dist/providers/copilot/record-properties.js.map +1 -0
  130. package/dist/providers/copilot/session.d.ts +8 -33
  131. package/dist/providers/copilot/session.d.ts.map +1 -1
  132. package/dist/providers/copilot/session.js +10 -176
  133. package/dist/providers/copilot/session.js.map +1 -1
  134. package/dist/providers/copilot/strategy.d.ts +3 -5
  135. package/dist/providers/copilot/strategy.d.ts.map +1 -1
  136. package/dist/providers/copilot/strategy.js +59 -66
  137. package/dist/providers/copilot/strategy.js.map +1 -1
  138. package/dist/providers/fork-cleanup.d.ts +4 -0
  139. package/dist/providers/fork-cleanup.d.ts.map +1 -0
  140. package/dist/providers/fork-cleanup.js +21 -0
  141. package/dist/providers/fork-cleanup.js.map +1 -0
  142. package/dist/providers/fork.d.ts +8 -3
  143. package/dist/providers/fork.d.ts.map +1 -1
  144. package/dist/providers/fork.js.map +1 -1
  145. package/dist/providers/invoke.d.ts.map +1 -1
  146. package/dist/providers/invoke.js +85 -34
  147. package/dist/providers/invoke.js.map +1 -1
  148. package/dist/providers/live.d.ts.map +1 -1
  149. package/dist/providers/live.js +43 -17
  150. package/dist/providers/live.js.map +1 -1
  151. package/dist/providers/observer-run.d.ts +4 -0
  152. package/dist/providers/observer-run.d.ts.map +1 -0
  153. package/dist/providers/observer-run.js +23 -0
  154. package/dist/providers/observer-run.js.map +1 -0
  155. package/dist/providers/session-launch.d.ts +3 -1
  156. package/dist/providers/session-launch.d.ts.map +1 -1
  157. package/dist/providers/session-launch.js +38 -19
  158. package/dist/providers/session-launch.js.map +1 -1
  159. package/dist/providers/types.d.ts +156 -4
  160. package/dist/providers/types.d.ts.map +1 -1
  161. package/dist/providers/types.js.map +1 -1
  162. package/dist/session/resume.d.ts.map +1 -1
  163. package/dist/session/resume.js +16 -2
  164. package/dist/session/resume.js.map +1 -1
  165. package/dist/terminal/paste-submit.d.ts.map +1 -1
  166. package/dist/terminal/paste-submit.js +43 -37
  167. package/dist/terminal/paste-submit.js.map +1 -1
  168. package/dist/user/host-curate-prompt.d.ts.map +1 -1
  169. package/dist/user/host-curate-prompt.js +9 -6
  170. package/dist/user/host-curate-prompt.js.map +1 -1
  171. package/dist/user/host-prompt.d.ts.map +1 -1
  172. package/dist/user/host-prompt.js +9 -6
  173. package/dist/user/host-prompt.js.map +1 -1
  174. 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 { type SessionLine } from "../../session/reader.js";
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
- * Verify a Copilot session belongs to the expected working directory.
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 re-parsing the same broken JSONL and the
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 session lines.
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 JSONL alongside the failed step's artifacts. Narrow,
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
- * Handles session file discovery in Copilot's UUID-based directory structure
63
- * with CWD verification. Extracts in-session clarifications from `ask_user`
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(snapshot: SessionSnapshot, workdir: string, opts?: {
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":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAO5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAuBzB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAuCnE;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;;;;;;;GAOG;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;IAQpD,eAAe,CACnB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAChF,OAAO,CAAC,MAAM,CAAC;IA8CZ,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,mBAAmB,CACvB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiBxB,qBAAqB,CACzB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAIjB,YAAY;CAI3B"}
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
- * Snapshot existing session UUID directories in ~/.copilot/session-state/.
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 re-parsing the same broken JSONL and the
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 session lines.
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 JSONL alongside the failed step's artifacts. Narrow,
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
- * Handles session file discovery in Copilot's UUID-based directory structure
262
- * with CWD verification. Extracts in-session clarifications from `ask_user`
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
- const dir = this.getSessionDir();
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(snapshot, workdir, opts) {
287
- if (snapshot.skipped) {
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, ForkSubmitFloorPolicy, OptionCatalog, SimplifierPromptOptions, SubagentOptionCatalog, LiveSessionHandler } from "../types.js";
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(opts?: CompletionDetectorOptions): CopilotCompletionDetector;
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":"AAKA,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AASrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAML,yBAAyB,EAG1B,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAiDzD,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,eAAe,EAAE,qBAAqB,CAAoC;IACnF,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;IA+BjE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM;IAOvD,cAAc,CAAC,IAAI,CAAC,EAAE,yBAAyB,GAAG,yBAAyB;IAU3E,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
+ {"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 { readSessionFile } from "../../session/reader.js";
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 = copilotConfigurationFlags(opts, this.options, flagIf(opts.yolo, "--allow-all"));
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 ["-i", `${prefix}${prompt}`, ...optionFlags];
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(opts) {
161
- return new CopilotCompletionDetector(100, 200, this.planMode.exitToolName, opts?.completionMarkerFile, opts?.onActivation);
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 clonedId = randomUUID();
230
- const sourceDir = copilotSourceDir(slot);
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
- await cp(sourceDir, targetDir, { recursive: true, errorOnExist: true, force: false });
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: "copilot",
256
+ command: this.strategy.command,
241
257
  args: [
242
258
  "--resume",
243
- clonedId,
259
+ branchId,
244
260
  ...copilotConfigurationFlags(slot, this.strategy.options, slot.yolo ? ["--allow-all"] : []),
261
+ ...(observer.args ?? []),
245
262
  ],
246
- env: { COPILOT_CUSTOM_INSTRUCTIONS_DIRS: dirs },
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
- cleanup();
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 cloned session file");
279
+ throw new Error("Copilot fork launch did not provide a branch diagnostic path");
259
280
  }
260
281
  const file = launch.forkSessionFile;
261
- const copiedSeparatorCount = await readCopiedSeparatorCount(file);
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
- const file = await waitForFile(lineage.file, timeoutMs, pollMs, opts.signal);
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
- return isCopilotTurnLivenessSettled(lines, latestSubmitIndex);
297
+ void lines;
298
+ void latestSubmitIndex;
299
+ throw copilotJsonlRuntimeDisabled();
294
300
  }
295
301
  latestSubmitIndex(lines) {
296
- return latestCopilotSubmitIndex(lines);
302
+ void lines;
303
+ throw copilotJsonlRuntimeDisabled();
297
304
  }
298
305
  submitCount(lines) {
299
- return countCopilotSubmits(lines);
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
- async function readCopiedSeparatorCount(file) {
318
- return countCopilotResumeSeparators(await readSessionFile(file));
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)