@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.
- package/bin/ahk.js +1 -1
- package/dist/chunk-LQ7SDMK6.js +82 -0
- package/dist/chunk-LQ7SDMK6.js.map +1 -0
- package/dist/cli.js +1984 -109
- package/dist/cli.js.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/package.json +13 -6
- package/dist/cli.d.ts +0 -2
- package/dist/cli.d.ts.map +0 -1
- package/dist/commands/build.d.ts +0 -6
- package/dist/commands/build.d.ts.map +0 -1
- package/dist/commands/build.js +0 -39
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/dashboard.d.ts +0 -7
- package/dist/commands/dashboard.d.ts.map +0 -1
- package/dist/commands/dashboard.js +0 -27
- package/dist/commands/dashboard.js.map +0 -1
- package/dist/commands/export.d.ts +0 -8
- package/dist/commands/export.d.ts.map +0 -1
- package/dist/commands/export.js +0 -33
- package/dist/commands/export.js.map +0 -1
- package/dist/commands/health.d.ts +0 -2
- package/dist/commands/health.d.ts.map +0 -1
- package/dist/commands/health.js +0 -78
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/init-helpers.d.ts +0 -9
- package/dist/commands/init-helpers.d.ts.map +0 -1
- package/dist/commands/init-helpers.js +0 -40
- package/dist/commands/init-helpers.js.map +0 -1
- package/dist/commands/init.d.ts +0 -9
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -192
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/migrate.d.ts +0 -6
- package/dist/commands/migrate.d.ts.map +0 -1
- package/dist/commands/migrate.js +0 -45
- package/dist/commands/migrate.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -6
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -13
- package/dist/commands/serve.js.map +0 -1
- package/dist/commands/status.d.ts +0 -6
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -71
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/sync.d.ts +0 -7
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -57
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/task/add.d.ts +0 -2
- package/dist/commands/task/add.d.ts.map +0 -1
- package/dist/commands/task/add.js +0 -53
- package/dist/commands/task/add.js.map +0 -1
- package/dist/commands/task/done.d.ts +0 -2
- package/dist/commands/task/done.d.ts.map +0 -1
- package/dist/commands/task/done.js +0 -45
- package/dist/commands/task/done.js.map +0 -1
- package/dist/commands/task/index.d.ts +0 -4
- package/dist/commands/task/index.d.ts.map +0 -1
- package/dist/commands/task/index.js +0 -4
- package/dist/commands/task/index.js.map +0 -1
- package/dist/commands/task/list.d.ts +0 -7
- package/dist/commands/task/list.d.ts.map +0 -1
- package/dist/commands/task/list.js +0 -42
- package/dist/commands/task/list.js.map +0 -1
- package/dist/core/config.d.ts +0 -5
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js +0 -77
- package/dist/core/config.js.map +0 -1
- package/dist/core/dashboard-server.d.ts +0 -7
- package/dist/core/dashboard-server.d.ts.map +0 -1
- package/dist/core/dashboard-server.js +0 -223
- package/dist/core/dashboard-server.js.map +0 -1
- package/dist/core/db.d.ts +0 -57
- package/dist/core/db.d.ts.map +0 -1
- package/dist/core/db.js +0 -348
- package/dist/core/db.js.map +0 -1
- package/dist/core/materializer/agent-templates/test123.txt +0 -0
- package/dist/core/materializer/claude-code.d.ts +0 -8
- package/dist/core/materializer/claude-code.d.ts.map +0 -1
- package/dist/core/materializer/claude-code.js +0 -66
- package/dist/core/materializer/claude-code.js.map +0 -1
- package/dist/core/materializer/index.d.ts +0 -8
- package/dist/core/materializer/index.d.ts.map +0 -1
- package/dist/core/materializer/index.js +0 -13
- package/dist/core/materializer/index.js.map +0 -1
- package/dist/core/materializer/mcp-merge.d.ts +0 -3
- package/dist/core/materializer/mcp-merge.d.ts.map +0 -1
- package/dist/core/materializer/mcp-merge.js +0 -59
- package/dist/core/materializer/mcp-merge.js.map +0 -1
- package/dist/core/materializer/opencode.d.ts +0 -8
- package/dist/core/materializer/opencode.d.ts.map +0 -1
- package/dist/core/materializer/opencode.js +0 -59
- package/dist/core/materializer/opencode.js.map +0 -1
- package/dist/core/materializer/scaffold-utils.d.ts +0 -4
- package/dist/core/materializer/scaffold-utils.d.ts.map +0 -1
- package/dist/core/materializer/scaffold-utils.js +0 -28
- package/dist/core/materializer/scaffold-utils.js.map +0 -1
- package/dist/core/materializer/templates.d.ts +0 -33
- package/dist/core/materializer/templates.d.ts.map +0 -1
- package/dist/core/materializer/templates.js +0 -187
- package/dist/core/materializer/templates.js.map +0 -1
- package/dist/core/mcp-server.d.ts +0 -3
- package/dist/core/mcp-server.d.ts.map +0 -1
- package/dist/core/mcp-server.js +0 -264
- package/dist/core/mcp-server.js.map +0 -1
- package/dist/core/server-types.d.ts +0 -67
- package/dist/core/server-types.d.ts.map +0 -1
- package/dist/core/server-types.js +0 -3
- package/dist/core/server-types.js.map +0 -1
- package/dist/core/sqlite-adapter.d.ts +0 -14
- package/dist/core/sqlite-adapter.d.ts.map +0 -1
- package/dist/core/sqlite-adapter.js +0 -20
- package/dist/core/sqlite-adapter.js.map +0 -1
- package/dist/dashboard-dist/assets/index-Cdm4QZ8j.js +0 -9
- package/dist/dashboard-dist/assets/index-DJInh0UZ.js +0 -9
- package/dist/dashboard-dist/assets/index-TQMzdmXs.css +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/tests/db.test.d.ts +0 -2
- package/dist/tests/db.test.d.ts.map +0 -1
- package/dist/tests/db.test.js +0 -172
- package/dist/tests/db.test.js.map +0 -1
- package/dist/tests/slugify.test.d.ts +0 -2
- package/dist/tests/slugify.test.d.ts.map +0 -1
- package/dist/tests/slugify.test.js +0 -19
- package/dist/tests/slugify.test.js.map +0 -1
- package/dist/tests/templates.test.d.ts +0 -2
- package/dist/tests/templates.test.d.ts.map +0 -1
- package/dist/tests/templates.test.js +0 -71
- package/dist/tests/templates.test.js.map +0 -1
- package/dist/types.d.ts +0 -141
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- 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
|
package/dist/core/db.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -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 +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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"}
|