@specship/specship-win32-arm64 0.16.0 → 0.18.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 (52) hide show
  1. package/lib/dist/activation/steering.d.ts +11 -2
  2. package/lib/dist/activation/steering.d.ts.map +1 -1
  3. package/lib/dist/activation/steering.js +26 -9
  4. package/lib/dist/activation/steering.js.map +1 -1
  5. package/lib/dist/bin/specship.js +34 -2
  6. package/lib/dist/bin/specship.js.map +1 -1
  7. package/lib/dist/commands/specship/learn.md +45 -0
  8. package/lib/dist/config/runtime-settings.d.ts +25 -0
  9. package/lib/dist/config/runtime-settings.d.ts.map +1 -0
  10. package/lib/dist/config/runtime-settings.js +99 -0
  11. package/lib/dist/config/runtime-settings.js.map +1 -0
  12. package/lib/dist/index.d.ts +9 -0
  13. package/lib/dist/index.d.ts.map +1 -1
  14. package/lib/dist/index.js +8 -0
  15. package/lib/dist/index.js.map +1 -1
  16. package/lib/dist/installer/index.js +1 -1
  17. package/lib/dist/installer/index.js.map +1 -1
  18. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  19. package/lib/dist/installer/targets/claude.js +7 -6
  20. package/lib/dist/installer/targets/claude.js.map +1 -1
  21. package/lib/dist/mcp/model-context.d.ts +5 -3
  22. package/lib/dist/mcp/model-context.d.ts.map +1 -1
  23. package/lib/dist/mcp/model-context.js +17 -8
  24. package/lib/dist/mcp/model-context.js.map +1 -1
  25. package/lib/dist/mcp/session.d.ts +1 -0
  26. package/lib/dist/mcp/session.d.ts.map +1 -1
  27. package/lib/dist/mcp/session.js +13 -0
  28. package/lib/dist/mcp/session.js.map +1 -1
  29. package/lib/dist/mcp/tools.d.ts +30 -0
  30. package/lib/dist/mcp/tools.d.ts.map +1 -1
  31. package/lib/dist/mcp/tools.js +151 -11
  32. package/lib/dist/mcp/tools.js.map +1 -1
  33. package/lib/dist/reflect/index.d.ts +3 -1
  34. package/lib/dist/reflect/index.d.ts.map +1 -1
  35. package/lib/dist/reflect/index.js +5 -1
  36. package/lib/dist/reflect/index.js.map +1 -1
  37. package/lib/dist/reflect/miner.d.ts.map +1 -1
  38. package/lib/dist/reflect/miner.js +130 -5
  39. package/lib/dist/reflect/miner.js.map +1 -1
  40. package/lib/dist/reflect/session-outcomes.d.ts +50 -0
  41. package/lib/dist/reflect/session-outcomes.d.ts.map +1 -0
  42. package/lib/dist/reflect/session-outcomes.js +110 -0
  43. package/lib/dist/reflect/session-outcomes.js.map +1 -0
  44. package/lib/dist/reflect/sweep.d.ts +11 -0
  45. package/lib/dist/reflect/sweep.d.ts.map +1 -1
  46. package/lib/dist/reflect/sweep.js +29 -0
  47. package/lib/dist/reflect/sweep.js.map +1 -1
  48. package/lib/dist/server/routes/claude.js +27 -0
  49. package/lib/dist/workflows/defaults/spec-implement-mixed.yaml +197 -0
  50. package/lib/node_modules/.package-lock.json +1 -1
  51. package/lib/package.json +1 -1
  52. package/package.json +1 -1
@@ -35,6 +35,8 @@ const THRESHOLDS = {
35
35
  heavyOutputBytes: 50000, // R9: a Bash call whose result exceeds N "tokens"
36
36
  heavyOutputMin: 2, // R9: …seen ≥N times
37
37
  refDocSessions: 3, // R10: a doc file Read across ≥N distinct sessions
38
+ recipeMinSteps: 5, // R11: completed workflow run with ≥N finished steps (LEARN-DOC)
39
+ workaroundSessions: 2, // R12: the corrected command form recurs in ≥N sessions (LEARN-DOC)
38
40
  };
39
41
  /** Per-rule cap so a noisy corpus can't flood the Improvements list. */
40
42
  const PER_RULE_LIMIT = 5;
