@aipper/aiws 0.0.46 → 0.0.48

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 (137) hide show
  1. package/dist/backup.d.ts +1 -1
  2. package/dist/backup.js.map +1 -1
  3. package/dist/cli.js +19 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/codex-prompts.d.ts +17 -0
  6. package/dist/codex-prompts.js +49 -0
  7. package/dist/codex-prompts.js.map +1 -0
  8. package/dist/codex-skills.d.ts +17 -0
  9. package/dist/codex-skills.js +75 -0
  10. package/dist/codex-skills.js.map +1 -0
  11. package/dist/commands/change-advice.d.ts +8 -6
  12. package/dist/commands/change-advice.js +2 -0
  13. package/dist/commands/change-advice.js.map +1 -1
  14. package/dist/commands/change-evidence-command.js +2 -0
  15. package/dist/commands/change-evidence-command.js.map +1 -1
  16. package/dist/commands/change-evidence-entry.js +1 -0
  17. package/dist/commands/change-evidence-entry.js.map +1 -1
  18. package/dist/commands/change-evidence.js +4 -1
  19. package/dist/commands/change-evidence.js.map +1 -1
  20. package/dist/commands/change-finish.js +9 -0
  21. package/dist/commands/change-finish.js.map +1 -1
  22. package/dist/commands/change-lifecycle-entry.js +2 -0
  23. package/dist/commands/change-lifecycle-entry.js.map +1 -1
  24. package/dist/commands/change-lifecycle.js +3 -0
  25. package/dist/commands/change-lifecycle.js.map +1 -1
  26. package/dist/commands/change-metrics-command.js +1 -0
  27. package/dist/commands/change-metrics-command.js.map +1 -1
  28. package/dist/commands/change-next-command.js +1 -0
  29. package/dist/commands/change-next-command.js.map +1 -1
  30. package/dist/commands/change-review-gates.d.ts +5 -1
  31. package/dist/commands/change-review-gates.js +4 -0
  32. package/dist/commands/change-review-gates.js.map +1 -1
  33. package/dist/commands/change-scope-gate.js +1 -0
  34. package/dist/commands/change-scope-gate.js.map +1 -1
  35. package/dist/commands/change-start.js +7 -4
  36. package/dist/commands/change-start.js.map +1 -1
  37. package/dist/commands/change-state-command.js +1 -0
  38. package/dist/commands/change-state-command.js.map +1 -1
  39. package/dist/commands/change-status-command.js +2 -1
  40. package/dist/commands/change-status-command.js.map +1 -1
  41. package/dist/commands/change-status-context.js +4 -0
  42. package/dist/commands/change-status-context.js.map +1 -1
  43. package/dist/commands/change-utils.js +2 -0
  44. package/dist/commands/change-utils.js.map +1 -1
  45. package/dist/commands/change-validate-entry.js +1 -0
  46. package/dist/commands/change-validate-entry.js.map +1 -1
  47. package/dist/commands/change-validate.js +1 -0
  48. package/dist/commands/change-validate.js.map +1 -1
  49. package/dist/commands/change.d.ts +11 -9
  50. package/dist/commands/change.js +19 -1
  51. package/dist/commands/change.js.map +1 -1
  52. package/dist/commands/codex-install-prompts.d.ts +4 -0
  53. package/dist/commands/codex-install-prompts.js +68 -0
  54. package/dist/commands/codex-install-prompts.js.map +1 -0
  55. package/dist/commands/codex-install-skills.d.ts +4 -0
  56. package/dist/commands/codex-install-skills.js +74 -0
  57. package/dist/commands/codex-install-skills.js.map +1 -0
  58. package/dist/commands/codex-status-prompts.d.ts +4 -0
  59. package/dist/commands/codex-status-prompts.js +44 -0
  60. package/dist/commands/codex-status-prompts.js.map +1 -0
  61. package/dist/commands/codex-status-skills.d.ts +4 -0
  62. package/dist/commands/codex-status-skills.js +54 -0
  63. package/dist/commands/codex-status-skills.js.map +1 -0
  64. package/dist/commands/codex-uninstall-prompts.d.ts +4 -0
  65. package/dist/commands/codex-uninstall-prompts.js +51 -0
  66. package/dist/commands/codex-uninstall-prompts.js.map +1 -0
  67. package/dist/commands/codex-uninstall-skills.d.ts +4 -0
  68. package/dist/commands/codex-uninstall-skills.js +59 -0
  69. package/dist/commands/codex-uninstall-skills.js.map +1 -0
  70. package/dist/commands/dashboard.d.ts +9 -7
  71. package/dist/commands/dashboard.js +3 -0
  72. package/dist/commands/dashboard.js.map +1 -1
  73. package/dist/commands/goal-advance.d.ts +29 -3
  74. package/dist/commands/goal-advance.js +515 -49
  75. package/dist/commands/goal-advance.js.map +1 -1
  76. package/dist/commands/goal-advance.test.d.ts +1 -0
  77. package/dist/commands/goal-advance.test.js +271 -0
  78. package/dist/commands/goal-advance.test.js.map +1 -0
  79. package/dist/commands/goal-help.js +32 -11
  80. package/dist/commands/goal-help.js.map +1 -1
  81. package/dist/commands/goal-validate-state.d.ts +75 -2
  82. package/dist/commands/goal-validate-state.js +369 -5
  83. package/dist/commands/goal-validate-state.js.map +1 -1
  84. package/dist/commands/goal-validate.d.ts +5 -0
  85. package/dist/commands/goal-validate.js +120 -14
  86. package/dist/commands/goal-validate.js.map +1 -1
  87. package/dist/commands/hooks-install.js +1 -0
  88. package/dist/commands/hooks-install.js.map +1 -1
  89. package/dist/commands/hooks-status.js +1 -0
  90. package/dist/commands/hooks-status.js.map +1 -1
  91. package/dist/commands/init.d.ts +7 -2
  92. package/dist/commands/init.js +60 -1
  93. package/dist/commands/init.js.map +1 -1
  94. package/dist/commands/memory.js +0 -2
  95. package/dist/commands/memory.js.map +1 -1
  96. package/dist/commands/opencode-auto.js +2 -0
  97. package/dist/commands/opencode-auto.js.map +1 -1
  98. package/dist/commands/opencode-status.js +1 -0
  99. package/dist/commands/opencode-status.js.map +1 -1
  100. package/dist/commands/opencode-supervise.js +7 -0
  101. package/dist/commands/opencode-supervise.js.map +1 -1
  102. package/dist/commands/rollback.js +1 -0
  103. package/dist/commands/rollback.js.map +1 -1
  104. package/dist/commands/update.js +2 -1
  105. package/dist/commands/update.js.map +1 -1
  106. package/dist/commands/validate.js +3 -0
  107. package/dist/commands/validate.js.map +1 -1
  108. package/dist/commands/ws-deliver.js +1 -0
  109. package/dist/commands/ws-deliver.js.map +1 -1
  110. package/dist/commands/ws-finish.js.map +1 -1
  111. package/dist/commands/ws-migrate.js +1 -0
  112. package/dist/commands/ws-migrate.js.map +1 -1
  113. package/dist/commands/ws-pull.js.map +1 -1
  114. package/dist/commands/ws-push.js +0 -3
  115. package/dist/commands/ws-push.js.map +1 -1
  116. package/dist/commands/ws-submodule-setup.js.map +1 -1
  117. package/dist/dashboard/app.js +1 -1
  118. package/dist/dashboard/app.js.map +1 -1
  119. package/dist/governance.js +5 -0
  120. package/dist/governance.js.map +1 -1
  121. package/dist/hooks/deploy-claude.d.ts +13 -0
  122. package/dist/hooks/deploy-claude.js +67 -0
  123. package/dist/hooks/deploy-claude.js.map +1 -0
  124. package/dist/journal.js +9 -3
  125. package/dist/journal.js.map +1 -1
  126. package/dist/json-schema-lite.js +2 -0
  127. package/dist/json-schema-lite.js.map +1 -1
  128. package/dist/manifest.d.ts +21 -2
  129. package/dist/manifest.js +1 -0
  130. package/dist/manifest.js.map +1 -1
  131. package/dist/memory-bank/store.js +0 -1
  132. package/dist/memory-bank/store.js.map +1 -1
  133. package/dist/opencode-env.js +3 -0
  134. package/dist/opencode-env.js.map +1 -1
  135. package/dist/spec.js +7 -0
  136. package/dist/spec.js.map +1 -1
  137. package/package.json +4 -3
