maxsimcli 3.12.0 → 4.0.1
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.
- package/README.md +43 -17
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapters/index.d.ts +0 -11
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +4 -40
- package/dist/adapters/index.js.map +1 -1
- package/dist/assets/CHANGELOG.md +70 -0
- package/dist/assets/dashboard/client/assets/{index-wtQDvXzr.js → index-C_eAetZJ.js} +60 -60
- package/dist/assets/dashboard/client/assets/index-CmiJKqOU.css +32 -0
- package/dist/assets/dashboard/client/index.html +2 -2
- package/dist/assets/dashboard/server.js +467 -271
- package/dist/assets/templates/agents/AGENTS.md +13 -1
- package/dist/assets/templates/agents/maxsim-debugger.md +2 -2
- package/dist/assets/templates/agents/maxsim-executor.md +5 -5
- package/dist/assets/templates/agents/maxsim-phase-researcher.md +2 -2
- package/dist/assets/templates/agents/maxsim-plan-checker.md +2 -2
- package/dist/assets/templates/agents/maxsim-planner.md +3 -3
- package/dist/assets/templates/commands/maxsim/add-todo.md +15 -5
- package/dist/assets/templates/commands/maxsim/discuss-phase.md +1 -0
- package/dist/assets/templates/commands/maxsim/init-existing.md +4 -0
- package/dist/assets/templates/commands/maxsim/new-project.md +4 -0
- package/dist/assets/templates/references/thinking-partner.md +41 -0
- package/dist/assets/templates/skills/batch-worktree/SKILL.md +137 -0
- package/dist/assets/templates/skills/brainstorming/SKILL.md +159 -0
- package/dist/assets/templates/skills/roadmap-writing/SKILL.md +198 -0
- package/dist/assets/templates/skills/sdd/SKILL.md +175 -0
- package/dist/assets/templates/skills/simplify/SKILL.md +48 -0
- package/dist/assets/templates/skills/using-maxsim/SKILL.md +6 -1
- package/dist/assets/templates/templates/acceptance-criteria.md +10 -0
- package/dist/assets/templates/templates/decisions.md +10 -0
- package/dist/assets/templates/templates/no-gos.md +9 -0
- package/dist/assets/templates/workflows/add-todo.md +89 -0
- package/dist/assets/templates/workflows/discuss-phase.md +85 -1
- package/dist/assets/templates/workflows/execute-phase.md +22 -2
- package/dist/assets/templates/workflows/execute-plan.md +166 -0
- package/dist/assets/templates/workflows/init-existing.md +116 -0
- package/dist/assets/templates/workflows/new-project.md +105 -1
- package/dist/assets/templates/workflows/plan-phase.md +3 -3
- package/dist/assets/templates/workflows/quick.md +2 -2
- package/dist/cli.cjs +1264 -882
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +97 -74
- package/dist/cli.js.map +1 -1
- package/dist/core/artefakte.d.ts +12 -0
- package/dist/core/artefakte.d.ts.map +1 -0
- package/dist/core/artefakte.js +136 -0
- package/dist/core/artefakte.js.map +1 -0
- package/dist/core/commands.d.ts +13 -13
- package/dist/core/commands.d.ts.map +1 -1
- package/dist/core/commands.js +44 -57
- package/dist/core/commands.js.map +1 -1
- package/dist/core/config.d.ts +4 -3
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +14 -18
- package/dist/core/config.js.map +1 -1
- package/dist/core/context-loader.d.ts +20 -0
- package/dist/core/context-loader.d.ts.map +1 -0
- package/dist/core/context-loader.js +154 -0
- package/dist/core/context-loader.js.map +1 -0
- package/dist/core/core.d.ts +8 -2
- package/dist/core/core.d.ts.map +1 -1
- package/dist/core/core.js +47 -11
- package/dist/core/core.js.map +1 -1
- package/dist/core/dashboard-launcher.d.ts +1 -1
- package/dist/core/dashboard-launcher.d.ts.map +1 -1
- package/dist/core/dashboard-launcher.js +18 -15
- package/dist/core/dashboard-launcher.js.map +1 -1
- package/dist/core/frontmatter.d.ts +5 -5
- package/dist/core/frontmatter.d.ts.map +1 -1
- package/dist/core/frontmatter.js +21 -26
- package/dist/core/frontmatter.js.map +1 -1
- package/dist/core/index.d.ts +8 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +23 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/init.d.ts +14 -14
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +93 -154
- package/dist/core/init.js.map +1 -1
- package/dist/core/milestone.d.ts +3 -3
- package/dist/core/milestone.d.ts.map +1 -1
- package/dist/core/milestone.js +9 -9
- package/dist/core/milestone.js.map +1 -1
- package/dist/core/phase.d.ts +9 -9
- package/dist/core/phase.d.ts.map +1 -1
- package/dist/core/phase.js +64 -68
- package/dist/core/phase.js.map +1 -1
- package/dist/core/roadmap.d.ts +4 -3
- package/dist/core/roadmap.d.ts.map +1 -1
- package/dist/core/roadmap.js +46 -109
- package/dist/core/roadmap.js.map +1 -1
- package/dist/core/skills.d.ts +19 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +145 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/start.d.ts +15 -0
- package/dist/core/start.d.ts.map +1 -0
- package/dist/core/start.js +80 -0
- package/dist/core/start.js.map +1 -0
- package/dist/core/state.d.ts +13 -13
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +119 -126
- package/dist/core/state.js.map +1 -1
- package/dist/core/template.d.ts +3 -3
- package/dist/core/template.d.ts.map +1 -1
- package/dist/core/template.js +12 -14
- package/dist/core/template.js.map +1 -1
- package/dist/core/types.d.ts +14 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/verify.d.ts +10 -9
- package/dist/core/verify.d.ts.map +1 -1
- package/dist/core/verify.js +38 -48
- package/dist/core/verify.js.map +1 -1
- package/dist/core-TFSlUjV1.cjs +4312 -0
- package/dist/core-TFSlUjV1.cjs.map +1 -0
- package/dist/install/adapters.d.ts +2 -11
- package/dist/install/adapters.d.ts.map +1 -1
- package/dist/install/adapters.js +16 -154
- package/dist/install/adapters.js.map +1 -1
- package/dist/install/copy.d.ts +1 -10
- package/dist/install/copy.d.ts.map +1 -1
- package/dist/install/copy.js +5 -125
- package/dist/install/copy.js.map +1 -1
- package/dist/install/hooks.d.ts +4 -5
- package/dist/install/hooks.d.ts.map +1 -1
- package/dist/install/hooks.js +46 -71
- package/dist/install/hooks.js.map +1 -1
- package/dist/install/index.js +163 -226
- package/dist/install/index.js.map +1 -1
- package/dist/install/manifest.d.ts +5 -2
- package/dist/install/manifest.d.ts.map +1 -1
- package/dist/install/manifest.js +20 -26
- package/dist/install/manifest.js.map +1 -1
- package/dist/install/patches.d.ts +1 -2
- package/dist/install/patches.d.ts.map +1 -1
- package/dist/install/patches.js +4 -16
- package/dist/install/patches.js.map +1 -1
- package/dist/install/shared.d.ts +24 -18
- package/dist/install/shared.d.ts.map +1 -1
- package/dist/install/shared.js +65 -35
- package/dist/install/shared.js.map +1 -1
- package/dist/install/uninstall.d.ts +2 -3
- package/dist/install/uninstall.d.ts.map +1 -1
- package/dist/install/uninstall.js +24 -82
- package/dist/install/uninstall.js.map +1 -1
- package/dist/install.cjs +321 -1230
- package/dist/install.cjs.map +1 -1
- package/dist/mcp-server.cjs +22527 -46
- package/dist/mcp-server.cjs.map +1 -1
- package/dist/skills-BOSxYUzf.cjs +6812 -0
- package/dist/skills-BOSxYUzf.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/adapters/codex.d.ts +0 -19
- package/dist/adapters/codex.d.ts.map +0 -1
- package/dist/adapters/codex.js +0 -94
- package/dist/adapters/codex.js.map +0 -1
- package/dist/adapters/gemini.d.ts +0 -19
- package/dist/adapters/gemini.d.ts.map +0 -1
- package/dist/adapters/gemini.js +0 -96
- package/dist/adapters/gemini.js.map +0 -1
- package/dist/adapters/opencode.d.ts +0 -17
- package/dist/adapters/opencode.d.ts.map +0 -1
- package/dist/adapters/opencode.js +0 -111
- package/dist/adapters/opencode.js.map +0 -1
- package/dist/adapters/transforms/content.d.ts +0 -39
- package/dist/adapters/transforms/content.d.ts.map +0 -1
- package/dist/adapters/transforms/content.js +0 -125
- package/dist/adapters/transforms/content.js.map +0 -1
- package/dist/adapters/transforms/frontmatter.d.ts +0 -42
- package/dist/adapters/transforms/frontmatter.d.ts.map +0 -1
- package/dist/adapters/transforms/frontmatter.js +0 -204
- package/dist/adapters/transforms/frontmatter.js.map +0 -1
- package/dist/adapters/transforms/tool-maps.d.ts +0 -20
- package/dist/adapters/transforms/tool-maps.d.ts.map +0 -1
- package/dist/adapters/transforms/tool-maps.js +0 -64
- package/dist/adapters/transforms/tool-maps.js.map +0 -1
- package/dist/assets/dashboard/client/assets/index-CxFKStBk.css +0 -32
package/dist/core/roadmap.d.ts
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Ported from maxsim/bin/lib/roadmap.cjs
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
export declare function
|
|
8
|
-
export declare function
|
|
6
|
+
import type { CmdResult } from './types.js';
|
|
7
|
+
export declare function cmdRoadmapGetPhase(cwd: string, phaseNum: string): CmdResult;
|
|
8
|
+
export declare function cmdRoadmapAnalyze(cwd: string): Promise<CmdResult>;
|
|
9
|
+
export declare function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string): CmdResult;
|
|
9
10
|
//# sourceMappingURL=roadmap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roadmap.d.ts","sourceRoot":"","sources":["../../src/core/roadmap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"roadmap.d.ts","sourceRoot":"","sources":["../../src/core/roadmap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAgE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI1G,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAkC3E;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA8EvE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CA0BrF"}
|
package/dist/core/roadmap.js
CHANGED
|
@@ -14,13 +14,12 @@ exports.cmdRoadmapUpdatePlanProgress = cmdRoadmapUpdatePlanProgress;
|
|
|
14
14
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
15
15
|
const node_path_1 = __importDefault(require("node:path"));
|
|
16
16
|
const core_js_1 = require("./core.js");
|
|
17
|
+
const types_js_1 = require("./types.js");
|
|
17
18
|
// ─── Roadmap commands ────────────────────────────────────────────────────────
|
|
18
|
-
function cmdRoadmapGetPhase(cwd, phaseNum
|
|
19
|
+
function cmdRoadmapGetPhase(cwd, phaseNum) {
|
|
19
20
|
const rmPath = (0, core_js_1.roadmapPath)(cwd);
|
|
20
|
-
if (!node_fs_1.default.existsSync(rmPath))
|
|
21
|
-
(0,
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
21
|
+
if (!node_fs_1.default.existsSync(rmPath))
|
|
22
|
+
return (0, types_js_1.cmdOk)({ found: false, error: 'ROADMAP.md not found' }, '');
|
|
24
23
|
try {
|
|
25
24
|
const content = node_fs_1.default.readFileSync(rmPath, 'utf-8');
|
|
26
25
|
const escapedPhase = phaseNum.replace(/\./g, '\\.');
|
|
@@ -30,56 +29,34 @@ function cmdRoadmapGetPhase(cwd, phaseNum, raw) {
|
|
|
30
29
|
const checklistPattern = new RegExp(`-\\s*\\[[ x]\\]\\s*\\*\\*Phase\\s+${escapedPhase}:\\s*([^*]+)\\*\\*`, 'i');
|
|
31
30
|
const checklistMatch = content.match(checklistPattern);
|
|
32
31
|
if (checklistMatch) {
|
|
33
|
-
(0,
|
|
34
|
-
found: false,
|
|
35
|
-
phase_number: phaseNum,
|
|
36
|
-
phase_name: checklistMatch[1].trim(),
|
|
37
|
-
error: 'malformed_roadmap',
|
|
38
|
-
message: `Phase ${phaseNum} exists in summary list but missing "### Phase ${phaseNum}:" detail section. ROADMAP.md needs both formats.`
|
|
39
|
-
}, raw, '');
|
|
40
|
-
return;
|
|
32
|
+
return (0, types_js_1.cmdOk)({ found: false, phase_number: phaseNum, phase_name: checklistMatch[1].trim(), error: 'malformed_roadmap', message: `Phase ${phaseNum} exists in summary list but missing "### Phase ${phaseNum}:" detail section. ROADMAP.md needs both formats.` }, '');
|
|
41
33
|
}
|
|
42
|
-
(0,
|
|
43
|
-
return;
|
|
34
|
+
return (0, types_js_1.cmdOk)({ found: false, phase_number: phaseNum }, '');
|
|
44
35
|
}
|
|
45
36
|
const phaseName = headerMatch[1].trim();
|
|
46
37
|
const headerIndex = headerMatch.index;
|
|
47
38
|
const restOfContent = content.slice(headerIndex);
|
|
48
39
|
const nextHeaderMatch = restOfContent.match(/\n#{2,4}\s+Phase\s+\d/i);
|
|
49
|
-
const sectionEnd = nextHeaderMatch
|
|
50
|
-
? headerIndex + nextHeaderMatch.index
|
|
51
|
-
: content.length;
|
|
40
|
+
const sectionEnd = nextHeaderMatch ? headerIndex + nextHeaderMatch.index : content.length;
|
|
52
41
|
const section = content.slice(headerIndex, sectionEnd).trim();
|
|
53
42
|
const goalMatch = section.match(/\*\*Goal(?::\*\*|\*\*:)\s*([^\n]+)/i);
|
|
54
43
|
const goal = goalMatch ? goalMatch[1].trim() : null;
|
|
55
44
|
const criteriaMatch = section.match(/\*\*Success Criteria\*\*[^\n]*:\s*\n((?:\s*\d+\.\s*[^\n]+\n?)+)/i);
|
|
56
|
-
const success_criteria = criteriaMatch
|
|
57
|
-
|
|
58
|
-
: [];
|
|
59
|
-
(0, core_js_1.output)({
|
|
60
|
-
found: true,
|
|
61
|
-
phase_number: phaseNum,
|
|
62
|
-
phase_name: phaseName,
|
|
63
|
-
goal,
|
|
64
|
-
success_criteria,
|
|
65
|
-
section,
|
|
66
|
-
}, raw, section);
|
|
45
|
+
const success_criteria = criteriaMatch ? criteriaMatch[1].trim().split('\n').map(line => line.replace(/^\s*\d+\.\s*/, '').trim()).filter(Boolean) : [];
|
|
46
|
+
return (0, types_js_1.cmdOk)({ found: true, phase_number: phaseNum, phase_name: phaseName, goal, success_criteria, section }, section);
|
|
67
47
|
}
|
|
68
48
|
catch (e) {
|
|
69
|
-
(0,
|
|
70
|
-
(0, core_js_1.error)('Failed to read ROADMAP.md: ' + e.message);
|
|
49
|
+
return (0, types_js_1.cmdErr)('Failed to read ROADMAP.md: ' + e.message);
|
|
71
50
|
}
|
|
72
51
|
}
|
|
73
|
-
function cmdRoadmapAnalyze(cwd
|
|
52
|
+
async function cmdRoadmapAnalyze(cwd) {
|
|
74
53
|
const rmPath = (0, core_js_1.roadmapPath)(cwd);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const content = node_fs_1.default.readFileSync(rmPath, 'utf-8');
|
|
54
|
+
const content = await (0, core_js_1.safeReadFileAsync)(rmPath);
|
|
55
|
+
if (!content)
|
|
56
|
+
return (0, types_js_1.cmdOk)({ error: 'ROADMAP.md not found', milestones: [], phases: [], current_phase: null });
|
|
80
57
|
const phasesDir = (0, core_js_1.phasesPath)(cwd);
|
|
81
58
|
const phasePattern = (0, core_js_1.getPhasePattern)();
|
|
82
|
-
const
|
|
59
|
+
const parsedPhases = [];
|
|
83
60
|
let match;
|
|
84
61
|
while ((match = phasePattern.exec(content)) !== null) {
|
|
85
62
|
const phaseNum = match[1];
|
|
@@ -93,17 +70,23 @@ function cmdRoadmapAnalyze(cwd, raw) {
|
|
|
93
70
|
const goal = goalMatch ? goalMatch[1].trim() : null;
|
|
94
71
|
const dependsMatch = section.match(/\*\*Depends on:\*\*\s*([^\n]+)/i);
|
|
95
72
|
const depends_on = dependsMatch ? dependsMatch[1].trim() : null;
|
|
96
|
-
|
|
73
|
+
parsedPhases.push({ phaseNum, phaseName, goal, depends_on, normalized: (0, core_js_1.normalizePhaseName)(phaseNum), checkboxPattern: new RegExp(`-\\s*\\[(x| )\\]\\s*.*Phase\\s+${phaseNum.replace('.', '\\.')}`, 'i') });
|
|
74
|
+
}
|
|
75
|
+
let allDirs = [];
|
|
76
|
+
try {
|
|
77
|
+
allDirs = await (0, core_js_1.listSubDirsAsync)(phasesDir);
|
|
78
|
+
}
|
|
79
|
+
catch { /* phases dir may not exist */ }
|
|
80
|
+
const phases = await Promise.all(parsedPhases.map(async (p) => {
|
|
97
81
|
let diskStatus = 'no_directory';
|
|
98
82
|
let planCount = 0;
|
|
99
83
|
let summaryCount = 0;
|
|
100
84
|
let hasContext = false;
|
|
101
85
|
let hasResearch = false;
|
|
102
86
|
try {
|
|
103
|
-
const
|
|
104
|
-
const dirMatch = dirs.find(d => d.startsWith(normalized + '-') || d === normalized);
|
|
87
|
+
const dirMatch = allDirs.find(d => d.startsWith(p.normalized + '-') || d === p.normalized);
|
|
105
88
|
if (dirMatch) {
|
|
106
|
-
const phaseFiles = node_fs_1.default.
|
|
89
|
+
const phaseFiles = await node_fs_1.default.promises.readdir(node_path_1.default.join(phasesDir, dirMatch));
|
|
107
90
|
planCount = phaseFiles.filter(f => (0, core_js_1.isPlanFile)(f)).length;
|
|
108
91
|
summaryCount = phaseFiles.filter(f => (0, core_js_1.isSummaryFile)(f)).length;
|
|
109
92
|
hasContext = phaseFiles.some(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
|
|
@@ -123,33 +106,17 @@ function cmdRoadmapAnalyze(cwd, raw) {
|
|
|
123
106
|
}
|
|
124
107
|
}
|
|
125
108
|
catch (e) {
|
|
126
|
-
/* optional op, ignore */
|
|
127
109
|
(0, core_js_1.debugLog)(e);
|
|
128
110
|
}
|
|
129
|
-
const
|
|
130
|
-
const checkboxMatch = content.match(checkboxPattern);
|
|
111
|
+
const checkboxMatch = content.match(p.checkboxPattern);
|
|
131
112
|
const roadmapComplete = checkboxMatch ? checkboxMatch[1] === 'x' : false;
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
name: phaseName,
|
|
135
|
-
goal,
|
|
136
|
-
depends_on,
|
|
137
|
-
plan_count: planCount,
|
|
138
|
-
summary_count: summaryCount,
|
|
139
|
-
has_context: hasContext,
|
|
140
|
-
has_research: hasResearch,
|
|
141
|
-
disk_status: diskStatus,
|
|
142
|
-
roadmap_complete: roadmapComplete,
|
|
143
|
-
});
|
|
144
|
-
}
|
|
113
|
+
return { number: p.phaseNum, name: p.phaseName, goal: p.goal, depends_on: p.depends_on, plan_count: planCount, summary_count: summaryCount, has_context: hasContext, has_research: hasResearch, disk_status: diskStatus, roadmap_complete: roadmapComplete };
|
|
114
|
+
}));
|
|
145
115
|
const milestones = [];
|
|
146
116
|
const milestonePattern = /##\s*(.*v(\d+\.\d+)[^(\n]*)/gi;
|
|
147
117
|
let mMatch;
|
|
148
118
|
while ((mMatch = milestonePattern.exec(content)) !== null) {
|
|
149
|
-
milestones.push({
|
|
150
|
-
heading: mMatch[1].trim(),
|
|
151
|
-
version: 'v' + mMatch[2],
|
|
152
|
-
});
|
|
119
|
+
milestones.push({ heading: mMatch[1].trim(), version: 'v' + mMatch[2] });
|
|
153
120
|
}
|
|
154
121
|
const currentPhase = phases.find(p => p.disk_status === 'planned' || p.disk_status === 'partial') || null;
|
|
155
122
|
const nextPhase = phases.find(p => p.disk_status === 'empty' || p.disk_status === 'no_directory' || p.disk_status === 'discussed' || p.disk_status === 'researched') || null;
|
|
@@ -159,69 +126,39 @@ function cmdRoadmapAnalyze(cwd, raw) {
|
|
|
159
126
|
const checklistPattern = /-\s*\[[ x]\]\s*\*\*Phase\s+(\d+[A-Z]?(?:\.\d+)?)/gi;
|
|
160
127
|
const checklistPhases = new Set();
|
|
161
128
|
let checklistMatch;
|
|
162
|
-
while ((checklistMatch = checklistPattern.exec(content)) !== null)
|
|
129
|
+
while ((checklistMatch = checklistPattern.exec(content)) !== null)
|
|
163
130
|
checklistPhases.add(checklistMatch[1]);
|
|
164
|
-
}
|
|
165
131
|
const detailPhases = new Set(phases.map(p => p.number));
|
|
166
132
|
const missingDetails = [...checklistPhases].filter(p => !detailPhases.has(p));
|
|
167
|
-
const result = {
|
|
168
|
-
|
|
169
|
-
phases,
|
|
170
|
-
phase_count: phases.length,
|
|
171
|
-
completed_phases: completedPhases,
|
|
172
|
-
total_plans: totalPlans,
|
|
173
|
-
total_summaries: totalSummaries,
|
|
174
|
-
progress_percent: totalPlans > 0 ? Math.min(100, Math.round((totalSummaries / totalPlans) * 100)) : 0,
|
|
175
|
-
current_phase: currentPhase ? currentPhase.number : null,
|
|
176
|
-
next_phase: nextPhase ? nextPhase.number : null,
|
|
177
|
-
missing_phase_details: missingDetails.length > 0 ? missingDetails : null,
|
|
178
|
-
};
|
|
179
|
-
(0, core_js_1.output)(result, raw);
|
|
133
|
+
const result = { milestones, phases, phase_count: phases.length, completed_phases: completedPhases, total_plans: totalPlans, total_summaries: totalSummaries, progress_percent: totalPlans > 0 ? Math.min(100, Math.round((totalSummaries / totalPlans) * 100)) : 0, current_phase: currentPhase ? currentPhase.number : null, next_phase: nextPhase ? nextPhase.number : null, missing_phase_details: missingDetails.length > 0 ? missingDetails : null };
|
|
134
|
+
return (0, types_js_1.cmdOk)(result);
|
|
180
135
|
}
|
|
181
|
-
function cmdRoadmapUpdatePlanProgress(cwd, phaseNum
|
|
182
|
-
if (!phaseNum)
|
|
183
|
-
(0,
|
|
184
|
-
}
|
|
136
|
+
function cmdRoadmapUpdatePlanProgress(cwd, phaseNum) {
|
|
137
|
+
if (!phaseNum)
|
|
138
|
+
return (0, types_js_1.cmdErr)('phase number required for roadmap update-plan-progress');
|
|
185
139
|
const rmPath = (0, core_js_1.roadmapPath)(cwd);
|
|
186
140
|
const phaseInfo = (0, core_js_1.findPhaseInternal)(cwd, phaseNum);
|
|
187
|
-
if (!phaseInfo)
|
|
188
|
-
(0,
|
|
189
|
-
}
|
|
141
|
+
if (!phaseInfo)
|
|
142
|
+
return (0, types_js_1.cmdErr)(`Phase ${phaseNum} not found`);
|
|
190
143
|
const planCount = phaseInfo.plans.length;
|
|
191
144
|
const summaryCount = phaseInfo.summaries.length;
|
|
192
|
-
if (planCount === 0)
|
|
193
|
-
(0,
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
145
|
+
if (planCount === 0)
|
|
146
|
+
return (0, types_js_1.cmdOk)({ updated: false, reason: 'No plans found', plan_count: 0, summary_count: 0 }, 'no plans');
|
|
196
147
|
const isComplete = summaryCount >= planCount;
|
|
197
148
|
const status = isComplete ? 'Complete' : summaryCount > 0 ? 'In Progress' : 'Planned';
|
|
198
149
|
const today = (0, core_js_1.todayISO)();
|
|
199
|
-
if (!node_fs_1.default.existsSync(rmPath))
|
|
200
|
-
(0,
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
150
|
+
if (!node_fs_1.default.existsSync(rmPath))
|
|
151
|
+
return (0, types_js_1.cmdOk)({ updated: false, reason: 'ROADMAP.md not found', plan_count: planCount, summary_count: summaryCount }, 'no roadmap');
|
|
203
152
|
let roadmapContent = node_fs_1.default.readFileSync(rmPath, 'utf-8');
|
|
204
153
|
const phaseEscaped = phaseNum.replace('.', '\\.');
|
|
205
|
-
const tablePattern = new RegExp(`(\\|\\s*${phaseEscaped}\\.?\\s[^|]*\\|)[^|]*(\\|)\\s*[^|]*(\\|)\\s*[^|]*(\\|)`, 'i');
|
|
206
154
|
const dateField = isComplete ? ` ${today} ` : ' ';
|
|
207
|
-
roadmapContent = roadmapContent.replace(
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
? `${summaryCount}/${planCount} plans complete`
|
|
211
|
-
: `${summaryCount}/${planCount} plans executed`;
|
|
212
|
-
roadmapContent = roadmapContent.replace(planCountPattern, `$1${planCountText}`);
|
|
155
|
+
roadmapContent = roadmapContent.replace(new RegExp(`(\\|\\s*${phaseEscaped}\\.?\\s[^|]*\\|)[^|]*(\\|)\\s*[^|]*(\\|)\\s*[^|]*(\\|)`, 'i'), `$1 ${summaryCount}/${planCount} $2 ${status.padEnd(11)}$3${dateField}$4`);
|
|
156
|
+
const planCountText = isComplete ? `${summaryCount}/${planCount} plans complete` : `${summaryCount}/${planCount} plans executed`;
|
|
157
|
+
roadmapContent = roadmapContent.replace(new RegExp(`(#{2,4}\\s*Phase\\s+${phaseEscaped}[\\s\\S]*?\\*\\*Plans:\\*\\*\\s*)[^\\n]+`, 'i'), `$1${planCountText}`);
|
|
213
158
|
if (isComplete) {
|
|
214
|
-
|
|
215
|
-
roadmapContent = roadmapContent.replace(checkboxPattern, `$1x$2 (completed ${today})`);
|
|
159
|
+
roadmapContent = roadmapContent.replace(new RegExp(`(-\\s*\\[)[ ](\\]\\s*.*Phase\\s+${phaseEscaped}[:\\s][^\\n]*)`, 'i'), `$1x$2 (completed ${today})`);
|
|
216
160
|
}
|
|
217
161
|
node_fs_1.default.writeFileSync(rmPath, roadmapContent, 'utf-8');
|
|
218
|
-
(0,
|
|
219
|
-
updated: true,
|
|
220
|
-
phase: phaseNum,
|
|
221
|
-
plan_count: planCount,
|
|
222
|
-
summary_count: summaryCount,
|
|
223
|
-
status,
|
|
224
|
-
complete: isComplete,
|
|
225
|
-
}, raw, `${summaryCount}/${planCount} ${status}`);
|
|
162
|
+
return (0, types_js_1.cmdOk)({ updated: true, phase: phaseNum, plan_count: planCount, summary_count: summaryCount, status, complete: isComplete }, `${summaryCount}/${planCount} ${status}`);
|
|
226
163
|
}
|
|
227
164
|
//# sourceMappingURL=roadmap.js.map
|
package/dist/core/roadmap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roadmap.js","sourceRoot":"","sources":["../../src/core/roadmap.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;
|
|
1
|
+
{"version":3,"file":"roadmap.js","sourceRoot":"","sources":["../../src/core/roadmap.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AAWH,gDAkCC;AAED,8CA8EC;AAED,oEA0BC;AAvJD,sDAAyB;AACzB,0DAA6B;AAE7B,uCAAgM;AAChM,yCAA2C;AAG3C,gFAAgF;AAEhF,SAAgB,kBAAkB,CAAC,GAAW,EAAE,QAAgB;IAC9D,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAA,gBAAK,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,CAAC,CAAC;IAE9F,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,IAAA,yBAAe,EAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAEhD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,qCAAqC,YAAY,oBAAoB,EAAE,GAAG,CAAC,CAAC;YAChH,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACvD,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,IAAA,gBAAK,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,QAAQ,kDAAkD,QAAQ,mDAAmD,EAAE,EAAE,EAAE,CAAC,CAAC;YACxQ,CAAC;YACD,OAAO,IAAA,gBAAK,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAM,CAAC;QACvC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,WAAW,GAAG,eAAe,CAAC,KAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3F,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACxG,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvJ,OAAO,IAAA,gBAAK,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IACzH,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,IAAA,iBAAM,EAAC,6BAA6B,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,GAAG,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,IAAA,2BAAiB,EAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAA,gBAAK,EAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/G,MAAM,SAAS,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,IAAA,yBAAe,GAAE,CAAC;IAEvC,MAAM,YAAY,GAAkB,EAAE,CAAC;IACvC,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,KAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAClF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAA,4BAAkB,EAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,IAAI,MAAM,CAAC,kCAAkC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7M,CAAC;IAED,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QAAC,OAAO,GAAG,MAAM,IAAA,0BAAgB,EAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;IAE7F,MAAM,MAAM,GAAmB,MAAM,OAAO,CAAC,GAAG,CAC9C,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3B,IAAI,UAAU,GAAgB,cAAc,CAAC;QAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;YAC3F,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,UAAU,GAAG,MAAM,iBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC7E,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACzD,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC/D,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,CAAC;gBACnF,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC;gBACtF,IAAI,YAAY,IAAI,SAAS,IAAI,SAAS,GAAG,CAAC;oBAAE,UAAU,GAAG,UAAU,CAAC;qBACnE,IAAI,YAAY,GAAG,CAAC;oBAAE,UAAU,GAAG,SAAS,CAAC;qBAC7C,IAAI,SAAS,GAAG,CAAC;oBAAE,UAAU,GAAG,SAAS,CAAC;qBAC1C,IAAI,WAAW;oBAAE,UAAU,GAAG,YAAY,CAAC;qBAC3C,IAAI,UAAU;oBAAE,UAAU,GAAG,WAAW,CAAC;;oBACzC,UAAU,GAAG,OAAO,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,IAAA,kBAAQ,EAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAC5B,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACzE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAC/P,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,gBAAgB,GAAG,+BAA+B,CAAC;IACzD,IAAI,MAA8B,CAAC;IACnC,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IAExI,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC;IAC1G,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,KAAK,cAAc,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,YAAY,CAAC,IAAI,IAAI,CAAC;IAC7K,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IAEhF,MAAM,gBAAgB,GAAG,oDAAoD,CAAC;IAC9E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,IAAI,cAAsC,CAAC;IAC3C,OAAO,CAAC,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI;QAAE,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,MAAM,MAAM,GAAoB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,qBAAqB,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5c,OAAO,IAAA,gBAAK,EAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,4BAA4B,CAAC,GAAW,EAAE,QAAgB;IACxE,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAA,iBAAM,EAAC,wDAAwD,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,GAAG,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,IAAA,2BAAiB,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAA,iBAAM,EAAC,SAAS,QAAQ,YAAY,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IACzC,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;IAChD,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,IAAA,gBAAK,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAE7H,MAAM,UAAU,GAAG,YAAY,IAAI,SAAS,CAAC;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,MAAM,KAAK,GAAG,IAAA,kBAAQ,GAAE,CAAC;IAEzB,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAA,gBAAK,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,YAAY,CAAC,CAAC;IAE/J,IAAI,cAAc,GAAG,iBAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,YAAY,wDAAwD,EAAE,GAAG,CAAC,EAAE,MAAM,YAAY,IAAI,SAAS,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC;IACrN,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,SAAS,iBAAiB,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,SAAS,iBAAiB,CAAC;IACjI,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,uBAAuB,YAAY,0CAA0C,EAAE,GAAG,CAAC,EAAE,KAAK,aAAa,EAAE,CAAC,CAAC;IAC9J,IAAI,UAAU,EAAE,CAAC;QAAC,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,mCAAmC,YAAY,gBAAgB,EAAE,GAAG,CAAC,EAAE,oBAAoB,KAAK,GAAG,CAAC,CAAC;IAAC,CAAC;IAC5K,iBAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAElD,OAAO,IAAA,gBAAK,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,YAAY,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC,CAAC;AAC/K,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills — List, install, and update skill templates
|
|
3
|
+
*
|
|
4
|
+
* Skills are installed to `.claude/skills/<name>/SKILL.md`.
|
|
5
|
+
* Source templates live in `templates/skills/<name>/SKILL.md`.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* List all installed skills from `.claude/skills/`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function cmdSkillList(cwd: string, raw: boolean): void;
|
|
11
|
+
/**
|
|
12
|
+
* Install a specific skill from the templates directory.
|
|
13
|
+
*/
|
|
14
|
+
export declare function cmdSkillInstall(cwd: string, skillName: string | undefined, raw: boolean): void;
|
|
15
|
+
/**
|
|
16
|
+
* Update one or all installed skills from the templates source.
|
|
17
|
+
*/
|
|
18
|
+
export declare function cmdSkillUpdate(cwd: string, skillName: string | undefined, raw: boolean): void;
|
|
19
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkDH;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAiB5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAoB9F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAsD7F"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Skills — List, install, and update skill templates
|
|
4
|
+
*
|
|
5
|
+
* Skills are installed to `.claude/skills/<name>/SKILL.md`.
|
|
6
|
+
* Source templates live in `templates/skills/<name>/SKILL.md`.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.cmdSkillList = cmdSkillList;
|
|
13
|
+
exports.cmdSkillInstall = cmdSkillInstall;
|
|
14
|
+
exports.cmdSkillUpdate = cmdSkillUpdate;
|
|
15
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
16
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
17
|
+
const core_js_1 = require("./core.js");
|
|
18
|
+
const frontmatter_js_1 = require("./frontmatter.js");
|
|
19
|
+
// ─── Internal helpers ────────────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the installed skills directory for the current project.
|
|
22
|
+
* Skills live at `.claude/skills/` relative to cwd.
|
|
23
|
+
*/
|
|
24
|
+
function skillsDir(cwd) {
|
|
25
|
+
return node_path_1.default.join(cwd, '.claude', 'skills');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the templates source directory for skills.
|
|
29
|
+
* At runtime (from dist/cli.cjs), templates are bundled at dist/assets/templates/skills/.
|
|
30
|
+
*/
|
|
31
|
+
function skillsTemplateDir() {
|
|
32
|
+
return node_path_1.default.resolve(__dirname, 'assets', 'templates', 'skills');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Read a single skill's metadata from its SKILL.md frontmatter.
|
|
36
|
+
*/
|
|
37
|
+
function readSkillInfo(skillDir, dirName) {
|
|
38
|
+
const skillMd = node_path_1.default.join(skillDir, 'SKILL.md');
|
|
39
|
+
const content = (0, core_js_1.safeReadFile)(skillMd);
|
|
40
|
+
if (!content)
|
|
41
|
+
return null;
|
|
42
|
+
const fm = (0, frontmatter_js_1.extractFrontmatter)(content);
|
|
43
|
+
return {
|
|
44
|
+
name: fm.name ?? dirName,
|
|
45
|
+
description: fm.description ?? '',
|
|
46
|
+
directory: dirName,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// ─── Commands ────────────────────────────────────────────────────────────────
|
|
50
|
+
/**
|
|
51
|
+
* List all installed skills from `.claude/skills/`.
|
|
52
|
+
*/
|
|
53
|
+
function cmdSkillList(cwd, raw) {
|
|
54
|
+
const dir = skillsDir(cwd);
|
|
55
|
+
if (!node_fs_1.default.existsSync(dir)) {
|
|
56
|
+
(0, core_js_1.output)({ skills: [], count: 0 }, raw, 'No skills installed.');
|
|
57
|
+
}
|
|
58
|
+
const entries = node_fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
59
|
+
const skills = [];
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
if (!entry.isDirectory())
|
|
62
|
+
continue;
|
|
63
|
+
const info = readSkillInfo(node_path_1.default.join(dir, entry.name), entry.name);
|
|
64
|
+
if (info)
|
|
65
|
+
skills.push(info);
|
|
66
|
+
}
|
|
67
|
+
(0, core_js_1.output)({ skills, count: skills.length }, raw, skills.map(s => `${s.name}: ${s.description}`).join('\n'));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Install a specific skill from the templates directory.
|
|
71
|
+
*/
|
|
72
|
+
function cmdSkillInstall(cwd, skillName, raw) {
|
|
73
|
+
if (!skillName) {
|
|
74
|
+
(0, core_js_1.error)('skill name required. Usage: skill-install <name>');
|
|
75
|
+
}
|
|
76
|
+
const srcFile = node_path_1.default.join(skillsTemplateDir(), skillName, 'SKILL.md');
|
|
77
|
+
if (!node_fs_1.default.existsSync(srcFile)) {
|
|
78
|
+
// List available skills for a helpful error
|
|
79
|
+
const available = listAvailableTemplates();
|
|
80
|
+
(0, core_js_1.error)(`Skill "${skillName}" not found in templates. Available: ${available.join(', ')}`);
|
|
81
|
+
}
|
|
82
|
+
const destDir = node_path_1.default.join(skillsDir(cwd), skillName);
|
|
83
|
+
const destFile = node_path_1.default.join(destDir, 'SKILL.md');
|
|
84
|
+
node_fs_1.default.mkdirSync(destDir, { recursive: true });
|
|
85
|
+
node_fs_1.default.copyFileSync(srcFile, destFile);
|
|
86
|
+
(0, core_js_1.output)({ installed: true, skill: skillName, path: node_path_1.default.relative(cwd, destFile) }, raw, `Installed skill: ${skillName}`);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Update one or all installed skills from the templates source.
|
|
90
|
+
*/
|
|
91
|
+
function cmdSkillUpdate(cwd, skillName, raw) {
|
|
92
|
+
const dir = skillsDir(cwd);
|
|
93
|
+
const templateDir = skillsTemplateDir();
|
|
94
|
+
if (skillName) {
|
|
95
|
+
// Update a single skill
|
|
96
|
+
const srcFile = node_path_1.default.join(templateDir, skillName, 'SKILL.md');
|
|
97
|
+
if (!node_fs_1.default.existsSync(srcFile)) {
|
|
98
|
+
(0, core_js_1.error)(`Skill template "${skillName}" not found.`);
|
|
99
|
+
}
|
|
100
|
+
const destDir = node_path_1.default.join(dir, skillName);
|
|
101
|
+
if (!node_fs_1.default.existsSync(destDir)) {
|
|
102
|
+
(0, core_js_1.error)(`Skill "${skillName}" is not installed. Use skill-install first.`);
|
|
103
|
+
}
|
|
104
|
+
const destFile = node_path_1.default.join(destDir, 'SKILL.md');
|
|
105
|
+
node_fs_1.default.copyFileSync(srcFile, destFile);
|
|
106
|
+
(0, core_js_1.output)({ updated: [skillName], skipped: [], not_found: [] }, raw, `Updated skill: ${skillName}`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Update all installed skills
|
|
110
|
+
if (!node_fs_1.default.existsSync(dir)) {
|
|
111
|
+
(0, core_js_1.output)({ updated: [], skipped: [], not_found: [] }, raw, 'No skills installed.');
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const entries = node_fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
115
|
+
const updated = [];
|
|
116
|
+
const skipped = [];
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
if (!entry.isDirectory())
|
|
119
|
+
continue;
|
|
120
|
+
const name = entry.name;
|
|
121
|
+
const srcFile = node_path_1.default.join(templateDir, name, 'SKILL.md');
|
|
122
|
+
if (!node_fs_1.default.existsSync(srcFile)) {
|
|
123
|
+
// Custom/user skill — no template to update from
|
|
124
|
+
skipped.push(name);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const destFile = node_path_1.default.join(dir, name, 'SKILL.md');
|
|
128
|
+
node_fs_1.default.copyFileSync(srcFile, destFile);
|
|
129
|
+
updated.push(name);
|
|
130
|
+
}
|
|
131
|
+
const summary = updated.length > 0
|
|
132
|
+
? `Updated ${updated.length} skill(s): ${updated.join(', ')}`
|
|
133
|
+
: 'No skills updated.';
|
|
134
|
+
(0, core_js_1.output)({ updated, skipped }, raw, summary);
|
|
135
|
+
}
|
|
136
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
137
|
+
function listAvailableTemplates() {
|
|
138
|
+
const dir = skillsTemplateDir();
|
|
139
|
+
if (!node_fs_1.default.existsSync(dir))
|
|
140
|
+
return [];
|
|
141
|
+
return node_fs_1.default.readdirSync(dir, { withFileTypes: true })
|
|
142
|
+
.filter(e => e.isDirectory())
|
|
143
|
+
.map(e => e.name);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start — Orchestrates Dashboard launch + browser open
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified `maxsimcli start` entry point that:
|
|
5
|
+
* 1. Checks for a running dashboard
|
|
6
|
+
* 2. Starts the dashboard if needed
|
|
7
|
+
* 3. Opens the browser
|
|
8
|
+
* 4. Reports status
|
|
9
|
+
*/
|
|
10
|
+
import type { CmdResult } from './types.js';
|
|
11
|
+
export declare function cmdStart(cwd: string, options: {
|
|
12
|
+
noBrowser?: boolean;
|
|
13
|
+
networkMode?: boolean;
|
|
14
|
+
}): Promise<CmdResult>;
|
|
15
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/core/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAoB5C,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACtD,OAAO,CAAC,SAAS,CAAC,CAgDpB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Start — Orchestrates Dashboard launch + browser open
|
|
4
|
+
*
|
|
5
|
+
* Provides a unified `maxsimcli start` entry point that:
|
|
6
|
+
* 1. Checks for a running dashboard
|
|
7
|
+
* 2. Starts the dashboard if needed
|
|
8
|
+
* 3. Opens the browser
|
|
9
|
+
* 4. Reports status
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.cmdStart = cmdStart;
|
|
16
|
+
const node_child_process_1 = require("node:child_process");
|
|
17
|
+
const core_js_1 = require("./core.js");
|
|
18
|
+
const dashboard_launcher_js_1 = require("./dashboard-launcher.js");
|
|
19
|
+
const types_js_1 = require("./types.js");
|
|
20
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
21
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
22
|
+
function openBrowser(url) {
|
|
23
|
+
const cmd = process.platform === 'win32'
|
|
24
|
+
? `start "" "${url}"`
|
|
25
|
+
: process.platform === 'darwin'
|
|
26
|
+
? `open "${url}"`
|
|
27
|
+
: `xdg-open "${url}"`;
|
|
28
|
+
(0, node_child_process_1.exec)(cmd, (err) => {
|
|
29
|
+
if (err)
|
|
30
|
+
(0, core_js_1.debugLog)('open-browser-failed', err);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// ─── Command ─────────────────────────────────────────────────────────────────
|
|
34
|
+
async function cmdStart(cwd, options) {
|
|
35
|
+
// 1. Check if dashboard is already running
|
|
36
|
+
const existingPort = await (0, dashboard_launcher_js_1.findRunningDashboard)();
|
|
37
|
+
if (existingPort) {
|
|
38
|
+
const url = `http://localhost:${existingPort}`;
|
|
39
|
+
if (!options.noBrowser)
|
|
40
|
+
openBrowser(url);
|
|
41
|
+
return (0, types_js_1.cmdOk)({ started: true, url, already_running: true, port: existingPort }, url);
|
|
42
|
+
}
|
|
43
|
+
// 2. Resolve the dashboard server
|
|
44
|
+
const serverPath = (0, dashboard_launcher_js_1.resolveDashboardServer)();
|
|
45
|
+
if (!serverPath) {
|
|
46
|
+
return (0, types_js_1.cmdErr)('Dashboard server not found. Run `npx maxsimcli` to install first.');
|
|
47
|
+
}
|
|
48
|
+
const serverDir = node_path_1.default.dirname(serverPath);
|
|
49
|
+
const dashConfig = (0, dashboard_launcher_js_1.readDashboardConfig)(serverPath);
|
|
50
|
+
// 3. Install node-pty if needed
|
|
51
|
+
(0, dashboard_launcher_js_1.ensureNodePty)(serverDir);
|
|
52
|
+
// 4. Spawn the dashboard
|
|
53
|
+
const pid = (0, dashboard_launcher_js_1.spawnDashboard)({
|
|
54
|
+
serverPath,
|
|
55
|
+
projectCwd: dashConfig.projectCwd,
|
|
56
|
+
networkMode: options.networkMode,
|
|
57
|
+
});
|
|
58
|
+
if (!pid) {
|
|
59
|
+
return (0, types_js_1.cmdErr)('Failed to spawn dashboard process.');
|
|
60
|
+
}
|
|
61
|
+
// 5. Wait for dashboard to be ready
|
|
62
|
+
const url = await (0, dashboard_launcher_js_1.waitForDashboard)();
|
|
63
|
+
if (url) {
|
|
64
|
+
if (!options.noBrowser)
|
|
65
|
+
openBrowser(url);
|
|
66
|
+
return (0, types_js_1.cmdOk)({ started: true, url, already_running: false, pid }, url);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// Dashboard was spawned but health check didn't respond in time
|
|
70
|
+
const fallbackUrl = `http://localhost:${dashboard_launcher_js_1.DEFAULT_PORT}`;
|
|
71
|
+
return (0, types_js_1.cmdOk)({
|
|
72
|
+
started: true,
|
|
73
|
+
url: fallbackUrl,
|
|
74
|
+
already_running: false,
|
|
75
|
+
pid,
|
|
76
|
+
warning: 'Dashboard spawned but health check timed out. It may still be starting.',
|
|
77
|
+
}, fallbackUrl);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/core/start.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;AAuCH,4BAmDC;AAxFD,2DAA0C;AAE1C,uCAEmB;AAEnB,mEAQiC;AAEjC,yCAA2C;AAG3C,0DAA6B;AAE7B,gFAAgF;AAEhF,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACtC,CAAC,CAAC,aAAa,GAAG,GAAG;QACrB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC7B,CAAC,CAAC,SAAS,GAAG,GAAG;YACjB,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;IAE1B,IAAA,yBAAI,EAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QAChB,IAAI,GAAG;YAAE,IAAA,kBAAQ,EAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAEzE,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,OAAuD;IAEvD,2CAA2C;IAC3C,MAAM,YAAY,GAAG,MAAM,IAAA,4CAAoB,GAAE,CAAC;IAClD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,oBAAoB,YAAY,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,IAAA,gBAAK,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;IACvF,CAAC;IAED,kCAAkC;IAClC,MAAM,UAAU,GAAG,IAAA,8CAAsB,GAAE,CAAC;IAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAA,iBAAM,EAAC,mEAAmE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,SAAS,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAA,2CAAmB,EAAC,UAAU,CAAC,CAAC;IAEnD,gCAAgC;IAChC,IAAA,qCAAa,EAAC,SAAS,CAAC,CAAC;IAEzB,yBAAyB;IACzB,MAAM,GAAG,GAAG,IAAA,sCAAc,EAAC;QACzB,UAAU;QACV,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAA,iBAAM,EAAC,oCAAoC,CAAC,CAAC;IACtD,CAAC;IAED,oCAAoC;IACpC,MAAM,GAAG,GAAG,MAAM,IAAA,wCAAgB,GAAE,CAAC;IACrC,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,IAAA,gBAAK,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,MAAM,WAAW,GAAG,oBAAoB,oCAAY,EAAE,CAAC;QACvD,OAAO,IAAA,gBAAK,EAAC;YACX,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,WAAW;YAChB,eAAe,EAAE,KAAK;YACtB,GAAG;YACH,OAAO,EAAE,yEAAyE;SACnF,EAAE,WAAW,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|