@@ -87,6 +89,10 @@ function mineProposals(db, ctx) {
87
89
  out.push(...ruleSpecshipCold(db, ctx, forms));
88
90
  out.push(...ruleHeavyOutput(db, ctx, forms));
89
91
  out.push(...ruleReferenceDoc(db, ctx, forms));
92
+ // Round 4 — SUCCESS crystallization (LEARN-DOC, REQ-LEARN-001): mine what
93
+ // WORKED, not only what wasted. Same human-gated proposal pipeline.
94
+ out.push(...ruleCompletedRunRecipe(db, ctx));
95
+ out.push(...ruleErrorWorkaround(db, ctx, forms));
90
96
  return out;
91
97
  }
92
98
  /**
@@ -242,6 +248,112 @@ function ruleRepeatedCommands(db, ctx, forms) {
242
248
  },
243
249
  }));
244
250
  }
251
+ /**
252
+ * R11 → skill: a workflow run that COMPLETED with ≥5 finished steps is a
253
+ * proven recipe (LEARN-DOC, REQ-LEARN-001.A1) — crystallize it so the next
254
+ * same-shaped task starts from the routine instead of rediscovering it.
255
+ * Success signal is the run's own recorded status; nothing is inferred from
256
+ * transcript data that can't prove it. workflow_runs is project-local (it
257
+ * lives in this project's DB), so no cross-project predicate is needed.
258
+ */
259
+ function ruleCompletedRunRecipe(db, ctx) {
260
+ if (!tableExists(db, 'workflow_runs'))
261
+ return [];
262
+ const rows = db
263
+ .prepare(`SELECT id, workflow_name, inputs, metadata FROM workflow_runs
264
+ WHERE status = 'completed'
265
+ ORDER BY completed_at DESC
266
+ LIMIT 20`)
267
+ .all();
268
+ const out = [];
269
+ for (const r of rows) {
270
+ let steps = [];
271
+ let inputs = {};
272
+ try {
273
+ steps = JSON.parse(r.metadata ?? '{}').completedNodes ?? [];
274
+ }
275
+ catch { /* unparseable metadata — skip */ }
276
+ try {
277
+ inputs = JSON.parse(r.inputs ?? '{}');
278
+ }
279
+ catch { /* unparseable inputs — skip */ }
280
+ if (steps.length < THRESHOLDS.recipeMinSteps)
281
+ continue;
282
+ const inputKeys = Object.keys(inputs);
283
+ out.push((0, targets_1.buildProposal)(ctx, {
284
+ type: 'skill',
285
+ severity: 'info',
286
+ nameSeed: `recipe-${r.workflow_name}`,
287
+ title: `Crystallize the completed ${r.workflow_name} run as a recipe`,
288
+ body: `Run ${r.id.slice(0, 8)} completed all ${steps.length} steps. Capturing the routine makes the next same-shaped task start from a proven recipe.`,
289
+ content: `Proven recipe from a completed run of \`${r.workflow_name}\`` +
290
+ (inputKeys.length ? ` (inputs: ${inputKeys.join(', ')})` : '') +
291
+ `:\n\n` +
292
+ steps.map((st, i) => `${i + 1}. ${st}`).join('\n') +
293
+ `\n\nRe-run the routine with: \`specship workflow run ${r.workflow_name}${inputKeys.map((k) => ` -i ${k}=<value>`).join('')}\``,
294
+ evidence: {
295
+ sessions: [],
296
+ prompts: [],
297
+ detail: `workflow_runs ${r.id}: ${r.workflow_name} completed, ${steps.length} steps`,
298
+ },
299
+ }));
300
+ if (out.length >= PER_RULE_LIMIT)
301
+ break;
302
+ }
303
+ return out;
304
+ }
305
+ /**
306
+ * R12 → memory_rule: error→workaround pair (LEARN-DOC, REQ-LEARN-001.A2).
307
+ * Transcripts carry no exit codes, so "failing-shaped" is structural: within
308
+ * a session, the SAME first token re-run as a DIFFERENT full command in the
309
+ * next Bash call, where the later variant then recurs (normalized) across
310
+ * ≥2 distinct sessions — the working form the agent converged on.
311
+ * Conservative by design; the threshold is spec-flagged for tuning.
312
+ */
313
+ function ruleErrorWorkaround(db, ctx, forms) {
314
+ const rows = db
315
+ .prepare(`SELECT session_id, input_summary AS cmd, ts FROM claude_tool_calls
316
+ WHERE tool_name = 'Bash' AND input_summary != '' AND ${IN_PROJECT}
317
+ ORDER BY session_id, ts ASC
318
+ LIMIT 8000`)
319
+ .all(...forms);
320
+ // Consecutive same-first-token, different-command pairs → candidate
321
+ // workarounds (the LATER command is the form that stuck).
322
+ const candidates = new Map();
323
+ for (let i = 1; i < rows.length; i++) {
324
+ const prev = rows[i - 1];
325
+ const cur = rows[i];
326
+ if (prev.session_id !== cur.session_id)
327
+ continue;
328
+ const tok = (c) => c.trim().split(/\s+/)[0] ?? '';
329
+ if (!tok(prev.cmd) || tok(prev.cmd) !== tok(cur.cmd))
330
+ continue;
331
+ if (prev.cmd.trim() === cur.cmd.trim())
332
+ continue;
333
+ const key = cur.cmd.replace(/\s+/g, ' ').trim();
334
+ const c = candidates.get(key) ?? { sample: cur.cmd.trim(), sessions: new Set() };
335
+ c.sessions.add(cur.session_id);
336
+ candidates.set(key, c);
337
+ }
338
+ return [...candidates.values()]
339
+ .filter((c) => c.sessions.size >= THRESHOLDS.workaroundSessions)
340
+ .sort((a, b) => b.sessions.size - a.sessions.size)
341
+ .slice(0, PER_RULE_LIMIT)
342
+ .map((c) => (0, targets_1.buildProposal)(ctx, {
343
+ type: 'memory_rule',
344
+ scope: 'project',
345
+ severity: 'info',
346
+ nameSeed: `workaround-${c.sample}`,
347
+ title: `Working form: \`${truncate(c.sample, 44)}\``,
348
+ body: `An initial variant of this command was immediately re-run in this altered form, and the altered form recurs across ${c.sessions.size} sessions — it looks like the form that works here.`,
349
+ content: `In this project, use \`${c.sample}\` directly (an earlier variant of this command consistently gets corrected to this form).`,
350
+ evidence: {
351
+ sessions: [...c.sessions].slice(0, 8),
352
+ prompts: [],
353
+ detail: `same-first-token retry converging on this form across ${c.sessions.size} sessions`,
354
+ },
355
+ }));
356
+ }
245
357
  /** Destructive shell-operation categories the agent should treat with care. */
