@specship/specship-win32-arm64 0.11.9 → 0.12.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 (175) hide show
  1. package/lib/dist/bin/specship.js +9 -60
  2. package/lib/dist/bin/specship.js.map +1 -1
  3. package/lib/dist/reflect/index.d.ts +1 -1
  4. package/lib/dist/reflect/index.d.ts.map +1 -1
  5. package/lib/dist/reflect/index.js +2 -1
  6. package/lib/dist/reflect/index.js.map +1 -1
  7. package/lib/dist/reflect/miner.d.ts +8 -0
  8. package/lib/dist/reflect/miner.d.ts.map +1 -1
  9. package/lib/dist/reflect/miner.js +64 -36
  10. package/lib/dist/reflect/miner.js.map +1 -1
  11. package/lib/dist/server/cli.js +5 -49
  12. package/lib/dist/server/routes/claude.js +13 -5
  13. package/lib/dist/server/server.js +17 -2
  14. package/lib/dist/server/ssr/md.mjs +83 -0
  15. package/lib/dist/server/ssr/render.mjs +564 -0
  16. package/lib/dist/server/ssr/routes.js +73 -0
  17. package/lib/dist/server/static-handler.js +30 -0
  18. package/lib/node_modules/.package-lock.json +1 -1
  19. package/lib/package.json +3 -3
  20. package/package.json +1 -1
  21. package/lib/dist/web/chunk-2AJCHB7P.js +0 -1
  22. package/lib/dist/web/chunk-2CPLUFCH.js +0 -2
  23. package/lib/dist/web/chunk-2I7L37NS.js +0 -1
  24. package/lib/dist/web/chunk-2IVSOVQZ.js +0 -1
  25. package/lib/dist/web/chunk-2NAWAJB5.js +0 -1
  26. package/lib/dist/web/chunk-2OJBIPE4.js +0 -1
  27. package/lib/dist/web/chunk-3E2WB6D5.js +0 -1
  28. package/lib/dist/web/chunk-3EBFYSCH.js +0 -2
  29. package/lib/dist/web/chunk-3QCQ4BXS.js +0 -1
  30. package/lib/dist/web/chunk-42XVAQ6I.js +0 -1
  31. package/lib/dist/web/chunk-4G7XU55L.js +0 -1
  32. package/lib/dist/web/chunk-4IMMPEYM.js +0 -1
  33. package/lib/dist/web/chunk-4TJQJPCZ.js +0 -1
  34. package/lib/dist/web/chunk-4WZIHTPC.js +0 -1
  35. package/lib/dist/web/chunk-4YVSYOSD.js +0 -1
  36. package/lib/dist/web/chunk-5BQIOYKW.js +0 -1
  37. package/lib/dist/web/chunk-5HGWHUJA.js +0 -1
  38. package/lib/dist/web/chunk-5NTGUSXJ.js +0 -1
  39. package/lib/dist/web/chunk-5Y244R4G.js +0 -1
  40. package/lib/dist/web/chunk-6RRDPT5Z.js +0 -1
  41. package/lib/dist/web/chunk-6VKB2ZWM.js +0 -1
  42. package/lib/dist/web/chunk-7656MA24.js +0 -1
  43. package/lib/dist/web/chunk-7DMFVTU4.js +0 -1
  44. package/lib/dist/web/chunk-7KWBINA7.js +0 -1
  45. package/lib/dist/web/chunk-7SMPKVEP.js +0 -1
  46. package/lib/dist/web/chunk-AHI5XEVX.js +0 -1
  47. package/lib/dist/web/chunk-AS2GV63A.js +0 -1
  48. package/lib/dist/web/chunk-AZJVTPLU.js +0 -1
  49. package/lib/dist/web/chunk-AZUUBUEJ.js +0 -1
  50. package/lib/dist/web/chunk-BLBRMCN2.js +0 -1
  51. package/lib/dist/web/chunk-BMIAXD2V.js +0 -2
  52. package/lib/dist/web/chunk-BPCJLNBS.js +0 -47
  53. package/lib/dist/web/chunk-BUXWEHIY.js +0 -1
  54. package/lib/dist/web/chunk-CGVC666W.js +0 -1
  55. package/lib/dist/web/chunk-DLQPZWSI.css +0 -1
  56. package/lib/dist/web/chunk-DOKZOFKM.js +0 -1
  57. package/lib/dist/web/chunk-DTWIJ3GJ.js +0 -1
  58. package/lib/dist/web/chunk-DYRFLPJA.js +0 -1
  59. package/lib/dist/web/chunk-E3J3CXR5.js +0 -1
  60. package/lib/dist/web/chunk-E73OX2P7.js +0 -1
  61. package/lib/dist/web/chunk-EAXRKDLV.js +0 -1
  62. package/lib/dist/web/chunk-EBKKDHYI.js +0 -1
  63. package/lib/dist/web/chunk-EE7V7Q5P.js +0 -1
  64. package/lib/dist/web/chunk-EKY2FUHU.js +0 -1
  65. package/lib/dist/web/chunk-EP6XOPXH.js +0 -1
  66. package/lib/dist/web/chunk-ESGDLJOJ.js +0 -1
  67. package/lib/dist/web/chunk-ETJG7NCY.js +0 -1
  68. package/lib/dist/web/chunk-EUUEFEDI.js +0 -1
  69. package/lib/dist/web/chunk-EXBUKHH2.js +0 -17
  70. package/lib/dist/web/chunk-FC3R7YHR.js +0 -4
  71. package/lib/dist/web/chunk-FGNZDHTL.js +0 -11
  72. package/lib/dist/web/chunk-FIJW2UNJ.js +0 -1
  73. package/lib/dist/web/chunk-FMV5PXRC.js +0 -5
  74. package/lib/dist/web/chunk-G7RXFHYO.js +0 -1
  75. package/lib/dist/web/chunk-G7VZT5KB.js +0 -3
  76. package/lib/dist/web/chunk-GRZYXPSO.js +0 -7
  77. package/lib/dist/web/chunk-GYGPS3AN.js +0 -1
  78. package/lib/dist/web/chunk-H7AF7YS4.js +0 -1
  79. package/lib/dist/web/chunk-HDZDQILN.js +0 -1
  80. package/lib/dist/web/chunk-HMK6UO6N.js +0 -1
  81. package/lib/dist/web/chunk-IHEE5NYJ.js +0 -1
  82. package/lib/dist/web/chunk-IOB4JJT4.js +0 -1
  83. package/lib/dist/web/chunk-ISNEBICW.js +0 -1
  84. package/lib/dist/web/chunk-J2GZVLHH.js +0 -1
  85. package/lib/dist/web/chunk-JGDK6YKG.js +0 -1
  86. package/lib/dist/web/chunk-JLOJCDIY.js +0 -1
  87. package/lib/dist/web/chunk-JTFXTIPE.js +0 -903
  88. package/lib/dist/web/chunk-K7UD24Z4.js +0 -1
  89. package/lib/dist/web/chunk-KYSTCHAH.js +0 -1
  90. package/lib/dist/web/chunk-LB6JPLX2.js +0 -1
  91. package/lib/dist/web/chunk-LNSVDHCI.js +0 -1
  92. package/lib/dist/web/chunk-LVGIY3SO.js +0 -1
  93. package/lib/dist/web/chunk-LXLHIHEN.js +0 -1
  94. package/lib/dist/web/chunk-M42QOYAE.js +0 -1
  95. package/lib/dist/web/chunk-ML5ULGHY.js +0 -1
  96. package/lib/dist/web/chunk-MNFTHCSJ.js +0 -1
  97. package/lib/dist/web/chunk-N6SS4G6S.js +0 -1
  98. package/lib/dist/web/chunk-NKPK3BR3.js +0 -1
  99. package/lib/dist/web/chunk-NTBJG6SJ.js +0 -1
  100. package/lib/dist/web/chunk-NUDB3Q2Y.js +0 -3
  101. package/lib/dist/web/chunk-OTQR5VFM.js +0 -1
  102. package/lib/dist/web/chunk-OXEF5E3E.js +0 -1
  103. package/lib/dist/web/chunk-P62EJGSF.js +0 -1
  104. package/lib/dist/web/chunk-PCW6R7OP.js +0 -1
  105. package/lib/dist/web/chunk-PGGJPDJG.js +0 -1
  106. package/lib/dist/web/chunk-POCVU4VK.js +0 -2
  107. package/lib/dist/web/chunk-PS6HRYQQ.js +0 -3
  108. package/lib/dist/web/chunk-PUYSJNJR.js +0 -1
  109. package/lib/dist/web/chunk-PZSU53SS.js +0 -1
  110. package/lib/dist/web/chunk-Q2RVFS45.js +0 -1
  111. package/lib/dist/web/chunk-Q7L6LLAK.js +0 -1
  112. package/lib/dist/web/chunk-QCMKJIWY.js +0 -1
  113. package/lib/dist/web/chunk-QH6CF3M3.js +0 -1
  114. package/lib/dist/web/chunk-QIZ65CGB.js +0 -1
  115. package/lib/dist/web/chunk-QPA2REUE.js +0 -1
  116. package/lib/dist/web/chunk-QQ5LD7PI.js +0 -1
  117. package/lib/dist/web/chunk-QR6L3KAC.js +0 -1
  118. package/lib/dist/web/chunk-R2DLK4HO.js +0 -1
  119. package/lib/dist/web/chunk-RD6TVPOT.js +0 -1
  120. package/lib/dist/web/chunk-RKY4EJYJ.js +0 -1
  121. package/lib/dist/web/chunk-RONYWVY7.js +0 -1
  122. package/lib/dist/web/chunk-RXKXYF2C.js +0 -1
  123. package/lib/dist/web/chunk-S5J5WQXB.js +0 -6
  124. package/lib/dist/web/chunk-SQPYSOV6.js +0 -1
  125. package/lib/dist/web/chunk-SWKJRNYY.js +0 -1
  126. package/lib/dist/web/chunk-SYGIPC2P.js +0 -4
  127. package/lib/dist/web/chunk-T7AZ65JP.js +0 -1
  128. package/lib/dist/web/chunk-TCZDVOHD.js +0 -1
  129. package/lib/dist/web/chunk-TPTITA3V.js +0 -1
  130. package/lib/dist/web/chunk-TR335633.js +0 -1
  131. package/lib/dist/web/chunk-TWVVIWKO.js +0 -1
  132. package/lib/dist/web/chunk-U67LRNER.js +0 -1
  133. package/lib/dist/web/chunk-UR5KDXPX.js +0 -1
  134. package/lib/dist/web/chunk-UR6O2GEH.js +0 -1
  135. package/lib/dist/web/chunk-USVLLFVR.js +0 -1
  136. package/lib/dist/web/chunk-UTNMGWTP.js +0 -1
  137. package/lib/dist/web/chunk-V74ZPP4B.js +0 -1
  138. package/lib/dist/web/chunk-VECWMHJP.js +0 -1
  139. package/lib/dist/web/chunk-VUACT35R.js +0 -3
  140. package/lib/dist/web/chunk-VZI7H4SZ.js +0 -1
  141. package/lib/dist/web/chunk-W5TEIONI.js +0 -2
  142. package/lib/dist/web/chunk-WB6YHOD4.js +0 -1
  143. package/lib/dist/web/chunk-WBJ5VEB5.js +0 -1
  144. package/lib/dist/web/chunk-WBT64AWV.js +0 -1
  145. package/lib/dist/web/chunk-WFXJIXZE.js +0 -4
  146. package/lib/dist/web/chunk-WTGYRH3Z.js +0 -298
  147. package/lib/dist/web/chunk-WXTCVDTP.js +0 -1
  148. package/lib/dist/web/chunk-XAUQEKZX.js +0 -1
  149. package/lib/dist/web/chunk-XCDHWLVH.js +0 -1
  150. package/lib/dist/web/chunk-XKG5X37F.js +0 -1
  151. package/lib/dist/web/chunk-Y3H6FFUZ.js +0 -1
  152. package/lib/dist/web/chunk-Y4F5ULGJ.js +0 -1
  153. package/lib/dist/web/chunk-YEGKAAEE.js +0 -1
  154. package/lib/dist/web/chunk-YM2KU57F.js +0 -1
  155. package/lib/dist/web/chunk-YRERBP6T.js +0 -1
  156. package/lib/dist/web/chunk-YV5LB22R.js +0 -1
  157. package/lib/dist/web/chunk-YWIRU745.js +0 -1
  158. package/lib/dist/web/chunk-ZLV4VCDG.js +0 -3
  159. package/lib/dist/web/chunk-ZTVI5KFF.js +0 -1
  160. package/lib/dist/web/favicon-16.png +0 -0
  161. package/lib/dist/web/favicon-180.png +0 -0
  162. package/lib/dist/web/favicon-32.png +0 -0
  163. package/lib/dist/web/favicon-512.png +0 -0
  164. package/lib/dist/web/favicon-small.svg +0 -15
  165. package/lib/dist/web/favicon.ico +0 -0
  166. package/lib/dist/web/favicon.svg +0 -20
  167. package/lib/dist/web/icon-192.png +0 -0
  168. package/lib/dist/web/icon-512.png +0 -0
  169. package/lib/dist/web/index.html +0 -146
  170. package/lib/dist/web/main-ESADRXN2.css +0 -1
  171. package/lib/dist/web/main-JT2RR3JS.js +0 -1
  172. package/lib/dist/web/manifest.webmanifest +0 -15
  173. package/lib/dist/web/media/codicon-LN6W7LCM.ttf +0 -0
  174. package/lib/dist/web/sw.js +0 -69
  175. /package/lib/dist/{web/styles-ATJUD7TT.css → server/ssr/public/app.css} +0 -0
