@productbrain/cli 0.1.0-beta.108 → 0.1.0-beta.109

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 (247) hide show
  1. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  2. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  3. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  4. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  5. package/dist/__tests__/constants.test.js +6 -1
  6. package/dist/__tests__/constants.test.js.map +1 -1
  7. package/dist/__tests__/envelope-contract.test.js +29 -3
  8. package/dist/__tests__/envelope-contract.test.js.map +1 -1
  9. package/dist/__tests__/errors.test.js +1 -0
  10. package/dist/__tests__/errors.test.js.map +1 -1
  11. package/dist/__tests__/handshake-preview.test.js +501 -1
  12. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  13. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  14. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  15. package/dist/__tests__/handshake.e2e.test.js +257 -0
  16. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  17. package/dist/__tests__/handshake.test.js +251 -1
  18. package/dist/__tests__/handshake.test.js.map +1 -1
  19. package/dist/__tests__/manifest.test.js +118 -1
  20. package/dist/__tests__/manifest.test.js.map +1 -1
  21. package/dist/__tests__/orient.test.js +65 -24
  22. package/dist/__tests__/orient.test.js.map +1 -1
  23. package/dist/__tests__/perimeter.test.d.ts +2 -0
  24. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  25. package/dist/__tests__/perimeter.test.js +143 -0
  26. package/dist/__tests__/perimeter.test.js.map +1 -0
  27. package/dist/__tests__/promote.test.js +2 -2
  28. package/dist/__tests__/promote.test.js.map +1 -1
  29. package/dist/__tests__/setup-ingest.test.js +16 -0
  30. package/dist/__tests__/setup-ingest.test.js.map +1 -1
  31. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  32. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  33. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  34. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  35. package/dist/__tests__/update-check.test.d.ts +2 -0
  36. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  37. package/dist/__tests__/update-check.test.js +56 -0
  38. package/dist/__tests__/update-check.test.js.map +1 -0
  39. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  40. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  41. package/dist/__tests__/upgrade-runner.test.js +42 -0
  42. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  43. package/dist/__tests__/vocabulary-leak.test.d.ts +25 -0
  44. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  45. package/dist/__tests__/vocabulary-leak.test.js +379 -0
  46. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  47. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  48. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  49. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  50. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  51. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  52. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  53. package/dist/commands/__tests__/setup-state.test.js +194 -0
  54. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  55. package/dist/commands/admin/seed.d.ts +32 -2
  56. package/dist/commands/admin/seed.d.ts.map +1 -1
  57. package/dist/commands/admin/seed.js +279 -33
  58. package/dist/commands/admin/seed.js.map +1 -1
  59. package/dist/commands/admin/seed.test.js +7 -0
  60. package/dist/commands/admin/seed.test.js.map +1 -1
  61. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  62. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  63. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  64. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  65. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  66. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  67. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  68. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  69. package/dist/commands/authority-domains.d.ts +7 -1
  70. package/dist/commands/authority-domains.d.ts.map +1 -1
  71. package/dist/commands/authority-domains.js +17 -3
  72. package/dist/commands/authority-domains.js.map +1 -1
  73. package/dist/commands/capture.d.ts.map +1 -1
  74. package/dist/commands/capture.js +3 -2
  75. package/dist/commands/capture.js.map +1 -1
  76. package/dist/commands/codex-prep.js +6 -6
  77. package/dist/commands/codex-prep.js.map +1 -1
  78. package/dist/commands/connect-handoff.d.ts +51 -0
  79. package/dist/commands/connect-handoff.d.ts.map +1 -0
  80. package/dist/commands/connect-handoff.js +70 -0
  81. package/dist/commands/connect-handoff.js.map +1 -0
  82. package/dist/commands/connect-integration.test.js +13 -12
  83. package/dist/commands/connect-integration.test.js.map +1 -1
  84. package/dist/commands/connect-screens.d.ts +2 -2
  85. package/dist/commands/connect-screens.js +2 -2
  86. package/dist/commands/connect.d.ts +3 -6
  87. package/dist/commands/connect.d.ts.map +1 -1
  88. package/dist/commands/connect.js +10 -36
  89. package/dist/commands/connect.js.map +1 -1
  90. package/dist/commands/doctor.d.ts.map +1 -1
  91. package/dist/commands/doctor.js +67 -2
  92. package/dist/commands/doctor.js.map +1 -1
  93. package/dist/commands/doctor.test.js +131 -0
  94. package/dist/commands/doctor.test.js.map +1 -1
  95. package/dist/commands/handshake.d.ts +25 -0
  96. package/dist/commands/handshake.d.ts.map +1 -1
  97. package/dist/commands/handshake.js +795 -18
  98. package/dist/commands/handshake.js.map +1 -1
  99. package/dist/commands/method.d.ts.map +1 -1
  100. package/dist/commands/method.js +3 -0
  101. package/dist/commands/method.js.map +1 -1
  102. package/dist/commands/orient.d.ts +4 -2
  103. package/dist/commands/orient.d.ts.map +1 -1
  104. package/dist/commands/orient.js +16 -2
  105. package/dist/commands/orient.js.map +1 -1
  106. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  107. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  108. package/dist/commands/setup-detect-surfaces.js +67 -0
  109. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  110. package/dist/commands/setup-ingest.d.ts.map +1 -1
  111. package/dist/commands/setup-ingest.js +4 -2
  112. package/dist/commands/setup-ingest.js.map +1 -1
  113. package/dist/commands/setup-state.d.ts +42 -0
  114. package/dist/commands/setup-state.d.ts.map +1 -0
  115. package/dist/commands/setup-state.js +93 -0
  116. package/dist/commands/setup-state.js.map +1 -0
  117. package/dist/commands/setup.d.ts +17 -9
  118. package/dist/commands/setup.d.ts.map +1 -1
  119. package/dist/commands/setup.js +52 -131
  120. package/dist/commands/setup.js.map +1 -1
  121. package/dist/commands/upgrade.d.ts +5 -0
  122. package/dist/commands/upgrade.d.ts.map +1 -0
  123. package/dist/commands/upgrade.js +89 -0
  124. package/dist/commands/upgrade.js.map +1 -0
  125. package/dist/formatters/handshake.d.ts +12 -0
  126. package/dist/formatters/handshake.d.ts.map +1 -1
  127. package/dist/formatters/handshake.js +32 -0
  128. package/dist/formatters/handshake.js.map +1 -1
  129. package/dist/formatters/orient.d.ts +10 -4
  130. package/dist/formatters/orient.d.ts.map +1 -1
  131. package/dist/formatters/orient.js +32 -16
  132. package/dist/formatters/orient.js.map +1 -1
  133. package/dist/generators/context-md.js +6 -6
  134. package/dist/generators/context-md.js.map +1 -1
  135. package/dist/generators/manifest.d.ts +76 -0
  136. package/dist/generators/manifest.d.ts.map +1 -1
  137. package/dist/generators/manifest.js +125 -14
  138. package/dist/generators/manifest.js.map +1 -1
  139. package/dist/generators/portable-knowledge.d.ts +2 -2
  140. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  141. package/dist/generators/surface-profiles.d.ts +1 -2
  142. package/dist/generators/surface-profiles.d.ts.map +1 -1
  143. package/dist/generators/surface-profiles.js.map +1 -1
  144. package/dist/index.js +43 -18
  145. package/dist/index.js.map +1 -1
  146. package/dist/lib/activation.js +2 -2
  147. package/dist/lib/activation.js.map +1 -1
  148. package/dist/lib/activation.test.js +3 -3
  149. package/dist/lib/activation.test.js.map +1 -1
  150. package/dist/lib/canonicalRefs.d.ts +72 -0
  151. package/dist/lib/canonicalRefs.d.ts.map +1 -1
  152. package/dist/lib/canonicalRefs.js +67 -0
  153. package/dist/lib/canonicalRefs.js.map +1 -1
  154. package/dist/lib/client.d.ts.map +1 -1
  155. package/dist/lib/client.js +13 -3
  156. package/dist/lib/client.js.map +1 -1
  157. package/dist/lib/constants.d.ts +2 -0
  158. package/dist/lib/constants.d.ts.map +1 -1
  159. package/dist/lib/constants.js +2 -0
  160. package/dist/lib/constants.js.map +1 -1
  161. package/dist/lib/errors.d.ts +1 -0
  162. package/dist/lib/errors.d.ts.map +1 -1
  163. package/dist/lib/errors.js +1 -0
  164. package/dist/lib/errors.js.map +1 -1
  165. package/dist/lib/onboarding-shared.js +1 -1
  166. package/dist/lib/onboarding-shared.js.map +1 -1
  167. package/dist/lib/update-check.d.ts +20 -0
  168. package/dist/lib/update-check.d.ts.map +1 -1
  169. package/dist/lib/update-check.js +122 -21
  170. package/dist/lib/update-check.js.map +1 -1
  171. package/dist/lib/upgrade-runner.d.ts +21 -0
  172. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  173. package/dist/lib/upgrade-runner.js +109 -0
  174. package/dist/lib/upgrade-runner.js.map +1 -0
  175. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  176. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  177. package/dist/lib/workspaceVocabCache.js +98 -0
  178. package/dist/lib/workspaceVocabCache.js.map +1 -0
  179. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  180. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  181. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  182. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  183. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  184. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  185. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  186. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  187. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  188. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  189. package/dist/setup/__tests__/state-machine.test.js +341 -0
  190. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  191. package/dist/setup/detect-surfaces.d.ts +21 -0
  192. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  193. package/dist/setup/detect-surfaces.js +39 -0
  194. package/dist/setup/detect-surfaces.js.map +1 -0
  195. package/dist/setup/manifest-writer.d.ts +17 -0
  196. package/dist/setup/manifest-writer.d.ts.map +1 -0
  197. package/dist/setup/manifest-writer.js +153 -0
  198. package/dist/setup/manifest-writer.js.map +1 -0
  199. package/dist/setup/perimeter.d.ts +62 -0
  200. package/dist/setup/perimeter.d.ts.map +1 -0
  201. package/dist/setup/perimeter.js +113 -0
  202. package/dist/setup/perimeter.js.map +1 -0
  203. package/dist/setup/state-machine.d.ts +67 -0
  204. package/dist/setup/state-machine.d.ts.map +1 -0
  205. package/dist/setup/state-machine.js +124 -0
  206. package/dist/setup/state-machine.js.map +1 -0
  207. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  208. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  209. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  210. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  211. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  212. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  213. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  214. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  215. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  216. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  217. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  218. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  219. package/dist/surfaces/adapter.d.ts +70 -0
  220. package/dist/surfaces/adapter.d.ts.map +1 -0
  221. package/dist/surfaces/adapter.js +2 -0
  222. package/dist/surfaces/adapter.js.map +1 -0
  223. package/dist/surfaces/adapters/claude.d.ts +3 -0
  224. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  225. package/dist/surfaces/adapters/claude.js +67 -0
  226. package/dist/surfaces/adapters/claude.js.map +1 -0
  227. package/dist/surfaces/adapters/codex.d.ts +3 -0
  228. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  229. package/dist/surfaces/adapters/codex.js +61 -0
  230. package/dist/surfaces/adapters/codex.js.map +1 -0
  231. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  232. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  233. package/dist/surfaces/adapters/copilot.js +59 -0
  234. package/dist/surfaces/adapters/copilot.js.map +1 -0
  235. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  236. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  237. package/dist/surfaces/adapters/cursor.js +78 -0
  238. package/dist/surfaces/adapters/cursor.js.map +1 -0
  239. package/dist/surfaces/registry.d.ts +58 -2
  240. package/dist/surfaces/registry.d.ts.map +1 -1
  241. package/dist/surfaces/registry.js +82 -7
  242. package/dist/surfaces/registry.js.map +1 -1
  243. package/dist/surfaces/telemetry.d.ts +17 -0
  244. package/dist/surfaces/telemetry.d.ts.map +1 -0
  245. package/dist/surfaces/telemetry.js +31 -0
  246. package/dist/surfaces/telemetry.js.map +1 -0
  247. package/package.json +2 -1
