codex-orchestrator 0.1.18 → 0.1.20

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 (71) hide show
  1. package/README.md +132 -33
  2. package/dist/src/codex/command-adapter.d.ts +3 -0
  3. package/dist/src/codex/command-adapter.d.ts.map +1 -1
  4. package/dist/src/codex/command-adapter.js +18 -7
  5. package/dist/src/codex/command-adapter.js.map +1 -1
  6. package/dist/src/config/schema.d.ts +3 -0
  7. package/dist/src/config/schema.d.ts.map +1 -1
  8. package/dist/src/config/schema.js +3 -0
  9. package/dist/src/config/schema.js.map +1 -1
  10. package/dist/src/git/worktree.d.ts +23 -0
  11. package/dist/src/git/worktree.d.ts.map +1 -1
  12. package/dist/src/git/worktree.js +101 -11
  13. package/dist/src/git/worktree.js.map +1 -1
  14. package/dist/src/github/gh-issue-adapter.js +6 -3
  15. package/dist/src/github/gh-issue-adapter.js.map +1 -1
  16. package/dist/src/github/issues.d.ts +1 -1
  17. package/dist/src/github/issues.d.ts.map +1 -1
  18. package/dist/src/index.d.ts +6 -2
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +3 -1
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/process/command.d.ts +3 -0
  23. package/dist/src/process/command.d.ts.map +1 -1
  24. package/dist/src/process/command.js +59 -9
  25. package/dist/src/process/command.js.map +1 -1
  26. package/dist/src/runner/command-utils.d.ts +4 -0
  27. package/dist/src/runner/command-utils.d.ts.map +1 -1
  28. package/dist/src/runner/command-utils.js +40 -1
  29. package/dist/src/runner/command-utils.js.map +1 -1
  30. package/dist/src/runner/completion-report.d.ts +54 -0
  31. package/dist/src/runner/completion-report.d.ts.map +1 -0
  32. package/dist/src/runner/completion-report.js +220 -0
  33. package/dist/src/runner/completion-report.js.map +1 -0
  34. package/dist/src/runner/local-execution-session.d.ts +34 -0
  35. package/dist/src/runner/local-execution-session.d.ts.map +1 -0
  36. package/dist/src/runner/local-execution-session.js +25 -0
  37. package/dist/src/runner/local-execution-session.js.map +1 -0
  38. package/dist/src/runner/local-state.d.ts +1 -0
  39. package/dist/src/runner/local-state.d.ts.map +1 -1
  40. package/dist/src/runner/local-state.js +2 -1
  41. package/dist/src/runner/local-state.js.map +1 -1
  42. package/dist/src/runner/plan-auto-command.d.ts +1 -0
  43. package/dist/src/runner/plan-auto-command.d.ts.map +1 -1
  44. package/dist/src/runner/plan-auto-command.js +55 -29
  45. package/dist/src/runner/plan-auto-command.js.map +1 -1
  46. package/dist/src/runner/prompt.d.ts +2 -53
  47. package/dist/src/runner/prompt.d.ts.map +1 -1
  48. package/dist/src/runner/prompt.js +15 -220
  49. package/dist/src/runner/prompt.js.map +1 -1
  50. package/dist/src/runner/review-gates.d.ts +1 -1
  51. package/dist/src/runner/review-gates.d.ts.map +1 -1
  52. package/dist/src/runner/review-gates.js +20 -1
  53. package/dist/src/runner/review-gates.js.map +1 -1
  54. package/dist/src/runner/run-log.d.ts +18 -0
  55. package/dist/src/runner/run-log.d.ts.map +1 -0
  56. package/dist/src/runner/run-log.js +53 -0
  57. package/dist/src/runner/run-log.js.map +1 -0
  58. package/dist/src/runner/safety.d.ts +1 -1
  59. package/dist/src/runner/safety.d.ts.map +1 -1
  60. package/dist/src/runner/scoped-auto-command.d.ts +4 -0
  61. package/dist/src/runner/scoped-auto-command.d.ts.map +1 -1
  62. package/dist/src/runner/scoped-auto-command.js +120 -36
  63. package/dist/src/runner/scoped-auto-command.js.map +1 -1
  64. package/dist/src/runner/visual-proof-runner.d.ts +1 -1
  65. package/dist/src/runner/visual-proof-runner.d.ts.map +1 -1
  66. package/dist/src/runner/visual-proof-runner.js +64 -9
  67. package/dist/src/runner/visual-proof-runner.js.map +1 -1
  68. package/dist/src/setup/project-config.d.ts.map +1 -1
  69. package/dist/src/setup/project-config.js +5 -0
  70. package/dist/src/setup/project-config.js.map +1 -1
  71. package/package.json +2 -1
