@xdevops/issue-auto-finish 1.0.93 → 1.0.94

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 (35) hide show
  1. package/dist/{PtyRunner-XMWDMH3L.js → PtyRunner-6RSDKUMM.js} +2 -2
  2. package/dist/ai-runner/PlanFileResolver.d.ts +1 -0
  3. package/dist/ai-runner/PlanFileResolver.d.ts.map +1 -1
  4. package/dist/ai-runner/PtyRunner.d.ts.map +1 -1
  5. package/dist/{ai-runner-S2ATTGWX.js → ai-runner-45IRCBIR.js} +2 -2
  6. package/dist/{analyze-DAVYPBHK.js → analyze-7TY5DYBT.js} +2 -2
  7. package/dist/{braindump-A4R3A4QT.js → braindump-FLX6HEVB.js} +2 -2
  8. package/dist/{chunk-HD6V7KPE.js → chunk-36G3DPO3.js} +80 -40
  9. package/dist/chunk-36G3DPO3.js.map +1 -0
  10. package/dist/{chunk-BPVRMZU4.js → chunk-4JI5AJEA.js} +9 -9
  11. package/dist/{chunk-OPWP73PW.js → chunk-MTXTSSBH.js} +2 -2
  12. package/dist/{chunk-2XACBKPB.js → chunk-RR65A7J4.js} +2 -2
  13. package/dist/{chunk-SNSEW7DS.js → chunk-ZDY5NCP3.js} +1 -1
  14. package/dist/cli.js +5 -5
  15. package/dist/hooks/HookInjector.d.ts +6 -0
  16. package/dist/hooks/HookInjector.d.ts.map +1 -1
  17. package/dist/index.js +4 -4
  18. package/dist/{init-OD7CLRWK.js → init-O7XJLCP3.js} +2 -2
  19. package/dist/lib.js +2 -2
  20. package/dist/{restart-JVVOYC6C.js → restart-4LNDGOOU.js} +2 -2
  21. package/dist/run.js +4 -4
  22. package/dist/{start-INU24RRG.js → start-Z4ODDTJ5.js} +2 -2
  23. package/package.json +1 -1
  24. package/dist/chunk-HD6V7KPE.js.map +0 -1
  25. /package/dist/{PtyRunner-XMWDMH3L.js.map → PtyRunner-6RSDKUMM.js.map} +0 -0
  26. /package/dist/{ai-runner-S2ATTGWX.js.map → ai-runner-45IRCBIR.js.map} +0 -0
  27. /package/dist/{analyze-DAVYPBHK.js.map → analyze-7TY5DYBT.js.map} +0 -0
  28. /package/dist/{braindump-A4R3A4QT.js.map → braindump-FLX6HEVB.js.map} +0 -0
  29. /package/dist/{chunk-BPVRMZU4.js.map → chunk-4JI5AJEA.js.map} +0 -0
  30. /package/dist/{chunk-OPWP73PW.js.map → chunk-MTXTSSBH.js.map} +0 -0
  31. /package/dist/{chunk-2XACBKPB.js.map → chunk-RR65A7J4.js.map} +0 -0
  32. /package/dist/{chunk-SNSEW7DS.js.map → chunk-ZDY5NCP3.js.map} +0 -0
  33. /package/dist/{init-OD7CLRWK.js.map → init-O7XJLCP3.js.map} +0 -0
  34. /package/dist/{restart-JVVOYC6C.js.map → restart-4LNDGOOU.js.map} +0 -0
  35. /package/dist/{start-INU24RRG.js.map → start-Z4ODDTJ5.js.map} +0 -0
@@ -12,7 +12,7 @@ import {
12
12
  isTuiNoise,
13
13
  parseInteractiveDialog,
14
14
  stripAnsi
15
- } from "./chunk-HD6V7KPE.js";
15
+ } from "./chunk-36G3DPO3.js";
16
16
  import "./chunk-TFEPHOVE.js";
17
17
  import "./chunk-G7QI5WDI.js";
18
18
  import "./chunk-2RWGZPNF.js";
@@ -32,4 +32,4 @@ export {
32
32
  parseInteractiveDialog,
33
33
  stripAnsi
34
34
  };
