poly-weaver 0.12.4 → 0.12.5

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 (87) hide show
  1. package/dist/agents/runner.d.ts +2 -0
  2. package/dist/agents/runner.d.ts.map +1 -1
  3. package/dist/agents/runner.js +10 -0
  4. package/dist/agents/runner.js.map +1 -1
  5. package/dist/agents/session-resume.d.ts +3 -2
  6. package/dist/agents/session-resume.d.ts.map +1 -1
  7. package/dist/agents/session-resume.js +10 -3
  8. package/dist/agents/session-resume.js.map +1 -1
  9. package/dist/agents/simplifiers/index.d.ts.map +1 -1
  10. package/dist/agents/simplifiers/index.js +1 -5
  11. package/dist/agents/simplifiers/index.js.map +1 -1
  12. package/dist/auto-update/check-agent-updates.d.ts +1 -0
  13. package/dist/auto-update/check-agent-updates.d.ts.map +1 -1
  14. package/dist/auto-update/check-agent-updates.js +80 -8
  15. package/dist/auto-update/check-agent-updates.js.map +1 -1
  16. package/dist/auto-update/detect-agents.d.ts +1 -0
  17. package/dist/auto-update/detect-agents.d.ts.map +1 -1
  18. package/dist/auto-update/detect-agents.js +1 -1
  19. package/dist/auto-update/detect-agents.js.map +1 -1
  20. package/dist/auto-update/install-agents.js +4 -1
  21. package/dist/auto-update/install-agents.js.map +1 -1
  22. package/dist/offscreen/controller.d.ts.map +1 -1
  23. package/dist/offscreen/controller.js +8 -5
  24. package/dist/offscreen/controller.js.map +1 -1
  25. package/dist/offscreen/fork-busy.d.ts +3 -20
  26. package/dist/offscreen/fork-busy.d.ts.map +1 -1
  27. package/dist/offscreen/fork-busy.js +7 -76
  28. package/dist/offscreen/fork-busy.js.map +1 -1
  29. package/dist/offscreen/fork-launch.d.ts +3 -34
  30. package/dist/offscreen/fork-launch.d.ts.map +1 -1
  31. package/dist/offscreen/fork-launch.js +4 -102
  32. package/dist/offscreen/fork-launch.js.map +1 -1
  33. package/dist/providers/claude/strategy.d.ts +10 -1
  34. package/dist/providers/claude/strategy.d.ts.map +1 -1
  35. package/dist/providers/claude/strategy.js +128 -2
  36. package/dist/providers/claude/strategy.js.map +1 -1
  37. package/dist/providers/claude/trust.d.ts +2 -0
  38. package/dist/providers/claude/trust.d.ts.map +1 -0
  39. package/dist/providers/claude/trust.js +22 -0
  40. package/dist/providers/claude/trust.js.map +1 -0
  41. package/dist/providers/codex/config.js +1 -1
  42. package/dist/providers/codex/config.js.map +1 -1
  43. package/dist/providers/codex/strategy.d.ts +7 -1
  44. package/dist/providers/codex/strategy.d.ts.map +1 -1
  45. package/dist/providers/codex/strategy.js +83 -2
  46. package/dist/providers/codex/strategy.js.map +1 -1
  47. package/dist/providers/codex/trust.d.ts +2 -0
  48. package/dist/providers/codex/trust.d.ts.map +1 -0
  49. package/dist/providers/codex/trust.js +92 -0
  50. package/dist/providers/codex/trust.js.map +1 -0
  51. package/dist/providers/copilot/completion.d.ts +5 -3
  52. package/dist/providers/copilot/completion.d.ts.map +1 -1
  53. package/dist/providers/copilot/completion.js +188 -16
  54. package/dist/providers/copilot/completion.js.map +1 -1
  55. package/dist/providers/copilot/strategy.d.ts +9 -1
  56. package/dist/providers/copilot/strategy.d.ts.map +1 -1
  57. package/dist/providers/copilot/strategy.js +138 -2
  58. package/dist/providers/copilot/strategy.js.map +1 -1
  59. package/dist/providers/copilot/trust.d.ts +2 -0
  60. package/dist/providers/copilot/trust.d.ts.map +1 -0
  61. package/dist/providers/copilot/trust.js +45 -0
  62. package/dist/providers/copilot/trust.js.map +1 -0
  63. package/dist/providers/fork.d.ts +64 -0
  64. package/dist/providers/fork.d.ts.map +1 -0
  65. package/dist/providers/fork.js +2 -0
  66. package/dist/providers/fork.js.map +1 -0
  67. package/dist/providers/index.d.ts +2 -1
  68. package/dist/providers/index.d.ts.map +1 -1
  69. package/dist/providers/option-catalog.d.ts.map +1 -1
  70. package/dist/providers/option-catalog.js +14 -129
  71. package/dist/providers/option-catalog.js.map +1 -1
  72. package/dist/providers/trust-utils.d.ts +7 -0
  73. package/dist/providers/trust-utils.d.ts.map +1 -0
  74. package/dist/providers/trust-utils.js +49 -0
  75. package/dist/providers/trust-utils.js.map +1 -0
  76. package/dist/providers/trust.d.ts +1 -4
  77. package/dist/providers/trust.d.ts.map +1 -1
  78. package/dist/providers/trust.js +3 -204
  79. package/dist/providers/trust.js.map +1 -1
  80. package/dist/providers/types.d.ts +25 -0
  81. package/dist/providers/types.d.ts.map +1 -1
  82. package/dist/providers/types.js.map +1 -1
  83. package/package.json +1 -1
  84. package/dist/agents/simplifiers/prompts.d.ts +0 -11
  85. package/dist/agents/simplifiers/prompts.d.ts.map +0 -1
  86. package/dist/agents/simplifiers/prompts.js +0 -24
  87. package/dist/agents/simplifiers/prompts.js.map +0 -1
