@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.
Files changed (107) hide show
  1. package/.env.defaults +13 -19
  2. package/SPEC.md +81 -140
  3. package/dist/build-info.json +1 -1
  4. package/dist/content/line-marker.d.ts +1 -0
  5. package/dist/content/line-marker.d.ts.map +1 -1
  6. package/dist/content/line-marker.js +5 -0
  7. package/dist/content/line-marker.js.map +1 -1
  8. package/dist/content/read-projector.js +3 -3
  9. package/dist/content/read-projector.js.map +1 -1
  10. package/dist/content/read-resolve.d.ts.map +1 -1
  11. package/dist/content/read-resolve.js +7 -4
  12. package/dist/content/read-resolve.js.map +1 -1
  13. package/dist/core/AdmittedTurnExecutor.d.ts +3 -1
  14. package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
  15. package/dist/core/AdmittedTurnExecutor.js +19 -4
  16. package/dist/core/AdmittedTurnExecutor.js.map +1 -1
  17. package/dist/core/BudgetReadout.d.ts +4 -4
  18. package/dist/core/BudgetReadout.d.ts.map +1 -1
  19. package/dist/core/BudgetReadout.js +26 -41
  20. package/dist/core/BudgetReadout.js.map +1 -1
  21. package/dist/core/ContextFit.d.ts +26 -0
  22. package/dist/core/ContextFit.d.ts.map +1 -0
  23. package/dist/core/ContextFit.js +56 -0
  24. package/dist/core/ContextFit.js.map +1 -0
  25. package/dist/core/Dispatcher.d.ts +13 -0
  26. package/dist/core/Dispatcher.d.ts.map +1 -1
  27. package/dist/core/Dispatcher.js +142 -3
  28. package/dist/core/Dispatcher.js.map +1 -1
  29. package/dist/core/EmissionHead.d.ts +8 -0
  30. package/dist/core/EmissionHead.d.ts.map +1 -0
  31. package/dist/core/EmissionHead.js +29 -0
  32. package/dist/core/EmissionHead.js.map +1 -0
  33. package/dist/core/LogEntryProjection.d.ts +1 -0
  34. package/dist/core/LogEntryProjection.d.ts.map +1 -1
  35. package/dist/core/LogEntryProjection.js +9 -0
  36. package/dist/core/LogEntryProjection.js.map +1 -1
  37. package/dist/core/LogWriter.d.ts +42 -0
  38. package/dist/core/LogWriter.d.ts.map +1 -1
  39. package/dist/core/LogWriter.js +11 -5
  40. package/dist/core/LogWriter.js.map +1 -1
  41. package/dist/core/PacketBuilder.d.ts +17 -4
  42. package/dist/core/PacketBuilder.d.ts.map +1 -1
  43. package/dist/core/PacketBuilder.js +70 -117
  44. package/dist/core/PacketBuilder.js.map +1 -1
  45. package/dist/core/PacketBuilder.sql +0 -7
  46. package/dist/core/StrikeRail.d.ts.map +1 -1
  47. package/dist/core/StrikeRail.js +5 -1
  48. package/dist/core/StrikeRail.js.map +1 -1
  49. package/dist/core/TurnMaterialization.d.ts +6 -2
  50. package/dist/core/TurnMaterialization.d.ts.map +1 -1
  51. package/dist/core/TurnMaterialization.js +64 -16
  52. package/dist/core/TurnMaterialization.js.map +1 -1
  53. package/dist/core/TurnOps.js +7 -7
  54. package/dist/core/TurnOps.js.map +1 -1
  55. package/dist/core/TurnRunner.d.ts +1 -0
  56. package/dist/core/TurnRunner.d.ts.map +1 -1
  57. package/dist/core/TurnRunner.js +141 -139
  58. package/dist/core/TurnRunner.js.map +1 -1
  59. package/dist/core/TurnRunner.sql +2 -2
  60. package/dist/core/env-catalog.js +2 -2
  61. package/dist/core/env-catalog.js.map +1 -1
  62. package/dist/core/fork.sql +4 -10
  63. package/dist/core/git-env.d.ts +1 -1
  64. package/dist/core/git-env.d.ts.map +1 -1
  65. package/dist/core/git-env.js +19 -12
  66. package/dist/core/git-env.js.map +1 -1
  67. package/dist/core/git-membership.d.ts.map +1 -1
  68. package/dist/core/git-membership.js +11 -5
  69. package/dist/core/git-membership.js.map +1 -1
  70. package/dist/core/git-state.js +1 -1
  71. package/dist/core/git-state.js.map +1 -1
  72. package/dist/core/operation-target-groups.d.ts +1 -1
  73. package/dist/core/operation-target-groups.d.ts.map +1 -1
  74. package/dist/core/operation-target-groups.js +27 -5
  75. package/dist/core/operation-target-groups.js.map +1 -1
  76. package/dist/core/packet-wire.d.ts +80 -10
  77. package/dist/core/packet-wire.d.ts.map +1 -1
  78. package/dist/core/packet-wire.js +181 -226
  79. package/dist/core/packet-wire.js.map +1 -1
  80. package/dist/digest/Digest.d.ts.map +1 -1
  81. package/dist/digest/Digest.js +3 -2
  82. package/dist/digest/Digest.js.map +1 -1
  83. package/dist/digest/DigestRender.d.ts.map +1 -1
  84. package/dist/digest/DigestRender.js +74 -37
  85. package/dist/digest/DigestRender.js.map +1 -1
  86. package/dist/digest/digest-rows.d.ts +7 -0
  87. package/dist/digest/digest-rows.d.ts.map +1 -1
  88. package/dist/digest/digest-rows.js.map +1 -1
  89. package/dist/digest/digest.sql +15 -2
  90. package/dist/schemes/_entry-find.d.ts.map +1 -1
  91. package/dist/schemes/_entry-find.js +2 -0
  92. package/dist/schemes/_entry-find.js.map +1 -1
  93. package/dist/server/Daemon.d.ts.map +1 -1
  94. package/dist/server/Daemon.js +11 -2
  95. package/dist/server/Daemon.js.map +1 -1
  96. package/migrations/013_graph_regions.sql +1 -0
  97. package/migrations/014_stream_timing.sql +1 -0
  98. package/migrations/015_request_evidence.sql +1 -0
  99. package/package.json +34 -34
  100. package/dist/core/KnownToxins.d.ts +0 -4
  101. package/dist/core/KnownToxins.d.ts.map +0 -1
  102. package/dist/core/KnownToxins.js +0 -22
  103. package/dist/core/KnownToxins.js.map +0 -1
  104. package/dist/core/ReasoningView.d.ts +0 -12
  105. package/dist/core/ReasoningView.d.ts.map +0 -1
  106. package/dist/core/ReasoningView.js +0 -40
  107. 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,CAQ9C;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"}
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":"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"}
@@ -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;AAItD,MAAM,CAAC,OAAO,OAAO,SAAS;;IAQ1B,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE;QACrF,EAAE,EAAE,EAAE,CAAC;QACP,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QACvC,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,KAAK;YAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;SAAE,CAAC;QACpQ,YAAY,EAAE,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACjH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;QACjD,UAAU,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC;KAC/E,EAOA;IAEK,QAAQ,CAAC,EACX,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,GACxG,EAAE;QACC,SAAS,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,cAAc,CAAC;QACnD,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAC5G,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;QACrC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAoGlB;CAEJ"}
1
+ {"version":3,"file":"LogWriter.d.ts","sourceRoot":"","sources":["../../src/core/LogWriter.ts"],"names":[],"mappings":"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"}
@@ -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
- await this.#canonColumns(record, workspaceId);
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":"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"}
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;AAcrD,MAAM,CAAC,OAAO,OAAO,SAAS;IACjB,GAAG,CAAK;IACR,aAAa,CAA2B;IACxC,cAAc,CAAuP;IACrQ,aAAa,CAAqG;IAClH,aAAa,CAAqC;IAClD,WAAW,CAAkE;IAEtF,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAOpF;QACG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EACX,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,GAMxG;QACG,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAgC,CAAC;YACtD,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YACxG,KAAK,CAAC,QAAQ,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;QACzG,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5I,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAiB,MAAM,CAAC,CAAC;QAC/E,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QACrG,OAAO,GAAG,CAAC,EAAE,CAAC;IAClB,CAAC;IAED,4FAA4F;IAC5F,oFAAoF;IACpF,KAAK,CAAC,MAAM,CAAC,EACT,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,GAMxG;QACG,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,UAAU,KAAK,IAAI;YACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC;QACX,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,0DAA0D;QAC1D,yDAAyD;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,QAAQ,GAA4B,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;YACzF,CAAC,CAAC,EAAE,GAAI,MAAM,CAAC,KAAiC,EAAE;YAClD,CAAC,CAAC,EAAE,CAAC;QACT,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;YAClG,CAAC;YACD,QAAQ,CAAC,iBAAiB,GAAG;gBACzB,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,MAAM,EAAE,YAAY,CAAC,MAAM;aAC9B,CAAC;QACN,CAAC;QACD,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAC/D,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAyC;gBAC/E,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,MAAM;aAClB,CAAC;YACF,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACjF,MAAM,IAAI,KAAK,CAAC,iEAAiE,MAAM,SAAS,MAAM,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,SAAS,CAAC,EAAE,KAAK,MAAM;YAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CACxE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,EAC/C,EAAE,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,CACrF,CAAC;QACF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9F,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,UAAU,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC9F,QAAQ,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7E,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAC7F,QAAQ,CAAC,UAAU,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;YACpF,MAAM,CAAC,KAAiC,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC/E,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAAc;YACtB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,QAAQ;YAClB,MAAM;YACN,MAAM,EAAE,IAAI,EAAG,mEAAmE;YAClF,aAAa,EAAE,WAAW;YAC1B,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClH,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,cAAc;YAC1B,EAAE,EAAE,MAAM;YACV,WAAW,EAAE,kBAAkB;YAC/B,EAAE,EAAE,MAAM;YACV,WAAW,EAAE,kBAAkB;YAC/B,SAAS,EAAE,MAAM,CAAC,MAAM;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;gBACnB,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC;gBAC/B,KAAK;gBACL,EAAE,EAAE,MAAM;gBACV,EAAE,EAAE,MAAM;gBACV,UAAU,EAAE,kBAAkB;gBAC9B,UAAU,EAAE,kBAAkB;aACjC,EAAE,IAAI,CAAC,aAAa,CAAC;YACtB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;YAC3C,OAAO,EAAE,IAAI;YACb,KAAK;YACL,cAAc,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;SAC9D,CAAC;QACF,OAAO,MAAM,CAAC;IAClB,CAAC;CAEJ"}
@@ -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): number;
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
- buildRequestPacket({ initialMessages, recap, workspaceId, workerId, loopId, currentTurnSeq, provider, gitStatus, notices, transientOpenLogEntryId, promptProjection, turnId, }: {
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":"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"}
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 LogVisibility from "./LogVisibility.js";
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 model-facing budget admission
99
- // ({§context-output-admission}). Deliberate curation stays in scoped KILL.
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} {§tokenomics-prompt-projection-share}
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 = _a.#declaredKnobs ??= Object.keys(parseEnv(readFileSync(new URL("../../.env.defaults", import.meta.url), "utf8")));
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 = /^(PLURNK_SERVICE_PROMPT_BUDGET|PLURNK_SERVICE_SAFETY)(?:_.*)?$/u.exec(key);
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
- #promptProjectionFor(alias) {
160
- const view = scopeEnvToAlias(process.env, alias, _a.#KNOBS);
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
- return _a.validateConfiguration(view);
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, promptProjection = "automatic", turnId = null, }) {
186
- const projectionShare = this.#promptProjectionFor(ProviderInstantiate.configurationAliasOf(provider) ?? "");
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
- ...(promptProjectionWeight === null ? {} : { promptProjectionWeight }),
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
- // Familiar token language is a deliberate final model projection;
298
- // internally this is curation weight, never provider admission.
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 && curationBudget !== null) {
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, curationBudget, (candidate) => {
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, renderedLog.newOverflow);
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-output-admission} — measurement never mutates visibility.
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