meto-cli 0.11.3 → 0.12.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 +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/audit/index.d.ts.map +1 -1
- package/dist/cli/audit/index.js +76 -1
- package/dist/cli/audit/index.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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/audit/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/audit/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQpD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;CACjB;AA6LD;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAyJ3D"}
|
package/dist/cli/audit/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { readdir, stat } from "node:fs/promises";
|
|
1
|
+
import { readdir, stat, writeFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
2
3
|
import * as p from "@clack/prompts";
|
|
3
4
|
import { AUDIT_BLUEPRINT } from "./blueprint.js";
|
|
4
5
|
import { detectStack } from "./detect-stack.js";
|
|
@@ -104,6 +105,62 @@ async function isDirectory(dirPath) {
|
|
|
104
105
|
}
|
|
105
106
|
}
|
|
106
107
|
// ---------------------------------------------------------------------------
|
|
108
|
+
// Migration prompt generator
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
/**
|
|
111
|
+
* Generates a Claude Code migration prompt and writes it to ai/migrate.md.
|
|
112
|
+
*
|
|
113
|
+
* Called after audit when new meto files were created in an existing project.
|
|
114
|
+
* The prompt tells @meto-pm exactly what to do: read existing project files,
|
|
115
|
+
* fill in the meto placeholders, and clean up superseded content.
|
|
116
|
+
*/
|
|
117
|
+
async function writeMigrationPrompt(projectDir, createdFiles) {
|
|
118
|
+
const fileList = createdFiles.map((f) => `- \`${f}\``).join("\n");
|
|
119
|
+
const prompt = `# Meto Migration — Paste this into Claude Code and run with @meto-pm
|
|
120
|
+
|
|
121
|
+
Meto has added its methodology structure to this existing project.
|
|
122
|
+
The files below were created with placeholder content and need to be filled in
|
|
123
|
+
from the existing project. Your job is to do that merge.
|
|
124
|
+
|
|
125
|
+
## Files created with placeholders
|
|
126
|
+
|
|
127
|
+
${fileList}
|
|
128
|
+
|
|
129
|
+
## What to do
|
|
130
|
+
|
|
131
|
+
1. **Scan the existing project** — read README.md, package.json, any docs/ or
|
|
132
|
+
wiki/ folders, architecture docs, CONTRIBUTING.md, and any other files that
|
|
133
|
+
describe what this project is and how it works.
|
|
134
|
+
|
|
135
|
+
2. **Fill in the meto files** — replace every "To be defined" placeholder with
|
|
136
|
+
real content extracted from the existing files:
|
|
137
|
+
- \`ai/context/product-vision.md\` ← README intro, any vision or pitch docs
|
|
138
|
+
- \`ai/context/tech-stack.md\` ← README stack section, package.json dependencies
|
|
139
|
+
- \`ai/context/decisions.md\` ← any ADRs, architecture decisions, or "why we chose X" docs
|
|
140
|
+
- \`CLAUDE.md\` ← project name, stack summary, coding conventions from existing linting/style configs
|
|
141
|
+
- \`ai/workflows/definition-of-done.md\` ← any existing QA checklists or PR templates
|
|
142
|
+
- Agent definitions in \`.claude/agents/\` ← adapt to the actual stack and domain
|
|
143
|
+
|
|
144
|
+
3. **Do not delete anything** without confirming with the user first. If an
|
|
145
|
+
existing file is fully superseded by a new meto file, flag it with a note
|
|
146
|
+
rather than deleting it.
|
|
147
|
+
|
|
148
|
+
4. **Populate the backlog** — once context files are filled in, create 3-5 epics
|
|
149
|
+
in \`ai/backlog/epics.md\` based on the project's current state and known
|
|
150
|
+
remaining work.
|
|
151
|
+
|
|
152
|
+
5. **Delete this file** (\`ai/migrate.md\`) when the migration is complete.
|
|
153
|
+
|
|
154
|
+
## Guiding principle
|
|
155
|
+
|
|
156
|
+
The goal is one coherent project — not old files next to new files.
|
|
157
|
+
Everything the project knows about itself should live in the meto structure.
|
|
158
|
+
`;
|
|
159
|
+
const aiDir = join(projectDir, "ai");
|
|
160
|
+
await mkdir(aiDir, { recursive: true });
|
|
161
|
+
await writeFile(join(aiDir, "migrate.md"), prompt, "utf-8");
|
|
162
|
+
}
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
107
164
|
// Entry point
|
|
108
165
|
// ---------------------------------------------------------------------------
|
|
109
166
|
/**
|
|
@@ -152,6 +209,7 @@ export async function runAudit() {
|
|
|
152
209
|
const stackDod = getDefinitionOfDone(detected.stack);
|
|
153
210
|
const stackGuidelines = getCodeGuidelines(detected.stack);
|
|
154
211
|
const allLayerResults = [];
|
|
212
|
+
const allCreatedFiles = [];
|
|
155
213
|
let previousLayerPassed = true;
|
|
156
214
|
for (const layer of AUDIT_BLUEPRINT) {
|
|
157
215
|
// Gating: Layer 0 is informational only — never blocks.
|
|
@@ -183,6 +241,7 @@ export async function runAudit() {
|
|
|
183
241
|
// Re-scan after fixes to get updated results
|
|
184
242
|
const created = fixResult.fixes.filter((f) => f.outcome === "created");
|
|
185
243
|
if (created.length > 0) {
|
|
244
|
+
allCreatedFiles.push(...created.map((f) => f.scanResult.expectation.path));
|
|
186
245
|
p.log.info(`Fixed ${created.length} issue${created.length === 1 ? "" : "s"} in Layer ${layer.id}`);
|
|
187
246
|
// Re-scan to reflect fixes
|
|
188
247
|
const rescanResult = await scanLayer(projectDir, layer);
|
|
@@ -204,6 +263,22 @@ export async function runAudit() {
|
|
|
204
263
|
const totalExpectations = allLayerResults.reduce((sum, lr) => sum + lr.results.length, 0);
|
|
205
264
|
const totalPassed = allLayerResults.reduce((sum, lr) => sum + lr.results.filter((r) => r.status === "pass").length, 0);
|
|
206
265
|
const totalFailed = allLayerResults.reduce((sum, lr) => sum + lr.results.filter((r) => r.status === "fail").length, 0);
|
|
266
|
+
if (allCreatedFiles.length > 0) {
|
|
267
|
+
await writeMigrationPrompt(projectDir, allCreatedFiles);
|
|
268
|
+
p.note([
|
|
269
|
+
"Meto created new methodology files alongside your existing project files.",
|
|
270
|
+
"To merge your existing content into the new structure:",
|
|
271
|
+
"",
|
|
272
|
+
"1. Open Claude Code in this project",
|
|
273
|
+
" claude",
|
|
274
|
+
"",
|
|
275
|
+
"2. Run @meto-pm and paste the contents of ai/migrate.md",
|
|
276
|
+
' "@meto-pm — read ai/migrate.md and follow the instructions"',
|
|
277
|
+
"",
|
|
278
|
+
"The agent will fill in placeholders, consolidate old files,",
|
|
279
|
+
"and leave you with one coherent project.",
|
|
280
|
+
].join("\n"), "Next step: migrate your existing content");
|
|
281
|
+
}
|
|
207
282
|
if (totalFailed > 0) {
|
|
208
283
|
p.outro(`Audit complete: ${totalPassed}/${totalExpectations} passed, ${totalFailed} failed`);
|
|
209
284
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/audit/index.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":"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"}
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,CAAU,CAAC;AAElF,MAAM,YAAY,GAA6C;IAC7D,OAAO,EAAE,2BAA2B;IACpC,IAAI,EAAE,wBAAwB;IAC9B,aAAa,EAAE,+BAA+B;IAC9C,YAAY,EAAE,8BAA8B;IAC5C,IAAI,EAAE,wBAAwB;CAC/B,CAAC;AAEF;;GAEG;AACH,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,OAAe,EAAE,MAAc;IACjD,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,GAA8D,IAAI,CAAC;IAE9E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzE,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1G,CAAC;YACD,OAAO,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QAClG,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACxG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,OAAO,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QAChG,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,WAAmB;IACjD,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,MAAM,OAAO,GAAiB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAElG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,WAAmB,EACnB,MAAc,EACd,KAAa,EACb,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1C,MAAM,SAAS,GAAG,SAAS,MAAM,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC;IAC3D,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,WAAmB,EACnB,MAAc,EACd,UAAkB,EAClB,QAAgB;IAEhB,MAAM,UAAU,GAAG,YAAY,CAAC,UAAsC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAoC,CAAC,CAAC;IAEpE,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE7C,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEzE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,MAAM,iBAAiB,UAAU,EAAE,EAAE,CAAC;IAChF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;QACzE,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACxC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,MAAc;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,GAAG,CAAC,CAAC;gBACZ,MAAM;YACR,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACjD,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;gBAClE,MAAM,GAAG,IAAI,CAAC;gBACd,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACtE,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,GAAG,IAAI,CAAC;IAEjB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -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.1",
|
|
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
|
```
|