@@ -1,61 +1,377 @@
1
1
  import path from "node:path";
2
- import { VALID_PHASES, readGoalState, writeGoalState, validateGoalState, computeNextPhase, listPendingPhases, resolveGoalStatePath, } from "./goal-validate-state.js";
2
+ import { VALID_PHASES, readGoalState, writeGoalState, validateGoalState, computeNextPhase, listPendingPhases, resolveGoalStatePath, getPhaseGuidance, analyzeGoalDirtyState, healGoalState, findGoalsNeedingMigration, migrateGoalFromMarkdown, } from "./goal-validate-state.js";
3
3
  /**
4
- * `aiws goal advance` command handler.
4
+ * `aiws goal advance` sole phase-boundary writer for goal state.json (TOOLING-003D / §10).
5
5
  *
6
- * Advances a goal to a specified phase or auto-detects the next phase.
7
- * Validates state integrity before making changes.
6
+ * Completes the current phase (if in_progress), then advances to the next phase.
7
+ * Skills/commands MUST call this at each phase boundary; they must not hand-edit
8
+ * checkpoint status / current_phase / status fields.
8
9
  */
9
10
  export async function goalAdvanceCommand(options) {
10
- // Resolve goal state file
11
11
  const statePath = await resolveGoalStatePath(options.goalDir, options.goalId);
12
+ // Missing state.json: optional migration from active/paused .md (§7.6) via --heal
12
13
  if (!statePath) {
13
- const hint = options.goalId
14
- ? `Goal state file not found: ${path.join(options.goalDir, `${options.goalId}.state.json`)}`
15
- : "No goal state files found in " + options.goalDir;
16
- return { ok: false, output: hint };
14
+ if (options.heal) {
15
+ return tryMigrateThenAdvance(options);
16
+ }
17
+ const migrationHint = await migrationHintMessage(options.goalDir, options.goalId);
18
+ return formatResult({
19
+ ok: false,
20
+ goalId: options.goalId ?? "unknown",
21
+ previousPhase: null,
22
+ currentPhase: null,
23
+ status: "error",
24
+ done: false,
25
+ nextActions: null,
26
+ currentGroup: null,
27
+ message: options.goalId
28
+ ? `Goal state file not found: ${path.join(options.goalDir, `${options.goalId}.state.json`)}.${migrationHint}`
29
+ : `No goal state files found in ${options.goalDir}.${migrationHint}`,
30
+ }, options.json ?? false);
17
31
  }
18
32
  const goalId = options.goalId ?? path.basename(statePath, ".state.json");
19
- const state = await readGoalState(statePath);
20
- // Validate state integrity
21
- const validation = validateGoalState(state);
22
- if (!validation.valid) {
23
- return {
33
+ let state = await readGoalState(statePath);
34
+ // Structural validation without dirty (dirty handled separately for clear errors / heal)
35
+ const structural = validateGoalState(state, { includeDirty: false });
36
+ const dirty = analyzeGoalDirtyState(state);
37
+ if (!structural.valid) {
38
+ if (options.heal) {
39
+ // Some structural issues (missing shells, completed_at) are healable
40
+ const heal = healGoalState(state);
41
+ if (heal.healed) {
42
+ state = heal.state;
43
+ const recheck = validateGoalState(state, { includeDirty: false });
44
+ if (!recheck.valid) {
45
+ return formatResult({
46
+ ok: false,
47
+ goalId,
48
+ previousPhase: null,
49
+ currentPhase: state.current_phase ?? null,
50
+ status: "error",
51
+ done: false,
52
+ nextActions: null,
53
+ currentGroup: null,
54
+ message: `State validation failed (unhealable):\n${recheck.errors.join("\n")}\n` +
55
+ `Heal actions attempted: ${heal.actions.join("; ") || "(none)"}`,
56
+ healed: false,
57
+ healActions: heal.actions,
58
+ }, options.json ?? false);
59
+ }
60
+ if (!options.dryRun) {
61
+ await writeGoalState(statePath, state);
62
+ }
63
+ // continue into advance with healed state
64
+ return continueAfterHeal(statePath, state, goalId, options, heal.actions);
65
+ }
66
+ }
67
+ return formatResult({
24
68
  ok: false,
25
- output: `Goal ${goalId} state validation failed:\n${validation.errors.join("\n")}`,
26
- };
69
+ goalId,
70
+ previousPhase: null,
71
+ currentPhase: state.current_phase ?? null,
72
+ status: "error",
73
+ done: false,
74
+ nextActions: null,
75
+ currentGroup: null,
76
+ message: `State validation failed:\n${structural.errors.join("\n")}\n` +
77
+ `Hint: fix structure or run \`aiws goal advance --goal-id ${goalId} --heal\` if dirty/healable.`,
78
+ }, options.json ?? false);
79
+ }
80
+ if (dirty.dirty) {
81
+ if (!options.heal) {
82
+ return formatResult({
83
+ ok: false,
84
+ goalId,
85
+ previousPhase: null,
86
+ currentPhase: state.current_phase ?? null,
87
+ status: "error",
88
+ done: false,
89
+ nextActions: null,
90
+ currentGroup: null,
91
+ message: `Dirty goal state (refusing write):\n` +
92
+ dirty.details.map((d) => `- ${d}`).join("\n") +
93
+ `\nRun: aiws goal advance --goal-id ${goalId} --heal` +
94
+ (options.dryRun ? " --dry-run" : "") +
95
+ `\nDo not hand-edit state.json checkpoint/status fields (sole writer: aiws goal advance).`,
96
+ }, options.json ?? false);
97
+ }
98
+ const heal = healGoalState(state);
99
+ state = heal.state;
100
+ if (!options.dryRun && heal.healed) {
101
+ await writeGoalState(statePath, state);
102
+ }
103
+ // If heal made goal complete, stop unless explicit phase requested
104
+ if (state.status === "complete" && !options.phase) {
105
+ return formatResult({
106
+ ok: true,
107
+ goalId,
108
+ previousPhase: null,
109
+ currentPhase: state.current_phase ?? null,
110
+ status: "complete",
111
+ done: true,
112
+ nextActions: null,
113
+ currentGroup: null,
114
+ message: `Healed ${goalId} to complete` +
115
+ (heal.actions.length ? ` (${heal.actions.join("; ")})` : ""),
116
+ healed: true,
117
+ healActions: heal.actions,
118
+ }, options.json ?? false);
119
+ }
120
+ return continueAfterHeal(statePath, state, goalId, options, heal.actions);
27
121
  }
28
122
  if (options.phase) {
29
- // Explicit phase advance
30
- return advanceToExplicitPhase(statePath, state, goalId, options.phase, options.dryRun);
123
+ return advanceToExplicitPhase(statePath, state, goalId, options);
31
124
  }
32
- // Auto-detect next phase
33
- return autoAdvancePhase(statePath, state, goalId, options.dryRun);
125
+ return autoAdvancePhase(statePath, state, goalId, options);
34
126
  }
35
- async function advanceToExplicitPhase(statePath, state, goalId, phase, dryRun) {
36
- if (!VALID_PHASES.includes(phase)) {
127
+ async function continueAfterHeal(statePath, state, goalId, options, healActions) {
128
+ // After heal, if user only wanted heal without advancing further when already complete
129
+ if (options.phase) {
130
+ const result = await advanceToExplicitPhase(statePath, state, goalId, options);
131
+ return prependHealToOutput(result, healActions, options.json ?? false);
132
+ }
133
+ // Auto-advance only if current phase is in_progress (complete it) or pending next
134
+ // If heal only normalized and phase still needs work, report healed + guidance without forcing complete
135
+ const next = computeNextPhase(state);
136
+ if (next.done) {
137
+ if (!options.dryRun) {
138
+ state.status = "complete";
139
+ state.updated_at = new Date().toISOString();
140
+ await writeGoalState(statePath, state);
141
+ }
142
+ return formatResult({
143
+ ok: true,
144
+ goalId,
145
+ previousPhase: state.current_phase ?? null,
146
+ currentPhase: null,
147
+ status: "complete",
148
+ done: true,
149
+ nextActions: null,
150
+ currentGroup: null,
151
+ message: `Healed and complete: ${goalId}${healActions.length ? ` [${healActions.join("; ")}]` : ""}`,
152
+ healed: true,
153
+ healActions,
154
+ }, options.json ?? false);
155
+ }
156
+ // Do not auto-complete in_progress after heal unless caller wants normal advance semantics
157
+ // Standard advance: complete in_progress then move next
158
+ const advanced = await autoAdvancePhase(statePath, state, goalId, options);
159
+ return prependHealToOutput(advanced, healActions, options.json ?? false);
160
+ }
161
+ function prependHealToOutput(result, healActions, json) {
162
+ if (!healActions.length)
163
+ return result;
164
+ if (!json) {
37
165
  return {
38
- ok: false,
39
- output: `Invalid phase: "${phase}". Valid phases: ${VALID_PHASES.join(", ")}`,
166
+ ok: result.ok,
167
+ output: `Healed: ${healActions.join("; ")}\n${result.output}`,
40
168
  };
41
169
  }
42
- // Check that all dependency phases are complete
170
+ try {
171
+ const obj = JSON.parse(result.output);
172
+ obj.healed = true;
173
+ obj.heal_actions = healActions;
174
+ return { ok: result.ok, output: JSON.stringify(obj, null, 2) };
175
+ }
176
+ catch {
177
+ return result;
178
+ }
179
+ }
180
+ async function tryMigrateThenAdvance(options) {
181
+ const candidates = await findGoalsNeedingMigration(options.goalDir);
182
+ const target = options.goalId
183
+ ? candidates.find((c) => c.goalId === options.goalId)
184
+ : candidates[0];
185
+ if (!target && options.goalId) {
186
+ // try migrate by id even if parse failed to find in list
187
+ const mig = await migrateGoalFromMarkdown(options.goalDir, options.goalId);
188
+ if (!mig.ok) {
189
+ return formatResult({
190
+ ok: false,
191
+ goalId: options.goalId,
192
+ previousPhase: null,
193
+ currentPhase: null,
194
+ status: "error",
195
+ done: false,
196
+ nextActions: null,
197
+ currentGroup: null,
198
+ message: mig.message,
199
+ }, options.json ?? false);
200
+ }
201
+ if (options.dryRun) {
202
+ return formatResult({
203
+ ok: true,
204
+ goalId: options.goalId,
205
+ previousPhase: null,
206
+ currentPhase: "intake",
207
+ status: "healed",
208
+ done: false,
209
+ nextActions: null,
210
+ currentGroup: null,
211
+ message: `[DRY RUN] Would migrate missing state.json for ${options.goalId}`,
212
+ healed: true,
213
+ healActions: [mig.message],
214
+ }, options.json ?? false);
215
+ }
216
+ // re-enter without heal loop: clear heal for normal advance after migration? keep heal false to avoid loop
217
+ return goalAdvanceCommand({
218
+ ...options,
219
+ heal: false,
220
+ goalId: options.goalId,
221
+ });
222
+ }
223
+ if (!target) {
224
+ return formatResult({
225
+ ok: false,
226
+ goalId: options.goalId ?? "unknown",
227
+ previousPhase: null,
228
+ currentPhase: null,
229
+ status: "error",
230
+ done: false,
231
+ nextActions: null,
232
+ currentGroup: null,
233
+ message: "No state.json found and no active/paused goal .md to migrate. " +
234
+ "Create a goal via ws-goal or provide --goal-id.",
235
+ }, options.json ?? false);
236
+ }
237
+ if (options.dryRun) {
238
+ return formatResult({
239
+ ok: true,
240
+ goalId: target.goalId,
241
+ previousPhase: null,
242
+ currentPhase: null,
243
+ status: "healed",
244
+ done: false,
245
+ nextActions: null,
246
+ currentGroup: null,
247
+ message: `[DRY RUN] Would migrate ${target.goalId} from ${target.mdPath} (md state=${target.mdState})`,
248
+ healed: true,
249
+ healActions: [`migrate from markdown (${target.mdState})`],
250
+ }, options.json ?? false);
251
+ }
252
+ const mig = await migrateGoalFromMarkdown(options.goalDir, target.goalId);
253
+ if (!mig.ok) {
254
+ return formatResult({
255
+ ok: false,
256
+ goalId: target.goalId,
257
+ previousPhase: null,
258
+ currentPhase: null,
259
+ status: "error",
260
+ done: false,
261
+ nextActions: null,
262
+ currentGroup: null,
263
+ message: mig.message,
264
+ }, options.json ?? false);
265
+ }
266
+ // After migration, set current_phase to intake in_progress via advance --phase intake or auto
267
+ const statePath = mig.statePath;
268
+ const state = await readGoalState(statePath);
269
+ // §7.6 sets all pending; start intake
270
+ state.current_phase = "intake";
271
+ state.checkpoints["intake"] = {
272
+ status: "in_progress",
273
+ attempts: 1,
274
+ completed_at: null,
275
+ error: null,
276
+ };
277
+ state.updated_at = new Date().toISOString();
278
+ await writeGoalState(statePath, state);
279
+ return formatResult({
280
+ ok: true,
281
+ goalId: target.goalId,
282
+ previousPhase: null,
283
+ currentPhase: "intake",
284
+ status: "healed",
285
+ done: false,
286
+ nextActions: getPhaseGuidance(target.goalId, state),
287
+ currentGroup: null,
288
+ message: `${mig.message}; started phase intake`,
289
+ healed: true,
290
+ healActions: [mig.message, "started intake"],
291
+ }, options.json ?? false);
292
+ }
293
+ async function migrationHintMessage(goalDir, goalId) {
294
+ const candidates = await findGoalsNeedingMigration(goalDir);
295
+ if (goalId) {
296
+ const hit = candidates.find((c) => c.goalId === goalId);
297
+ if (hit) {
298
+ return ` Found active/paused markdown without state.json — run: aiws goal advance --goal-id ${goalId} --heal`;
299
+ }
300
+ return " Use --heal if migrating from active/paused .md (contract §7.6).";
301
+ }
302
+ if (candidates.length > 0) {
303
+ return ` Migration candidates: ${candidates.map((c) => c.goalId).join(", ")}. Run: aiws goal advance --heal`;
304
+ }
305
+ return "";
306
+ }
307
+ async function advanceToExplicitPhase(statePath, state, goalId, options) {
308
+ const phase = options.phase;
309
+ if (!VALID_PHASES.includes(phase)) {
310
+ return formatResult({
311
+ ok: false,
312
+ goalId,
313
+ previousPhase: state.current_phase ?? null,
314
+ currentPhase: null,
315
+ status: "error",
316
+ done: false,
317
+ nextActions: null,
318
+ currentGroup: null,
319
+ message: `Invalid phase: "${phase}". Valid phases: ${VALID_PHASES.join(", ")}`,
320
+ }, options.json ?? false);
321
+ }
322
+ // Complete the current phase first
323
+ const prevPhase = state.current_phase ?? null;
324
+ if (prevPhase && prevPhase !== phase && prevPhase !== "complete") {
325
+ const prevCp = state.checkpoints[prevPhase];
326
+ if (prevCp && prevCp.status === "in_progress") {
327
+ state.checkpoints[prevPhase] = {
328
+ ...prevCp,
329
+ status: "complete",
330
+ completed_at: new Date().toISOString(),
331
+ };
332
+ }
333
+ }
334
+ // Verify all prerequisite phases are complete
43
335
  const phaseIdx = VALID_PHASES.indexOf(phase);
44
336
  for (let i = 0; i < phaseIdx; i++) {
45
337
  const depPhase = VALID_PHASES[i];
46
338
  const depCp = state.checkpoints[depPhase];
47
339
  if (depCp && depCp.status !== "complete") {
48
- return {
340
+ return formatResult({
49
341
  ok: false,
50
- output: `Cannot advance to phase "${phase}": prerequisite phase "${depPhase}" is not complete (${depCp.status})`,
51
- };
342
+ goalId,
343
+ previousPhase: prevPhase,
344
+ currentPhase: state.current_phase ?? null,
345
+ status: "blocked",
346
+ done: false,
347
+ nextActions: {
348
+ phase: depPhase,
349
+ description: `Prerequisite phase "${depPhase}" must be completed before advancing to "${phase}"`,
350
+ needsUserInput: false,
351
+ blockers: [`Phase ${depPhase} is ${depCp.status}`],
352
+ },
353
+ currentGroup: null,
354
+ message: `Cannot advance to "${phase}": prerequisite "${depPhase}" is ${depCp.status}`,
355
+ }, options.json ?? false);
52
356
  }
53
357
  }
54
- if (dryRun) {
55
- return {
358
+ if (options.dryRun) {
359
+ return formatResult({
56
360
  ok: true,
57
- output: `[DRY RUN] Would advance ${goalId} to phase "${phase}"`,
58
- };
361
+ goalId,
362
+ previousPhase: prevPhase,
363
+ currentPhase: phase,
364
+ status: "active",
365
+ done: false,
366
+ nextActions: {
367
+ phase,
368
+ description: `[DRY RUN] Would advance to phase "${phase}". No changes written.`,
369
+ needsUserInput: false,
370
+ blockers: [],
371
+ },
372
+ currentGroup: null,
373
+ message: `[DRY RUN] Would advance ${goalId} to phase "${phase}"`,
374
+ }, options.json ?? false);
59
375
  }
60
376
  // Initialize or update checkpoint for the target phase
61
377
  const existingCp = state.checkpoints[phase];
@@ -66,34 +382,120 @@ async function advanceToExplicitPhase(statePath, state, goalId, phase, dryRun) {
66
382
  error: null,
67
383
  };
68
384
  state.current_phase = phase;
385
+ state.status = state.status === "complete" ? "active" : (state.status ?? "active");
69
386
  state.updated_at = new Date().toISOString();
387
+ // Pre-write validation (include dirty)
388
+ const preWrite = validateGoalState(state, { includeDirty: true });
389
+ if (!preWrite.valid) {
390
+ return formatResult({
391
+ ok: false,
392
+ goalId,
393
+ previousPhase: prevPhase,
394
+ currentPhase: phase,
395
+ status: "error",
396
+ done: false,
397
+ nextActions: null,
398
+ currentGroup: null,
399
+ message: `Refusing write: post-advance state invalid:\n${preWrite.errors.join("\n")}`,
400
+ }, options.json ?? false);
401
+ }
70
402
  await writeGoalState(statePath, state);
71
- return {
403
+ const guidance = getPhaseGuidance(goalId, state);
404
+ return formatResult({
72
405
  ok: true,
73
- output: `Advanced ${goalId} to phase "${phase}"`,
74
- };
406
+ goalId,
407
+ previousPhase: prevPhase,
408
+ currentPhase: phase,
409
+ status: "active",
410
+ done: false,
411
+ nextActions: guidance,
412
+ currentGroup: null,
413
+ message: `Advanced ${goalId} to phase "${phase}"`,
414
+ }, options.json ?? false);
75
415
  }
76
- async function autoAdvancePhase(statePath, state, goalId, dryRun) {
416
+ async function autoAdvancePhase(statePath, state, goalId, options) {
417
+ const prevPhase = state.current_phase ?? null;
418
+ // Step 1: If current phase is in_progress, complete it first
419
+ if (prevPhase && prevPhase !== "complete") {
420
+ const prevCp = state.checkpoints[prevPhase];
421
+ if (prevCp && prevCp.status === "in_progress") {
422
+ state.checkpoints[prevPhase] = {
423
+ ...prevCp,
424
+ status: "complete",
425
+ completed_at: new Date().toISOString(),
426
+ };
427
+ }
428
+ }
429
+ // Step 2: Compute next phase from the updated state
77
430
  const next = computeNextPhase(state);
78
431
  if (next.done) {
79
- return { ok: true, output: `Goal ${goalId} complete` };
432
+ state.status = "complete";
433
+ state.updated_at = new Date().toISOString();
434
+ if (!options.dryRun) {
435
+ const preWrite = validateGoalState(state, { includeDirty: true });
436
+ if (!preWrite.valid) {
437
+ return formatResult({
438
+ ok: false,
439
+ goalId,
440
+ previousPhase: prevPhase,
441
+ currentPhase: null,
442
+ status: "error",
443
+ done: false,
444
+ nextActions: null,
445
+ currentGroup: null,
446
+ message: `Refusing write (complete): ${preWrite.errors.join("; ")}`,
447
+ }, options.json ?? false);
448
+ }
449
+ await writeGoalState(statePath, state);
450
+ }
451
+ return formatResult({
452
+ ok: true,
453
+ goalId,
454
+ previousPhase: prevPhase,
455
+ currentPhase: null,
456
+ status: "complete",
457
+ done: true,
458
+ nextActions: null,
459
+ currentGroup: null,
460
+ message: `Goal ${goalId} complete`,
461
+ }, options.json ?? false);
80
462
  }
81
- if (next.phase === state.current_phase) {
82
- // Current phase not yet complete — show what's pending
463
+ // If next phase is the same as previous (still needs work), report what's pending
464
+ if (!options.dryRun && next.phase === state.current_phase) {
83
465
  const pending = listPendingPhases(state);
84
- return {
466
+ const guidance = getPhaseGuidance(goalId, state);
467
+ return formatResult({
85
468
  ok: true,
86
- output: `Current phase "${state.current_phase}" not yet complete. Pending: ${pending.join(", ")}`,
87
- };
469
+ goalId,
470
+ previousPhase: prevPhase,
471
+ currentPhase: state.current_phase ?? null,
472
+ status: "active",
473
+ done: false,
474
+ nextActions: guidance,
475
+ currentGroup: next.groupId,
476
+ message: `Phase "${state.current_phase}" not yet complete. Pending: ${pending.join(", ")}`,
477
+ }, options.json ?? false);
88
478
  }
89
479
  const groupInfo = next.groupId ? ` [group ${next.groupId}]` : "";
90
- if (dryRun) {
91
- return {
480
+ if (options.dryRun) {
481
+ return formatResult({
92
482
  ok: true,
93
- output: `[DRY RUN] Would advance ${goalId} → "${next.phase}"${groupInfo}`,
94
- };
483
+ goalId,
484
+ previousPhase: prevPhase,
485
+ currentPhase: next.phase,
486
+ status: "active",
487
+ done: false,
488
+ nextActions: {
489
+ phase: next.phase,
490
+ description: `[DRY RUN] Would advance to phase "${next.phase}"${groupInfo}. No changes written.`,
491
+ needsUserInput: false,
492
+ blockers: [],
493
+ },
494
+ currentGroup: next.groupId,
495
+ message: `[DRY RUN] Would advance ${goalId} → "${next.phase}"${groupInfo}`,
496
+ }, options.json ?? false);
95
497
  }
96
- // Initialize or update checkpoint for the next phase
498
+ // Initialize checkpoint for the next phase
97
499
  const existingCp = state.checkpoints[next.phase];
98
500
  state.checkpoints[next.phase] = {
99
501
  status: "in_progress",
@@ -102,11 +504,75 @@ async function autoAdvancePhase(statePath, state, goalId, dryRun) {
102
504
  error: null,
103
505
  };
104
506
  state.current_phase = next.phase;
507
+ state.status = "active";
105
508
  state.updated_at = new Date().toISOString();
509
+ const preWrite = validateGoalState(state, { includeDirty: true });
510
+ if (!preWrite.valid) {
511
+ return formatResult({
512
+ ok: false,
513
+ goalId,
514
+ previousPhase: prevPhase,
515
+ currentPhase: next.phase,
516
+ status: "error",
517
+ done: false,
518
+ nextActions: null,
519
+ currentGroup: next.groupId,
520
+ message: `Refusing write: ${preWrite.errors.join("; ")}`,
521
+ }, options.json ?? false);
522
+ }
106
523
  await writeGoalState(statePath, state);
107
- return {
524
+ const guidance = getPhaseGuidance(goalId, state);
525
+ return formatResult({
108
526
  ok: true,
109
- output: `Next: ${goalId} → "${next.phase}"${groupInfo}`,
527
+ goalId,
528
+ previousPhase: prevPhase,
529
+ currentPhase: next.phase,
530
+ status: "active",
531
+ done: false,
532
+ nextActions: guidance,
533
+ currentGroup: next.groupId,
534
+ message: `Next: ${goalId} → "${next.phase}"${groupInfo}`,
535
+ }, options.json ?? false);
536
+ }
537
+ function formatResult(result, json) {
538
+ if (!json) {
539
+ let text = result.message;
540
+ if (result.healActions && result.healActions.length > 0 && !text.startsWith("Healed")) {
541
+ text = `Heal: ${result.healActions.join("; ")}\n${text}`;
542
+ }
543
+ if (result.nextActions && !result.done) {
544
+ text += `\n\nNext phase: ${result.nextActions.phase}`;
545
+ text += `\nAction: ${result.nextActions.description}`;
546
+ if (result.nextActions.blockers.length > 0) {
547
+ text += `\nBlockers:\n- ${result.nextActions.blockers.join("\n- ")}`;
548
+ }
549
+ if (result.nextActions.needsUserInput) {
550
+ text += "\n⚠️ User input required before continuing.";
551
+ }
552
+ }
553
+ return { ok: result.ok, output: text };
554
+ }
555
+ const jsonOutput = {
556
+ ok: result.ok,
557
+ goal_id: result.goalId,
558
+ previous_phase: result.previousPhase,
559
+ current_phase: result.currentPhase,
560
+ status: result.status,
561
+ done: result.done,
562
+ next_actions: result.nextActions
563
+ ? {
564
+ phase: result.nextActions.phase,
565
+ description: result.nextActions.description,
566
+ needs_user_input: result.nextActions.needsUserInput,
567
+ blockers: result.nextActions.blockers,
568
+ }
569
+ : null,
570
+ current_group: result.currentGroup,
571
+ message: result.message,
572
+ healed: result.healed ?? false,
573
+ heal_actions: result.healActions ?? [],
574
+ sole_writer: "aiws goal advance",
110
575
  };
576
+ return { ok: result.ok, output: JSON.stringify(jsonOutput, null, 2) };
111
577
  }
112
578
  //# sourceMappingURL=goal-advance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"goal-advance.js","sourceRoot":"","sources":["../../src/commands/goal-advance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goal-advance.js","sourceRoot":"","sources":["../../src/commands/goal-advance.ts"],"names":[],"mappings":"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"}