@@ -1,10 +1,35 @@
1
+ import { join } from "node:path";
2
+ import { SESSION_FILE_WAIT_DEFAULT_MS, snapshotSessionFiles, } from "../../session/locator.js";
3
+ import { INQUIRY_ONLY_INSTRUCTION } from "../fork.js";
1
4
  import { flagIf } from "../types.js";
2
5
  import { versionGte } from "../version.js";
3
- import { ClaudePrimaryDetector } from "./completion.js";
6
+ import { countClaudeSubmits, isClaudeTurnComplete, latestClaudeSubmitIndex, ClaudePrimaryDetector, } from "./completion.js";
4
7
  import { ClaudePlanModeDetector } from "./completion-plan-mode.js";
5
8
  import { ClaudePlanModePtyMonitor, getPlanModePtyPattern, } from "./plan-mode-pty-monitor.js";
6
- import { ClaudeSessionHandler } from "./session.js";
9
+ import { ClaudeSessionHandler, encodeClaudeProjectDir, extractRecentClaudeMessageUuids, findClaudeForkSessionFile, getClaudeSessionDir, } from "./session.js";
10
+ import { ensureClaudeTrust } from "./trust.js";
7
11
  export const CLAUDE_CHILD_ENV = { CLAUDE_CODE_NO_FLICKER: "1" };
