@eir-labs/coltrane 0.4.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 (279) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +85 -0
  3. package/agents/anticipation-mapper.json +34 -0
  4. package/agents/claim-amender.json +34 -0
  5. package/agents/claim-architect.json +34 -0
  6. package/agents/claim-rewriter.json +32 -0
  7. package/agents/delivery-finalizer.json +40 -0
  8. package/agents/diamond-cutter.json +33 -0
  9. package/agents/disclosure-analyst.json +26 -0
  10. package/agents/domain-explorer.json +37 -0
  11. package/agents/e2e-runner.json +34 -0
  12. package/agents/e2e-suite-judge.json +26 -0
  13. package/agents/event-clusterer.json +29 -0
  14. package/agents/novelty-searcher.json +40 -0
  15. package/agents/patent-browser-scout.json +49 -0
  16. package/agents/patent-examiner.json +36 -0
  17. package/agents/phase_agents/claim-rewriter.md +44 -0
  18. package/agents/phase_agents/delivery-finalizer.md +30 -0
  19. package/agents/phase_agents/diamond-cutter.md +47 -0
  20. package/agents/phase_agents/domain-explorer.md +27 -0
  21. package/agents/phase_agents/novelty-searcher.md +50 -0
  22. package/agents/phase_agents/problem-definer.md +32 -0
  23. package/agents/phase_agents/solution-developer.md +26 -0
  24. package/agents/phase_agents/verdict-judger.md +70 -0
  25. package/agents/players/audience-modeler.md +40 -0
  26. package/agents/players/chain-audit-keeper.md +41 -0
  27. package/agents/players/illumination-reviewer.md +42 -0
  28. package/agents/players/methodology-cadence-keeper.md +42 -0
  29. package/agents/players/substrate-edge-keeper.md +45 -0
  30. package/agents/prior-art-scout.json +45 -0
  31. package/agents/problem-definer.json +35 -0
  32. package/agents/seeds/steve_seed_a.json +12 -0
  33. package/agents/seeds/steve_seed_b.json +12 -0
  34. package/agents/seeds/steve_seed_c.json +12 -0
  35. package/agents/seeds/steve_seed_d.json +12 -0
  36. package/agents/sensor.json +22 -0
  37. package/agents/solution-developer.json +35 -0
  38. package/agents/source-walker.json +38 -0
  39. package/agents/spec-drafter.json +31 -0
  40. package/agents/sub_thread_soft_judge.json +26 -0
  41. package/agents/sub_thread_trace_sensor.json +22 -0
  42. package/agents/summarizer.json +25 -0
  43. package/agents/synthesis-writer.json +29 -0
  44. package/agents/triage-judge.json +39 -0
  45. package/agents/user_flow_judge.json +26 -0
  46. package/agents/user_flow_sensor.json +22 -0
  47. package/agents/verdict-judger.json +39 -0
  48. package/core_types/artifact.json +17 -0
  49. package/core_types/interpretation.json +16 -0
  50. package/core_types/judgment.json +16 -0
  51. package/core_types/plan.json +16 -0
  52. package/core_types/signal.json +16 -0
  53. package/core_types/verdict.json +27 -0
  54. package/dist/src/access_grant.d.ts +46 -0
  55. package/dist/src/access_grant.js +76 -0
  56. package/dist/src/access_grant.js.map +1 -0
  57. package/dist/src/acoustics.d.ts +9 -0
  58. package/dist/src/acoustics.js +65 -0
  59. package/dist/src/acoustics.js.map +1 -0
  60. package/dist/src/agent_profile.d.ts +36 -0
  61. package/dist/src/agent_profile.js +57 -0
  62. package/dist/src/agent_profile.js.map +1 -0
  63. package/dist/src/bifrost_invoker.d.ts +33 -0
  64. package/dist/src/bifrost_invoker.js +85 -0
  65. package/dist/src/bifrost_invoker.js.map +1 -0
  66. package/dist/src/canonical_core_types.d.ts +2 -0
  67. package/dist/src/canonical_core_types.js +111 -0
  68. package/dist/src/canonical_core_types.js.map +1 -0
  69. package/dist/src/canonical_form.d.ts +55 -0
  70. package/dist/src/canonical_form.js +93 -0
  71. package/dist/src/canonical_form.js.map +1 -0
  72. package/dist/src/charter.d.ts +37 -0
  73. package/dist/src/charter.js +86 -0
  74. package/dist/src/charter.js.map +1 -0
  75. package/dist/src/circle_of_fifths.d.ts +27 -0
  76. package/dist/src/circle_of_fifths.js +78 -0
  77. package/dist/src/circle_of_fifths.js.map +1 -0
  78. package/dist/src/claude_invoker.d.ts +102 -0
  79. package/dist/src/claude_invoker.js +760 -0
  80. package/dist/src/claude_invoker.js.map +1 -0
  81. package/dist/src/coltrane_profile.d.ts +87 -0
  82. package/dist/src/coltrane_profile.js +132 -0
  83. package/dist/src/coltrane_profile.js.map +1 -0
  84. package/dist/src/composition.d.ts +57 -0
  85. package/dist/src/composition.js +447 -0
  86. package/dist/src/composition.js.map +1 -0
  87. package/dist/src/core_types.d.ts +6 -0
  88. package/dist/src/core_types.js +25 -0
  89. package/dist/src/core_types.js.map +1 -0
  90. package/dist/src/document_factory.d.ts +89 -0
  91. package/dist/src/document_factory.js +176 -0
  92. package/dist/src/document_factory.js.map +1 -0
  93. package/dist/src/genome_schema.d.ts +512 -0
  94. package/dist/src/genome_schema.js +168 -0
  95. package/dist/src/genome_schema.js.map +1 -0
  96. package/dist/src/genome_writer.d.ts +67 -0
  97. package/dist/src/genome_writer.js +179 -0
  98. package/dist/src/genome_writer.js.map +1 -0
  99. package/dist/src/gig_song.d.ts +29 -0
  100. package/dist/src/gig_song.js +56 -0
  101. package/dist/src/gig_song.js.map +1 -0
  102. package/dist/src/gig_tracker.d.ts +54 -0
  103. package/dist/src/gig_tracker.js +109 -0
  104. package/dist/src/gig_tracker.js.map +1 -0
  105. package/dist/src/harmonic_validation.d.ts +11 -0
  106. package/dist/src/harmonic_validation.js +35 -0
  107. package/dist/src/harmonic_validation.js.map +1 -0
  108. package/dist/src/hooks.d.ts +27 -0
  109. package/dist/src/hooks.js +2 -0
  110. package/dist/src/hooks.js.map +1 -0
  111. package/dist/src/index.d.ts +36 -0
  112. package/dist/src/index.js +37 -0
  113. package/dist/src/index.js.map +1 -0
  114. package/dist/src/jsong.d.ts +47 -0
  115. package/dist/src/jsong.js +130 -0
  116. package/dist/src/jsong.js.map +1 -0
  117. package/dist/src/judges/user_flow_judge.d.ts +89 -0
  118. package/dist/src/judges/user_flow_judge.js +200 -0
  119. package/dist/src/judges/user_flow_judge.js.map +1 -0
  120. package/dist/src/learner.d.ts +37 -0
  121. package/dist/src/learner.js +30 -0
  122. package/dist/src/learner.js.map +1 -0
  123. package/dist/src/ledger.d.ts +225 -0
  124. package/dist/src/ledger.js +306 -0
  125. package/dist/src/ledger.js.map +1 -0
  126. package/dist/src/loader.d.ts +87 -0
  127. package/dist/src/loader.js +504 -0
  128. package/dist/src/loader.js.map +1 -0
  129. package/dist/src/mcp.d.ts +23 -0
  130. package/dist/src/mcp.js +125 -0
  131. package/dist/src/mcp.js.map +1 -0
  132. package/dist/src/modulation_path.d.ts +42 -0
  133. package/dist/src/modulation_path.js +60 -0
  134. package/dist/src/modulation_path.js.map +1 -0
  135. package/dist/src/output_validation.d.ts +19 -0
  136. package/dist/src/output_validation.js +51 -0
  137. package/dist/src/output_validation.js.map +1 -0
  138. package/dist/src/outputs.d.ts +125 -0
  139. package/dist/src/outputs.js +452 -0
  140. package/dist/src/outputs.js.map +1 -0
  141. package/dist/src/overtones.d.ts +42 -0
  142. package/dist/src/overtones.js +98 -0
  143. package/dist/src/overtones.js.map +1 -0
  144. package/dist/src/player_to_claude_code.d.ts +17 -0
  145. package/dist/src/player_to_claude_code.js +141 -0
  146. package/dist/src/player_to_claude_code.js.map +1 -0
  147. package/dist/src/playwright_cage.d.ts +28 -0
  148. package/dist/src/playwright_cage.js +47 -0
  149. package/dist/src/playwright_cage.js.map +1 -0
  150. package/dist/src/polyphony.d.ts +46 -0
  151. package/dist/src/polyphony.js +91 -0
  152. package/dist/src/polyphony.js.map +1 -0
  153. package/dist/src/portfolio.d.ts +52 -0
  154. package/dist/src/portfolio.js +186 -0
  155. package/dist/src/portfolio.js.map +1 -0
  156. package/dist/src/pricing.d.ts +23 -0
  157. package/dist/src/pricing.js +16 -0
  158. package/dist/src/pricing.js.map +1 -0
  159. package/dist/src/registry.d.ts +46 -0
  160. package/dist/src/registry.js +199 -0
  161. package/dist/src/registry.js.map +1 -0
  162. package/dist/src/runtime.d.ts +304 -0
  163. package/dist/src/runtime.js +1099 -0
  164. package/dist/src/runtime.js.map +1 -0
  165. package/dist/src/server.d.ts +88 -0
  166. package/dist/src/server.js +1692 -0
  167. package/dist/src/server.js.map +1 -0
  168. package/dist/src/server_entry.d.ts +2 -0
  169. package/dist/src/server_entry.js +40 -0
  170. package/dist/src/server_entry.js.map +1 -0
  171. package/dist/src/server_relay.d.ts +82 -0
  172. package/dist/src/server_relay.js +341 -0
  173. package/dist/src/server_relay.js.map +1 -0
  174. package/dist/src/simulate.d.ts +60 -0
  175. package/dist/src/simulate.js +72 -0
  176. package/dist/src/simulate.js.map +1 -0
  177. package/dist/src/skill_runner.mjs +34 -0
  178. package/dist/src/skill_subprocess.d.ts +65 -0
  179. package/dist/src/skill_subprocess.js +132 -0
  180. package/dist/src/skill_subprocess.js.map +1 -0
  181. package/dist/src/skills.d.ts +85 -0
  182. package/dist/src/skills.js +258 -0
  183. package/dist/src/skills.js.map +1 -0
  184. package/dist/src/subthread_recorder.d.ts +68 -0
  185. package/dist/src/subthread_recorder.js +166 -0
  186. package/dist/src/subthread_recorder.js.map +1 -0
  187. package/dist/src/tensor_read.d.ts +38 -0
  188. package/dist/src/tensor_read.js +60 -0
  189. package/dist/src/tensor_read.js.map +1 -0
  190. package/dist/src/test_honest_broker.d.ts +34 -0
  191. package/dist/src/test_honest_broker.js +155 -0
  192. package/dist/src/test_honest_broker.js.map +1 -0
  193. package/dist/src/test_topology.d.ts +22 -0
  194. package/dist/src/test_topology.js +137 -0
  195. package/dist/src/test_topology.js.map +1 -0
  196. package/dist/src/tones.d.ts +20 -0
  197. package/dist/src/tones.js +81 -0
  198. package/dist/src/tones.js.map +1 -0
  199. package/dist/src/tool_providers.d.ts +45 -0
  200. package/dist/src/tool_providers.js +104 -0
  201. package/dist/src/tool_providers.js.map +1 -0
  202. package/dist/src/type_versioning.d.ts +23 -0
  203. package/dist/src/type_versioning.js +31 -0
  204. package/dist/src/type_versioning.js.map +1 -0
  205. package/dist/src/version.d.ts +28 -0
  206. package/dist/src/version.js +86 -0
  207. package/dist/src/version.js.map +1 -0
  208. package/domain_types/claim-draft.json +34 -0
  209. package/domain_types/coverage-report.json +31 -0
  210. package/domain_types/draft-agent-profile.json +31 -0
  211. package/domain_types/draft-domain-type.json +28 -0
  212. package/domain_types/draft-standard.json +46 -0
  213. package/domain_types/e2e-observation.json +32 -0
  214. package/domain_types/e2e-report.json +30 -0
  215. package/domain_types/e2e-target.json +26 -0
  216. package/domain_types/e2e-verdict.json +26 -0
  217. package/domain_types/examine-round-record.json +40 -0
  218. package/domain_types/examiner-rejection.json +28 -0
  219. package/domain_types/failure-modes.json +31 -0
  220. package/domain_types/invention-analysis.json +34 -0
  221. package/domain_types/invention-spec.json +34 -0
  222. package/domain_types/novelty-analysis.json +28 -0
  223. package/domain_types/novelty-verdict.json +35 -0
  224. package/domain_types/parsed-conversation-trace.json +38 -0
  225. package/domain_types/pattern-extraction.json +62 -0
  226. package/domain_types/prior-art-hit.json +50 -0
  227. package/domain_types/project-charter.json +71 -0
  228. package/domain_types/provisional-draft.json +34 -0
  229. package/domain_types/raw-note.json +19 -0
  230. package/domain_types/repo-survey.json +28 -0
  231. package/domain_types/seeding-verdict.json +70 -0
  232. package/domain_types/soft-verdict.json +55 -0
  233. package/domain_types/summary.json +19 -0
  234. package/domain_types/triage-verdict.json +59 -0
  235. package/domain_types/user-flow-transcript.json +43 -0
  236. package/domain_types/user-flow-verdict.json +60 -0
  237. package/domain_types/verdict-record.json +39 -0
  238. package/package.json +82 -0
  239. package/skills/citation-verify/fixtures/basic.json +14 -0
  240. package/skills/citation-verify/meta.json +10 -0
  241. package/skills/citation-verify/skill.mjs +26 -0
  242. package/skills/claim-element-decompose/fixtures/basic.json +11 -0
  243. package/skills/claim-element-decompose/meta.json +10 -0
  244. package/skills/claim-element-decompose/skill.mjs +14 -0
  245. package/skills/diamond-cutting-discipline/fixtures/basic.json +13 -0
  246. package/skills/diamond-cutting-discipline/meta.json +19 -0
  247. package/skills/diamond-cutting-discipline/skill.md +46 -0
  248. package/skills/element-mapping-matrix/fixtures/basic.json +13 -0
  249. package/skills/element-mapping-matrix/meta.json +10 -0
  250. package/skills/element-mapping-matrix/skill.mjs +20 -0
  251. package/skills/number-adder/fixtures/basic.json +9 -0
  252. package/skills/number-adder/meta.json +10 -0
  253. package/skills/number-adder/skill.mjs +12 -0
  254. package/skills/patent-fetch/fixtures/parse.json +18 -0
  255. package/skills/patent-fetch/meta.json +11 -0
  256. package/skills/patent-fetch/skill.mjs +34 -0
  257. package/skills/query-expand/fixtures/basic.json +14 -0
  258. package/skills/query-expand/meta.json +10 -0
  259. package/skills/query-expand/skill.mjs +29 -0
  260. package/skills/run-vitest-band/fixtures/basic.json +9 -0
  261. package/skills/run-vitest-band/meta.json +18 -0
  262. package/skills/run-vitest-band/skill.mjs +22 -0
  263. package/skills/statutory-checklist/fixtures/basic.json +16 -0
  264. package/skills/statutory-checklist/meta.json +10 -0
  265. package/skills/statutory-checklist/skill.mjs +25 -0
  266. package/skills/summarize-tight/fixtures/basic.json +13 -0
  267. package/skills/summarize-tight/meta.json +20 -0
  268. package/skills/summarize-tight/skill.md +1 -0
  269. package/skills/verdict-gate/fixtures/basic.json +9 -0
  270. package/skills/verdict-gate/meta.json +10 -0
  271. package/skills/verdict-gate/skill.mjs +82 -0
  272. package/standards/e2e-suite-v0.json +44 -0
  273. package/standards/patent-triage-v0.json +98 -0
  274. package/standards/patent-triage-v1.json +84 -0
  275. package/standards/seed-from-local-repos-v0.json +115 -0
  276. package/standards/sub_thread_invocation.json +50 -0
  277. package/standards/summarize.json +40 -0
  278. package/standards/synthesis-walk-v0.json +108 -0
  279. package/standards/user_flow_correctness.json +57 -0