@@ -0,0 +1,220 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { validatePlanGraph } from './issue-tree.js';
3
+ export async function readScopedCompletionReport(reportPath) {
4
+ let content;
5
+ try {
6
+ content = await readFile(reportPath, 'utf8');
7
+ }
8
+ catch (error) {
9
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
10
+ return { kind: 'missing' };
11
+ }
12
+ throw error;
13
+ }
14
+ let parsed;
15
+ try {
16
+ parsed = JSON.parse(content);
17
+ }
18
+ catch {
19
+ throw new Error('Invalid scoped completion report: report must be valid JSON');
20
+ }
21
+ if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed) && !('artifacts' in parsed)) {
22
+ parsed.artifacts = [];
23
+ }
24
+ assertScopedCompletionReport(parsed);
25
+ return { kind: 'valid', report: parsed };
26
+ }
27
+ export async function readPlanAutoCompletionReport(reportPath) {
28
+ let content;
29
+ try {
30
+ content = await readFile(reportPath, 'utf8');
31
+ }
32
+ catch (error) {
33
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
34
+ return { kind: 'missing' };
35
+ }
36
+ throw error;
37
+ }
38
+ let parsed;
39
+ try {
40
+ parsed = JSON.parse(content);
41
+ }
42
+ catch {
43
+ throw new Error('Invalid plan-auto completion report: report must be valid JSON');
44
+ }
45
+ assertPlanAutoCompletionReport(parsed);
46
+ return { kind: 'valid', report: parsed };
47
+ }
48
+ function assertScopedCompletionReport(value) {
49
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
50
+ throw new Error('Invalid scoped completion report: report must be an object');
51
+ }
52
+ const record = value;
53
+ if (record.status !== 'completed' && record.status !== 'needs-promotion') {
54
+ throw new Error('Invalid scoped completion report: status must be completed or needs-promotion');
55
+ }
56
+ assertStringArray(record.changes, 'changes');
57
+ assertValidation(record.validation);
58
+ assertArtifacts(record.artifacts);
59
+ assertStringArray(record.skippedChecks, 'skippedChecks');
60
+ assertStringArray(record.residualRisks, 'residualRisks');
61
+ assertProhibitedActions(record.prohibitedActions);
62
+ if (record.status === 'needs-promotion') {
63
+ assertPromotion(record.promotion);
64
+ }
65
+ }
66
+ function assertPlanAutoCompletionReport(value) {
67
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
68
+ throw new Error('Invalid plan-auto completion report: report must be an object');
69
+ }
70
+ const record = value;
71
+ if (record.status !== 'completed') {
72
+ throw new Error('Invalid plan-auto completion report: status must be completed');
73
+ }
74
+ assertPlanParent(record.parent);
75
+ assertPlanGraph(record.graph);
76
+ assertStringArray(record.residualRisks, 'residualRisks', 'Invalid plan-auto completion report');
77
+ const graphValidation = validatePlanGraph(record.graph);
78
+ if (!graphValidation.ok) {
79
+ throw new Error(`Invalid plan-auto completion report: ${graphValidation.errors.join('; ')}`);
80
+ }
81
+ }
82
+ function assertPlanParent(value) {
83
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
84
+ throw new Error('Invalid plan-auto completion report: parent must be an object');
85
+ }
86
+ const record = value;
87
+ if ('title' in record && typeof record.title !== 'string') {
88
+ throw new Error('Invalid plan-auto completion report: parent.title must be a string');
89
+ }
90
+ if (typeof record.body !== 'string' || record.body.trim().length === 0) {
91
+ throw new Error('Invalid plan-auto completion report: parent.body must be a non-empty string');
92
+ }
93
+ }
94
+ function assertPlanGraph(value) {
95
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
96
+ throw new Error('Invalid plan-auto completion report: graph must be an object');
97
+ }
98
+ const record = value;
99
+ if (!Array.isArray(record.nodes)) {
100
+ throw new Error('Invalid plan-auto completion report: graph.nodes must be an array');
101
+ }
102
+ if (!Array.isArray(record.edges)) {
103
+ throw new Error('Invalid plan-auto completion report: graph.edges must be an array');
104
+ }
105
+ if (record.specGate !== 'wave-level') {
106
+ throw new Error('Invalid plan-auto completion report: graph.specGate must be wave-level');
107
+ }
108
+ for (const item of record.nodes) {
109
+ assertPlanChildNode(item);
110
+ }
111
+ for (const item of record.edges) {
112
+ assertPlanDependencyEdge(item);
113
+ }
114
+ }
115
+ function assertPlanChildNode(value) {
116
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
117
+ throw new Error('Invalid plan-auto completion report: graph node must be an object');
118
+ }
119
+ const record = value;
120
+ for (const key of ['stableId', 'title', 'body']) {
121
+ if (typeof record[key] !== 'string' || record[key].length === 0) {
122
+ throw new Error(`Invalid plan-auto completion report: graph node ${key} must be a non-empty string`);
123
+ }
124
+ }
125
+ if ('issueNumber' in record && !Number.isInteger(record.issueNumber)) {
126
+ throw new Error('Invalid plan-auto completion report: graph node issueNumber must be an integer');
127
+ }
128
+ if (record.afkHitl !== 'afk' && record.afkHitl !== 'hitl') {
129
+ throw new Error('Invalid plan-auto completion report: graph node afkHitl must be afk or hitl');
130
+ }
131
+ assertStringArray(record.ownershipScope, 'ownershipScope', 'Invalid plan-auto completion report');
132
+ assertStringArray(record.dependsOn, 'dependsOn', 'Invalid plan-auto completion report');
133
+ assertStringArray(record.verification, 'verification', 'Invalid plan-auto completion report');
134
+ }
135
+ function assertPlanDependencyEdge(value) {
136
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
137
+ throw new Error('Invalid plan-auto completion report: graph edge must be an object');
138
+ }
139
+ const record = value;
140
+ for (const key of ['from', 'to', 'reason']) {
141
+ if (typeof record[key] !== 'string' || record[key].length === 0) {
142
+ throw new Error(`Invalid plan-auto completion report: graph edge ${key} must be a non-empty string`);
143
+ }
144
+ }
145
+ }
146
+ function assertStringArray(value, key, prefix = 'Invalid scoped completion report') {
147
+ if (!Array.isArray(value) || value.some((item) => typeof item !== 'string')) {
148
+ throw new Error(`${prefix}: ${key} must be a string array`);
149
+ }
150
+ }
151
+ function assertValidation(value) {
152
+ if (!Array.isArray(value)) {
153
+ throw new Error('Invalid scoped completion report: validation must be an array');
154
+ }
155
+ for (const item of value) {
156
+ if (typeof item !== 'object' || item === null || Array.isArray(item)) {
157
+ throw new Error('Invalid scoped completion report: validation item must be an object');
158
+ }
159
+ const record = item;
160
+ if (typeof record.command !== 'string' || !['passed', 'failed', 'skipped'].includes(String(record.status)) || typeof record.summary !== 'string') {
161
+ throw new Error('Invalid scoped completion report: validation item is malformed');
162
+ }
163
+ }
164
+ }
165
+ function assertArtifacts(value) {
166
+ if (!Array.isArray(value)) {
167
+ throw new Error('Invalid scoped completion report: artifacts must be an array');
168
+ }
169
+ for (const item of value) {
170
+ if (typeof item !== 'object' || item === null || Array.isArray(item)) {
171
+ throw new Error('Invalid scoped completion report: artifacts item must be an object');
172
+ }
173
+ const record = item;
174
+ if (typeof record.type !== 'string'
175
+ || !['screenshot', 'log', 'other'].includes(record.type)
176
+ || typeof record.description !== 'string'
177
+ || record.description.trim().length === 0) {
178
+ throw new Error('Invalid scoped completion report: artifacts item is malformed');
179
+ }
180
+ if ('path' in record && typeof record.path !== 'string') {
181
+ throw new Error('Invalid scoped completion report: artifacts path must be a string');
182
+ }
183
+ if ('url' in record && typeof record.url !== 'string') {
184
+ throw new Error('Invalid scoped completion report: artifacts url must be a string');
185
+ }
186
+ if (!record.path && !record.url) {
187
+ throw new Error('Invalid scoped completion report: artifacts item must include path or url');
188
+ }
189
+ }
190
+ }
191
+ function assertProhibitedActions(value) {
192
+ const types = new Set(['secret-file-read', 'secret-file-change', 'destructive-db-or-cache', 'production-deploy-or-release']);
193
+ if (!Array.isArray(value)) {
194
+ throw new Error('Invalid scoped completion report: prohibitedActions must be an array');
195
+ }
196
+ for (const item of value) {
197
+ if (typeof item !== 'object' || item === null || Array.isArray(item)) {
198
+ throw new Error('Invalid scoped completion report: prohibitedActions item must be an object');
199
+ }
200
+ const record = item;
201
+ if (typeof record.type !== 'string' || !types.has(record.type) || typeof record.description !== 'string') {
202
+ throw new Error('Invalid scoped completion report: prohibitedActions item is malformed');
203
+ }
204
+ }
205
+ }
206
+ function assertPromotion(value) {
207
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
208
+ throw new Error('Invalid scoped completion report: promotion is required for needs-promotion');
209
+ }
210
+ const record = value;
211
+ if (typeof record.reason !== 'string' || record.reason.trim().length === 0) {
212
+ throw new Error('Invalid scoped completion report: promotion.reason must be non-empty');
213
+ }
214
+ assertStringArray(record.criteria, 'promotion.criteria');
215
+ assertStringArray(record.evidence, 'promotion.evidence');
216
+ if (record.criteria.length === 0 || record.evidence.length === 0) {
217
+ throw new Error('Invalid scoped completion report: promotion criteria and evidence must be non-empty');
218
+ }
219
+ }
220
+ //# sourceMappingURL=completion-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-report.js","sourceRoot":"","sources":["../../../src/runner/completion-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export interface LocalExecutionPhaseInput {
2
+ phaseId: string;
3
+ worktreePath: string;
4
+ }
5
+ export interface LocalExecutionPhaseResult {
6
+ phaseId: string;
7
+ status: 'passed' | 'failed';
8
+ validation: Array<{
9
+ command: string;
10
+ status: 'passed' | 'failed' | 'skipped';
11
+ summary: string;
12
+ }>;
13
+ artifacts: Array<{
14
+ type: 'log' | 'screenshot' | 'other';
15
+ path?: string;
16
+ url?: string;
17
+ description: string;
18
+ }>;
19
+ residualRisks: string[];
20
+ }
21
+ export type LocalExecutionPhaseExecutor = (input: LocalExecutionPhaseInput) => Promise<LocalExecutionPhaseResult>;
22
+ export interface LocalExecutionSessionInput {
23
+ worktreePath: string;
24
+ phases: string[];
25
+ executePhase: LocalExecutionPhaseExecutor;
26
+ }
27
+ export interface LocalExecutionSessionResult {
28
+ worktreePath: string;
29
+ phaseResults: LocalExecutionPhaseResult[];
30
+ status: 'passed' | 'blocked';
31
+ publishReady: boolean;
32
+ }
33
+ export declare function runLocalExecutionSession(input: LocalExecutionSessionInput): Promise<LocalExecutionSessionResult>;
34
+ //# sourceMappingURL=local-execution-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-execution-session.d.ts","sourceRoot":"","sources":["../../../src/runner/local-execution-session.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjG,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7G,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAElH,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,2BAA2B,CAAC;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,yBAAyB,EAAE,CAAC;IAC1C,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAyBtH"}
@@ -0,0 +1,25 @@
1
+ export async function runLocalExecutionSession(input) {
2
+ const phaseResults = [];
3
+ for (const phaseId of input.phases) {
4
+ const result = await input.executePhase({ phaseId, worktreePath: input.worktreePath });
5
+ if (result.phaseId !== phaseId) {
6
+ throw new Error(`Local execution phase ${phaseId} returned mismatched result for ${result.phaseId}`);
7
+ }
8
+ phaseResults.push(result);
9
+ if (result.status === 'failed') {
10
+ return {
11
+ worktreePath: input.worktreePath,
12
+ phaseResults,
13
+ status: 'blocked',
14
+ publishReady: false,
15
+ };
16
+ }
17
+ }
18
+ return {
19
+ worktreePath: input.worktreePath,
20
+ phaseResults,
21
+ status: 'passed',
22
+ publishReady: true,
23
+ };
24
+ }
25
+ //# sourceMappingURL=local-execution-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-execution-session.js","sourceRoot":"","sources":["../../../src/runner/local-execution-session.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAAiC;IAC9E,MAAM,YAAY,GAAgC,EAAE,CAAC;IAErD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACvF,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,mCAAmC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACvG,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO;gBACL,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,YAAY;gBACZ,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,KAAK;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY;QACZ,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,IAAI;KACnB,CAAC;AACJ,CAAC"}
@@ -13,6 +13,7 @@ export interface RunnerProcessMetadata {
13
13
  branchName?: string;
14
14
  promptPath?: string;
15
15
  reportPath?: string;
16
+ logPath?: string;
16
17
  }