246
358
  const DESTRUCTIVE = [
247
359
  { key: 'rm-rf', label: 'recursive force-delete (`rm -rf`)', re: /\brm\s+-[a-z]*r[a-z]*f[a-z]*\b|\brm\s+-[a-z]*f[a-z]*r[a-z]*\b/i },
@@ -336,22 +448,34 @@ const CORRECTION_CUE = /^(no\b|don'?t\b|do not\b|never\b|always\b|stop\b|instead
336
448
  */
337
449
  function ruleRecurringCorrection(db, ctx, forms) {
338
450
  const rows = db
339
- .prepare(`SELECT id, text FROM claude_prompts
451
+ .prepare(`SELECT id, session_id, ts, text FROM claude_prompts
340
452
  WHERE text IS NOT NULL AND length(text) BETWEEN 12 AND 200
341
453
  AND text NOT LIKE '<%' AND text NOT LIKE '%<command-name>%'
342
454
  AND is_sidechain = 0
343
455
  AND ${IN_PROJECT}
344
- ORDER BY ts DESC
456
+ ORDER BY session_id, ts ASC
345
457
  LIMIT 4000`)
346
458
  .all(...forms);
347
459
  const groups = new Map();
460
+ let prevInSession = null;
348
461
  for (const r of rows) {
349
462
  const trimmed = r.text.trim();
350
- if (!CORRECTION_CUE.test(trimmed))
463
+ const isCorrection = CORRECTION_CUE.test(trimmed);
464
+ if (!isCorrection) {
465
+ prevInSession = { session: r.session_id, text: trimmed };
351
466
  continue;
467
+ }
468
+ // Corrected-approach context (LEARN-DOC, REQ-LEARN-001): the prompt the
469
+ // correction FOLLOWED tells us what was being done wrong — capturing it
470
+ // turns "stop doing X" into "when doing Y, do X-the-right-way".
471
+ const context = prevInSession && prevInSession.session === r.session_id
472
+ ? prevInSession.text.split('\n')[0].slice(0, 80)
473
+ : '';
352
474
  const key = trimmed.replace(/\s+/g, ' ').toLowerCase();
353
- const g = groups.get(key) ?? { count: 0, prompts: [], sample: trimmed };
475
+ const g = groups.get(key) ?? { count: 0, prompts: [], sample: trimmed, context };
354
476
  g.count++;
477
+ if (!g.context && context)
478
+ g.context = context;
355
479
  if (g.prompts.length < 8)
356
480
  g.prompts.push(r.id);
357
481
  groups.set(key, g);
@@ -367,7 +491,8 @@ function ruleRecurringCorrection(db, ctx, forms) {
367
491
  nameSeed: `correction-${g.sample}`,
368
492
  title: `Recurring correction: "${truncate(g.sample, 48)}"`,
369
493
  body: `You've given this correction ${g.count} times. Recording it as a durable preference means you shouldn't have to repeat it.`,
370
- content: `Standing user preference (you have repeated this): ${g.sample}`,
494
+ content: (g.context ? `When doing work like "${g.context}": ` : 'Standing user preference (you have repeated this): ') +
495
+ g.sample,
371
496
  evidence: {
372
497
  sessions: [],
373
498
  prompts: g.prompts,
@@ -1 +1 @@
1
- {"version":3,"file":"miner.js","sourceRoot":"","sources":["../../src/reflect/miner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"miner.js","sourceRoot":"","sources":["../../src/reflect/miner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Deterministic session outcome records (LEARN-DOC, REQ-LEARN-004) — tier 3
3
+ * of SpecShip's memory made recallable.
4
+ *
5
+ * Everything here is a computed join over rows the ingest already writes
6
+ * (`claude_*`) plus `workflow_runs` — no LLM summarization, no new write
7
+ * path, and no claims the data can't prove: transcripts carry tool-call
8
+ * metadata and result LENGTH (never exit codes), so test outcomes appear
9
+ * only via a workflow run's own recorded status.
10
+ */
11
+ import type { SqliteDatabase } from '../db/sqlite-adapter';
12
+ export interface SessionOutcome {
13
+ sessionId: string;
14
+ startedAt: number | null;
15
+ /** First line of the session's opening prompt (trimmed, capped). */
16
+ firstPrompt: string;
17
+ /** Distinct files the agent edited (Edit/Write targets). */
18
+ filesEdited: string[];
19
+ /** Total shell commands run. */
20
+ commandsRun: number;
21
+ /** Total specship tool calls. */
22
+ specshipCalls: number;
23
+ /** specship_link_assert calls — spec links asserted in-session. */
24
+ linksAsserted: number;
25
+ /**
26
+ * Workflow runs whose lifetime overlaps the session window. workflow_runs
27
+ * carries no session id, so this is a deterministic time-overlap join —
28
+ * labeled as such wherever rendered.
29
+ */
30
+ workflowRuns: Array<{
31
+ id: string;
32
+ name: string;
33
+ status: string;
34
+ }>;
35
+ costUsd: number;
36
+ }
37
+ /**
38
+ * Sessions (this project only, both path forms) that EDITED any of the given
39
+ * files, newest first. `excludeActiveWithinMs` drops sessions still active
40
+ * recently — the current session is in these tables too (ingest is live) and
41
+ * "prior work: two minutes ago" is noise, not recall.
42
+ */
43
+ export declare function sessionsTouchingFiles(db: SqliteDatabase, projectForms: [string, string], filePaths: string[], opts?: {
44
+ limit?: number;
45
+ excludeActiveWithinMs?: number;
46
+ now?: number;
47
+ }): string[];
48
+ /** Resolve one session's outcome record. Null when the session is unknown. */
49
+ export declare function sessionOutcome(db: SqliteDatabase, sessionId: string): SessionOutcome | null;
50
+ //# sourceMappingURL=session-outcomes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-outcomes.d.ts","sourceRoot":"","sources":["../../src/reflect/session-outcomes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;CACjB;AAYD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,cAAc,EAClB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1E,MAAM,EAAE,CA8BV;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA6D3F"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * Deterministic session outcome records (LEARN-DOC, REQ-LEARN-004) — tier 3
4
+ * of SpecShip's memory made recallable.
5
+ *
6
+ * Everything here is a computed join over rows the ingest already writes
7
+ * (`claude_*`) plus `workflow_runs` — no LLM summarization, no new write
8
+ * path, and no claims the data can't prove: transcripts carry tool-call
9
+ * metadata and result LENGTH (never exit codes), so test outcomes appear
10
+ * only via a workflow run's own recorded status.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.sessionsTouchingFiles = sessionsTouchingFiles;
14
+ exports.sessionOutcome = sessionOutcome;
15
+ function tableExists(db, name) {
16
+ try {
17
+ return !!db
18
+ .prepare(`SELECT 1 AS x FROM sqlite_master WHERE type='table' AND name=?`)
19
+ .get(name);
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ /**
26
+ * Sessions (this project only, both path forms) that EDITED any of the given
27
+ * files, newest first. `excludeActiveWithinMs` drops sessions still active
28
+ * recently — the current session is in these tables too (ingest is live) and
29
+ * "prior work: two minutes ago" is noise, not recall.
30
+ */
31
+ function sessionsTouchingFiles(db, projectForms, filePaths, opts = {}) {
32
+ if (filePaths.length === 0)
33
+ return [];
34
+ if (!tableExists(db, 'claude_tool_calls') || !tableExists(db, 'claude_sessions'))
35
+ return [];
36
+ const limit = opts.limit ?? 3;
37
+ const quiet = opts.excludeActiveWithinMs ?? 30 * 60_000;
38
+ const now = opts.now ?? Date.now();
39
+ // Edit/Write input_summary IS the file path (summarizeToolInput). Match on
40
+ // path suffix so absolute vs project-relative storage both hit.
41
+ const caps = filePaths.slice(0, 12);
42
+ const suffixClauses = caps.map(() => `t.input_summary LIKE ?`).join(' OR ');
43
+ const params = [...projectForms, ...caps.map((p) => `%${p}`), now - quiet, limit];
44
+ try {
45
+ const rows = db
46
+ .prepare(`SELECT s.id, MAX(s.started_at) AS started
47
+ FROM claude_tool_calls t
48
+ JOIN claude_sessions s ON s.id = t.session_id
49
+ WHERE t.tool_name IN ('Edit','Write')
50
+ AND s.project_path IN (?, ?)
51
+ AND (${suffixClauses})
52
+ AND COALESCE(s.ended_at, s.started_at, 0) < ?
53
+ GROUP BY s.id
54
+ ORDER BY started DESC
55
+ LIMIT ?`)
56
+ .all(...params);
57
+ return rows.map((r) => r.id);
58
+ }
59
+ catch {
60
+ return [];
61
+ }
62
+ }
63
+ /** Resolve one session's outcome record. Null when the session is unknown. */
64
+ function sessionOutcome(db, sessionId) {
65
+ if (!tableExists(db, 'claude_sessions'))
66
+ return null;
67
+ const s = db
68
+ .prepare(`SELECT id, started_at, ended_at, total_cost_usd FROM claude_sessions WHERE id = ?`)
69
+ .get(sessionId);
70
+ if (!s)
71
+ return null;
72
+ const firstPromptRow = db
73
+ .prepare(`SELECT text FROM claude_prompts
74
+ WHERE session_id = ? AND text IS NOT NULL AND text NOT LIKE '<%'
75
+ ORDER BY ts ASC LIMIT 1`)
76
+ .get(sessionId);
77
+ const firstPrompt = (firstPromptRow?.text ?? '').split('\n')[0]?.trim().slice(0, 100) ?? '';
78
+ const filesEdited = db
79
+ .prepare(`SELECT DISTINCT input_summary AS f FROM claude_tool_calls
80
+ WHERE session_id = ? AND tool_name IN ('Edit','Write') AND input_summary != ''
81
+ ORDER BY f LIMIT 40`)
82
+ .all(sessionId).map((r) => r.f);
83
+ const count = (sql) => (db.prepare(sql).get(sessionId)?.n ?? 0);
84
+ const commandsRun = count(`SELECT COUNT(*) AS n FROM claude_tool_calls WHERE session_id = ? AND tool_name = 'Bash'`);
85
+ const specshipCalls = count(`SELECT COUNT(*) AS n FROM claude_tool_calls WHERE session_id = ? AND is_specship = 1`);
86
+ const linksAsserted = count(`SELECT COUNT(*) AS n FROM claude_tool_calls WHERE session_id = ? AND tool_name LIKE '%specship_link_assert'`);
87
+ // Time-overlap join to workflow runs (no session FK exists — deterministic
88
+ // heuristic, always labeled as in-window when rendered).
89
+ let workflowRuns = [];
90
+ if (tableExists(db, 'workflow_runs') && s.started_at) {
91
+ const end = s.ended_at ?? Date.now();
92
+ workflowRuns = db
93
+ .prepare(`SELECT id, workflow_name AS name, status FROM workflow_runs
94
+ WHERE created_at <= ? AND COALESCE(completed_at, last_activity_at) >= ?
95
+ ORDER BY created_at DESC LIMIT 5`)
96
+ .all(end, s.started_at);
97
+ }
98
+ return {
99
+ sessionId: s.id,
100
+ startedAt: s.started_at,
101
+ firstPrompt,
102
+ filesEdited,
103
+ commandsRun,
104
+ specshipCalls,
105
+ linksAsserted,
106
+ workflowRuns,
107
+ costUsd: s.total_cost_usd ?? 0,
108
+ };
109
+ }
110
+ //# sourceMappingURL=session-outcomes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-outcomes.js","sourceRoot":"","sources":["../../src/reflect/session-outcomes.ts"],"names":[],"mappings":"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"}
@@ -23,4 +23,15 @@ export interface SweepResult extends AnalyzeResult {
23
23
  }
24
24
  export declare function analyze(db: SqliteDatabase, ctx: ReflectContext, now?: () => number): AnalyzeResult;
25
25
  export declare function sweep(db: SqliteDatabase, ctx: ReflectContext, now?: () => number): SweepResult;
26
+ /**
27
+ * Explicit capture (LEARN-DOC, REQ-LEARN-002): crystallize a workflow the
28
+ * user/agent just performed into a `skill` proposal ON DEMAND — same store,
29
+ * same content-hash convergence, same human gate as mined proposals. The
30
+ * evidence detail marks the explicit provenance so the Improvements surface
31
+ * can distinguish "you asked for this" from "the miner found this".
32
+ */
33
+ export declare function capture(db: SqliteDatabase, ctx: ReflectContext, input: {
34
+ title: string;
35
+ content: string;
36
+ }, now?: () => number): Proposal;
26
37
  //# sourceMappingURL=sweep.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sweep.d.ts","sourceRoot":"","sources":["../../src/reflect/sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,oFAAoF;IACpF,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,gFAAgF;IAChF,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,wBAAgB,OAAO,CACrB,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,cAAc,EACnB,GAAG,GAAE,MAAM,MAAyB,GACnC,aAAa,CAKf;AAED,wBAAgB,KAAK,CACnB,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,cAAc,EACnB,GAAG,GAAE,MAAM,MAAyB,GACnC,WAAW,CAgBb"}
1
+ {"version":3,"file":"sweep.d.ts","sourceRoot":"","sources":["../../src/reflect/sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,oFAAoF;IACpF,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,gFAAgF;IAChF,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,wBAAgB,OAAO,CACrB,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,cAAc,EACnB,GAAG,GAAE,MAAM,MAAyB,GACnC,aAAa,CAKf;AAED,wBAAgB,KAAK,CACnB,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,cAAc,EACnB,GAAG,GAAE,MAAM,MAAyB,GACnC,WAAW,CAgBb;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACzC,GAAG,GAAE,MAAM,MAAyB,GACnC,QAAQ,CAmBV"}
@@ -13,7 +13,9 @@
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.analyze = analyze;
15
15
  exports.sweep = sweep;
16
+ exports.capture = capture;
16
17
  const miner_1 = require("./miner");
18
+ const targets_1 = require("./targets");
17
19
  const store_1 = require("./store");
18
20
  function analyze(db, ctx, now = () => Date.now()) {
19
21
  const store = new store_1.ReflectStore(db, now);
@@ -39,4 +41,31 @@ function sweep(db, ctx, now = () => Date.now()) {
39
41
  }
40
42
  return { open: store.list('open'), empty: mined.length === 0, notify };
41
43
  }
44
+ /**
45
+ * Explicit capture (LEARN-DOC, REQ-LEARN-002): crystallize a workflow the
46
+ * user/agent just performed into a `skill` proposal ON DEMAND — same store,
47
+ * same content-hash convergence, same human gate as mined proposals. The
48
+ * evidence detail marks the explicit provenance so the Improvements surface
49
+ * can distinguish "you asked for this" from "the miner found this".
50
+ */
51
+ function capture(db, ctx, input, now = () => Date.now()) {
52
+ const store = new store_1.ReflectStore(db, now);
53
+ const title = input.title.trim();
54
+ const proposal = (0, targets_1.buildProposal)(ctx, {
55
+ type: 'skill',
56
+ severity: 'info',
57
+ nameSeed: `learn-${title}`,
58
+ title: `Captured routine: ${title}`,
59
+ body: 'Explicitly captured via /specship:learn — a distilled routine from a real session, awaiting your review.',
60
+ content: input.content.trim(),
61
+ evidence: {
62
+ sessions: [],
63
+ prompts: [],
64
+ detail: 'explicitly captured (/specship:learn)',
65
+ },
66
+ });
67
+ store.upsertMined([proposal]);
68
+ // Return the stored row (state may differ if it already existed).
69
+ return store.list().find((p) => p.contentHash === proposal.contentHash) ?? proposal;
70
+ }
42
71
  //# sourceMappingURL=sweep.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../src/reflect/sweep.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAmBH,0BASC;AAED,sBAoBC;AA/CD,mCAAwC;AACxC,mCAAuC;AAevC,SAAgB,OAAO,CACrB,EAAkB,EAClB,GAAmB,EACnB,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IAEpC,MAAM,KAAK,GAAG,IAAI,oBAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAA,qBAAa,EAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,SAAgB,KAAK,CACnB,EAAkB,EAClB,GAAmB,EACnB,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IAEpC,MAAM,KAAK,GAAG,IAAI,oBAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAA,qBAAa,EAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,wEAAwE;YACxE,sEAAsE;YACtE,+CAA+C;YAC/C,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;gBACrF,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../src/reflect/sweep.ts"],"names":[],"mappings":"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"}
@@ -999,6 +999,33 @@ export async function registerClaudeRoutes(app) {
999
999
  saving: '~$X.XX / session (model-dependent)',
1000
1000
  });
1001
1001
  }
1002
+ // Rule 4: small-model flounder → escalate (MIXMODEL-DOC, REQ-MIX-002).
1003
+ // A haiku/sonnet session drowning in file Reads is the re-read spiral —
1004
+ // the task shape wants a bigger model, or the same work packaged as the
1005
+ // mixed-model workflow (fresh context per step + external verification).
1006
+ const flounder = db.prepare(`
1007
+ SELECT s.id, s.last_model,
1008
+ (SELECT COUNT(*) FROM claude_tool_calls t WHERE t.session_id = s.id AND t.tool_name = 'Read') AS reads
1009
+ FROM claude_sessions s
1010
+ WHERE s.project_path IN (?, ?)
1011
+ AND (LOWER(COALESCE(s.last_model,'')) LIKE '%haiku%' OR LOWER(COALESCE(s.last_model,'')) LIKE '%sonnet%')
1012
+ ORDER BY s.started_at DESC
1013
+ LIMIT 30
1014
+ `).all(realRoot, mangledRoot);
1015
+ for (const r of flounder) {
1016
+ if (r.reads < 15)
1017
+ continue;
1018
+ tips.push({
1019
+ id: 'model_escalation:' + r.id,
1020
+ severity: 'warn',
1021
+ icon: 'bot',
1022
+ title: `${r.reads} file Reads on a ${/haiku/i.test(r.last_model) ? 'Haiku' : 'Sonnet'} session — this task wants a bigger model or a workflow`,
1023
+ why: 'Small models flounder on plan-and-synthesize tasks: they re-read files instead of reasoning over them. Escalate the judgment, keep the typing cheap.',
1024
+ evidence: { session: r.id, detail: `${r.last_model}: ${r.reads} Read calls` },
1025
+ fix: 'specship workflow run spec-implement-mixed -i SPEC_ID=<id> # sonnet plans, haiku executes, tests verify',
1026
+ saving: 'flounder turns cost more than a bigger model',
1027
+ });
1028
+ }
1002
1029
  // Sort: errors before warns before info, then within bucket by saving heuristic.
1003
1030
  const order = { error: 0, warn: 1, info: 2 };
1004
1031
  tips.sort((a, b) => (order[a.severity] ?? 9) - (order[b.severity] ?? 9));