@cardor/agent-harness-kit 0.14.0 → 0.15.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.
Files changed (136) hide show
  1. package/bin/ahk.js +1 -1
  2. package/dist/chunk-LQ7SDMK6.js +82 -0
  3. package/dist/chunk-LQ7SDMK6.js.map +1 -0
  4. package/dist/cli.js +1984 -109
  5. package/dist/cli.js.map +1 -1
  6. package/dist/index.js +6 -1
  7. package/dist/index.js.map +1 -1
  8. package/package.json +13 -6
  9. package/dist/cli.d.ts +0 -2
  10. package/dist/cli.d.ts.map +0 -1
  11. package/dist/commands/build.d.ts +0 -6
  12. package/dist/commands/build.d.ts.map +0 -1
  13. package/dist/commands/build.js +0 -39
  14. package/dist/commands/build.js.map +0 -1
  15. package/dist/commands/dashboard.d.ts +0 -7
  16. package/dist/commands/dashboard.d.ts.map +0 -1
  17. package/dist/commands/dashboard.js +0 -27
  18. package/dist/commands/dashboard.js.map +0 -1
  19. package/dist/commands/export.d.ts +0 -8
  20. package/dist/commands/export.d.ts.map +0 -1
  21. package/dist/commands/export.js +0 -33
  22. package/dist/commands/export.js.map +0 -1
  23. package/dist/commands/health.d.ts +0 -2
  24. package/dist/commands/health.d.ts.map +0 -1
  25. package/dist/commands/health.js +0 -78
  26. package/dist/commands/health.js.map +0 -1
  27. package/dist/commands/init-helpers.d.ts +0 -9
  28. package/dist/commands/init-helpers.d.ts.map +0 -1
  29. package/dist/commands/init-helpers.js +0 -40
  30. package/dist/commands/init-helpers.js.map +0 -1
  31. package/dist/commands/init.d.ts +0 -9
  32. package/dist/commands/init.d.ts.map +0 -1
  33. package/dist/commands/init.js +0 -192
  34. package/dist/commands/init.js.map +0 -1
  35. package/dist/commands/migrate.d.ts +0 -6
  36. package/dist/commands/migrate.d.ts.map +0 -1
  37. package/dist/commands/migrate.js +0 -45
  38. package/dist/commands/migrate.js.map +0 -1
  39. package/dist/commands/serve.d.ts +0 -6
  40. package/dist/commands/serve.d.ts.map +0 -1
  41. package/dist/commands/serve.js +0 -13
  42. package/dist/commands/serve.js.map +0 -1
  43. package/dist/commands/status.d.ts +0 -6
  44. package/dist/commands/status.d.ts.map +0 -1
  45. package/dist/commands/status.js +0 -71
  46. package/dist/commands/status.js.map +0 -1
  47. package/dist/commands/sync.d.ts +0 -7
  48. package/dist/commands/sync.d.ts.map +0 -1
  49. package/dist/commands/sync.js +0 -57
  50. package/dist/commands/sync.js.map +0 -1
  51. package/dist/commands/task/add.d.ts +0 -2
  52. package/dist/commands/task/add.d.ts.map +0 -1
  53. package/dist/commands/task/add.js +0 -53
  54. package/dist/commands/task/add.js.map +0 -1
  55. package/dist/commands/task/done.d.ts +0 -2
  56. package/dist/commands/task/done.d.ts.map +0 -1
  57. package/dist/commands/task/done.js +0 -45
  58. package/dist/commands/task/done.js.map +0 -1
  59. package/dist/commands/task/index.d.ts +0 -4
  60. package/dist/commands/task/index.d.ts.map +0 -1
  61. package/dist/commands/task/index.js +0 -4
  62. package/dist/commands/task/index.js.map +0 -1
  63. package/dist/commands/task/list.d.ts +0 -7
  64. package/dist/commands/task/list.d.ts.map +0 -1
  65. package/dist/commands/task/list.js +0 -42
  66. package/dist/commands/task/list.js.map +0 -1
  67. package/dist/core/config.d.ts +0 -5
  68. package/dist/core/config.d.ts.map +0 -1
  69. package/dist/core/config.js +0 -77
  70. package/dist/core/config.js.map +0 -1
  71. package/dist/core/dashboard-server.d.ts +0 -7
  72. package/dist/core/dashboard-server.d.ts.map +0 -1
  73. package/dist/core/dashboard-server.js +0 -223
  74. package/dist/core/dashboard-server.js.map +0 -1
  75. package/dist/core/db.d.ts +0 -57
  76. package/dist/core/db.d.ts.map +0 -1
  77. package/dist/core/db.js +0 -348
  78. package/dist/core/db.js.map +0 -1
  79. package/dist/core/materializer/agent-templates/test123.txt +0 -0
  80. package/dist/core/materializer/claude-code.d.ts +0 -8
  81. package/dist/core/materializer/claude-code.d.ts.map +0 -1
  82. package/dist/core/materializer/claude-code.js +0 -66
  83. package/dist/core/materializer/claude-code.js.map +0 -1
  84. package/dist/core/materializer/index.d.ts +0 -8
  85. package/dist/core/materializer/index.d.ts.map +0 -1
  86. package/dist/core/materializer/index.js +0 -13
  87. package/dist/core/materializer/index.js.map +0 -1
  88. package/dist/core/materializer/mcp-merge.d.ts +0 -3
  89. package/dist/core/materializer/mcp-merge.d.ts.map +0 -1
  90. package/dist/core/materializer/mcp-merge.js +0 -59
  91. package/dist/core/materializer/mcp-merge.js.map +0 -1
  92. package/dist/core/materializer/opencode.d.ts +0 -8
  93. package/dist/core/materializer/opencode.d.ts.map +0 -1
  94. package/dist/core/materializer/opencode.js +0 -59
  95. package/dist/core/materializer/opencode.js.map +0 -1
  96. package/dist/core/materializer/scaffold-utils.d.ts +0 -4
  97. package/dist/core/materializer/scaffold-utils.d.ts.map +0 -1
  98. package/dist/core/materializer/scaffold-utils.js +0 -28
  99. package/dist/core/materializer/scaffold-utils.js.map +0 -1
  100. package/dist/core/materializer/templates.d.ts +0 -33
  101. package/dist/core/materializer/templates.d.ts.map +0 -1
  102. package/dist/core/materializer/templates.js +0 -187
  103. package/dist/core/materializer/templates.js.map +0 -1
  104. package/dist/core/mcp-server.d.ts +0 -3
  105. package/dist/core/mcp-server.d.ts.map +0 -1
  106. package/dist/core/mcp-server.js +0 -264
  107. package/dist/core/mcp-server.js.map +0 -1
  108. package/dist/core/server-types.d.ts +0 -67
  109. package/dist/core/server-types.d.ts.map +0 -1
  110. package/dist/core/server-types.js +0 -3
  111. package/dist/core/server-types.js.map +0 -1
  112. package/dist/core/sqlite-adapter.d.ts +0 -14
  113. package/dist/core/sqlite-adapter.d.ts.map +0 -1
  114. package/dist/core/sqlite-adapter.js +0 -20
  115. package/dist/core/sqlite-adapter.js.map +0 -1
  116. package/dist/dashboard-dist/assets/index-Cdm4QZ8j.js +0 -9
  117. package/dist/dashboard-dist/assets/index-DJInh0UZ.js +0 -9
  118. package/dist/dashboard-dist/assets/index-TQMzdmXs.css +0 -1
  119. package/dist/index.d.ts +0 -3
  120. package/dist/index.d.ts.map +0 -1
  121. package/dist/tests/db.test.d.ts +0 -2
  122. package/dist/tests/db.test.d.ts.map +0 -1
  123. package/dist/tests/db.test.js +0 -172
  124. package/dist/tests/db.test.js.map +0 -1
  125. package/dist/tests/slugify.test.d.ts +0 -2
  126. package/dist/tests/slugify.test.d.ts.map +0 -1
  127. package/dist/tests/slugify.test.js +0 -19
  128. package/dist/tests/slugify.test.js.map +0 -1
  129. package/dist/tests/templates.test.d.ts +0 -2
  130. package/dist/tests/templates.test.d.ts.map +0 -1
  131. package/dist/tests/templates.test.js +0 -71
  132. package/dist/tests/templates.test.js.map +0 -1
  133. package/dist/types.d.ts +0 -141
  134. package/dist/types.d.ts.map +0 -1
  135. package/dist/types.js +0 -3
  136. package/dist/types.js.map +0 -1