17
18
  export interface RunnerStateFile {
18
19
  version: 1;
@@ -1 +1 @@
1
- {"version":3,"file":"local-state.d.ts","sourceRoot":"","sources":["../../../src/runner/local-state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,qBAAqB,EAAE,CAAC;CAC/B;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,uBAAuB;IAG3C,SAAS,IAAI,MAAM;IAIb,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAchC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAazD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3D"}
1
+ {"version":3,"file":"local-state.d.ts","sourceRoot":"","sources":["../../../src/runner/local-state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,qBAAqB,EAAE,CAAC;CAC/B;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,uBAAuB;IAG3C,SAAS,IAAI,MAAM;IAIb,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAchC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAazD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3D"}
@@ -68,6 +68,7 @@ const runKeys = new Set([
68
68
  'branchName',
69
69
  'promptPath',
70
70
  'reportPath',
71
+ 'logPath',
71
72
  ]);
72
73
  function assertValidStateFile(value) {
73
74
  if (typeof value !== 'object' || value === null || Array.isArray(value)) {
@@ -111,7 +112,7 @@ function assertValidRun(value) {
111
112
  if ('lastRecoveredAt' in record && typeof record.lastRecoveredAt !== 'string') {
112
113
  throw new Error('runner metadata lastRecoveredAt must be a string');
113
114
  }
114
- for (const key of ['branchName', 'promptPath', 'reportPath']) {
115
+ for (const key of ['branchName', 'promptPath', 'reportPath', 'logPath']) {
115
116
  if (key in record && typeof record[key] !== 'string') {
116
117
  throw new Error(`runner metadata ${key} must be a string`);
117
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local-state.js","sourceRoot":"","sources":["../../../src/runner/local-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-state.js","sourceRoot":"","sources":["../../../src/runner/local-state.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ export interface PlanAutoCommandResult {
21
21
  worktreePath: string;
22
22
  promptPath: string;
23
23
  reportPath: string;
24
+ logPath: string;
24
25
  childIssues: GitHubIssue[];
25
26
  pullRequest?: GitHubPullRequest;
26
27
  status: 'review-ready' | 'blocked';
@@ -1 +1 @@
1
- {"version":3,"file":"plan-auto-command.d.ts","sourceRoot":"","sources":["../../../src/runner/plan-auto-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzH,OAAO,EAAyB,kBAAkB,EAAwB,MAAM,oBAAoB,CAAC;AAErG,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAA+B,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAiC/F,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,YAAY,CAAC,EAAE;QAAE,GAAG,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;KAAE,CAAC;IACpF,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;CACvB;AAqCD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6QxG"}
1
+ {"version":3,"file":"plan-auto-command.d.ts","sourceRoot":"","sources":["../../../src/runner/plan-auto-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzH,OAAO,EAAyB,kBAAkB,EAAgD,MAAM,oBAAoB,CAAC;AAE7H,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAA+B,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAoC/F,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,YAAY,CAAC,EAAE;QAAE,GAAG,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;KAAE,CAAC;IACpF,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;CACvB;AAwCD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiRxG"}
@@ -5,12 +5,14 @@ import { GitMergeConflictError, GitWorktreeManager, renderBranchTemplate } from
5
5
  import { GhCliIssueAdapter } from '../github/gh-issue-adapter.js';
6
6
  import { GhCliPullRequestAdapter } from '../github/gh-pull-request-adapter.js';
7
7
  import { defaultShellCommandExecutor } from '../process/command.js';
8
- import { bulletList, formatSessionTimestamp, readRunnerConfig } from './command-utils.js';
8
+ import { bulletList, formatSessionTimestamp, mergeArtifacts, readRunnerConfig, renderCommitEvidence } from './command-utils.js';
9
+ import { readPlanAutoCompletionReport, readScopedCompletionReport, } from './completion-report.js';
9
10
  import { claimIssue, discoverIssueWork } from './issue-state-machine.js';
10
11
  import { collectExecutableChildBatches, ensureAutonomousChildBody, isAutonomousChildOfParent, parseAutonomousChildMetadata, topologicalPlanNodes, } from './issue-tree.js';
11
12
  import { RunnerStateStore } from './local-state.js';
12
- import { buildIssueTreeChildPrompt, buildPlanAutoPrompt, readScopedCompletionReport, readPlanAutoCompletionReport, sessionPromptPath, sessionReportPath, writeDurablePrompt, } from './prompt.js';
13
+ import { buildIssueTreeChildPrompt, buildPlanAutoPrompt, sessionPromptPath, sessionReportPath, writeDurablePrompt, } from './prompt.js';
13
14
  import { evaluateReviewGates } from './review-gates.js';
15
+ import { sessionLogPath } from './run-log.js';
14
16
  import { validateChangedPaths, validateCompletionReportSafety, validateNoAgentOwnedGitPublication, } from './safety.js';
15
17
  import { cleanupSessionCodexHome, sessionCodexHomePath } from './session-home.js';
16
18
  import { runRunnerVisualProof } from './visual-proof-runner.js';
@@ -38,6 +40,7 @@ export async function runPlanAutoCommand(options) {
38
40
  const worktreePath = join(targetRoot, config.runner.workspaceRoot, `tree-${options.issueNumber}`);
39
41
  let promptPath = '';
40
42
  let reportPath = '';
43
+ let logPath = '';
41
44
  const childIssues = [];
42
45
  let pullRequest;
43
46
  await claimIssue(issueAdapter, config, options.issueNumber, 'plan-parent', now);
@@ -51,6 +54,7 @@ export async function runPlanAutoCommand(options) {
51
54
  const sessionId = `plan-${options.issueNumber}-${formatSessionTimestamp(now)}`;
52
55
  promptPath = sessionPromptPath({ targetRoot, config, issueNumber: options.issueNumber, sessionId });
53
56
  reportPath = sessionReportPath({ targetRoot, config, issueNumber: options.issueNumber, sessionId });
57
+ logPath = sessionLogPath({ targetRoot, config, issueNumber: options.issueNumber, sessionId });
54
58
  const isolatedHomePath = sessionCodexHomePath({ targetRoot, sessionId });
55
59
  await mkdir(dirname(reportPath), { recursive: true });
56
60
  await mkdir(isolatedHomePath, { recursive: true });
@@ -79,6 +83,7 @@ export async function runPlanAutoCommand(options) {
79
83
  branchName,
80
84
  promptPath,
81
85
  reportPath,
86
+ logPath,
82
87
  retryCount: 0,
83
88
  createdAt: now.toISOString(),
84
89
  updatedAt: now.toISOString(),
@@ -97,13 +102,14 @@ export async function runPlanAutoCommand(options) {
97
102
  issueNumber: options.issueNumber,
98
103
  sessionId,
99
104
  branchName,
105
+ logPath,
100
106
  });
101
107
  }
102
108
  finally {
103
109
  await cleanupSessionCodexHome(isolatedHomePath);
104
110
  }
105
111
  const afterHead = await git.getHead(worktreePath);
106
- const base = baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues);
112
+ const base = baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, logPath, childIssues);
107
113
  if (beforeHead !== afterHead) {
108
114
  return finishPlanBlocked(issueAdapter, config, base, ['Planning session changed git HEAD; planning must not commit.'], []);
109
115
  }
@@ -161,7 +167,7 @@ export async function runPlanAutoCommand(options) {
161
167
  if (failures.length > 0) {
162
168
  const successful = settled.flatMap((result) => result.status === 'fulfilled' ? [result.value] : []);
163
169
  await blockFailedBatch(issueAdapter, config, options.issueNumber, failures, successful);
164
- return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues), [
170
+ return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, logPath, childIssues), [
165
171
  'Child batch failed before merge; no child from the failed batch was merged, pushed, or published.',
166
172
  ...failures.map((failure) => failure.child ? `#${failure.child.issue.number}: ${failure.message}` : failure.message),
167
173
  ], childIssues);
@@ -179,7 +185,7 @@ export async function runPlanAutoCommand(options) {
179
185
  catch (error) {
180
186
  if (error instanceof GitMergeConflictError) {
181
187
  await handleMergeConflict(git, issueAdapter, config, options.issueNumber, error, childResult, orderedBatchResults);
182
- return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues), [
188
+ return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, logPath, childIssues), [
183
189
  `Merge conflict while merging #${childResult.child.issue.number} from ${childResult.branchName}.`,
184
190
  error.stderr || error.stdout,
185
191
  ], childIssues);
@@ -210,7 +216,7 @@ export async function runPlanAutoCommand(options) {
210
216
  await issueAdapter.postComment(options.issueNumber, reportComment);
211
217
  await store.removeRun(options.issueNumber);
212
218
  return {
213
- ...baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues),
219
+ ...baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, logPath, childIssues),
214
220
  status: 'review-ready',
215
221
  pullRequest,
216
222
  reportComment,
@@ -221,7 +227,7 @@ export async function runPlanAutoCommand(options) {
221
227
  if (pullRequest) {
222
228
  throw new Error(`Issue-tree execution failed after draft PR creation (${pullRequest.url}); not marking parent blocked: ${message}`);
223
229
  }
224
- return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues), [message], childIssues);
230
+ return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, logPath, childIssues), [message], childIssues);
225
231
  }
226
232
  }
227
233
  async function persistChildNode(issueAdapter, config, parentIssueNumber, node) {
@@ -335,6 +341,12 @@ async function executeChild(input) {
335
341
  issueNumber: childIssueNumber,
336
342
  sessionId,
337
343
  });
344
+ const logPath = sessionLogPath({
345
+ targetRoot: input.targetRoot,
346
+ config: input.config,
347
+ issueNumber: childIssueNumber,
348
+ sessionId,
349
+ });
338
350
  const isolatedHomePath = sessionCodexHomePath({ targetRoot: input.targetRoot, sessionId });
339
351
  const store = new RunnerStateStore(input.targetRoot, input.config);
340
352
  await input.git.createIssueWorktree({
@@ -375,6 +387,7 @@ async function executeChild(input) {
375
387
  branchName,
376
388
  promptPath,
377
389
  reportPath,
390
+ logPath,
378
391
  retryCount: 0,
379
392
  createdAt: input.now.toISOString(),
380
393
  updatedAt: input.now.toISOString(),
@@ -393,13 +406,16 @@ async function executeChild(input) {
393
406
  issueNumber: childIssueNumber,
394
407
  sessionId,
395
408
  branchName,
409
+ logPath,
396
410
  });
397
411
  }
398
412
  finally {
399
413
  await cleanupSessionCodexHome(isolatedHomePath);
400
414
  }
401
415
  const afterHead = await input.git.getHead(worktreePath);
402
- const publicationViolations = validateNoAgentOwnedGitPublication(beforeHead, afterHead);
416
+ const publicationViolations = input.config.runner.allowAgentLocalCommits
417
+ ? []
418
+ : validateNoAgentOwnedGitPublication(beforeHead, afterHead);
403
419
  if (publicationViolations.length > 0) {
404
420
  throw new Error(publicationViolations.map((violation) => violation.message).join('; '));
405
421
  }
@@ -415,7 +431,8 @@ async function executeChild(input) {
415
431
  promotion ? `Evidence: ${promotion.evidence.join(', ')}` : undefined,
416
432
  ].filter(Boolean).join(' '));
417
433
  }
418
- let changedFiles = await input.git.listChangedFiles(worktreePath);
434
+ let changeSet = await input.git.collectSessionChangeSet({ worktreePath, baseHead: beforeHead });
435
+ let changedFiles = changeSet.changedPaths;
419
436
  if (changedFiles.length === 0) {
420
437
  throw new Error('Codex completed without file changes');
421
438
  }
@@ -439,7 +456,8 @@ async function executeChild(input) {
439
456
  validation = [...validation, ...runnerVisualProof.validation];
440
457
  const artifacts = mergeArtifacts(report.artifacts, runnerVisualProof.artifacts);
441
458
  if (runnerVisualProof.artifacts.length > 0) {
442
- changedFiles = await input.git.listChangedFiles(worktreePath);
459
+ changeSet = await input.git.collectSessionChangeSet({ worktreePath, baseHead: beforeHead });
460
+ changedFiles = changeSet.changedPaths;
443
461
  }
444
462
  const residualRisks = [...report.residualRisks];
445
463
  if (validation.some((line) => line.status === 'failed')) {
@@ -457,19 +475,24 @@ async function executeChild(input) {
457
475
  if (!reviewGate.ok) {
458
476
  throw new Error(reviewGate.reasons.join('; '));
459
477
  }
460
- await input.git.commitAll({
461
- worktreePath,
462
- message: `Codex: implement issue #${childIssueNumber} for parent #${input.parentIssue.number}`,
463
- });
478
+ if (!(await input.git.isWorktreeClean(worktreePath))) {
479
+ await input.git.commitAll({
480
+ worktreePath,
481
+ message: `Codex: implement issue #${childIssueNumber} for parent #${input.parentIssue.number}`,
482
+ });
483
+ changeSet = await input.git.collectSessionChangeSet({ worktreePath, baseHead: beforeHead });
484
+ }
464
485
  return {
465
486
  child: input.child,
466
487
  branchName,
467
488
  worktreePath,
468
489
  promptPath,
469
490
  reportPath,
491
+ logPath,
470
492
  changedFiles,
471
493
  validation,
472
494
  artifacts,
495
+ commits: changeSet.commits,
473
496
  skippedChecks: report.skippedChecks,
474
497
  residualRisks,
475
498
  };
@@ -493,19 +516,6 @@ async function runConfiguredChecks(config, worktreePath, shellExecutor, reportVa
493
516
  }
494
517
  return lines;
495
518
  }
496
- function mergeArtifacts(existing, additions) {
497
- const seen = new Set(existing.map((artifact) => artifact.url ?? artifact.path ?? artifact.description));
498
- const merged = [...existing];
499
- for (const artifact of additions) {
500
- const key = artifact.url ?? artifact.path ?? artifact.description;
501
- if (seen.has(key)) {
502
- continue;
503
- }
504
- seen.add(key);
505
- merged.push(artifact);
506
- }
507
- return merged;
508
- }
509
519
  async function blockFailedBatch(issueAdapter, config, parentIssueNumber, failures, successfulUnmerged) {
510
520
  for (const failure of failures) {
511
521
  if (!failure.child) {
@@ -565,6 +575,8 @@ async function finishPlanBlocked(issueAdapter, config, result, reasons, mutatedC
565
575
  `codex-orchestrator blocked parent issue-tree execution for #${result.parentIssueNumber}`,
566
576
  'Reasons',
567
577
  ...bulletList(reasons),
578
+ 'Log',
579
+ ...bulletList([result.logPath]),
568
580
  'Mutated Child Issues',
569
581
  ...bulletList(mutatedChildren.map((issue) => `#${issue.number} ${issue.title}`)),
570
582
  ].join('\n');
@@ -606,6 +618,10 @@ function buildChildReviewReport(parentIssueNumber, result) {
606
618
  ...result.validation.map((line) => `- ${line.command}: ${line.status} - ${line.summary}`),
607
619
  'Proof Artifacts',
608
620
  ...renderProofArtifacts(result.artifacts),
621
+ 'Local Commits',
622
+ ...renderCommitEvidence(result.commits),
623
+ 'Log',
624
+ ...bulletList([result.logPath]),
609
625
  'Skipped Checks',
610
626
  ...bulletList(result.skippedChecks),
611
627
  'Residual Risks',
@@ -628,6 +644,10 @@ function buildIssueTreeReviewReport(parentIssueNumber, pullRequest, batches, chi
628
644
  ...bulletList(childResults.flatMap((result) => result.skippedChecks)),
629
645
  'Proof Artifacts',
630
646
  ...childResults.flatMap((result) => renderProofArtifacts(result.artifacts).map((line) => `- #${result.child.issue.number} ${line.replace(/^- /, '')}`)),
647
+ 'Logs',
648
+ ...childResults.map((result) => `- #${result.child.issue.number}: ${result.logPath}`),
649
+ 'Local Commits',
650
+ ...childResults.flatMap((result) => renderCommitEvidence(result.commits).map((line) => `- #${result.child.issue.number} ${line.replace(/^- /, '')}`)),
631
651
  'Residual Risks',
632
652
  ...bulletList(childResults.flatMap((result) => result.residualRisks)),
633
653
  ].join('\n');
@@ -655,6 +675,12 @@ function buildIssueTreePullRequestBody(parentIssueNumber, childIssues, childResu
655
675
  'Proof artifacts:',
656
676
  ...childResults.flatMap((result) => renderProofArtifacts(result.artifacts).map((line) => `- #${result.child.issue.number} ${line.replace(/^- /, '')}`)),
657
677
  '',
678
+ 'Logs:',
679
+ ...childResults.map((result) => `- #${result.child.issue.number}: ${result.logPath}`),
680
+ '',
681
+ 'Local commits:',
682
+ ...childResults.flatMap((result) => renderCommitEvidence(result.commits).map((line) => `- #${result.child.issue.number} ${line.replace(/^- /, '')}`)),
683
+ '',
658
684
  'Residual risks:',
659
685
  ...bulletList(childResults.flatMap((result) => result.residualRisks)),
660
686
  '',
@@ -677,7 +703,7 @@ function renderProofArtifacts(artifacts) {
677
703
  return artifact.type === 'screenshot' ? `- ![${label.replace(/[\[\]]/g, '')}](${target})` : `- ${label}: ${target}`;
678
704
  });
679
705
  }
680
- function baseResult(parentIssueNumber, branchName, worktreePath, promptPath, reportPath, childIssues) {
681
- return { parentIssueNumber, branchName, worktreePath, promptPath, reportPath, childIssues };
706
+ function baseResult(parentIssueNumber, branchName, worktreePath, promptPath, reportPath, logPath, childIssues) {
707
+ return { parentIssueNumber, branchName, worktreePath, promptPath, reportPath, logPath, childIssues };
682
708
  }
683
709
  //# sourceMappingURL=plan-auto-command.js.map