@winspan/claude-forge 8.34.0 → 8.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -30
- package/dist/capability/index.d.ts +6 -5
- package/dist/capability/index.d.ts.map +1 -1
- package/dist/capability/index.js +6 -5
- package/dist/capability/index.js.map +1 -1
- package/dist/capability/types.d.ts +5 -74
- package/dist/capability/types.d.ts.map +1 -1
- package/dist/capability/types.js +4 -1
- package/dist/capability/types.js.map +1 -1
- package/dist/core/storage/rows.d.ts +0 -36
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +1 -45
- package/dist/core/storage/sqlite.d.ts +2 -79
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +3 -362
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/utils/token-tracker.d.ts +0 -1
- package/dist/core/utils/token-tracker.d.ts.map +1 -1
- package/dist/core/utils/token-tracker.js +0 -1
- package/dist/core/utils/token-tracker.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +1 -9
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +2 -99
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/stop.d.ts +1 -15
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +1 -95
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +1 -5
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +4 -96
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +3 -54
- package/dist/daemon/index.js.map +1 -1
- package/dist/skills/official-skills.d.ts.map +1 -1
- package/dist/skills/official-skills.js +218 -20
- package/dist/skills/official-skills.js.map +1 -1
- package/dist/web/routes/status.d.ts.map +1 -1
- package/dist/web/routes/status.js +8 -10
- package/dist/web/routes/status.js.map +1 -1
- package/dist/web/routes/token-usage.d.ts +1 -1
- package/dist/web/routes/token-usage.d.ts.map +1 -1
- package/dist/web/routes/token-usage.js +1 -16
- package/dist/web/routes/token-usage.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -6
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/server.d.ts +0 -6
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +0 -5
- package/dist/web/server.js.map +1 -1
- package/package.json +2 -2
- package/dist/capability/execution-manager.d.ts +0 -96
- package/dist/capability/execution-manager.d.ts.map +0 -1
- package/dist/capability/execution-manager.js +0 -260
- package/dist/capability/execution-manager.js.map +0 -1
- package/dist/capability/executor/background-executor.d.ts +0 -58
- package/dist/capability/executor/background-executor.d.ts.map +0 -1
- package/dist/capability/executor/background-executor.js +0 -322
- package/dist/capability/executor/background-executor.js.map +0 -1
- package/dist/capability/executor/foreground-executor.d.ts +0 -26
- package/dist/capability/executor/foreground-executor.d.ts.map +0 -1
- package/dist/capability/executor/foreground-executor.js +0 -82
- package/dist/capability/executor/foreground-executor.js.map +0 -1
- package/dist/capability/executor/orchestrator.d.ts +0 -38
- package/dist/capability/executor/orchestrator.d.ts.map +0 -1
- package/dist/capability/executor/orchestrator.js +0 -158
- package/dist/capability/executor/orchestrator.js.map +0 -1
- package/dist/capability/executor/stream-parser.d.ts +0 -73
- package/dist/capability/executor/stream-parser.d.ts.map +0 -1
- package/dist/capability/executor/stream-parser.js +0 -56
- package/dist/capability/executor/stream-parser.js.map +0 -1
- package/dist/capability/executor/types.d.ts +0 -44
- package/dist/capability/executor/types.d.ts.map +0 -1
- package/dist/capability/executor/types.js +0 -9
- package/dist/capability/executor/types.js.map +0 -1
- package/dist/capability/executor/worker-auth-probe.d.ts +0 -30
- package/dist/capability/executor/worker-auth-probe.d.ts.map +0 -1
- package/dist/capability/executor/worker-auth-probe.js +0 -108
- package/dist/capability/executor/worker-auth-probe.js.map +0 -1
- package/dist/capability/methodologies/bmad.yaml +0 -81
- package/dist/capability/methodologies/code-quality-audit.yaml +0 -26
- package/dist/capability/methodologies/harness-engineering.yaml +0 -75
- package/dist/capability/methodologies/test-coverage-scan.yaml +0 -26
- package/dist/capability/methodology-planner.d.ts +0 -49
- package/dist/capability/methodology-planner.d.ts.map +0 -1
- package/dist/capability/methodology-planner.js +0 -306
- package/dist/capability/methodology-planner.js.map +0 -1
- package/dist/capability/methodology-registry.d.ts +0 -32
- package/dist/capability/methodology-registry.d.ts.map +0 -1
- package/dist/capability/methodology-registry.js +0 -113
- package/dist/capability/methodology-registry.js.map +0 -1
- package/dist/daemon/handlers/methodology-formatter.d.ts +0 -16
- package/dist/daemon/handlers/methodology-formatter.d.ts.map +0 -1
- package/dist/daemon/handlers/methodology-formatter.js +0 -119
- package/dist/daemon/handlers/methodology-formatter.js.map +0 -1
- package/dist/daemon/idle-detector.d.ts +0 -35
- package/dist/daemon/idle-detector.d.ts.map +0 -1
- package/dist/daemon/idle-detector.js +0 -56
- package/dist/daemon/idle-detector.js.map +0 -1
- package/dist/daemon/idle-trigger.d.ts +0 -53
- package/dist/daemon/idle-trigger.d.ts.map +0 -1
- package/dist/daemon/idle-trigger.js +0 -153
- package/dist/daemon/idle-trigger.js.map +0 -1
- package/dist/daemon/methodology-pending-queue.d.ts +0 -33
- package/dist/daemon/methodology-pending-queue.d.ts.map +0 -1
- package/dist/daemon/methodology-pending-queue.js +0 -120
- package/dist/daemon/methodology-pending-queue.js.map +0 -1
- package/dist/web/routes/methodology.d.ts +0 -12
- package/dist/web/routes/methodology.d.ts.map +0 -1
- package/dist/web/routes/methodology.js +0 -228
- package/dist/web/routes/methodology.js.map +0 -1
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import yaml from 'js-yaml';
|
|
4
|
-
import { fileURLToPath } from 'url';
|
|
5
|
-
import { WorkerAuthError } from '../../capability/executor/worker-auth-probe.js';
|
|
6
|
-
import { logger } from '../../core/utils/logger.js';
|
|
7
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
-
/**
|
|
9
|
-
* /api/methodology-executions/* and /api/methodologies.
|
|
10
|
-
*
|
|
11
|
-
* Also owns the SSE stream for live execution updates. Note: the SSE route
|
|
12
|
-
* `/api/methodology-executions/events` must be registered before the
|
|
13
|
-
* parameterized `/:id` route on Express 4 (Express matches in definition
|
|
14
|
-
* order and `:id` would otherwise swallow the literal `events` segment).
|
|
15
|
-
*/
|
|
16
|
-
export function registerMethodologyRoutes(app, ctx) {
|
|
17
|
-
const { storage, executionManager, methodologyRegistry } = ctx;
|
|
18
|
-
// List executions
|
|
19
|
-
app.get('/api/methodology-executions', (req, res) => {
|
|
20
|
-
const limit = parseInt(req.query.limit) || 50;
|
|
21
|
-
const sessionId = req.query.session;
|
|
22
|
-
const db = storage.getDatabase();
|
|
23
|
-
const query = sessionId
|
|
24
|
-
? 'SELECT * FROM methodology_executions WHERE session_id = ? ORDER BY started_at DESC LIMIT ?'
|
|
25
|
-
: 'SELECT * FROM methodology_executions ORDER BY started_at DESC LIMIT ?';
|
|
26
|
-
const params = sessionId ? [sessionId, limit] : [limit];
|
|
27
|
-
const executions = db.prepare(query).all(...params);
|
|
28
|
-
res.json(executions);
|
|
29
|
-
});
|
|
30
|
-
// SSE stream — MUST be before `/:id`
|
|
31
|
-
app.get('/api/methodology-executions/events', (req, res) => {
|
|
32
|
-
if (!executionManager) {
|
|
33
|
-
res.status(503).json({ error: 'Execution manager not available' });
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const filterId = req.query.execution_id ? parseInt(String(req.query.execution_id)) : null;
|
|
37
|
-
res.setHeader('Content-Type', 'text/event-stream');
|
|
38
|
-
res.setHeader('Cache-Control', 'no-cache');
|
|
39
|
-
res.setHeader('Connection', 'keep-alive');
|
|
40
|
-
res.flushHeaders();
|
|
41
|
-
const unsub = executionManager.subscribe(ev => {
|
|
42
|
-
if (filterId !== null && ev.execution_id !== filterId)
|
|
43
|
-
return;
|
|
44
|
-
try {
|
|
45
|
-
res.write(`event: ${ev.type}\ndata: ${JSON.stringify(ev)}\n\n`);
|
|
46
|
-
}
|
|
47
|
-
catch { /* client gone */ }
|
|
48
|
-
});
|
|
49
|
-
const heartbeat = setInterval(() => {
|
|
50
|
-
try {
|
|
51
|
-
res.write(`: heartbeat ${Date.now()}\n\n`);
|
|
52
|
-
}
|
|
53
|
-
catch { /* ignore */ }
|
|
54
|
-
}, 25_000);
|
|
55
|
-
req.on('close', () => {
|
|
56
|
-
clearInterval(heartbeat);
|
|
57
|
-
unsub();
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
// Execution detail: get single execution with phases
|
|
61
|
-
app.get('/api/methodology-executions/:id', (req, res) => {
|
|
62
|
-
const executionId = parseInt(req.params.id);
|
|
63
|
-
const db = storage.getDatabase();
|
|
64
|
-
const execution = db.prepare('SELECT * FROM methodology_executions WHERE id = ?').get(executionId);
|
|
65
|
-
if (!execution) {
|
|
66
|
-
res.status(404).json({ error: 'Execution not found' });
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const phases = db.prepare(`
|
|
70
|
-
SELECT * FROM phase_executions
|
|
71
|
-
WHERE methodology_execution_id = ?
|
|
72
|
-
ORDER BY phase_index ASC
|
|
73
|
-
`).all(executionId);
|
|
74
|
-
res.json({
|
|
75
|
-
...execution,
|
|
76
|
-
plan: JSON.parse(execution.plan_json),
|
|
77
|
-
phases,
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
// Cancel a running execution
|
|
81
|
-
app.post('/api/methodology-executions/:id/cancel', async (req, res) => {
|
|
82
|
-
const executionId = parseInt(req.params.id);
|
|
83
|
-
const db = storage.getDatabase();
|
|
84
|
-
const execution = db.prepare('SELECT * FROM methodology_executions WHERE id = ?').get(executionId);
|
|
85
|
-
if (!execution) {
|
|
86
|
-
res.status(404).json({ error: 'Execution not found' });
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (execution.status !== 'running') {
|
|
90
|
-
res.status(400).json({ error: `Cannot cancel execution in ${execution.status} state` });
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
// Prefer ExecutionManager — it kills the worker process for background mode
|
|
94
|
-
if (executionManager) {
|
|
95
|
-
try {
|
|
96
|
-
await executionManager.cancel(executionId);
|
|
97
|
-
}
|
|
98
|
-
catch (err) {
|
|
99
|
-
logger.warn(`[web] cancel via ExecutionManager failed: ${err}`);
|
|
100
|
-
res.status(500).json({ error: `Cancel failed: ${err instanceof Error ? err.message : String(err)}` });
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
// Fallback: DB-only cancel (pre-Phase-C behavior)
|
|
106
|
-
db.prepare(`
|
|
107
|
-
UPDATE methodology_executions
|
|
108
|
-
SET status = 'cancelled', completed_at = ?
|
|
109
|
-
WHERE id = ?
|
|
110
|
-
`).run(Date.now(), executionId);
|
|
111
|
-
}
|
|
112
|
-
// Mark any still-running phase rows as cancelled
|
|
113
|
-
db.prepare(`
|
|
114
|
-
UPDATE phase_executions
|
|
115
|
-
SET status = 'cancelled', completed_at = ?
|
|
116
|
-
WHERE methodology_execution_id = ? AND status = 'running'
|
|
117
|
-
`).run(Date.now(), executionId);
|
|
118
|
-
res.json({ success: true, message: 'Execution cancelled' });
|
|
119
|
-
});
|
|
120
|
-
// Start a new execution (Phase C)
|
|
121
|
-
app.post('/api/methodology-executions', async (req, res) => {
|
|
122
|
-
if (!executionManager || !methodologyRegistry) {
|
|
123
|
-
res.status(503).json({ error: 'Execution manager not available' });
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const { session_id, methodology_id, plan, mode } = req.body ?? {};
|
|
127
|
-
if (!session_id) {
|
|
128
|
-
res.status(400).json({ error: 'session_id is required' });
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
if (mode !== 'foreground' && mode !== 'background') {
|
|
132
|
-
res.status(400).json({ error: 'mode must be foreground or background' });
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
let planObj = null;
|
|
136
|
-
if (plan && typeof plan === 'object' && Array.isArray(plan.phases)) {
|
|
137
|
-
planObj = plan;
|
|
138
|
-
}
|
|
139
|
-
else if (methodology_id) {
|
|
140
|
-
const methodology = methodologyRegistry.get(methodology_id);
|
|
141
|
-
if (!methodology) {
|
|
142
|
-
res.status(404).json({ error: `methodology ${methodology_id} not found` });
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
const templates = methodology.phase_templates ?? {};
|
|
146
|
-
const phaseIds = Object.keys(templates);
|
|
147
|
-
if (phaseIds.length === 0) {
|
|
148
|
-
res.status(400).json({ error: `methodology ${methodology_id} has no phase_templates` });
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
planObj = {
|
|
152
|
-
methodology_id: methodology.id,
|
|
153
|
-
rationale: `Started via API (default phases from ${methodology.id})`,
|
|
154
|
-
phases: phaseIds.map(id => {
|
|
155
|
-
const tpl = templates[id];
|
|
156
|
-
return {
|
|
157
|
-
id,
|
|
158
|
-
agent: tpl.agent,
|
|
159
|
-
prompt: tpl.description ?? tpl.prompt_template.slice(0, 400),
|
|
160
|
-
rationale: 'default phase from methodology template',
|
|
161
|
-
};
|
|
162
|
-
}),
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
res.status(400).json({ error: 'either methodology_id or plan must be provided' });
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
try {
|
|
170
|
-
const id = executionManager.start({
|
|
171
|
-
session_id,
|
|
172
|
-
methodology_id: planObj.methodology_id,
|
|
173
|
-
plan: planObj,
|
|
174
|
-
mode,
|
|
175
|
-
});
|
|
176
|
-
res.status(201).json({ id, mode });
|
|
177
|
-
}
|
|
178
|
-
catch (err) {
|
|
179
|
-
logger.warn(`[web] start execution failed: ${err}`);
|
|
180
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
181
|
-
const isAuthError = err instanceof WorkerAuthError
|
|
182
|
-
|| (err instanceof Error && err.code === 'AUTH_REQUIRED')
|
|
183
|
-
|| message.includes('Background mode requires');
|
|
184
|
-
if (isAuthError) {
|
|
185
|
-
res.status(503).json({ error: message, code: 'AUTH_REQUIRED' });
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
res.status(500).json({ error: message });
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
// Delete an execution
|
|
193
|
-
app.delete('/api/methodology-executions/:id', (req, res) => {
|
|
194
|
-
const executionId = parseInt(req.params.id);
|
|
195
|
-
const db = storage.getDatabase();
|
|
196
|
-
db.prepare('DELETE FROM phase_executions WHERE methodology_execution_id = ?').run(executionId);
|
|
197
|
-
const result = db.prepare('DELETE FROM methodology_executions WHERE id = ?').run(executionId);
|
|
198
|
-
if (result.changes === 0) {
|
|
199
|
-
res.status(404).json({ error: 'Execution not found' });
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
res.json({ success: true });
|
|
203
|
-
});
|
|
204
|
-
// Methodology: list all available methodologies
|
|
205
|
-
app.get('/api/methodologies', (_req, res) => {
|
|
206
|
-
try {
|
|
207
|
-
const candidates = [
|
|
208
|
-
path.join(__dirname, '../../capability/methodologies'), // dist/web/routes -> dist/capability/methodologies
|
|
209
|
-
path.join(__dirname, '../../../src/capability/methodologies'), // dev: src/web/routes -> src/capability/methodologies
|
|
210
|
-
];
|
|
211
|
-
const dir = candidates.find(d => fs.existsSync(d));
|
|
212
|
-
if (!dir) {
|
|
213
|
-
res.json([]);
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const files = fs.readdirSync(dir).filter(f => f.endsWith('.yaml'));
|
|
217
|
-
const methodologies = files.map(f => {
|
|
218
|
-
const content = fs.readFileSync(path.join(dir, f), 'utf-8');
|
|
219
|
-
return yaml.load(content);
|
|
220
|
-
});
|
|
221
|
-
res.json(methodologies);
|
|
222
|
-
}
|
|
223
|
-
catch (err) {
|
|
224
|
-
res.status(500).json({ error: err.message });
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
//# sourceMappingURL=methodology.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"methodology.js","sourceRoot":"","sources":["../../../src/web/routes/methodology.ts"],"names":[],"mappings":"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"}
|