@balpal4495/quorum 3.0.3 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/commands/compass.js +4 -4
- package/bin/shared/llm.js +2 -2
- 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,177 @@
|
|
|
1
|
+
import { promises as fs } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { entryText } from "../shared/types.js";
|
|
4
|
+
import { coverage as runCoverage } from "./coverage.js";
|
|
5
|
+
function extractModule(filePath) {
|
|
6
|
+
const normalised = filePath.replace(/\\/g, "/").replace(/^\/+/, "");
|
|
7
|
+
const stripped = normalised.replace(/^modules\//, "");
|
|
8
|
+
const parts = stripped.split("/");
|
|
9
|
+
return parts.length === 1 ? "(root)" : parts[0];
|
|
10
|
+
}
|
|
11
|
+
function mermaidSafe(str) {
|
|
12
|
+
return str.replace(/[^a-zA-Z0-9_]/g, "_");
|
|
13
|
+
}
|
|
14
|
+
function riskClass(pct) {
|
|
15
|
+
if (pct === 0)
|
|
16
|
+
return "high";
|
|
17
|
+
if (pct < 50)
|
|
18
|
+
return "medium";
|
|
19
|
+
return "good";
|
|
20
|
+
}
|
|
21
|
+
function riskLabel(pct) {
|
|
22
|
+
if (pct === 0)
|
|
23
|
+
return "high";
|
|
24
|
+
if (pct < 50)
|
|
25
|
+
return "medium";
|
|
26
|
+
return "low";
|
|
27
|
+
}
|
|
28
|
+
function isoWeekKey(date) {
|
|
29
|
+
const d = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
|
|
30
|
+
const day = d.getUTCDay() || 7;
|
|
31
|
+
d.setUTCDate(d.getUTCDate() + 4 - day);
|
|
32
|
+
const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
|
|
33
|
+
const week = Math.ceil(((d.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);
|
|
34
|
+
return `${d.getUTCFullYear()}-W${String(week).padStart(2, "0")}`;
|
|
35
|
+
}
|
|
36
|
+
async function readCommittedEntries(chronicleDir) {
|
|
37
|
+
const committedDir = path.join(chronicleDir, "committed");
|
|
38
|
+
let files;
|
|
39
|
+
try {
|
|
40
|
+
files = await fs.readdir(committedDir);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const entries = [];
|
|
46
|
+
for (const file of files) {
|
|
47
|
+
if (!file.endsWith(".json"))
|
|
48
|
+
continue;
|
|
49
|
+
try {
|
|
50
|
+
const raw = await fs.readFile(path.join(committedDir, file), "utf8");
|
|
51
|
+
entries.push(JSON.parse(raw));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// skip malformed
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return entries;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Generate a PR-level Chronicle coverage map as a markdown string ready to
|
|
61
|
+
* post as a PR comment.
|
|
62
|
+
*
|
|
63
|
+
* Produces three zones:
|
|
64
|
+
* 1. Coverage table — all modules with coverage %, entry count, file count,
|
|
65
|
+
* PR delta, and risk. Changed modules are bolded.
|
|
66
|
+
* 2. Heatmap diagram — Chronicle → modules, nodes coloured by risk level,
|
|
67
|
+
* labels show coverage % and change count in one visual.
|
|
68
|
+
* 3. Chronicle context — entries for touched modules only.
|
|
69
|
+
*
|
|
70
|
+
* Deterministic — no LLM required. Pass changedFiles from `git diff --name-only`.
|
|
71
|
+
*/
|
|
72
|
+
export async function reviewContext(changedFiles, chronicleDir, codebasePath) {
|
|
73
|
+
const filtered = changedFiles.filter(f => f.trim().length > 0);
|
|
74
|
+
if (filtered.length === 0)
|
|
75
|
+
return "<!-- sentinel: no changed files -->";
|
|
76
|
+
const [report, allEntries] = await Promise.all([
|
|
77
|
+
runCoverage(chronicleDir, codebasePath),
|
|
78
|
+
readCommittedEntries(chronicleDir),
|
|
79
|
+
]);
|
|
80
|
+
// Count changed files per module
|
|
81
|
+
const changedByModule = new Map();
|
|
82
|
+
for (const file of filtered) {
|
|
83
|
+
const mod = extractModule(file);
|
|
84
|
+
changedByModule.set(mod, (changedByModule.get(mod) ?? 0) + 1);
|
|
85
|
+
}
|
|
86
|
+
// Build per-module stats from coverage report
|
|
87
|
+
const moduleStats = new Map();
|
|
88
|
+
for (const f of report.coverageByFile) {
|
|
89
|
+
const mod = extractModule(f.file);
|
|
90
|
+
const stat = moduleStats.get(mod) ?? {
|
|
91
|
+
name: mod, totalFiles: 0, coveredFiles: 0,
|
|
92
|
+
entryIds: [], changedFiles: changedByModule.get(mod) ?? 0, percentage: 0,
|
|
93
|
+
};
|
|
94
|
+
stat.totalFiles++;
|
|
95
|
+
if (f.covered) {
|
|
96
|
+
stat.coveredFiles++;
|
|
97
|
+
for (const id of f.entryIds) {
|
|
98
|
+
if (!stat.entryIds.includes(id))
|
|
99
|
+
stat.entryIds.push(id);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
moduleStats.set(mod, stat);
|
|
103
|
+
}
|
|
104
|
+
// Include modules only referenced by changedFiles but not in codebase scan
|
|
105
|
+
for (const [mod, count] of changedByModule) {
|
|
106
|
+
if (!moduleStats.has(mod)) {
|
|
107
|
+
moduleStats.set(mod, {
|
|
108
|
+
name: mod, totalFiles: count, coveredFiles: 0,
|
|
109
|
+
entryIds: [], changedFiles: count, percentage: 0,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
for (const stat of moduleStats.values()) {
|
|
114
|
+
stat.percentage = stat.totalFiles === 0
|
|
115
|
+
? 0
|
|
116
|
+
: Math.round((stat.coveredFiles / stat.totalFiles) * 100);
|
|
117
|
+
}
|
|
118
|
+
const allModules = [...moduleStats.values()].sort((a, b) => a.name === "(root)" ? 1 : b.name === "(root)" ? -1 : a.name.localeCompare(b.name));
|
|
119
|
+
const touchedModules = allModules.filter(m => m.changedFiles > 0);
|
|
120
|
+
const lines = [];
|
|
121
|
+
const week = isoWeekKey(new Date());
|
|
122
|
+
const chronicleIsEmpty = allEntries.length === 0;
|
|
123
|
+
// ── Header ────────────────────────────────────────────────────────────────
|
|
124
|
+
lines.push(`## Sentinel — Chronicle Coverage Map — ${week}`);
|
|
125
|
+
lines.push("");
|
|
126
|
+
if (chronicleIsEmpty) {
|
|
127
|
+
lines.push("> **Chronicle has no entries yet.** Every module shows as uncovered because this project has no documented knowledge. " +
|
|
128
|
+
"The modules touched by this PR are a good starting point — run `oracle.propose()` after this lands to begin building Chronicle.");
|
|
129
|
+
lines.push("");
|
|
130
|
+
}
|
|
131
|
+
// ── Coverage table ────────────────────────────────────────────────────────
|
|
132
|
+
lines.push("| Module | Coverage | Entries | Files | PR Changes | Risk |");
|
|
133
|
+
lines.push("|--------|----------|---------|-------|------------|------|");
|
|
134
|
+
for (const stat of allModules) {
|
|
135
|
+
const name = stat.changedFiles > 0 ? `**${stat.name}/**` : `${stat.name}/`;
|
|
136
|
+
const pct = `${stat.percentage}%`;
|
|
137
|
+
const changed = stat.changedFiles > 0 ? `**${stat.changedFiles} files**` : "—";
|
|
138
|
+
lines.push(`| ${name} | ${pct} | ${stat.entryIds.length} | ${stat.totalFiles} | ${changed} | ${riskLabel(stat.percentage)} |`);
|
|
139
|
+
}
|
|
140
|
+
lines.push("");
|
|
141
|
+
// ── Heatmap diagram ───────────────────────────────────────────────────────
|
|
142
|
+
lines.push("```mermaid");
|
|
143
|
+
lines.push("flowchart TD");
|
|
144
|
+
lines.push(" classDef high fill:#fca5a5,stroke:#dc2626");
|
|
145
|
+
lines.push(" classDef medium fill:#fde68a,stroke:#d97706");
|
|
146
|
+
lines.push(" classDef good fill:#bbf7d0,stroke:#16a34a");
|
|
147
|
+
lines.push(" Chronicle[(Chronicle)]");
|
|
148
|
+
for (const stat of allModules) {
|
|
149
|
+
const nodeId = mermaidSafe(stat.name);
|
|
150
|
+
const changed = stat.changedFiles > 0 ? ` — ${stat.changedFiles} changed` : "";
|
|
151
|
+
const label = `${stat.name} — ${stat.percentage}%${changed}`;
|
|
152
|
+
const cls = riskClass(stat.percentage);
|
|
153
|
+
lines.push(` Chronicle --> ${nodeId}["${label}"]:::${cls}`);
|
|
154
|
+
}
|
|
155
|
+
lines.push("```");
|
|
156
|
+
lines.push("");
|
|
157
|
+
// ── Chronicle context for touched modules ─────────────────────────────────
|
|
158
|
+
const touchedWithEntries = touchedModules.filter(m => m.entryIds.length > 0);
|
|
159
|
+
if (touchedWithEntries.length > 0) {
|
|
160
|
+
lines.push("### Chronicle context for changed modules");
|
|
161
|
+
lines.push("");
|
|
162
|
+
for (const stat of touchedWithEntries) {
|
|
163
|
+
lines.push(`**${stat.name}/**`);
|
|
164
|
+
const relevant = allEntries.filter(e => stat.entryIds.includes(e.id));
|
|
165
|
+
for (const entry of relevant) {
|
|
166
|
+
lines.push(`- \`[${entry.id.slice(0, 8)}]\` ${entryText(entry)}`);
|
|
167
|
+
lines.push(` *${entry.status} — confidence ${entry.confidence.toFixed(2)}*`);
|
|
168
|
+
}
|
|
169
|
+
lines.push("");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// ── Footer ────────────────────────────────────────────────────────────────
|
|
173
|
+
lines.push("---");
|
|
174
|
+
lines.push("*Risk: high = 0% coverage, medium = 1-49%, low = 50%+*");
|
|
175
|
+
return lines.join("\n");
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../modules/sentinel/review.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { LLMProvider, OracleClient } from "./shared/types.js";
|
|
2
|
+
import type { JuryInput, JuryOutput } from "./jury/types.js";
|
|
3
|
+
import type { CouncilInput, CouncilOutput, CouncilModels } from "./council/types.js";
|
|
4
|
+
import type { AdvisorOutput } from "./advisor/types.js";
|
|
5
|
+
import type { Compass } from "./compass/types.js";
|
|
6
|
+
export interface SetupOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Injectable LLM provider.
|
|
9
|
+
* All modules that need an LLM receive this function.
|
|
10
|
+
* Ignored by Oracle (which has no LLM dependency).
|
|
11
|
+
*/
|
|
12
|
+
llm: LLMProvider;
|
|
13
|
+
/**
|
|
14
|
+
* Root directory for Chronicle data.
|
|
15
|
+
* Default: ".chronicle" (relative to process.cwd())
|
|
16
|
+
*/
|
|
17
|
+
chronicleDir?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Model overrides for each reasoning step.
|
|
20
|
+
* If omitted, the LLM provider's default model is used for all steps.
|
|
21
|
+
*/
|
|
22
|
+
models?: {
|
|
23
|
+
jury?: string;
|
|
24
|
+
council?: CouncilModels;
|
|
25
|
+
compass?: {
|
|
26
|
+
brief?: string;
|
|
27
|
+
pathways?: string;
|
|
28
|
+
bets?: string;
|
|
29
|
+
score?: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Root directory for scanning source files (used by Compass).
|
|
34
|
+
* Default: process.cwd()
|
|
35
|
+
*/
|
|
36
|
+
rootDir?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Pre-warm the local ONNX embedder during setup so the first query
|
|
39
|
+
* is not slow. Set to false to skip (e.g. in test environments).
|
|
40
|
+
* Default: true
|
|
41
|
+
*/
|
|
42
|
+
warmEmbedder?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Swap the default embedder (Xenova all-MiniLM-L6-v2) for your own.
|
|
45
|
+
* Must return a vector of consistent dimension.
|
|
46
|
+
*/
|
|
47
|
+
embedder?: (text: string) => Promise<number[]>;
|
|
48
|
+
}
|
|
49
|
+
export interface Modules {
|
|
50
|
+
/**
|
|
51
|
+
* Fully wired OracleClient.
|
|
52
|
+
* Use oracle.query() to retrieve evidence.
|
|
53
|
+
* Use oracle.propose() + oracle.commit() for the human-gated write path.
|
|
54
|
+
*/
|
|
55
|
+
oracle: OracleClient;
|
|
56
|
+
/**
|
|
57
|
+
* Evaluate a proposed design against Oracle evidence.
|
|
58
|
+
* Returns a confidence score and the Council brief for the next step.
|
|
59
|
+
*/
|
|
60
|
+
evaluate: (input: Omit<JuryInput, never>) => Promise<JuryOutput>;
|
|
61
|
+
/**
|
|
62
|
+
* Run the full Council deliberation pipeline.
|
|
63
|
+
* Proposes the verdict to Oracle automatically — a human must call
|
|
64
|
+
* oracle.commit(proposalId) to index it into Chronicle.
|
|
65
|
+
*/
|
|
66
|
+
deliberate: (input: Omit<CouncilInput, "jury_output"> & {
|
|
67
|
+
jury_output: JuryOutput;
|
|
68
|
+
}) => Promise<CouncilOutput>;
|
|
69
|
+
/**
|
|
70
|
+
* Ask the Advisor a plain-language question.
|
|
71
|
+
* Queries Oracle automatically, synthesises Chronicle evidence into a
|
|
72
|
+
* human-readable answer, and retries internally until the answer meets
|
|
73
|
+
* the confidence threshold (≥ 0.7, no blockers) or the retry budget runs out.
|
|
74
|
+
*/
|
|
75
|
+
ask: (question: string) => Promise<AdvisorOutput>;
|
|
76
|
+
/**
|
|
77
|
+
* Product-direction module.
|
|
78
|
+
* Synthesises Chronicle memory and current codebase behaviour into
|
|
79
|
+
* pathways, bets, briefs, and opportunities.
|
|
80
|
+
* All writes go through oracle.propose() — never auto-committed.
|
|
81
|
+
*/
|
|
82
|
+
compass: Compass;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Wire up all three modules from a single call.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* import { setup } from "./modules/setup.js"
|
|
89
|
+
*
|
|
90
|
+
* const { oracle, evaluate, deliberate } = await setup({
|
|
91
|
+
* llm: myLLMProvider,
|
|
92
|
+
* })
|
|
93
|
+
*
|
|
94
|
+
* const evidence = await oracle.query("authentication patterns")
|
|
95
|
+
* const jury = await evaluate({ outcome, design, evidence })
|
|
96
|
+
* const verdict = await deliberate({ outcome, design, evidence, jury_output: jury })
|
|
97
|
+
*
|
|
98
|
+
* if (verdict.satisfied) {
|
|
99
|
+
* // → human gate → Executor
|
|
100
|
+
* }
|
|
101
|
+
*/
|
|
102
|
+
export declare function setup(options: SetupOptions): Promise<Modules>;
|
|
103
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../modules/setup.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAY,MAAM,iBAAiB,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAe,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGvD,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,oBAAoB,CAAA;AAEvE,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,GAAG,EAAE,WAAW,CAAA;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,aAAa,CAAA;QACvB,OAAO,CAAC,EAAE;YACR,KAAK,CAAC,EAAE,MAAM,CAAA;YACd,QAAQ,CAAC,EAAE,MAAM,CAAA;YACjB,IAAI,CAAC,EAAE,MAAM,CAAA;YACb,KAAK,CAAC,EAAE,MAAM,CAAA;SACf,CAAA;KACF,CAAA;IAED;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,MAAM,EAAE,YAAY,CAAA;IAEpB;;;OAGG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAEhE;;;;OAIG;IACH,UAAU,EAAE,CACV,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG;QAAE,WAAW,EAAE,UAAU,CAAA;KAAE,KACnE,OAAO,CAAC,aAAa,CAAC,CAAA;IAE3B;;;;;OAKG;IACH,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IAEjD;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CA6EnE"}
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
import { createOracleClient } from "./oracle/index.js";
|
|
4
|
+
import { xenovaEmbed, warmEmbedder } from "./oracle/adapters/xenova-embedder.js";
|
|
5
|
+
import { createLanceDBStore } from "./oracle/adapters/lance-db.js";
|
|
6
|
+
import { evaluate } from "./jury/evaluate.js";
|
|
7
|
+
import { deliberate } from "./council/deliberate.js";
|
|
8
|
+
import { ask as advisorAsk } from "./advisor/ask.js";
|
|
9
|
+
import { entryText } from "./shared/types.js";
|
|
10
|
+
import { createCompass } from "./compass/create.js";
|
|
11
|
+
import { defaultSources } from "./compass/sources/index.js";
|
|
12
|
+
/**
|
|
13
|
+
* Wire up all three modules from a single call.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* import { setup } from "./modules/setup.js"
|
|
17
|
+
*
|
|
18
|
+
* const { oracle, evaluate, deliberate } = await setup({
|
|
19
|
+
* llm: myLLMProvider,
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* const evidence = await oracle.query("authentication patterns")
|
|
23
|
+
* const jury = await evaluate({ outcome, design, evidence })
|
|
24
|
+
* const verdict = await deliberate({ outcome, design, evidence, jury_output: jury })
|
|
25
|
+
*
|
|
26
|
+
* if (verdict.satisfied) {
|
|
27
|
+
* // → human gate → Executor
|
|
28
|
+
* }
|
|
29
|
+
*/
|
|
30
|
+
export async function setup(options) {
|
|
31
|
+
const { llm, chronicleDir = ".chronicle", rootDir = process.cwd(), models = {}, warmEmbedder: shouldWarm = true, embedder = xenovaEmbed, } = options;
|
|
32
|
+
// Ensure Chronicle directories exist before anything tries to write to them
|
|
33
|
+
await fs.mkdir(path.join(chronicleDir, "proposals"), { recursive: true });
|
|
34
|
+
await fs.mkdir(path.join(chronicleDir, "committed"), { recursive: true });
|
|
35
|
+
// Pre-warm the embedder if using the default (downloads model on first use)
|
|
36
|
+
if (shouldWarm && embedder === xenovaEmbed) {
|
|
37
|
+
await warmEmbedder();
|
|
38
|
+
}
|
|
39
|
+
const vectorStore = await createLanceDBStore(chronicleDir);
|
|
40
|
+
// Rebuild local index from committed entries if any are missing.
|
|
41
|
+
// This brings a fresh machine (or a post-git-pull state) up to date
|
|
42
|
+
// without requiring any manual step.
|
|
43
|
+
const committedDir = path.join(chronicleDir, "committed");
|
|
44
|
+
const committedFiles = (await fs.readdir(committedDir)).filter(f => f.endsWith(".json"));
|
|
45
|
+
if (committedFiles.length > 0) {
|
|
46
|
+
const existing = await vectorStore.getAll();
|
|
47
|
+
const existingIds = new Set(existing.map(e => e.id));
|
|
48
|
+
const missing = committedFiles.filter(f => !existingIds.has(f.replace(".json", "")));
|
|
49
|
+
if (missing.length > 0) {
|
|
50
|
+
console.log(`[Chronicle] Rebuilding index from ${missing.length} committed ${missing.length === 1 ? "entry" : "entries"}…`);
|
|
51
|
+
for (const file of missing) {
|
|
52
|
+
const raw = await fs.readFile(path.join(committedDir, file), "utf8");
|
|
53
|
+
const entry = JSON.parse(raw);
|
|
54
|
+
const embeddingText = [entryText(entry), ...entry.affected_areas, ...(entry.scope ?? [])].join(" ");
|
|
55
|
+
const vector = await embedder(embeddingText);
|
|
56
|
+
await vectorStore.upsert(entry.id, vector, entry);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const oracle = createOracleClient({
|
|
61
|
+
embedder,
|
|
62
|
+
vectorStore,
|
|
63
|
+
chronicleDir,
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
oracle,
|
|
67
|
+
evaluate: (input) => evaluate(input, { llm, model: models.jury }),
|
|
68
|
+
deliberate: (input) => deliberate(input, {
|
|
69
|
+
llm,
|
|
70
|
+
oracle,
|
|
71
|
+
models: models.council,
|
|
72
|
+
}),
|
|
73
|
+
ask: async (question) => {
|
|
74
|
+
const evidence = await oracle.query(question);
|
|
75
|
+
return advisorAsk({ question, evidence }, { llm });
|
|
76
|
+
},
|
|
77
|
+
compass: createCompass({
|
|
78
|
+
oracle,
|
|
79
|
+
llm,
|
|
80
|
+
rootDir,
|
|
81
|
+
chronicleDir,
|
|
82
|
+
sources: defaultSources(),
|
|
83
|
+
models: models.compass,
|
|
84
|
+
}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../modules/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types used across Oracle, Jury, and Council modules.
|
|
3
|
+
* These are the only types that cross module boundaries.
|
|
4
|
+
*/
|
|
5
|
+
export type Message = {
|
|
6
|
+
role: "system" | "user" | "assistant";
|
|
7
|
+
content: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Injectable LLM provider. Accepts a message array and optional model override.
|
|
11
|
+
* Returns the assistant response as a string.
|
|
12
|
+
*
|
|
13
|
+
* The modules never hardcode a provider — wire this at the application level.
|
|
14
|
+
*/
|
|
15
|
+
export type LLMProvider = (messages: Message[], model?: string) => Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Links a Chronicle entry to the unit of work that triggered it.
|
|
18
|
+
* Gives agents the "why now" context that key_insight alone cannot convey.
|
|
19
|
+
*/
|
|
20
|
+
export type WorkRef = {
|
|
21
|
+
type: "bug" | "story" | "epic" | "pr" | "spike";
|
|
22
|
+
/** Ticket number, PR reference, or branch name. e.g. "PROJ-123", "PR #4" */
|
|
23
|
+
ref?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* A durable knowledge record stored in Chronicle.
|
|
27
|
+
* This is the canonical unit of institutional memory.
|
|
28
|
+
*
|
|
29
|
+
* Schema versions:
|
|
30
|
+
* v1 (no schema_version field): key_insight is the primary text field.
|
|
31
|
+
* v2 (schema_version: 2): decision is the primary text field; key_insight is a copy
|
|
32
|
+
* of decision written for backwards compatibility. Always use entryText() to read.
|
|
33
|
+
*/
|
|
34
|
+
export type ChronicleEntry = {
|
|
35
|
+
id: string;
|
|
36
|
+
/** The core finding or decision, in one clear sentence. v2: copy of decision. */
|
|
37
|
+
key_insight: string;
|
|
38
|
+
/** File paths or system areas this entry applies to. Used by Sentinel for file matching. */
|
|
39
|
+
affected_areas: string[];
|
|
40
|
+
status: "validated" | "refuted" | "open";
|
|
41
|
+
/** 0–1. How strongly this was confirmed at write time. */
|
|
42
|
+
confidence: number;
|
|
43
|
+
/** Which module produced this entry (detective, council, executor, etc.). */
|
|
44
|
+
source_module: string;
|
|
45
|
+
/** IDs of Chronicle entries this decision was based on. */
|
|
46
|
+
evidence_cited: string[];
|
|
47
|
+
/** What actually happened when this was acted on. Added post-execution by Scribe. */
|
|
48
|
+
outcome?: string;
|
|
49
|
+
/** The unit of work that triggered this entry. Used to build SUMMARY.md temporal context. */
|
|
50
|
+
work_ref?: WorkRef;
|
|
51
|
+
timestamp: string;
|
|
52
|
+
/** Steps that must pass to confirm this decision was correct. */
|
|
53
|
+
validation_plan?: string[];
|
|
54
|
+
/** ISO date after which this entry should be re-evaluated for drift. */
|
|
55
|
+
review_after?: string;
|
|
56
|
+
/** What actually happened after the decision was acted on in production. */
|
|
57
|
+
post_merge_result?: "successful" | "bug" | "partial" | "rolled-back";
|
|
58
|
+
/** 2 = decision record format. Absent = v1 legacy entry. */
|
|
59
|
+
schema_version?: 2;
|
|
60
|
+
/** Short label for this decision. e.g. "auth/session strategy" */
|
|
61
|
+
topic?: string;
|
|
62
|
+
/** The decision itself — the primary text field in v2. Use entryText() to read. */
|
|
63
|
+
decision?: string;
|
|
64
|
+
/** Domain/category tags. Additive — does NOT replace affected_areas. e.g. ["auth", "sessions"] */
|
|
65
|
+
scope?: string[];
|
|
66
|
+
/** Approaches that were considered but not chosen. */
|
|
67
|
+
alternatives_considered?: string[];
|
|
68
|
+
/** Why the alternatives were rejected. */
|
|
69
|
+
rejected_reason?: string[];
|
|
70
|
+
/** ID of the Chronicle entry this supersedes. */
|
|
71
|
+
supersedes?: string | null;
|
|
72
|
+
/** ID of the Chronicle entry that superseded this one. */
|
|
73
|
+
superseded_by?: string | null;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Return the primary text for a Chronicle entry regardless of schema version.
|
|
77
|
+
* v2 entries use decision; v1 entries use key_insight.
|
|
78
|
+
* All callsites that render or embed entry text must use this function.
|
|
79
|
+
*
|
|
80
|
+
* Accepts any object with key_insight and optional decision — works for both
|
|
81
|
+
* full ChronicleEntry and Omit<ChronicleEntry, "id" | "timestamp"> from propose().
|
|
82
|
+
*/
|
|
83
|
+
export declare function entryText(entry: {
|
|
84
|
+
key_insight: string;
|
|
85
|
+
decision?: string;
|
|
86
|
+
}): string;
|
|
87
|
+
/**
|
|
88
|
+
* A Chronicle entry enriched with its retrieval score and relevance tier.
|
|
89
|
+
* Returned by Oracle.query().
|
|
90
|
+
*
|
|
91
|
+
* Tiers indicate relevance within the result set:
|
|
92
|
+
* primary — top ~30%: directly answers the query, should be foregrounded
|
|
93
|
+
* supporting — middle ~40%: contextually relevant, useful but not central
|
|
94
|
+
* background — bottom ~30%: loosely related, de-emphasise but do not hide
|
|
95
|
+
*/
|
|
96
|
+
export type OracleResult = ChronicleEntry & {
|
|
97
|
+
score: number;
|
|
98
|
+
tier: "primary" | "supporting" | "background";
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Returned by oracle.propose() when a high-similarity entry already exists.
|
|
102
|
+
* The human gate should surface this before approving the commit.
|
|
103
|
+
*/
|
|
104
|
+
export type SimilarityWarning = {
|
|
105
|
+
entry: ChronicleEntry;
|
|
106
|
+
score: number;
|
|
107
|
+
/** potential-duplicate: near-identical insight. potential-supersession: likely a correction. */
|
|
108
|
+
warning: "potential-duplicate" | "potential-supersession";
|
|
109
|
+
};
|
|
110
|
+
export type QueryOptions = {
|
|
111
|
+
statusFilter?: Array<"validated" | "refuted" | "open">;
|
|
112
|
+
/** Maximum results to return. Default: 10. */
|
|
113
|
+
limit?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Minimum RRF score to include a result.
|
|
116
|
+
* Results below this threshold are dropped entirely — better to return nothing than noise.
|
|
117
|
+
* Default: 0.031.
|
|
118
|
+
*/
|
|
119
|
+
scoreThreshold?: number;
|
|
120
|
+
};
|
|
121
|
+
/** Per-file result from sentinel.coverage(). */
|
|
122
|
+
export type FileCoverage = {
|
|
123
|
+
file: string;
|
|
124
|
+
covered: boolean;
|
|
125
|
+
/** IDs of Chronicle entries that reference this file in affected_areas. */
|
|
126
|
+
entryIds: string[];
|
|
127
|
+
};
|
|
128
|
+
/** Returned by sentinel.coverage(). */
|
|
129
|
+
export type CoverageReport = {
|
|
130
|
+
totalFiles: number;
|
|
131
|
+
coveredFiles: number;
|
|
132
|
+
uncoveredFiles: string[];
|
|
133
|
+
coverageByFile: FileCoverage[];
|
|
134
|
+
/** Integer 0–100. Treat as directional signal, not a precision metric. */
|
|
135
|
+
percentage: number;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Advisory result for a single Chronicle entry from sentinel.detectDrift().
|
|
139
|
+
* Never auto-updates an entry — human reviews the flag and decides.
|
|
140
|
+
*/
|
|
141
|
+
export type DriftFlag = {
|
|
142
|
+
entryId: string;
|
|
143
|
+
keyInsight: string;
|
|
144
|
+
affectedFiles: string[];
|
|
145
|
+
stillValid: boolean;
|
|
146
|
+
/** 0–1 confidence in the LLM's verdict. Low confidence = needs closer human review. */
|
|
147
|
+
confidence: number;
|
|
148
|
+
reasoning: string;
|
|
149
|
+
};
|
|
150
|
+
/** Returned by sentinel.detectDrift(). */
|
|
151
|
+
export type DriftReport = {
|
|
152
|
+
checkedAt: string;
|
|
153
|
+
/** Entries the LLM judged as no longer accurate — review and consider updating status. */
|
|
154
|
+
flags: DriftFlag[];
|
|
155
|
+
/** Entries the LLM judged as still current. */
|
|
156
|
+
confirmed: DriftFlag[];
|
|
157
|
+
/** Entry IDs skipped because no affected_areas value resolved to a local file. */
|
|
158
|
+
skipped: string[];
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* The public interface any module uses to interact with Chronicle.
|
|
162
|
+
* Inject this into Jury and Council — do not couple them to Oracle internals.
|
|
163
|
+
*/
|
|
164
|
+
export interface OracleClient {
|
|
165
|
+
query: (text: string, options?: QueryOptions) => Promise<OracleResult[]>;
|
|
166
|
+
propose: (entry: Omit<ChronicleEntry, "id" | "timestamp">) => Promise<{
|
|
167
|
+
proposalId: string;
|
|
168
|
+
similarity?: SimilarityWarning;
|
|
169
|
+
}>;
|
|
170
|
+
/** Called after human approval. Indexes the proposal into Chronicle. */
|
|
171
|
+
commit: (proposalId: string) => Promise<ChronicleEntry>;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../modules/shared/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types used across Oracle, Jury, and Council modules.
|
|
3
|
+
* These are the only types that cross module boundaries.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Return the primary text for a Chronicle entry regardless of schema version.
|
|
7
|
+
* v2 entries use decision; v1 entries use key_insight.
|
|
8
|
+
* All callsites that render or embed entry text must use this function.
|
|
9
|
+
*
|
|
10
|
+
* Accepts any object with key_insight and optional decision — works for both
|
|
11
|
+
* full ChronicleEntry and Omit<ChronicleEntry, "id" | "timestamp"> from propose().
|
|
12
|
+
*/
|
|
13
|
+
export function entryText(entry) {
|
|
14
|
+
return entry.decision ?? entry.key_insight;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../modules/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkFH;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiD;IACzE,OAAO,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAA;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@balpal4495/quorum",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Git-backed memory and design review for AI coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,16 +24,21 @@
|
|
|
24
24
|
"bin": {
|
|
25
25
|
"quorum": "bin/quorum.js"
|
|
26
26
|
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist/**",
|
|
29
|
+
"bin/**"
|
|
30
|
+
],
|
|
27
31
|
"exports": {
|
|
28
|
-
".": "./
|
|
29
|
-
"./oracle": "./
|
|
30
|
-
"./advisor": "./
|
|
31
|
-
"./jury": "./
|
|
32
|
-
"./council": "./
|
|
33
|
-
"./sentinel": "./
|
|
34
|
-
"./compass": "./
|
|
32
|
+
".": "./dist/setup.js",
|
|
33
|
+
"./oracle": "./dist/oracle/index.js",
|
|
34
|
+
"./advisor": "./dist/advisor/index.js",
|
|
35
|
+
"./jury": "./dist/jury/index.js",
|
|
36
|
+
"./council": "./dist/council/index.js",
|
|
37
|
+
"./sentinel": "./dist/sentinel/index.js",
|
|
38
|
+
"./compass": "./dist/compass/index.js"
|
|
35
39
|
},
|
|
36
40
|
"scripts": {
|
|
41
|
+
"build": "tsc -p tsconfig.build.json",
|
|
37
42
|
"test": "vitest run modules/ evals/",
|
|
38
43
|
"test:watch": "vitest modules/",
|
|
39
44
|
"typecheck": "tsc --noEmit"
|