@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.
- package/bin/commands/compass.js +31 -12
- package/dist/advisor/ask.d.ts +13 -0
- package/dist/advisor/ask.d.ts.map +1 -0
- package/dist/advisor/ask.js +67 -0
- package/dist/advisor/ask.js.map +1 -0
- package/dist/advisor/index.d.ts +3 -0
- package/dist/advisor/index.d.ts.map +1 -0
- package/dist/advisor/index.js +2 -0
- package/dist/advisor/index.js.map +1 -0
- package/dist/advisor/prompt.d.ts +5 -0
- package/dist/advisor/prompt.d.ts.map +1 -0
- package/{modules/advisor/prompt.ts → dist/advisor/prompt.js} +22 -26
- package/dist/advisor/prompt.js.map +1 -0
- package/dist/advisor/types.d.ts +23 -0
- package/dist/advisor/types.d.ts.map +1 -0
- package/dist/advisor/types.js +2 -0
- package/dist/advisor/types.js.map +1 -0
- package/dist/compass/behavior.d.ts +4 -0
- package/dist/compass/behavior.d.ts.map +1 -0
- package/dist/compass/behavior.js +138 -0
- package/dist/compass/behavior.js.map +1 -0
- package/dist/compass/create.d.ts +3 -0
- package/dist/compass/create.d.ts.map +1 -0
- package/dist/compass/create.js +289 -0
- package/dist/compass/create.js.map +1 -0
- package/dist/compass/evidence/collect.d.ts +11 -0
- package/dist/compass/evidence/collect.d.ts.map +1 -0
- package/dist/compass/evidence/collect.js +86 -0
- package/dist/compass/evidence/collect.js.map +1 -0
- package/dist/compass/index.d.ts +8 -0
- package/dist/compass/index.d.ts.map +1 -0
- package/dist/compass/index.js +8 -0
- package/dist/compass/index.js.map +1 -0
- package/dist/compass/prompts/index.d.ts +28 -0
- package/dist/compass/prompts/index.d.ts.map +1 -0
- package/{modules/compass/prompts/index.ts → dist/compass/prompts/index.js} +13 -38
- package/dist/compass/prompts/index.js.map +1 -0
- package/dist/compass/prompts/system.d.ts +2 -0
- package/dist/compass/prompts/system.d.ts.map +1 -0
- package/{modules/compass/prompts/system.ts → dist/compass/prompts/system.js} +2 -1
- package/dist/compass/prompts/system.js.map +1 -0
- package/dist/compass/propose.d.ts +15 -0
- package/dist/compass/propose.d.ts.map +1 -0
- package/dist/compass/propose.js +128 -0
- package/dist/compass/propose.js.map +1 -0
- package/dist/compass/schemas.d.ts +1271 -0
- package/dist/compass/schemas.d.ts.map +1 -0
- package/dist/compass/schemas.js +113 -0
- package/dist/compass/schemas.js.map +1 -0
- package/dist/compass/score.d.ts +25 -0
- package/dist/compass/score.d.ts.map +1 -0
- package/dist/compass/score.js +89 -0
- package/dist/compass/score.js.map +1 -0
- package/dist/compass/sources/index.d.ts +9 -0
- package/dist/compass/sources/index.d.ts.map +1 -0
- package/dist/compass/sources/index.js +408 -0
- package/dist/compass/sources/index.js.map +1 -0
- package/dist/compass/types.d.ts +334 -0
- package/dist/compass/types.d.ts.map +1 -0
- package/dist/compass/types.js +2 -0
- package/dist/compass/types.js.map +1 -0
- package/dist/council/advisors.d.ts +15 -0
- package/dist/council/advisors.d.ts.map +1 -0
- package/dist/council/advisors.js +46 -0
- package/dist/council/advisors.js.map +1 -0
- package/dist/council/chairman.d.ts +13 -0
- package/dist/council/chairman.d.ts.map +1 -0
- package/dist/council/chairman.js +145 -0
- package/dist/council/chairman.js.map +1 -0
- package/dist/council/deliberate.d.ts +22 -0
- package/dist/council/deliberate.d.ts.map +1 -0
- package/dist/council/deliberate.js +99 -0
- package/dist/council/deliberate.js.map +1 -0
- package/dist/council/frame.d.ts +8 -0
- package/dist/council/frame.d.ts.map +1 -0
- package/dist/council/frame.js +40 -0
- package/dist/council/frame.js.map +1 -0
- package/dist/council/index.d.ts +6 -0
- package/dist/council/index.d.ts.map +1 -0
- package/dist/council/index.js +4 -0
- package/dist/council/index.js.map +1 -0
- package/dist/council/personas.d.ts +18 -0
- package/dist/council/personas.d.ts.map +1 -0
- package/dist/council/personas.js +44 -0
- package/dist/council/personas.js.map +1 -0
- package/dist/council/reviewers.d.ts +13 -0
- package/dist/council/reviewers.d.ts.map +1 -0
- package/dist/council/reviewers.js +59 -0
- package/dist/council/reviewers.js.map +1 -0
- package/dist/council/risk.d.ts +16 -0
- package/dist/council/risk.d.ts.map +1 -0
- package/dist/council/risk.js +74 -0
- package/dist/council/risk.js.map +1 -0
- package/dist/council/types.d.ts +95 -0
- package/dist/council/types.d.ts.map +1 -0
- package/dist/council/types.js +2 -0
- package/dist/council/types.js.map +1 -0
- package/dist/jury/evaluate.d.ts +13 -0
- package/dist/jury/evaluate.d.ts.map +1 -0
- package/{modules/jury/evaluate.ts → dist/jury/evaluate.js} +60 -84
- package/dist/jury/evaluate.js.map +1 -0
- package/dist/jury/index.d.ts +6 -0
- package/dist/jury/index.d.ts.map +1 -0
- package/dist/jury/index.js +4 -0
- package/dist/jury/index.js.map +1 -0
- package/dist/jury/preflight.d.ts +26 -0
- package/dist/jury/preflight.d.ts.map +1 -0
- package/dist/jury/preflight.js +71 -0
- package/dist/jury/preflight.js.map +1 -0
- package/dist/jury/schema.d.ts +57 -0
- package/dist/jury/schema.d.ts.map +1 -0
- package/dist/jury/schema.js +21 -0
- package/dist/jury/schema.js.map +1 -0
- package/dist/jury/types.d.ts +47 -0
- package/dist/jury/types.d.ts.map +1 -0
- package/dist/jury/types.js +2 -0
- package/dist/jury/types.js.map +1 -0
- package/dist/oracle/adapters/lance-db.d.ts +15 -0
- package/dist/oracle/adapters/lance-db.d.ts.map +1 -0
- package/dist/oracle/adapters/lance-db.js +68 -0
- package/dist/oracle/adapters/lance-db.js.map +1 -0
- package/dist/oracle/adapters/xenova-embedder.d.ts +21 -0
- package/dist/oracle/adapters/xenova-embedder.d.ts.map +1 -0
- package/dist/oracle/adapters/xenova-embedder.js +36 -0
- package/dist/oracle/adapters/xenova-embedder.js.map +1 -0
- package/dist/oracle/bm25.d.ts +20 -0
- package/dist/oracle/bm25.d.ts.map +1 -0
- package/dist/oracle/bm25.js +82 -0
- package/dist/oracle/bm25.js.map +1 -0
- package/dist/oracle/index.d.ts +21 -0
- package/dist/oracle/index.d.ts.map +1 -0
- package/dist/oracle/index.js +25 -0
- package/dist/oracle/index.js.map +1 -0
- package/dist/oracle/log.d.ts +6 -0
- package/dist/oracle/log.d.ts.map +1 -0
- package/dist/oracle/log.js +12 -0
- package/dist/oracle/log.js.map +1 -0
- package/dist/oracle/propose.d.ts +25 -0
- package/dist/oracle/propose.d.ts.map +1 -0
- package/dist/oracle/propose.js +133 -0
- package/dist/oracle/propose.js.map +1 -0
- package/dist/oracle/query.d.ts +17 -0
- package/dist/oracle/query.d.ts.map +1 -0
- package/dist/oracle/query.js +106 -0
- package/dist/oracle/query.js.map +1 -0
- package/dist/oracle/summary.d.ts +11 -0
- package/dist/oracle/summary.d.ts.map +1 -0
- package/dist/oracle/summary.js +102 -0
- package/dist/oracle/summary.js.map +1 -0
- package/dist/oracle/types.d.ts +31 -0
- package/dist/oracle/types.d.ts.map +1 -0
- package/dist/oracle/types.js +2 -0
- package/dist/oracle/types.js.map +1 -0
- package/dist/sentinel/assert.d.ts +28 -0
- package/dist/sentinel/assert.d.ts.map +1 -0
- package/dist/sentinel/assert.js +63 -0
- package/dist/sentinel/assert.js.map +1 -0
- package/dist/sentinel/coverage.d.ts +14 -0
- package/dist/sentinel/coverage.d.ts.map +1 -0
- package/dist/sentinel/coverage.js +96 -0
- package/dist/sentinel/coverage.js.map +1 -0
- package/dist/sentinel/drift.d.ts +12 -0
- package/dist/sentinel/drift.d.ts.map +1 -0
- package/dist/sentinel/drift.js +149 -0
- package/dist/sentinel/drift.js.map +1 -0
- package/dist/sentinel/index.d.ts +7 -0
- package/dist/sentinel/index.d.ts.map +1 -0
- package/dist/sentinel/index.js +5 -0
- package/dist/sentinel/index.js.map +1 -0
- package/dist/sentinel/review.d.ts +15 -0
- package/dist/sentinel/review.d.ts.map +1 -0
- package/dist/sentinel/review.js +177 -0
- package/dist/sentinel/review.js.map +1 -0
- package/dist/setup.d.ts +103 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +87 -0
- package/dist/setup.js.map +1 -0
- package/dist/shared/types.d.ts +173 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +16 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +13 -8
- package/.github/copilot-instructions.md +0 -117
- package/CLAUDE.md +0 -146
- package/GEMINI.md +0 -73
- package/SETUP.md +0 -264
- package/evals/__tests__/eval.test.ts +0 -31
- package/evals/cases/auth_hs256_rejected.json +0 -46
- package/evals/cases/auth_rs256_valid.json +0 -30
- package/evals/cases/cache_missing_lock.json +0 -31
- package/evals/cases/db_naive_not_null.json +0 -32
- package/evals/cases/logging_pii_leak.json +0 -32
- package/evals/cases/migration_with_rollback.json +0 -43
- package/evals/cases/no_evidence_novel_design.json +0 -16
- package/evals/cases/payment_no_idempotency.json +0 -33
- package/evals/cases/redis_session_rejected.json +0 -32
- package/evals/cases/safe_refactor.json +0 -17
- package/evals/runner.ts +0 -226
- package/modules/AGENTS.md +0 -78
- package/modules/CLAUDE.md +0 -93
- package/modules/README.md +0 -504
- package/modules/advisor/ask.ts +0 -87
- package/modules/advisor/index.ts +0 -2
- package/modules/advisor/types.ts +0 -26
- package/modules/compass/behavior.ts +0 -161
- package/modules/compass/create.ts +0 -365
- package/modules/compass/evidence/collect.ts +0 -109
- package/modules/compass/index.ts +0 -7
- package/modules/compass/propose.ts +0 -152
- package/modules/compass/schemas.ts +0 -121
- package/modules/compass/score.ts +0 -77
- package/modules/compass/sources/index.ts +0 -413
- package/modules/compass/types.ts +0 -431
- package/modules/council/advisors.ts +0 -71
- package/modules/council/chairman.ts +0 -183
- package/modules/council/deliberate.ts +0 -141
- package/modules/council/frame.ts +0 -54
- package/modules/council/index.ts +0 -9
- package/modules/council/personas.ts +0 -57
- package/modules/council/reviewers.ts +0 -82
- package/modules/council/risk.ts +0 -89
- package/modules/council/types.ts +0 -107
- package/modules/jury/index.ts +0 -5
- package/modules/jury/preflight.ts +0 -101
- package/modules/jury/schema.ts +0 -24
- package/modules/jury/types.ts +0 -50
- package/modules/oracle/adapters/lance-db.ts +0 -81
- package/modules/oracle/adapters/xenova-embedder.ts +0 -43
- package/modules/oracle/bm25.ts +0 -92
- package/modules/oracle/index.ts +0 -36
- package/modules/oracle/log.ts +0 -15
- package/modules/oracle/propose.ts +0 -164
- package/modules/oracle/query.ts +0 -146
- package/modules/oracle/summary.ts +0 -116
- package/modules/oracle/types.ts +0 -32
- package/modules/sentinel/assert.ts +0 -95
- package/modules/sentinel/coverage.ts +0 -106
- package/modules/sentinel/drift.ts +0 -163
- package/modules/sentinel/index.ts +0 -6
- package/modules/sentinel/review.ts +0 -208
- package/modules/setup.ts +0 -202
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"}
|