maxsimcli 4.15.3 → 4.15.4

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 (33) hide show
  1. package/dist/assets/CHANGELOG.md +7 -0
  2. package/dist/assets/hooks/maxsim-statusline.cjs +46 -7
  3. package/dist/assets/hooks/maxsim-statusline.cjs.map +1 -1
  4. package/dist/assets/templates/references/git-planning-commit.md +1 -1
  5. package/dist/assets/templates/references/questioning.md +1 -1
  6. package/dist/assets/templates/templates/codebase/structure.md +1 -1
  7. package/dist/assets/templates/templates/milestone-archive.md +3 -3
  8. package/dist/assets/templates/workflows/batch.md +2 -3
  9. package/dist/assets/templates/workflows/diagnose-issues.md +6 -6
  10. package/dist/assets/templates/workflows/discovery-phase.md +6 -7
  11. package/dist/assets/templates/workflows/discuss-phase.md +8 -11
  12. package/dist/assets/templates/workflows/execute-phase.md +5 -49
  13. package/dist/assets/templates/workflows/execute-plan.md +0 -6
  14. package/dist/assets/templates/workflows/go.md +2 -2
  15. package/dist/assets/templates/workflows/help.md +1 -1
  16. package/dist/assets/templates/workflows/init-existing.md +0 -5
  17. package/dist/assets/templates/workflows/new-milestone.md +2 -7
  18. package/dist/assets/templates/workflows/new-project.md +0 -5
  19. package/dist/assets/templates/workflows/quick.md +0 -1
  20. package/dist/assets/templates/workflows/sdd.md +0 -2
  21. package/dist/assets/templates/workflows/settings.md +2 -7
  22. package/dist/assets/templates/workflows/verify-work.md +2 -16
  23. package/dist/cli.cjs +11 -56
  24. package/dist/cli.cjs.map +1 -1
  25. package/dist/core-D5zUr9cb.cjs.map +1 -1
  26. package/dist/install.cjs +10 -26
  27. package/dist/install.cjs.map +1 -1
  28. package/dist/mcp-server.cjs +2 -38
  29. package/dist/mcp-server.cjs.map +1 -1
  30. package/dist/skills-CjFWZIGM.cjs.map +1 -1
  31. package/package.json +1 -1
  32. package/dist/assets/templates/references/dashboard-bridge.md +0 -59
  33. package/dist/assets/templates/workflows/plan-phase.md +0 -501
@@ -14,8 +14,6 @@ Fresh context per task. No context bleeding between tasks. Review is mandatory,
14
14
 
15
15
  <required_reading>
16
16
  Read STATE.md before any operation to load project context.
17
-
18
- @./references/dashboard-bridge.md
19
17
  </required_reading>
20
18
 
21
19
  <process>
