agent-nuvira 3.1.3 → 3.3.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/dist/agents/agents/reasoner.d.ts +8 -0
- package/dist/agents/agents/reasoner.d.ts.map +1 -1
- package/dist/agents/agents/reasoner.js +53 -2
- package/dist/agents/agents/reasoner.js.map +1 -1
- package/dist/agents/agents/writer.d.ts +24 -0
- package/dist/agents/agents/writer.d.ts.map +1 -1
- package/dist/agents/agents/writer.js +200 -0
- package/dist/agents/agents/writer.js.map +1 -1
- package/dist/agents/composite-plan.d.ts +143 -0
- package/dist/agents/composite-plan.d.ts.map +1 -0
- package/dist/agents/composite-plan.js +399 -0
- package/dist/agents/composite-plan.js.map +1 -0
- package/dist/agents/long-form-plan.d.ts +156 -0
- package/dist/agents/long-form-plan.d.ts.map +1 -0
- package/dist/agents/long-form-plan.js +274 -0
- package/dist/agents/long-form-plan.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +107 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +501 -35
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/prompt-assembly.d.ts +8 -0
- package/dist/agents/prompt-assembly.d.ts.map +1 -1
- package/dist/agents/prompt-assembly.js +17 -0
- package/dist/agents/prompt-assembly.js.map +1 -1
- package/dist/cli/chat.d.ts +33 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +161 -7
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/execute.d.ts +12 -0
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +150 -2
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +17 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +160 -1
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/models.d.ts.map +1 -1
- package/dist/cli/models.js +10 -0
- package/dist/cli/models.js.map +1 -1
- package/dist/cli/trace.d.ts +19 -0
- package/dist/cli/trace.d.ts.map +1 -1
- package/dist/cli/trace.js +109 -2
- package/dist/cli/trace.js.map +1 -1
- package/dist/gateway/registry.d.ts +31 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +162 -13
- package/dist/gateway/registry.js.map +1 -1
- package/dist/inference/model-entitlement.d.ts +46 -0
- package/dist/inference/model-entitlement.d.ts.map +1 -0
- package/dist/inference/model-entitlement.js +98 -0
- package/dist/inference/model-entitlement.js.map +1 -0
- package/dist/inference/tool-call-utils.d.ts +10 -0
- package/dist/inference/tool-call-utils.d.ts.map +1 -1
- package/dist/inference/tool-call-utils.js +90 -0
- package/dist/inference/tool-call-utils.js.map +1 -1
- package/dist/learning/autonomy-policy.d.ts +370 -0
- package/dist/learning/autonomy-policy.d.ts.map +1 -0
- package/dist/learning/autonomy-policy.js +544 -0
- package/dist/learning/autonomy-policy.js.map +1 -0
- package/dist/learning/cost-tracker.d.ts +14 -0
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +22 -0
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/credential-fingerprint.d.ts +58 -0
- package/dist/learning/credential-fingerprint.d.ts.map +1 -0
- package/dist/learning/credential-fingerprint.js +126 -0
- package/dist/learning/credential-fingerprint.js.map +1 -0
- package/dist/learning/deliverable-class.d.ts +178 -0
- package/dist/learning/deliverable-class.d.ts.map +1 -0
- package/dist/learning/deliverable-class.js +504 -0
- package/dist/learning/deliverable-class.js.map +1 -0
- package/dist/learning/engine-router.d.ts +12 -1
- package/dist/learning/engine-router.d.ts.map +1 -1
- package/dist/learning/engine-router.js +28 -0
- package/dist/learning/engine-router.js.map +1 -1
- package/dist/learning/long-form.d.ts +252 -0
- package/dist/learning/long-form.d.ts.map +1 -0
- package/dist/learning/long-form.js +521 -0
- package/dist/learning/long-form.js.map +1 -0
- package/dist/learning/model-first-router.d.ts +17 -0
- package/dist/learning/model-first-router.d.ts.map +1 -1
- package/dist/learning/model-first-router.js +27 -0
- package/dist/learning/model-first-router.js.map +1 -1
- package/dist/learning/model-registry.d.ts +66 -4
- package/dist/learning/model-registry.d.ts.map +1 -1
- package/dist/learning/model-registry.js +67 -6
- package/dist/learning/model-registry.js.map +1 -1
- package/dist/learning/model-warmup.d.ts +97 -2
- package/dist/learning/model-warmup.d.ts.map +1 -1
- package/dist/learning/model-warmup.js +165 -60
- package/dist/learning/model-warmup.js.map +1 -1
- package/dist/learning/prompt-layers.d.ts +61 -0
- package/dist/learning/prompt-layers.d.ts.map +1 -0
- package/dist/learning/prompt-layers.js +140 -0
- package/dist/learning/prompt-layers.js.map +1 -0
- package/dist/learning/provider-limits.d.ts +66 -0
- package/dist/learning/provider-limits.d.ts.map +1 -0
- package/dist/learning/provider-limits.js +184 -0
- package/dist/learning/provider-limits.js.map +1 -0
- package/dist/learning/reasoning-trace.d.ts +125 -1
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +85 -2
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/resilient-call.d.ts +36 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +80 -5
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/unattended-job.d.ts +350 -0
- package/dist/learning/unattended-job.d.ts.map +1 -0
- package/dist/learning/unattended-job.js +636 -0
- package/dist/learning/unattended-job.js.map +1 -0
- package/dist/learning/unattended-progress.d.ts +95 -0
- package/dist/learning/unattended-progress.d.ts.map +1 -0
- package/dist/learning/unattended-progress.js +147 -0
- package/dist/learning/unattended-progress.js.map +1 -0
- package/dist/learning/working-state.d.ts +109 -0
- package/dist/learning/working-state.d.ts.map +1 -0
- package/dist/learning/working-state.js +244 -0
- package/dist/learning/working-state.js.map +1 -0
- package/dist/nlu/conversation-gate.d.ts +33 -0
- package/dist/nlu/conversation-gate.d.ts.map +1 -1
- package/dist/nlu/conversation-gate.js +68 -3
- package/dist/nlu/conversation-gate.js.map +1 -1
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +95 -19
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/edit-verification.d.ts +142 -0
- package/dist/tools/edit-verification.d.ts.map +1 -0
- package/dist/tools/edit-verification.js +262 -0
- package/dist/tools/edit-verification.js.map +1 -0
- package/dist/tools/git-tool.d.ts.map +1 -1
- package/dist/tools/git-tool.js +37 -4
- package/dist/tools/git-tool.js.map +1 -1
- package/dist/tools/registry.d.ts +30 -2
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +40 -11
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-cli.d.ts.map +1 -1
- package/dist/tools/run-cli.js +40 -13
- package/dist/tools/run-cli.js.map +1 -1
- package/dist/tools/run-terminal.d.ts +6 -1
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +158 -18
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +109 -0
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +362 -2
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/web-dashboard/chat-console.d.ts +8 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +9 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/chat-retry.d.ts.map +1 -1
- package/dist/web-dashboard/chat-retry.js +10 -2
- package/dist/web-dashboard/chat-retry.js.map +1 -1
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +80 -8
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +81 -4
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/web-dashboard/public/assets/{index-Co7Hk2FT.js → index-kCUkORm7.js} +2 -2
- package/src/web-dashboard/public/assets/{index-Co7Hk2FT.js.map → index-kCUkORm7.js.map} +1 -1
- package/src/web-dashboard/public/index.html +1 -1
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Long-form execution — bounded units + a progress ledger for deliverables
|
|
3
|
+
* that are larger than one LLM generation (enterprise-grade hardening, G8).
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS (the WhatsApp story audit):
|
|
6
|
+
* The user asked for a 100-page story. Two facts made that ask IMPOSSIBLE for
|
|
7
|
+
* any of the 507 eligible models, independently of the model-shortage myth the
|
|
8
|
+
* failure message told:
|
|
9
|
+
*
|
|
10
|
+
* 1. The code writer generates with `maxTokens: 2048` — about 1,500 words,
|
|
11
|
+
* roughly 4–5 pages. A 100-page book is ~35,000 words, i.e. 25–40 times
|
|
12
|
+
* the largest artifact the pipeline could ever emit.
|
|
13
|
+
* 2. Nothing in the pipeline decomposed the ask. The plan was 4 steps, none
|
|
14
|
+
* of which produced prose, and no component counted words or pages, so
|
|
15
|
+
* there was no notion of "partially done" and nothing to resume.
|
|
16
|
+
*
|
|
17
|
+
* So the fix is structural, not a bigger prompt: split the work into bounded
|
|
18
|
+
* units that fit one generation, persist progress per unit, and report honest
|
|
19
|
+
* completion ("chapter 7 of 39"). This module owns the arithmetic and the
|
|
20
|
+
* ledger; the writer owns one unit at a time.
|
|
21
|
+
*
|
|
22
|
+
* WHY UNIT FILES, NOT APPENDS TO ONE FILE:
|
|
23
|
+
* The obvious design — append each chapter to `Mahagatha.md` — requires the
|
|
24
|
+
* writer to rewrite the whole file every unit (the FileChange contract is a
|
|
25
|
+
* full-content write). By chapter 35 that is ~35k words of input tokens per
|
|
26
|
+
* generation, which does not fit the context window it was going to be
|
|
27
|
+
* generated from. One file per unit keeps every generation bounded and makes
|
|
28
|
+
* the work genuinely resumable. The single document the user asked for is
|
|
29
|
+
* ASSEMBLED deterministically (pure string concatenation, no LLM, no cost)
|
|
30
|
+
* once the units are done.
|
|
31
|
+
*
|
|
32
|
+
* Storage: `~/.nuvira/memory/long-form.json`, keyed by project + document.
|
|
33
|
+
* Honours `NUVIRA_MEMORY_DIR` / `BUFF_MEMORY_DIR` like the other ledgers.
|
|
34
|
+
* Every write is best-effort — the ledger must NEVER break a turn.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Words per printed page. 350 is the standard estimate for a 12pt manuscript
|
|
38
|
+
* page (double-spaced manuscript convention is ~250; a typeset book page is
|
|
39
|
+
* ~350–400). Erring low keeps the plan honest: a "100-page" target that lands
|
|
40
|
+
* at 35,000 words is comfortably 100 pages, never short of it.
|
|
41
|
+
*/
|
|
42
|
+
export declare const WORDS_PER_PAGE = 350;
|
|
43
|
+
/**
|
|
44
|
+
* Words per generation unit. Sized to land inside a raised output cap with
|
|
45
|
+
* headroom for the model to finish a sentence: 900 words ≈ 1,400 tokens,
|
|
46
|
+
* comfortably under a 2,048-token floor and well within a 4k–8k cap. Larger
|
|
47
|
+
* units risk truncation, which is exactly how the original writer failed
|
|
48
|
+
* ("no parseable output" on a truncated response).
|
|
49
|
+
*/
|
|
50
|
+
export declare const WORDS_PER_GENERATION = 900;
|
|
51
|
+
/** Words per chapter when the user counts chapters instead of pages. */
|
|
52
|
+
export declare const WORDS_PER_CHAPTER = 2500;
|
|
53
|
+
/**
|
|
54
|
+
* Units planned per turn. A 100-page book is ~39 units; planning all of them
|
|
55
|
+
* as orchestrator steps would build a plan the run could never finish, and a
|
|
56
|
+
* single-run attempt is precisely the "bigger ask" the agent kept losing.
|
|
57
|
+
* Bounded batches let each turn end with CONCRETE delivered text and a
|
|
58
|
+
* recorded progress line, and the next turn resumes where it stopped.
|
|
59
|
+
*/
|
|
60
|
+
export declare const MAX_UNITS_PER_RUN = 4;
|
|
61
|
+
/** The unit the user counted in. */
|
|
62
|
+
export type LongFormUnit = 'pages' | 'words' | 'chapters' | 'sections';
|
|
63
|
+
/** A parsed long-form target derived from the goal. */
|
|
64
|
+
export interface LongFormTarget {
|
|
65
|
+
/** What the user counted in ("100 pages"). */
|
|
66
|
+
unit: LongFormUnit;
|
|
67
|
+
/** How many of `unit` they asked for. */
|
|
68
|
+
amount: number;
|
|
69
|
+
/** Total words the finished deliverable should reach. */
|
|
70
|
+
wordsTarget: number;
|
|
71
|
+
/** How the work is split into generations. */
|
|
72
|
+
unitCount: number;
|
|
73
|
+
/** Where the number came from, for auditability. */
|
|
74
|
+
source: string;
|
|
75
|
+
}
|
|
76
|
+
/** One bounded unit of work (a chapter/section). */
|
|
77
|
+
export interface SectionProgress {
|
|
78
|
+
/** 1-based position. */
|
|
79
|
+
index: number;
|
|
80
|
+
/** Display title ("Chapter 3"). */
|
|
81
|
+
title: string;
|
|
82
|
+
/** Path of this unit's file, relative to the project root. */
|
|
83
|
+
path: string;
|
|
84
|
+
/** Words this unit should aim for. */
|
|
85
|
+
targetWords: number;
|
|
86
|
+
status: 'pending' | 'done' | 'failed';
|
|
87
|
+
/** Words actually produced (measured from the file when present). */
|
|
88
|
+
words: number;
|
|
89
|
+
/** Generation attempts spent on this unit. */
|
|
90
|
+
attempts: number;
|
|
91
|
+
lastError?: string;
|
|
92
|
+
}
|
|
93
|
+
/** The persisted job: everything needed to resume the work in a later turn. */
|
|
94
|
+
export interface LongFormJob {
|
|
95
|
+
/** Ledger key: project path + document path. */
|
|
96
|
+
key: string;
|
|
97
|
+
/** The original goal, so a resumed turn re-states intent faithfully. */
|
|
98
|
+
goal: string;
|
|
99
|
+
/** Absolute project root. */
|
|
100
|
+
projectPath: string;
|
|
101
|
+
/** The document the user actually asked for (assembled at the end). */
|
|
102
|
+
docPath: string;
|
|
103
|
+
/** 'creative' | 'document' — drives titling and the writer's prompt. */
|
|
104
|
+
deliverableClass: 'creative' | 'document';
|
|
105
|
+
target: LongFormTarget;
|
|
106
|
+
sections: SectionProgress[];
|
|
107
|
+
/** Words across every DONE unit. */
|
|
108
|
+
words: number;
|
|
109
|
+
status: 'in_progress' | 'done';
|
|
110
|
+
createdAt: number;
|
|
111
|
+
updatedAt: number;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extract the long-form target from a goal, or `null` when the goal does not
|
|
115
|
+
* name a magnitude (in which case the ask fits one generation and this module
|
|
116
|
+
* stays out of the way).
|
|
117
|
+
*
|
|
118
|
+
* Understands the shapes users actually type — "a 100 page story", "100-page
|
|
119
|
+
* book", "in 12 chapters", "about 5000 words", "10 पेज", "एक उपन्यास जिसमें 8
|
|
120
|
+
* अध्याय हों" — and prefers the most specific unit named.
|
|
121
|
+
*/
|
|
122
|
+
export declare function parseLongFormTarget(goal: string): LongFormTarget | null;
|
|
123
|
+
/** Default display title for a unit, by class. */
|
|
124
|
+
export declare function sectionTitle(cls: 'creative' | 'document', index: number): string;
|
|
125
|
+
/**
|
|
126
|
+
* Build the unit list for a target. Word targets are distributed evenly with
|
|
127
|
+
* the remainder spread over the first units, so the SUM of unit targets always
|
|
128
|
+
* equals the overall word target — the plan cannot silently undershoot the ask.
|
|
129
|
+
*/
|
|
130
|
+
export declare function planSections(target: LongFormTarget, cls: 'creative' | 'document', dir?: string): SectionProgress[];
|
|
131
|
+
/** Pages implied by a word count (for progress reporting). */
|
|
132
|
+
export declare function estimatePages(words: number): number;
|
|
133
|
+
/** Stable key for a (project, document) pair. */
|
|
134
|
+
export declare function longFormKey(projectPath: string, docPath: string): string;
|
|
135
|
+
/** Both `chapters/03-chapter-3.md` (relative) and absolute path forms. */
|
|
136
|
+
export declare function sectionAbsolutePath(projectPath: string, sectionPath: string): string;
|
|
137
|
+
/**
|
|
138
|
+
* Start a job, or RESUME an existing one for the same document.
|
|
139
|
+
*
|
|
140
|
+
* Resuming is the whole point: the failing session re-derived the same plan
|
|
141
|
+
* six times and lost every partial result. A resumed job keeps its existing
|
|
142
|
+
* units, their statuses and their word counts, so the caller can ask for the
|
|
143
|
+
* next pending batch and make real forward progress per turn.
|
|
144
|
+
*/
|
|
145
|
+
export declare function startOrResumeJob(input: {
|
|
146
|
+
projectPath: string;
|
|
147
|
+
docPath: string;
|
|
148
|
+
goal: string;
|
|
149
|
+
target: LongFormTarget;
|
|
150
|
+
deliverableClass: 'creative' | 'document';
|
|
151
|
+
dir?: string;
|
|
152
|
+
}): {
|
|
153
|
+
job: LongFormJob;
|
|
154
|
+
resumed: boolean;
|
|
155
|
+
};
|
|
156
|
+
/** Read a job without creating one. */
|
|
157
|
+
export declare function getJob(projectPath: string, docPath: string): LongFormJob | null;
|
|
158
|
+
/**
|
|
159
|
+
* The most recently updated job for a project REGARDLESS of status, or null.
|
|
160
|
+
*
|
|
161
|
+
* The unattended runner needs this: after the last batch completes the job it
|
|
162
|
+
* must be able to read the FINISHED record to confirm the document exists, and
|
|
163
|
+
* `findInProgressJob` (correctly) hides those.
|
|
164
|
+
*/
|
|
165
|
+
export declare function findLatestJob(projectPath: string): LongFormJob | null;
|
|
166
|
+
/**
|
|
167
|
+
* The most recently updated UNFINISHED job for a project, or null.
|
|
168
|
+
*
|
|
169
|
+
* WHY: a follow-up turn says "continue" — which names no document, no length,
|
|
170
|
+
* and no class. Re-deriving the job from that text would land on the default
|
|
171
|
+
* filename and start a SECOND book from scratch, which is the "agent goes in a
|
|
172
|
+
* loop and never delivers" behaviour this ledger exists to end. The in-flight
|
|
173
|
+
* job for this project is the correct target for a continuation.
|
|
174
|
+
*/
|
|
175
|
+
export declare function findInProgressJob(projectPath: string): LongFormJob | null;
|
|
176
|
+
/** Number of words in a body of text (whitespace-delimited). */
|
|
177
|
+
export declare function countWords(text: string): number;
|
|
178
|
+
/**
|
|
179
|
+
* Record the outcome of ONE unit.
|
|
180
|
+
*
|
|
181
|
+
* `ok` requires actual content: a unit whose file is missing or empty is a
|
|
182
|
+
* FAILURE even if the writer reported success. That is the G10 principle
|
|
183
|
+
* applied to long-form work — "the step ran" is not "the work exists".
|
|
184
|
+
*/
|
|
185
|
+
export declare function recordSectionOutcome(job: LongFormJob, index: number, outcome: {
|
|
186
|
+
ok: boolean;
|
|
187
|
+
words?: number;
|
|
188
|
+
error?: string;
|
|
189
|
+
}): LongFormJob;
|
|
190
|
+
/**
|
|
191
|
+
* Persist a job that the caller has already mutated (e.g. after writing unit
|
|
192
|
+
* files). Kept separate from `recordSectionOutcome` so batch callers write
|
|
193
|
+
* once instead of once per unit.
|
|
194
|
+
*/
|
|
195
|
+
export declare function saveJob(job: LongFormJob): void;
|
|
196
|
+
/**
|
|
197
|
+
* The next pending units to execute — bounded per run so a turn always ends
|
|
198
|
+
* with delivered text rather than an unfinished marathon.
|
|
199
|
+
*/
|
|
200
|
+
export declare function nextPendingSections(job: LongFormJob, limit?: number): SectionProgress[];
|
|
201
|
+
/** Progress snapshot for reporting. */
|
|
202
|
+
export interface LongFormProgress {
|
|
203
|
+
done: number;
|
|
204
|
+
total: number;
|
|
205
|
+
words: number;
|
|
206
|
+
wordsTarget: number;
|
|
207
|
+
pages: number;
|
|
208
|
+
pagesTarget: number;
|
|
209
|
+
percent: number;
|
|
210
|
+
complete: boolean;
|
|
211
|
+
}
|
|
212
|
+
export declare function jobProgress(job: LongFormJob): LongFormProgress;
|
|
213
|
+
/**
|
|
214
|
+
* The honest progress line — reported to the user every turn.
|
|
215
|
+
*
|
|
216
|
+
* Deliberately quotes BOTH the unit count and the words, because the user
|
|
217
|
+
* asked in pages and a word count alone would look like a dodge. This is the
|
|
218
|
+
* sentence the original session could never produce: it had no idea how much
|
|
219
|
+
* of the book existed.
|
|
220
|
+
*/
|
|
221
|
+
export declare function formatProgress(job: LongFormJob): string;
|
|
222
|
+
/** The next `limit` units as a plan the writer can execute one at a time. */
|
|
223
|
+
export declare function nextUnitBrief(job: LongFormJob, limit?: number): Array<{
|
|
224
|
+
index: number;
|
|
225
|
+
title: string;
|
|
226
|
+
path: string;
|
|
227
|
+
targetWords: number;
|
|
228
|
+
/** Continuity: the previous unit's tail, so the prose joins up. */
|
|
229
|
+
previousTail: string;
|
|
230
|
+
}>;
|
|
231
|
+
/** Last `chars` of a file, or '' when it does not exist. */
|
|
232
|
+
export declare function readTail(absolutePath: string, chars: number): string;
|
|
233
|
+
export interface AssemblyResult {
|
|
234
|
+
path: string;
|
|
235
|
+
files: number;
|
|
236
|
+
words: number;
|
|
237
|
+
pages: number;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Deterministically assemble the finished document from its unit files.
|
|
241
|
+
*
|
|
242
|
+
* Pure concatenation — no LLM, no cost, no drift. Runs only when every unit is
|
|
243
|
+
* done, so the assembled document is never a half-book presented as complete.
|
|
244
|
+
* Returns null when the job is not finished (the caller must not claim
|
|
245
|
+
* completion, and must keep reporting progress instead).
|
|
246
|
+
*/
|
|
247
|
+
export declare function assembleDocument(job: LongFormJob): AssemblyResult | null;
|
|
248
|
+
/** Relative path display, for a concise log line. */
|
|
249
|
+
export declare function displayPath(projectPath: string, absolute: string): string;
|
|
250
|
+
/** Test/reset hook: forget every job. */
|
|
251
|
+
export declare function clearLongFormJobs(): void;
|
|
252
|
+
//# sourceMappingURL=long-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-form.d.ts","sourceRoot":"","sources":["../../src/learning/long-form.ts"],"names":[],"mappings":"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"}
|