@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.
- package/LICENSE +201 -0
- package/README.md +85 -0
- package/agents/anticipation-mapper.json +34 -0
- package/agents/claim-amender.json +34 -0
- package/agents/claim-architect.json +34 -0
- package/agents/claim-rewriter.json +32 -0
- package/agents/delivery-finalizer.json +40 -0
- package/agents/diamond-cutter.json +33 -0
- package/agents/disclosure-analyst.json +26 -0
- package/agents/domain-explorer.json +37 -0
- package/agents/e2e-runner.json +34 -0
- package/agents/e2e-suite-judge.json +26 -0
- package/agents/event-clusterer.json +29 -0
- package/agents/novelty-searcher.json +40 -0
- package/agents/patent-browser-scout.json +49 -0
- package/agents/patent-examiner.json +36 -0
- package/agents/phase_agents/claim-rewriter.md +44 -0
- package/agents/phase_agents/delivery-finalizer.md +30 -0
- package/agents/phase_agents/diamond-cutter.md +47 -0
- package/agents/phase_agents/domain-explorer.md +27 -0
- package/agents/phase_agents/novelty-searcher.md +50 -0
- package/agents/phase_agents/problem-definer.md +32 -0
- package/agents/phase_agents/solution-developer.md +26 -0
- package/agents/phase_agents/verdict-judger.md +70 -0
- package/agents/players/audience-modeler.md +40 -0
- package/agents/players/chain-audit-keeper.md +41 -0
- package/agents/players/illumination-reviewer.md +42 -0
- package/agents/players/methodology-cadence-keeper.md +42 -0
- package/agents/players/substrate-edge-keeper.md +45 -0
- package/agents/prior-art-scout.json +45 -0
- package/agents/problem-definer.json +35 -0
- package/agents/seeds/steve_seed_a.json +12 -0
- package/agents/seeds/steve_seed_b.json +12 -0
- package/agents/seeds/steve_seed_c.json +12 -0
- package/agents/seeds/steve_seed_d.json +12 -0
- package/agents/sensor.json +22 -0
- package/agents/solution-developer.json +35 -0
- package/agents/source-walker.json +38 -0
- package/agents/spec-drafter.json +31 -0
- package/agents/sub_thread_soft_judge.json +26 -0
- package/agents/sub_thread_trace_sensor.json +22 -0
- package/agents/summarizer.json +25 -0
- package/agents/synthesis-writer.json +29 -0
- package/agents/triage-judge.json +39 -0
- package/agents/user_flow_judge.json +26 -0
- package/agents/user_flow_sensor.json +22 -0
- package/agents/verdict-judger.json +39 -0
- package/core_types/artifact.json +17 -0
- package/core_types/interpretation.json +16 -0
- package/core_types/judgment.json +16 -0
- package/core_types/plan.json +16 -0
- package/core_types/signal.json +16 -0
- package/core_types/verdict.json +27 -0
- package/dist/src/access_grant.d.ts +46 -0
- package/dist/src/access_grant.js +76 -0
- package/dist/src/access_grant.js.map +1 -0
- package/dist/src/acoustics.d.ts +9 -0
- package/dist/src/acoustics.js +65 -0
- package/dist/src/acoustics.js.map +1 -0
- package/dist/src/agent_profile.d.ts +36 -0
- package/dist/src/agent_profile.js +57 -0
- package/dist/src/agent_profile.js.map +1 -0
- package/dist/src/bifrost_invoker.d.ts +33 -0
- package/dist/src/bifrost_invoker.js +85 -0
- package/dist/src/bifrost_invoker.js.map +1 -0
- package/dist/src/canonical_core_types.d.ts +2 -0
- package/dist/src/canonical_core_types.js +111 -0
- package/dist/src/canonical_core_types.js.map +1 -0
- package/dist/src/canonical_form.d.ts +55 -0
- package/dist/src/canonical_form.js +93 -0
- package/dist/src/canonical_form.js.map +1 -0
- package/dist/src/charter.d.ts +37 -0
- package/dist/src/charter.js +86 -0
- package/dist/src/charter.js.map +1 -0
- package/dist/src/circle_of_fifths.d.ts +27 -0
- package/dist/src/circle_of_fifths.js +78 -0
- package/dist/src/circle_of_fifths.js.map +1 -0
- package/dist/src/claude_invoker.d.ts +102 -0
- package/dist/src/claude_invoker.js +760 -0
- package/dist/src/claude_invoker.js.map +1 -0
- package/dist/src/coltrane_profile.d.ts +87 -0
- package/dist/src/coltrane_profile.js +132 -0
- package/dist/src/coltrane_profile.js.map +1 -0
- package/dist/src/composition.d.ts +57 -0
- package/dist/src/composition.js +447 -0
- package/dist/src/composition.js.map +1 -0
- package/dist/src/core_types.d.ts +6 -0
- package/dist/src/core_types.js +25 -0
- package/dist/src/core_types.js.map +1 -0
- package/dist/src/document_factory.d.ts +89 -0
- package/dist/src/document_factory.js +176 -0
- package/dist/src/document_factory.js.map +1 -0
- package/dist/src/genome_schema.d.ts +512 -0
- package/dist/src/genome_schema.js +168 -0
- package/dist/src/genome_schema.js.map +1 -0
- package/dist/src/genome_writer.d.ts +67 -0
- package/dist/src/genome_writer.js +179 -0
- package/dist/src/genome_writer.js.map +1 -0
- package/dist/src/gig_song.d.ts +29 -0
- package/dist/src/gig_song.js +56 -0
- package/dist/src/gig_song.js.map +1 -0
- package/dist/src/gig_tracker.d.ts +54 -0
- package/dist/src/gig_tracker.js +109 -0
- package/dist/src/gig_tracker.js.map +1 -0
- package/dist/src/harmonic_validation.d.ts +11 -0
- package/dist/src/harmonic_validation.js +35 -0
- package/dist/src/harmonic_validation.js.map +1 -0
- package/dist/src/hooks.d.ts +27 -0
- package/dist/src/hooks.js +2 -0
- package/dist/src/hooks.js.map +1 -0
- package/dist/src/index.d.ts +36 -0
- package/dist/src/index.js +37 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/jsong.d.ts +47 -0
- package/dist/src/jsong.js +130 -0
- package/dist/src/jsong.js.map +1 -0
- package/dist/src/judges/user_flow_judge.d.ts +89 -0
- package/dist/src/judges/user_flow_judge.js +200 -0
- package/dist/src/judges/user_flow_judge.js.map +1 -0
- package/dist/src/learner.d.ts +37 -0
- package/dist/src/learner.js +30 -0
- package/dist/src/learner.js.map +1 -0
- package/dist/src/ledger.d.ts +225 -0
- package/dist/src/ledger.js +306 -0
- package/dist/src/ledger.js.map +1 -0
- package/dist/src/loader.d.ts +87 -0
- package/dist/src/loader.js +504 -0
- package/dist/src/loader.js.map +1 -0
- package/dist/src/mcp.d.ts +23 -0
- package/dist/src/mcp.js +125 -0
- package/dist/src/mcp.js.map +1 -0
- package/dist/src/modulation_path.d.ts +42 -0
- package/dist/src/modulation_path.js +60 -0
- package/dist/src/modulation_path.js.map +1 -0
- package/dist/src/output_validation.d.ts +19 -0
- package/dist/src/output_validation.js +51 -0
- package/dist/src/output_validation.js.map +1 -0
- package/dist/src/outputs.d.ts +125 -0
- package/dist/src/outputs.js +452 -0
- package/dist/src/outputs.js.map +1 -0
- package/dist/src/overtones.d.ts +42 -0
- package/dist/src/overtones.js +98 -0
- package/dist/src/overtones.js.map +1 -0
- package/dist/src/player_to_claude_code.d.ts +17 -0
- package/dist/src/player_to_claude_code.js +141 -0
- package/dist/src/player_to_claude_code.js.map +1 -0
- package/dist/src/playwright_cage.d.ts +28 -0
- package/dist/src/playwright_cage.js +47 -0
- package/dist/src/playwright_cage.js.map +1 -0
- package/dist/src/polyphony.d.ts +46 -0
- package/dist/src/polyphony.js +91 -0
- package/dist/src/polyphony.js.map +1 -0
- package/dist/src/portfolio.d.ts +52 -0
- package/dist/src/portfolio.js +186 -0
- package/dist/src/portfolio.js.map +1 -0
- package/dist/src/pricing.d.ts +23 -0
- package/dist/src/pricing.js +16 -0
- package/dist/src/pricing.js.map +1 -0
- package/dist/src/registry.d.ts +46 -0
- package/dist/src/registry.js +199 -0
- package/dist/src/registry.js.map +1 -0
- package/dist/src/runtime.d.ts +304 -0
- package/dist/src/runtime.js +1099 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/server.d.ts +88 -0
- package/dist/src/server.js +1692 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/server_entry.d.ts +2 -0
- package/dist/src/server_entry.js +40 -0
- package/dist/src/server_entry.js.map +1 -0
- package/dist/src/server_relay.d.ts +82 -0
- package/dist/src/server_relay.js +341 -0
- package/dist/src/server_relay.js.map +1 -0
- package/dist/src/simulate.d.ts +60 -0
- package/dist/src/simulate.js +72 -0
- package/dist/src/simulate.js.map +1 -0
- package/dist/src/skill_runner.mjs +34 -0
- package/dist/src/skill_subprocess.d.ts +65 -0
- package/dist/src/skill_subprocess.js +132 -0
- package/dist/src/skill_subprocess.js.map +1 -0
- package/dist/src/skills.d.ts +85 -0
- package/dist/src/skills.js +258 -0
- package/dist/src/skills.js.map +1 -0
- package/dist/src/subthread_recorder.d.ts +68 -0
- package/dist/src/subthread_recorder.js +166 -0
- package/dist/src/subthread_recorder.js.map +1 -0
- package/dist/src/tensor_read.d.ts +38 -0
- package/dist/src/tensor_read.js +60 -0
- package/dist/src/tensor_read.js.map +1 -0
- package/dist/src/test_honest_broker.d.ts +34 -0
- package/dist/src/test_honest_broker.js +155 -0
- package/dist/src/test_honest_broker.js.map +1 -0
- package/dist/src/test_topology.d.ts +22 -0
- package/dist/src/test_topology.js +137 -0
- package/dist/src/test_topology.js.map +1 -0
- package/dist/src/tones.d.ts +20 -0
- package/dist/src/tones.js +81 -0
- package/dist/src/tones.js.map +1 -0
- package/dist/src/tool_providers.d.ts +45 -0
- package/dist/src/tool_providers.js +104 -0
- package/dist/src/tool_providers.js.map +1 -0
- package/dist/src/type_versioning.d.ts +23 -0
- package/dist/src/type_versioning.js +31 -0
- package/dist/src/type_versioning.js.map +1 -0
- package/dist/src/version.d.ts +28 -0
- package/dist/src/version.js +86 -0
- package/dist/src/version.js.map +1 -0
- package/domain_types/claim-draft.json +34 -0
- package/domain_types/coverage-report.json +31 -0
- package/domain_types/draft-agent-profile.json +31 -0
- package/domain_types/draft-domain-type.json +28 -0
- package/domain_types/draft-standard.json +46 -0
- package/domain_types/e2e-observation.json +32 -0
- package/domain_types/e2e-report.json +30 -0
- package/domain_types/e2e-target.json +26 -0
- package/domain_types/e2e-verdict.json +26 -0
- package/domain_types/examine-round-record.json +40 -0
- package/domain_types/examiner-rejection.json +28 -0
- package/domain_types/failure-modes.json +31 -0
- package/domain_types/invention-analysis.json +34 -0
- package/domain_types/invention-spec.json +34 -0
- package/domain_types/novelty-analysis.json +28 -0
- package/domain_types/novelty-verdict.json +35 -0
- package/domain_types/parsed-conversation-trace.json +38 -0
- package/domain_types/pattern-extraction.json +62 -0
- package/domain_types/prior-art-hit.json +50 -0
- package/domain_types/project-charter.json +71 -0
- package/domain_types/provisional-draft.json +34 -0
- package/domain_types/raw-note.json +19 -0
- package/domain_types/repo-survey.json +28 -0
- package/domain_types/seeding-verdict.json +70 -0
- package/domain_types/soft-verdict.json +55 -0
- package/domain_types/summary.json +19 -0
- package/domain_types/triage-verdict.json +59 -0
- package/domain_types/user-flow-transcript.json +43 -0
- package/domain_types/user-flow-verdict.json +60 -0
- package/domain_types/verdict-record.json +39 -0
- package/package.json +82 -0
- package/skills/citation-verify/fixtures/basic.json +14 -0
- package/skills/citation-verify/meta.json +10 -0
- package/skills/citation-verify/skill.mjs +26 -0
- package/skills/claim-element-decompose/fixtures/basic.json +11 -0
- package/skills/claim-element-decompose/meta.json +10 -0
- package/skills/claim-element-decompose/skill.mjs +14 -0
- package/skills/diamond-cutting-discipline/fixtures/basic.json +13 -0
- package/skills/diamond-cutting-discipline/meta.json +19 -0
- package/skills/diamond-cutting-discipline/skill.md +46 -0
- package/skills/element-mapping-matrix/fixtures/basic.json +13 -0
- package/skills/element-mapping-matrix/meta.json +10 -0
- package/skills/element-mapping-matrix/skill.mjs +20 -0
- package/skills/number-adder/fixtures/basic.json +9 -0
- package/skills/number-adder/meta.json +10 -0
- package/skills/number-adder/skill.mjs +12 -0
- package/skills/patent-fetch/fixtures/parse.json +18 -0
- package/skills/patent-fetch/meta.json +11 -0
- package/skills/patent-fetch/skill.mjs +34 -0
- package/skills/query-expand/fixtures/basic.json +14 -0
- package/skills/query-expand/meta.json +10 -0
- package/skills/query-expand/skill.mjs +29 -0
- package/skills/run-vitest-band/fixtures/basic.json +9 -0
- package/skills/run-vitest-band/meta.json +18 -0
- package/skills/run-vitest-band/skill.mjs +22 -0
- package/skills/statutory-checklist/fixtures/basic.json +16 -0
- package/skills/statutory-checklist/meta.json +10 -0
- package/skills/statutory-checklist/skill.mjs +25 -0
- package/skills/summarize-tight/fixtures/basic.json +13 -0
- package/skills/summarize-tight/meta.json +20 -0
- package/skills/summarize-tight/skill.md +1 -0
- package/skills/verdict-gate/fixtures/basic.json +9 -0
- package/skills/verdict-gate/meta.json +10 -0
- package/skills/verdict-gate/skill.mjs +82 -0
- package/standards/e2e-suite-v0.json +44 -0
- package/standards/patent-triage-v0.json +98 -0
- package/standards/patent-triage-v1.json +84 -0
- package/standards/seed-from-local-repos-v0.json +115 -0
- package/standards/sub_thread_invocation.json +50 -0
- package/standards/summarize.json +40 -0
- package/standards/synthesis-walk-v0.json +108 -0
- 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":"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"}
|