@@ -0,0 +1,176 @@
1
+ // Document Factory — the 5-layer contract, as a coltrane-oss module (the genome-
2
+ // integrated build, after the Python form-proof validated the form).
3
+ // Principle: the document is a trajectory, not a string. Three deterministic
4
+ // transforms hold structure rigid; two bounded-inference layers compose. The
5
+ // InferenceRequest contract is a pure typed lambda — the proposer/checker split:
6
+ // the model proposes a typed object, the deterministic side validates it (reject +
7
+ // retry on miss). No call carries the whole document except the final smoothing.
8
+ import { readFileSync } from "node:fs";
9
+ import { execFileSync } from "node:child_process";
10
+ import { extractJson, DEFAULT_CHAIR_TIMEOUT_MS } from "./claude_invoker.js";
11
+ export class FactoryError extends Error {
12
+ }
13
+ /** Validate a response against its shape. Returns null if ok, else the reason. */
14
+ export function checkShape(resp, shape) {
15
+ for (const [k, t] of Object.entries(shape.fields)) {
16
+ if (!(k in resp))
17
+ return `missing field "${k}"`;
18
+ if (typeof resp[k] !== t)
19
+ return `field "${k}" must be ${t}, got ${typeof resp[k]}`;
20
+ const cap = shape.maxLength?.[k];
21
+ if (cap !== undefined && typeof resp[k] === "string" && resp[k].length > cap) {
22
+ return `field "${k}" exceeds maxLength ${cap}`;
23
+ }
24
+ }
25
+ return null;
26
+ }
27
+ /** Run one inference call under the contract: validate the typed return; on a miss,
28
+ * retry ONCE with the error fed back into constraints; then fail loud. Never
29
+ * silently passes a non-conforming response (the T3 discipline). */
30
+ export function runInference(req, infer) {
31
+ const first = infer(req);
32
+ const err = checkShape(first, req.response_type);
33
+ if (!err)
34
+ return first;
35
+ const retry = infer({ ...req, constraints: [...req.constraints, `previous response violated: ${err} — fix it`] });
36
+ const err2 = checkShape(retry, req.response_type);
37
+ if (!err2)
38
+ return retry;
39
+ throw new FactoryError(`inference response failed contract twice: ${err2}`);
40
+ }
41
+ // ---- the real inferer: bounded request → claude -p → typed object ----
42
+ /** Build the prompt for one inference call. PURE — same request, same prompt.
43
+ * The dataset is the ONLY material; constraints are hard prohibitions; the
44
+ * response shape is stated as the exact JSON contract the model must return. */
45
+ export function buildInfererPrompt(req) {
46
+ const fields = Object.entries(req.response_type.fields)
47
+ .map(([k, t]) => {
48
+ const cap = req.response_type.maxLength?.[k];
49
+ return ` - "${k}": ${t}${cap !== undefined ? ` (max ${cap} characters)` : ""}`;
50
+ })
51
+ .join("\n");
52
+ const constraints = req.constraints.length
53
+ ? req.constraints.map((c) => `- ${c}`).join("\n")
54
+ : "- (none)";
55
+ return [
56
+ `# Instruction\n${req.instruction}`,
57
+ `# Material (the ONLY source — introduce nothing beyond it)\n${JSON.stringify(req.dataset, null, 2)}`,
58
+ `# Hard constraints\n${constraints}`,
59
+ `# Required response\nReturn ONLY a single JSON object with exactly these fields:\n${fields}\nNo prose, no markdown, no code fence — just the JSON object.`,
60
+ ].join("\n\n");
61
+ }
62
+ /** The production Inferer. Spawns `claude -p <prompt>` and parses the JSON it
63
+ * returns (reusing extractJson — tolerant of fences/prose). The CLI spawn is the
64
+ * one non-deterministic seam; inject `run` to test the prompt-build + parse path. */
65
+ export function makeClaudeInferer(opts = {}) {
66
+ const bin = opts.bin ?? "claude";
67
+ const timeout = opts.timeout_ms ?? DEFAULT_CHAIR_TIMEOUT_MS;
68
+ const run = opts.run ??
69
+ ((b, args) => execFileSync(b, args, {
70
+ encoding: "utf-8",
71
+ maxBuffer: 64 * 1024 * 1024,
72
+ // #225 — this spawn had NEITHER, the exact wedge invoker_timeout.test.ts closed for
73
+ // the chair invoker. SIGKILL, not the default SIGTERM: a signal-trapping child
74
+ // outlives a SIGTERM budget (measured — 2063ms vs 305ms against a trapping child),
75
+ // so `timeout` alone throws while still letting the child run to completion.
76
+ timeout,
77
+ killSignal: "SIGKILL",
78
+ }));
79
+ return (req) => {
80
+ const args = ["-p", buildInfererPrompt(req)];
81
+ if (opts.model)
82
+ args.push("--model", opts.model);
83
+ // #221 policy 5 — the response shape's field names ARE the expected key set, right here
84
+ // at the call site. Behaviour propagates through the shared extractor; the key signal
85
+ // does not unless each call site passes it.
86
+ const fields = Object.keys(req.response_type.fields);
87
+ return extractJson(run(bin, args), fields.length > 0 ? { expectKeys: fields } : { requireUnambiguous: true });
88
+ };
89
+ }
90
+ export const GOVERNING_RULES = [
91
+ "Use only the facts in the dataset. Introduce nothing beyond them.",
92
+ "No hedging, no filler, no invented specifics.",
93
+ ];
94
+ export const SCHEMA_PACK = {
95
+ internal_update: { sections: ["summary", "what_we_built", "where_it_is", "next", "open_decisions"] },
96
+ deal_brief: { sections: ["short_version", "what_we_heard", "what_phase1_builds", "roadmap", "commercial_terms", "next_steps"] },
97
+ default: { sections: ["summary", "body", "next"] },
98
+ };
99
+ /** Load a schema-pack from a genome JSON file (eir_document_schemas.json). Validates
100
+ * each entry has a non-empty sections[] and a "default" exists — fails loud, so a
101
+ * malformed genome can never silently degrade to the bootstrap pack. */
102
+ export function loadSchemaPack(path) {
103
+ const raw = JSON.parse(readFileSync(path, "utf-8"));
104
+ if (!raw["default"])
105
+ throw new FactoryError(`schema pack ${path} has no "default" doc_type`);
106
+ const pack = {};
107
+ for (const [doc_type, v] of Object.entries(raw)) {
108
+ const entry = v;
109
+ if (!Array.isArray(entry.sections) || entry.sections.length === 0) {
110
+ throw new FactoryError(`schema pack ${path}: doc_type "${doc_type}" has no sections`);
111
+ }
112
+ pack[doc_type] = entry.density_targets
113
+ ? { sections: entry.sections, density_targets: entry.density_targets }
114
+ : { sections: entry.sections };
115
+ }
116
+ return pack;
117
+ }
118
+ // ---- Layer 0→1 — Intent → Shape · DETERMINISTIC ----
119
+ export function selectSkeleton(intent, pack = SCHEMA_PACK) {
120
+ const schema = pack[intent.doc_type] ?? pack["default"];
121
+ const density_targets = {};
122
+ for (const s of schema.sections)
123
+ density_targets[s] = schema.density_targets?.[s] ?? 600;
124
+ return { sections: schema.sections, density_targets };
125
+ }
126
+ // ---- Layer 1→2 — Shape → Slots · DETERMINISTIC (the narrative-kill rule) ----
127
+ export function bindSlots(skeleton, intent) {
128
+ const slots = [];
129
+ for (const id of skeleton.sections) {
130
+ const facts = intent.supplied_context[id] ?? [];
131
+ if (facts.length === 0)
132
+ continue; // NO fact → NO slot → no invented content
133
+ slots.push({
134
+ id, facts, constraints: GOVERNING_RULES,
135
+ response_type: { fields: { text: "string" }, maxLength: { text: skeleton.density_targets[id] ?? 600 } },
136
+ target_length: skeleton.density_targets[id] ?? 600,
137
+ });
138
+ }
139
+ return slots;
140
+ }
141
+ // ---- Layer 2→3 — Slots → Phrasings · INFERENCE (independent, parallel, cheap) ----
142
+ // Each call sees ONLY its slot's facts — never the document, never sibling slots.
143
+ export function composePhrasings(slots, infer) {
144
+ return slots.map((slot) => {
145
+ const resp = runInference({ dataset: { facts: slot.facts }, instruction: "Compose this section from its facts alone. No content beyond the facts.", response_type: slot.response_type, constraints: slot.constraints }, infer);
146
+ return { slot_id: slot.id, text: String(resp["text"]) };
147
+ });
148
+ }
149
+ // ---- Layer 3→4 — Phrasings → Coherence · INFERENCE (single, global, adds nothing) ----
150
+ export function smoothCoherence(phrasings, intent, infer) {
151
+ const ordered = phrasings.map((p) => p.text).join("\n\n");
152
+ const resp = runInference({
153
+ dataset: { ordered_phrasings: ordered },
154
+ instruction: "Join these sections into one voice. Fix transitions and repetition. Add nothing.",
155
+ response_type: { fields: { text: "string" } },
156
+ constraints: [...GOVERNING_RULES, "introduce no new facts"],
157
+ }, infer);
158
+ return { audience: intent.classification, doc_type: intent.doc_type, body: String(resp["text"]) };
159
+ }
160
+ // ---- Layer 4→5 — Coherence → Substrate · DETERMINISTIC (branded render) ----
161
+ export function render(draft) {
162
+ const header = draft.audience === "external"
163
+ ? `# ${draft.doc_type}\n\n*Eir Is Real, Inc.*\n\n`
164
+ : `# ${draft.doc_type} (internal)\n\n`;
165
+ return header + draft.body + "\n";
166
+ }
167
+ export function runFactory(intent, infer, pack = SCHEMA_PACK) {
168
+ const skeleton = selectSkeleton(intent, pack);
169
+ const slots = bindSlots(skeleton, intent);
170
+ const kept = new Set(slots.map((s) => s.id));
171
+ const dropped = skeleton.sections.filter((s) => !kept.has(s)); // narrative-kill record
172
+ const phrasings = composePhrasings(slots, infer);
173
+ const draft = smoothCoherence(phrasings, intent, infer);
174
+ return { skeleton, slots, dropped, phrasings, artifact: render(draft) };
175
+ }
176
+ //# sourceMappingURL=document_factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document_factory.js","sourceRoot":"","sources":["../../src/document_factory.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,qEAAqE;AACrE,6EAA6E;AAC7E,6EAA6E;AAC7E,iFAAiF;AACjF,mFAAmF;AACnF,iFAAiF;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAoB5E,MAAM,OAAO,YAAa,SAAQ,KAAK;CAAG;AAE1C,kFAAkF;AAClF,MAAM,UAAU,UAAU,CAAC,IAAuB,EAAE,KAAoB;IACtE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC;QAChD,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC,aAAa,CAAC,SAAS,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAK,IAAI,CAAC,CAAC,CAAY,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACzF,OAAO,UAAU,CAAC,uBAAuB,GAAG,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;qEAEqE;AACrE,MAAM,UAAU,YAAY,CAAC,GAAqB,EAAE,KAAc;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,+BAA+B,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAClH,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,IAAI,YAAY,CAAC,6CAA6C,IAAI,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,yEAAyE;AAEzE;;iFAEiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,GAAqB;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAClF,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM;QACxC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACjD,CAAC,CAAC,UAAU,CAAC;IACf,OAAO;QACL,kBAAkB,GAAG,CAAC,WAAW,EAAE;QACnC,+DAA+D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACrG,uBAAuB,WAAW,EAAE;QACpC,qFAAqF,MAAM,gEAAgE;KAC5J,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAcD;;sFAEsF;AACtF,MAAM,UAAU,iBAAiB,CAAC,OAA6B,EAAE;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,wBAAwB,CAAC;IAC5D,MAAM,GAAG,GACP,IAAI,CAAC,GAAG;QACR,CAAC,CAAC,CAAS,EAAE,IAAc,EAAE,EAAE,CAC7B,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE;YACpB,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;YAC3B,oFAAoF;YACpF,+EAA+E;YAC/E,mFAAmF;YACnF,6EAA6E;YAC7E,OAAO;YACP,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC,CAAC;IACR,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,wFAAwF;QACxF,sFAAsF;QACtF,4CAA4C;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,WAAW,CAChB,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,EACd,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAC1E,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAwBD,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,mEAAmE;IACnE,+CAA+C;CAChD,CAAC;AAYF,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE;IACpG,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAAE;IAC/H,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;CACnD,CAAC;AAEF;;yEAEyE;AACzE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAA4B,CAAC;IAC/E,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,eAAe,IAAI,4BAA4B,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,CAAc,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,YAAY,CAAC,eAAe,IAAI,eAAe,QAAQ,mBAAmB,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,eAAe;YACpC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE;YACtE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,OAAmB,WAAW;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAE,CAAC;IACzD,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;QAAE,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IACzF,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC;AACxD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,MAAqB;IACjE,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS,CAAC,0CAA0C;QAC5E,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe;YACvC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE;YACvG,aAAa,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,GAAG;SACnD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,KAAsB,EAAE,KAAc;IACrE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,YAAY,CACvB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,yEAAyE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAC5L,KAAK,CACN,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,SAA8B,EAAE,MAAqB,EAAE,KAAc;IACnG,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,YAAY,CACvB;QACE,OAAO,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE;QACvC,WAAW,EAAE,kFAAkF;QAC/F,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAC7C,WAAW,EAAE,CAAC,GAAG,eAAe,EAAE,wBAAwB,CAAC;KAC5D,EACD,KAAK,CACN,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AACpG,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,MAAM,CAAC,KAAoB;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,KAAK,UAAU;QAC1C,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,6BAA6B;QAClD,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,iBAAiB,CAAC;IACzC,OAAO,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AACpC,CAAC;AAID,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,KAAc,EAAE,OAAmB,WAAW;IAC9F,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;IACvF,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1E,CAAC"}