@@ -1,10 +1,7 @@
1
- /**
2
- * Surface Capability Registry — WP-310 S0 (FEAT-959)
3
- *
4
- * Static typed record of per-surface capabilities consumed by E1–E4.
5
- * INS-740: Cursor and Copilot had confirmed double-fire risk with Claude Code hooks.
6
- * Their hookEvents arrays MUST be empty in v1. Only 'claude' gets hook events by default.
7
- */
1
+ import { claudeAdapter } from './adapters/claude.js';
2
+ import { cursorAdapter } from './adapters/cursor.js';
3
+ import { copilotAdapter } from './adapters/copilot.js';
4
+ import { codexAdapter } from './adapters/codex.js';
8
5
  export const SURFACE_REGISTRY = {
9
6
  claude: {
10
7
  rulesFormat: 'markdown',
@@ -39,4 +36,82 @@ export const SURFACE_REGISTRY = {
39
36
  supportsAgentsMd: true,
40
37
  },
41
38
  };
39
+ // ── SurfaceAdapter registry — WP-421 S2c (DEC-952) ──────────────────────────
40
+ /**
41
+ * Per-surface adapter registry. New surface = new adapter file + line here.
42
+ * Adapters expose detect/paths/transform/goldens/canonicalPathFor — one canonical
43
+ * asset, many surface projections.
44
+ */
45
+ export const SURFACE_ADAPTERS = {
46
+ claude: claudeAdapter,
47
+ cursor: cursorAdapter,
48
+ copilot: copilotAdapter,
49
+ codex: codexAdapter,
50
+ };
51
+ /** Convenience array view for iteration (e.g. detect-all). */
52
+ export const SURFACE_ADAPTER_LIST = Object.values(SURFACE_ADAPTERS);
53
+ /**
54
+ * Lookup the canonical authoring path for a projection path on any surface.
55
+ * Returns the first non-null mapping; if every adapter returns null, returns null
56
+ * and the caller MUST emit `surface-reverse-map-missing` telemetry via
57
+ * `surfaces/telemetry.ts:reportReverseMapMissing`.
58
+ */
59
+ export function canonicalPathForAnySurface(projectionPath) {
60
+ for (const surface of Object.keys(SURFACE_ADAPTERS)) {
61
+ const result = SURFACE_ADAPTERS[surface].canonicalPathFor(projectionPath);
62
+ if (result)
63
+ return { surface, canonicalPath: result };
64
+ }
65
+ return null;
66
+ }
67
+ // ── WP-421 S7: mode × surfaces matrix (doneWhen #19) ─────────────────────────
68
+ //
69
+ // Two stable error/flag codes (consumer-stable contract):
70
+ // - SURFACE_GOVERN_NO_SURFACES — Govern mode requires a non-empty surfaces[].
71
+ // Emitted by `validateSurfacesForMode` when `materialize: govern` and no
72
+ // surfaces declared. CLI surfaces this as a hard error.
73
+ // - SURFACE_ADAPTER_MISSING — A surface name in `manifest.surfaces[]` is not
74
+ // registered in SURFACE_ADAPTERS. Emitted by `flagUnregisteredSurfaces` for
75
+ // the drift report. The handshake MUST NOT crash on this — the flag is
76
+ // advisory and the handshake skips the unknown surface.
77
+ /** Govern mode declared with empty surfaces[]. Hard error (handshake refuses). */
78
+ export const SURFACE_GOVERN_NO_SURFACES = 'govern-no-surfaces';
79
+ /** Surface name in manifest is not registered. Advisory flag for drift report. */
80
+ export const SURFACE_ADAPTER_MISSING = 'surface-adapter-missing';
81
+ /**
82
+ * Validate `manifest.surfaces[]` against the requested authority mode.
83
+ *
84
+ * Govern + empty surfaces → `{ error: SURFACE_GOVERN_NO_SURFACES }`.
85
+ * Any other mode is permitted with any (possibly empty) surface list.
86
+ *
87
+ * Unregistered surface names are reported via `unregisteredSurfaces` so the
88
+ * caller can flag them in the drift report. Pure: no I/O, no Convex calls.
89
+ *
90
+ * Surface name normalization: this validator strips a leading `.` from each
91
+ * entry (e.g. `.cursor` → `cursor`) so manifests can declare either form.
92
+ * The canonical SurfaceName values in SURFACE_ADAPTERS use the bare name.
93
+ */
94
+ export function validateSurfacesForMode(mode, surfacesFromManifest) {
95
+ const knownNames = new Set(Object.keys(SURFACE_ADAPTERS));
96
+ const registeredSurfaces = [];
97
+ const unregisteredSurfaces = [];
98
+ for (const raw of surfacesFromManifest) {
99
+ if (typeof raw !== 'string' || raw.length === 0)
100
+ continue;
101
+ const stripped = raw.startsWith('.') ? raw.slice(1) : raw;
102
+ const normalized = stripped === 'github' ? 'copilot' : stripped;
103
+ if (knownNames.has(normalized)) {
104
+ registeredSurfaces.push(normalized);
105
+ }
106
+ else {
107
+ unregisteredSurfaces.push(raw);
108
+ }
109
+ }
110
+ // Govern requires at least one registered surface. Unregistered surface names
111
+ // do NOT count toward this minimum (they're advisory).
112
+ if (mode === 'govern' && registeredSurfaces.length === 0) {
113
+ return { error: SURFACE_GOVERN_NO_SURFACES, unregisteredSurfaces, registeredSurfaces };
114
+ }
115
+ return { unregisteredSurfaces, registeredSurfaces };
116
+ }
42
117
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/surfaces/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,CAAC,MAAM,gBAAgB,GAA2C;IACtE,MAAM,EAAE;QACN,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC;QAClD,YAAY,EAAE,uBAAuB;QACrC,uBAAuB,EAAE,eAAe;QACxC,gBAAgB,EAAE,KAAK;KACxB;IACD,MAAM,EAAE;QACN,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,EAAE,EAAE,oDAAoD;QACpE,YAAY,EAAE,uBAAuB;QACrC,uBAAuB,EAAE,MAAM;QAC/B,gBAAgB,EAAE,KAAK;KACxB;IACD,OAAO,EAAE;QACP,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,MAAM;QACpB,UAAU,EAAE,EAAE,EAAE,oBAAoB;QACpC,YAAY,EAAE,iCAAiC;QAC/C,uBAAuB,EAAE,MAAM;QAC/B,gBAAgB,EAAE,KAAK;KACxB;IACD,KAAK,EAAE;QACL,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,WAAW;QACzB,uBAAuB,EAAE,MAAM;QAC/B,gBAAgB,EAAE,IAAI;KACvB;CACF,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/surfaces/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface ReverseMapMissingEvent {
2
+ surface: string;
3
+ projectionPath: string;
4
+ }
5
+ /**
6
+ * Stable, copy-paste-able fallback message used by tampered-bucket prompts when
7
+ * an adapter cannot reverse-map a projection path. Centralized so every consumer
8
+ * surfaces the exact same instruction string.
9
+ */
10
+ export declare function getReverseMapFallbackMessage(): string;
11
+ /**
12
+ * Report that an adapter returned null for canonicalPathFor.
13
+ * Always emits a telemetry event; also writes a tagged warning to stderr so
14
+ * developers see it during local handshake runs.
15
+ */
16
+ export declare function reportReverseMapMissing(evt: ReverseMapMissingEvent, warn?: (msg: string) => void): void;
17
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/surfaces/telemetry.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAKD;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,sBAAsB,EAC3B,IAAI,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAgD,GACtE,IAAI,CAQN"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Surface telemetry — WP-421 S2c.
3
+ *
4
+ * Tagged log + PostHog event for unmapped projection paths. When a SurfaceAdapter's
5
+ * canonicalPathFor returns null, the consumer falls back to a generic
6
+ * "edit upstream in .productbrain/{skills,rules,hooks}/" message and emits
7
+ * `surface-reverse-map-missing` for observability.
8
+ */
9
+ import { trackEvent } from '../lib/telemetry.js';
10
+ const FALLBACK_MESSAGE = 'edit upstream in .productbrain/skills|rules|hooks/';
11
+ /**
12
+ * Stable, copy-paste-able fallback message used by tampered-bucket prompts when
13
+ * an adapter cannot reverse-map a projection path. Centralized so every consumer
14
+ * surfaces the exact same instruction string.
15
+ */
16
+ export function getReverseMapFallbackMessage() {
17
+ return FALLBACK_MESSAGE;
18
+ }
19
+ /**
20
+ * Report that an adapter returned null for canonicalPathFor.
21
+ * Always emits a telemetry event; also writes a tagged warning to stderr so
22
+ * developers see it during local handshake runs.
23
+ */
24
+ export function reportReverseMapMissing(evt, warn = (msg) => process.stderr.write(msg + '\n')) {
25
+ trackEvent('surface-reverse-map-missing', {
26
+ surface: evt.surface,
27
+ projectionPath: evt.projectionPath,
28
+ });
29
+ warn(`[surface-reverse-map-missing] ${evt.surface} cannot reverse-map ${evt.projectionPath} — ${FALLBACK_MESSAGE}`);
30
+ }
31
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/surfaces/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAOjD,MAAM,gBAAgB,GACpB,oDAAoD,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAA2B,EAC3B,OAA8B,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;IAEvE,UAAU,CAAC,6BAA6B,EAAE;QACxC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,cAAc,EAAE,GAAG,CAAC,cAAc;KACnC,CAAC,CAAC;IACH,IAAI,CACF,iCAAiC,GAAG,CAAC,OAAO,uBAAuB,GAAG,CAAC,cAAc,MAAM,gBAAgB,EAAE,CAC9G,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@productbrain/cli",
3
- "version": "0.1.0-beta.108",
3
+ "version": "0.1.0-beta.109",
4
4
  "description": "Product Brain — Chain knowledge and write-back CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,6 +15,7 @@
15
15
  "typecheck": "tsc --noEmit",
16
16
  "lint": "tsc --noEmit",
17
17
  "test": "vitest run src/",
18
+ "codegen": "node scripts/generate-seed-commands.mjs",
18
19
  "prepublishOnly": "npm run build",
19
20
  "publish:beta": "npm publish --tag=beta",
20
21
  "version:prerelease": "npm version prerelease --no-git-tag-version"