@plurnk/plurnk-service 1.27.0 → 1.28.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/.env.defaults +13 -19
- package/SPEC.md +81 -140
- package/dist/build-info.json +1 -1
- package/dist/content/line-marker.d.ts +1 -0
- package/dist/content/line-marker.d.ts.map +1 -1
- package/dist/content/line-marker.js +5 -0
- package/dist/content/line-marker.js.map +1 -1
- package/dist/content/read-projector.js +3 -3
- package/dist/content/read-projector.js.map +1 -1
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +7 -4
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/core/AdmittedTurnExecutor.d.ts +3 -1
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +19 -4
- package/dist/core/AdmittedTurnExecutor.js.map +1 -1
- package/dist/core/BudgetReadout.d.ts +4 -4
- package/dist/core/BudgetReadout.d.ts.map +1 -1
- package/dist/core/BudgetReadout.js +26 -41
- package/dist/core/BudgetReadout.js.map +1 -1
- package/dist/core/ContextFit.d.ts +26 -0
- package/dist/core/ContextFit.d.ts.map +1 -0
- package/dist/core/ContextFit.js +56 -0
- package/dist/core/ContextFit.js.map +1 -0
- package/dist/core/Dispatcher.d.ts +13 -0
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +142 -3
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/EmissionHead.d.ts +8 -0
- package/dist/core/EmissionHead.d.ts.map +1 -0
- package/dist/core/EmissionHead.js +29 -0
- package/dist/core/EmissionHead.js.map +1 -0
- package/dist/core/LogEntryProjection.d.ts +1 -0
- package/dist/core/LogEntryProjection.d.ts.map +1 -1
- package/dist/core/LogEntryProjection.js +9 -0
- package/dist/core/LogEntryProjection.js.map +1 -1
- package/dist/core/LogWriter.d.ts +42 -0
- package/dist/core/LogWriter.d.ts.map +1 -1
- package/dist/core/LogWriter.js +11 -5
- package/dist/core/LogWriter.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts +17 -4
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +70 -117
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PacketBuilder.sql +0 -7
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +5 -1
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/TurnMaterialization.d.ts +6 -2
- package/dist/core/TurnMaterialization.d.ts.map +1 -1
- package/dist/core/TurnMaterialization.js +64 -16
- package/dist/core/TurnMaterialization.js.map +1 -1
- package/dist/core/TurnOps.js +7 -7
- package/dist/core/TurnOps.js.map +1 -1
- package/dist/core/TurnRunner.d.ts +1 -0
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +141 -139
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/TurnRunner.sql +2 -2
- package/dist/core/env-catalog.js +2 -2
- package/dist/core/env-catalog.js.map +1 -1
- package/dist/core/fork.sql +4 -10
- package/dist/core/git-env.d.ts +1 -1
- package/dist/core/git-env.d.ts.map +1 -1
- package/dist/core/git-env.js +19 -12
- package/dist/core/git-env.js.map +1 -1
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +11 -5
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/git-state.js +1 -1
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/operation-target-groups.d.ts +1 -1
- package/dist/core/operation-target-groups.d.ts.map +1 -1
- package/dist/core/operation-target-groups.js +27 -5
- package/dist/core/operation-target-groups.js.map +1 -1
- package/dist/core/packet-wire.d.ts +80 -10
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +181 -226
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +3 -2
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/DigestRender.d.ts.map +1 -1
- package/dist/digest/DigestRender.js +74 -37
- package/dist/digest/DigestRender.js.map +1 -1
- package/dist/digest/digest-rows.d.ts +7 -0
- package/dist/digest/digest-rows.d.ts.map +1 -1
- package/dist/digest/digest-rows.js.map +1 -1
- package/dist/digest/digest.sql +15 -2
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +2 -0
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +11 -2
- package/dist/server/Daemon.js.map +1 -1
- package/migrations/013_graph_regions.sql +1 -0
- package/migrations/014_stream_timing.sql +1 -0
- package/migrations/015_request_evidence.sql +1 -0
- package/package.json +34 -34
- package/dist/core/KnownToxins.d.ts +0 -4
- package/dist/core/KnownToxins.d.ts.map +0 -1
- package/dist/core/KnownToxins.js +0 -22
- package/dist/core/KnownToxins.js.map +0 -1
- package/dist/core/ReasoningView.d.ts +0 -12
- package/dist/core/ReasoningView.d.ts.map +0 -1
- package/dist/core/ReasoningView.js +0 -40
- package/dist/core/ReasoningView.js.map +0 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TextCoordinates } from "@plurnk/plurnk-mimetypes";
|
|
2
|
+
import { contentWeight } from "./content-weight.js";
|
|
3
|
+
// {§emission-row} — the one automatic cut left under {§context-fit}: an emission row shows its head,
|
|
4
|
+
// about a hundred tokens of curation weight — enough to recognise the turn, never enough to matter to
|
|
5
|
+
// the budget. A format rule, not a lever anyone would turn, so it lives here and not on the panel.
|
|
6
|
+
export const EMISSION_HEAD_WEIGHT = 100;
|
|
7
|
+
export default class EmissionHead {
|
|
8
|
+
// Whole lines while they fit the head; a first line longer than the head is cut inside itself.
|
|
9
|
+
static cut(body) {
|
|
10
|
+
if (contentWeight(body) <= EMISSION_HEAD_WEIGHT)
|
|
11
|
+
return { head: body, cut: false };
|
|
12
|
+
let end = 0;
|
|
13
|
+
for (const line of TextCoordinates.logicalLines(body)) {
|
|
14
|
+
if (contentWeight(body.slice(0, line.end)) > EMISSION_HEAD_WEIGHT)
|
|
15
|
+
break;
|
|
16
|
+
end = line.end;
|
|
17
|
+
}
|
|
18
|
+
if (end === 0) {
|
|
19
|
+
for (const codePoint of body) {
|
|
20
|
+
const next = end + codePoint.length;
|
|
21
|
+
if (contentWeight(body.slice(0, next)) > EMISSION_HEAD_WEIGHT)
|
|
22
|
+
break;
|
|
23
|
+
end = next;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { head: body.slice(0, end), cut: true };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=EmissionHead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmissionHead.js","sourceRoot":"","sources":["../../src/core/EmissionHead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,qGAAqG;AACrG,sGAAsG;AACtG,mGAAmG;AACnG,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,+FAA+F;IAC/F,MAAM,CAAC,GAAG,CAAC,IAAY;QACnB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,oBAAoB;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACnF,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB;gBAAE,MAAM;YACzE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,CAAC;QACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACZ,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;gBACpC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,oBAAoB;oBAAE,MAAM;gBACrE,GAAG,GAAG,IAAI,CAAC;YACf,CAAC;QACL,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACnD,CAAC;CACJ"}
|
|
@@ -8,6 +8,7 @@ export default class LogEntryProjection {
|
|
|
8
8
|
#private;
|
|
9
9
|
static op(row: LogEntryProjectionRow): string | null;
|
|
10
10
|
static isEmission(row: LogEntryProjectionRow): boolean;
|
|
11
|
+
static isReasoning(row: LogEntryProjectionRow): boolean;
|
|
11
12
|
static leaf(row: LogEntryProjectionRow): string;
|
|
12
13
|
static base(coordinate: string): string;
|
|
13
14
|
static coordinate(coordinate: string, row: LogEntryProjectionRow): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogEntryProjection.d.ts","sourceRoot":"","sources":["../../src/core/LogEntryProjection.ts"],"names":[],"mappings":"AAGA,UAAU,qBAAqB;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;CACzB;AAID,MAAM,CAAC,OAAO,OAAO,kBAAkB;;IAUnC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAOnD;IAID,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAIrD;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"LogEntryProjection.d.ts","sourceRoot":"","sources":["../../src/core/LogEntryProjection.ts"],"names":[],"mappings":"AAGA,UAAU,qBAAqB;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;CACzB;AAID,MAAM,CAAC,OAAO,OAAO,kBAAkB;;IAUnC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAOnD;IAID,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAIrD;IAGD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAItD;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAS9C;IAED,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtC;IAED,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAGxE;IAED,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAIzE;CAEJ"}
|
|
@@ -29,9 +29,18 @@ export default class LogEntryProjection {
|
|
|
29
29
|
const attrs = LogEntryProjection.#decode(row.attrs, "attrs");
|
|
30
30
|
return attrs !== null && typeof attrs === "object" && attrs.kind === "emission";
|
|
31
31
|
}
|
|
32
|
+
// {§reasoning-row}: the harness's READ of the turn's reasoning source, addressed by its own leaf.
|
|
33
|
+
static isReasoning(row) {
|
|
34
|
+
if (row.op !== "READ")
|
|
35
|
+
return false;
|
|
36
|
+
const attrs = LogEntryProjection.#decode(row.attrs, "attrs");
|
|
37
|
+
return attrs !== null && typeof attrs === "object" && attrs.kind === "reasoning";
|
|
38
|
+
}
|
|
32
39
|
static leaf(row) {
|
|
33
40
|
if (LogEntryProjection.isEmission(row))
|
|
34
41
|
return "emission";
|
|
42
|
+
if (LogEntryProjection.isReasoning(row))
|
|
43
|
+
return "reasoning";
|
|
35
44
|
const op = LogEntryProjection.op(row);
|
|
36
45
|
// An execution row's leaf is its runtime: the op as written.
|
|
37
46
|
if (isExecutionOp(op))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogEntryProjection.js","sourceRoot":"","sources":["../../src/core/LogEntryProjection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LogEntryProjection.js","sourceRoot":"","sources":["../../src/core/LogEntryProjection.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AASzD,4EAA4E;AAC5E,wDAAwD;AACxD,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,OAAO,CAAC,KAAc,EAAE,KAAa;QACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,SAAS,CAAC,uCAAuC,KAAK,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;IACL,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,GAA0B;QAChC,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,KAAK,MAAM;eAC5D,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;eAC1C,KAA4B,CAAC,IAAI,KAAK,oBAAoB,CAAC;QACnE,OAAO,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,CAAC;IAED,iGAAiG;IACjG,sGAAsG;IACtG,MAAM,CAAC,UAAU,CAAC,GAA0B;QACxC,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACpC,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA4B,CAAC,IAAI,KAAK,UAAU,CAAC;IAC5G,CAAC;IAED,kGAAkG;IAClG,MAAM,CAAC,WAAW,CAAC,GAA0B;QACzC,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACpC,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA4B,CAAC,IAAI,KAAK,WAAW,CAAC;IAC7G,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAA0B;QAClC,IAAI,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QAC1D,IAAI,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC;YAAE,OAAO,WAAW,CAAC;QAC5D,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACtC,6DAA6D;QAC7D,IAAI,aAAa,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,IAAI,EAAE,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,UAAkB;QAC1B,OAAO,UAAU,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,UAAkB,EAAE,GAA0B;QAC5D,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAqB,EAAE,GAA0B;QAC5D,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAChC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;CAEJ"}
|
package/dist/core/LogWriter.d.ts
CHANGED
|
@@ -3,6 +3,36 @@ import type { Db } from "./Db.ts";
|
|
|
3
3
|
import type { WriterTier } from "./scheme-types.ts";
|
|
4
4
|
import type { LogCurationPlan } from "../schemes/Log.ts";
|
|
5
5
|
import type { DispatchResult } from "./Dispatcher.ts";
|
|
6
|
+
export interface LogRecord extends Record<string, unknown> {
|
|
7
|
+
worker_id: number;
|
|
8
|
+
loop_id: number;
|
|
9
|
+
turn_id: number;
|
|
10
|
+
sequence: number;
|
|
11
|
+
origin: WriterTier;
|
|
12
|
+
source: string | null;
|
|
13
|
+
model_call_id: number | null;
|
|
14
|
+
op: string;
|
|
15
|
+
signal: string | null;
|
|
16
|
+
scheme: string | null;
|
|
17
|
+
username: string | null;
|
|
18
|
+
password: string | null;
|
|
19
|
+
hostname: string | null;
|
|
20
|
+
port: number | null;
|
|
21
|
+
pathname: string | null;
|
|
22
|
+
query: string | null;
|
|
23
|
+
fragment: string | null;
|
|
24
|
+
lineMarker: string | null;
|
|
25
|
+
tx: string;
|
|
26
|
+
mimetype_tx: string;
|
|
27
|
+
rx: string;
|
|
28
|
+
mimetype_rx: string;
|
|
29
|
+
status_rx: number;
|
|
30
|
+
weight: number;
|
|
31
|
+
state: string;
|
|
32
|
+
outcome: null;
|
|
33
|
+
attrs: string;
|
|
34
|
+
initial_folded: string;
|
|
35
|
+
}
|
|
6
36
|
export default class LogWriter {
|
|
7
37
|
#private;
|
|
8
38
|
constructor({ db, weighContent, extractTarget, canonColumns, signalToJson, isProposal }: {
|
|
@@ -37,5 +67,17 @@ export default class LogWriter {
|
|
|
37
67
|
curationPlan: LogCurationPlan | null;
|
|
38
68
|
modelCallId: number | null;
|
|
39
69
|
}): Promise<number>;
|
|
70
|
+
record({ statement, result, workspaceId, workerId, loopId, turnId, sequence, origin, curationPlan, modelCallId, }: {
|
|
71
|
+
statement: PlurnkStatement;
|
|
72
|
+
result: DispatchResult;
|
|
73
|
+
workspaceId: number;
|
|
74
|
+
workerId: number;
|
|
75
|
+
loopId: number;
|
|
76
|
+
turnId: number;
|
|
77
|
+
sequence: number;
|
|
78
|
+
origin: WriterTier;
|
|
79
|
+
curationPlan: LogCurationPlan | null;
|
|
80
|
+
modelCallId: number | null;
|
|
81
|
+
}): Promise<LogRecord>;
|
|
40
82
|
}
|
|
41
83
|
//# sourceMappingURL=LogWriter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogWriter.d.ts","sourceRoot":"","sources":["../../src/core/LogWriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG5E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"LogWriter.d.ts","sourceRoot":"","sources":["../../src/core/LogWriter.ts"],"names":[],"mappings":"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"}
|
package/dist/core/LogWriter.js
CHANGED
|
@@ -31,6 +31,16 @@ export default class LogWriter {
|
|
|
31
31
|
throw new Error("Prepared execution must have an unclaimed output address.");
|
|
32
32
|
attrs.pathname = await ExecutionOutputs.claim(this.#db, workspaceId, execRouteOf(statement).runtime);
|
|
33
33
|
}
|
|
34
|
+
const record = await this.record({ statement, result, workspaceId, workerId, loopId, turnId, sequence, origin, curationPlan, modelCallId });
|
|
35
|
+
await this.#canonColumns(record, workspaceId);
|
|
36
|
+
const row = await this.#db.engine_insert_log_entry.get(record);
|
|
37
|
+
if (row === undefined)
|
|
38
|
+
throw new Error("Dispatcher.#writeLog: INSERT ... RETURNING produced no row");
|
|
39
|
+
return row.id;
|
|
40
|
+
}
|
|
41
|
+
// The row a dispatch would write, before it is written: the fit test renders it to weigh it
|
|
42
|
+
// ({§context-fit}) and writeLog inserts it. A failed result gets its instance here.
|
|
43
|
+
async record({ statement, result, workspaceId, workerId, loopId, turnId, sequence, origin, curationPlan, modelCallId, }) {
|
|
34
44
|
const durableStatement = DurableStatement.project(statement);
|
|
35
45
|
const target = this.#extractTarget(primaryTargetOf(durableStatement), workspaceId);
|
|
36
46
|
const lineMarker = primaryLineMarkerOf(durableStatement);
|
|
@@ -121,11 +131,7 @@ export default class LogWriter {
|
|
|
121
131
|
attrs,
|
|
122
132
|
initial_folded: LogVisibility.serialize(LogVisibility.OPEN),
|
|
123
133
|
};
|
|
124
|
-
|
|
125
|
-
const row = await this.#db.engine_insert_log_entry.get(record);
|
|
126
|
-
if (row === undefined)
|
|
127
|
-
throw new Error("Dispatcher.#writeLog: INSERT ... RETURNING produced no row");
|
|
128
|
-
return row.id;
|
|
134
|
+
return record;
|
|
129
135
|
}
|
|
130
136
|
}
|
|
131
137
|
//# sourceMappingURL=LogWriter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogWriter.js","sourceRoot":"","sources":["../../src/core/LogWriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"LogWriter.js","sourceRoot":"","sources":["../../src/core/LogWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,17 @@ import type { Db } from "./Db.ts";
|
|
|
3
3
|
import type SchemeRegistry from "./SchemeRegistry.ts";
|
|
4
4
|
import type ExecutorRegistry from "./ExecutorRegistry.ts";
|
|
5
5
|
import type { GitStatus } from "./git-state.ts";
|
|
6
|
+
import { type BodiedLogRow } from "./packet-wire.ts";
|
|
6
7
|
import type { RequestPacket } from "./StoredPacket.ts";
|
|
7
8
|
import type { ChatMessage, Provider } from "@plurnk/plurnk-providers";
|
|
8
9
|
export type { ChatMessage } from "@plurnk/plurnk-providers";
|
|
10
|
+
export interface WindowOverflow {
|
|
11
|
+
readonly tokens: number;
|
|
12
|
+
readonly budget: number;
|
|
13
|
+
readonly wall: number;
|
|
14
|
+
readonly excess: number;
|
|
15
|
+
readonly excessWeight: number;
|
|
16
|
+
}
|
|
9
17
|
export interface CurationOverflow {
|
|
10
18
|
readonly weight: number;
|
|
11
19
|
readonly budget: number;
|
|
@@ -23,10 +31,12 @@ export default class PacketBuilder {
|
|
|
23
31
|
pathname: string;
|
|
24
32
|
content: string;
|
|
25
33
|
}>): void;
|
|
26
|
-
static validateConfiguration(env?: NodeJS.ProcessEnv):
|
|
34
|
+
static validateConfiguration(env?: NodeJS.ProcessEnv): void;
|
|
35
|
+
static assertConfiguration(env?: NodeJS.ProcessEnv): void;
|
|
27
36
|
emissionsFor(packet: RequestPacket): ReadonlyMap<string, string>;
|
|
28
37
|
curationBudgetFor(packet: RequestPacket): number | null;
|
|
29
|
-
|
|
38
|
+
bodiedRowsOf(packet: RequestPacket): readonly BodiedLogRow[];
|
|
39
|
+
buildRequestPacket({ initialMessages, recap, workspaceId, workerId, loopId, currentTurnSeq, provider, gitStatus, notices, transientOpenLogEntryId, turnId, bodiless, }: {
|
|
30
40
|
initialMessages: ChatMessage[];
|
|
31
41
|
recap?: string;
|
|
32
42
|
gitStatus: GitStatus | null;
|
|
@@ -37,16 +47,19 @@ export default class PacketBuilder {
|
|
|
37
47
|
provider: Provider;
|
|
38
48
|
notices?: readonly Notice[];
|
|
39
49
|
transientOpenLogEntryId?: number | null;
|
|
40
|
-
promptProjection?: "automatic" | "withheld";
|
|
41
50
|
turnId?: number | null;
|
|
51
|
+
bodiless?: ReadonlySet<number>;
|
|
42
52
|
}): Promise<RequestPacket>;
|
|
43
|
-
admitOutput(packet: RequestPacket, turnId: number): Promise<boolean>;
|
|
44
53
|
recordObservations(packet: RequestPacket): Promise<void>;
|
|
45
54
|
referenceEntries(workspaceId: number): Promise<Array<{
|
|
46
55
|
pathname: string;
|
|
47
56
|
content: string;
|
|
48
57
|
}>>;
|
|
49
58
|
curationOverflow(packet: RequestPacket): CurationOverflow | null;
|
|
59
|
+
windowOverflow(packet: RequestPacket, provider: {
|
|
60
|
+
readonly inputCapacity: number | null;
|
|
61
|
+
readonly inputWall: number | null;
|
|
62
|
+
}): WindowOverflow | null;
|
|
50
63
|
buildFailurePointers(loopId: number, currentTurnSeq: number): Promise<Array<{
|
|
51
64
|
status: number;
|
|
52
65
|
coordinate: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PacketBuilder.d.ts","sourceRoot":"","sources":["../../src/core/PacketBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"PacketBuilder.d.ts","sourceRoot":"","sources":["../../src/core/PacketBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
var _a;
|
|
2
1
|
import WorkerName from "./WorkerName.js";
|
|
3
2
|
import { generatedPathname, renderAddress } from "./plurnk-uri.js";
|
|
4
3
|
import { contentWeight } from "./content-weight.js";
|
|
@@ -17,14 +16,10 @@ import { acceptedKinds } from "./attachments.js";
|
|
|
17
16
|
// drift between wire and digest possible.
|
|
18
17
|
import PacketWire from "./packet-wire.js";
|
|
19
18
|
import LogEntryProjection from "./LogEntryProjection.js";
|
|
20
|
-
import { scopeEnvToAlias } from "@plurnk/plurnk-providers";
|
|
21
|
-
import ProviderInstantiate from "./ProviderInstantiate.js";
|
|
22
19
|
import BudgetReadout from "./BudgetReadout.js";
|
|
23
20
|
import TokenCalibration from "./TokenCalibration.js";
|
|
24
|
-
import LineAnchors from "../content/line-anchors.js";
|
|
25
21
|
import ToolResources from "./ToolResources.js";
|
|
26
|
-
import
|
|
27
|
-
import { ConfigurationError, Knob } from "@plurnk/plurnk-meta";
|
|
22
|
+
import { ConfigurationError } from "@plurnk/plurnk-meta";
|
|
28
23
|
import Results, { OperationFailureError } from "./results.js";
|
|
29
24
|
const trimHorizontal = (value) => value.replace(/^[\t ]+|[\t ]+$/gu, "");
|
|
30
25
|
const tableCells = (line) => {
|
|
@@ -95,16 +90,19 @@ const compactDefinitionTables = (markdown) => {
|
|
|
95
90
|
return `| ${cells.map(trimHorizontal).join(" | ")} |${carriageReturn}`;
|
|
96
91
|
}).join("\n");
|
|
97
92
|
};
|
|
98
|
-
// Packet assembly ({§packet-assembly}) and
|
|
99
|
-
//
|
|
100
|
-
class PacketBuilder {
|
|
93
|
+
// Packet assembly ({§packet-assembly}) and the budget and wall measures ({§context-over-budget-row}, {§context-wall}). Deliberate
|
|
94
|
+
// curation stays in scoped KILL; what fits was decided where each row landed ({§context-fit}).
|
|
95
|
+
export default class PacketBuilder {
|
|
101
96
|
#db;
|
|
102
97
|
// {§tokenomics-calibrated-readout} — admission and client gauges consume
|
|
103
98
|
// the allowance captured before this request can change model evidence.
|
|
104
99
|
#curationBudgets = new WeakMap();
|
|
100
|
+
// {§context-budget} — each loop's high-water budget, for the input capacity it was derived from.
|
|
101
|
+
#loopBudgets = new Map();
|
|
105
102
|
#emissions = new WeakMap();
|
|
103
|
+
// {§context-own-rows-fit} — the rows of each built packet the wall may still take, newest last.
|
|
104
|
+
#bodiedRows = new WeakMap();
|
|
106
105
|
#streamObservations = new WeakMap();
|
|
107
|
-
#unadmittedOutput = new WeakMap();
|
|
108
106
|
#schemes;
|
|
109
107
|
// Boot-discovered runtime executors, late-injected on Engine after daemon
|
|
110
108
|
// start() — read through a thunk so the post-construction set is visible.
|
|
@@ -113,8 +111,6 @@ class PacketBuilder {
|
|
|
113
111
|
// {§functionality-documents} — family-generated documents of a Worker's
|
|
114
112
|
// published Functionality, reconciled with its other reference entries.
|
|
115
113
|
#functionalityDocuments = () => [];
|
|
116
|
-
// {§tokenomics-prompt-projection-share} — prompt projection is alias-scoped
|
|
117
|
-
// through the same environment contract as provider configuration.
|
|
118
114
|
constructor({ db, schemes, executors }) {
|
|
119
115
|
this.#db = db;
|
|
120
116
|
this.#schemes = schemes;
|
|
@@ -124,18 +120,23 @@ class PacketBuilder {
|
|
|
124
120
|
setFunctionalityDocuments(documents) {
|
|
125
121
|
this.#functionalityDocuments = documents;
|
|
126
122
|
}
|
|
127
|
-
// Prompt projection is Core policy, scoped through the same alias contract as providers.
|
|
128
|
-
static #KNOBS = ["PLURNK_SERVICE_PROMPT_PROJECTION"];
|
|
129
123
|
static #declaredKnobs;
|
|
130
|
-
// {§configuration-repair-path}
|
|
124
|
+
// {§configuration-repair-path} — retired knobs fail naming what replaced them: the context
|
|
125
|
+
// budget has one rule ({§context-fit}) and one gauge ({§context-gauge}).
|
|
131
126
|
static validateConfiguration(env = process.env) {
|
|
132
|
-
const declared =
|
|
127
|
+
const declared = PacketBuilder.#declaredKnobs ??= Object.keys(parseEnv(readFileSync(new URL("../../.env.defaults", import.meta.url), "utf8")));
|
|
128
|
+
const oneRule = "a result arrives whole when it fits the budget and as its size otherwise ({§context-fit}); nothing is previewed, projected or paged";
|
|
133
129
|
const retired = {
|
|
134
130
|
PLURNK_SERVICE_PROMPT_BUDGET: "provider input capacity is derived from context and output budgets",
|
|
135
131
|
PLURNK_SERVICE_SAFETY: "provider request-shaped capacity admission owns physical headroom",
|
|
132
|
+
PLURNK_SERVICE_PROMPT_PROJECTION: oneRule,
|
|
133
|
+
PLURNK_SERVICE_BUDGET_PRESSURE: "the gauge carries no threshold and no mandate ({§context-gauge})",
|
|
134
|
+
PLURNK_REASONING_VIEW_LINES: "initialization authors no reasoning and reads none back ({§worker-initialization-entry})",
|
|
135
|
+
PLURNK_REASONING_EMPTY_TURN_LINES: "an empty turn reads nothing back; its 422 row is the whole receipt ({§empty-turn})",
|
|
136
136
|
};
|
|
137
|
+
const retiredKey = new RegExp(`^(${Object.keys(retired).join("|")})(?:_.*)?$`, "u");
|
|
137
138
|
for (const key of Object.keys(env)) {
|
|
138
|
-
const match =
|
|
139
|
+
const match = retiredKey.exec(key);
|
|
139
140
|
const reason = match === null ? undefined : retired[match[1]];
|
|
140
141
|
if (reason !== undefined)
|
|
141
142
|
throw new ConfigurationError(key, `${key} is retired: ${reason}.`);
|
|
@@ -154,12 +155,12 @@ class PacketBuilder {
|
|
|
154
155
|
if (match !== null)
|
|
155
156
|
throw new ConfigurationError(key, `${key} is retired: the provider-owned knob is ${moved[match[1]]}${match[2] ?? ""}.`);
|
|
156
157
|
}
|
|
157
|
-
return Knob.percent("PLURNK_SERVICE_PROMPT_PROJECTION", env);
|
|
158
158
|
}
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
// {§configuration-repair-path} — the same refusal as an operation failure: a 503 Problem naming the
|
|
160
|
+
// key, so a loop reports the failed demand instead of dying on an unshaped exception.
|
|
161
|
+
static assertConfiguration(env = process.env) {
|
|
161
162
|
try {
|
|
162
|
-
|
|
163
|
+
PacketBuilder.validateConfiguration(env);
|
|
163
164
|
}
|
|
164
165
|
catch (cause) {
|
|
165
166
|
if (!(cause instanceof ConfigurationError))
|
|
@@ -180,10 +181,18 @@ class PacketBuilder {
|
|
|
180
181
|
throw new Error("curationBudgetFor: the packet was not built by this PacketBuilder");
|
|
181
182
|
return budget;
|
|
182
183
|
}
|
|
184
|
+
// {§context-own-rows-fit} — the packet's rows still carrying a body or a native part, in row order.
|
|
185
|
+
bodiedRowsOf(packet) {
|
|
186
|
+
const rows = this.#bodiedRows.get(packet.sections);
|
|
187
|
+
if (rows === undefined)
|
|
188
|
+
throw new Error("bodiedRowsOf: the packet was not built by this PacketBuilder");
|
|
189
|
+
return rows;
|
|
190
|
+
}
|
|
183
191
|
// {§packet-stored-shape} — assemble the system/user request before the
|
|
184
192
|
// provider call; complete the same record with the provider response.
|
|
185
|
-
async buildRequestPacket({ initialMessages, recap = "", workspaceId, workerId, loopId, currentTurnSeq, provider, gitStatus, notices = [], transientOpenLogEntryId = null,
|
|
186
|
-
|
|
193
|
+
async buildRequestPacket({ initialMessages, recap = "", workspaceId, workerId, loopId, currentTurnSeq, provider, gitStatus, notices = [], transientOpenLogEntryId = null, turnId = null, bodiless, }) {
|
|
194
|
+
// {§configuration-repair-path} — a retired packet knob refuses packet construction, never startup.
|
|
195
|
+
PacketBuilder.assertConfiguration();
|
|
187
196
|
// {§loop-policy-effective-read} Validate active-loop policy before any
|
|
188
197
|
// packet assembly or provider spend, independently of its presentation.
|
|
189
198
|
await LoopPolicyReader.read(this.#db, loopId);
|
|
@@ -214,17 +223,11 @@ class PacketBuilder {
|
|
|
214
223
|
const log = await this.#buildLog(workerId, transientOpenLogEntryId, turnId);
|
|
215
224
|
const failures = await this.buildFailurePointers(loopId, currentTurnSeq);
|
|
216
225
|
const weighContent = contentWeight;
|
|
226
|
+
// {§context-budget} — one room: the provider's input capacity in curation weight, bounding the
|
|
227
|
+
// whole packet. Nothing here sizes a part of it.
|
|
217
228
|
const inputCapacity = provider.inputCapacity;
|
|
218
229
|
const calibration = inputCapacity === null ? 1 : await TokenCalibration.forModel(this.#db, provider.model);
|
|
219
|
-
const curationBudget = TokenCalibration.capacity(inputCapacity, calibration);
|
|
220
|
-
// {§tokenomics-prompt-projection-share} — the cold-start allocation
|
|
221
|
-
// preserves prompt bytes as rolling calibration changes the overall ceiling.
|
|
222
|
-
const projectionBudget = TokenCalibration.capacity(inputCapacity);
|
|
223
|
-
const promptProjectionWeight = promptProjection === "withheld"
|
|
224
|
-
? 0
|
|
225
|
-
: projectionBudget === null
|
|
226
|
-
? null
|
|
227
|
-
: Math.floor(projectionBudget * projectionShare);
|
|
230
|
+
const curationBudget = this.#loopBudget(loopId, inputCapacity, TokenCalibration.capacity(inputCapacity, calibration));
|
|
228
231
|
const budgetReadout = BudgetReadout.draft(curationBudget);
|
|
229
232
|
// The canonical default order, trust boundary, and cache-locality bias are
|
|
230
233
|
// specified at {§packet-cache-monotone}. Budget placeholders resolve only
|
|
@@ -265,7 +268,7 @@ class PacketBuilder {
|
|
|
265
268
|
const renderedLog = PacketWire.renderLogWithAccounting(log, weighContent, {
|
|
266
269
|
projectRoot: workspaceRow?.project_root ?? null,
|
|
267
270
|
acceptedAttachmentKinds: new Set(acceptedKinds(provider.inputModalities)),
|
|
268
|
-
...(
|
|
271
|
+
...(bodiless === undefined ? {} : { bodiless }),
|
|
269
272
|
});
|
|
270
273
|
const attachmentsWeight = renderedLog.attachments.reduce((sum, { weight }) => sum + weight, 0);
|
|
271
274
|
const defaults = [
|
|
@@ -294,9 +297,8 @@ class PacketBuilder {
|
|
|
294
297
|
{ name: "errors", slot: "user", header: "Errors", content: PacketWire.renderFailurePointers(failures) },
|
|
295
298
|
{ name: "notices", slot: "user", header: "Notices", content: PacketWire.renderNotices(notices) },
|
|
296
299
|
{ name: "git", slot: "user", header: "Git Status", content: PacketWire.renderGit(gitStatus) },
|
|
297
|
-
//
|
|
298
|
-
|
|
299
|
-
{ name: "budget", slot: "user", header: "Context Curation", content: budgetReadout },
|
|
300
|
+
// {§context-gauge} — the model's word for curation weight is tokens; this is never provider admission.
|
|
301
|
+
{ name: "budget", slot: "user", header: "Context", content: budgetReadout },
|
|
300
302
|
// The messages section closes the status clump as a pointer list of open
|
|
301
303
|
// arrivals; bodies arrive through their inbound SEND rows ({§message-arrival}).
|
|
302
304
|
{ name: "messages", slot: "user", header: "Open Messages", content: prompt },
|
|
@@ -314,18 +316,18 @@ class PacketBuilder {
|
|
|
314
316
|
.filter(({ coordinate }) => emissions.has(coordinate))
|
|
315
317
|
.reduce((sum, { weight }) => sum + weight, 0);
|
|
316
318
|
const budgetSection = drafts.find((section) => section.name === "budget");
|
|
317
|
-
if (budgetSection !== undefined
|
|
319
|
+
if (budgetSection !== undefined) {
|
|
318
320
|
const transformedLog = drafts.find((section) => section.name === "log");
|
|
319
321
|
const curationTargets = transformedLog?.content === renderedLog.content
|
|
320
322
|
? renderedLog.curationTargets
|
|
321
323
|
: [];
|
|
322
|
-
const content = BudgetReadout.resolve(budgetSection.content,
|
|
324
|
+
const content = BudgetReadout.resolve(budgetSection.content, (candidate) => {
|
|
323
325
|
const candidateDrafts = drafts.map((section) => section === budgetSection ? { ...section, content: candidate } : section);
|
|
324
326
|
return weighContent(PacketWire.renderSlot(candidateDrafts, "system"))
|
|
325
327
|
+ weighContent(PacketWire.renderSlot(candidateDrafts, "user"))
|
|
326
328
|
+ attachmentsWeight
|
|
327
329
|
+ emissionsWeight;
|
|
328
|
-
}, curationTargets
|
|
330
|
+
}, curationTargets);
|
|
329
331
|
drafts = drafts.map((section) => section === budgetSection ? { ...section, content } : section);
|
|
330
332
|
}
|
|
331
333
|
// Core alone turns validated drafts into measured durable sections. {§packet-items} — the
|
|
@@ -342,24 +344,11 @@ class PacketBuilder {
|
|
|
342
344
|
const packet = { weight: renderWeight + attachmentsWeight + emissionsWeight, sections, attributions: [], attachments: [...renderedLog.attachments] };
|
|
343
345
|
this.#curationBudgets.set(packet.sections, curationBudget);
|
|
344
346
|
this.#emissions.set(packet.sections, emissions);
|
|
347
|
+
// {§context-own-rows-fit} — a transformed log is one item the wall cannot take row by row.
|
|
348
|
+
this.#bodiedRows.set(packet.sections, drafts.find((section) => section.name === "log")?.content === renderedLog.content ? renderedLog.bodied : []);
|
|
345
349
|
this.#streamObservations.set(packet.sections, openChannels);
|
|
346
|
-
this.#unadmittedOutput.set(packet.sections, renderedLog.unadmittedOutput);
|
|
347
350
|
return packet;
|
|
348
351
|
}
|
|
349
|
-
// {§context-output-selection} — one statement commits the first-presentation
|
|
350
|
-
// decision. Speculative packet builds never call this mutation boundary.
|
|
351
|
-
async admitOutput(packet, turnId) {
|
|
352
|
-
const ids = this.#unadmittedOutput.get(packet.sections);
|
|
353
|
-
if (ids === undefined)
|
|
354
|
-
throw new Error("Cannot admit output from an unbuilt request packet.");
|
|
355
|
-
if (ids.length === 0)
|
|
356
|
-
return false;
|
|
357
|
-
const withheld = this.curationOverflow(packet) !== null;
|
|
358
|
-
const result = await this.#db.engine_admit_log_outputs.run({ ids: JSON.stringify(ids), turn_id: turnId, withheld: withheld ? 1 : 0 });
|
|
359
|
-
if (result.changes !== ids.length)
|
|
360
|
-
throw new Error("Log output admission changed during packet assembly.");
|
|
361
|
-
return withheld;
|
|
362
|
-
}
|
|
363
352
|
async recordObservations(packet) {
|
|
364
353
|
const observations = this.#streamObservations.get(packet.sections);
|
|
365
354
|
if (observations === undefined)
|
|
@@ -414,7 +403,19 @@ class PacketBuilder {
|
|
|
414
403
|
.map(({ pathname, content }) => ({ pathname, content })));
|
|
415
404
|
return out.toSorted((left, right) => left.pathname.localeCompare(right.pathname));
|
|
416
405
|
}
|
|
417
|
-
// {§context-
|
|
406
|
+
// {§context-budget} — the room never shrinks within a loop: the budget is the greater of the
|
|
407
|
+
// calibrated capacity and the loop's high-water for the same input capacity, so a refined conversion
|
|
408
|
+
// can enlarge the room but never turns a packet the model already answered into an overflow.
|
|
409
|
+
#loopBudget(loopId, inputCapacity, calibrated) {
|
|
410
|
+
if (inputCapacity === null || calibrated === null)
|
|
411
|
+
return null;
|
|
412
|
+
const prior = this.#loopBudgets.get(loopId);
|
|
413
|
+
const budget = prior !== undefined && prior.inputCapacity === inputCapacity ? Math.max(prior.budget, calibrated) : calibrated;
|
|
414
|
+
this.#loopBudgets.set(loopId, { inputCapacity, budget });
|
|
415
|
+
return budget;
|
|
416
|
+
}
|
|
417
|
+
// {§context-over-budget-row} — measurement never mutates visibility; an over-budget packet is a row
|
|
418
|
+
// and a request, never a silent cut.
|
|
418
419
|
curationOverflow(packet) {
|
|
419
420
|
const budget = this.curationBudgetFor(packet);
|
|
420
421
|
if (budget === null)
|
|
@@ -424,6 +425,19 @@ class PacketBuilder {
|
|
|
424
425
|
return null;
|
|
425
426
|
return { weight, budget, excess: weight - budget };
|
|
426
427
|
}
|
|
428
|
+
// {§context-wall} — the packet's tokens through the loop's conversion (the budget is the capacity
|
|
429
|
+
// over the factor, so tokens are weight × capacity ÷ budget) against the provider's input wall;
|
|
430
|
+
// null without a wall or a budget: an unknown window has no wall.
|
|
431
|
+
windowOverflow(packet, provider) {
|
|
432
|
+
const budget = this.curationBudgetFor(packet);
|
|
433
|
+
if (budget === null || provider.inputCapacity === null || provider.inputWall === null)
|
|
434
|
+
return null;
|
|
435
|
+
const tokens = Math.ceil(packet.weight * provider.inputCapacity / budget);
|
|
436
|
+
if (tokens <= provider.inputWall)
|
|
437
|
+
return null;
|
|
438
|
+
const excessWeight = packet.weight - Math.floor(provider.inputWall * budget / provider.inputCapacity);
|
|
439
|
+
return { tokens, budget, wall: provider.inputWall, excess: tokens - provider.inputWall, excessWeight };
|
|
440
|
+
}
|
|
427
441
|
// Every prior-turn operation failure is durable before packet assembly.
|
|
428
442
|
// The model-facing Errors section is only a terse projection of those rows;
|
|
429
443
|
// it never reconstructs failure truth from an in-memory event.
|
|
@@ -447,68 +461,7 @@ class PacketBuilder {
|
|
|
447
461
|
// runTurn. They surface naturally in this query without synthetic
|
|
448
462
|
// EDIT/READ delivery rows.
|
|
449
463
|
const rows = await this.#db.engine_render_log.all({ worker_id: workerId, turn_id: turnId });
|
|
450
|
-
return rows.map((r) =>
|
|
451
|
-
const tx = r.mimetype_tx === "application/json" ? JSON.parse(r.tx) : r.tx;
|
|
452
|
-
const rx = r.mimetype_rx === "application/json" ? JSON.parse(r.rx) : r.rx;
|
|
453
|
-
const rawLineAnchors = LogEntryProjection.op(r) === "READ"
|
|
454
|
-
&& r.status_rx === 200
|
|
455
|
-
&& rx !== null
|
|
456
|
-
&& typeof rx === "object"
|
|
457
|
-
&& Object.hasOwn(rx, "lineAnchors")
|
|
458
|
-
? rx.lineAnchors
|
|
459
|
-
: undefined;
|
|
460
|
-
if (rawLineAnchors !== undefined && !Array.isArray(rawLineAnchors)) {
|
|
461
|
-
throw new TypeError("A READ result's lineAnchors field must be an array.");
|
|
462
|
-
}
|
|
463
|
-
const lineAnchors = rawLineAnchors;
|
|
464
|
-
const rawLineNumberWidth = LogEntryProjection.op(r) === "READ"
|
|
465
|
-
&& r.status_rx === 200
|
|
466
|
-
&& rx !== null
|
|
467
|
-
&& typeof rx === "object"
|
|
468
|
-
&& Object.hasOwn(rx, "lineNumberWidth")
|
|
469
|
-
? rx.lineNumberWidth
|
|
470
|
-
: undefined;
|
|
471
|
-
if (rawLineNumberWidth !== undefined
|
|
472
|
-
&& !LineAnchors.isLineNumberWidth(rawLineNumberWidth)) {
|
|
473
|
-
throw new TypeError("A READ result's lineNumberWidth field must be a valid decimal line width.");
|
|
474
|
-
}
|
|
475
|
-
if ((rawLineAnchors === undefined) !== (rawLineNumberWidth === undefined)) {
|
|
476
|
-
throw new TypeError("A READ result's lineAnchors and lineNumberWidth fields must appear together.");
|
|
477
|
-
}
|
|
478
|
-
const lineNumberWidth = rawLineNumberWidth;
|
|
479
|
-
return {
|
|
480
|
-
id: r.id,
|
|
481
|
-
output_admission_turn_id: r.output_admission_turn_id,
|
|
482
|
-
output_withheld: r.output_withheld === 1,
|
|
483
|
-
newOverflow: turnId !== null && r.output_admission_turn_id === turnId,
|
|
484
|
-
coordinate: `${r.loop_seq}/${r.turn_seq}/${r.sequence}`,
|
|
485
|
-
origin: r.origin,
|
|
486
|
-
op: r.op,
|
|
487
|
-
signal: r.signal === null ? null : JSON.parse(r.signal),
|
|
488
|
-
target: {
|
|
489
|
-
scheme: r.scheme,
|
|
490
|
-
username: r.username, password: r.password,
|
|
491
|
-
hostname: r.hostname, port: r.port,
|
|
492
|
-
pathname: r.pathname,
|
|
493
|
-
query: r.query,
|
|
494
|
-
fragment: r.fragment,
|
|
495
|
-
},
|
|
496
|
-
status: r.status_rx,
|
|
497
|
-
rx,
|
|
498
|
-
mimetype_rx: r.mimetype_rx,
|
|
499
|
-
tx,
|
|
500
|
-
mimetype_tx: r.mimetype_tx,
|
|
501
|
-
initial_folded: r.id === transientOpenLogEntryId ? LogVisibility.OPEN : LogVisibility.parse(r.initial_folded),
|
|
502
|
-
folded: LogVisibility.parse(r.folded),
|
|
503
|
-
source: r.source,
|
|
504
|
-
attrs: r.attrs === null ? null : JSON.parse(r.attrs),
|
|
505
|
-
producer: r.producer,
|
|
506
|
-
...(lineAnchors === undefined ? {} : { lineAnchors }),
|
|
507
|
-
...(lineNumberWidth === undefined ? {} : { lineNumberWidth }),
|
|
508
|
-
};
|
|
509
|
-
});
|
|
464
|
+
return rows.map((r) => PacketWire.entryView(r, transientOpenLogEntryId));
|
|
510
465
|
}
|
|
511
466
|
}
|
|
512
|
-
_a = PacketBuilder;
|
|
513
|
-
export default PacketBuilder;
|
|
514
467
|
//# sourceMappingURL=PacketBuilder.js.map
|