@itsshadowai/refinery 0.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.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +228 -0
  3. package/coral/agents/claim-scout/coral-agent.toml +23 -0
  4. package/coral/agents/decision-synthesizer/coral-agent.toml +23 -0
  5. package/coral/agents/evidence-auditor/coral-agent.toml +23 -0
  6. package/coral/agents/memory-cartographer/coral-agent.toml +23 -0
  7. package/coral/agents/proposal-editor/coral-agent.toml +23 -0
  8. package/coral/agents/run-worker.sh +19 -0
  9. package/coral/refinery-config.toml +16 -0
  10. package/dist/adapters/codex-memory.d.ts +6 -0
  11. package/dist/adapters/codex-memory.js +264 -0
  12. package/dist/adapters/codex-memory.js.map +1 -0
  13. package/dist/cli.d.ts +2 -0
  14. package/dist/cli.js +671 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/coral/client.d.ts +107 -0
  17. package/dist/coral/client.js +214 -0
  18. package/dist/coral/client.js.map +1 -0
  19. package/dist/coral/definitions.d.ts +25 -0
  20. package/dist/coral/definitions.js +53 -0
  21. package/dist/coral/definitions.js.map +1 -0
  22. package/dist/coral/mcp.d.ts +17 -0
  23. package/dist/coral/mcp.js +71 -0
  24. package/dist/coral/mcp.js.map +1 -0
  25. package/dist/coral/review-conductor.d.ts +120 -0
  26. package/dist/coral/review-conductor.js +1290 -0
  27. package/dist/coral/review-conductor.js.map +1 -0
  28. package/dist/coral/smoke.d.ts +1 -0
  29. package/dist/coral/smoke.js +265 -0
  30. package/dist/coral/smoke.js.map +1 -0
  31. package/dist/coral/topology.d.ts +5 -0
  32. package/dist/coral/topology.js +15 -0
  33. package/dist/coral/topology.js.map +1 -0
  34. package/dist/coral/worker.d.ts +34 -0
  35. package/dist/coral/worker.js +671 -0
  36. package/dist/coral/worker.js.map +1 -0
  37. package/dist/core/adapter.d.ts +93 -0
  38. package/dist/core/adapter.js +112 -0
  39. package/dist/core/adapter.js.map +1 -0
  40. package/dist/core/artifacts.d.ts +93 -0
  41. package/dist/core/artifacts.js +200 -0
  42. package/dist/core/artifacts.js.map +1 -0
  43. package/dist/core/deliberation.d.ts +89 -0
  44. package/dist/core/deliberation.js +385 -0
  45. package/dist/core/deliberation.js.map +1 -0
  46. package/dist/core/errors.d.ts +26 -0
  47. package/dist/core/errors.js +50 -0
  48. package/dist/core/errors.js.map +1 -0
  49. package/dist/core/intents.d.ts +5 -0
  50. package/dist/core/intents.js +34 -0
  51. package/dist/core/intents.js.map +1 -0
  52. package/dist/core/live-review.d.ts +93 -0
  53. package/dist/core/live-review.js +269 -0
  54. package/dist/core/live-review.js.map +1 -0
  55. package/dist/core/model-client.d.ts +19 -0
  56. package/dist/core/model-client.js +45 -0
  57. package/dist/core/model-client.js.map +1 -0
  58. package/dist/core/paths.d.ts +16 -0
  59. package/dist/core/paths.js +43 -0
  60. package/dist/core/paths.js.map +1 -0
  61. package/dist/core/review.d.ts +93 -0
  62. package/dist/core/review.js +102 -0
  63. package/dist/core/review.js.map +1 -0
  64. package/dist/core/specialists/claim-scout.d.ts +2 -0
  65. package/dist/core/specialists/claim-scout.js +26 -0
  66. package/dist/core/specialists/claim-scout.js.map +1 -0
  67. package/dist/core/specialists/decision-synthesizer.d.ts +2 -0
  68. package/dist/core/specialists/decision-synthesizer.js +35 -0
  69. package/dist/core/specialists/decision-synthesizer.js.map +1 -0
  70. package/dist/core/specialists/evidence-auditor.d.ts +2 -0
  71. package/dist/core/specialists/evidence-auditor.js +35 -0
  72. package/dist/core/specialists/evidence-auditor.js.map +1 -0
  73. package/dist/core/specialists/harness.d.ts +2 -0
  74. package/dist/core/specialists/harness.js +13 -0
  75. package/dist/core/specialists/harness.js.map +1 -0
  76. package/dist/core/specialists/index.d.ts +8 -0
  77. package/dist/core/specialists/index.js +8 -0
  78. package/dist/core/specialists/index.js.map +1 -0
  79. package/dist/core/specialists/memory-cartographer.d.ts +2 -0
  80. package/dist/core/specialists/memory-cartographer.js +33 -0
  81. package/dist/core/specialists/memory-cartographer.js.map +1 -0
  82. package/dist/core/specialists/prompt.d.ts +3 -0
  83. package/dist/core/specialists/prompt.js +25 -0
  84. package/dist/core/specialists/prompt.js.map +1 -0
  85. package/dist/core/specialists/proposal-editor.d.ts +2 -0
  86. package/dist/core/specialists/proposal-editor.js +37 -0
  87. package/dist/core/specialists/proposal-editor.js.map +1 -0
  88. package/dist/core/specialists/types.d.ts +20 -0
  89. package/dist/core/specialists/types.js +2 -0
  90. package/dist/core/specialists/types.js.map +1 -0
  91. package/dist/env.d.ts +11 -0
  92. package/dist/env.js +53 -0
  93. package/dist/env.js.map +1 -0
  94. package/dist/mcp.d.ts +9 -0
  95. package/dist/mcp.js +147 -0
  96. package/dist/mcp.js.map +1 -0
  97. package/package.json +50 -0
  98. package/skills/refinery/SKILL.md +117 -0
  99. package/skills/refinery/agents/openai.yaml +4 -0
