@specship/specship-win32-arm64 0.17.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 (48) hide show
  1. package/lib/dist/activation/steering.d.ts +1 -1
  2. package/lib/dist/activation/steering.d.ts.map +1 -1
  3. package/lib/dist/activation/steering.js +11 -7
  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 +6 -5
  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 +10 -6
  24. package/lib/dist/mcp/model-context.js.map +1 -1
  25. package/lib/dist/mcp/tools.d.ts +9 -0
  26. package/lib/dist/mcp/tools.d.ts.map +1 -1
  27. package/lib/dist/mcp/tools.js +46 -0
  28. package/lib/dist/mcp/tools.js.map +1 -1
  29. package/lib/dist/reflect/index.d.ts +3 -1
  30. package/lib/dist/reflect/index.d.ts.map +1 -1
  31. package/lib/dist/reflect/index.js +5 -1
  32. package/lib/dist/reflect/index.js.map +1 -1
  33. package/lib/dist/reflect/miner.d.ts.map +1 -1
  34. package/lib/dist/reflect/miner.js +130 -5
  35. package/lib/dist/reflect/miner.js.map +1 -1
  36. package/lib/dist/reflect/session-outcomes.d.ts +50 -0
  37. package/lib/dist/reflect/session-outcomes.d.ts.map +1 -0
  38. package/lib/dist/reflect/session-outcomes.js +110 -0
  39. package/lib/dist/reflect/session-outcomes.js.map +1 -0
  40. package/lib/dist/reflect/sweep.d.ts +11 -0
  41. package/lib/dist/reflect/sweep.d.ts.map +1 -1
  42. package/lib/dist/reflect/sweep.js +29 -0
  43. package/lib/dist/reflect/sweep.js.map +1 -1
  44. package/lib/dist/server/routes/claude.js +27 -0
  45. package/lib/dist/workflows/defaults/spec-implement-mixed.yaml +197 -0
  46. package/lib/node_modules/.package-lock.json +1 -1
  47. package/lib/package.json +1 -1
  48. package/package.json +1 -1
@@ -31,5 +31,5 @@ export declare const STEERING_TEXT_HAIKU: string;
31
31
  * haiku sessions get the prescriptive template; sonnet and frontier keep the
32
32
  * standard line.
33
33
  */
34
- export declare function buildSteeringNudge(cwd: string, env?: NodeJS.ProcessEnv): string | null;
34
+ export declare function buildSteeringNudge(cwd: string, env?: NodeJS.ProcessEnv, homedir?: string): string | null;
35
35
  //# sourceMappingURL=steering.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"steering.d.ts","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAI0C,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAIqC,CAAC;AAEtE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,IAAI,CAQf"}
1
+ {"version":3,"file":"steering.d.ts","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAKJ,CAAC;AAEvB;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAIqC,CAAC;AAEtE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAUf"}
@@ -50,15 +50,17 @@ exports.buildSteeringNudge = buildSteeringNudge;
50
50
  const fs = __importStar(require("fs"));
51
51
  const path = __importStar(require("path"));
52
52
  const model_context_1 = require("../mcp/model-context");
53
+ const runtime_settings_1 = require("../config/runtime-settings");
53
54
  /**
54
55
  * The one steering line injected per prompt. Kept short (~40 tokens) — it is
55
56
  * added to EVERY prompt in an initialized project, so brevity is the cost
56
57
  * ceiling. Wording is A/B-gated before default-on release (REQ-STEER-003).
57
58
  */
