meto-cli 0.11.3 → 0.12.0
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 +19 -0
- package/dist/cli/ai-generator.d.ts +5 -2
- package/dist/cli/ai-generator.d.ts.map +1 -1
- package/dist/cli/ai-generator.js +20 -2
- package/dist/cli/ai-generator.js.map +1 -1
- package/dist/cli/index.js +57 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/setup-claude-tooling.d.ts +16 -0
- package/dist/cli/init/setup-claude-tooling.d.ts.map +1 -0
- package/dist/cli/init/setup-claude-tooling.js +58 -0
- package/dist/cli/init/setup-claude-tooling.js.map +1 -0
- package/dist/daemon/board.d.ts +23 -0
- package/dist/daemon/board.d.ts.map +1 -0
- package/dist/daemon/board.js +141 -0
- package/dist/daemon/board.js.map +1 -0
- package/dist/daemon/dispatcher.d.ts +24 -0
- package/dist/daemon/dispatcher.d.ts.map +1 -0
- package/dist/daemon/dispatcher.js +90 -0
- package/dist/daemon/dispatcher.js.map +1 -0
- package/dist/daemon/index.d.ts +6 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +10 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/server.d.ts +5 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +109 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/types.d.ts +96 -0
- package/dist/daemon/types.d.ts.map +1 -0
- package/dist/daemon/types.js +2 -0
- package/dist/daemon/types.js.map +1 -0
- package/package.json +4 -2
- package/templates/.claude/agent-memory/meto-developer/MEMORY.md +8 -0
- package/templates/.claude/agent-memory/meto-pm/MEMORY.md +8 -0
- package/templates/.claude/agent-memory/meto-tester/MEMORY.md +7 -0
- package/templates/CLAUDE.md +10 -0
package/README.md
CHANGED
|
@@ -34,6 +34,7 @@ Meto detects whether Claude Code is installed on your machine and offers two pat
|
|
|
34
34
|
2. Choose your workflow mode -- **Sprint** (sequential) or **Swarm** (parallel epic agents)
|
|
35
35
|
3. Claude Code generates your product vision, problem statement, epics, and a sliced backlog with acceptance criteria
|
|
36
36
|
4. Meto renders everything into a structured project ready for your first sprint or swarm
|
|
37
|
+
5. Context7, Sequential Thinking MCP, and ccstatusline are installed into your Claude Code environment automatically
|
|
37
38
|
|
|
38
39
|
**Without Claude Code (static):**
|
|
39
40
|
1. You answer 10 questions -- the 5 above plus problem statement, success criteria, value proposition, out of scope, and code conventions
|
|
@@ -46,6 +47,24 @@ Use `--no-ai` to force the static path even when Claude Code is available.
|
|
|
46
47
|
|
|
47
48
|
---
|
|
48
49
|
|
|
50
|
+
## Claude Tooling Setup
|
|
51
|
+
|
|
52
|
+
`meto init` automatically configures your Claude Code environment so your agents are better equipped from day one. No manual setup required.
|
|
53
|
+
|
|
54
|
+
**What gets installed into `~/.claude/settings.json`:**
|
|
55
|
+
|
|
56
|
+
| Tool | What it does |
|
|
57
|
+
|---|---|
|
|
58
|
+
| **Context7 MCP** | Injects up-to-date library documentation into agent context — reduces hallucinated APIs and outdated patterns |
|
|
59
|
+
| **Sequential Thinking MCP** | Gives agents a structured reasoning chain for complex, multi-step problems |
|
|
60
|
+
| **ccstatusline** | Adds a status line to your Claude Code terminal showing session state at a glance |
|
|
61
|
+
|
|
62
|
+
Context7 and Sequential Thinking are registered as MCP servers and activate automatically in every Claude Code session. The ccstatusline setup is interactive — you'll configure it in your terminal during `meto init`.
|
|
63
|
+
|
|
64
|
+
All three are installed with a deep merge: your existing `~/.claude/settings.json` is never overwritten, only extended.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
49
68
|
## Audit — For Existing Projects
|
|
50
69
|
|
|
51
70
|
Already built a project before Meto? Run `meto-cli audit` to scan it against the methodology blueprint and fix what's missing — interactively, one layer at a time.
|
|
@@ -37,8 +37,11 @@ export declare class AIGenerationTimeoutError extends Error {
|
|
|
37
37
|
/**
|
|
38
38
|
* Extracts plain text from Claude Code stream-json (JSONL) output.
|
|
39
39
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
40
|
+
* Current format: a `result` event at the end of the stream contains the
|
|
41
|
+
* full aggregated text in its `result` field.
|
|
42
|
+
*
|
|
43
|
+
* Fallback: older format where text arrived as content_block_delta events
|
|
44
|
+
* with text_delta payloads (kept for backwards compatibility).
|
|
42
45
|
*/
|
|
43
46
|
export declare function extractTextFromStream(jsonlStream: string): string;
|
|
44
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-generator.d.ts","sourceRoot":"","sources":["../../src/cli/ai-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;gBAErB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAOpD;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAM9B;AASD
|
|
1
|
+
{"version":3,"file":"ai-generator.d.ts","sourceRoot":"","sources":["../../src/cli/ai-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;gBAErB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAOpD;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAM9B;AASD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAwCjE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAuFlE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,mBAAmB,EAC5B,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,kBAAkB,CAAC,CA0D7B"}
|
package/dist/cli/ai-generator.js
CHANGED
|
@@ -38,11 +38,29 @@ const DEFAULT_TIMEOUT_MS = 60_000;
|
|
|
38
38
|
/**
|
|
39
39
|
* Extracts plain text from Claude Code stream-json (JSONL) output.
|
|
40
40
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
41
|
+
* Current format: a `result` event at the end of the stream contains the
|
|
42
|
+
* full aggregated text in its `result` field.
|
|
43
|
+
*
|
|
44
|
+
* Fallback: older format where text arrived as content_block_delta events
|
|
45
|
+
* with text_delta payloads (kept for backwards compatibility).
|
|
43
46
|
*/
|
|
44
47
|
export function extractTextFromStream(jsonlStream) {
|
|
45
48
|
const lines = jsonlStream.split("\n").filter((line) => line.trim());
|
|
49
|
+
// Current format: look for the result event which has the full text
|
|
50
|
+
for (const line of lines) {
|
|
51
|
+
try {
|
|
52
|
+
const event = JSON.parse(line);
|
|
53
|
+
if (event.type === "result" &&
|
|
54
|
+
event.subtype === "success" &&
|
|
55
|
+
typeof event.result === "string") {
|
|
56
|
+
return event.result;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Skip malformed lines
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Fallback: old stream_event + content_block_delta format
|
|
46
64
|
let fullText = "";
|
|
47
65
|
for (const line of lines) {
|
|
48
66
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-generator.js","sourceRoot":"","sources":["../../src/cli/ai-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAqBlD;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,oDAAoD;IAC3C,MAAM,CAAS;IACxB,wEAAwE;IAC/D,QAAQ,CAAgB;IAEjC,YAAY,MAAc,EAAE,QAAuB;QACjD,MAAM,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,KAAK,CAAC,uBAAuB,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,4CAA4C;IACnC,SAAS,CAAS;IAE3B,YAAY,SAAiB;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,iCAAiC,OAAO,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC
|
|
1
|
+
{"version":3,"file":"ai-generator.js","sourceRoot":"","sources":["../../src/cli/ai-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import { join, resolve } from "node:path";
|
|
4
4
|
import * as p from "@clack/prompts";
|
|
5
|
-
import {
|
|
5
|
+
import { collectProjectBrief } from "./prompts.js";
|
|
6
6
|
import { InterruptionHandler } from "./interruption.js";
|
|
7
7
|
import { buildTokenMap, renderTemplates, resolveTemplatesDir, } from "./renderer.js";
|
|
8
8
|
import { initGitRepo } from "./git.js";
|
|
@@ -12,9 +12,11 @@ import { formatFileTree } from "./tree.js";
|
|
|
12
12
|
import { runDoctor } from "./doctor.js";
|
|
13
13
|
import { runStatus } from "./status.js";
|
|
14
14
|
import { runAudit } from "./audit/index.js";
|
|
15
|
+
import { runDaemon } from "../daemon/index.js";
|
|
15
16
|
import { generateWithAI, AIGenerationTimeoutError } from "./ai-generator.js";
|
|
16
17
|
import { parseAIOutput, validateAIContent } from "./ai-parser.js";
|
|
17
18
|
import { generateEpicAgents, readEpicAgentTemplate, generateSwarmSettings, parseEpics, } from "./swarm.js";
|
|
19
|
+
import { setupClaudeTooling, runCcstatusline } from "./init/setup-claude-tooling.js";
|
|
18
20
|
/**
|
|
19
21
|
* Resolves the absolute path to the package root directory.
|
|
20
22
|
* At runtime: dist/cli/index.js -> package root is ../../
|
|
@@ -52,6 +54,7 @@ function printHelp() {
|
|
|
52
54
|
" init --dry-run Preview files without writing to disk",
|
|
53
55
|
" init --no-ai Skip AI generation, use standard prompts",
|
|
54
56
|
" audit Check project prerequisites and methodology compliance",
|
|
57
|
+
" daemon start Start the local agent dispatcher (WebSocket server)",
|
|
55
58
|
" doctor Check methodology health of the current project",
|
|
56
59
|
" status Show swarm progress dashboard (reads SWARM_AWARENESS.md)",
|
|
57
60
|
"",
|
|
@@ -188,20 +191,14 @@ async function main() {
|
|
|
188
191
|
catch (aiError) {
|
|
189
192
|
clearInterval(progressTimer);
|
|
190
193
|
if (aiError instanceof AIGenerationTimeoutError) {
|
|
191
|
-
aiSpinner.stop("AI generation failed --
|
|
192
|
-
p.log.warning(`No output received for ${Math.round(aiError.timeoutMs / 1000)} seconds.
|
|
194
|
+
aiSpinner.stop("AI generation failed -- scaffolding with defaults");
|
|
195
|
+
p.log.warning(`No output received for ${Math.round(aiError.timeoutMs / 1000)} seconds. Project content will use placeholder defaults — run @meto-pm to fill them in.`);
|
|
193
196
|
}
|
|
194
197
|
else {
|
|
195
198
|
const reason = aiError instanceof Error ? aiError.message : "Unknown error";
|
|
196
|
-
aiSpinner.stop("AI generation failed --
|
|
197
|
-
p.log.warning(`AI generation failed: ${reason}.
|
|
199
|
+
aiSpinner.stop("AI generation failed -- scaffolding with defaults");
|
|
200
|
+
p.log.warning(`AI generation failed: ${reason}. Project content will use placeholder defaults — run @meto-pm to fill them in.`);
|
|
198
201
|
}
|
|
199
|
-
const deep = await collectDeepContent();
|
|
200
|
-
brief.problemStatement = deep.problemStatement;
|
|
201
|
-
brief.successCriteria = deep.successCriteria;
|
|
202
|
-
brief.valueProposition = deep.valueProposition;
|
|
203
|
-
brief.outOfScope = deep.outOfScope;
|
|
204
|
-
brief.codeConventions = deep.codeConventions;
|
|
205
202
|
}
|
|
206
203
|
}
|
|
207
204
|
const s = p.spinner();
|
|
@@ -260,6 +257,18 @@ async function main() {
|
|
|
260
257
|
gitSpinner.stop("Git initialization failed -- skipping.");
|
|
261
258
|
}
|
|
262
259
|
}
|
|
260
|
+
// Claude tooling setup
|
|
261
|
+
const toolingResult = await setupClaudeTooling();
|
|
262
|
+
if (toolingResult.success) {
|
|
263
|
+
p.log.success("Claude tooling installed (Context7, Sequential Thinking)");
|
|
264
|
+
if (process.stdout.isTTY) {
|
|
265
|
+
p.log.info("Setting up Claude Code status line...");
|
|
266
|
+
runCcstatusline();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
p.log.warn(`Claude tooling setup skipped: ${toolingResult.warning}`);
|
|
271
|
+
}
|
|
263
272
|
let nextSteps;
|
|
264
273
|
if (isCwd) {
|
|
265
274
|
nextSteps = [
|
|
@@ -312,6 +321,43 @@ async function main() {
|
|
|
312
321
|
interruption.uninstall();
|
|
313
322
|
return;
|
|
314
323
|
}
|
|
324
|
+
if (arg === "daemon") {
|
|
325
|
+
const subcommand = process.argv[3];
|
|
326
|
+
if (subcommand === "start") {
|
|
327
|
+
const portFlagIndex = process.argv.indexOf("--port");
|
|
328
|
+
let port = 7890;
|
|
329
|
+
if (portFlagIndex !== -1) {
|
|
330
|
+
const portValue = Number(process.argv[portFlagIndex + 1]);
|
|
331
|
+
if (Number.isNaN(portValue) || portValue < 1 || portValue > 65535) {
|
|
332
|
+
p.log.error("Invalid port number. Must be between 1 and 65535.");
|
|
333
|
+
process.exit(1);
|
|
334
|
+
}
|
|
335
|
+
port = portValue;
|
|
336
|
+
}
|
|
337
|
+
runDaemon(port);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
// No subcommand or unknown subcommand -- show daemon help
|
|
341
|
+
p.intro("meto-cli daemon -- local agent dispatcher");
|
|
342
|
+
p.note([
|
|
343
|
+
"Usage: meto-cli daemon <command> [options]",
|
|
344
|
+
"",
|
|
345
|
+
"Commands:",
|
|
346
|
+
" start Start the daemon WebSocket server",
|
|
347
|
+
"",
|
|
348
|
+
"Options:",
|
|
349
|
+
" --port <number> Port number (default: 7890)",
|
|
350
|
+
"",
|
|
351
|
+
"The daemon runs a WebSocket server on localhost that the",
|
|
352
|
+
"Meto cockpit connects to for:",
|
|
353
|
+
" - Reading project boards from local files",
|
|
354
|
+
" - Creating and moving tasks locally",
|
|
355
|
+
" - Dispatching Claude Code agent sessions",
|
|
356
|
+
" - Streaming agent output in real-time",
|
|
357
|
+
].join("\n"), "Help");
|
|
358
|
+
p.outro("Run 'meto-cli daemon start' to launch the daemon.");
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
315
361
|
if (arg === "audit") {
|
|
316
362
|
await runAudit();
|
|
317
363
|
return;
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,SAAS,kBAAkB;IACzB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtD,OAAO,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW;IACxB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,SAAS,IAAI,MAAM;QACnB,OAAQ,MAAkC,CAAC,OAAO,KAAK,QAAQ,EAC/D,CAAC;QACD,OAAQ,MAAkC,CAAC,OAAiB,CAAC;IAC/D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,CAAC,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC7D,CAAC,CAAC,IAAI,CACJ;QACE,qCAAqC;QACrC,EAAE;QACF,WAAW;QACX,uDAAuD;QACvD,2DAA2D;QAC3D,8DAA8D;QAC9D,4EAA4E;QAC5E,qEAAqE;QACrE,8EAA8E;QAC9E,EAAE;QACF,UAAU;QACV,4CAA4C;QAC5C,gDAAgD;KACjD,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,MAAM,CACP,CAAC;IACF,CAAC,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC1D,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QACpC,CAAC,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC/C,YAAY,CAAC,OAAO,EAAE,CAAC;QAEvB,CAAC,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAE7D,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;gBACpC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAClC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACxE,CAAC;YACD,YAAY,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAC5B,CAAC,CAAC,GAAG,CAAC,OAAO,CACX,sFAAsF,CACvF,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,KAAK,GAAG,SAAS,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC;QAEvD,IAAI,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;YACzC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAEtE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;gBAChC,OAAO,EAAE,0CAA0C;gBACnD,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBACrC,YAAY,CAAC,SAAS,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,KAAK,GAAG,SAAS,CAAC;YAElB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,CAAC,CAAC,GAAG,CAAC,OAAO,CACX,mDAAmD;gBACnD,qDAAqD;gBACrD,8CAA8C;gBAC9C,kDAAkD,CACnD,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnD,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACrE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxB,YAAY,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GACd,KAAK,CAAC,SAAS,KAAK,QAAQ;YAC1B,CAAC,CAAC,KAAK,CAAC,WAAW;YACnB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QAEtB,CAAC,CAAC,IAAI,CACJ;YACE,eAAe,KAAK,CAAC,WAAW,EAAE;YAClC,eAAe,KAAK,CAAC,WAAW,EAAE;YAClC,eAAe,KAAK,CAAC,WAAW,EAAE;YAClC,eAAe,UAAU,EAAE;YAC3B,eAAe,KAAK,CAAC,eAAe,EAAE;SACvC,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,eAAe,CAChB,CAAC;QAEF,IAAI,SAAyC,CAAC;QAE9C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9B,SAAS,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAElE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBACrC,cAAc,IAAI,EAAE,CAAC;gBACrB,SAAS,CAAC,OAAO,CAAC,mDAAmD,cAAc,IAAI,CAAC,CAAC;YAC3F,CAAC,EAAE,MAAM,CAAC,CAAC;YAEX,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;oBACpC,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAC;gBAEH,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEjE,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACxC,SAAS,CAAC,IAAI,CAAC,8BAA8B,YAAY,IAAI,CAAC,CAAC;gBAE/D,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAChD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;wBAC1C,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAED,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnE,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnF,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,KAAK,2BAA2B,CAAC;gBAEjF,MAAM,eAAe,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtE,MAAM,aAAa,GACjB,eAAe,CAAC,MAAM,GAAG,EAAE;oBACzB,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;oBACtC,CAAC,CAAC,eAAe,CAAC;gBAEtB,MAAM,YAAY,GAAa;oBAC7B,WAAW,aAAa,EAAE;oBAC1B,UAAU,SAAS,EAAE;oBACrB,UAAU,SAAS,EAAE;oBACrB,QAAQ,aAAa,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,EAAE;iBAC7D,CAAC;gBAEF,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,OAAgB,EAAE,CAAC;gBAC1B,aAAa,CAAC,aAAa,CAAC,CAAC;gBAE7B,IAAI,OAAO,YAAY,wBAAwB,EAAE,CAAC;oBAChD,SAAS,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;oBAC3E,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,0BAA0B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC7H,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GACV,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;oBAC/D,SAAS,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;oBAC3E,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,yBAAyB,MAAM,qCAAqC,CAAC,CAAC;gBACtF,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,kBAAkB,EAAE,CAAC;gBACxC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC/C,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC7C,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC/C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBACnC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,MAAM,eAAe,CACzC,YAAY,EACZ,MAAM,EACN,KAAK,CAAC,YAAY,CACnB,CAAC;YAEF,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;gBACnC,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC1C,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACpE,MAAM,cAAc,GAAG,kBAAkB,CACvC,YAAY,EACZ,iBAAiB,CAClB,CAAC;gBACF,aAAa,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;gBAEtC,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;oBACrD,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,uBAAuB,CACtE,CAAC;oBACF,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;wBACzB,aAAa,CAAC,aAAa,CAAC,GAAG;4BAC7B,YAAY,EAAE,uBAAuB;4BACrC,OAAO,EAAE,aAAa;yBACvB,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;gBAExC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBAEvC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;gBAC5C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnD,CAAC,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBACpD,YAAY,CAAC,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;YAElD,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,KAAK,CAAC,eAAe,EACrB,aAAa,EACb,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACF,YAAY,CAAC,MAAM,EAAE,CAAC;YAEtB,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,CAAC,CAAC,IAAI,CAAC,uBAAuB,OAAO,iBAAiB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;YAChG,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC/B,UAAU,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAEnD,IAAI,CAAC;oBACH,MAAM,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;oBACzC,UAAU,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;oBAC/C,gBAAgB,GAAG,IAAI,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACP,UAAU,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,IAAI,SAAmB,CAAC;YACxB,IAAI,KAAK,EAAE,CAAC;gBACV,SAAS,GAAG;oBACV,iDAAiD;oBACjD,EAAE;oBACF,2BAA2B;oBAC3B,WAAW;iBACZ,CAAC;gBAEF,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;oBAClC,SAAS,CAAC,IAAI,CACZ,EAAE,EACF,sBAAsB,EACtB,WAAW,EACX,EAAE,EACF,yDAAyD,EACzD,4DAA4D,CAC7D,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,IAAI,CACZ,EAAE,EACF,4DAA4D,EAC5D,6CAA6C,EAC7C,EAAE,EACF,sBAAsB,EACtB,WAAW,EACX,EAAE,EACF,yDAAyD,EACzD,4DAA4D,CAC7D,CAAC;gBACJ,CAAC;gBAED,SAAS,CAAC,IAAI,CACZ,EAAE,EACF,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,8CAA8C,EAC1F,mBAAmB,CACpB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG;oBACV,4BAA4B,KAAK,CAAC,eAAe,EAAE;oBACnD,EAAE;oBACF,2BAA2B;oBAC3B,WAAW,KAAK,CAAC,eAAe,EAAE;iBACnC,CAAC;gBAEF,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;oBAClC,SAAS,CAAC,IAAI,CACZ,EAAE,EACF,4CAA4C,EAC5C,SAAS,KAAK,CAAC,eAAe,YAAY,EAC1C,EAAE,EACF,yDAAyD,EACzD,4DAA4D,CAC7D,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,IAAI,CACZ,EAAE,EACF,4DAA4D,EAC5D,6CAA6C,EAC7C,EAAE,EACF,4CAA4C,EAC5C,SAAS,KAAK,CAAC,eAAe,YAAY,EAC1C,EAAE,EACF,yDAAyD,EACzD,4DAA4D,CAC7D,CAAC;gBACJ,CAAC;gBAED,SAAS,CAAC,IAAI,CACZ,EAAE,EACF,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,8CAA8C,EAC1F,mBAAmB,CACpB,CAAC;YACJ,CAAC;YAED,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;YAE5C,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClB,YAAY,CAAC,MAAM,EAAE,CAAC;YAEtB,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAClC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC1E,CAAC;YAED,YAAY,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,YAAY,CAAC,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,QAAQ,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,SAAS,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,SAAS,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,CAAC,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC7D,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAC/D,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ClaudeSettings {
|
|
2
|
+
enabledPlugins?: Record<string, boolean>;
|
|
3
|
+
mcpServers?: Record<string, {
|
|
4
|
+
command: string;
|
|
5
|
+
args: string[];
|
|
6
|
+
}>;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface SetupResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
warning?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function mergeTooling(existing: ClaudeSettings): ClaudeSettings;
|
|
14
|
+
export declare function runCcstatusline(): void;
|
|
15
|
+
export declare function setupClaudeTooling(): Promise<SetupResult>;
|
|
16
|
+
//# sourceMappingURL=setup-claude-tooling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-claude-tooling.d.ts","sourceRoot":"","sources":["../../../src/cli/init/setup-claude-tooling.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACjE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA4BD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAgBrE;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CAW/D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, dirname } from "node:path";
|
|
4
|
+
import { spawnSync } from "node:child_process";
|
|
5
|
+
function claudeSettingsPath() {
|
|
6
|
+
return join(homedir(), ".claude", "settings.json");
|
|
7
|
+
}
|
|
8
|
+
async function readSettings(path) {
|
|
9
|
+
try {
|
|
10
|
+
const raw = await readFile(path, "utf-8");
|
|
11
|
+
return JSON.parse(raw);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (typeof error === "object" &&
|
|
15
|
+
error !== null &&
|
|
16
|
+
"code" in error &&
|
|
17
|
+
error.code === "ENOENT") {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function writeSettings(path, settings) {
|
|
24
|
+
await mkdir(dirname(path), { recursive: true });
|
|
25
|
+
await writeFile(path, JSON.stringify(settings, null, 4), "utf-8");
|
|
26
|
+
}
|
|
27
|
+
export function mergeTooling(existing) {
|
|
28
|
+
const result = { ...existing };
|
|
29
|
+
result.mcpServers = {
|
|
30
|
+
...existing.mcpServers,
|
|
31
|
+
"context7": {
|
|
32
|
+
command: "npx",
|
|
33
|
+
args: ["-y", "@upstash/context7-mcp@latest"],
|
|
34
|
+
},
|
|
35
|
+
"sequential-thinking": {
|
|
36
|
+
command: "npx",
|
|
37
|
+
args: ["-y", "@modelcontextprotocol/server-sequential-thinking"],
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
export function runCcstatusline() {
|
|
43
|
+
spawnSync("npx", ["ccstatusline@latest"], { stdio: "inherit" });
|
|
44
|
+
}
|
|
45
|
+
export async function setupClaudeTooling() {
|
|
46
|
+
const path = claudeSettingsPath();
|
|
47
|
+
try {
|
|
48
|
+
const existing = await readSettings(path);
|
|
49
|
+
const merged = mergeTooling(existing);
|
|
50
|
+
await writeSettings(path, merged);
|
|
51
|
+
return { success: true };
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
55
|
+
return { success: false, warning: `Could not update ~/.claude/settings.json: ${msg}` };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=setup-claude-tooling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-claude-tooling.js","sourceRoot":"","sources":["../../../src/cli/init/setup-claude-tooling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAa/C,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACd,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAClD,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,QAAwB;IACjE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAwB;IACnD,MAAM,MAAM,GAAmB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE/C,MAAM,CAAC,UAAU,GAAG;QAClB,GAAG,QAAQ,CAAC,UAAU;QACtB,UAAU,EAAE;YACV,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,8BAA8B,CAAC;SAC7C;QACD,qBAAqB,EAAE;YACrB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,kDAAkD,CAAC;SACjE;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,SAAS,CAAC,KAAK,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6CAA6C,GAAG,EAAE,EAAE,CAAC;IACzF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { TaskItem, BoardSummary } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Reads the full board from a project's local filesystem.
|
|
4
|
+
*/
|
|
5
|
+
export declare function readBoard(projectPath: string): Promise<{
|
|
6
|
+
tasks: TaskItem[];
|
|
7
|
+
summary: BoardSummary;
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new task by appending to tasks-todo.md.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createTask(projectPath: string, taskId: string, title: string, body: string): Promise<{
|
|
13
|
+
success: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Moves a task between board columns by editing local files.
|
|
18
|
+
*/
|
|
19
|
+
export declare function moveTask(projectPath: string, taskId: string, fromColumn: string, toColumn: string): Promise<{
|
|
20
|
+
success: boolean;
|
|
21
|
+
error?: string;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/daemon/board.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsDzD;;GAEG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAc1G;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAc/C;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B/C"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const COLUMNS = ["backlog", "todo", "in-progress", "in-testing", "done"];
|
|
4
|
+
const COLUMN_FILES = {
|
|
5
|
+
backlog: "ai/tasks/tasks-backlog.md",
|
|
6
|
+
todo: "ai/tasks/tasks-todo.md",
|
|
7
|
+
"in-progress": "ai/tasks/tasks-in-progress.md",
|
|
8
|
+
"in-testing": "ai/tasks/tasks-in-testing.md",
|
|
9
|
+
done: "ai/tasks/tasks-done.md",
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Reads a file, returning empty string if it doesn't exist.
|
|
13
|
+
*/
|
|
14
|
+
async function safeRead(path) {
|
|
15
|
+
try {
|
|
16
|
+
return await readFile(path, "utf-8");
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parses tasks from meto markdown format.
|
|
24
|
+
*/
|
|
25
|
+
function parseTasks(content, column) {
|
|
26
|
+
const tasks = [];
|
|
27
|
+
const lines = content.split("\n");
|
|
28
|
+
let current = null;
|
|
29
|
+
for (const line of lines) {
|
|
30
|
+
const sliceMatch = line.match(/^## \[?(slice-\d+)\]?\s*[:\-—]?\s*(.*)/i);
|
|
31
|
+
if (sliceMatch) {
|
|
32
|
+
if (current) {
|
|
33
|
+
tasks.push({ id: current.id, title: current.title, body: current.bodyLines.join("\n").trim(), column });
|
|
34
|
+
}
|
|
35
|
+
current = { id: sliceMatch[1] ?? "unknown", title: sliceMatch[2]?.trim() ?? "", bodyLines: [] };
|
|
36
|
+
}
|
|
37
|
+
else if (line.startsWith("## ") && current) {
|
|
38
|
+
tasks.push({ id: current.id, title: current.title, body: current.bodyLines.join("\n").trim(), column });
|
|
39
|
+
const altTitle = line.replace(/^## /, "").trim();
|
|
40
|
+
current = { id: altTitle.toLowerCase().replace(/\s+/g, "-"), title: altTitle, bodyLines: [] };
|
|
41
|
+
}
|
|
42
|
+
else if (current) {
|
|
43
|
+
current.bodyLines.push(line);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (current) {
|
|
47
|
+
tasks.push({ id: current.id, title: current.title, body: current.bodyLines.join("\n").trim(), column });
|
|
48
|
+
}
|
|
49
|
+
return tasks;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reads the full board from a project's local filesystem.
|
|
53
|
+
*/
|
|
54
|
+
export async function readBoard(projectPath) {
|
|
55
|
+
const allTasks = [];
|
|
56
|
+
const summary = { backlog: 0, todo: 0, "in-progress": 0, "in-testing": 0, done: 0 };
|
|
57
|
+
for (const column of COLUMNS) {
|
|
58
|
+
const file = COLUMN_FILES[column];
|
|
59
|
+
const filePath = join(projectPath, file);
|
|
60
|
+
const content = await safeRead(filePath);
|
|
61
|
+
const tasks = parseTasks(content, column);
|
|
62
|
+
allTasks.push(...tasks);
|
|
63
|
+
summary[column] = tasks.length;
|
|
64
|
+
}
|
|
65
|
+
return { tasks: allTasks, summary };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Creates a new task by appending to tasks-todo.md.
|
|
69
|
+
*/
|
|
70
|
+
export async function createTask(projectPath, taskId, title, body) {
|
|
71
|
+
const filePath = join(projectPath, COLUMN_FILES["todo"]);
|
|
72
|
+
const existing = await safeRead(filePath);
|
|
73
|
+
const taskBlock = `\n## [${taskId}] ${title}\n\n${body}\n`;
|
|
74
|
+
const newContent = existing.trimEnd() + "\n" + taskBlock;
|
|
75
|
+
try {
|
|
76
|
+
await writeFile(filePath, newContent, "utf-8");
|
|
77
|
+
return { success: true };
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
const msg = err instanceof Error ? err.message : "Unknown error";
|
|
81
|
+
return { success: false, error: msg };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Moves a task between board columns by editing local files.
|
|
86
|
+
*/
|
|
87
|
+
export async function moveTask(projectPath, taskId, fromColumn, toColumn) {
|
|
88
|
+
const sourceFile = COLUMN_FILES[fromColumn];
|
|
89
|
+
const destFile = COLUMN_FILES[toColumn];
|
|
90
|
+
if (!sourceFile || !destFile) {
|
|
91
|
+
return { success: false, error: "Invalid column" };
|
|
92
|
+
}
|
|
93
|
+
const sourcePath = join(projectPath, sourceFile);
|
|
94
|
+
const destPath = join(projectPath, destFile);
|
|
95
|
+
const sourceContent = await safeRead(sourcePath);
|
|
96
|
+
const { remaining, extracted } = extractTaskBlock(sourceContent, taskId);
|
|
97
|
+
if (!extracted) {
|
|
98
|
+
return { success: false, error: `Task ${taskId} not found in ${fromColumn}` };
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
await writeFile(sourcePath, remaining, "utf-8");
|
|
102
|
+
const destContent = await safeRead(destPath);
|
|
103
|
+
const newDest = destContent.trimEnd() + "\n\n" + extracted.trim() + "\n";
|
|
104
|
+
await writeFile(destPath, newDest, "utf-8");
|
|
105
|
+
return { success: true };
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const msg = err instanceof Error ? err.message : "Unknown error";
|
|
109
|
+
return { success: false, error: msg };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function extractTaskBlock(content, taskId) {
|
|
113
|
+
const lines = content.split("\n");
|
|
114
|
+
let inTask = false;
|
|
115
|
+
let taskStart = -1;
|
|
116
|
+
let taskEnd = lines.length;
|
|
117
|
+
for (let i = 0; i < lines.length; i++) {
|
|
118
|
+
const line = lines[i] ?? "";
|
|
119
|
+
if (line.startsWith("## ")) {
|
|
120
|
+
if (inTask) {
|
|
121
|
+
taskEnd = i;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
const idMatch = line.match(/\[?(slice-\d+)\]?/i);
|
|
125
|
+
if (idMatch && idMatch[1]?.toLowerCase() === taskId.toLowerCase()) {
|
|
126
|
+
inTask = true;
|
|
127
|
+
taskStart = i;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (taskStart === -1) {
|
|
132
|
+
return { remaining: content, extracted: null };
|
|
133
|
+
}
|
|
134
|
+
const extracted = lines.slice(taskStart, taskEnd).join("\n");
|
|
135
|
+
const remaining = [...lines.slice(0, taskStart), ...lines.slice(taskEnd)]
|
|
136
|
+
.join("\n")
|
|
137
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
138
|
+
.trim() + "\n";
|
|
139
|
+
return { remaining, extracted };
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=board.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/daemon/board.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SessionInfo } from "./types.js";
|
|
2
|
+
type EventCallback = (sessionId: string, event: string) => void;
|
|
3
|
+
type CompleteCallback = (sessionId: string, exitCode: number) => void;
|
|
4
|
+
type ErrorCallback = (sessionId: string, error: string) => void;
|
|
5
|
+
/**
|
|
6
|
+
* Dispatches a Claude Code session in the given project directory.
|
|
7
|
+
* Spawns `claude -p "prompt" --output-format stream-json` and streams output.
|
|
8
|
+
*/
|
|
9
|
+
export declare function dispatch(projectPath: string, agent: string, prompt: string, onEvent: EventCallback, onComplete: CompleteCallback, onError: ErrorCallback): {
|
|
10
|
+
sessionId: string;
|
|
11
|
+
pid: number;
|
|
12
|
+
} | {
|
|
13
|
+
error: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Cancels an active session by killing the process.
|
|
17
|
+
*/
|
|
18
|
+
export declare function cancelSession(sessionId: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Returns info about all active sessions.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getActiveSessions(): SessionInfo[];
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAW9C,KAAK,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAChE,KAAK,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AACtE,KAAK,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAIhE;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,aAAa,GACrB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAqExD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAOxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,EAAE,CAQjD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
const activeSessions = new Map();
|
|
4
|
+
/**
|
|
5
|
+
* Dispatches a Claude Code session in the given project directory.
|
|
6
|
+
* Spawns `claude -p "prompt" --output-format stream-json` and streams output.
|
|
7
|
+
*/
|
|
8
|
+
export function dispatch(projectPath, agent, prompt, onEvent, onComplete, onError) {
|
|
9
|
+
// Check if this project already has an active session
|
|
10
|
+
for (const session of activeSessions.values()) {
|
|
11
|
+
if (session.projectPath === projectPath) {
|
|
12
|
+
return { error: `Project already has an active session (${session.id})` };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const sessionId = randomUUID();
|
|
16
|
+
const args = ["-p", prompt, "--verbose", "--output-format", "stream-json"];
|
|
17
|
+
const child = spawn("claude", args, {
|
|
18
|
+
cwd: projectPath,
|
|
19
|
+
env: { ...process.env },
|
|
20
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
21
|
+
});
|
|
22
|
+
if (!child.pid) {
|
|
23
|
+
return { error: "Failed to spawn claude process. Is Claude Code installed?" };
|
|
24
|
+
}
|
|
25
|
+
const session = {
|
|
26
|
+
id: sessionId,
|
|
27
|
+
projectPath,
|
|
28
|
+
agent,
|
|
29
|
+
process: child,
|
|
30
|
+
pid: child.pid,
|
|
31
|
+
startedAt: new Date().toISOString(),
|
|
32
|
+
};
|
|
33
|
+
activeSessions.set(sessionId, session);
|
|
34
|
+
// Stream stdout line by line
|
|
35
|
+
let buffer = "";
|
|
36
|
+
child.stdout?.on("data", (chunk) => {
|
|
37
|
+
buffer += chunk.toString();
|
|
38
|
+
const lines = buffer.split("\n");
|
|
39
|
+
buffer = lines.pop() ?? "";
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
if (line.trim()) {
|
|
42
|
+
onEvent(sessionId, line);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// Capture stderr and forward to cockpit
|
|
47
|
+
child.stderr?.on("data", (chunk) => {
|
|
48
|
+
const text = chunk.toString().trim();
|
|
49
|
+
if (text) {
|
|
50
|
+
onEvent(sessionId, `[stderr] ${text}`);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
child.on("close", (code) => {
|
|
54
|
+
// Flush remaining buffer
|
|
55
|
+
if (buffer.trim()) {
|
|
56
|
+
onEvent(sessionId, buffer.trim());
|
|
57
|
+
}
|
|
58
|
+
activeSessions.delete(sessionId);
|
|
59
|
+
onComplete(sessionId, code ?? 1);
|
|
60
|
+
});
|
|
61
|
+
child.on("error", (err) => {
|
|
62
|
+
activeSessions.delete(sessionId);
|
|
63
|
+
onError(sessionId, err.message);
|
|
64
|
+
});
|
|
65
|
+
return { sessionId, pid: child.pid };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Cancels an active session by killing the process.
|
|
69
|
+
*/
|
|
70
|
+
export function cancelSession(sessionId) {
|
|
71
|
+
const session = activeSessions.get(sessionId);
|
|
72
|
+
if (!session)
|
|
73
|
+
return false;
|
|
74
|
+
session.process.kill("SIGTERM");
|
|
75
|
+
activeSessions.delete(sessionId);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Returns info about all active sessions.
|
|
80
|
+
*/
|
|
81
|
+
export function getActiveSessions() {
|
|
82
|
+
return Array.from(activeSessions.values()).map((s) => ({
|
|
83
|
+
session_id: s.id,
|
|
84
|
+
project_path: s.projectPath,
|
|
85
|
+
agent: s.agent,
|
|
86
|
+
pid: s.pid,
|
|
87
|
+
started_at: s.startedAt,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAqB,GAAG,IAAI,CAE3D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { startServer } from "./server.js";
|
|
2
|
+
const DEFAULT_PORT = 7890;
|
|
3
|
+
/**
|
|
4
|
+
* Runs the meto daemon WebSocket server.
|
|
5
|
+
* The daemon stays running until terminated via SIGINT or SIGTERM.
|
|
6
|
+
*/
|
|
7
|
+
export function runDaemon(port = DEFAULT_PORT) {
|
|
8
|
+
startServer(port);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe,YAAY;IACnD,WAAW,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"AAyFA;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAyC9C"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { WebSocketServer } from "ws";
|
|
2
|
+
import { readBoard, createTask, moveTask } from "./board.js";
|
|
3
|
+
import { dispatch, cancelSession, getActiveSessions } from "./dispatcher.js";
|
|
4
|
+
function send(ws, msg) {
|
|
5
|
+
if (ws.readyState === ws.OPEN) {
|
|
6
|
+
ws.send(JSON.stringify(msg));
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Handles a single message from the cockpit/dashboard.
|
|
11
|
+
*/
|
|
12
|
+
async function handleMessage(ws, raw) {
|
|
13
|
+
let msg;
|
|
14
|
+
try {
|
|
15
|
+
msg = JSON.parse(raw);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
send(ws, { type: "error", message: "Invalid JSON" });
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
switch (msg.type) {
|
|
22
|
+
case "ping": {
|
|
23
|
+
send(ws, { type: "pong" });
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
case "status": {
|
|
27
|
+
send(ws, { type: "status_response", active_sessions: getActiveSessions() });
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case "read_board": {
|
|
31
|
+
const { tasks, summary } = await readBoard(msg.project_path);
|
|
32
|
+
send(ws, { type: "board_result", id: msg.id, tasks, summary });
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
case "create_task": {
|
|
36
|
+
const result = await createTask(msg.project_path, msg.task_id, msg.title, msg.body);
|
|
37
|
+
send(ws, { type: "task_created", id: msg.id, success: result.success, error: result.error });
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
case "move_task": {
|
|
41
|
+
const result = await moveTask(msg.project_path, msg.task_id, msg.from, msg.to);
|
|
42
|
+
send(ws, { type: "task_moved", id: msg.id, success: result.success, error: result.error });
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case "dispatch": {
|
|
46
|
+
const result = dispatch(msg.project_path, msg.agent, msg.prompt, (sessionId, data) => send(ws, { type: "stream_event", session_id: sessionId, data }), (sessionId, exitCode) => send(ws, { type: "session_completed", session_id: sessionId, exit_code: exitCode }), (sessionId, error) => send(ws, { type: "session_error", session_id: sessionId, error }));
|
|
47
|
+
if ("error" in result) {
|
|
48
|
+
send(ws, { type: "error", message: result.error });
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
send(ws, {
|
|
52
|
+
type: "session_started",
|
|
53
|
+
session_id: result.sessionId,
|
|
54
|
+
project_path: msg.project_path,
|
|
55
|
+
pid: result.pid,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
case "cancel": {
|
|
61
|
+
const cancelled = cancelSession(msg.session_id);
|
|
62
|
+
if (!cancelled) {
|
|
63
|
+
send(ws, { type: "error", message: `Session ${msg.session_id} not found` });
|
|
64
|
+
}
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
default: {
|
|
68
|
+
send(ws, { type: "error", message: "Unknown message type" });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Starts the daemon WebSocket server.
|
|
74
|
+
*/
|
|
75
|
+
export function startServer(port) {
|
|
76
|
+
const wss = new WebSocketServer({ host: "127.0.0.1", port });
|
|
77
|
+
process.stdout.write(`\n meto daemon running on ws://127.0.0.1:${port}\n\n`);
|
|
78
|
+
process.stdout.write(` waiting for cockpit connection...\n\n`);
|
|
79
|
+
wss.on("connection", (ws) => {
|
|
80
|
+
process.stdout.write(` cockpit connected\n`);
|
|
81
|
+
ws.on("message", (data) => {
|
|
82
|
+
void handleMessage(ws, data.toString());
|
|
83
|
+
});
|
|
84
|
+
ws.on("close", () => {
|
|
85
|
+
process.stdout.write(` cockpit disconnected\n`);
|
|
86
|
+
});
|
|
87
|
+
ws.on("error", (err) => {
|
|
88
|
+
process.stderr.write(` websocket error: ${err.message}\n`);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
wss.on("error", (err) => {
|
|
92
|
+
if (err.code === "EADDRINUSE") {
|
|
93
|
+
process.stderr.write(`\n error: port ${port} already in use. is another daemon running?\n\n`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
process.stderr.write(` server error: ${err.message}\n`);
|
|
97
|
+
});
|
|
98
|
+
// Graceful shutdown
|
|
99
|
+
process.on("SIGINT", () => {
|
|
100
|
+
process.stdout.write(`\n shutting down daemon...\n`);
|
|
101
|
+
wss.close();
|
|
102
|
+
process.exit(0);
|
|
103
|
+
});
|
|
104
|
+
process.on("SIGTERM", () => {
|
|
105
|
+
wss.close();
|
|
106
|
+
process.exit(0);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** Messages FROM the cockpit/dashboard TO the daemon */
|
|
2
|
+
export type CockpitMessage = {
|
|
3
|
+
type: "dispatch";
|
|
4
|
+
id: string;
|
|
5
|
+
project_path: string;
|
|
6
|
+
agent: string;
|
|
7
|
+
prompt: string;
|
|
8
|
+
} | {
|
|
9
|
+
type: "cancel";
|
|
10
|
+
session_id: string;
|
|
11
|
+
} | {
|
|
12
|
+
type: "read_board";
|
|
13
|
+
id: string;
|
|
14
|
+
project_path: string;
|
|
15
|
+
} | {
|
|
16
|
+
type: "create_task";
|
|
17
|
+
id: string;
|
|
18
|
+
project_path: string;
|
|
19
|
+
task_id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
body: string;
|
|
22
|
+
} | {
|
|
23
|
+
type: "move_task";
|
|
24
|
+
id: string;
|
|
25
|
+
project_path: string;
|
|
26
|
+
task_id: string;
|
|
27
|
+
from: string;
|
|
28
|
+
to: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: "ping";
|
|
31
|
+
} | {
|
|
32
|
+
type: "status";
|
|
33
|
+
};
|
|
34
|
+
/** Messages FROM the daemon TO the cockpit/dashboard */
|
|
35
|
+
export type DaemonMessage = {
|
|
36
|
+
type: "session_started";
|
|
37
|
+
session_id: string;
|
|
38
|
+
project_path: string;
|
|
39
|
+
pid: number;
|
|
40
|
+
} | {
|
|
41
|
+
type: "stream_event";
|
|
42
|
+
session_id: string;
|
|
43
|
+
data: string;
|
|
44
|
+
} | {
|
|
45
|
+
type: "session_completed";
|
|
46
|
+
session_id: string;
|
|
47
|
+
exit_code: number;
|
|
48
|
+
} | {
|
|
49
|
+
type: "session_error";
|
|
50
|
+
session_id: string;
|
|
51
|
+
error: string;
|
|
52
|
+
} | {
|
|
53
|
+
type: "board_result";
|
|
54
|
+
id: string;
|
|
55
|
+
tasks: TaskItem[];
|
|
56
|
+
summary: BoardSummary;
|
|
57
|
+
} | {
|
|
58
|
+
type: "task_created";
|
|
59
|
+
id: string;
|
|
60
|
+
success: boolean;
|
|
61
|
+
error?: string;
|
|
62
|
+
} | {
|
|
63
|
+
type: "task_moved";
|
|
64
|
+
id: string;
|
|
65
|
+
success: boolean;
|
|
66
|
+
error?: string;
|
|
67
|
+
} | {
|
|
68
|
+
type: "pong";
|
|
69
|
+
} | {
|
|
70
|
+
type: "status_response";
|
|
71
|
+
active_sessions: SessionInfo[];
|
|
72
|
+
} | {
|
|
73
|
+
type: "error";
|
|
74
|
+
message: string;
|
|
75
|
+
};
|
|
76
|
+
export interface SessionInfo {
|
|
77
|
+
session_id: string;
|
|
78
|
+
project_path: string;
|
|
79
|
+
agent: string;
|
|
80
|
+
pid: number;
|
|
81
|
+
started_at: string;
|
|
82
|
+
}
|
|
83
|
+
export interface TaskItem {
|
|
84
|
+
id: string;
|
|
85
|
+
title: string;
|
|
86
|
+
body: string;
|
|
87
|
+
column: string;
|
|
88
|
+
}
|
|
89
|
+
export interface BoardSummary {
|
|
90
|
+
backlog: number;
|
|
91
|
+
todo: number;
|
|
92
|
+
"in-progress": number;
|
|
93
|
+
"in-testing": number;
|
|
94
|
+
done: number;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/daemon/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/daemon/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "meto-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Scaffold structured software projects with built-in methodology",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -37,10 +37,12 @@
|
|
|
37
37
|
"node": ">=18.0.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@clack/prompts": "^0.9.1"
|
|
40
|
+
"@clack/prompts": "^0.9.1",
|
|
41
|
+
"ws": "^8.19.0"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
44
|
"@types/node": "^22.13.0",
|
|
45
|
+
"@types/ws": "^8.18.1",
|
|
44
46
|
"typescript": "^5.7.0",
|
|
45
47
|
"vitest": "^4.0.18"
|
|
46
48
|
}
|
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## Red Flags — Stop Before Acting
|
|
8
|
+
|
|
9
|
+
- Writing implementation code before a failing test exists → write the test first
|
|
10
|
+
- Third fix attempt on the same bug hasn't worked → stop, re-read the spec, re-plan
|
|
11
|
+
- About to claim a task is done without running the verification command this session → run it first
|
|
12
|
+
- Touching files outside the task's stated scope → flag it, don't silently expand
|
|
13
|
+
- Hardcoding content that should come from a template or config → read from source
|
|
14
|
+
|
|
7
15
|
## Active Decisions
|
|
8
16
|
<!-- Architecture or implementation decisions in progress -->
|
|
9
17
|
|
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## Red Flags — Stop Before Acting
|
|
8
|
+
|
|
9
|
+
- Slicing without clarifying ambiguous requirements → run clarification process first (`ai/workflows/pm-clarification-process.md`)
|
|
10
|
+
- Creating slices larger than M → break them down
|
|
11
|
+
- Writing acceptance criteria with vague language ("works well", "looks good") → make them testable
|
|
12
|
+
- Re-debating a settled decision from `decisions.md` → flag the conflict instead
|
|
13
|
+
- Touching Layer 2 (`/templates/`) logic from a Layer 1 task → split into separate slices
|
|
14
|
+
|
|
7
15
|
## Active Decisions
|
|
8
16
|
<!-- Decisions in progress — move to decisions.md once finalized -->
|
|
9
17
|
|
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## Review Conduct
|
|
8
|
+
|
|
9
|
+
- **No performative acceptance** — never say "you're absolutely right" and immediately implement without evaluating.
|
|
10
|
+
- **Push back with reasoning** — flag technical disagreements with an argument, not just compliance.
|
|
11
|
+
- **Clarify before acting** — unclear requirement? Ask one specific question rather than testing the wrong thing.
|
|
12
|
+
- **Evidence over assertion** — show the command output when marking pass/fail. Never claim tests pass without running them this session.
|
|
13
|
+
|
|
7
14
|
## Active Decisions
|
|
8
15
|
<!-- Testing approach decisions in progress -->
|
|
9
16
|
|
package/templates/CLAUDE.md
CHANGED
|
@@ -89,6 +89,16 @@ Teammates do NOT inherit the lead's conversation history. Each teammate reads CL
|
|
|
89
89
|
|
|
90
90
|
---
|
|
91
91
|
|
|
92
|
+
## Workflow Rules
|
|
93
|
+
|
|
94
|
+
- **Plan first:** For any task with 3+ steps or architectural decisions, enter plan mode before writing code. If something goes sideways, STOP and re-plan.
|
|
95
|
+
- **Test first, always:** Write the failing test before implementation. Watch it fail, then make it pass. Code written before a test = delete and restart.
|
|
96
|
+
- **Systematic debugging:** Root-cause first — read the error, trace the call, form a hypothesis. If 3 distinct fixes fail, stop and re-plan rather than trying a fourth.
|
|
97
|
+
- **Verify before done:** Never mark a task complete without running the verification command in the current session. No verbal claims — show the output.
|
|
98
|
+
- **Minimal impact:** Changes touch only what's necessary. No temporary fixes — find root causes.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
92
102
|
## Commit Format
|
|
93
103
|
|
|
94
104
|
```
|