@@ -0,0 +1,385 @@
1
+ import crypto from "node:crypto";
2
+ import { refineryReviewSchemaVersion } from "./adapter.js";
3
+ function isRecord(value) {
4
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
5
+ }
6
+ function records(value) {
7
+ return Array.isArray(value) ? value.filter(isRecord) : [];
8
+ }
9
+ function stringValue(value) {
10
+ return typeof value === "string" && value.trim() ? value.trim() : null;
11
+ }
12
+ function numberValue(value) {
13
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
14
+ }
15
+ function arrayValue(value) {
16
+ return Array.isArray(value) ? value : [];
17
+ }
18
+ function normalized(text) {
19
+ return text.toLowerCase().replace(/\s+/g, " ").trim();
20
+ }
21
+ function hashParts(parts) {
22
+ const hash = crypto.createHash("sha256");
23
+ for (const part of parts)
24
+ hash.update(JSON.stringify(part)).update("\0");
25
+ return hash.digest("hex").slice(0, 12);
26
+ }
27
+ function refKeys(refs) {
28
+ return new Set(refs.map((ref) => JSON.stringify(ref)).filter((ref) => ref !== undefined));
29
+ }
30
+ function refsOverlap(left, right) {
31
+ const keys = refKeys(left);
32
+ return right.some((ref) => keys.has(JSON.stringify(ref)));
33
+ }
34
+ function tokenSet(text) {
35
+ return new Set(normalized(text)
36
+ .split(/[^a-z0-9:_/-]+/i)
37
+ .map((token) => token.trim())
38
+ .filter((token) => token.length >= 4));
39
+ }
40
+ function rowBody(row) {
41
+ return stringValue(row.body) ?? stringValue(row.claim) ?? stringValue(row.proposal_body);
42
+ }
43
+ function rowSourceRefs(row) {
44
+ return arrayValue(row.source_refs ?? row.sourceRefs);
45
+ }
46
+ function bodyMatchScore(claim, row) {
47
+ const body = rowBody(row);
48
+ if (!body)
49
+ return 0;
50
+ const claimBody = normalized(claim.body);
51
+ const rowText = normalized(body);
52
+ if (claimBody === rowText)
53
+ return 100;
54
+ if (claimBody.includes(rowText) || rowText.includes(claimBody))
55
+ return 90;
56
+ if (claimBody.slice(0, 80) && rowText.includes(claimBody.slice(0, 80)))
57
+ return 80;
58
+ const claimTokens = tokenSet(claimBody);
59
+ const rowTokens = tokenSet(rowText);
60
+ if (claimTokens.size === 0 || rowTokens.size === 0)
61
+ return 0;
62
+ let overlap = 0;
63
+ for (const token of rowTokens) {
64
+ if (claimTokens.has(token))
65
+ overlap += 1;
66
+ }
67
+ const ratio = overlap / Math.min(claimTokens.size, rowTokens.size);
68
+ if (ratio >= 0.6)
69
+ return 70;
70
+ if (ratio >= 0.35)
71
+ return 45;
72
+ if (ratio >= 0.2)
73
+ return 20;
74
+ return 0;
75
+ }
76
+ function findClaim(claims, row, index) {
77
+ const refs = rowSourceRefs(row);
78
+ const refMatches = refs.length > 0 ? claims.filter((claim) => refsOverlap(claim.sourceRefs, refs)) : [];
79
+ const uniqueRefClaim = refMatches.length === 1 ? refMatches[0] : null;
80
+ const scored = claims
81
+ .map((claim) => {
82
+ let score = bodyMatchScore(claim, row);
83
+ const targets = targetMemoryRefs(row);
84
+ if (targets.length > 0 && idsOverlap(claim.targetMemoryRefs, targets))
85
+ score += 45;
86
+ if (uniqueRefClaim?.claimId === claim.claimId)
87
+ score += 15;
88
+ if (typeof index === "number" && claim.claimId.endsWith(`:${index + 1}`))
89
+ score += 8;
90
+ return { claim, score };
91
+ })
92
+ .sort((left, right) => right.score - left.score);
93
+ const best = scored[0];
94
+ if (!best || best.score <= 0)
95
+ return null;
96
+ const second = scored[1];
97
+ if (second && best.score === second.score && best.score < 60)
98
+ return null;
99
+ return best.claim;
100
+ }
101
+ function relationToChallengeKind(relation) {
102
+ switch (relation) {
103
+ case "duplicate":
104
+ return "duplicate";
105
+ case "too_weak":
106
+ return "evidence_gap";
107
+ case "contradiction":
108
+ return "conflict";
109
+ case "refinement":
110
+ return "scope_risk";
111
+ case "supersession":
112
+ return "staleness";
113
+ default:
114
+ return null;
115
+ }
116
+ }
117
+ function memoryRefs(row) {
118
+ return records(row.memory_refs).flatMap((ref) => {
119
+ const memoryId = ref.memory_id;
120
+ if (typeof memoryId !== "string" && typeof memoryId !== "number")
121
+ return [];
122
+ const provenanceKind = typeof ref.provenance_kind === "string" ? ref.provenance_kind : null;
123
+ return [{ memory_id: memoryId, provenance_kind: provenanceKind }];
124
+ });
125
+ }
126
+ function targetMemoryRefs(row) {
127
+ if (Array.isArray(row.target_memory_ids)) {
128
+ return row.target_memory_ids.filter((item) => typeof item === "string" || typeof item === "number");
129
+ }
130
+ const target = row.target_memory_id ?? row.targetMemoryId;
131
+ if (typeof target === "string" || typeof target === "number")
132
+ return [target];
133
+ return memoryRefs(row).map((ref) => ref.memory_id);
134
+ }
135
+ function idsOverlap(left, right) {
136
+ const keys = new Set(left.map((item) => String(item)));
137
+ return right.some((item) => keys.has(String(item)));
138
+ }
139
+ function statusFromRelation(relation) {
140
+ if (relation === "novel")
141
+ return "endorsed";
142
+ if (relation)
143
+ return "challenged";
144
+ return "proposed";
145
+ }
146
+ function messageTrace(message) {
147
+ return {
148
+ step: message.step,
149
+ phase: message.phase,
150
+ messageId: message.messageId,
151
+ threadId: message.threadId,
152
+ };
153
+ }
154
+ function firstMessage(messages, step, phase) {
155
+ return messages.find((message) => message.status === "succeeded" &&
156
+ message.output &&
157
+ message.step === step &&
158
+ (phase ? message.phase === phase : true)) ?? null;
159
+ }
160
+ function addTrace(trace, args) {
161
+ trace.push({
162
+ moveId: `move:${trace.length + 1}`,
163
+ ...args,
164
+ });
165
+ }
166
+ function resolutionForClaim(claim, finalRelevance) {
167
+ if (!finalRelevance?.output)
168
+ return null;
169
+ const rejected = records(finalRelevance.output.rejected);
170
+ const rejection = rejected.find((row) => bodyMatchScore(claim, row) > 0);
171
+ if (rejection)
172
+ return stringValue(rejection.reason) ?? stringValue(rejection.rationale) ?? "Rejected during proposal synthesis.";
173
+ const proposal = records(finalRelevance.output.proposals).find((row) => bodyMatchScore(claim, row) > 0);
174
+ if (proposal)
175
+ return stringValue(proposal.rationale) ?? "Accepted into final proposal synthesis.";
176
+ return null;
177
+ }
178
+ export function buildDeliberationArtifacts(args) {
179
+ const claimScout = firstMessage(args.messages, "claim-scout", "candidate-proposal") ??
180
+ firstMessage(args.messages, "claim-scout");
181
+ const proposalEditor = firstMessage(args.messages, "proposal-editor", "typed-proposal") ??
182
+ firstMessage(args.messages, "proposal-editor");
183
+ const memoryCartographer = firstMessage(args.messages, "memory-cartographer", "memory-cartography") ??
184
+ firstMessage(args.messages, "memory-cartographer");
185
+ const evidenceAudit = firstMessage(args.messages, "evidence-auditor", "preflight-critique") ??
186
+ firstMessage(args.messages, "evidence-auditor");
187
+ const finalSynthesis = firstMessage(args.messages, "decision-synthesizer", "proposal-synthesis") ??
188
+ firstMessage(args.messages, "decision-synthesizer");
189
+ const claims = records(claimScout?.output?.candidates).map((candidate, index) => ({
190
+ schemaVersion: refineryReviewSchemaVersion,
191
+ claimId: `claim:${args.runId}:${index + 1}`,
192
+ body: rowBody(candidate) ?? `Unnamed claim ${index + 1}`,
193
+ sourceRefs: rowSourceRefs(candidate),
194
+ whyFutureUseful: stringValue(candidate.why_future_useful),
195
+ candidateAction: null,
196
+ targetMemoryRefs: [],
197
+ confidence: null,
198
+ status: "proposed",
199
+ statusReason: null,
200
+ specialistTrace: claimScout ? [messageTrace(claimScout)] : [],
201
+ }));
202
+ const trace = [];
203
+ for (const claim of claims) {
204
+ addTrace(trace, {
205
+ kind: "claim",
206
+ claimId: claim.claimId,
207
+ challengeId: null,
208
+ agent: claimScout?.agent ?? "refinery-claim-scout",
209
+ step: "claim-scout",
210
+ phase: claimScout?.phase ?? null,
211
+ threadId: claimScout?.threadId ?? null,
212
+ messageId: claimScout?.messageId ?? null,
213
+ summary: claim.body,
214
+ refs: claim.sourceRefs,
215
+ });
216
+ }
217
+ for (const [index, typed] of records(proposalEditor?.output?.typed).entries()) {
218
+ const claim = findClaim(claims, typed, index);
219
+ if (!claim)
220
+ continue;
221
+ claim.candidateAction = stringValue(typed.action);
222
+ claim.targetMemoryRefs = targetMemoryRefs(typed);
223
+ claim.confidence = numberValue(typed.type_confidence);
224
+ if (proposalEditor)
225
+ claim.specialistTrace.push(messageTrace(proposalEditor));
226
+ }
227
+ const challengeLedger = [];
228
+ const findingMessages = [memoryCartographer, evidenceAudit].filter((message) => Boolean(message));
229
+ for (const message of findingMessages) {
230
+ for (const [index, finding] of records(message.output?.findings).entries()) {
231
+ const relation = stringValue(finding.relation);
232
+ const claim = findClaim(claims, finding, index);
233
+ if (!claim)
234
+ continue;
235
+ const kind = relationToChallengeKind(relation);
236
+ if (message)
237
+ claim.specialistTrace.push(messageTrace(message));
238
+ if (relation === "novel") {
239
+ claim.status = claim.status === "proposed" ? "endorsed" : claim.status;
240
+ addTrace(trace, {
241
+ kind: "endorsement",
242
+ claimId: claim.claimId,
243
+ challengeId: null,
244
+ agent: message.agent,
245
+ step: message.step,
246
+ phase: message.phase,
247
+ threadId: message.threadId,
248
+ messageId: message.messageId,
249
+ summary: stringValue(finding.rationale) ?? "Claim was endorsed as novel.",
250
+ refs: rowSourceRefs(finding),
251
+ });
252
+ continue;
253
+ }
254
+ if (!kind)
255
+ continue;
256
+ claim.status = statusFromRelation(relation);
257
+ const resolution = resolutionForClaim(claim, finalSynthesis);
258
+ if (resolution)
259
+ claim.statusReason = resolution;
260
+ const status = resolution ? "resolved" : "open";
261
+ const challengeId = `challenge:${args.runId}:${challengeLedger.length + 1}`;
262
+ const entry = {
263
+ schemaVersion: refineryReviewSchemaVersion,
264
+ challengeId,
265
+ claimId: claim.claimId,
266
+ kind,
267
+ raisedBy: message.agent,
268
+ targetAgent: "refinery-decision-synthesizer",
269
+ status,
270
+ rationale: stringValue(finding.rationale) ?? `${relation} relationship raised for claim.`,
271
+ evidenceRefs: rowSourceRefs(finding),
272
+ memoryRefs: memoryRefs(finding),
273
+ resolution,
274
+ phase: message.phase,
275
+ threadId: message.threadId,
276
+ messageId: message.messageId,
277
+ };
278
+ challengeLedger.push(entry);
279
+ addTrace(trace, {
280
+ kind: "challenge",
281
+ claimId: claim.claimId,
282
+ challengeId,
283
+ agent: message.agent,
284
+ step: message.step,
285
+ phase: message.phase,
286
+ threadId: message.threadId,
287
+ messageId: message.messageId,
288
+ summary: entry.rationale,
289
+ refs: entry.evidenceRefs,
290
+ });
291
+ }
292
+ }
293
+ const finalAssignedClaimIds = new Set();
294
+ for (const message of [finalSynthesis].filter((item) => Boolean(item))) {
295
+ for (const [index, proposal] of records(message.output?.proposals).entries()) {
296
+ const availableClaims = message.phase === "proposal-synthesis"
297
+ ? claims.filter((claim) => !finalAssignedClaimIds.has(claim.claimId))
298
+ : claims;
299
+ const claim = findClaim(availableClaims.length > 0 ? availableClaims : claims, proposal, index);
300
+ if (!claim)
301
+ continue;
302
+ if (message.phase === "proposal-synthesis") {
303
+ finalAssignedClaimIds.add(claim.claimId);
304
+ claim.status = "accepted";
305
+ claim.statusReason = stringValue(proposal.rationale);
306
+ claim.candidateAction = stringValue(proposal.action) ?? claim.candidateAction;
307
+ claim.targetMemoryRefs = targetMemoryRefs(proposal);
308
+ claim.confidence = numberValue(proposal.confidence) ?? claim.confidence;
309
+ }
310
+ addTrace(trace, {
311
+ kind: "handoff",
312
+ claimId: claim.claimId,
313
+ challengeId: null,
314
+ agent: message.agent,
315
+ step: message.step,
316
+ phase: message.phase,
317
+ threadId: message.threadId,
318
+ messageId: message.messageId,
319
+ summary: stringValue(proposal.rationale) ?? "Claim was handed off as a proposal candidate.",
320
+ refs: rowSourceRefs(proposal),
321
+ });
322
+ }
323
+ for (const [index, rejected] of records(message.output?.rejected).entries()) {
324
+ const availableClaims = message.phase === "proposal-synthesis"
325
+ ? claims.filter((claim) => !finalAssignedClaimIds.has(claim.claimId))
326
+ : claims;
327
+ const claim = findClaim(availableClaims.length > 0 ? availableClaims : claims, rejected, index);
328
+ if (!claim)
329
+ continue;
330
+ if (message.phase === "proposal-synthesis") {
331
+ finalAssignedClaimIds.add(claim.claimId);
332
+ claim.status = "rejected";
333
+ claim.statusReason = stringValue(rejected.reason) ?? stringValue(rejected.rationale);
334
+ }
335
+ addTrace(trace, {
336
+ kind: "challenge",
337
+ claimId: claim.claimId,
338
+ challengeId: null,
339
+ agent: message.agent,
340
+ step: message.step,
341
+ phase: message.phase,
342
+ threadId: message.threadId,
343
+ messageId: message.messageId,
344
+ summary: stringValue(rejected.reason) ?? stringValue(rejected.rationale) ?? "Claim was rejected.",
345
+ refs: rowSourceRefs(rejected),
346
+ });
347
+ }
348
+ }
349
+ for (const claim of claims) {
350
+ if (claim.status === "proposed")
351
+ claim.status = "unresolved";
352
+ }
353
+ return {
354
+ schemaVersion: refineryReviewSchemaVersion,
355
+ topology: args.topology,
356
+ claims,
357
+ challengeLedger,
358
+ trace,
359
+ summary: {
360
+ claims: claims.length,
361
+ acceptedClaims: claims.filter((claim) => claim.status === "accepted").length,
362
+ rejectedClaims: claims.filter((claim) => claim.status === "rejected").length,
363
+ challengedClaims: claims.filter((claim) => claim.status === "challenged").length,
364
+ challenges: challengeLedger.length,
365
+ unresolvedChallenges: challengeLedger.filter((challenge) => challenge.status === "open").length,
366
+ moves: trace.length,
367
+ },
368
+ };
369
+ }
370
+ export function claimCardsForCritique(args) {
371
+ return records(args.claimScoutOutput.candidates).map((candidate, index) => ({
372
+ schemaVersion: refineryReviewSchemaVersion,
373
+ claimId: `claim:${args.runId}:${index + 1}`,
374
+ body: rowBody(candidate) ?? `Unnamed claim ${index + 1}`,
375
+ sourceRefs: rowSourceRefs(candidate),
376
+ whyFutureUseful: stringValue(candidate.why_future_useful),
377
+ candidateAction: null,
378
+ targetMemoryRefs: [],
379
+ confidence: null,
380
+ status: "proposed",
381
+ statusReason: null,
382
+ specialistTrace: [],
383
+ }));
384
+ }
385
+ //# sourceMappingURL=deliberation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliberation.js","sourceRoot":"","sources":["../../src/core/deliberation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface RefineryErrorContext {
2
+ code?: string;
3
+ phase?: string;
4
+ runId?: string;
5
+ runDir?: string;
6
+ failedStep?: string;
7
+ rawOutputPath?: string;
8
+ status?: number;
9
+ details?: unknown;
10
+ }
11
+ export declare class RefineryError extends Error {
12
+ code: string;
13
+ phase?: string;
14
+ runId?: string;
15
+ runDir?: string;
16
+ failedStep?: string;
17
+ rawOutputPath?: string;
18
+ status?: number;
19
+ details?: unknown;
20
+ constructor(code: string, message: string, context?: RefineryErrorContext);
21
+ }
22
+ export declare function asRefineryError(error: unknown, fallback?: RefineryErrorContext & {
23
+ code: string;
24
+ }): RefineryError;
25
+ export declare function applyErrorContext(error: RefineryError, context: RefineryErrorContext): RefineryError;
26
+ export declare function serializeRefineryError(error: RefineryError): Record<string, unknown>;
@@ -0,0 +1,50 @@
1
+ export class RefineryError extends Error {
2
+ code;
3
+ phase;
4
+ runId;
5
+ runDir;
6
+ failedStep;
7
+ rawOutputPath;
8
+ status;
9
+ details;
10
+ constructor(code, message, context = {}) {
11
+ super(message);
12
+ this.name = "RefineryError";
13
+ this.code = code;
14
+ this.phase = context.phase;
15
+ this.runId = context.runId;
16
+ this.runDir = context.runDir;
17
+ this.failedStep = context.failedStep;
18
+ this.rawOutputPath = context.rawOutputPath;
19
+ this.status = context.status;
20
+ this.details = context.details;
21
+ }
22
+ }
23
+ export function asRefineryError(error, fallback = { code: "REFINERY_ERROR" }) {
24
+ if (error instanceof RefineryError)
25
+ return error;
26
+ const message = error instanceof Error ? error.message : String(error);
27
+ return new RefineryError(fallback.code, message, fallback);
28
+ }
29
+ export function applyErrorContext(error, context) {
30
+ error.phase ??= context.phase;
31
+ error.runId ??= context.runId;
32
+ error.runDir ??= context.runDir;
33
+ error.failedStep ??= context.failedStep;
34
+ error.rawOutputPath ??= context.rawOutputPath;
35
+ error.status ??= context.status;
36
+ error.details ??= context.details;
37
+ return error;
38
+ }
39
+ export function serializeRefineryError(error) {
40
+ return {
41
+ code: error.code,
42
+ message: error.message,
43
+ ...(error.phase ? { phase: error.phase } : {}),
44
+ ...(error.failedStep ? { failedStep: error.failedStep } : {}),
45
+ ...(error.rawOutputPath ? { rawOutputPath: error.rawOutputPath } : {}),
46
+ ...(typeof error.status === "number" ? { status: error.status } : {}),
47
+ ...(error.details !== undefined ? { details: error.details } : {}),
48
+ };
49
+ }
50
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const reviewIntents: readonly ["general-review", "stale-audit", "forget-candidates", "update-candidates", "conflict-audit", "scope-audit"];
2
+ export type ReviewIntent = (typeof reviewIntents)[number];
3
+ export declare const defaultReviewIntent: ReviewIntent;
4
+ export declare function parseReviewIntent(value: unknown): ReviewIntent;
5
+ export declare function describeReviewIntent(intent: ReviewIntent): string;
@@ -0,0 +1,34 @@
1
+ import { RefineryError } from "./errors.js";
2
+ export const reviewIntents = [
3
+ "general-review",
4
+ "stale-audit",
5
+ "forget-candidates",
6
+ "update-candidates",
7
+ "conflict-audit",
8
+ "scope-audit",
9
+ ];
10
+ export const defaultReviewIntent = "general-review";
11
+ export function parseReviewIntent(value) {
12
+ const candidate = typeof value === "string" && value.trim() ? value.trim() : defaultReviewIntent;
13
+ if (!reviewIntents.includes(candidate)) {
14
+ throw new RefineryError("INVALID_OPTION", `review --intent must be one of: ${reviewIntents.join(", ")}.`, { phase: "args", details: { intent: value } });
15
+ }
16
+ return candidate;
17
+ }
18
+ export function describeReviewIntent(intent) {
19
+ switch (intent) {
20
+ case "general-review":
21
+ return "Review the memory/source packet for durable, useful memory-maintenance proposals.";
22
+ case "stale-audit":
23
+ return "Identify active memories that may be stale, outdated, superseded, or no longer true.";
24
+ case "forget-candidates":
25
+ return "Identify memories that may be low-value, redundant, obsolete, noisy, or worth archiving/quarantining.";
26
+ case "update-candidates":
27
+ return "Identify memories that remain useful but likely need correction, replacement text, or refreshed scope.";
28
+ case "conflict-audit":
29
+ return "Identify memories or source claims that contradict each other and need contradiction review.";
30
+ case "scope-audit":
31
+ return "Identify memories whose user/project/org scope appears too broad, too narrow, or attached to the wrong context.";
32
+ }
33
+ }
34
+ //# sourceMappingURL=intents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intents.js","sourceRoot":"","sources":["../../src/core/intents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,gBAAgB;IAChB,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,aAAa;CACL,CAAC;AAIX,MAAM,CAAC,MAAM,mBAAmB,GAAiB,gBAAgB,CAAC;AAElE,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACjG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAyB,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,aAAa,CACrB,gBAAgB,EAChB,mCAAmC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC9D,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAC9C,CAAC;IACJ,CAAC;IACD,OAAO,SAAyB,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB;YACnB,OAAO,mFAAmF,CAAC;QAC7F,KAAK,aAAa;YAChB,OAAO,sFAAsF,CAAC;QAChG,KAAK,mBAAmB;YACtB,OAAO,uGAAuG,CAAC;QACjH,KAAK,mBAAmB;YACtB,OAAO,wGAAwG,CAAC;QAClH,KAAK,gBAAgB;YACnB,OAAO,8FAA8F,CAAC;QACxG,KAAK,aAAa;YAChB,OAAO,iHAAiH,CAAC;IAC7H,CAAC;AACH,CAAC"}
@@ -0,0 +1,93 @@
1
+ import type { ModelConfig } from "../env.ts";
2
+ import { type MemoryMaintenanceAction } from "./adapter.ts";
3
+ import type { LocalSpecialist } from "./specialists/types.ts";
4
+ export interface ClaimScoutCandidate {
5
+ claim: string;
6
+ source_refs: unknown[];
7
+ why_future_useful: string;
8
+ }
9
+ export interface ClaimScoutOutput {
10
+ candidates: ClaimScoutCandidate[];
11
+ }
12
+ export interface DistilledMemory {
13
+ body: string;
14
+ source_refs: unknown[];
15
+ rationale: string;
16
+ }
17
+ export interface TypedCandidate {
18
+ body: string;
19
+ memory_type: string;
20
+ primary_type: string;
21
+ secondary_type: string | null;
22
+ type_confidence: number;
23
+ type_rationale: string;
24
+ ambiguities: string[];
25
+ durability: "durable" | "ttl" | "ephemeral";
26
+ ttl: string | null;
27
+ proposed_scope: string;
28
+ action: MemoryMaintenanceAction;
29
+ target_memory_id: string | number | null;
30
+ target_memory_ids?: Array<string | number>;
31
+ source_refs: unknown[];
32
+ }
33
+ export interface ProposalEditorOutput {
34
+ typed: TypedCandidate[];
35
+ }
36
+ export interface MemoryProposalDraft {
37
+ memory_type: string;
38
+ proposed_scope: string;
39
+ body: string;
40
+ confidence: number;
41
+ rationale: string;
42
+ source_refs: unknown[];
43
+ action: MemoryMaintenanceAction;
44
+ target_memory_id: string | number | null;
45
+ target_memory_ids?: Array<string | number>;
46
+ staleness_reason?: string | null;
47
+ forget_reason?: string | null;
48
+ update_reason?: string | null;
49
+ conflict_reason?: string | null;
50
+ scope_reason?: string | null;
51
+ replacement_body?: string | null;
52
+ ambiguities?: string[];
53
+ }
54
+ export interface RejectedCandidate {
55
+ body?: string;
56
+ reason: string;
57
+ }
58
+ export interface DecisionSynthesizerOutput {
59
+ proposals: MemoryProposalDraft[];
60
+ rejected: RejectedCandidate[];
61
+ }
62
+ export interface RelationshipFinding {
63
+ body: string;
64
+ relation: "novel" | "duplicate" | "refinement" | "contradiction" | "supersession" | "too_weak";
65
+ target_memory_id: string | number | null;
66
+ confidence: number;
67
+ rationale: string;
68
+ source_refs: unknown[];
69
+ memory_refs: {
70
+ memory_id: string | number;
71
+ provenance_kind: string | null;
72
+ }[];
73
+ }
74
+ export interface EvidenceFindingOutput {
75
+ findings: RelationshipFinding[];
76
+ }
77
+ export declare function extractJson(raw: string): unknown;
78
+ export declare function redactModel(config: ModelConfig): Omit<ModelConfig, "apiKey"> & {
79
+ apiKeyPresent: boolean;
80
+ };
81
+ export declare function parseClaimScout(raw: string): ClaimScoutOutput;
82
+ export declare function parseProposalEditor(raw: string): ProposalEditorOutput;
83
+ export declare function parseDecisionSynthesizer(raw: string): DecisionSynthesizerOutput;
84
+ export declare function parseEvidenceFindings(raw: string): EvidenceFindingOutput;
85
+ export declare function buildPrompt(args: {
86
+ specialist: LocalSpecialist;
87
+ shape: string;
88
+ instruction: string;
89
+ payload: unknown;
90
+ }): {
91
+ system: string;
92
+ user: string;
93
+ };