35
- //# sourceMappingURL=PtyRunner-XMWDMH3L.js.map
35
+ //# sourceMappingURL=PtyRunner-6RSDKUMM.js.map
@@ -41,6 +41,7 @@ export declare class PlanFileResolver {
41
41
  static buildContentHint(issueIid: number, issueTitle?: string): string;
42
42
  private listFiles;
43
43
  private findNewFiles;
44
+ private isMetadataFile;
44
45
  /**
45
46
  * Fallback: if no new files found (rare case — plan might have overwritten
46
47
  * an existing file), find the most recently modified file.
@@ -1 +1 @@
1
- {"version":3,"file":"PlanFileResolver.d.ts","sourceRoot":"","sources":["../../src/ai-runner/PlanFileResolver.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAQD;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,WAAW,CAAkC;gBAEzC,QAAQ,CAAC,EAAE,MAAM;IAI7B,0FAA0F;IAC1F,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAKrD,2EAA2E;IAC3E,kBAAkB,IAAI,IAAI;IAQ1B;;;;OAIG;IACH,qBAAqB,IAAI,OAAO;IAShC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAqCtD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAMtE,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,YAAY;IAUpB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,aAAa;CActB"}
1
+ {"version":3,"file":"PlanFileResolver.d.ts","sourceRoot":"","sources":["../../src/ai-runner/PlanFileResolver.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAaD;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,WAAW,CAAkC;gBAEzC,QAAQ,CAAC,EAAE,MAAM;IAI7B,0FAA0F;IAC1F,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAKrD,2EAA2E;IAC3E,kBAAkB,IAAI,IAAI;IAQ1B;;;;OAIG;IACH,qBAAqB,IAAI,OAAO;IAShC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAuCtD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAMtE,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,cAAc;IAKtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,aAAa;CActB"}
@@ -1 +1 @@
1
- {"version":3,"file":"PtyRunner.d.ts","sourceRoot":"","sources":["../../src/ai-runner/PtyRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PtyRunner.d.ts","sourceRoot":"","sources":["../../src/ai-runner/PtyRunner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAe,YAAY,EAAE,MAAM,eAAe,CAAC;AAOhG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAetE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAQD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgCtD;AA+CD;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAkF,CAAC;AAE/G;;;sEAGsE;AACtE,eAAO,MAAM,oBAAoB,QAC8E,CAAC;AAEhH;;;yEAGyE;AACzE,eAAO,MAAM,eAAe,QAC2E,CAAC;AAMxG;mFACmF;AACnF,eAAO,MAAM,uBAAuB,QACqB,CAAC;AAQ1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GAAG,IAAI,CAqC7G;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAKtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAU7D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAsB5D;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAwBhD;AAMD;;;;GAIG;AACH,qBAAa,mBAAmB;IAKlB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAJ1C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,qBAAqB,CAAS;gBAET,aAAa,EAAE,MAAM;IAIlD,IAAI,OAAO,IAAI,OAAO,CAA0B;IAEhD,KAAK,IAAI,IAAI;IAMb,MAAM,IAAI,IAAI;IAMd,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF;AAgCD;;;;;;;GAOG;AACH,qBAAa,SAAU,YAAW,QAAQ;IAStC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAb/B,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAqC;IAErD;kFAC8E;IAC9E,OAAO,CAAC,cAAc,CAAqB;gBAGxB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,WAAW,CAAC,EAAE,MAAM,YAAA,EACpB,YAAY,GAAE,MAAe;IAK1C,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAsFlD,OAAO,IAAI,IAAI;IASf,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAS5C,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAsBlD,0DAA0D;IAC1D,OAAO,CAAC,WAAW;IAKnB;;;;;;;;;OASG;YACW,YAAY;IAa1B,iEAAiE;IACjE,OAAO,CAAC,oBAAoB;IAO5B,iFAAiF;IACjF,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,aAAa;IA2ErB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAgHrB;;;;;;OAMG;YACW,cAAc;IA4C5B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;;;;;;;;OASG;YACW,iBAAiB;IAsH/B,gDAAgD;IAChD,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,gBAAgB;CAsgBzB"}
@@ -2,7 +2,7 @@ import "./chunk-MSL7ROVK.js";
2
2
  import {
3
3
  PlanFileResolver,
4
4
  PtyRunner
5
- } from "./chunk-HD6V7KPE.js";
5
+ } from "./chunk-36G3DPO3.js";
6
6
  import {
7
7
  SdkRunner
8
8
  } from "./chunk-R32Q3RGK.js";
@@ -54,4 +54,4 @@ export {
54
54
  usesDeterministicPlanCopy,
55
55
  validateRunnerRegistry
56
56
  };
57
- //# sourceMappingURL=ai-runner-S2ATTGWX.js.map
57
+ //# sourceMappingURL=ai-runner-45IRCBIR.js.map
@@ -1,5 +1,5 @@
1
1
  import "./chunk-MSL7ROVK.js";
2
- import "./chunk-HD6V7KPE.js";
2
+ import "./chunk-36G3DPO3.js";
3
3
  import "./chunk-R32Q3RGK.js";
4
4
  import {
5
5
  analyze
@@ -77,4 +77,4 @@ async function analyzeCommand(opts) {
77
77
  export {
78
78
  analyzeCommand
79
79
  };
80
- //# sourceMappingURL=analyze-DAVYPBHK.js.map
80
+ //# sourceMappingURL=analyze-7TY5DYBT.js.map
@@ -15,7 +15,7 @@ import {
15
15
  GitOperations
16
16
  } from "./chunk-GPZX4DSY.js";
17
17
  import "./chunk-MSL7ROVK.js";
18
- import "./chunk-HD6V7KPE.js";
18
+ import "./chunk-36G3DPO3.js";
19
19
  import "./chunk-R32Q3RGK.js";
20
20
  import "./chunk-ACVOOHAR.js";
21
21
  import "./chunk-B7TVVODN.js";
@@ -209,4 +209,4 @@ ${bold("\u786E\u8BA4\u6267\u884C\uFF1F")} (${green("y")}=\u786E\u8BA4 / ${red("q
209
209
  export {
210
210
  braindumpCommand
211
211
  };
212
- //# sourceMappingURL=braindump-A4R3A4QT.js.map
212
+ //# sourceMappingURL=braindump-FLX6HEVB.js.map
@@ -24,6 +24,9 @@ var PLAN_DIRS = {
24
24
  "claude-internal": path.join(os.homedir(), ".claude-internal", "plans"),
25
25
  "codebuddy": path.join(os.homedir(), ".codebuddy", "plans")
26
26
  };
27
+ var PLAN_METADATA_PATTERNS = [
28
+ /^00-plan-status\.md$/
29
+ ];
27
30
  var PlanFileResolver = class _PlanFileResolver {
28
31
  plansDir;
29
32
  beforeFiles = /* @__PURE__ */ new Map();
@@ -82,6 +85,7 @@ var PlanFileResolver = class _PlanFileResolver {
82
85
  });