package/dist/core/db.js DELETED
@@ -1,348 +0,0 @@
1
- import { mkdirSync, writeFileSync } from 'node:fs';
2
- import { dirname, join, resolve } from 'node:path';
3
- import { randomUUID } from 'node:crypto';
4
- import { openSQLite, lastInsertId } from './sqlite-adapter.js';
5
- // ─── Schema ───────────────────────────────────────────────────────────────────
6
- const SCHEMA = `
7
- CREATE TABLE IF NOT EXISTS tasks (
8
- id INTEGER PRIMARY KEY AUTOINCREMENT,
9
- slug TEXT NOT NULL UNIQUE,
10
- title TEXT NOT NULL,
11
- description TEXT,
12
- status TEXT NOT NULL DEFAULT 'pending'
13
- CHECK(status IN ('pending','in_progress','done','blocked')),
14
- assigned_to TEXT,
15
- created_at TEXT NOT NULL,
16
- started_at TEXT,
17
- completed_at TEXT
18
- );
19
-
20
- CREATE TABLE IF NOT EXISTS task_acceptance (
21
- id INTEGER PRIMARY KEY AUTOINCREMENT,
22
- task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
23
- criterion TEXT NOT NULL,
24
- met INTEGER NOT NULL DEFAULT 0
25
- );
26
-
27
- CREATE TABLE IF NOT EXISTS actions (
28
- id TEXT PRIMARY KEY,
29
- task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
30
- agent TEXT NOT NULL
31
- CHECK(agent IN ('lead','explorer','builder','reviewer') OR agent LIKE 'custom:%'),
32
- status TEXT NOT NULL DEFAULT 'in_progress'
33
- CHECK(status IN ('in_progress','completed','blocked')),
34
- created_at TEXT NOT NULL,
35
- completed_at TEXT,
36
- summary TEXT
37
- );
38
-
39
- CREATE TABLE IF NOT EXISTS action_sections (
40
- id INTEGER PRIMARY KEY AUTOINCREMENT,
41
- action_id TEXT NOT NULL REFERENCES actions(id) ON DELETE CASCADE,
42
- section_type TEXT NOT NULL,
43
- content TEXT NOT NULL,
44
- created_at TEXT NOT NULL
45
- );
46
-
47
- CREATE TABLE IF NOT EXISTS action_files (
48
- id INTEGER PRIMARY KEY AUTOINCREMENT,
49
- action_id TEXT NOT NULL REFERENCES actions(id) ON DELETE CASCADE,
50
- file_path TEXT NOT NULL,
51
- operation TEXT NOT NULL
52
- CHECK(operation IN ('read','created','modified','deleted')),
53
- notes TEXT
54
- );
55
-
56
- CREATE TABLE IF NOT EXISTS action_tools (
57
- id INTEGER PRIMARY KEY AUTOINCREMENT,
58
- action_id TEXT NOT NULL REFERENCES actions(id) ON DELETE CASCADE,
59
- tool_name TEXT NOT NULL,
60
- args_json TEXT,
61
- result_summary TEXT,
62
- called_at TEXT NOT NULL
63
- );
64
-
65
- CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
66
- CREATE INDEX IF NOT EXISTS idx_actions_task_id ON actions(task_id);
67
- CREATE INDEX IF NOT EXISTS idx_actions_agent ON actions(agent);
68
- CREATE INDEX IF NOT EXISTS idx_actions_status ON actions(status);
69
- CREATE INDEX IF NOT EXISTS idx_action_files_path ON action_files(file_path);
70
- CREATE INDEX IF NOT EXISTS idx_action_tools_name ON action_tools(tool_name);
71
- `;
72
- // ─── DB class ─────────────────────────────────────────────────────────────────
73
- export class HarnessDB {
74
- db;
75
- config;
76
- constructor(dbPath, config) {
77
- this.config = config;
78
- const abs = resolve(dbPath);
79
- mkdirSync(dirname(abs), { recursive: true });
80
- this.db = openSQLite(abs);
81
- this.db.exec(`PRAGMA journal_mode = WAL`);
82
- this.db.exec(`PRAGMA foreign_keys = ON`);
83
- this.db.exec(SCHEMA);
84
- }
85
- // ─── Tasks ────────────────────────────────────────────────────────────────
86
- addTask(params) {
87
- const now = new Date().toISOString();
88
- this.db
89
- .prepare(`INSERT INTO tasks (slug, title, description, status, created_at)
90
- VALUES (@slug, @title, @description, 'pending', @created_at)`)
91
- .run({
92
- slug: params.slug,
93
- title: params.title,
94
- description: params.description ?? null,
95
- created_at: now,
96
- });
97
- const taskId = lastInsertId(this.db);
98
- if (params.acceptance?.length) {
99
- const accStmt = this.db.prepare(`INSERT INTO task_acceptance (task_id, criterion) VALUES (?, ?)`);
100
- for (const criterion of params.acceptance) {
101
- accStmt.run(taskId, criterion);
102
- }
103
- }
104
- this.regenerateCurrentMd();
105
- return this.getTaskById(taskId);
106
- }
107
- getTasks(status) {
108
- if (status) {
109
- return this.db
110
- .prepare(`SELECT * FROM tasks WHERE status = ? ORDER BY id`)
111
- .all(status);
112
- }
113
- return this.db.prepare(`SELECT * FROM tasks ORDER BY id`).all();
114
- }
115
- getTaskById(id) {
116
- return this.db.prepare(`SELECT * FROM tasks WHERE id = ?`).get(id) ?? null;
117
- }
118
- getTaskBySlug(slug) {
119
- return this.db.prepare(`SELECT * FROM tasks WHERE slug = ?`).get(slug) ?? null;
120
- }
121
- getTaskAcceptance(taskId) {
122
- return this.db
123
- .prepare(`SELECT * FROM task_acceptance WHERE task_id = ?`)
124
- .all(taskId);
125
- }
126
- updateTaskStatus(idOrSlug, status) {
127
- const now = new Date().toISOString();
128
- const task = typeof idOrSlug === 'number' ? this.getTaskById(idOrSlug) : this.getTaskBySlug(idOrSlug);
129
- if (!task)
130
- throw new Error(`Task not found: ${idOrSlug}`);
131
- if (status === 'in_progress' && !task.started_at) {
132
- this.db
133
- .prepare(`UPDATE tasks SET status = ?, started_at = ? WHERE id = ?`)
134
- .run(status, now, task.id);
135
- }
136
- else if (status === 'done') {
137
- this.db
138
- .prepare(`UPDATE tasks SET status = ?, completed_at = ? WHERE id = ?`)
139
- .run(status, now, task.id);
140
- }
141
- else {
142
- this.db.prepare(`UPDATE tasks SET status = ? WHERE id = ?`).run(status, task.id);
143
- }
144
- this.regenerateCurrentMd();
145
- return this.getTaskById(task.id);
146
- }
147
- claimTask(id, agent) {
148
- const now = new Date().toISOString();
149
- this.db.exec('BEGIN IMMEDIATE');
150
- try {
151
- this.db
152
- .prepare(`UPDATE tasks SET status = 'in_progress', assigned_to = ?, started_at = ?
153
- WHERE id = ? AND status = 'pending'`)
154
- .run(agent, now, id);
155
- this.db.exec('COMMIT');
156
- // Verify the claim succeeded by reading back — if status changed, we own it
157
- const task = this.getTaskById(id);
158
- if (!task || task.status !== 'in_progress' || task.assigned_to !== agent)
159
- return null;
160
- this.regenerateCurrentMd();
161
- return task;
162
- }
163
- catch (err) {
164
- this.db.exec('ROLLBACK');
165
- throw err;
166
- }
167
- }
168
- // ─── Actions ──────────────────────────────────────────────────────────────
169
- startAction(taskId, agent) {
170
- const now = new Date().toISOString();
171
- const id = randomUUID();
172
- this.db
173
- .prepare(`INSERT INTO actions (id, task_id, agent, status, created_at)
174
- VALUES (?, ?, ?, 'in_progress', ?)`)
175
- .run(id, taskId, agent, now);
176
- this.regenerateCurrentMd();
177
- return this.getAction(id);
178
- }
179
- writeSection(actionId, sectionType, content) {
180
- const now = new Date().toISOString();
181
- this.db
182
- .prepare(`INSERT INTO action_sections (action_id, section_type, content, created_at)
183
- VALUES (?, ?, ?, ?)`)
184
- .run(actionId, sectionType, content, now);
185
- this.regenerateCurrentMd();
186
- }
187
- completeAction(actionId, summary) {
188
- const now = new Date().toISOString();
189
- this.db
190
- .prepare(`UPDATE actions SET status = 'completed', completed_at = ?, summary = ?
191
- WHERE id = ?`)
192
- .run(now, summary, actionId);
193
- this.regenerateCurrentMd();
194
- return this.getAction(actionId);
195
- }
196
- getAction(actionId) {
197
- return (this.db.prepare(`SELECT * FROM actions WHERE id = ?`).get(actionId) ?? null);
198
- }
199
- getActionsForTask(taskId) {
200
- return this.db
201
- .prepare(`SELECT * FROM actions WHERE task_id = ? ORDER BY created_at`)
202
- .all(taskId);
203
- }
204
- getActionSections(actionId) {
205
- return this.db
206
- .prepare(`SELECT * FROM action_sections WHERE action_id = ? ORDER BY created_at`)
207
- .all(actionId);
208
- }
209
- recordFile(actionId, filePath, operation, notes) {
210
- this.db
211
- .prepare(`INSERT INTO action_files (action_id, file_path, operation, notes)
212
- VALUES (?, ?, ?, ?)`)
213
- .run(actionId, filePath, operation, notes ?? null);
214
- }
215
- recordTool(actionId, toolName, argsJson, resultSummary) {
216
- const now = new Date().toISOString();
217
- this.db
218
- .prepare(`INSERT INTO action_tools (action_id, tool_name, args_json, result_summary, called_at)
219
- VALUES (?, ?, ?, ?, ?)`)
220
- .run(actionId, toolName, argsJson ?? null, resultSummary ?? null, now);
221
- }
222
- getFilesForTask(taskId) {
223
- return this.db
224
- .prepare(`SELECT af.*, a.agent
225
- FROM action_files af
226
- JOIN actions a ON af.action_id = a.id
227
- WHERE a.task_id = ?
228
- ORDER BY a.agent, af.operation`)
229
- .all(taskId);
230
- }
231
- getTopTools(limit = 10) {
232
- return this.db
233
- .prepare(`SELECT tool_name, COUNT(*) as uses
234
- FROM action_tools
235
- GROUP BY tool_name
236
- ORDER BY uses DESC
237
- LIMIT ?`)
238
- .all(limit);
239
- }
240
- getStatusSummary() {
241
- return this.db
242
- .prepare(`SELECT status, COUNT(*) as total FROM tasks GROUP BY status`)
243
- .all();
244
- }
245
- // ─── current.md fallback ──────────────────────────────────────────────────
246
- regenerateCurrentMd() {
247
- if (!this.config.storage.markdownFallback.enabled)
248
- return;
249
- const mdPath = resolve(this.config.storage.markdownFallback.path);
250
- mkdirSync(dirname(mdPath), { recursive: true });
251
- const inProgress = this.getTasks('in_progress');
252
- const now = new Date().toISOString();
253
- let md = `<!-- AUTO-GENERATED by agent-harness-kit — DO NOT EDIT MANUALLY -->\n`;
254
- md += `<!-- Last updated: ${now} -->\n\n`;
255
- md += `# Current Session\n\n`;
256
- if (inProgress.length === 0) {
257
- md += `## No tasks in progress\n\n`;
258
- const pending = this.getTasks('pending');
259
- if (pending.length > 0) {
260
- md += `### Next pending tasks\n`;
261
- for (const t of pending.slice(0, 5)) {
262
- md += `- **#${t.id}** ${t.title} (\`${t.slug}\`)\n`;
263
- }
264
- }
265
- }
266
- else {
267
- for (const task of inProgress) {
268
- md += `## Active Task\n`;
269
- md += `- **ID:** ${task.id}\n`;
270
- md += `- **Slug:** ${task.slug}\n`;
271
- md += `- **Status:** ${task.status}\n`;
272
- md += `- **Started:** ${task.started_at ?? 'unknown'}\n\n`;
273
- const actions = this.getActionsForTask(task.id);
274
- if (actions.length > 0) {
275
- md += `## Actions this session\n`;
276
- md += `| Agent | Status | Summary | Started |\n`;
277
- md += `|----------|-------------|----------------------------------|-------------|\n`;
278
- for (const a of actions) {
279
- const started = a.created_at.slice(11, 16);
280
- const summary = (a.summary ?? '').slice(0, 34).padEnd(34);
281
- md += `| ${a.agent.padEnd(8)} | ${a.status.padEnd(11)} | ${summary} | ${started} |\n`;
282
- }
283
- md += `\n`;
284
- }
285
- const acceptance = this.getTaskAcceptance(task.id);
286
- if (acceptance.length > 0) {
287
- md += `## Acceptance Criteria\n`;
288
- for (const a of acceptance) {
289
- md += `- [${a.met ? 'x' : ' '}] ${a.criterion}\n`;
290
- }
291
- md += `\n`;
292
- }
293
- }
294
- }
295
- writeFileSync(mdPath, md, 'utf8');
296
- }
297
- // ─── Raw query (dashboard / analytics) ───────────────────────────────────
298
- queryRaw(sql, ...params) {
299
- return this.db.prepare(sql).all(...params);
300
- }
301
- // ─── Export helpers ───────────────────────────────────────────────────────
302
- exportJson() {
303
- return {
304
- tasks: this.getTasks(),
305
- actions: this.db
306
- .prepare(`SELECT * FROM actions ORDER BY created_at`)
307
- .all(),
308
- sections: this.db
309
- .prepare(`SELECT * FROM action_sections ORDER BY created_at`)
310
- .all(),
311
- };
312
- }
313
- close() {
314
- this.db.close();
315
- }
316
- // ─── feature_list.json sync ───────────────────────────────────────────────
317
- syncFromFeatureList(tasks) {
318
- let added = 0;
319
- let skipped = 0;
320
- for (const t of tasks) {
321
- if (this.getTaskBySlug(t.slug)) {
322
- skipped++;
323
- continue;
324
- }
325
- this.addTask(t);
326
- added++;
327
- }
328
- return { added, skipped };
329
- }
330
- writeFeatureList(cwd) {
331
- const tasks = this.getTasks();
332
- const list = tasks.map((t) => ({
333
- slug: t.slug,
334
- title: t.title,
335
- description: t.description ?? undefined,
336
- acceptance: this.getTaskAcceptance(t.id).map((a) => a.criterion),
337
- status: t.status,
338
- }));
339
- const path = join(resolve(cwd), this.config.storage.dir, 'feature_list.json');
340
- mkdirSync(dirname(path), { recursive: true });
341
- writeFileSync(path, JSON.stringify(list, null, 2) + '\n', 'utf8');
342
- }
343
- }
344
- export function openDB(config, cwd) {
345
- const dbPath = join(resolve(cwd), config.storage.dbPath);
346
- return new HarnessDB(dbPath, config);
347
- }
348
- //# sourceMappingURL=db.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { HarnessConfig, Provider, ScaffoldOptions } from '../../types.js';
2
- import type { Materializer } from './index.js';
3
- export declare class ClaudeCodeMaterializer implements Materializer {
4
- scaffold(config: HarnessConfig, opts: ScaffoldOptions): Promise<void>;
5
- build(config: HarnessConfig, cwd: string): Promise<void>;
6
- migrate(config: HarnessConfig, _to: Provider, _cwd: string): Promise<void>;
7
- }
8
- //# sourceMappingURL=claude-code.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/core/materializer/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,qBAAa,sBAAuB,YAAW,YAAY;IACnD,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CrE,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBxD,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIjF"}
@@ -1,66 +0,0 @@
1
- import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
2
- import { join, resolve } from 'node:path';
3
- import { HEALTH_SH, agentsMd, featureListJson, agentLead, agentExplorer, agentBuilder, agentReviewer } from './templates.js';
4
- import { mergeClaudeMcpJson } from './mcp-merge.js';
5
- import { writeAgentFile, appendGitignore, slugify } from './scaffold-utils.js';
6
- export class ClaudeCodeMaterializer {
7
- async scaffold(config, opts) {
8
- const { cwd } = opts;
9
- const write = (relPath, content, mode) => {
10
- const abs = join(cwd, relPath);
11
- mkdirSync(resolve(abs, '..'), { recursive: true });
12
- writeFileSync(abs, content, { encoding: 'utf8', mode });
13
- };
14
- // AGENTS.md — always overwrite (generated from config)
15
- write('AGENTS.md', agentsMd(config));
16
- // health.sh — only create if it doesn't exist
17
- if (!existsSync(join(cwd, 'health.sh'))) {
18
- write('health.sh', HEALTH_SH, 0o755);
19
- }
20
- // .harness/feature_list.json
21
- const tasks = opts.firstTask
22
- ? [{ slug: slugify(opts.firstTask.title), ...opts.firstTask }]
23
- : [];
24
- write(join(config.storage.dir, 'feature_list.json'), featureListJson(tasks));
25
- // .harness/current.md placeholder
26
- if (!existsSync(join(cwd, config.storage.markdownFallback.path))) {
27
- write(config.storage.markdownFallback.path, `<!-- AUTO-GENERATED by agent-harness-kit — DO NOT EDIT MANUALLY -->\n<!-- Run ahk status to refresh -->\n\n# Current Session\n\nNo tasks in progress.\n`);
28
- }
29
- // .claude/agents/ — skip files the dev may have customized
30
- const projectName = config.project.name;
31
- const allowedPaths = (config.agents.explorer.allowedPaths ?? []).join(', ');
32
- const writablePaths = (config.agents.builder.writablePaths ?? []).join(', ');
33
- writeAgentFile(cwd, '.claude/agents/lead.md', agentLead({ projectName }));
34
- writeAgentFile(cwd, '.claude/agents/explorer.md', agentExplorer({ projectName, allowedPaths }));
35
- writeAgentFile(cwd, '.claude/agents/builder.md', agentBuilder({ projectName, writablePaths }));
36
- writeAgentFile(cwd, '.claude/agents/reviewer.md', agentReviewer({ projectName }));
37
- // .mcp.json — MERGE, never overwrite whole file
38
- mergeClaudeMcpJson(join(cwd, '.mcp.json'), config.tools.mcp.port);
39
- // .gitignore additions
40
- appendGitignore(cwd);
41
- }
42
- async build(config, cwd) {
43
- const write = (relPath, content) => {
44
- const abs = join(cwd, relPath);
45
- mkdirSync(resolve(abs, '..'), { recursive: true });
46
- writeFileSync(abs, content, 'utf8');
47
- };
48
- // build always regenerates AGENTS.md (it's derived from config)
49
- write('AGENTS.md', agentsMd(config));
50
- // Agent files: skip if customized, write if missing
51
- const projectName = config.project.name;
52
- const allowedPaths = (config.agents.explorer.allowedPaths ?? []).join(', ');
53
- const writablePaths = (config.agents.builder.writablePaths ?? []).join(', ');
54
- writeAgentFile(cwd, '.claude/agents/lead.md', agentLead({ projectName }));
55
- writeAgentFile(cwd, '.claude/agents/explorer.md', agentExplorer({ projectName, allowedPaths }));
56
- writeAgentFile(cwd, '.claude/agents/builder.md', agentBuilder({ projectName, writablePaths }));
57
- writeAgentFile(cwd, '.claude/agents/reviewer.md', agentReviewer({ projectName }));
58
- // MCP config: always merge
59
- mergeClaudeMcpJson(join(cwd, '.mcp.json'), config.tools.mcp.port);
60
- }
61
- async migrate(config, _to, _cwd) {
62
- void config;
63
- // Migration from claude-code is handled by the target materializer
64
- }
65
- }
66
- //# sourceMappingURL=claude-code.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/core/materializer/claude-code.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { HarnessConfig, Provider, ScaffoldOptions } from '../../types.js';
2
- export interface Materializer {
3
- scaffold(config: HarnessConfig, opts: ScaffoldOptions): Promise<void>;
4
- build(config: HarnessConfig, cwd: string): Promise<void>;
5
- migrate(config: HarnessConfig, to: Provider, cwd: string): Promise<void>;
6
- }
7
- export declare function getMaterializer(provider: Provider): Materializer;
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/materializer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAI9E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAShE"}
@@ -1,13 +0,0 @@
1
- import { ClaudeCodeMaterializer } from './claude-code.js';
2
- import { OpenCodeMaterializer } from './opencode.js';
3
- export function getMaterializer(provider) {
4
- switch (provider) {
5
- case 'claude-code':
6
- return new ClaudeCodeMaterializer();
7
- case 'opencode':
8
- return new OpenCodeMaterializer();
9
- default:
10
- throw new Error(`Unknown provider: ${provider}`);
11
- }
12
- }
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/materializer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAQpD,MAAM,UAAU,eAAe,CAAC,QAAkB;IAChD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,aAAa;YAChB,OAAO,IAAI,sBAAsB,EAAE,CAAA;QACrC,KAAK,UAAU;YACb,OAAO,IAAI,oBAAoB,EAAE,CAAA;QACnC;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAkB,EAAE,CAAC,CAAA;IAC9D,CAAC;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare function mergeClaudeMcpJson(filePath: string, port: number): void;
2
- export declare function mergeOpencodeJson(filePath: string, port: number): void;
3
- //# sourceMappingURL=mcp-merge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-merge.d.ts","sourceRoot":"","sources":["../../../src/core/materializer/mcp-merge.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CA6BvE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CA8BtE"}
@@ -1,59 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { dirname } from 'node:path';
3
- export function mergeClaudeMcpJson(filePath, port) {
4
- const folderPath = dirname(filePath);
5
- if (!existsSync(folderPath)) {
6
- mkdirSync(folderPath, { recursive: true });
7
- }
8
- let existing = {};
9
- if (existsSync(filePath)) {
10
- try {
11
- existing = JSON.parse(readFileSync(filePath, 'utf8'));
12
- }
13
- catch {
14
- // Unreadable JSON — start fresh to avoid corrupt state
15
- }
16
- }
17
- const merged = {
18
- ...existing,
19
- mcpServers: {
20
- ...(existing.mcpServers ?? {}),
21
- 'agent-harness-kit': {
22
- type: 'stdio',
23
- command: 'npx',
24
- args: ['ahk', 'serve', '--port', String(port)],
25
- },
26
- },
27
- };
28
- mkdirSync(dirname(filePath), { recursive: true });
29
- writeFileSync(filePath, JSON.stringify(merged, null, 2) + '\n', 'utf8');
30
- }
31
- export function mergeOpencodeJson(filePath, port) {
32
- const folderPath = dirname(filePath);
33
- if (!existsSync(folderPath)) {
34
- mkdirSync(folderPath, { recursive: true });
35
- }
36
- let existing = {};
37
- if (existsSync(filePath)) {
38
- try {
39
- existing = JSON.parse(readFileSync(filePath, 'utf8'));
40
- }
41
- catch {
42
- // start fresh
43
- }
44
- }
45
- const existingMcp = existing.mcp ?? {};
46
- const merged = {
47
- ...existing,
48
- mcp: {
49
- ...existingMcp,
50
- 'agent-harness-kit': {
51
- enabled: true,
52
- type: 'local',
53
- command: ['npx', 'ahk', 'serve', '--port', String(port)],
54
- },
55
- },
56
- };
57
- writeFileSync(filePath, JSON.stringify(merged, null, 2) + '\n', 'utf8');
58
- }
59
- //# sourceMappingURL=mcp-merge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-merge.js","sourceRoot":"","sources":["../../../src/core/materializer/mcp-merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,IAAY;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACpC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,QAAQ,GAA4B,EAAE,CAAA;IAC1C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAA4B,CAAA;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG;QACb,GAAG,QAAQ;QACX,UAAU,EAAE;YACV,GAAG,CAAE,QAAQ,CAAC,UAAsC,IAAI,EAAE,CAAC;YAC3D,mBAAmB,EAAE;gBACnB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;aAC/C;SACF;KACF,CAAA;IAED,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACjD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,IAAY;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACpC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,QAAQ,GAA4B,EAAE,CAAA;IAC1C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAA4B,CAAA;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAI,QAAQ,CAAC,GAA+B,IAAI,EAAE,CAAA;IAEnE,MAAM,MAAM,GAAG;QACb,GAAG,QAAQ;QACX,GAAG,EAAE;YACH,GAAG,WAAW;YACd,mBAAmB,EAAE;gBACnB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;aACzD;SACF;KACF,CAAA;IAED,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;AACzE,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { HarnessConfig, Provider, ScaffoldOptions } from '../../types.js';
2
- import type { Materializer } from './index.js';
3
- export declare class OpenCodeMaterializer implements Materializer {
4
- scaffold(config: HarnessConfig, opts: ScaffoldOptions): Promise<void>;
5
- build(config: HarnessConfig, cwd: string): Promise<void>;
6
- migrate(config: HarnessConfig, _to: Provider, _cwd: string): Promise<void>;
7
- }
8
- //# sourceMappingURL=opencode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/core/materializer/opencode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,qBAAa,oBAAqB,YAAW,YAAY;IACjD,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CrE,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBxD,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjF"}
@@ -1,59 +0,0 @@
1
- import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
2
- import { join, resolve } from 'node:path';
3
- import { HEALTH_SH, agentsMd, featureListJson, agentLead, agentExplorer, agentBuilder, agentReviewer } from './templates.js';
4
- import { mergeOpencodeJson } from './mcp-merge.js';
5
- import { writeAgentFile, appendGitignore, slugify } from './scaffold-utils.js';
6
- export class OpenCodeMaterializer {
7
- async scaffold(config, opts) {
8
- const { cwd } = opts;
9
- const write = (relPath, content, mode) => {
10
- const abs = join(cwd, relPath);
11
- mkdirSync(resolve(abs, '..'), { recursive: true });
12
- writeFileSync(abs, content, { encoding: 'utf8', mode });
13
- };
14
- // AGENTS.md — always overwrite (generated from config)
15
- write('AGENTS.md', agentsMd(config));
16
- // health.sh — only create if it doesn't exist
17
- if (!existsSync(join(cwd, 'health.sh'))) {
18
- write('health.sh', HEALTH_SH, 0o755);
19
- }
20
- const tasks = opts.firstTask
21
- ? [{ slug: slugify(opts.firstTask.title), ...opts.firstTask }]
22
- : [];
23
- write(join(config.storage.dir, 'feature_list.json'), featureListJson(tasks));
24
- if (!existsSync(join(cwd, config.storage.markdownFallback.path))) {
25
- write(config.storage.markdownFallback.path, `<!-- AUTO-GENERATED by agent-harness-kit — DO NOT EDIT MANUALLY -->\n<!-- Run ahk status to refresh -->\n\n# Current Session\n\nNo tasks in progress.\n`);
26
- }
27
- // .opencode/agents/ — skip files the dev may have customized
28
- const projectName = config.project.name;
29
- const allowedPaths = (config.agents.explorer.allowedPaths ?? []).join(', ');
30
- const writablePaths = (config.agents.builder.writablePaths ?? []).join(', ');
31
- writeAgentFile(cwd, '.opencode/agents/lead.md', agentLead({ projectName }));
32
- writeAgentFile(cwd, '.opencode/agents/explorer.md', agentExplorer({ projectName, allowedPaths }));
33
- writeAgentFile(cwd, '.opencode/agents/builder.md', agentBuilder({ projectName, writablePaths }));
34
- writeAgentFile(cwd, '.opencode/agents/reviewer.md', agentReviewer({ projectName }));
35
- // opencode.json — MERGE, never overwrite whole file
36
- mergeOpencodeJson(join(cwd, 'opencode.json'), config.tools.mcp.port);
37
- appendGitignore(cwd);
38
- }
39
- async build(config, cwd) {
40
- const write = (relPath, content) => {
41
- const abs = join(cwd, relPath);
42
- mkdirSync(resolve(abs, '..'), { recursive: true });
43
- writeFileSync(abs, content, 'utf8');
44
- };
45
- write('AGENTS.md', agentsMd(config));
46
- const projectName = config.project.name;
47
- const allowedPaths = (config.agents.explorer.allowedPaths ?? []).join(', ');
48
- const writablePaths = (config.agents.builder.writablePaths ?? []).join(', ');
49
- writeAgentFile(cwd, '.opencode/agents/lead.md', agentLead({ projectName }));
50
- writeAgentFile(cwd, '.opencode/agents/explorer.md', agentExplorer({ projectName, allowedPaths }));
51
- writeAgentFile(cwd, '.opencode/agents/builder.md', agentBuilder({ projectName, writablePaths }));
52
- writeAgentFile(cwd, '.opencode/agents/reviewer.md', agentReviewer({ projectName }));
53
- mergeOpencodeJson(join(cwd, 'opencode.json'), config.tools.mcp.port);
54
- }
55
- async migrate(config, _to, _cwd) {
56
- void config;
57
- }
58
- }
59
- //# sourceMappingURL=opencode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/core/materializer/opencode.ts"],"names":[],"mappings":"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"}