12
+ const DEFAULT_FORK_LOCATE_POLL_MS = 500;
13
+ const CLAUDE_OPUS_4_8_MIN_CLI_VERSION = "2.1.152";
14
+ const CLAUDE_SONNET_5_MIN_CLI_VERSION = "2.1.197";
15
+ const CLAUDE_MODELS_LEGACY = [
16
+ "claude-opus-4-7",
17
+ "claude-opus-4-7[1m]",
18
+ ];
19
+ const CLAUDE_MODELS_OPUS_4_8 = [
20
+ "claude-opus-4-8",
21
+ "claude-opus-4-8[1m]",
22
+ "claude-opus-4-7",
23
+ "claude-opus-4-7[1m]",
24
+ ];
25
+ const CLAUDE_MODELS_SONNET_5 = [
26
+ "claude-sonnet-5",
27
+ "claude-sonnet-5[1m]",
28
+ ...CLAUDE_MODELS_OPUS_4_8,
29
+ ];
30
+ const CLAUDE_DEFAULT_MODEL_LEGACY = "claude-opus-4-7[1m]";
31
+ const CLAUDE_DEFAULT_MODEL_OPUS_4_8 = "claude-opus-4-8[1m]";
32
+ const CLAUDE_EFFORTS = ["medium", "high", "xhigh", "max"];
8
33
  export class ClaudeStrategy {
9
34
  name = "claude";
10
35
  displayName = "Claude Code";
@@ -12,7 +37,21 @@ export class ClaudeStrategy {
12
37
  exitSignal = "/exit\n";
13
38
  childEnv = CLAUDE_CHILD_ENV;
14
39
  session = new ClaudeSessionHandler();
40
+ fork = new ClaudeForkHandler();
41
+ forkSubmitFloor = { from: "fork-file", offset: -1 };
15
42
  version = undefined;
43
+ options = {
44
+ models: () => this.claudeModels(),
45
+ defaultModel: () => this.claudeSupportsOpus48()
46
+ ? CLAUDE_DEFAULT_MODEL_OPUS_4_8
47
+ : CLAUDE_DEFAULT_MODEL_LEGACY,
48
+ efforts: (model) => isClaudeFamilyModel(model)
49
+ ? CLAUDE_EFFORTS
50
+ : CLAUDE_EFFORTS.filter((effort) => effort !== "max"),
51
+ defaultEffort: () => "high",
52
+ isKnownModel: (model) => this.claudeModels().includes(model),
53
+ isKnownEffort: (effort, model) => this.options.efforts(model).includes(effort),
54
+ };
16
55
  get planMode() {
17
56
  const native = versionGte(this.version, "2.1.74");
18
57
  return {
@@ -39,6 +78,16 @@ export class ClaudeStrategy {
39
78
  args.push(prompt);
40
79
  return args;
41
80
  }
81
+ async ensureTrust(workdir) {
82
+ await ensureClaudeTrust(workdir);
83
+ }
84
+ simplifierPrompt(outputPlanFile) {
85
+ return [
86
+ "/simplify",
87
+ "",
88
+ `Write the simplification plan as markdown to: ${outputPlanFile}`,
89
+ ].join("\n");
90
+ }
42
91
  createDetector(opts) {
43
92
  const useNativePlanMode = opts?.planMode === true && this.planMode.nativePlanFile === true;
44
93
  if (useNativePlanMode) {
@@ -50,5 +99,82 @@ export class ClaudeStrategy {
50
99
  }
51
100
  return new ClaudePrimaryDetector(200, 500, opts?.completionMarkerFile, opts?.onActivation);
52
101
  }
102
+ claudeSupportsOpus48() {
103
+ return versionGte(this.version, CLAUDE_OPUS_4_8_MIN_CLI_VERSION);
104
+ }
105
+ claudeSupportsSonnet5() {
106
+ return versionGte(this.version, CLAUDE_SONNET_5_MIN_CLI_VERSION);
107
+ }
108
+ claudeModels() {
109
+ if (this.claudeSupportsSonnet5())
110
+ return CLAUDE_MODELS_SONNET_5;
111
+ return this.claudeSupportsOpus48()
112
+ ? CLAUDE_MODELS_OPUS_4_8
113
+ : CLAUDE_MODELS_LEGACY;
114
+ }
115
+ }
116
+ class ClaudeForkHandler {
117
+ async buildLaunch(slot) {
118
+ return {
119
+ command: "claude",
120
+ args: [
121
+ "--resume",
122
+ slot.sourceSessionId,
123
+ "--fork-session",
124
+ "--append-system-prompt",
125
+ INQUIRY_ONLY_INSTRUCTION,
126
+ ...claudeFlags(slot),
127
+ ],
128
+ env: CLAUDE_CHILD_ENV,
129
+ cleanup: () => { },
130
+ };
131
+ }
132
+ async captureLineage(slot, workdir, _launch) {
133
+ const projectDir = join(getClaudeSessionDir(), encodeClaudeProjectDir(workdir));
134
+ const [preSnapshot, sourceUuids] = await Promise.all([
135
+ snapshotSessionFiles(projectDir),
136
+ extractRecentClaudeMessageUuids(slot.sourceSessionPath).catch(() => new Set()),
137
+ ]);
138
+ return {
139
+ kind: "claude",
140
+ projectDir,
141
+ preSnapshot,
142
+ sourceUuids,
143
+ sourceFile: slot.sourceSessionPath,
144
+ };
145
+ }
146
+ async locateSessionFile(lineage, opts = {}) {
147
+ if (lineage.kind !== "claude")
148
+ return undefined;
149
+ try {
150
+ return await findClaudeForkSessionFile(lineage.projectDir, lineage.preSnapshot, lineage.sourceUuids, lineage.sourceFile, {
151
+ signal: opts.signal,
152
+ timeoutMs: opts.timeoutMs ?? SESSION_FILE_WAIT_DEFAULT_MS,
153
+ pollMs: opts.pollMs ?? DEFAULT_FORK_LOCATE_POLL_MS,
154
+ });
155
+ }
156
+ catch {
157
+ return undefined;
158
+ }
159
+ }
160
+ turnComplete(lines) {
161
+ return isClaudeTurnComplete(lines);
162
+ }
163
+ latestSubmitIndex(lines) {
164
+ return latestClaudeSubmitIndex(lines);
165
+ }
166
+ submitCount(lines) {
167
+ return countClaudeSubmits(lines);
168
+ }
169
+ }
170
+ function claudeFlags(slot) {
171
+ return [
172
+ ...(slot.yolo ? ["--dangerously-skip-permissions"] : []),
173
+ ...(slot.model ? ["--model", slot.model] : []),
174
+ ...(slot.effort ? ["--effort", slot.effort] : []),
175
+ ];
176
+ }
177
+ function isClaudeFamilyModel(model) {
178
+ return model?.startsWith("claude-") ?? false;
53
179
  }
54
180
  //# sourceMappingURL=strategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/claude/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,sBAAsB,EAAE,GAAG,EAAE,CAAC;AAEhE,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,aAAa,CAAC;IAC5B,OAAO,GAAG,QAAQ,CAAC;IACnB,UAAU,GAAG,SAAS,CAAC;IACvB,QAAQ,GAAG,gBAAgB,CAAC;IAC5B,OAAO,GAAmB,IAAI,oBAAoB,EAAE,CAAC;IAC9D,OAAO,GAAuB,SAAS,CAAC;IAExC,IAAI,QAAQ;QACV,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB;YAC3D,YAAY,EAAE,cAAc;YAC5B,cAAc,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,MAAM,IAAI,GAAa;YACrB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,gCAAgC,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;SAChC,CAAC;QACF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,IAAgC;QAC7C,MAAM,iBAAiB,GACrB,IAAI,EAAE,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,IAAI,CAAC;QACnE,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,QAAQ;gBACtB,CAAC,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC;YACd,OAAO,IAAI,sBAAsB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,YAAY,EAC1B,OAAO,EACP,OAAO,EACP,IAAI,EAAE,YAAY,CACnB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7F,CAAC;CACF"}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/claude/strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ensureClaudeTrust(workdir: string): Promise<void>;
2
+ //# sourceMappingURL=trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/trust.ts"],"names":[],"mappings":"AASA,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBtE"}
@@ -0,0 +1,22 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ import { isRecord, parseJsonObject, readTextIfExists, } from "../trust-utils.js";
5
+ export async function ensureClaudeTrust(workdir) {
6
+ const configPath = join(homedir(), ".claude.json");
7
+ const key = workdir.replace(/\\/g, "/");
8
+ const content = await readTextIfExists(configPath);
9
+ const config = content === undefined
10
+ ? {}
11
+ : parseJsonObject(content, configPath);
12
+ const projects = isRecord(config.projects) ? config.projects : {};
13
+ config.projects = projects;
14
+ const project = isRecord(projects[key]) ? projects[key] : {};
15
+ if (project.hasTrustDialogAccepted === true)
16
+ return;
17
+ project.hasTrustDialogAccepted = true;
18
+ projects[key] = project;
19
+ await mkdir(dirname(configPath), { recursive: true });
20
+ await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, "utf8");
21
+ }
22
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../../src/providers/claude/trust.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,QAAQ,EACR,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,KAAK,SAAS;QAClC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,IAAI,OAAO,CAAC,sBAAsB,KAAK,IAAI;QAAE,OAAO;IAEpD,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAExB,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC"}
@@ -2,7 +2,7 @@ import { readFile } from "node:fs/promises";
2
2
  import { homedir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { parse as parseToml } from "smol-toml";
5
- import { isRecord, tomlBasicString } from "../trust.js";
5
+ import { isRecord, tomlBasicString } from "../trust-utils.js";
6
6
  export async function readCodexDeveloperInstructions() {
7
7
  try {
8
8
  const configPath = join(homedir(), ".codex", "config.toml");
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/codex/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAClD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,8BAA8B,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,OAAO,CAAC,IAAI,EAAE,0BAA0B,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/codex/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAClD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,8BAA8B,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,OAAO,CAAC,IAAI,EAAE,0BAA0B,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { PlanModeConfig, PlanModeActivator, ProviderStrategy, SessionHandler, BuildArgsOpts, CompletionDetectorOptions } from "../types.js";
1
+ import type { PlanModeConfig, PlanModeActivator, ProviderStrategy, SessionHandler, BuildArgsOpts, CompletionDetectorOptions, ForkSubmitFloorPolicy, OptionCatalog } from "../types.js";
2
+ import type { ForkHandler } from "../fork.js";
2
3
  import { CodexCompletionStrategy } from "./completion.js";
3
4
  export declare const CODEX_ALTERNATE_SCREEN_ARGS: readonly ["-c", "tui.alternate_screen=always"];
4
5
  export declare const CODEX_NO_AUTO_UPDATE_ARGS: readonly ["-c", "check_for_update_on_startup=false"];
@@ -8,10 +9,15 @@ export declare class CodexStrategy implements ProviderStrategy {
8
9
  readonly command = "codex";
9
10
  readonly exitSignal = "\u0003";
10
11
  readonly session: SessionHandler;
12
+ readonly fork: ForkHandler;
13
+ readonly forkSubmitFloor: ForkSubmitFloorPolicy;
11
14
  version: string | undefined;
12
15
  readonly planMode: PlanModeConfig;
13
16
  readonly planModeActivator: PlanModeActivator;
17
+ readonly options: OptionCatalog;
14
18
  buildArgs(prompt: string, opts: BuildArgsOpts): Promise<string[]>;
19
+ ensureTrust(workdir: string): Promise<void>;
20
+ simplifierPrompt(outputPlanFile: string): string;
15
21
  createDetector(opts?: CompletionDetectorOptions): CodexCompletionStrategy;
16
22
  }
17
23
  //# sourceMappingURL=strategy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAI1D,eAAO,MAAM,2BAA2B,gDAAiD,CAAC;AAC1F,eAAO,MAAM,yBAAyB,sDAAuD,CAAC;AAE9F,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,eAAe;IACnC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA6B;IAC7D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAG/B;IACF,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAgC;IAEvE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkCvE,cAAc,CAAC,IAAI,CAAC,EAAE,yBAAyB,GAAG,uBAAuB;CAS1E"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACd,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,YAAY,CAAC;AAIpB,OAAO,EAIL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAUzB,eAAO,MAAM,2BAA2B,gDAAiD,CAAC;AAC1F,eAAO,MAAM,yBAAyB,sDAAuD,CAAC;AAK9F,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,eAAe;IACnC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA6B;IAC7D,QAAQ,CAAC,IAAI,EAAE,WAAW,CAA0B;IACpD,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAsB;IACrE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAG/B;IACF,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAgC;IAC7E,QAAQ,CAAC,OAAO,EAAE,aAAa,CAO7B;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkCjE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAShD,cAAc,CAAC,IAAI,CAAC,EAAE,yBAAyB,GAAG,uBAAuB;CAS1E"}
@@ -1,21 +1,38 @@
1
+ import { INQUIRY_ONLY_INSTRUCTION } from "../fork.js";
2
+ import { SESSION_FILE_WAIT_DEFAULT_MS } from "../../session/locator.js";
1
3
  import { flagIf } from "../types.js";
2
- import { CodexCompletionStrategy } from "./completion.js";
3
- import { CodexSessionHandler } from "./session.js";
4
+ import { countCodexSubmits, isCodexTurnComplete, latestCodexSubmitIndex, CodexCompletionStrategy, } from "./completion.js";
5
+ import { CodexSessionHandler, findCodexForkSessionFile, snapshotCodexSessionFiles, } from "./session.js";
4
6
  import { CodexPlanModeActivator } from "./plan-mode-activator.js";
7
+ import { buildCodexDeveloperInstructionsArgs } from "./config.js";
8
+ import { ensureCodexTrust } from "./trust.js";
5
9
  export const CODEX_ALTERNATE_SCREEN_ARGS = ["-c", "tui.alternate_screen=always"];
6
10
  export const CODEX_NO_AUTO_UPDATE_ARGS = ["-c", "check_for_update_on_startup=false"];
11
+ const DEFAULT_FORK_LOCATE_POLL_MS = 500;
12
+ const CODEX_MODELS = ["gpt-5.5"];
13
+ const CODEX_EFFORTS = ["medium", "high", "xhigh"];
7
14
  export class CodexStrategy {
8
15
  name = "codex";
9
16
  displayName = "Codex CLI";
10
17
  command = "codex";
11
18
  exitSignal = "\x03";
12
19
  session = new CodexSessionHandler();
20
+ fork = new CodexForkHandler();
21
+ forkSubmitFloor = { from: "source" };
13
22
  version = undefined;
14
23
  planMode = {
15
24
  exitToolName: "ExitPlanMode",
16
25
  nativePlanFile: true,
17
26
  };
18
27
  planModeActivator = new CodexPlanModeActivator();
28
+ options = {
29
+ models: () => CODEX_MODELS,
30
+ defaultModel: () => CODEX_MODELS[0] ?? "",
31
+ efforts: () => CODEX_EFFORTS,
32
+ defaultEffort: () => "high",
33
+ isKnownModel: (model) => CODEX_MODELS.includes(model),
34
+ isKnownEffort: (effort) => CODEX_EFFORTS.includes(effort),
35
+ };
19
36
  async buildArgs(prompt, opts) {
20
37
  const yoloFlag = flagIf(opts.yolo, "--dangerously-bypass-approvals-and-sandbox");
21
38
  const modelFlag = opts.model ? ["-m", opts.model] : [];
@@ -46,8 +63,72 @@ export class CodexStrategy {
46
63
  const prefix = opts.promptPrefix ?? "";
47
64
  return [...optionFlags, `${prefix}${prompt}`];
48
65
  }
66
+ async ensureTrust(workdir) {
67
+ await ensureCodexTrust(workdir);
68
+ }
69
+ simplifierPrompt(outputPlanFile) {
70
+ return [
71
+ "Review the changed code for reuse, quality, and efficiency.",
72
+ "Identify issues and propose fixes.",
73
+ "",
74
+ `Write the simplification plan as markdown to: ${outputPlanFile}`,
75
+ ].join("\n");
76
+ }
49
77
  createDetector(opts) {
50
78
  return new CodexCompletionStrategy(100, 200, this.planMode.exitToolName, opts?.completionMarkerFile, opts?.onActivation);
51
79
  }
52
80
  }
81
+ class CodexForkHandler {
82
+ async buildLaunch(slot) {
83
+ const devArgs = await buildCodexDeveloperInstructionsArgs(INQUIRY_ONLY_INSTRUCTION);
84
+ return {
85
+ command: "codex",
86
+ args: [
87
+ "fork",
88
+ slot.sourceSessionId,
89
+ ...codexFlags(slot),
90
+ ...devArgs,
91
+ ],
92
+ cleanup: () => { },
93
+ };
94
+ }
95
+ async captureLineage(slot) {
96
+ const preForkFiles = await snapshotCodexSessionFiles().catch(() => new Set());
97
+ return { kind: "codex", sourceSessionId: slot.sourceSessionId, preForkFiles };
98
+ }
99
+ async locateSessionFile(lineage, opts = {}) {
100
+ if (lineage.kind !== "codex")
101
+ return undefined;
102
+ try {
103
+ return await findCodexForkSessionFile(lineage.sourceSessionId, {
104
+ signal: opts.signal,
105
+ timeoutMs: opts.timeoutMs ?? SESSION_FILE_WAIT_DEFAULT_MS,
106
+ pollMs: opts.pollMs ?? DEFAULT_FORK_LOCATE_POLL_MS,
107
+ sessionsRoot: lineage.sessionsRoot,
108
+ exclude: lineage.preForkFiles,
109
+ });
110
+ }
111
+ catch {
112
+ return undefined;
113
+ }
114
+ }
115
+ turnComplete(lines) {
116
+ return isCodexTurnComplete(lines);
117
+ }
118
+ latestSubmitIndex(lines) {
119
+ return latestCodexSubmitIndex(lines);
120
+ }
121
+ submitCount(lines) {
122
+ return countCodexSubmits(lines);
123
+ }
124
+ }
125
+ function codexFlags(slot) {
126
+ return [
127
+ ...(slot.yolo ? ["--dangerously-bypass-approvals-and-sandbox"] : []),
128
+ ...CODEX_ALTERNATE_SCREEN_ARGS,
129
+ ...CODEX_NO_AUTO_UPDATE_ARGS,
130
+ ...(slot.model ? ["-m", slot.model] : []),
131
+ ...(slot.effort ? ["-c", `model_reasoning_effort="${slot.effort}"`] : []),
132
+ ];
133
+ }
53
134
  //# sourceMappingURL=strategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,IAAI,EAAE,6BAA6B,CAAU,CAAC;AAC1F,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,mCAAmC,CAAU,CAAC;AAE9F,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,WAAW,CAAC;IAC1B,OAAO,GAAG,OAAO,CAAC;IAClB,UAAU,GAAG,MAAM,CAAC;IACpB,OAAO,GAAmB,IAAI,mBAAmB,EAAE,CAAC;IAC7D,OAAO,GAAuB,SAAS,CAAC;IAC/B,QAAQ,GAAmB;QAClC,YAAY,EAAE,cAAc;QAC5B,cAAc,EAAE,IAAI;KACrB,CAAC;IACO,iBAAiB,GAAsB,IAAI,sBAAsB,EAAE,CAAC;IAE7E,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,4CAA4C,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;YAC5B,CAAC,CAAC,CAAC,IAAI,EAAE,2BAA2B,IAAI,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,WAAW,GAAG;YAClB,GAAG,QAAQ;YACX,GAAG,2BAA2B;YAC9B,GAAG,yBAAyB;YAC5B,GAAG,SAAS;YACZ,GAAG,UAAU;SACd,CAAC;QAEF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,oEAAoE;YACpE,qEAAqE;YACrE,oEAAoE;YACpE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,CAAC,GAAG,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAClE,CAAC;QAED,kEAAkE;QAClE,4DAA4D;QAC5D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,cAAc,CAAC,IAAgC;QAC7C,OAAO,IAAI,uBAAuB,CAChC,GAAG,EACH,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,YAAY,EAC1B,IAAI,EAAE,oBAAoB,EAC1B,IAAI,EAAE,YAAY,CACnB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ensureCodexTrust(workdir: string): Promise<void>;
2
+ //# sourceMappingURL=trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/trust.ts"],"names":[],"mappings":"AAUA,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrE"}
@@ -0,0 +1,92 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { parse as parseToml } from "smol-toml";
5
+ import { isRecord, readTextIfExists, tomlBasicString, } from "../trust-utils.js";
6
+ export async function ensureCodexTrust(workdir) {
7
+ const configDir = join(homedir(), ".codex");
8
+ const configPath = join(configDir, "config.toml");
9
+ const projectPath = normalizeCodexProjectPath(workdir);
10
+ await mkdir(configDir, { recursive: true });
11
+ const content = await readTextIfExists(configPath) ?? "";
12
+ if (content.length > 0) {
13
+ const parsed = parseToml(content);
14
+ if (codexProjectIsTrusted(parsed, projectPath))
15
+ return;
16
+ }
17
+ const updated = updateCodexTrust(content, projectPath);
18
+ const updatedParsed = parseToml(updated);
19
+ if (!codexProjectIsTrusted(updatedParsed, projectPath)) {
20
+ throw new Error(`Codex trust entry was not written for ${projectPath}`);
21
+ }
22
+ if (updated !== content) {
23
+ await writeFile(configPath, updated, "utf8");
24
+ }
25
+ }
26
+ function updateCodexTrust(content, projectPath) {
27
+ const eol = content.includes("\r\n") ? "\r\n" : "\n";
28
+ const lines = content === "" ? [] : content.split(/\r?\n/);
29
+ const start = lines.findIndex((line) => isTargetCodexProjectHeader(line, projectPath));
30
+ if (start === -1) {
31
+ const header = codexProjectHeaders(projectPath)[0];
32
+ const prefix = content === "" ? "" : content.endsWith("\n") ? content : `${content}${eol}`;
33
+ const separator = prefix === "" || prefix.endsWith(`${eol}${eol}`) ? "" : eol;
34
+ return `${prefix}${separator}${header}${eol}trust_level = "trusted"${eol}`;
35
+ }
36
+ let end = lines.length;
37
+ for (let index = start + 1; index < lines.length; index++) {
38
+ if (/^\s*\[[^\]]+\]\s*(?:#.*)?$/.test(lines[index])) {
39
+ end = index;
40
+ break;
41
+ }
42
+ }
43
+ for (let index = start + 1; index < end; index++) {
44
+ if (/^\s*trust_level\s*=/.test(lines[index])) {
45
+ if (lines[index].trim() === 'trust_level = "trusted"')
46
+ return content;
47
+ lines[index] = 'trust_level = "trusted"';
48
+ return lines.join(eol);
49
+ }
50
+ }
51
+ lines.splice(start + 1, 0, 'trust_level = "trusted"');
52
+ return lines.join(eol);
53
+ }
54
+ function isTargetCodexProjectHeader(line, projectPath) {
55
+ if (!/^\s*\[/.test(line))
56
+ return false;
57
+ try {
58
+ const parsed = parseToml(`${line}\n__poly_weaver_marker = true\n`);
59
+ const projects = isRecord(parsed.projects) ? parsed.projects : undefined;
60
+ const project = projects && isRecord(projects[projectPath])
61
+ ? projects[projectPath]
62
+ : undefined;
63
+ return project?.__poly_weaver_marker === true;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ function codexProjectHeaders(projectPath) {
70
+ const literal = tomlLiteralString(projectPath);
71
+ const headers = literal ? [`[projects.${literal}]`] : [];
72
+ headers.push(`[projects.${tomlBasicString(projectPath)}]`);
73
+ return headers;
74
+ }
75
+ function tomlLiteralString(value) {
76
+ if (value.includes("'") || /[\u0000-\u001f\u007f]/.test(value))
77
+ return undefined;
78
+ return `'${value}'`;
79
+ }
80
+ function normalizeCodexProjectPath(value) {
81
+ return value.replace(/\//g, "\\").replace(/\\+$/g, "").toLowerCase();
82
+ }
83
+ function codexProjectIsTrusted(parsed, projectPath) {
84
+ if (!isRecord(parsed))
85
+ return false;
86
+ const projects = parsed.projects;
87
+ if (!isRecord(projects))
88
+ return false;
89
+ const project = projects[projectPath];
90
+ return isRecord(project) && project.trust_level === "trusted";
91
+ }
92
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../../src/providers/codex/trust.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,20 @@
1
1
  import { type SessionLine } from "../../session/reader.js";
2
2
  import { AbstractCompletionDetector } from "../base-completion.js";
3
3
  export declare function isCopilotTurnComplete(lines: SessionLine[]): boolean;
4
+ export declare function isCopilotTurnSettled(lines: SessionLine[]): boolean;
5
+ export declare function outstandingBackgroundWork(lines: SessionLine[], endIdx?: number): Set<string>;
4
6
  export declare function latestCopilotSubmitIndex(lines: SessionLine[]): number;
5
7
  export declare function countCopilotSubmits(lines: SessionLine[]): number;
6
8
  /**
7
9
  * Copilot completion detection.
8
10
  *
9
- * Primary signal: latest assistant turn has ended (`turn_end` occurs after
10
- * the latest `turn_start`) in the JSONL session file.
11
+ * Primary signal: latest assistant turn has ended and every background item
12
+ * launched at or before that `turn_end` has completed by then.
11
13
  * Secondary signal: quiet debounce (no new data for `quietMs`).
12
14
  */
13
15
  export declare class CopilotCompletionDetector extends AbstractCompletionDetector {
14
16
  private readonly exitToolName?;
15
- private latestTurnComplete;
17
+ private primaryFired;
16
18
  private exitToolCalled;
17
19
  constructor(pollMs?: number, quietMs?: number, exitToolName?: string | undefined, markerFile?: string, onActivation?: () => void);
18
20
  protected analyzeLines(lines: SessionLine[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAExF,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAcnE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAErE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAEhE;AAED;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,0BAA0B;IAOrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IANhC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAAS;gBAG7B,MAAM,SAAM,EACZ,OAAO,SAAM,EACI,YAAY,CAAC,EAAE,MAAM,YAAA,EACtC,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,IAAI;IAK3B,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI;IAwBlD,SAAS,CAAC,oBAAoB,IAAI,OAAO;IAIzC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;cAIpC,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO;cAIlD,2BAA2B,IAAI,OAAO;CAG1D"}
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAExF,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAYnE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAGnE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAOlE;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,EAAE,EACpB,MAAM,SAAe,GACpB,GAAG,CAAC,MAAM,CAAC,CAuBb;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAErE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAEhE;AAED;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,0BAA0B;IAOrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IANhC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAS;gBAG7B,MAAM,SAAM,EACZ,OAAO,SAAM,EACI,YAAY,CAAC,EAAE,MAAM,YAAA,EACtC,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,IAAI;IAK3B,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI;IAwBlD,SAAS,CAAC,oBAAoB,IAAI,OAAO;IAIzC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;cAIpC,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO;cAIlD,2BAA2B,IAAI,OAAO;CAG1D"}