@balpal4495/quorum 3.0.4 → 3.1.1

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 (242) hide show
  1. package/bin/commands/compass.js +31 -12
  2. package/dist/advisor/ask.d.ts +13 -0
  3. package/dist/advisor/ask.d.ts.map +1 -0
  4. package/dist/advisor/ask.js +67 -0
  5. package/dist/advisor/ask.js.map +1 -0
  6. package/dist/advisor/index.d.ts +3 -0
  7. package/dist/advisor/index.d.ts.map +1 -0
  8. package/dist/advisor/index.js +2 -0
  9. package/dist/advisor/index.js.map +1 -0
  10. package/dist/advisor/prompt.d.ts +5 -0
  11. package/dist/advisor/prompt.d.ts.map +1 -0
  12. package/{modules/advisor/prompt.ts → dist/advisor/prompt.js} +22 -26
  13. package/dist/advisor/prompt.js.map +1 -0
  14. package/dist/advisor/types.d.ts +23 -0
  15. package/dist/advisor/types.d.ts.map +1 -0
  16. package/dist/advisor/types.js +2 -0
  17. package/dist/advisor/types.js.map +1 -0
  18. package/dist/compass/behavior.d.ts +4 -0
  19. package/dist/compass/behavior.d.ts.map +1 -0
  20. package/dist/compass/behavior.js +138 -0
  21. package/dist/compass/behavior.js.map +1 -0
  22. package/dist/compass/create.d.ts +3 -0
  23. package/dist/compass/create.d.ts.map +1 -0
  24. package/dist/compass/create.js +289 -0
  25. package/dist/compass/create.js.map +1 -0
  26. package/dist/compass/evidence/collect.d.ts +11 -0
  27. package/dist/compass/evidence/collect.d.ts.map +1 -0
  28. package/dist/compass/evidence/collect.js +86 -0
  29. package/dist/compass/evidence/collect.js.map +1 -0
  30. package/dist/compass/index.d.ts +8 -0
  31. package/dist/compass/index.d.ts.map +1 -0
  32. package/dist/compass/index.js +8 -0
  33. package/dist/compass/index.js.map +1 -0
  34. package/dist/compass/prompts/index.d.ts +28 -0
  35. package/dist/compass/prompts/index.d.ts.map +1 -0
  36. package/{modules/compass/prompts/index.ts → dist/compass/prompts/index.js} +13 -38
  37. package/dist/compass/prompts/index.js.map +1 -0
  38. package/dist/compass/prompts/system.d.ts +2 -0
  39. package/dist/compass/prompts/system.d.ts.map +1 -0
  40. package/{modules/compass/prompts/system.ts → dist/compass/prompts/system.js} +2 -1
  41. package/dist/compass/prompts/system.js.map +1 -0
  42. package/dist/compass/propose.d.ts +15 -0
  43. package/dist/compass/propose.d.ts.map +1 -0
  44. package/dist/compass/propose.js +128 -0
  45. package/dist/compass/propose.js.map +1 -0
  46. package/dist/compass/schemas.d.ts +1271 -0
  47. package/dist/compass/schemas.d.ts.map +1 -0
  48. package/dist/compass/schemas.js +113 -0
  49. package/dist/compass/schemas.js.map +1 -0
  50. package/dist/compass/score.d.ts +25 -0
  51. package/dist/compass/score.d.ts.map +1 -0
  52. package/dist/compass/score.js +89 -0
  53. package/dist/compass/score.js.map +1 -0
  54. package/dist/compass/sources/index.d.ts +9 -0
  55. package/dist/compass/sources/index.d.ts.map +1 -0
  56. package/dist/compass/sources/index.js +408 -0
  57. package/dist/compass/sources/index.js.map +1 -0
  58. package/dist/compass/types.d.ts +334 -0
  59. package/dist/compass/types.d.ts.map +1 -0
  60. package/dist/compass/types.js +2 -0
  61. package/dist/compass/types.js.map +1 -0
  62. package/dist/council/advisors.d.ts +15 -0
  63. package/dist/council/advisors.d.ts.map +1 -0
  64. package/dist/council/advisors.js +46 -0
  65. package/dist/council/advisors.js.map +1 -0
  66. package/dist/council/chairman.d.ts +13 -0
  67. package/dist/council/chairman.d.ts.map +1 -0
  68. package/dist/council/chairman.js +145 -0
  69. package/dist/council/chairman.js.map +1 -0
  70. package/dist/council/deliberate.d.ts +22 -0
  71. package/dist/council/deliberate.d.ts.map +1 -0
  72. package/dist/council/deliberate.js +99 -0
  73. package/dist/council/deliberate.js.map +1 -0
  74. package/dist/council/frame.d.ts +8 -0
  75. package/dist/council/frame.d.ts.map +1 -0
  76. package/dist/council/frame.js +40 -0
  77. package/dist/council/frame.js.map +1 -0
  78. package/dist/council/index.d.ts +6 -0
  79. package/dist/council/index.d.ts.map +1 -0
  80. package/dist/council/index.js +4 -0
  81. package/dist/council/index.js.map +1 -0
  82. package/dist/council/personas.d.ts +18 -0
  83. package/dist/council/personas.d.ts.map +1 -0
  84. package/dist/council/personas.js +44 -0
  85. package/dist/council/personas.js.map +1 -0
  86. package/dist/council/reviewers.d.ts +13 -0
  87. package/dist/council/reviewers.d.ts.map +1 -0
  88. package/dist/council/reviewers.js +59 -0
  89. package/dist/council/reviewers.js.map +1 -0
  90. package/dist/council/risk.d.ts +16 -0
  91. package/dist/council/risk.d.ts.map +1 -0
  92. package/dist/council/risk.js +74 -0
  93. package/dist/council/risk.js.map +1 -0
  94. package/dist/council/types.d.ts +95 -0
  95. package/dist/council/types.d.ts.map +1 -0
  96. package/dist/council/types.js +2 -0
  97. package/dist/council/types.js.map +1 -0
  98. package/dist/jury/evaluate.d.ts +13 -0
  99. package/dist/jury/evaluate.d.ts.map +1 -0
  100. package/{modules/jury/evaluate.ts → dist/jury/evaluate.js} +60 -84
  101. package/dist/jury/evaluate.js.map +1 -0
  102. package/dist/jury/index.d.ts +6 -0
  103. package/dist/jury/index.d.ts.map +1 -0
  104. package/dist/jury/index.js +4 -0
  105. package/dist/jury/index.js.map +1 -0
  106. package/dist/jury/preflight.d.ts +26 -0
  107. package/dist/jury/preflight.d.ts.map +1 -0
  108. package/dist/jury/preflight.js +71 -0
  109. package/dist/jury/preflight.js.map +1 -0
  110. package/dist/jury/schema.d.ts +57 -0
  111. package/dist/jury/schema.d.ts.map +1 -0
  112. package/dist/jury/schema.js +21 -0
  113. package/dist/jury/schema.js.map +1 -0
  114. package/dist/jury/types.d.ts +47 -0
  115. package/dist/jury/types.d.ts.map +1 -0
  116. package/dist/jury/types.js +2 -0
  117. package/dist/jury/types.js.map +1 -0
  118. package/dist/oracle/adapters/lance-db.d.ts +15 -0
  119. package/dist/oracle/adapters/lance-db.d.ts.map +1 -0
  120. package/dist/oracle/adapters/lance-db.js +68 -0
  121. package/dist/oracle/adapters/lance-db.js.map +1 -0
  122. package/dist/oracle/adapters/xenova-embedder.d.ts +21 -0
  123. package/dist/oracle/adapters/xenova-embedder.d.ts.map +1 -0
  124. package/dist/oracle/adapters/xenova-embedder.js +36 -0
  125. package/dist/oracle/adapters/xenova-embedder.js.map +1 -0
  126. package/dist/oracle/bm25.d.ts +20 -0
  127. package/dist/oracle/bm25.d.ts.map +1 -0
  128. package/dist/oracle/bm25.js +82 -0
  129. package/dist/oracle/bm25.js.map +1 -0
  130. package/dist/oracle/index.d.ts +21 -0
  131. package/dist/oracle/index.d.ts.map +1 -0
  132. package/dist/oracle/index.js +25 -0
  133. package/dist/oracle/index.js.map +1 -0
  134. package/dist/oracle/log.d.ts +6 -0
  135. package/dist/oracle/log.d.ts.map +1 -0
  136. package/dist/oracle/log.js +12 -0
  137. package/dist/oracle/log.js.map +1 -0
  138. package/dist/oracle/propose.d.ts +25 -0
  139. package/dist/oracle/propose.d.ts.map +1 -0
  140. package/dist/oracle/propose.js +133 -0
  141. package/dist/oracle/propose.js.map +1 -0
  142. package/dist/oracle/query.d.ts +17 -0
  143. package/dist/oracle/query.d.ts.map +1 -0
  144. package/dist/oracle/query.js +106 -0
  145. package/dist/oracle/query.js.map +1 -0
  146. package/dist/oracle/summary.d.ts +11 -0
  147. package/dist/oracle/summary.d.ts.map +1 -0
  148. package/dist/oracle/summary.js +102 -0
  149. package/dist/oracle/summary.js.map +1 -0
  150. package/dist/oracle/types.d.ts +31 -0
  151. package/dist/oracle/types.d.ts.map +1 -0
  152. package/dist/oracle/types.js +2 -0
  153. package/dist/oracle/types.js.map +1 -0
  154. package/dist/sentinel/assert.d.ts +28 -0
  155. package/dist/sentinel/assert.d.ts.map +1 -0
  156. package/dist/sentinel/assert.js +63 -0
  157. package/dist/sentinel/assert.js.map +1 -0
  158. package/dist/sentinel/coverage.d.ts +14 -0
  159. package/dist/sentinel/coverage.d.ts.map +1 -0
  160. package/dist/sentinel/coverage.js +96 -0
  161. package/dist/sentinel/coverage.js.map +1 -0
  162. package/dist/sentinel/drift.d.ts +12 -0
  163. package/dist/sentinel/drift.d.ts.map +1 -0
  164. package/dist/sentinel/drift.js +149 -0
  165. package/dist/sentinel/drift.js.map +1 -0
  166. package/dist/sentinel/index.d.ts +7 -0
  167. package/dist/sentinel/index.d.ts.map +1 -0
  168. package/dist/sentinel/index.js +5 -0
  169. package/dist/sentinel/index.js.map +1 -0
  170. package/dist/sentinel/review.d.ts +15 -0
  171. package/dist/sentinel/review.d.ts.map +1 -0
  172. package/dist/sentinel/review.js +177 -0
  173. package/dist/sentinel/review.js.map +1 -0
  174. package/dist/setup.d.ts +103 -0
  175. package/dist/setup.d.ts.map +1 -0
  176. package/dist/setup.js +87 -0
  177. package/dist/setup.js.map +1 -0
  178. package/dist/shared/types.d.ts +173 -0
  179. package/dist/shared/types.d.ts.map +1 -0
  180. package/dist/shared/types.js +16 -0
  181. package/dist/shared/types.js.map +1 -0
  182. package/package.json +13 -8
  183. package/.github/copilot-instructions.md +0 -117
  184. package/CLAUDE.md +0 -146
  185. package/GEMINI.md +0 -73
  186. package/SETUP.md +0 -264
  187. package/evals/__tests__/eval.test.ts +0 -31
  188. package/evals/cases/auth_hs256_rejected.json +0 -46
  189. package/evals/cases/auth_rs256_valid.json +0 -30
  190. package/evals/cases/cache_missing_lock.json +0 -31
  191. package/evals/cases/db_naive_not_null.json +0 -32
  192. package/evals/cases/logging_pii_leak.json +0 -32
  193. package/evals/cases/migration_with_rollback.json +0 -43
  194. package/evals/cases/no_evidence_novel_design.json +0 -16
  195. package/evals/cases/payment_no_idempotency.json +0 -33
  196. package/evals/cases/redis_session_rejected.json +0 -32
  197. package/evals/cases/safe_refactor.json +0 -17
  198. package/evals/runner.ts +0 -226
  199. package/modules/AGENTS.md +0 -78
  200. package/modules/CLAUDE.md +0 -93
  201. package/modules/README.md +0 -504
  202. package/modules/advisor/ask.ts +0 -87
  203. package/modules/advisor/index.ts +0 -2
  204. package/modules/advisor/types.ts +0 -26
  205. package/modules/compass/behavior.ts +0 -161
  206. package/modules/compass/create.ts +0 -365
  207. package/modules/compass/evidence/collect.ts +0 -109
  208. package/modules/compass/index.ts +0 -7
  209. package/modules/compass/propose.ts +0 -152
  210. package/modules/compass/schemas.ts +0 -121
  211. package/modules/compass/score.ts +0 -77
  212. package/modules/compass/sources/index.ts +0 -413
  213. package/modules/compass/types.ts +0 -431
  214. package/modules/council/advisors.ts +0 -71
  215. package/modules/council/chairman.ts +0 -183
  216. package/modules/council/deliberate.ts +0 -141
  217. package/modules/council/frame.ts +0 -54
  218. package/modules/council/index.ts +0 -9
  219. package/modules/council/personas.ts +0 -57
  220. package/modules/council/reviewers.ts +0 -82
  221. package/modules/council/risk.ts +0 -89
  222. package/modules/council/types.ts +0 -107
  223. package/modules/jury/index.ts +0 -5
  224. package/modules/jury/preflight.ts +0 -101
  225. package/modules/jury/schema.ts +0 -24
  226. package/modules/jury/types.ts +0 -50
  227. package/modules/oracle/adapters/lance-db.ts +0 -81
  228. package/modules/oracle/adapters/xenova-embedder.ts +0 -43
  229. package/modules/oracle/bm25.ts +0 -92
  230. package/modules/oracle/index.ts +0 -36
  231. package/modules/oracle/log.ts +0 -15
  232. package/modules/oracle/propose.ts +0 -164
  233. package/modules/oracle/query.ts +0 -146
  234. package/modules/oracle/summary.ts +0 -116
  235. package/modules/oracle/types.ts +0 -32
  236. package/modules/sentinel/assert.ts +0 -95
  237. package/modules/sentinel/coverage.ts +0 -106
  238. package/modules/sentinel/drift.ts +0 -163
  239. package/modules/sentinel/index.ts +0 -6
  240. package/modules/sentinel/review.ts +0 -208
  241. package/modules/setup.ts +0 -202
  242. package/modules/shared/types.ts +0 -193