@@ -4,13 +4,8 @@ Interactive configuration of MAXSIM workflow agents (research, plan_checker, ver
4
4
 
5
5
  <required_reading>
6
6
  Read all files referenced by the invoking prompt's execution_context before starting.
7
- @./references/dashboard-bridge.md
8
7
  </required_reading>
9
8
 
10
- <tool_mandate>
11
- **Question routing:** At workflow start, probe for the dashboard (see @dashboard-bridge). If `DASHBOARD_ACTIVE = true`, route ALL `AskUserQuestion` calls through `mcp__maxsim-dashboard__ask_question` using the schema translation rules from @dashboard-bridge. If `DASHBOARD_ACTIVE = false`, use `AskUserQuestion` as normal.
12
- </tool_mandate>
13
-
14
9
  <process>
15
10
 
16
11
  <step name="ensure_and_load_config">
@@ -33,7 +28,7 @@ Parse current values (default to `true` if not present):
33
28
  - `workflow.research` — spawn researcher during /maxsim:plan
34
29
  - `workflow.plan_checker` — spawn plan checker during /maxsim:plan
35
30
  - `workflow.verifier` — spawn verifier during /maxsim:execute
36
- - `workflow.nyquist_validation` — validation architecture research during plan-phase
31
+ - `workflow.nyquist_validation` — validation architecture research during planning
37
32
  - `model_profile` — which model each agent uses (default: `balanced`)
38
33
  - `git.branching_strategy` — branching approach (default: `"none"`)
39
34
  </step>
@@ -94,7 +89,7 @@ AskUserQuestion([
94
89
  header: "Nyquist",
95
90
  multiSelect: false,
96
91
  options: [
97
- { label: "Yes (Recommended)", description: "Research automated test coverage during plan-phase. Adds validation requirements to plans. Blocks approval if tasks lack automated verify." },
92
+ { label: "Yes (Recommended)", description: "Research automated test coverage during planning. Adds validation requirements to plans. Blocks approval if tasks lack automated verify." },
98
93
  { label: "No", description: "Skip validation research. Good for rapid prototyping or no-test phases." }
99
94
  ]
100
95
  },
@@ -15,7 +15,6 @@ No Pass/Fail buttons. No severity questions. Just: "Here's what should happen. D
15
15
  </philosophy>
16
16
 
17
17
  <required_reading>
18
- @./references/dashboard-bridge.md
19
18
  </required_reading>
20
19
 
21
20
  <template>
@@ -178,20 +177,7 @@ Proceed to `present_test`.
178
177
 
179
178
  Read Current Test section from UAT file.
180
179
 
181
- **If `DASHBOARD_ACTIVE`** (see @dashboard-bridge): present test via MCP tool:
182
- ```
183
- mcp__maxsim-dashboard__ask_question(
184
- question: "**Test {number}: {name}**\n\n{expected}\n\n---\nSelect result or describe what's wrong:",
185
- options: [
186
- { value: "pass", label: "Pass" },
187
- { value: "skip", label: "Skip" }
188
- ],
189
- allow_free_text: true
190
- )
191
- ```
192
- Map response: "pass"/"skip" → handle as pass/skip. Any other text → logged as issue.
193
-
194
- **If `DASHBOARD_ACTIVE = false`**: display using checkpoint box format:
180
+ Display using checkpoint box format:
195
181
 
196
182
  ```
197
183
  ╔══════════════════════════════════════════════════════════════╗
@@ -253,7 +239,7 @@ reported: "{verbatim user response}"
253
239
  severity: {inferred}
254
240
  ```
255
241
 
256
- Append to Gaps section (structured YAML for plan-phase --gaps):
242
+ Append to Gaps section (structured YAML for plan --gaps):
257
243
  ```yaml
258
244
  - truth: "{expected behavior from test}"
259
245
  status: failed
package/dist/cli.cjs CHANGED
@@ -4688,6 +4688,12 @@ const MODEL_PROFILES = {
4688
4688
  balanced: "sonnet",
4689
4689
  budget: "haiku",
4690
4690
  tokenburner: "opus"
4691
+ },
4692
+ "debugger": {
4693
+ quality: "sonnet",
4694
+ balanced: "sonnet",
4695
+ budget: "haiku",
4696
+ tokenburner: "opus"
4691
4697
  }
4692
4698
  };
4693
4699
  /** Thrown by output() to signal successful command completion. */
@@ -5046,23 +5052,6 @@ async function findPhaseInternal(cwd, phase) {
5046
5052
  } catch (e) {
5047
5053
  debugLog("find-phase-async-archive-search-failed", e);
5048
5054
  }
5049
- const milestonesDir = planningPath(cwd, "milestones");
5050
- if (!await pathExistsInternal(milestonesDir)) return null;
5051
- try {
5052
- const archiveDirs = (await node_fs.promises.readdir(milestonesDir, { withFileTypes: true })).filter((e) => e.isDirectory() && /^v[\d.]+-phases$/.test(e.name)).map((e) => e.name).sort().reverse();
5053
- for (const archiveName of archiveDirs) {
5054
- const versionMatch = archiveName.match(/^(v[\d.]+)-phases$/);
5055
- if (!versionMatch) continue;
5056
- const version = versionMatch[1];
5057
- const result = await searchPhaseInDir(node_path.default.join(milestonesDir, archiveName), node_path.default.join(".planning", "milestones", archiveName), normalized);
5058
- if (result) {
5059
- result.archived = version;
5060
- return result;
5061
- }
5062
- }
5063
- } catch (e) {
5064
- debugLog("find-phase-async-milestone-search-failed", e);
5065
- }
5066
5055
  return null;
5067
5056
  }
5068
5057
  async function getArchivedPhaseDirs(cwd) {
@@ -5083,25 +5072,6 @@ async function getArchivedPhaseDirs(cwd) {
5083
5072
  } catch (e) {
5084
5073
  debugLog("get-archived-phase-dirs-async-archive-failed", e);
5085
5074
  }
5086
- const milestonesDir = planningPath(cwd, "milestones");
5087
- try {
5088
- const phaseDirs = (await node_fs.promises.readdir(milestonesDir, { withFileTypes: true })).filter((e) => e.isDirectory() && /^v[\d.]+-phases$/.test(e.name)).map((e) => e.name).sort().reverse();
5089
- for (const archiveName of phaseDirs) {
5090
- const versionMatch = archiveName.match(/^(v[\d.]+)-phases$/);
5091
- if (!versionMatch) continue;
5092
- const version = versionMatch[1];
5093
- const archiveMilestonePath = node_path.default.join(milestonesDir, archiveName);
5094
- const dirs = await listSubDirs(archiveMilestonePath, true);
5095
- for (const dir of dirs) results.push({
5096
- name: dir,
5097
- milestone: version,
5098
- basePath: node_path.default.join(".planning", "milestones", archiveName),
5099
- fullPath: node_path.default.join(archiveMilestonePath, dir)
5100
- });
5101
- }
5102
- } catch (e) {
5103
- debugLog("get-archived-phase-dirs-async-failed", e);
5104
- }
5105
5075
  return results;
5106
5076
  }
5107
5077
  async function getRoadmapPhaseInternal(cwd, phaseNum) {
@@ -12868,15 +12838,10 @@ async function cmdMilestoneComplete(cwd, version, options) {
12868
12838
  const stateContent = await node_fs.promises.readFile(statePath$1, "utf-8");
12869
12839
  await node_fs.promises.writeFile(node_path.default.join(archiveDir, "STATE.md"), stateContent, "utf-8");
12870
12840
  }
12871
- const roadmapExists = await pathExistsInternal(roadmapPath$1);
12872
- if (roadmapExists) {
12841
+ if (await pathExistsInternal(roadmapPath$1)) {
12873
12842
  const roadmapContent = await node_fs.promises.readFile(roadmapPath$1, "utf-8");
12874
12843
  await node_fs.promises.writeFile(node_path.default.join(archiveDir, "ROADMAP.md"), roadmapContent, "utf-8");
12875
12844
  }
12876
- if (roadmapExists) {
12877
- const roadmapContent = await node_fs.promises.readFile(roadmapPath$1, "utf-8");
12878
- await node_fs.promises.writeFile(node_path.default.join(archiveDir, `${version}-ROADMAP.md`), roadmapContent, "utf-8");
12879
- }
12880
12845
  if (await pathExistsInternal(reqPath)) {
12881
12846
  const reqContent = await node_fs.promises.readFile(reqPath, "utf-8");
12882
12847
  const archiveHeader = `# Requirements Archive: ${version} ${milestoneName}\n\n**Archived:** ${today}\n**Status:** SHIPPED\n\nFor current requirements, see \`.planning/REQUIREMENTS.md\`.\n\n---\n\n`;
@@ -12947,7 +12912,7 @@ Last session: ${today}
12947
12912
  tasks: totalTasks,
12948
12913
  accomplishments,
12949
12914
  archived: {
12950
- roadmap: await pathExistsInternal(node_path.default.join(archiveDir, `${version}-ROADMAP.md`)),
12915
+ roadmap: await pathExistsInternal(node_path.default.join(archiveDir, "ROADMAP.md")),
12951
12916
  requirements: await pathExistsInternal(node_path.default.join(archiveDir, `${version}-REQUIREMENTS.md`)),
12952
12917
  audit: await pathExistsInternal(node_path.default.join(archiveDir, `${version}-MILESTONE-AUDIT.md`)),
12953
12918
  phases: phasesArchived,
@@ -14740,7 +14705,7 @@ async function phaseAddCore(cwd, description, options) {
14740
14705
  await node_fs.promises.mkdir(dirPath, { recursive: true });
14741
14706
  await node_fs.promises.writeFile(node_path.default.join(dirPath, ".gitkeep"), "");
14742
14707
  if (options?.includeStubs) await scaffoldPhaseStubs(dirPath, paddedNum, description);
14743
- const phaseEntry = `\n### Phase ${newPhaseNum}: ${description}\n\n**Goal:** [To be planned]\n**Requirements**: TBD\n**Depends on:** Phase ${maxPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run /maxsim:plan-phase ${newPhaseNum} to break down)\n`;
14708
+ const phaseEntry = `\n### Phase ${newPhaseNum}: ${description}\n\n**Goal:** [To be planned]\n**Requirements**: TBD\n**Depends on:** Phase ${maxPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run /maxsim:plan ${newPhaseNum} to break down)\n`;
14744
14709
  let updatedContent;
14745
14710
  const lastSeparator = content.lastIndexOf("\n---");
14746
14711
  if (lastSeparator > 0) updatedContent = content.slice(0, lastSeparator) + phaseEntry + content.slice(lastSeparator);
@@ -14784,7 +14749,7 @@ async function phaseInsertCore(cwd, afterPhase, description, options) {
14784
14749
  await node_fs.promises.mkdir(dirPath, { recursive: true });
14785
14750
  await node_fs.promises.writeFile(node_path.default.join(dirPath, ".gitkeep"), "");
14786
14751
  if (options?.includeStubs) await scaffoldPhaseStubs(dirPath, decimalPhase, description);
14787
- const phaseEntry = `\n### Phase ${decimalPhase}: ${description} (INSERTED)\n\n**Goal:** [Urgent work - to be planned]\n**Requirements**: TBD\n**Depends on:** Phase ${afterPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run /maxsim:plan-phase ${decimalPhase} to break down)\n`;
14752
+ const phaseEntry = `\n### Phase ${decimalPhase}: ${description} (INSERTED)\n\n**Goal:** [Urgent work - to be planned]\n**Requirements**: TBD\n**Depends on:** Phase ${afterPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run /maxsim:plan ${decimalPhase} to break down)\n`;
14788
14753
  const headerPattern = new RegExp(`(#{2,4}\\s*Phase\\s+0*${afterPhaseEscaped}:[^\\n]*\\n)`, "i");
14789
14754
  const headerMatch = content.match(headerPattern);
14790
14755
  if (!headerMatch) throw new Error(`Could not find Phase ${afterPhase} header`);
@@ -15416,16 +15381,6 @@ async function cmdGetArchivedPhase(cwd, phaseNum) {
15416
15381
  const normalized = normalizePhaseName(phaseNum);
15417
15382
  const found = await searchArchiveLocations(planningPath(cwd, "archive"), normalized);
15418
15383
  if (found) return cmdOk(found);
15419
- const milestonesDir = planningPath(cwd, "milestones");
15420
- if (await pathExistsInternal(milestonesDir)) try {
15421
- const phaseDirs = (await node_fs.promises.readdir(milestonesDir, { withFileTypes: true })).filter((e) => e.isDirectory() && /^v[\d.]+-phases$/.test(e.name)).map((e) => e.name).sort().reverse();
15422
- for (const archiveName of phaseDirs) {
15423
- const result = await searchForPhaseInDir(node_path.default.join(milestonesDir, archiveName), normalized, archiveName);
15424
- if (result) return cmdOk(result);
15425
- }
15426
- } catch (e) {
15427
- debugLog("get-archived-phase-milestones-failed", e);
15428
- }
15429
15384
  return cmdErr(`Phase ${phaseNum} not found in archive`);
15430
15385
  }
15431
15386
  async function searchArchiveLocations(archiveDir, normalized) {
@@ -20667,7 +20622,7 @@ async function cmdInitDebugger(cwd, phase) {
20667
20622
  const phaseInfo = phase ? await findPhaseInternal(cwd, phase) : null;
20668
20623
  const codebaseDocs = listCodebaseDocs(cwd);
20669
20624
  const result = {
20670
- debugger_model: await resolveModelInternal(cwd, "verifier"),
20625
+ debugger_model: await resolveModelInternal(cwd, "debugger"),
20671
20626
  commit_docs: config.commit_docs,
20672
20627
  phase_found: !!phaseInfo,
20673
20628
  phase_dir: phaseInfo?.directory ?? null,