@@ -7,7 +7,7 @@
7
7
  * `specship reflect` CLI, and the dashboard's Improvements list.
8
8
  */
9
9
  export * from './types';
10
- export { mineProposals } from './miner';
10
+ export { mineProposals, projectPathForms } from './miner';
11
11
  export { buildProposal, learningMarkers, memoryNoteMarker } from './targets';
12
12
  export { previewProposal, applyProposal, undoProposal, lineDiff } from './apply';
13
13
  export { ReflectStore } from './store';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reflect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reflect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
@@ -22,10 +22,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
22
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.sweep = exports.analyze = exports.ReflectStore = exports.lineDiff = exports.undoProposal = exports.applyProposal = exports.previewProposal = exports.memoryNoteMarker = exports.learningMarkers = exports.buildProposal = exports.mineProposals = void 0;
25
+ exports.sweep = exports.analyze = exports.ReflectStore = exports.lineDiff = exports.undoProposal = exports.applyProposal = exports.previewProposal = exports.memoryNoteMarker = exports.learningMarkers = exports.buildProposal = exports.projectPathForms = exports.mineProposals = void 0;
26
26
  __exportStar(require("./types"), exports);
27
27
  var miner_1 = require("./miner");
28
28
  Object.defineProperty(exports, "mineProposals", { enumerable: true, get: function () { return miner_1.mineProposals; } });
