@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,269 @@
1
+ import { memoryMaintenanceActions } from "./adapter.js";
2
+ export function extractJson(raw) {
3
+ const fenced = raw.match(/```(?:json)?\s*([\s\S]*?)```/i);
4
+ const candidate = fenced ? fenced[1] : raw;
5
+ const first = candidate.indexOf("{");
6
+ const last = candidate.lastIndexOf("}");
7
+ if (first < 0 || last < first)
8
+ throw new Error("Model response did not contain a JSON object.");
9
+ return JSON.parse(candidate.slice(first, last + 1));
10
+ }
11
+ export function redactModel(config) {
12
+ return {
13
+ provider: config.provider,
14
+ baseUrl: config.baseUrl,
15
+ modelName: config.modelName,
16
+ ...(config.maxTokens ? { maxTokens: config.maxTokens } : {}),
17
+ apiKeyPresent: Boolean(config.apiKey),
18
+ };
19
+ }
20
+ function parseAction(value, legacyValue, label) {
21
+ const action = value ?? legacyValue;
22
+ if (!memoryMaintenanceActions.includes(action)) {
23
+ throw new Error(`${label} has invalid action.`);
24
+ }
25
+ return action;
26
+ }
27
+ function optionalString(record, field) {
28
+ if (!(field in record))
29
+ return undefined;
30
+ const value = record[field];
31
+ if (value === null)
32
+ return null;
33
+ if (typeof value !== "string")
34
+ throw new Error(`${field} must be string or null when present.`);
35
+ return value;
36
+ }
37
+ function optionalStringArray(record, field) {
38
+ if (!(field in record))
39
+ return undefined;
40
+ const value = record[field];
41
+ if (!Array.isArray(value) || !value.every((item) => typeof item === "string")) {
42
+ throw new Error(`${field} must be an array of strings when present.`);
43
+ }
44
+ return value;
45
+ }
46
+ function parseTargetMemoryIds(value, label) {
47
+ if (value === null || value === undefined) {
48
+ return { target_memory_id: null, target_memory_ids: [] };
49
+ }
50
+ if (typeof value === "string" || typeof value === "number") {
51
+ return { target_memory_id: value, target_memory_ids: [value] };
52
+ }
53
+ if (Array.isArray(value)) {
54
+ const ids = value.filter((item) => typeof item === "string" || typeof item === "number");
55
+ if (ids.length !== value.length) {
56
+ throw new Error(`${label} target_memory_id must contain only strings or numbers when an array is used.`);
57
+ }
58
+ return { target_memory_id: ids[0] ?? null, target_memory_ids: ids };
59
+ }
60
+ throw new Error(`${label} target_memory_id must be string, number, null, or an array of strings/numbers.`);
61
+ }
62
+ export function parseClaimScout(raw) {
63
+ const parsed = extractJson(raw);
64
+ if (!Array.isArray(parsed.candidates))
65
+ throw new Error("Claim Scout output must contain candidates array.");
66
+ return {
67
+ candidates: parsed.candidates.map((candidate, index) => {
68
+ if (!candidate || typeof candidate !== "object")
69
+ throw new Error(`Candidate ${index} must be an object.`);
70
+ const c = candidate;
71
+ if (typeof c.claim !== "string" || !c.claim.trim())
72
+ throw new Error(`Candidate ${index} missing claim.`);
73
+ if (!Array.isArray(c.source_refs))
74
+ throw new Error(`Candidate ${index} missing source_refs array.`);
75
+ if (typeof c.why_future_useful !== "string" || !c.why_future_useful.trim()) {
76
+ throw new Error(`Candidate ${index} missing why_future_useful.`);
77
+ }
78
+ return { claim: c.claim, source_refs: c.source_refs, why_future_useful: c.why_future_useful };
79
+ }),
80
+ };
81
+ }
82
+ export function parseProposalEditor(raw) {
83
+ const parsed = extractJson(raw);
84
+ if (!Array.isArray(parsed.typed))
85
+ throw new Error("Proposal Editor output must contain typed array.");
86
+ return {
87
+ typed: parsed.typed.map((item, index) => {
88
+ if (!item || typeof item !== "object")
89
+ throw new Error(`Typed item ${index} must be an object.`);
90
+ const t = item;
91
+ if (typeof t.body !== "string" || !t.body.trim())
92
+ throw new Error(`Typed item ${index} missing body.`);
93
+ if (typeof t.memory_type !== "string" || !t.memory_type.trim())
94
+ throw new Error(`Typed item ${index} missing memory_type.`);
95
+ if (typeof t.primary_type !== "string" || !t.primary_type.trim())
96
+ throw new Error(`Typed item ${index} missing primary_type.`);
97
+ if (t.secondary_type !== null && typeof t.secondary_type !== "string") {
98
+ throw new Error(`Typed item ${index} secondary_type must be string or null.`);
99
+ }
100
+ if (typeof t.type_confidence !== "number" || t.type_confidence < 0 || t.type_confidence > 1) {
101
+ throw new Error(`Typed item ${index} type_confidence must be 0..1.`);
102
+ }
103
+ if (typeof t.type_rationale !== "string" || !t.type_rationale.trim()) {
104
+ throw new Error(`Typed item ${index} missing type_rationale.`);
105
+ }
106
+ if (!Array.isArray(t.ambiguities))
107
+ throw new Error(`Typed item ${index} missing ambiguities array.`);
108
+ if (t.durability !== "durable" && t.durability !== "ttl" && t.durability !== "ephemeral") {
109
+ throw new Error(`Typed item ${index} has invalid durability.`);
110
+ }
111
+ if (t.ttl !== null && typeof t.ttl !== "string")
112
+ throw new Error(`Typed item ${index} ttl must be string or null.`);
113
+ if (typeof t.proposed_scope !== "string" || !t.proposed_scope.trim()) {
114
+ throw new Error(`Typed item ${index} missing proposed_scope.`);
115
+ }
116
+ const action = parseAction(t.action, t.mutation_op, `Typed item ${index}`);
117
+ const record = item;
118
+ const target = parseTargetMemoryIds(record.target_memory_ids ?? record.target_memory_id, `Typed item ${index}`);
119
+ if (!Array.isArray(t.source_refs))
120
+ throw new Error(`Typed item ${index} missing source_refs array.`);
121
+ return {
122
+ body: t.body,
123
+ memory_type: t.memory_type,
124
+ primary_type: t.primary_type,
125
+ secondary_type: t.secondary_type,
126
+ type_confidence: t.type_confidence,
127
+ type_rationale: t.type_rationale,
128
+ ambiguities: t.ambiguities,
129
+ durability: t.durability,
130
+ ttl: t.ttl,
131
+ proposed_scope: t.proposed_scope,
132
+ action,
133
+ target_memory_id: target.target_memory_id,
134
+ ...(target.target_memory_ids.length > 1 ? { target_memory_ids: target.target_memory_ids } : {}),
135
+ source_refs: t.source_refs,
136
+ };
137
+ }),
138
+ };
139
+ }
140
+ export function parseDecisionSynthesizer(raw) {
141
+ const parsed = extractJson(raw);
142
+ if (!Array.isArray(parsed.proposals) || !Array.isArray(parsed.rejected)) {
143
+ throw new Error("Decision Synthesizer output must contain proposals and rejected arrays.");
144
+ }
145
+ return {
146
+ proposals: parsed.proposals.map((item, index) => {
147
+ if (!item || typeof item !== "object")
148
+ throw new Error(`Proposal ${index} must be an object.`);
149
+ const p = item;
150
+ if (typeof p.memory_type !== "string" || !p.memory_type.trim())
151
+ throw new Error(`Proposal ${index} missing memory_type.`);
152
+ if (typeof p.proposed_scope !== "string" || !p.proposed_scope.trim()) {
153
+ throw new Error(`Proposal ${index} missing proposed_scope.`);
154
+ }
155
+ if (typeof p.body !== "string" || !p.body.trim())
156
+ throw new Error(`Proposal ${index} missing body.`);
157
+ if (typeof p.confidence !== "number" || p.confidence < 0 || p.confidence > 1) {
158
+ throw new Error(`Proposal ${index} confidence must be 0..1.`);
159
+ }
160
+ if (typeof p.rationale !== "string" || !p.rationale.trim())
161
+ throw new Error(`Proposal ${index} missing rationale.`);
162
+ if (!Array.isArray(p.source_refs))
163
+ throw new Error(`Proposal ${index} missing source_refs array.`);
164
+ const action = parseAction(p.action, p.mutation_op, `Proposal ${index}`);
165
+ const record = item;
166
+ const target = parseTargetMemoryIds(record.target_memory_ids ?? record.target_memory_id, `Proposal ${index}`);
167
+ return {
168
+ memory_type: p.memory_type,
169
+ proposed_scope: p.proposed_scope,
170
+ body: p.body,
171
+ confidence: p.confidence,
172
+ rationale: p.rationale,
173
+ source_refs: p.source_refs,
174
+ action,
175
+ target_memory_id: target.target_memory_id,
176
+ ...(target.target_memory_ids.length > 1 ? { target_memory_ids: target.target_memory_ids } : {}),
177
+ ...(optionalString(record, "staleness_reason") !== undefined ? { staleness_reason: optionalString(record, "staleness_reason") } : {}),
178
+ ...(optionalString(record, "forget_reason") !== undefined ? { forget_reason: optionalString(record, "forget_reason") } : {}),
179
+ ...(optionalString(record, "update_reason") !== undefined ? { update_reason: optionalString(record, "update_reason") } : {}),
180
+ ...(optionalString(record, "conflict_reason") !== undefined ? { conflict_reason: optionalString(record, "conflict_reason") } : {}),
181
+ ...(optionalString(record, "scope_reason") !== undefined ? { scope_reason: optionalString(record, "scope_reason") } : {}),
182
+ ...(optionalString(record, "replacement_body") !== undefined ? { replacement_body: optionalString(record, "replacement_body") } : {}),
183
+ ...(optionalStringArray(record, "ambiguities") !== undefined ? { ambiguities: optionalStringArray(record, "ambiguities") } : {}),
184
+ };
185
+ }),
186
+ rejected: parsed.rejected.map((item, index) => {
187
+ if (!item || typeof item !== "object")
188
+ throw new Error(`Rejected item ${index} must be an object.`);
189
+ const r = item;
190
+ const explanation = item.rejection_rationale
191
+ ?? item.rationale
192
+ ?? item.rejection_reason
193
+ ?? item.type_rationale
194
+ ?? item.update_reason;
195
+ const reason = typeof r.reason === "string" && r.reason.trim()
196
+ ? r.reason
197
+ : typeof explanation === "string" && explanation.trim()
198
+ ? explanation
199
+ : null;
200
+ if (!reason)
201
+ throw new Error(`Rejected item ${index} missing reason.`);
202
+ return { body: typeof r.body === "string" ? r.body : undefined, reason };
203
+ }),
204
+ };
205
+ }
206
+ export function parseEvidenceFindings(raw) {
207
+ const parsed = extractJson(raw);
208
+ if (!Array.isArray(parsed.findings))
209
+ throw new Error("Evidence finding output must contain findings array.");
210
+ return {
211
+ findings: parsed.findings.map((item, index) => {
212
+ if (!item || typeof item !== "object")
213
+ throw new Error(`Finding ${index} must be an object.`);
214
+ const f = item;
215
+ if (typeof f.body !== "string" || !f.body.trim())
216
+ throw new Error(`Finding ${index} missing body.`);
217
+ if (!["novel", "duplicate", "refinement", "contradiction", "supersession", "too_weak"].includes(String(f.relation))) {
218
+ throw new Error(`Finding ${index} has invalid relation.`);
219
+ }
220
+ if (f.target_memory_id !== null && typeof f.target_memory_id !== "string" && typeof f.target_memory_id !== "number") {
221
+ throw new Error(`Finding ${index} target_memory_id must be string, number, or null.`);
222
+ }
223
+ if (typeof f.confidence !== "number" || f.confidence < 0 || f.confidence > 1) {
224
+ throw new Error(`Finding ${index} confidence must be 0..1.`);
225
+ }
226
+ if (typeof f.rationale !== "string" || !f.rationale.trim())
227
+ throw new Error(`Finding ${index} missing rationale.`);
228
+ if (!Array.isArray(f.source_refs))
229
+ throw new Error(`Finding ${index} missing source_refs array.`);
230
+ if (!Array.isArray(f.memory_refs))
231
+ throw new Error(`Finding ${index} missing memory_refs array.`);
232
+ const memoryRefs = f.memory_refs.map((memoryRef) => {
233
+ if (typeof memoryRef === "string" || typeof memoryRef === "number") {
234
+ return { memory_id: typeof memoryRef === "number" ? `memory:${memoryRef}` : memoryRef, provenance_kind: null };
235
+ }
236
+ if (memoryRef && typeof memoryRef === "object") {
237
+ const ref = memoryRef;
238
+ if (typeof ref.memory_id !== "string" && typeof ref.memory_id !== "number") {
239
+ throw new Error(`Finding ${index} memory_ref missing memory_id.`);
240
+ }
241
+ return {
242
+ memory_id: typeof ref.memory_id === "number" ? `memory:${ref.memory_id}` : ref.memory_id,
243
+ provenance_kind: typeof ref.provenance_kind === "string" ? ref.provenance_kind : null,
244
+ };
245
+ }
246
+ throw new Error(`Finding ${index} memory_ref must be an object, string, or number.`);
247
+ });
248
+ return { ...f, memory_refs: memoryRefs };
249
+ }),
250
+ };
251
+ }
252
+ export function buildPrompt(args) {
253
+ return {
254
+ system: [
255
+ args.specialist.prompt,
256
+ "",
257
+ "Return only JSON matching this shape:",
258
+ args.shape,
259
+ args.instruction,
260
+ "Do not wrap the answer in prose. Do not activate, approve, or write memory.",
261
+ ].join("\n"),
262
+ user: [
263
+ "Process this Refinery live review payload using your specialist contract.",
264
+ "",
265
+ JSON.stringify(args.payload, null, 2),
266
+ ].join("\n"),
267
+ };
268
+ }
269
+ //# sourceMappingURL=live-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-review.js","sourceRoot":"","sources":["../../src/core/live-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type ModelConfig } from "../env.ts";
2
+ export interface OpenRouterCallMetadata {
3
+ provider: "openrouter";
4
+ baseUrl: string;
5
+ modelName: string;
6
+ status: number;
7
+ responseId: string | null;
8
+ responseModel: string | null;
9
+ finishReason: string | null;
10
+ usage: unknown;
11
+ }
12
+ export declare function callOpenRouterChatWithMetadata(request: {
13
+ model: ModelConfig;
14
+ system: string;
15
+ user: string;
16
+ }): Promise<{
17
+ content: string;
18
+ metadata: OpenRouterCallMetadata;
19
+ }>;
@@ -0,0 +1,45 @@
1
+ import { defaultOpenRouterMaxTokens } from "../env.js";
2
+ export async function callOpenRouterChatWithMetadata(request) {
3
+ if (request.model.provider !== "openrouter") {
4
+ throw new Error(`Unsupported model provider: ${request.model.provider}`);
5
+ }
6
+ const response = await fetch(`${request.model.baseUrl.replace(/\/$/, "")}/chat/completions`, {
7
+ method: "POST",
8
+ headers: {
9
+ "content-type": "application/json",
10
+ authorization: `Bearer ${request.model.apiKey}`,
11
+ },
12
+ body: JSON.stringify({
13
+ model: request.model.modelName,
14
+ messages: [
15
+ { role: "system", content: request.system },
16
+ { role: "user", content: request.user },
17
+ ],
18
+ temperature: 0.1,
19
+ max_tokens: request.model.maxTokens ?? defaultOpenRouterMaxTokens,
20
+ }),
21
+ });
22
+ if (!response.ok) {
23
+ const body = await response.text();
24
+ throw new Error(`OpenRouter request failed (${response.status}): ${body.slice(0, 500)}`);
25
+ }
26
+ const json = (await response.json());
27
+ const content = json.choices?.[0]?.message?.content;
28
+ if (typeof content !== "string" || !content.trim()) {
29
+ throw new Error("OpenRouter response did not include message content.");
30
+ }
31
+ return {
32
+ content,
33
+ metadata: {
34
+ provider: "openrouter",
35
+ baseUrl: request.model.baseUrl,
36
+ modelName: request.model.modelName,
37
+ status: response.status,
38
+ responseId: typeof json.id === "string" ? json.id : null,
39
+ responseModel: typeof json.model === "string" ? json.model : null,
40
+ finishReason: typeof json.choices?.[0]?.finish_reason === "string" ? json.choices[0].finish_reason : null,
41
+ usage: json.usage ?? null,
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=model-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-client.js","sourceRoot":"","sources":["../../src/core/model-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAoB,MAAM,WAAW,CAAC;AAazE,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,OAIpD;IACC,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,EAAE;QAC3F,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;SAChD;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;YAC9B,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;gBAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;aACxC;YACD,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,0BAA0B;SAClE,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAKlC,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,OAAO;QACP,QAAQ,EAAE;YACR,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;YAC9B,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;YAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YACxD,aAAa,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACjE,YAAY,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;YACzG,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;SAC1B;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface RefineryPaths {
2
+ home: string;
3
+ configDir: string;
4
+ credentialsDir: string;
5
+ runsRootDir: string;
6
+ projectKey: string;
7
+ runsDir: string;
8
+ }
9
+ export interface ResolveRefineryPathsOptions {
10
+ home?: string;
11
+ cwd?: string;
12
+ env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
13
+ }
14
+ export declare function expandHome(p: string): string;
15
+ export declare function projectKeyForPath(projectPath: string): string;
16
+ export declare function resolveRefineryPaths(options?: ResolveRefineryPathsOptions): RefineryPaths;
@@ -0,0 +1,43 @@
1
+ import crypto from "node:crypto";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ export function expandHome(p) {
5
+ if (p === "~")
6
+ return os.homedir();
7
+ if (p.startsWith("~/"))
8
+ return path.join(os.homedir(), p.slice(2));
9
+ return p;
10
+ }
11
+ function resolvePathInput(input, cwd) {
12
+ const expanded = expandHome(input);
13
+ return path.isAbsolute(expanded) ? path.resolve(expanded) : path.resolve(cwd, expanded);
14
+ }
15
+ export function projectKeyForPath(projectPath) {
16
+ const resolved = path.resolve(projectPath);
17
+ const escapedSep = path.sep.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
18
+ const normalized = resolved.replace(new RegExp(`${escapedSep}+`, "g"), path.sep);
19
+ const slug = normalized
20
+ .replace(/^[A-Za-z]:/, "")
21
+ .replace(/[^A-Za-z0-9]+/g, "-")
22
+ .replace(/^-+|-+$/g, "")
23
+ .slice(0, 80) || "project";
24
+ const hash = crypto.createHash("sha256").update(normalized).digest("hex").slice(0, 10);
25
+ return `${slug}-${hash}`;
26
+ }
27
+ export function resolveRefineryPaths(options = {}) {
28
+ const env = options.env ?? process.env;
29
+ const cwd = options.cwd ?? process.cwd();
30
+ const homeInput = options.home ?? env.REFINERY_HOME ?? "~/.refinery";
31
+ const home = resolvePathInput(homeInput, cwd);
32
+ const runsRootDir = path.join(home, "runs");
33
+ const projectKey = projectKeyForPath(cwd);
34
+ return {
35
+ home,
36
+ configDir: path.join(home, "config"),
37
+ credentialsDir: path.join(home, "credentials"),
38
+ runsRootDir,
39
+ projectKey,
40
+ runsDir: path.join(runsRootDir, "by-project", projectKey),
41
+ };
42
+ }
43
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAiB7B,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,GAAW;IAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,UAAU;SACpB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAuC,EAAE;IAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC;IACrE,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QACpC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC9C,WAAW;QACX,UAAU;QACV,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC;KAC1D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { refineryReviewSchemaVersion, type MemoryProposal } from "./adapter.ts";
2
+ import { RefineryError } from "./errors.ts";
3
+ import { type ReviewRunMode } from "./artifacts.ts";
4
+ import { type ReviewIntent } from "./intents.ts";
5
+ export interface ReviewSinkOptions {
6
+ url: string;
7
+ headers?: Record<string, string>;
8
+ timeoutMs?: number;
9
+ }
10
+ export interface ReviewSinkResult {
11
+ url: string;
12
+ ok: boolean;
13
+ status: number;
14
+ deliveredAt: string;
15
+ responseText: string;
16
+ }
17
+ export interface ReviewRejected {
18
+ sourceId: string;
19
+ reason: string;
20
+ }
21
+ export interface ReviewRunResult {
22
+ ok: true;
23
+ schemaVersion: typeof refineryReviewSchemaVersion;
24
+ command: "review";
25
+ adapter: {
26
+ name: string;
27
+ };
28
+ scope: string;
29
+ dryRun: true;
30
+ runId: string;
31
+ runDir: string;
32
+ counts: {
33
+ sources: number;
34
+ activeMemories: number;
35
+ proposals: number;
36
+ rejected: number;
37
+ claims?: number;
38
+ challenges?: number;
39
+ deliberationMoves?: number;
40
+ };
41
+ proposals: MemoryProposal[];
42
+ rejected: ReviewRejected[];
43
+ metadata: ReviewRunMetadata;
44
+ sink?: ReviewSinkResult;
45
+ }
46
+ export interface ReviewRunMetadata {
47
+ schemaVersion: typeof refineryReviewSchemaVersion;
48
+ runId: string;
49
+ adapter: string;
50
+ scope: string;
51
+ dryRun: true;
52
+ mode: ReviewRunMode;
53
+ createdAt: string;
54
+ writesAttempted: false;
55
+ sinkUrl: string | null;
56
+ runtime: Record<string, unknown>;
57
+ specialistOrder: string[];
58
+ sourceLimit: number | null;
59
+ sourceCharLimit: number | null;
60
+ intent: ReviewIntent;
61
+ request: string | null;
62
+ model?: Record<string, unknown>;
63
+ }
64
+ export interface ReviewFailureStatus {
65
+ ok: false;
66
+ schemaVersion: typeof refineryReviewSchemaVersion;
67
+ command: "review";
68
+ status: "failed";
69
+ runId: string;
70
+ runDir: string;
71
+ adapter: string | null;
72
+ scope: string;
73
+ mode: ReviewRunMode;
74
+ failedStep: string | null;
75
+ rawOutputPath: string | null;
76
+ createdAt: string;
77
+ failedAt: string;
78
+ error: Record<string, unknown>;
79
+ intent?: ReviewIntent;
80
+ request?: string | null;
81
+ }
82
+ export declare function writeReviewFailureStatus(args: {
83
+ runDir: string;
84
+ runId: string;
85
+ adapterName?: string | null;
86
+ scope: string;
87
+ mode: ReviewRunMode;
88
+ createdAt: string;
89
+ error: RefineryError;
90
+ intent?: ReviewIntent;
91
+ request?: string | null;
92
+ }): ReviewFailureStatus;
93
+ export declare function deliverReviewSink(sink: ReviewSinkOptions, result: Omit<ReviewRunResult, "sink">): Promise<ReviewSinkResult>;
@@ -0,0 +1,102 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { refineryReviewSchemaVersion } from "./adapter.js";
5
+ import { serializeRefineryError, RefineryError } from "./errors.js";
6
+ import { writeReviewArtifactManifest } from "./artifacts.js";
7
+ import {} from "./intents.js";
8
+ const DEFAULT_SINK_TIMEOUT_MS = 10_000;
9
+ const MAX_SINK_RESPONSE_TEXT_CHARS = 4000;
10
+ function writeJson(filePath, value) {
11
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
12
+ fs.writeFileSync(filePath, JSON.stringify(value, null, 2));
13
+ }
14
+ export function writeReviewFailureStatus(args) {
15
+ const status = {
16
+ ok: false,
17
+ schemaVersion: refineryReviewSchemaVersion,
18
+ command: "review",
19
+ status: "failed",
20
+ runId: args.runId,
21
+ runDir: args.runDir,
22
+ adapter: args.adapterName ?? null,
23
+ scope: args.scope,
24
+ mode: args.mode,
25
+ failedStep: args.error.failedStep ?? null,
26
+ rawOutputPath: args.error.rawOutputPath ?? null,
27
+ createdAt: args.createdAt,
28
+ failedAt: new Date().toISOString(),
29
+ error: serializeRefineryError(args.error),
30
+ ...(args.intent ? { intent: args.intent } : {}),
31
+ ...(args.request !== undefined ? { request: args.request } : {}),
32
+ };
33
+ writeJson(path.join(args.runDir, "status.json"), status);
34
+ writeJson(path.join(args.runDir, "review.json"), status);
35
+ writeReviewArtifactManifest({
36
+ runDir: args.runDir,
37
+ runId: args.runId,
38
+ adapterName: args.adapterName ?? null,
39
+ scope: args.scope,
40
+ mode: args.mode,
41
+ status: "failed",
42
+ createdAt: args.createdAt,
43
+ failedAt: status.failedAt,
44
+ failedStep: status.failedStep,
45
+ rawOutputPath: status.rawOutputPath,
46
+ error: status.error,
47
+ intent: args.intent,
48
+ request: args.request,
49
+ });
50
+ return status;
51
+ }
52
+ export async function deliverReviewSink(sink, result) {
53
+ const parsedUrl = new URL(sink.url);
54
+ if (parsedUrl.protocol === "file:") {
55
+ const target = fileURLToPath(parsedUrl);
56
+ writeJson(target, result);
57
+ return {
58
+ url: sink.url,
59
+ ok: true,
60
+ status: 0,
61
+ deliveredAt: new Date().toISOString(),
62
+ responseText: target,
63
+ };
64
+ }
65
+ const timeoutMs = sink.timeoutMs ?? DEFAULT_SINK_TIMEOUT_MS;
66
+ const controller = new AbortController();
67
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
68
+ let response;
69
+ try {
70
+ response = await fetch(sink.url, {
71
+ method: "POST",
72
+ headers: {
73
+ "content-type": "application/json",
74
+ ...(sink.headers ?? {}),
75
+ },
76
+ body: JSON.stringify(result),
77
+ signal: controller.signal,
78
+ });
79
+ }
80
+ catch (error) {
81
+ if (controller.signal.aborted) {
82
+ throw new RefineryError("SINK_CALLBACK_TIMEOUT", `Review sink callback timed out after ${timeoutMs}ms.`, { phase: "sink" });
83
+ }
84
+ throw error;
85
+ }
86
+ finally {
87
+ clearTimeout(timeout);
88
+ }
89
+ const responseText = (await response.text()).slice(0, MAX_SINK_RESPONSE_TEXT_CHARS);
90
+ const sinkResult = {
91
+ url: sink.url,
92
+ ok: response.ok,
93
+ status: response.status,
94
+ deliveredAt: new Date().toISOString(),
95
+ responseText,
96
+ };
97
+ if (!response.ok) {
98
+ throw new RefineryError("SINK_CALLBACK_FAILED", `Review sink callback failed with status ${response.status}: ${responseText}`, { phase: "sink", status: response.status });
99
+ }
100
+ return sinkResult;
101
+ }
102
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/core/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { LocalSpecialist } from "./types.ts";
2
+ export declare const claimScoutSpecialist: LocalSpecialist;