83
86
  return this.fallbackByMtime(afterFiles, contentHint);
84
87
  }
88
+ candidates.sort((a, b) => b.mtime - a.mtime);
85
89
  if (candidates.length === 1) {
86
90
  return this.readCandidate(candidates[0].path, candidates[0].mtime);
87
91
  }
@@ -89,7 +93,6 @@ var PlanFileResolver = class _PlanFileResolver {
89
93
  const matched = this.matchByContent(candidates, contentHint);
90
94
  if (matched) return matched;
91
95
  }
92
- candidates.sort((a, b) => b.mtime - a.mtime);
93
96
  logger2.info("Multiple new plan files found, using most recent", {
94
97
  count: candidates.length,
95
98
  selected: path.basename(candidates[0].path)
@@ -128,12 +131,16 @@ var PlanFileResolver = class _PlanFileResolver {
128
131
  findNewFiles(afterFiles) {
129
132
  const candidates = [];
130
133
  for (const [filePath, mtime] of afterFiles) {
131
- if (!this.beforeFiles.has(filePath)) {
134
+ if (!this.beforeFiles.has(filePath) && !this.isMetadataFile(filePath)) {
132
135
  candidates.push({ path: filePath, mtime });
133
136
  }
134
137
  }
135
138
  return candidates;
136
139
  }
140
+ isMetadataFile(filePath) {
141
+ const basename = path.basename(filePath);
142
+ return PLAN_METADATA_PATTERNS.some((pattern) => pattern.test(basename));
143
+ }
137
144
  /**
138
145
  * Fallback: if no new files found (rare case — plan might have overwritten
139
146
  * an existing file), find the most recently modified file.
@@ -164,21 +171,27 @@ var PlanFileResolver = class _PlanFileResolver {
164
171
  return this.readCandidate(newestPath, newestMtime);
165
172
  }
166
173
  matchByContent(candidates, contentHint) {
174
+ const matches = [];
167
175
  for (const candidate of candidates) {
168
176
  try {
169
177
  const content = fs.readFileSync(candidate.path, "utf-8");
170
178
  if (this.contentMatches(content, contentHint)) {
171
- logger2.info("Plan file matched by content", {
172
- file: path.basename(candidate.path),
173
- hint: contentHint.slice(0, 50)
174
- });
175
- return { sourcePath: candidate.path, content };
179
+ matches.push({ sourcePath: candidate.path, content });
176
180
  }
177
181
  } catch {
178
182
  continue;
179
183
  }
180
184
  }
181
- return null;
185
+ if (matches.length === 0) return null;
186
+ matches.sort((a, b) => b.content.length - a.content.length);
187
+ const best = matches[0];
188
+ logger2.info("Plan file matched by content", {
189
+ file: path.basename(best.sourcePath),
190
+ hint: contentHint.slice(0, 50),
191
+ matchCount: matches.length,
192
+ size: best.content.length
193
+ });
194
+ return best;
182
195
  }
183
196
  contentMatches(content, hint) {
184
197
  const parts = hint.split("|");
@@ -497,7 +510,7 @@ var HookInjector = class {
497
510
  { name: "compact-restore.sh", content: buildCompactRestoreScript(eventsFile, contextFile) },
498
511
  { name: "post-tool-use.sh", content: buildPostToolUseScript(eventsFile, manifestFile, expected) },
499
512
  { name: "post-artifact.sh", content: buildPostArtifactScript(manifestFile, expected) },
500
- { name: "exit-plan-mode.sh", content: buildExitPlanModeScript(eventsFile) },
513
+ { name: "exit-plan-mode.sh", content: buildExitPlanModeScript(eventsFile, ctx.planDir, ctx.phaseExpectedArtifacts?.[0] ?? ctx.expectedArtifacts[0]) },
501
514
  { name: "permission.sh", content: buildPermissionScript(eventsFile) },
502
515
  { name: "protect-files.sh", content: buildProtectFilesScript(eventsFile, ctx.phaseName, ctx.planDir) },
503
516
  { name: "stop.sh", content: buildStopScript(eventsFile, ctx.planDir, phaseExpected) },
@@ -752,11 +765,23 @@ fi
752
765
  exit 0
753
766
  `;
754
767
  }
755
- function buildExitPlanModeScript(eventsFile) {
768
+ function buildExitPlanModeScript(eventsFile, planDir, planArtifact) {
756
769
  return `#!/bin/bash
757
770
  set -euo pipefail
758
771
  INPUT=$(cat)
759
772
 
773
+ PLAN_DIR=${quote(planDir)}
774
+ PLAN_ARTIFACT=${quote(planArtifact ?? "01-plan.md")}
775
+
776
+ PLAN_CONTENT=$(echo "$INPUT" | jq -r '.tool_input.plan // empty')
777
+ if [ -n "$PLAN_CONTENT" ]; then
778
+ mkdir -p "$PLAN_DIR"
779
+ printf '%s' "$PLAN_CONTENT" > "$PLAN_DIR/$PLAN_ARTIFACT"
780
+ BYTES=$(wc -c < "$PLAN_DIR/$PLAN_ARTIFACT")
781
+ printf '{"ts":"%s","event":"plan_captured","file":"%s","path":"%s/%s","bytes":%s}\\n' \\
782
+ "$(date -u +%FT%TZ)" "$PLAN_ARTIFACT" "$PLAN_DIR" "$PLAN_ARTIFACT" "$BYTES" >> ${quote(eventsFile)}
783
+ fi
784
+
760
785
  printf '{"ts":"%s","event":"exit_plan_mode"}\\n' "$(date -u +%FT%TZ)" >> ${quote(eventsFile)}
761
786
 
762
787
  echo '{"hookSpecificOutput":{"hookEventName":"PermissionRequest","decision":{"behavior":"allow"}}}'
@@ -1459,41 +1484,56 @@ var PtyRunner = class {
1459
1484
  });
1460
1485
  return this.buildRunResult(planResult, sessionId);
1461
1486
  }
1462
- logger6.info("Native plan mode: resolving plan file from CLI storage", { sessionId });
1463
- const resolved = resolver.resolve(contentHint);
1464
- if (!resolved) {
1465
- logger6.error("Native plan mode: no plan file found in CLI storage", { sessionId, workDir });
1466
- return {
1467
- success: false,
1468
- output: planResult.output,
1469
- errorMessage: "Plan \u9636\u6BB5\u5B8C\u6210\u4F46\u672A\u5728 CLI \u8BA1\u5212\u76EE\u5F55\u4E2D\u627E\u5230\u8BA1\u5212\u6587\u4EF6",
1470
- sessionId,
1471
- exitCode: null
1472
- };
1473
- }
1474
1487
  const artifactPaths = options.artifactPaths ?? [];
1475
- if (artifactPaths.length > 0) {
1476
- for (const targetPath of artifactPaths) {
1477
- const targetDir = path3.dirname(targetPath);
1478
- if (!fs4.existsSync(targetDir)) {
1479
- fs4.mkdirSync(targetDir, { recursive: true });
1480
- }
1481
- fs4.writeFileSync(targetPath, resolved.content, "utf-8");
1482
- logger6.info("Plan file copied to artifact path", {
1483
- source: path3.basename(resolved.sourcePath),
1484
- target: targetPath,
1485
- size: resolved.content.length
1486
- });
1488
+ const MIN_PLAN_BYTES = 50;
1489
+ const hookHandled = artifactPaths.length > 0 && artifactPaths.every((p) => {
1490
+ try {
1491
+ return fs4.existsSync(p) && fs4.statSync(p).size >= MIN_PLAN_BYTES;
1492
+ } catch {
1493
+ return false;
1487
1494
  }
1488
- } else {
1489
- logger6.warn("Native plan mode: no artifactPaths specified, plan file not copied", {
1495
+ });
1496
+ if (hookHandled) {
1497
+ logger6.info("Native plan mode: plan captured by ExitPlanMode hook", {
1490
1498
  sessionId,
1491
- resolvedFile: resolved.sourcePath
1499
+ artifactPaths
1492
1500
  });
1501
+ } else {
1502
+ logger6.info("Native plan mode: resolving plan file from CLI storage (fallback)", { sessionId });
1503
+ const resolved = resolver.resolve(contentHint);
1504
+ if (!resolved) {
1505
+ logger6.error("Native plan mode: no plan file found in CLI storage", { sessionId, workDir });
1506
+ return {
1507
+ success: false,
1508
+ output: planResult.output,
1509
+ errorMessage: "Plan \u9636\u6BB5\u5B8C\u6210\u4F46\u672A\u5728 CLI \u8BA1\u5212\u76EE\u5F55\u4E2D\u627E\u5230\u8BA1\u5212\u6587\u4EF6",
1510
+ sessionId,
1511
+ exitCode: null
1512
+ };
1513
+ }
1514
+ if (artifactPaths.length > 0) {
1515
+ for (const targetPath of artifactPaths) {
1516
+ const targetDir = path3.dirname(targetPath);
1517
+ if (!fs4.existsSync(targetDir)) {
1518
+ fs4.mkdirSync(targetDir, { recursive: true });
1519
+ }
1520
+ fs4.writeFileSync(targetPath, resolved.content, "utf-8");
1521
+ logger6.info("Plan file copied to artifact path", {
1522
+ source: path3.basename(resolved.sourcePath),
1523
+ target: targetPath,
1524
+ size: resolved.content.length
1525
+ });
1526
+ }
1527
+ } else {
1528
+ logger6.warn("Native plan mode: no artifactPaths specified, plan file not copied", {
1529
+ sessionId,
1530
+ resolvedFile: resolved.sourcePath
1531
+ });
1532
+ }
1493
1533
  }
1494
- logger6.info("Native plan mode completed (deterministic copy)", {
1534
+ logger6.info("Native plan mode completed", {
1495
1535
  sessionId,
1496
- planSource: path3.basename(resolved.sourcePath),
1536
+ hookHandled,
1497
1537
  artifactsCopied: artifactPaths.length
1498
1538
  });
1499
1539
  return this.buildRunResult(planResult, sessionId);
@@ -1961,4 +2001,4 @@ export {
1961
2001
  InputWaitController,
1962
2002
  PtyRunner
1963
2003
  };
1964
- //# sourceMappingURL=chunk-HD6V7KPE.js.map
2004
+ //# sourceMappingURL=chunk-36G3DPO3.js.map