58
- exports.STEERING_TEXT = 'This project has a SpecShip code-graph index. For structure/flow questions ' +
59
- '("how does X work / reach Y", "who calls Z", architecture, impact), call ' +
60
- 'mcp__specship__specship_explore with the relevant symbol names FIRST — before ' +
61
- 'any Read/Grep — and treat the source it returns as already read.';
59
+ exports.STEERING_TEXT = 'This project has a SpecShip code-graph index. Before reading or editing ANY ' +
60
+ 'code for a task — understanding, implementing, fixing, refactoring — call ' +
61
+ 'mcp__specship__specship_explore with the relevant symbol/file names FIRST. ' +
62
+ 'Treat the source it returns as already read; use Read/Grep only for content ' +
63
+ 'it did not return.';
62
64
  /**
63
65
  * The haiku-tier template (LOWMODEL-DOC, REQ-LOWMODEL-002): small models
64
66
  * follow prescriptive templates far better than principles, and fan-out
@@ -77,8 +79,10 @@ exports.STEERING_TEXT_HAIKU = 'This project has a SpecShip index. For any code q
77
79
  * haiku sessions get the prescriptive template; sonnet and frontier keep the
78
80
  * standard line.
79
81
  */
80
- function buildSteeringNudge(cwd, env = process.env) {
81
- if (env.SPECSHIP_NO_STEERING === '1')
82
+ function buildSteeringNudge(cwd, env = process.env, homedir) {
83
+ // RUNSET-DOC: the opt-out resolves env > project .specship/settings.json >
84
+ // ~/.specship/settings.json, so a repo can silence steering durably.
85
+ if ((0, runtime_settings_1.resolveSetting)('SPECSHIP_NO_STEERING', cwd, env, homedir) === '1')
82
86
  return null;
83
87
  try {
84
88
  if (!fs.statSync(path.join(cwd, '.specship')).isDirectory())
@@ -87,6 +91,6 @@ function buildSteeringNudge(cwd, env = process.env) {
87
91
  catch {
88
92
  return null;
89
93
  }
90
- return (0, model_context_1.detectModelTier)(cwd, env) === 'haiku' ? exports.STEERING_TEXT_HAIKU : exports.STEERING_TEXT;
94
+ return (0, model_context_1.detectModelTier)(cwd, env, homedir) === 'haiku' ? exports.STEERING_TEXT_HAIKU : exports.STEERING_TEXT;
91
95
  }
92
96
  //# sourceMappingURL=steering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCH,gDAWC;AA9CD,uCAAyB;AACzB,2CAA6B;AAC7B,wDAAuD;AAEvD;;;;GAIG;AACU,QAAA,aAAa,GACxB,6EAA6E;IAC7E,2EAA2E;IAC3E,gFAAgF;IAChF,kEAAkE,CAAC;AAErE;;;;;GAKG;AACU,QAAA,mBAAmB,GAC9B,0EAA0E;IAC1E,gFAAgF;IAChF,iFAAiF;IACjF,mEAAmE,CAAC;AAEtE;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,GAAW,EACX,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,GAAG,CAAC,oBAAoB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAA,+BAAe,EAAC,GAAG,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,2BAAmB,CAAC,CAAC,CAAC,qBAAa,CAAC;AACrF,CAAC"}
1
+ {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCH,gDAcC;AAnDD,uCAAyB;AACzB,2CAA6B;AAC7B,wDAAuD;AACvD,iEAA4D;AAE5D;;;;GAIG;AACU,QAAA,aAAa,GACxB,8EAA8E;IAC9E,4EAA4E;IAC5E,6EAA6E;IAC7E,8EAA8E;IAC9E,oBAAoB,CAAC;AAEvB;;;;;GAKG;AACU,QAAA,mBAAmB,GAC9B,0EAA0E;IAC1E,gFAAgF;IAChF,iFAAiF;IACjF,mEAAmE,CAAC;AAEtE;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,GAAW,EACX,MAAyB,OAAO,CAAC,GAAG,EACpC,OAAgB;IAEhB,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,IAAA,iCAAc,EAAC,sBAAsB,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnF,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAA,+BAAe,EAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,2BAAmB,CAAC,CAAC,CAAC,qBAAa,CAAC;AAC9F,CAAC"}
@@ -1279,6 +1279,8 @@ function main() {
1279
1279
  .command('reflect [path]')
1280
1280
  .description('Mine ingested transcripts for self-improvement proposals (memory rules, skills, hooks)')
1281
1281
  .option('-j, --json', 'Output as JSON')
1282
+ .option('--capture', 'Capture a routine as a skill proposal: --title required, content on stdin (LEARN-DOC)')
1283
+ .option('--title <title>', 'Title for --capture')
1282
1284
  .action(async (pathArg, options) => {
1283
1285
  const projectPath = resolveProjectPath(pathArg);
1284
1286
  try {
@@ -1288,6 +1290,33 @@ function main() {
1288
1290
  }
1289
1291
  const { default: SpecShip } = await loadSpecShip();
1290
1292
  const cg = await SpecShip.open(projectPath);
1293
+ // Explicit capture door (LEARN-DOC, REQ-LEARN-002): crystallize a
1294
+ // distilled routine into a human-gated skill proposal. Content on
1295
+ // stdin so multi-line routines survive shell quoting.
1296
+ if (options.capture) {
1297
+ if (!options.title || !options.title.trim()) {
1298
+ error('--capture requires --title "<what this routine does>"');
1299
+ process.exit(1);
1300
+ }
1301
+ const chunks = [];
1302
+ for await (const c of process.stdin)
1303
+ chunks.push(c);
1304
+ const content = Buffer.concat(chunks).toString('utf-8').trim();
1305
+ if (!content) {
1306
+ error('--capture expects the routine content on stdin (pipe or heredoc)');
1307
+ process.exit(1);
1308
+ }
1309
+ const p = cg.reflectCapture({ title: options.title, content });
1310
+ if (options.json) {
1311
+ console.log(JSON.stringify(p, null, 2));
1312
+ }
1313
+ else {
1314
+ info(`Captured as proposal ${p.contentHash.slice(0, 12)} (${p.state}): ${p.title}`);
1315
+ info('Review and apply it from the dashboard Improvements page (preview-diff → confirm).');
1316
+ }
1317
+ cg.destroy();
1318
+ return;
1319
+ }
1291
1320
  const result = cg.reflectAnalyze();
1292
1321
  if (options.json) {
1293
1322
  console.log(JSON.stringify(result, null, 2));
@@ -2132,7 +2161,8 @@ function main() {
2132
2161
  .option('-l, --location <where>', 'Install location: "global" or "local". Default: prompt (local)')
2133
2162
  .option('-y, --yes', 'Non-interactive: defaults to --location=local, auto-allow on')
2134
2163
  .option('--no-permissions', 'Skip writing the auto-allow permissions list')
2135
- .option('--sdd', 'Also install the spec-driven-development governance tier (spec/authoring/review/design commands + the spec-author nudge hook). Off by default — a plain install provisions only the retrieval tier.')
2164
+ .option('--sdd', '(default) Install the spec-driven-development governance tier (spec/authoring/review/design commands + the spec-author nudge hook)')
2165
+ .option('--no-sdd', 'Skip the governance tier — retrieval-only install (the pre-0.18 default)')
2136
2166
  .option('--with-jira', 'Enable the optional JIRA integration (talks to your Atlassian instance; off by default — the core install is 100% local)')
2137
2167
  .option('--with-designer', 'Enable the optional Designer integration (EXPERIMENTAL — drives claude.ai/design via a debug Chrome session and may break without notice; off by default)')
2138
2168
  .option('--statusline', 'Wire the SpecShip status-line segment into Claude (skips the prompt; never overwrites an existing status line)')
@@ -2183,7 +2213,9 @@ function main() {
2183
2213
  target: opts.target,
2184
2214
  location: opts.location,
2185
2215
  autoAllow,
2186
- sdd: opts.sdd === true ? true : undefined,
2216
+ // SDD/governance is default-ON (INSTALL-WEDGE-DOC v2): commander's
2217
+ // --no-sdd sets opts.sdd=false; otherwise install the full surface.
2218
+ sdd: opts.sdd === false ? false : true,
2187
2219
  withJira: opts.withJira === true ? true : undefined,
2188
2220
  withDesigner: opts.withDesigner === true ? true : undefined,
2189
2221
  statusLine,