29
+ Object.defineProperty(exports, "projectPathForms", { enumerable: true, get: function () { return miner_1.projectPathForms; } });
29
30
  var targets_1 = require("./targets");
30
31
  Object.defineProperty(exports, "buildProposal", { enumerable: true, get: function () { return targets_1.buildProposal; } });
31
32
  Object.defineProperty(exports, "learningMarkers", { enumerable: true, get: function () { return targets_1.learningMarkers; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reflect/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AACtB,qCAA6E;AAApE,wGAAA,aAAa,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AACzD,iCAAiF;AAAxE,wGAAA,eAAe,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAC/D,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,iCAAyC;AAAhC,gGAAA,OAAO,OAAA;AAAE,8FAAA,KAAK,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reflect/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,iCAA0D;AAAjD,sGAAA,aAAa,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AACxC,qCAA6E;AAApE,wGAAA,aAAa,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AACzD,iCAAiF;AAAxE,wGAAA,eAAe,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAC/D,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,iCAAyC;AAAhC,gGAAA,OAAO,OAAA;AAAE,8FAAA,KAAK,OAAA"}
@@ -16,6 +16,14 @@
16
16
  */
17
17
  import { SqliteDatabase } from '../db/sqlite-adapter';
18
18
  import { Proposal, ReflectContext } from './types';
19
+ /**
20
+ * The two forms a project's path can take in `claude_sessions.project_path`
21
+ * (REQ-REFLECT-008): the real absolute path, and the mangled form the ingest
22
+ * stores — Claude Code slug-encodes every non-alphanumeric character to '-',
23
+ * and the ingest decodes every '-' back to '/', so round-tripping the real
24
+ * path reproduces the stored value (`/a/b-c` → `/a/b/c`).
25
+ */
26
+ export declare function projectPathForms(projectRoot: string): [string, string];
19
27
  /** Mine all rules. Pure read — never writes the DB or disk. */
20
28
  export declare function mineProposals(db: SqliteDatabase, ctx: ReflectContext): Proposal[];
21
29
  //# sourceMappingURL=miner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"miner.d.ts","sourceRoot":"","sources":["../../src/reflect/miner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAkCnD,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAG,QAAQ,EAAE,CAkBjF"}
1
+ {"version":3,"file":"miner.d.ts","sourceRoot":"","sources":["../../src/reflect/miner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAuBnD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAItE;AAsBD,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAG,QAAQ,EAAE,CAmBjF"}
@@ -16,6 +16,7 @@
16
16
  * caller can render the empty state rather than erroring (REQ-REFLECT-001.A2).
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.projectPathForms = projectPathForms;
19
20
  exports.mineProposals = mineProposals;
20
21
  const targets_1 = require("./targets");
21
22
  /** Tuning knobs — thresholds above which a pattern is worth proposing. */
@@ -37,6 +38,25 @@ const THRESHOLDS = {
37
38
  };
38
39
  /** Per-rule cap so a noisy corpus can't flood the Improvements list. */
39
40
  const PER_RULE_LIMIT = 5;
41
+ /**
42
+ * The two forms a project's path can take in `claude_sessions.project_path`
43
+ * (REQ-REFLECT-008): the real absolute path, and the mangled form the ingest
44
+ * stores — Claude Code slug-encodes every non-alphanumeric character to '-',
45
+ * and the ingest decodes every '-' back to '/', so round-tripping the real
46
+ * path reproduces the stored value (`/a/b-c` → `/a/b/c`).
47
+ */
48
+ function projectPathForms(projectRoot) {
49
+ const real = projectRoot.replace(/\/+$/, '') || projectRoot;
50
+ const mangled = real.replace(/[^A-Za-z0-9]/g, '/');
51
+ return [real, mangled];
52
+ }
53
+ /**
54
+ * SQL predicate restricting a claude_* row to the target project's own
55
+ * sessions (REQ-REFLECT-008) — the analytics tables span every project, and a
56
+ * pattern from another project's transcripts must never become a proposal
57
+ * here. Binds the two `projectPathForms` values, in order.
58
+ */
59
+ const IN_PROJECT = `session_id IN (SELECT id FROM claude_sessions WHERE project_path IN (?, ?))`;
40
60
  function tableExists(db, name) {
41
61
  try {
42
62
  const row = db
@@ -53,19 +73,20 @@ function mineProposals(db, ctx) {
53
73
  if (!tableExists(db, 'claude_tool_calls') || !tableExists(db, 'claude_prompts')) {
54
74
  return [];
55
75
  }
76
+ const forms = projectPathForms(ctx.projectRoot);
56
77
  const out = [];
57
- out.push(...ruleRepeatedReads(db, ctx));
58
- out.push(...ruleGrepHabit(db, ctx));
59
- out.push(...ruleRepeatedPrompts(db, ctx));
60
- out.push(...ruleRepeatedCommands(db, ctx));
78
+ out.push(...ruleRepeatedReads(db, ctx, forms));
79
+ out.push(...ruleGrepHabit(db, ctx, forms));
80
+ out.push(...ruleRepeatedPrompts(db, ctx, forms));
81
+ out.push(...ruleRepeatedCommands(db, ctx, forms));
61
82
  // Round 2 detectors.
62
- out.push(...ruleDestructiveCommands(db, ctx));
63
- out.push(...ruleEditHotspot(db, ctx));
64
- out.push(...ruleRecurringCorrection(db, ctx));
83
+ out.push(...ruleDestructiveCommands(db, ctx, forms));
84
+ out.push(...ruleEditHotspot(db, ctx, forms));
85
+ out.push(...ruleRecurringCorrection(db, ctx, forms));
65
86
  // Round 3 detectors.
66
- out.push(...ruleSpecshipCold(db, ctx));
67
- out.push(...ruleHeavyOutput(db, ctx));
68
- out.push(...ruleReferenceDoc(db, ctx));
87
+ out.push(...ruleSpecshipCold(db, ctx, forms));
88
+ out.push(...ruleHeavyOutput(db, ctx, forms));
89
+ out.push(...ruleReferenceDoc(db, ctx, forms));
69
90
  return out;
70
91
  }
71
92
  /**
@@ -73,16 +94,16 @@ function mineProposals(db, ctx) {
73
94
  * in a single session. A project-specific rule steering it to specship_explore
74
95
  * for that area is the durable fix.
75
96
  */
76
- function ruleRepeatedReads(db, ctx) {
97
+ function ruleRepeatedReads(db, ctx, forms) {
77
98
  const rows = db
78
99
  .prepare(`SELECT session_id, input_summary AS file, COUNT(*) AS n
79
100
  FROM claude_tool_calls
80
- WHERE tool_name = 'Read' AND input_summary != ''
101
+ WHERE tool_name = 'Read' AND input_summary != '' AND ${IN_PROJECT}
81
102
  GROUP BY session_id, input_summary
82
103
  HAVING n >= ?
83
104
  ORDER BY n DESC
84
105
  LIMIT ?`)
85
- .all(THRESHOLDS.repeatedReadsPerSession, PER_RULE_LIMIT);
106
+ .all(...forms, THRESHOLDS.repeatedReadsPerSession, PER_RULE_LIMIT);
86
107
  return rows.map((r) => {
87
108
  const base = r.file.split('/').pop() || r.file;
88
109
  return (0, targets_1.buildProposal)(ctx, {
@@ -105,22 +126,24 @@ function ruleRepeatedReads(db, ctx) {
105
126
  * R2 → memory_rule (portable ~/.claude/memory): heavy grep/find usage is a
106
127
  * cross-project habit, so the learning is portable, not repo-specific.
107
128
  */
108
- function ruleGrepHabit(db, ctx) {
129
+ function ruleGrepHabit(db, ctx, forms) {
109
130
  const row = db
110
131
  .prepare(`SELECT COUNT(*) AS n, COUNT(DISTINCT session_id) AS s
111
132
  FROM claude_tool_calls
112
133
  WHERE tool_name = 'Bash'
113
134
  AND (input_summary LIKE 'grep%' OR input_summary LIKE '%grep %'
114
- OR input_summary LIKE 'find %' OR input_summary LIKE 'rg %')`)
115
- .get();
135
+ OR input_summary LIKE 'find %' OR input_summary LIKE 'rg %')
136
+ AND ${IN_PROJECT}`)
137
+ .get(...forms);
116
138
  if (!row || row.n < THRESHOLDS.grepHabitTotal)
117
139
  return [];
118
140
  const sessRows = db
119
141
  .prepare(`SELECT DISTINCT session_id FROM claude_tool_calls
120
142
  WHERE tool_name = 'Bash' AND (input_summary LIKE '%grep %' OR input_summary LIKE 'grep%'
121
143
  OR input_summary LIKE 'find %' OR input_summary LIKE 'rg %')
144
+ AND ${IN_PROJECT}
122
145
  LIMIT 8`)
123
- .all();
146
+ .all(...forms);
124
147
  return [
125
148
  (0, targets_1.buildProposal)(ctx, {
126
149
  type: 'memory_rule',
@@ -146,15 +169,16 @@ function normalizePrompt(t) {
146
169
  * R3 → skill (commands/ss-<name>.md): the user typed essentially the same ask
147
170
  * many times. A reusable slash command captures the routine.
148
171
  */
149
- function ruleRepeatedPrompts(db, ctx) {
172
+ function ruleRepeatedPrompts(db, ctx, forms) {
150
173
  const rows = db
151
174
  .prepare(`SELECT id, text FROM claude_prompts
152
175
  WHERE text IS NOT NULL AND length(text) BETWEEN 12 AND 200
153
176
  AND text NOT LIKE '<%' AND text NOT LIKE '%<command-name>%'
154
177
  AND is_sidechain = 0
178
+ AND ${IN_PROJECT}
155
179
  ORDER BY ts DESC
156
180
  LIMIT 4000`)
157
- .all();
181
+ .all(...forms);
158
182
  const groups = new Map();
159
183
  for (const r of rows) {
160
184
  const key = normalizePrompt(r.text);
@@ -188,7 +212,7 @@ function ruleRepeatedPrompts(db, ctx) {
188
212
  * R4 → hook (.claude/settings.json): the agent ran the same shell command after
189
213
  * edits across multiple sessions. A PostToolUse hook automates the manual step.
190
214
  */
191
- function ruleRepeatedCommands(db, ctx) {
215
+ function ruleRepeatedCommands(db, ctx, forms) {
192
216
  const rows = db
193
217
  .prepare(`SELECT input_summary AS cmd, COUNT(*) AS n, COUNT(DISTINCT session_id) AS s,
194
218
  GROUP_CONCAT(DISTINCT session_id) AS sessions
@@ -197,11 +221,12 @@ function ruleRepeatedCommands(db, ctx) {
197
221
  AND input_summary NOT LIKE 'grep%' AND input_summary NOT LIKE '%grep %'
198
222
  AND input_summary NOT LIKE 'find %' AND input_summary NOT LIKE 'cd %'
199
223
  AND input_summary NOT LIKE 'ls%' AND input_summary NOT LIKE 'cat %'
224
+ AND ${IN_PROJECT}
200
225
  GROUP BY input_summary
201
226
  HAVING s >= ? AND n >= ?
202
227
  ORDER BY n DESC
203
228
  LIMIT ?`)
204
- .all(THRESHOLDS.repeatedCmdSessions, THRESHOLDS.repeatedCmdTotal, PER_RULE_LIMIT);
229
+ .all(...forms, THRESHOLDS.repeatedCmdSessions, THRESHOLDS.repeatedCmdTotal, PER_RULE_LIMIT);
205
230
  return rows.map((r) => (0, targets_1.buildProposal)(ctx, {
206
231
  type: 'hook',
207
232
  severity: 'info',
@@ -231,10 +256,10 @@ const DESTRUCTIVE = [
231
256
  * deliberately propose a *rule* rather than auto-generating a fragile guard
232
257
  * script (a guard-hook variant is a future detector).
233
258
  */
234
- function ruleDestructiveCommands(db, ctx) {
259
+ function ruleDestructiveCommands(db, ctx, forms) {
235
260
  const rows = db
236
- .prepare(`SELECT session_id, input_summary AS cmd FROM claude_tool_calls WHERE tool_name = 'Bash' AND input_summary != ''`)
237
- .all();
261
+ .prepare(`SELECT session_id, input_summary AS cmd FROM claude_tool_calls WHERE tool_name = 'Bash' AND input_summary != '' AND ${IN_PROJECT}`)
262
+ .all(...forms);
238
263
  const buckets = new Map();
239
264
  for (const r of rows) {
240
265
  for (const d of DESTRUCTIVE) {
@@ -273,17 +298,17 @@ function ruleDestructiveCommands(db, ctx) {
273
298
  * sessions — a hotspot whose contract is worth documenting so future edits
274
299
  * don't relearn it from scratch.
275
300
  */
276
- function ruleEditHotspot(db, ctx) {
301
+ function ruleEditHotspot(db, ctx, forms) {
277
302
  const rows = db
278
303
  .prepare(`SELECT input_summary AS file, COUNT(*) AS n, COUNT(DISTINCT session_id) AS s,
279
304
  GROUP_CONCAT(DISTINCT session_id) AS sessions
280
305
  FROM claude_tool_calls
281
- WHERE tool_name IN ('Edit', 'Write', 'MultiEdit') AND input_summary != ''
306
+ WHERE tool_name IN ('Edit', 'Write', 'MultiEdit') AND input_summary != '' AND ${IN_PROJECT}
282
307
  GROUP BY input_summary
283
308
  HAVING n >= ? AND s >= ?
284
309
  ORDER BY n DESC
285
310
  LIMIT ?`)
286
- .all(THRESHOLDS.editHotspotTotal, THRESHOLDS.editHotspotSessions, PER_RULE_LIMIT);
311
+ .all(...forms, THRESHOLDS.editHotspotTotal, THRESHOLDS.editHotspotSessions, PER_RULE_LIMIT);
287
312
  return rows.map((r) => {
288
313
  const base = r.file.split('/').pop() || r.file;
289
314
  return (0, targets_1.buildProposal)(ctx, {
@@ -309,15 +334,16 @@ const CORRECTION_CUE = /^(no\b|don'?t\b|do not\b|never\b|always\b|stop\b|instead
309
334
  * corrective instruction. That's a durable preference worth recording so it
310
335
  * doesn't have to be repeated — the core Hermes "learn from corrections" idea.
311
336
  */
312
- function ruleRecurringCorrection(db, ctx) {
337
+ function ruleRecurringCorrection(db, ctx, forms) {
313
338
  const rows = db
314
339
  .prepare(`SELECT id, text FROM claude_prompts
315
340
  WHERE text IS NOT NULL AND length(text) BETWEEN 12 AND 200
316
341
  AND text NOT LIKE '<%' AND text NOT LIKE '%<command-name>%'
317
342
  AND is_sidechain = 0
343
+ AND ${IN_PROJECT}
318
344
  ORDER BY ts DESC
319
345
  LIMIT 4000`)
320
- .all();
346
+ .all(...forms);
321
347
  const groups = new Map();
322
348
  for (const r of rows) {
323
349
  const trimmed = r.text.trim();
@@ -355,7 +381,7 @@ function ruleRecurringCorrection(db, ctx) {
355
381
  * portable habit-note to query it first is the durable fix. Uses the
356
382
  * `is_specship` classification on tool calls.
357
383
  */
358
- function ruleSpecshipCold(db, ctx) {
384
+ function ruleSpecshipCold(db, ctx, forms) {
359
385
  const rows = db
360
386
  .prepare(`SELECT session_id,
361
387
  SUM(CASE WHEN tool_name IN ('Read','Grep')
@@ -364,9 +390,10 @@ function ruleSpecshipCold(db, ctx) {
364
390
  THEN 1 ELSE 0 END) AS reads,
365
391
  SUM(is_specship) AS ss
366
392
  FROM claude_tool_calls
393
+ WHERE ${IN_PROJECT}
367
394
  GROUP BY session_id
368
395
  HAVING reads >= ? AND ss = 0`)
369
- .all(THRESHOLDS.specshipColdReadMin);
396
+ .all(...forms, THRESHOLDS.specshipColdReadMin);
370
397
  if (rows.length < THRESHOLDS.specshipColdSessions)
371
398
  return [];
372
399
  const totalReads = rows.reduce((a, r) => a + r.reads, 0);
@@ -392,17 +419,17 @@ function ruleSpecshipCold(db, ctx) {
392
419
  * into context, repeatedly. Scoping its output (or using a structural query) is
393
420
  * the durable fix. Uses `result_length`.
394
421
  */
395
- function ruleHeavyOutput(db, ctx) {
422
+ function ruleHeavyOutput(db, ctx, forms) {
396
423
  const rows = db
397
424
  .prepare(`SELECT input_summary AS cmd, COUNT(*) AS n, MAX(result_length) AS maxlen,
398
425
  GROUP_CONCAT(DISTINCT session_id) AS sessions
399
426
  FROM claude_tool_calls
400
- WHERE tool_name = 'Bash' AND input_summary != '' AND result_length > ?
427
+ WHERE tool_name = 'Bash' AND input_summary != '' AND result_length > ? AND ${IN_PROJECT}
401
428
  GROUP BY input_summary
402
429
  HAVING n >= ?
403
430
  ORDER BY maxlen DESC
404
431
  LIMIT ?`)
405
- .all(THRESHOLDS.heavyOutputBytes, THRESHOLDS.heavyOutputMin, PER_RULE_LIMIT);
432
+ .all(THRESHOLDS.heavyOutputBytes, ...forms, THRESHOLDS.heavyOutputMin, PER_RULE_LIMIT);
406
433
  return rows.map((r) => (0, targets_1.buildProposal)(ctx, {
407
434
  type: 'memory_rule',
408
435
  scope: 'project',
@@ -424,7 +451,7 @@ function ruleHeavyOutput(db, ctx) {
424
451
  * from CLAUDE.md keeps it in context. Distinct from R1 (in-session re-reads of
425
452
  * any file) — this keys on cross-session breadth of a *doc* file.
426
453
  */
427
- function ruleReferenceDoc(db, ctx) {
454
+ function ruleReferenceDoc(db, ctx, forms) {
428
455
  const rows = db
429
456
  .prepare(`SELECT input_summary AS file, COUNT(DISTINCT session_id) AS s,
430
457
  GROUP_CONCAT(DISTINCT session_id) AS sessions
@@ -433,11 +460,12 @@ function ruleReferenceDoc(db, ctx) {
433
460
  AND (input_summary LIKE '%.md' OR input_summary LIKE '%.mdx'
434
461
  OR input_summary LIKE '%.txt' OR input_summary LIKE '%.rst'
435
462
  OR input_summary LIKE '%.adoc')
463
+ AND ${IN_PROJECT}
436
464
  GROUP BY input_summary
437
465
  HAVING s >= ?
438
466
  ORDER BY s DESC
439
467
  LIMIT ?`)
440
- .all(THRESHOLDS.refDocSessions, PER_RULE_LIMIT);
468
+ .all(...forms, THRESHOLDS.refDocSessions, PER_RULE_LIMIT);
441
469
  return rows.map((r) => {
442
470
  const base = r.file.split('/').pop() || r.file;
443
471
  return (0, targets_1.buildProposal)(ctx, {
@@ -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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"}
@@ -11,9 +11,6 @@
11
11
  * The JSONL ingest watcher is started inside `createServer()` by default —
12
12
  * pass `--no-ingest` to disable.
13
13
  */
14
- import path from 'node:path';
15
- import { existsSync } from 'node:fs';
16
- import { fileURLToPath } from 'node:url';
17
14
  import { spawn } from 'node:child_process';
18
15
  import { createServer } from './server.js';
19
16
  function parseArgs() {
@@ -64,45 +61,6 @@ Options:
64
61
  }
65
62
  return args;
66
63
  }
67
- /**
68
- * Locate the built Angular UI. Tries (in order):
69
- * 1. Explicit --web-dir / env var
70
- * 2. Sibling `public/web/` next to the running script (production layout)
71
- * 3. Sibling `../web-ng/dist/web-ng/browser/` (monorepo dev layout)
72
- * 4. Walk up looking for `packages/web-ng/dist/web-ng/browser/`
73
- * Returns null when nothing is found — the server then runs API-only.
74
- */
75
- function locateWebDir(explicit) {
76
- const envDir = process.env.SPECSHIP_WEB_DIR ?? process.env.SPECSHIP_WEB_DIR;
77
- const candidates = [];
78
- if (explicit)
79
- candidates.push(path.resolve(explicit));
80
- if (envDir)
81
- candidates.push(path.resolve(envDir));
82
- // __dirname equivalent in ESM
83
- const here = path.dirname(fileURLToPath(import.meta.url));
84
- // Production layout: <pkg>/dist/cli.js, UI shipped at <pkg>/public/web/
85
- candidates.push(path.resolve(here, '..', 'public', 'web'));
86
- candidates.push(path.resolve(here, '..', '..', 'public', 'web'));
87
- // Monorepo dev layout: packages/server/dist/cli.js → packages/web-ng/dist/web-ng/browser
88
- candidates.push(path.resolve(here, '..', '..', 'web-ng', 'dist', 'web-ng', 'browser'));
89
- candidates.push(path.resolve(here, '..', '..', '..', 'web-ng', 'dist', 'web-ng', 'browser'));
90
- // Walk up from cwd looking for the monorepo layout (handy when run via npx
91
- // inside a checkout).
92
- let cur = process.cwd();
93
- for (let depth = 0; depth < 6; depth++) {
94
- candidates.push(path.join(cur, 'packages', 'web-ng', 'dist', 'web-ng', 'browser'));
95
- const parent = path.dirname(cur);
96
- if (parent === cur)
97
- break;
98
- cur = parent;
99
- }
100
- for (const c of candidates) {
101
- if (existsSync(path.join(c, 'index.html')))
102
- return c;
103
- }
104
- return null;
105
- }
106
64
  function tryOpenInBrowser(url) {
107
65
  const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
108
66
  try {
@@ -114,26 +72,24 @@ function tryOpenInBrowser(url) {
114
72
  }
115
73
  async function main() {
116
74
  const args = parseArgs();
117
- const webDir = args.noWeb ? null : locateWebDir(args.webDir);
75
+ const serveUi = !args.noWeb;
118
76
  const handle = await createServer({
119
77
  projectRoot: args.projectRoot ?? undefined,
120
78
  host: args.host,
121
79
  port: args.port,
122
80
  ingest: args.ingest,
123
81
  verbose: args.verbose,
124
- webDir,
82
+ webDir: null,
83
+ ssr: serveUi,
125
84
  });
126
85
  console.error(`[specship-desktop] listening on ${handle.url}`);
127
86
  if (args.projectRoot) {
128
87
  console.error(`[specship-desktop] project: ${args.projectRoot}`);
129
88
  }
130
89
  else {
131
- console.error(`[specship-desktop] project: (none — pick one in the desktop UI)`);
90
+ console.error(`[specship-desktop] project: (none — pick one in the dashboard)`);
132
91
  }
133
- if (webDir)
134
- console.error(`[specship-desktop] UI: ${webDir}`);
135
- else
136
- console.error(`[specship-desktop] UI: (none — running headless)`);
92
+ console.error(`[specship-desktop] UI: ${serveUi ? handle.url + '/ (server-rendered)' : '(none — running headless)'}`);
137
93
  if (args.ingest)
138
94
  console.error(`[specship-desktop] Claude Code transcript ingest active`);
139
95
  if (args.open)
@@ -819,17 +819,24 @@ export async function registerClaudeRoutes(app) {
819
819
  return;
820
820
  const db = getDb(cg);
821
821
  const tips = [];
822
+ // The claude_* tables span every project's sessions; tips for the primary
823
+ // project must cite only its own (REQ-DASHINT-006). Sessions store the
824
+ // project path in the mangled slug round-trip form, so match both it and
825
+ // the real path.
826
+ const realRoot = (cg.getProjectRoot ? cg.getProjectRoot() : '').replace(/\/+$/, '');
827
+ const mangledRoot = realRoot.replace(/[^A-Za-z0-9]/g, '/');
828
+ const inProject = `session_id IN (SELECT id FROM claude_sessions WHERE project_path IN (?, ?))`;
822
829
  // Rule 1: "you read X N times" — same file path Read more than 10 times in
823
830
  // a single session.
824
831
  const wastefulReads = db.prepare(`
825
832
  SELECT session_id, input_summary as file, COUNT(*) as n
826
833
  FROM claude_tool_calls
827
- WHERE tool_name = 'Read' AND input_summary != ''
834
+ WHERE tool_name = 'Read' AND input_summary != '' AND ${inProject}
828
835
  GROUP BY session_id, input_summary
829
836
  HAVING n >= 10
830
837
  ORDER BY n DESC
831
838
  LIMIT 5
832
- `).all();
839
+ `).all(realRoot, mangledRoot);
833
840
  for (const r of wastefulReads) {
834
841
  tips.push({
835
842
  id: 'wasteful_reads:' + r.session_id + ':' + r.file,
@@ -846,10 +853,10 @@ export async function registerClaudeRoutes(app) {
846
853
  const heavyResults = db.prepare(`
847
854
  SELECT id, session_id, tool_name, input_summary, result_length
848
855
  FROM claude_tool_calls
849
- WHERE result_length > 50000
856
+ WHERE result_length > 50000 AND ${inProject}
850
857
  ORDER BY result_length DESC
851
858
  LIMIT 5
852
- `).all();
859
+ `).all(realRoot, mangledRoot);
853
860
  for (const r of heavyResults) {
854
861
  tips.push({
855
862
  id: 'heavy_result:' + r.id,
@@ -868,9 +875,10 @@ export async function registerClaudeRoutes(app) {
868
875
  FROM claude_sessions s
869
876
  WHERE s.prompt_count >= 10
870
877
  AND (s.total_input_tokens + s.total_cache_creation_tokens + s.total_cache_read_tokens) > 0
878
+ AND s.project_path IN (?, ?)
871
879
  ORDER BY (CAST(s.total_cache_read_tokens AS REAL) / (s.total_input_tokens + s.total_cache_creation_tokens + s.total_cache_read_tokens)) ASC
872
880
  LIMIT 3
873
- `).all();
881
+ `).all(realRoot, mangledRoot);
874
882
  for (const r of lowCache) {
875
883
  const total = r.ti + r.cw + r.cr;
876
884
  const rate = total > 0 ? r.cr / total : 0;
@@ -20,7 +20,7 @@ import { startWatcher, primaryProjectMatcher } from './ingest/index.js';
20
20
  import { backfillDisplaced } from './ingest/impact-backfill.js';
21
21
  import { recostUnpricedPrompts } from './ingest/pricing-backfill.js';
22
22
  import { ProjectRegistry } from './project-registry.js';
23
- import { makeStaticHandler } from './static-handler.js';
23
+ import { makeStaticHandler, isAssetPath } from './static-handler.js';
24
24
  import { registerGraphRoutes } from './routes/graph.js';
25
25
  import { registerSpecRoutes } from './routes/spec.js';
26
26
  import { registerWorkflowRoutes } from './routes/workflow.js';
@@ -193,6 +193,14 @@ export async function createServer(options) {
193
193
  await registerMaintainabilityRoutes(app);
194
194
  await registerDomainRoutes(app);
195
195
  await registerChatRoutes(app);
196
+ // SSR dashboard (DASH-LEAN-DOC / REQ-DASHLEAN-004): explicit page routes
197
+ // rendered in-process from the /api handlers above (via app.inject), plus the
198
+ // dashboard's static assets. Registered AFTER /api and BEFORE the SPA
199
+ // fallback so the explicit page routes win.
200
+ if (options.ssr) {
201
+ const { registerSsrRoutes } = await import('./ssr/routes.js');
202
+ await registerSsrRoutes(app);
203
+ }
196
204
  // Optional: serve the built Angular UI from `webDir` and fall back to
197
205
  // index.html for client-side routes. Must register AFTER the /api/*
198
206
  // routes so they take precedence over the SPA wildcard.
@@ -217,7 +225,10 @@ export async function createServer(options) {
217
225
  // 2. Fall through to index.html for any other GET so Angular's
218
226
  // client-side router can take over (`/memory`, `/graph`, …).
219
227
  // Non-GET methods and `/api/*` paths still 404 cleanly so the UI
220
- // can surface them.
228
+ // can surface them. A MISSING asset path (e.g. a stale build's old
229
+ // content-hashed bundle) must also 404, never receive the shell —
230
+ // HTML under an asset URL poisons the offline service worker's cache
231
+ // (REQ-OFFLINE-005).
221
232
  app.setNotFoundHandler((request, reply) => {
222
233
  if (request.method !== 'GET') {
223
234
  reply.code(404).send({ error: 'not found' });
@@ -232,6 +243,10 @@ export async function createServer(options) {
232
243
  reply.code(200).type(hit.contentType).send(hit.body);
233
244
  return;
234
245
  }
246
+ if (isAssetPath(request.url)) {
247
+ reply.code(404).send({ error: 'not found' });
248
+ return;
249
+ }
235
250
  reply.code(200).type('text/html').send(cachedIndex);
236
251
  });
237
252
  if (verbose)