@@ -0,0 +1,289 @@
1
+ import { defaultSources } from "./sources/index.js";
2
+ import { collectBearings, collectTerrain, formatBearingsForPrompt, formatTerrainForPrompt } from "./evidence/collect.js";
3
+ import { mapBehaviorsFromFindings } from "./behavior.js";
4
+ import { computeScore, scoreToRecommendation } from "./score.js";
5
+ import { stageProposal, stageOutcome } from "./propose.js";
6
+ import { COMPASS_SYSTEM_PROMPT } from "./prompts/system.js";
7
+ import { buildBriefPrompt, buildPathwaysPrompt, buildBetsPrompt, buildScorePrompt, } from "./prompts/index.js";
8
+ import { CompassBriefLLMSchema, PathwaysLLMSchema, BetsLLMSchema, ProductIdeaScoreSchema, } from "./schemas.js";
9
+ function parseLLMJson(raw) {
10
+ const cleaned = raw.replace(/^```(?:json)?\s*/m, "").replace(/\s*```$/m, "").trim();
11
+ return JSON.parse(cleaned);
12
+ }
13
+ async function callLLM(llm, userPrompt, model) {
14
+ if (!llm)
15
+ throw new Error("Compass: LLM provider is required for this command. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or pass llm to setup().");
16
+ return llm([
17
+ { role: "system", content: COMPASS_SYSTEM_PROMPT },
18
+ { role: "user", content: userPrompt },
19
+ ], model);
20
+ }
21
+ export function createCompass(options) {
22
+ const { oracle, llm, rootDir = process.cwd(), chronicleDir = ".chronicle", sources = defaultSources(), models = {}, minimumEvidence = "balanced", } = options;
23
+ // ── Shared context helpers ─────────────────────────────────────────────────
24
+ async function getContext(area) {
25
+ const [bearings, terrain] = await Promise.all([
26
+ collectBearings(oracle, area),
27
+ collectTerrain(sources, rootDir, area),
28
+ ]);
29
+ const chronicleContext = formatBearingsForPrompt(bearings);
30
+ const behaviorContext = formatTerrainForPrompt(terrain.findings);
31
+ const behaviorMap = mapBehaviorsFromFindings(terrain.findings, { area });
32
+ return { bearings, terrain, chronicleContext, behaviorContext, behaviorMap };
33
+ }
34
+ // ── brief ──────────────────────────────────────────────────────────────────
35
+ async function brief(input) {
36
+ const { chronicleContext, behaviorContext, terrain, behaviorMap } = await getContext(input?.area);
37
+ if (!llm) {
38
+ // Deterministic fallback
39
+ return {
40
+ generated_at: new Date().toISOString(),
41
+ area: input?.area,
42
+ product_direction: "Unable to synthesize direction — no LLM configured. See Chronicle and behaviour map for raw evidence.",
43
+ known_from_chronicle: [],
44
+ known_from_behavior: behaviorMap.behaviors.slice(0, 5).map(b => b.current_behavior),
45
+ inferred: [],
46
+ assumptions: [],
47
+ unknowns: ["LLM not configured — full synthesis unavailable."],
48
+ opportunities: [],
49
+ missing_evidence: ["LLM provider required for synthesis"],
50
+ recommended_next_step: "Run: quorum advisor brief",
51
+ confidence: 0.4,
52
+ };
53
+ }
54
+ const raw = await callLLM(llm, buildBriefPrompt({ chronicleContext, behaviorContext, area: input?.area }), models.brief);
55
+ let parsed;
56
+ try {
57
+ parsed = parseLLMJson(raw);
58
+ }
59
+ catch {
60
+ throw new Error(`Compass brief: LLM returned non-JSON. Raw (first 300): ${raw.slice(0, 300)}`);
61
+ }
62
+ const result = CompassBriefLLMSchema.safeParse(parsed);
63
+ if (!result.success)
64
+ throw new Error(`Compass brief: LLM output failed validation: ${JSON.stringify(result.error.issues)}`);
65
+ const d = result.data;
66
+ // Build opportunity items from behavior map gaps
67
+ const opportunities = behaviorMap.gaps.slice(0, 3).map((g, i) => ({
68
+ id: `opp-gap-${i}`,
69
+ title: g.gap,
70
+ area: g.area,
71
+ why_it_matters: g.why_it_matters,
72
+ evidence_strength: "inferred",
73
+ suggested_next_step: "Run: quorum compass map",
74
+ evidence: g.evidence,
75
+ confidence: g.confidence,
76
+ }));
77
+ return {
78
+ generated_at: new Date().toISOString(),
79
+ area: input?.area,
80
+ ...d,
81
+ opportunities,
82
+ };
83
+ }
84
+ // ── mapBehaviors ────────────────────────────────────────────────────────────
85
+ async function mapBehaviors(input) {
86
+ const terrain = await collectTerrain(sources, rootDir, input?.area);
87
+ return mapBehaviorsFromFindings(terrain.findings, input);
88
+ }
89
+ // ── behavior (single question) ──────────────────────────────────────────────
90
+ async function behavior(input) {
91
+ const terrain = await collectTerrain(sources, rootDir, input.area);
92
+ const map = mapBehaviorsFromFindings(terrain.findings, { area: input.area });
93
+ const relevant = terrain.findings.filter(f => f.summary.toLowerCase().includes(input.question.toLowerCase().split(" ").slice(0, 3).join(" ")) ||
94
+ f.tags.some(t => input.question.toLowerCase().includes(t))).slice(0, 10);
95
+ if (!llm || input.deterministic) {
96
+ // Deterministic answer from behaviour map
97
+ const what_exists = map.behaviors.slice(0, 6).map(b => b.current_behavior);
98
+ const what_missing = map.gaps.slice(0, 4).map(g => g.gap);
99
+ return {
100
+ question: input.question,
101
+ what_exists,
102
+ what_appears_missing: what_missing,
103
+ product_implication: map.gaps.length > 0
104
+ ? `The area has ${map.behaviors.length} documented behaviours but ${map.gaps.length} notable gaps.`
105
+ : `The area appears well-covered with ${map.behaviors.length} documented behaviours.`,
106
+ evidence: relevant.map(f => ({ id: f.id, kind: f.kind, source: f.source, path: f.path, summary: f.summary, confidence: f.confidence })),
107
+ confidence: map.confidence,
108
+ };
109
+ }
110
+ // LLM-backed synthesis
111
+ const contextLines = [
112
+ "## Behaviours found",
113
+ ...map.behaviors.slice(0, 10).map(b => ` ✓ ${b.current_behavior}`),
114
+ "## Gaps found",
115
+ ...map.gaps.slice(0, 5).map(g => ` ? ${g.gap}`),
116
+ ].join("\n");
117
+ const prompt = `Answer this product-behaviour question by combining repo evidence with known behaviours.
118
+
119
+ Question: ${input.question}
120
+
121
+ ${contextLines}
122
+
123
+ Return JSON:
124
+ {
125
+ "question": "${input.question}",
126
+ "what_exists": ["<existing behaviour>"],
127
+ "what_appears_missing": ["<missing capability>"],
128
+ "product_implication": "<one sentence product implication>",
129
+ "evidence": [{ "id": "<id>", "kind": "<kind>", "source": "<source>", "summary": "<summary>", "confidence": <0–1> }],
130
+ "confidence": <0–1>
131
+ }`;
132
+ const raw = await callLLM(llm, prompt, models.brief);
133
+ try {
134
+ const parsed = parseLLMJson(raw);
135
+ return { ...parsed, question: input.question };
136
+ }
137
+ catch {
138
+ // Fall back to deterministic
139
+ return behavior({ ...input, deterministic: true });
140
+ }
141
+ }
142
+ // ── opportunities ───────────────────────────────────────────────────────────
143
+ async function opportunities(input) {
144
+ const terrain = await collectTerrain(sources, rootDir, input?.area);
145
+ const map = mapBehaviorsFromFindings(terrain.findings, { area: input?.area });
146
+ const opps = map.gaps.map((g, i) => ({
147
+ id: `opp-${i}`,
148
+ title: g.gap,
149
+ area: g.area,
150
+ why_it_matters: g.why_it_matters,
151
+ evidence_strength: g.confidence >= 0.7 ? "strong"
152
+ : g.confidence >= 0.5 ? "medium"
153
+ : "inferred",
154
+ suggested_next_step: `quorum compass pathways --goal "${g.gap.slice(0, 50)}"`,
155
+ evidence: g.evidence,
156
+ confidence: g.confidence,
157
+ }));
158
+ const limited = input?.limit ? opps.slice(0, input.limit) : opps;
159
+ return input?.goal
160
+ ? limited.filter(o => o.title.toLowerCase().includes(input.goal.toLowerCase()) || o.area.toLowerCase().includes(input.goal.toLowerCase()))
161
+ : limited;
162
+ }
163
+ // ── pathways ────────────────────────────────────────────────────────────────
164
+ async function pathways(input) {
165
+ const { chronicleContext, behaviorContext } = await getContext(input.area);
166
+ const raw = await callLLM(llm, buildPathwaysPrompt({ ...input, chronicleContext, behaviorContext, limit: input.limit ?? 5 }), models.pathways);
167
+ let parsed;
168
+ try {
169
+ parsed = parseLLMJson(raw);
170
+ }
171
+ catch {
172
+ throw new Error(`Compass pathways: LLM returned non-JSON. Raw (first 300): ${raw.slice(0, 300)}`);
173
+ }
174
+ const result = PathwaysLLMSchema.safeParse(parsed);
175
+ if (!result.success)
176
+ throw new Error(`Compass pathways: LLM output failed validation: ${JSON.stringify(result.error.issues)}`);
177
+ // Recompute scores deterministically
178
+ return result.data.pathways.map(p => ({
179
+ ...p,
180
+ scores: computeScore(p.scores),
181
+ }));
182
+ }
183
+ // ── bigBets ─────────────────────────────────────────────────────────────────
184
+ async function bigBets(input) {
185
+ const { chronicleContext, behaviorContext } = await getContext();
186
+ const raw = await callLLM(llm, buildBetsPrompt({ ...input, chronicleContext, behaviorContext }), models.bets);
187
+ let parsed;
188
+ try {
189
+ parsed = parseLLMJson(raw);
190
+ }
191
+ catch {
192
+ throw new Error(`Compass bets: LLM returned non-JSON. Raw (first 300): ${raw.slice(0, 300)}`);
193
+ }
194
+ const result = BetsLLMSchema.safeParse(parsed);
195
+ if (!result.success)
196
+ throw new Error(`Compass bets: LLM output failed validation: ${JSON.stringify(result.error.issues)}`);
197
+ return result.data.bets.map(b => ({
198
+ ...b,
199
+ scores: computeScore(b.scores),
200
+ }));
201
+ }
202
+ // ── scoreIdea ───────────────────────────────────────────────────────────────
203
+ async function scoreIdea(input) {
204
+ const { chronicleContext, behaviorContext } = await getContext();
205
+ const raw = await callLLM(llm, buildScorePrompt({ ...input, chronicleContext, behaviorContext }), models.score);
206
+ let parsed;
207
+ try {
208
+ parsed = parseLLMJson(raw);
209
+ }
210
+ catch {
211
+ throw new Error(`Compass score: LLM returned non-JSON. Raw (first 300): ${raw.slice(0, 300)}`);
212
+ }
213
+ const result = ProductIdeaScoreSchema.safeParse(parsed);
214
+ if (!result.success)
215
+ throw new Error(`Compass score: LLM output failed validation: ${JSON.stringify(result.error.issues)}`);
216
+ const d = result.data;
217
+ return {
218
+ ...d,
219
+ scores: computeScore(d.scores),
220
+ recommendation: scoreToRecommendation(d.scores.total),
221
+ };
222
+ }
223
+ // ── productBrief ─────────────────────────────────────────────────────────────
224
+ async function productBrief(input) {
225
+ const { chronicleContext, behaviorContext, terrain } = await getContext();
226
+ const prompt = `Generate a product brief for implementation planning.
227
+
228
+ Title: ${input.title}
229
+ ${input.idea ? `Idea: ${input.idea}` : ""}
230
+ ${input.context ? `Context: ${input.context}` : ""}
231
+
232
+ ## Chronicle evidence
233
+ ${chronicleContext}
234
+
235
+ ## Current behaviour
236
+ ${behaviorContext}
237
+
238
+ Return JSON:
239
+ {
240
+ "title": "${input.title}",
241
+ "problem": "<problem being solved>",
242
+ "target_user": "<who>",
243
+ "current_behavior": ["<relevant current behaviour>"],
244
+ "product_opportunity": "<gap or need>",
245
+ "recommended_solution": "<recommended approach>",
246
+ "smallest_useful_version": "<minimum useful version>",
247
+ "non_goals": ["<explicit non-goal>"],
248
+ "user_flow": ["<step in user flow>"],
249
+ "implementation_notes": ["<implementation note>"],
250
+ "dependencies": ["<dependency>"],
251
+ "risks": ["<risk>"],
252
+ "open_questions": ["<open question>"],
253
+ "assumptions": ["<assumption>"],
254
+ "validation_signals": ["<signal>"],
255
+ "invalidation_signals": ["<signal>"],
256
+ "evidence": [{ "id": "<id>", "kind": "<kind>", "source": "<source>", "summary": "<summary>", "confidence": <0–1> }],
257
+ "suggested_quorum_checks": ["<quorum check command>"]
258
+ }`;
259
+ const raw = await callLLM(llm, prompt, models.brief);
260
+ try {
261
+ const parsed = parseLLMJson(raw);
262
+ return parsed;
263
+ }
264
+ catch {
265
+ throw new Error(`Compass productBrief: LLM returned non-JSON. Raw (first 300): ${raw.slice(0, 300)}`);
266
+ }
267
+ }
268
+ // ── propose ──────────────────────────────────────────────────────────────────
269
+ async function propose(input) {
270
+ return stageProposal(input, oracle);
271
+ }
272
+ // ── outcome ──────────────────────────────────────────────────────────────────
273
+ async function outcome(input) {
274
+ return stageOutcome(input, oracle);
275
+ }
276
+ return {
277
+ brief,
278
+ mapBehaviors,
279
+ behavior,
280
+ opportunities,
281
+ pathways,
282
+ bigBets,
283
+ scoreIdea,
284
+ productBrief,
285
+ propose,
286
+ outcome,
287
+ };
288
+ }
289
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../modules/compass/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { OracleClient } from "../../shared/types.js";
2
+ import type { CompassEvidenceRef, ProductBearing, ProductSource, ProductSourceFinding } from "../types.js";
3
+ export declare function collectBearings(oracle: OracleClient, area?: string): Promise<ProductBearing[]>;
4
+ export interface TerrainResult {
5
+ findings: ProductSourceFinding[];
6
+ evidenceRefs: CompassEvidenceRef[];
7
+ }
8
+ export declare function collectTerrain(sources: ProductSource[], rootDir: string, area?: string): Promise<TerrainResult>;
9
+ export declare function formatBearingsForPrompt(bearings: ProductBearing[]): string;
10
+ export declare function formatTerrainForPrompt(findings: ProductSourceFinding[], limit?: number): string;
11
+ //# sourceMappingURL=collect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../../../modules/compass/evidence/collect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAA;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAK1G,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,EAAE,CAAC,CAwC3B;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAChC,YAAY,EAAE,kBAAkB,EAAE,CAAA;CACnC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC,CAmBxB;AAID,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAK1E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,EAAE,KAAK,SAAK,GAAG,MAAM,CAgB3F"}
@@ -0,0 +1,86 @@
1
+ import { randomUUID } from "crypto";
2
+ // ── Bearings from Chronicle ───────────────────────────────────────────────────
3
+ export async function collectBearings(oracle, area) {
4
+ const queries = [
5
+ area ?? "product direction goals decisions",
6
+ "rejected approaches refuted alternatives",
7
+ "constraints scope out-of-scope",
8
+ ];
9
+ const seen = new Set();
10
+ const bearings = [];
11
+ for (const q of queries) {
12
+ let results;
13
+ try {
14
+ results = await oracle.query(q, { limit: 8 });
15
+ }
16
+ catch {
17
+ continue;
18
+ }
19
+ for (const entry of results) {
20
+ if (seen.has(entry.id))
21
+ continue;
22
+ seen.add(entry.id);
23
+ const text = entry.decision ?? entry.key_insight;
24
+ bearings.push({
25
+ id: `bearing-${entry.id.slice(0, 8)}`,
26
+ title: entry.topic ?? text.slice(0, 60),
27
+ summary: text,
28
+ area: entry.scope?.[0],
29
+ evidence: [
30
+ {
31
+ id: randomUUID().slice(0, 8),
32
+ kind: "chronicle",
33
+ source: ".chronicle/committed",
34
+ entry_id: entry.id,
35
+ summary: text,
36
+ confidence: entry.confidence,
37
+ },
38
+ ],
39
+ confidence: entry.confidence,
40
+ });
41
+ }
42
+ }
43
+ return bearings;
44
+ }
45
+ export async function collectTerrain(sources, rootDir, area) {
46
+ const allFindings = [];
47
+ for (const source of sources) {
48
+ const found = await source.scan({ rootDir, area });
49
+ allFindings.push(...found);
50
+ }
51
+ const evidenceRefs = allFindings.map(f => ({
52
+ id: f.id,
53
+ kind: f.kind,
54
+ source: f.source,
55
+ path: f.path,
56
+ line: f.line,
57
+ summary: f.summary,
58
+ confidence: f.confidence,
59
+ }));
60
+ return { findings: allFindings, evidenceRefs };
61
+ }
62
+ // ── Format helpers for LLM prompts ───────────────────────────────────────────
63
+ export function formatBearingsForPrompt(bearings) {
64
+ if (bearings.length === 0)
65
+ return "No Chronicle entries found.";
66
+ return bearings
67
+ .map(b => `[${b.id}] (confidence: ${b.confidence.toFixed(2)}) ${b.summary}`)
68
+ .join("\n");
69
+ }
70
+ export function formatTerrainForPrompt(findings, limit = 40) {
71
+ if (findings.length === 0)
72
+ return "No product behaviour found in sources.";
73
+ // Group by kind
74
+ const groups = {};
75
+ for (const f of findings.slice(0, limit)) {
76
+ groups[f.kind] = groups[f.kind] ?? [];
77
+ groups[f.kind].push(f);
78
+ }
79
+ return Object.entries(groups)
80
+ .map(([kind, items]) => {
81
+ const lines = items.slice(0, 10).map(i => ` - ${i.title}: ${i.summary.slice(0, 100)}`);
82
+ return `${kind.toUpperCase()}:\n${lines.join("\n")}`;
83
+ })
84
+ .join("\n\n");
85
+ }
86
+ //# sourceMappingURL=collect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../modules/compass/evidence/collect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { createCompass } from "./create.js";
2
+ export { defaultSources, docsSource, packageSource, cliSource, repoSource, testsSource, configSource } from "./sources/index.js";
3
+ export { mapBehaviorsFromFindings, summarizeBehaviorMap } from "./behavior.js";
4
+ export { computeScore, scoreToRecommendation, scoreToLabel, explainScore } from "./score.js";
5
+ export { collectBearings, collectTerrain, formatBearingsForPrompt, formatTerrainForPrompt } from "./evidence/collect.js";
6
+ export { stageProposal, stageOutcome } from "./propose.js";
7
+ export * from "./types.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../modules/compass/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAChI,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACxH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC1D,cAAc,YAAY,CAAA"}
@@ -0,0 +1,8 @@
1
+ export { createCompass } from "./create.js";
2
+ export { defaultSources, docsSource, packageSource, cliSource, repoSource, testsSource, configSource } from "./sources/index.js";
3
+ export { mapBehaviorsFromFindings, summarizeBehaviorMap } from "./behavior.js";
4
+ export { computeScore, scoreToRecommendation, scoreToLabel, explainScore } from "./score.js";
5
+ export { collectBearings, collectTerrain, formatBearingsForPrompt, formatTerrainForPrompt } from "./evidence/collect.js";
6
+ export { stageProposal, stageOutcome } from "./propose.js";
7
+ export * from "./types.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../modules/compass/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAChI,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACxH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC1D,cAAc,YAAY,CAAA"}
@@ -0,0 +1,28 @@
1
+ export declare function buildBriefPrompt(params: {
2
+ chronicleContext: string;
3
+ behaviorContext: string;
4
+ area?: string;
5
+ }): string;
6
+ export declare function buildPathwaysPrompt(params: {
7
+ goal: string;
8
+ horizon?: string;
9
+ appetite?: string;
10
+ chronicleContext: string;
11
+ behaviorContext: string;
12
+ area?: string;
13
+ limit?: number;
14
+ }): string;
15
+ export declare function buildBetsPrompt(params: {
16
+ horizon?: string;
17
+ goal?: string;
18
+ appetite?: string;
19
+ chronicleContext: string;
20
+ behaviorContext: string;
21
+ }): string;
22
+ export declare function buildScorePrompt(params: {
23
+ idea: string;
24
+ context?: string;
25
+ chronicleContext: string;
26
+ behaviorContext: string;
27
+ }): string;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../modules/compass/prompts/index.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CA4BT;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,MAAM,CAiFT;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;CACxB,GAAG,MAAM,CAmDT;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;CACxB,GAAG,MAAM,CAwCT"}
@@ -1,9 +1,5 @@
1
- export function buildBriefPrompt(params: {
2
- chronicleContext: string
3
- behaviorContext: string
4
- area?: string
5
- }): string {
6
- return `Produce a Compass Brief — a summary of current product direction.
1
+ export function buildBriefPrompt(params) {
2
+ return `Produce a Compass Brief — a summary of current product direction.
7
3
 
8
4
  ${params.area ? `Focus area: ${params.area}\n` : ""}
9
5
 
@@ -29,19 +25,10 @@ Return ONLY valid JSON with this exact schema (no markdown fences, no explanatio
29
25
  Rules:
30
26
  - known_from_chronicle must cite specific decisions, not paraphrase
31
27
  - unknowns must include "No analytics or support evidence connected" if no user data provided
32
- - confidence reflects how strongly the direction can be stated from available evidence`
28
+ - confidence reflects how strongly the direction can be stated from available evidence`;
33
29
  }
34
-
35
- export function buildPathwaysPrompt(params: {
36
- goal: string
37
- horizon?: string
38
- appetite?: string
39
- chronicleContext: string
40
- behaviorContext: string
41
- area?: string
42
- limit?: number
43
- }): string {
44
- return `Generate ${params.limit ?? 5} product pathways toward the following goal.
30
+ export function buildPathwaysPrompt(params) {
31
+ return `Generate ${params.limit ?? 5} product pathways toward the following goal.
45
32
 
46
33
  Goal: ${params.goal}
47
34
  ${params.horizon ? `Horizon: ${params.horizon}` : ""}
@@ -120,17 +107,10 @@ Rules:
120
107
  - Clamp total to 0–100
121
108
  - Assumptions must always be present (minimum 1)
122
109
  - unknowns must note if no user evidence is connected
123
- - Sort by scores.total descending`
110
+ - Sort by scores.total descending`;
124
111
  }
125
-
126
- export function buildBetsPrompt(params: {
127
- horizon?: string
128
- goal?: string
129
- appetite?: string
130
- chronicleContext: string
131
- behaviorContext: string
132
- }): string {
133
- return `Generate 2–3 strategic product bets.
112
+ export function buildBetsPrompt(params) {
113
+ return `Generate 2–3 strategic product bets.
134
114
 
135
115
  ${params.horizon ? `Horizon: ${params.horizon}` : ""}
136
116
  ${params.goal ? `Goal: ${params.goal}` : ""}
@@ -179,16 +159,10 @@ Rules:
179
159
  - A bet is a falsifiable hypothesis, not a feature list
180
160
  - Kill criteria must be present
181
161
  - Invalidation signals must be present
182
- - If no user evidence is available, evidence_strength should be ≤ 0.4`
162
+ - If no user evidence is available, evidence_strength should be ≤ 0.4`;
183
163
  }
184
-
185
- export function buildScorePrompt(params: {
186
- idea: string
187
- context?: string
188
- chronicleContext: string
189
- behaviorContext: string
190
- }): string {
191
- return `Evaluate this product idea.
164
+ export function buildScorePrompt(params) {
165
+ return `Evaluate this product idea.
192
166
 
193
167
  Idea: ${params.idea}
194
168
  ${params.context ? `Context: ${params.context}` : ""}
@@ -226,5 +200,6 @@ Penalise:
226
200
  - high infrastructure/hosting/auth burden
227
201
  - unclear user problem
228
202
  - long time-to-signal
229
- - low reversibility`
203
+ - low reversibility`;
230
204
  }
205
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../modules/compass/prompts/index.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,MAIhC;IACC,OAAO;;EAEP,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;;;EAGjD,MAAM,CAAC,gBAAgB;;;EAGvB,MAAM,CAAC,eAAe;;;;;;;;;;;;;;;;;;uFAkB+D,CAAA;AACvF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAQnC;IACC,OAAO,YAAY,MAAM,CAAC,KAAK,IAAI,CAAC;;QAE9B,MAAM,CAAC,IAAI;EACjB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;EAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;EACrD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;;;EAG/C,MAAM,CAAC,gBAAgB;;;EAGvB,MAAM,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoEU,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAM/B;IACC,OAAO;;EAEP,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;EAClD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;EACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;;;EAGrD,MAAM,CAAC,gBAAgB;;;EAGvB,MAAM,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sEAuC8C,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAKhC;IACC,OAAO;;QAED,MAAM,CAAC,IAAI;EACjB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;;;EAGlD,MAAM,CAAC,gBAAgB;;;EAGvB,MAAM,CAAC,eAAe;;;;aAIX,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;oBAyBJ,CAAA;AACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const COMPASS_SYSTEM_PROMPT = "You are Quorum Compass, the product-direction module for an AI-assisted software team.\n\nYour job is to help decide where the product should go next.\n\nYou are not a generic brainstormer.\nYou must ground every recommendation in provided evidence.\n\nEvidence may come from:\n- Chronicle memory (human-approved past decisions)\n- current code behaviour\n- docs\n- tests\n- package metadata\n- CLI commands\n\nRules:\n1. Separate known facts from inferences and assumptions.\n2. Never claim user demand unless user evidence (analytics, support, issues) is provided.\n3. Prefer small, reversible next moves unless asked for big bets.\n4. Identify contradictions with Chronicle or current product behaviour.\n5. Include assumptions, invalidation signals, and open questions.\n6. Do not recommend implementation details beyond product-level guidance.\n7. Return only valid JSON matching the requested schema.\n8. When no analytics/support data is connected, always state: \"No direct user signal connected.\"";
2
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../modules/compass/prompts/system.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,m/BAuB+D,CAAA"}
@@ -21,4 +21,5 @@ Rules:
21
21
  5. Include assumptions, invalidation signals, and open questions.
22
22
  6. Do not recommend implementation details beyond product-level guidance.
23
23
  7. Return only valid JSON matching the requested schema.
24
- 8. When no analytics/support data is connected, always state: "No direct user signal connected."`
24
+ 8. When no analytics/support data is connected, always state: "No direct user signal connected."`;
25
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../../modules/compass/prompts/system.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;iGAuB4D,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { OracleClient } from "../shared/types.js";
2
+ import type { CompassProposalInput, CompassProposalResult, CompassOutcomeInput, CompassOutcomeResultPayload } from "./types.js";
3
+ /**
4
+ * Stage a Compass-generated artifact as a Chronicle proposal.
5
+ *
6
+ * Writes to .chronicle/proposals/ ONLY via oracle.propose().
7
+ * Never calls oracle.commit(). Human must approve.
8
+ */
9
+ export declare function stageProposal(input: CompassProposalInput, oracle: OracleClient): Promise<CompassProposalResult>;
10
+ /**
11
+ * Stage an outcome update for a prior product bet or pathway.
12
+ * Creates a new proposal that supersedes the original entry.
13
+ */
14
+ export declare function stageOutcome(input: CompassOutcomeInput, oracle: OracleClient): Promise<CompassOutcomeResultPayload>;
15
+ //# sourceMappingURL=propose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../../modules/compass/propose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EACV,oBAAoB,EAAE,qBAAqB,EAC3C,mBAAmB,EAAE,2BAA2B,EAEjD,MAAM,YAAY,CAAA;AAEnB;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,qBAAqB,CAAC,CA6BhC;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,2BAA2B,CAAC,CAwCtC"}