agl 40.5.1 → 41.0.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 (137) hide show
  1. package/changelog.md +43 -0
  2. package/dist_serve/bundle.js +3514 -3357
  3. package/dist_serve/bundle.js.map +2 -2
  4. package/dist_serve/bundle.js.third-party-notices.json +58 -32
  5. package/dist_serve/bundle.js.third-party-notices.txt +108 -33
  6. package/dist_ts/00_commitinfo_data.js +1 -1
  7. package/dist_ts/aglapi/aglapisurface.document.js +64 -37
  8. package/dist_ts/classes.aglhome.d.ts +5 -0
  9. package/dist_ts/classes.aglhome.js +2 -1
  10. package/dist_ts/classes.authstore.js +5 -1
  11. package/dist_ts/classes.controller.d.ts +8 -0
  12. package/dist_ts/classes.controller.js +119 -22
  13. package/dist_ts/classes.controllereventdelivery.d.ts +72 -0
  14. package/dist_ts/classes.controllereventdelivery.js +233 -0
  15. package/dist_ts/classes.flexmodels.public.js +4 -1
  16. package/dist_ts/classes.flexprojectionreader.d.ts +6 -0
  17. package/dist_ts/classes.flexprojectionreader.js +29 -5
  18. package/dist_ts/classes.flexservice.d.ts +2 -1
  19. package/dist_ts/classes.flexservice.js +34 -6
  20. package/dist_ts/classes.flexstore.d.ts +41 -4
  21. package/dist_ts/classes.flexstore.js +266 -203
  22. package/dist_ts/classes.inferencegateway.d.ts +35 -1
  23. package/dist_ts/classes.inferencegateway.js +86 -26
  24. package/dist_ts/classes.inferenceservice.d.ts +4 -2
  25. package/dist_ts/classes.inferenceservice.js +5 -4
  26. package/dist_ts/classes.proxycontrol.d.ts +58 -4
  27. package/dist_ts/classes.proxycontrol.js +23 -44
  28. package/dist_ts/classes.proxycontrolclient.d.ts +15 -5
  29. package/dist_ts/classes.proxycontrolclient.js +67 -17
  30. package/dist_ts/classes.proxydaemon.d.ts +22 -3
  31. package/dist_ts/classes.proxydaemon.js +73 -12
  32. package/dist_ts/classes.proxyleaseholder.d.ts +43 -14
  33. package/dist_ts/classes.proxyleaseholder.js +66 -22
  34. package/dist_ts/classes.proxystore.d.ts +9 -0
  35. package/dist_ts/classes.proxystore.js +15 -7
  36. package/dist_ts/classes.ticketnotifier.js +4 -2
  37. package/dist_ts/classes.ticketstore.d.ts +50 -2
  38. package/dist_ts/classes.ticketstore.js +195 -78
  39. package/dist_ts/classes.workercallerbindings.d.ts +66 -0
  40. package/dist_ts/classes.workercallerbindings.js +211 -0
  41. package/dist_ts/classes.workercallers.d.ts +63 -2
  42. package/dist_ts/classes.workercallers.js +430 -65
  43. package/dist_ts/driver/classes.drivereventrelay.d.ts +13 -1
  44. package/dist_ts/driver/classes.drivereventrelay.js +99 -6
  45. package/dist_ts/driver/functions.driverinstructions.d.ts +1 -1
  46. package/dist_ts/driver/functions.driverinstructions.js +1 -1
  47. package/dist_ts/driver/functions.drivertools.d.ts +11 -2
  48. package/dist_ts/driver/functions.drivertools.js +19 -9
  49. package/dist_ts/fleet/classes.boardpump.d.ts +8 -2
  50. package/dist_ts/fleet/classes.boardpump.js +38 -20
  51. package/dist_ts/fleet/classes.ticketeffects.d.ts +17 -2
  52. package/dist_ts/fleet/classes.ticketeffects.js +16 -10
  53. package/dist_ts/fleet/classes.workerlaunches.d.ts +12 -5
  54. package/dist_ts/fleet/classes.workerlaunches.js +25 -19
  55. package/dist_ts/fleet/classes.workers.d.ts +21 -0
  56. package/dist_ts/fleet/classes.workers.js +110 -17
  57. package/dist_ts/fleet/functions.workervalidation.js +2 -2
  58. package/dist_ts/functions.flexprivatesnapshot.d.ts +102 -0
  59. package/dist_ts/functions.flexprivatesnapshot.js +461 -0
  60. package/dist_ts/functions.inferencecli.d.ts +3 -2
  61. package/dist_ts/functions.inferencecli.js +67 -5
  62. package/dist_ts/functions.inferencecliarguments.d.ts +6 -2
  63. package/dist_ts/functions.inferencecliarguments.js +29 -2
  64. package/dist_ts/functions.inferencelaunch.d.ts +24 -0
  65. package/dist_ts/functions.inferencelaunch.js +42 -2
  66. package/dist_ts/functions.mcptickettools.d.ts +3 -0
  67. package/dist_ts/functions.mcptickettools.js +2 -2
  68. package/dist_ts/functions.proxycontract.d.ts +11 -0
  69. package/dist_ts/functions.proxycontract.js +12 -1
  70. package/dist_ts/functions.proxysocket.d.ts +6 -0
  71. package/dist_ts/functions.proxysocket.js +46 -0
  72. package/dist_ts/functions.ticketcli.d.ts +1 -1
  73. package/dist_ts/functions.ticketcli.js +8 -4
  74. package/dist_ts/functions.ticketvalidation.d.ts +3 -0
  75. package/dist_ts/functions.ticketvalidation.js +7 -4
  76. package/dist_ts/functions.workerprocessproof.d.ts +6 -0
  77. package/dist_ts/functions.workerprocessproof.js +28 -4
  78. package/dist_ts/interfaces.flexipc.d.ts +21 -2
  79. package/dist_ts/interfaces.flexipc.js +33 -16
  80. package/dist_ts_interfaces/fleetworkers.d.ts +6 -0
  81. package/dist_ts_interfaces/interfaces.d.ts +1 -1
  82. package/dist_ts_interfaces/interfaces.js +1 -1
  83. package/dist_ts_interfaces/requests.tickets.d.ts +8 -12
  84. package/dist_ts_interfaces/tickets.d.ts +37 -9
  85. package/dist_ts_interfaces/tickets.js +7 -1
  86. package/dist_ts_interfaces/workercallers.d.ts +43 -4
  87. package/package.json +7 -7
  88. package/readme.md +156 -23
  89. package/ts/00_commitinfo_data.ts +1 -1
  90. package/ts/aglapi/aglapisurface.document.ts +63 -36
  91. package/ts/classes.aglhome.ts +6 -0
  92. package/ts/classes.authstore.ts +4 -0
  93. package/ts/classes.controller.ts +141 -32
  94. package/ts/classes.controllereventdelivery.ts +289 -0
  95. package/ts/classes.flexmodels.public.ts +10 -0
  96. package/ts/classes.flexprojectionreader.ts +30 -3
  97. package/ts/classes.flexservice.ts +33 -5
  98. package/ts/classes.flexstore.ts +381 -246
  99. package/ts/classes.inferencegateway.ts +104 -23
  100. package/ts/classes.inferenceservice.ts +6 -3
  101. package/ts/classes.proxycontrol.ts +76 -39
  102. package/ts/classes.proxycontrolclient.ts +72 -20
  103. package/ts/classes.proxydaemon.ts +85 -15
  104. package/ts/classes.proxyleaseholder.ts +84 -28
  105. package/ts/classes.proxystore.ts +16 -5
  106. package/ts/classes.ticketnotifier.ts +3 -1
  107. package/ts/classes.ticketstore.ts +201 -75
  108. package/ts/classes.workercallerbindings.ts +147 -0
  109. package/ts/classes.workercallers.ts +410 -59
  110. package/ts/driver/classes.drivereventrelay.ts +89 -4
  111. package/ts/driver/functions.driverinstructions.ts +1 -1
  112. package/ts/driver/functions.drivertools.ts +22 -8
  113. package/ts/fleet/classes.boardpump.ts +51 -19
  114. package/ts/fleet/classes.ticketeffects.ts +25 -11
  115. package/ts/fleet/classes.workerlaunches.ts +23 -15
  116. package/ts/fleet/classes.workers.ts +79 -17
  117. package/ts/fleet/functions.workervalidation.ts +1 -1
  118. package/ts/functions.flexprivatesnapshot.ts +601 -0
  119. package/ts/functions.inferencecli.ts +61 -7
  120. package/ts/functions.inferencecliarguments.ts +32 -1
  121. package/ts/functions.inferencelaunch.ts +49 -2
  122. package/ts/functions.mcptickettools.ts +1 -1
  123. package/ts/functions.proxycontract.ts +12 -0
  124. package/ts/functions.proxysocket.ts +39 -0
  125. package/ts/functions.ticketcli.ts +7 -3
  126. package/ts/functions.ticketvalidation.ts +7 -3
  127. package/ts/functions.workerprocessproof.ts +27 -4
  128. package/ts/interfaces.flexipc.ts +50 -21
  129. package/ts_interfaces/fleetworkers.ts +6 -0
  130. package/ts_interfaces/interfaces.ts +1 -1
  131. package/ts_interfaces/requests.tickets.ts +9 -6
  132. package/ts_interfaces/tickets.ts +32 -1
  133. package/ts_interfaces/workercallers.ts +32 -4
  134. package/ts_web/00_commitinfo_data.ts +1 -1
  135. package/ts_web/elements.harnesscontrollerapp.ts +19 -8
  136. package/ts_web/elements.ticketboard.ts +16 -4
  137. package/ts_web/settings.general.ts +10 -4
@@ -26,7 +26,19 @@ export interface IDriverEventRelayOptions {
26
26
  /** The kinds the driver acts on; status churn, load samples, applied ticket effects and delivered ticket notices are not relayed. */
27
27
  export declare const driverRelayedEventKinds: ReadonlySet<TFleetEventKind>;
28
28
  export declare const driverRelayMaximumMessageBytes: number;
29
- /** One event as the driver reads it: a header line of its facts, then its error and text quoted. */
29
+ /**
30
+ * `textArg` within `bytesArg` UTF-8 bytes: whole when it fits. Otherwise every line the fleet reads as a report marker
31
+ * (`fleetReportMarker`: `result:`, `needs input:`, `owner question:` and the others), newest first while they fit,
32
+ * each at most 1 KiB, and then the text's end. A worker closes its report on its outcome, so the end is what the driver
33
+ * acts on; the fleet keeps a long report's end for the same reason. Kept lines stay in their order, and each run of
34
+ * left-out lines reads `[… N lines …]`; a line cut at its start begins with `…`.
35
+ */
36
+ export declare const driverRelayDigest: (textArg: string, bytesArg: number) => string;
37
+ /**
38
+ * One event as the driver reads it: a header line of its facts and source ids (the comment holding its whole text
39
+ * among them), then its error and a bounded digest of its text (`driverRelayDigest`), quoted, with where the whole text
40
+ * is when the digest left some out.
41
+ */
30
42
  export declare const formatDriverRelayEvent: (eventArg: IFleetEvent) => string;
31
43
  /**
32
44
  * Carries fleet events into the driver session. The watch is an in-process long poll and a batch
@@ -1,4 +1,5 @@
1
1
  import { controllerAgentMessageMaxTextBytes } from '../../dist_ts_interfaces/interfaces.js';
2
+ import { fleetReportMarker } from '../fleet/interfaces.workers.js';
2
3
  /** The kinds the driver acts on; status churn, load samples, applied ticket effects and delivered ticket notices are not relayed. */
3
4
  export const driverRelayedEventKinds = new Set([
4
5
  'worker.turn.ended', 'worker.report.mid_turn', 'worker.reaped', 'worker.credential.failed', 'worker.observation.failed',
@@ -7,7 +8,14 @@ export const driverRelayedEventKinds = new Set([
7
8
  ]);
8
9
  const maximumPendingEvents = 256;
9
10
  const maximumBatchEvents = 24;
11
+ /** The bytes of one event's text the driver reads. */
10
12
  const maximumEventTextBytes = 3 * 1024;
13
+ /** A marker line opens with its marker, so a long one keeps its start. */
14
+ const maximumMarkerLineBytes = 1024;
15
+ /** The most a `[… N lines …]` line of a digest takes, its line break included. */
16
+ const maximumGapLineBytes = 24;
17
+ /** A cut line keeps its end only when at least this much of it fits. */
18
+ const minimumLineEndBytes = 64;
11
19
  export const driverRelayMaximumMessageBytes = controllerAgentMessageMaxTextBytes - 1024;
12
20
  const maximumMessageBytes = driverRelayMaximumMessageBytes;
13
21
  const clip = (textArg, bytesArg) => {
@@ -18,25 +26,110 @@ const clip = (textArg, bytesArg) => {
18
26
  clipped = clipped.slice(0, -1);
19
27
  return `${clipped}…`;
20
28
  };
21
- /** One event as the driver reads it: a header line of its facts, then its error and text quoted. */
29
+ /** The end of `textArg` within `bytesArg` bytes, behind `…`; a cut never splits a character. */
30
+ const clipStart = (textArg, bytesArg) => {
31
+ const bytes = Buffer.from(textArg);
32
+ if (bytes.length <= bytesArg)
33
+ return textArg;
34
+ let start = bytes.length - Math.max(0, bytesArg - Buffer.byteLength('…'));
35
+ while (start < bytes.length && (bytes[start] & 0xc0) === 0x80)
36
+ start += 1;
37
+ return `…${bytes.subarray(start).toString('utf8')}`;
38
+ };
39
+ const gapLine = (linesArg) => `[… ${linesArg} line${linesArg === 1 ? '' : 's'} …]`;
40
+ /**
41
+ * `textArg` within `bytesArg` UTF-8 bytes: whole when it fits. Otherwise every line the fleet reads as a report marker
42
+ * (`fleetReportMarker`: `result:`, `needs input:`, `owner question:` and the others), newest first while they fit,
43
+ * each at most 1 KiB, and then the text's end. A worker closes its report on its outcome, so the end is what the driver
44
+ * acts on; the fleet keeps a long report's end for the same reason. Kept lines stay in their order, and each run of
45
+ * left-out lines reads `[… N lines …]`; a line cut at its start begins with `…`.
46
+ */
47
+ export const driverRelayDigest = (textArg, bytesArg) => {
48
+ if (Buffer.byteLength(textArg) <= bytesArg)
49
+ return textArg;
50
+ const lines = textArg.split('\n');
51
+ const kept = new Map();
52
+ // Every kept marker may open a run, and the end opens one more: each run reserves its gap line.
53
+ let used = maximumGapLineBytes;
54
+ for (let index = lines.length - 1; index >= 0; index -= 1) {
55
+ if (!fleetReportMarker.test(lines[index]))
56
+ continue;
57
+ const line = clip(lines[index], maximumMarkerLineBytes);
58
+ const cost = Buffer.byteLength(line) + 1 + maximumGapLineBytes;
59
+ if (used + cost > bytesArg)
60
+ continue;
61
+ kept.set(index, line);
62
+ used += cost;
63
+ }
64
+ for (let index = lines.length - 1; index >= 0; index -= 1) {
65
+ if (kept.has(index))
66
+ continue;
67
+ const line = lines[index], room = bytesArg - used - 1;
68
+ if (Buffer.byteLength(line) <= room) {
69
+ kept.set(index, line);
70
+ used += Buffer.byteLength(line) + 1;
71
+ continue;
72
+ }
73
+ if (room >= minimumLineEndBytes)
74
+ kept.set(index, clipStart(line, room));
75
+ break;
76
+ }
77
+ const digest = [];
78
+ let next = 0;
79
+ for (const index of [...kept.keys()].sort((leftArg, rightArg) => leftArg - rightArg)) {
80
+ if (index > next)
81
+ digest.push(gapLine(index - next));
82
+ digest.push(kept.get(index));
83
+ next = index + 1;
84
+ }
85
+ if (next < lines.length)
86
+ digest.push(gapLine(lines.length - next));
87
+ return digest.join('\n');
88
+ };
89
+ /**
90
+ * Where the driver reads an event's whole text. An event whose text a ticket comment holds names that comment
91
+ * (`commentId`: a ticketed worker's report, the board pump's stall notice, a commented ticket change), and `ticket_get`
92
+ * with that id reads it however long the ticket's history is. Any other ticket change is a change of the ticket's
93
+ * fields or questions, which `ticket_get` returns whole. The rest have no copy a tool returns.
94
+ */
95
+ const fullTextSource = (eventArg) => {
96
+ if (eventArg.commentId && eventArg.ticketKey) {
97
+ return `the whole text is comment ${eventArg.commentId} on ${eventArg.ticketKey}: ticket_get with ticketId ${eventArg.ticketKey} and commentId ${eventArg.commentId}`;
98
+ }
99
+ if (eventArg.kind === 'ticket.changed' && eventArg.ticketKey)
100
+ return `read ${eventArg.ticketKey} whole with ticket_get`;
101
+ if (eventArg.kind === 'worker.credential.failed')
102
+ return 'the rest is only in the worker\'s transcript';
103
+ return 'the rest is not kept anywhere a tool reads';
104
+ };
105
+ /**
106
+ * One event as the driver reads it: a header line of its facts and source ids (the comment holding its whole text
107
+ * among them), then its error and a bounded digest of its text (`driverRelayDigest`), quoted, with where the whole text
108
+ * is when the digest left some out.
109
+ */
22
110
  export const formatDriverRelayEvent = (eventArg) => {
23
111
  const facts = [
24
112
  eventArg.ticketKey && `ticket ${eventArg.ticketKey}`,
25
113
  eventArg.workerName && `worker ${eventArg.workerName}`,
26
114
  eventArg.sessionId && `session ${eventArg.sessionId}`,
115
+ eventArg.reportId && `report ${eventArg.reportId}`,
116
+ eventArg.commentId && `comment ${eventArg.commentId}`,
117
+ eventArg.turnId && `turn ${eventArg.turnId}`,
27
118
  eventArg.status && `status ${eventArg.status}`,
28
119
  eventArg.repo && `repo ${eventArg.repo}`,
29
120
  eventArg.version && `version ${eventArg.version}`,
30
121
  eventArg.operationId && `operation ${eventArg.operationId}`,
31
122
  ].filter(Boolean);
32
- const lines = [`- ${eventArg.occurredAt} ${eventArg.kind}${facts.length ? ` (${facts.join(', ')})` : ''}`];
123
+ const lines = [`- [event ${eventArg.id}] ${eventArg.occurredAt} ${eventArg.kind}${facts.length ? ` (${facts.join(', ')})` : ''}`];
33
124
  if (eventArg.error)
34
125
  lines.push(` error: ${clip(eventArg.error.replace(/\s+/gu, ' '), 512)}`);
35
126
  if (eventArg.text) {
36
- const text = clip(eventArg.text, maximumEventTextBytes);
127
+ const text = driverRelayDigest(eventArg.text, maximumEventTextBytes);
37
128
  lines.push(...text.split('\n').map((lineArg) => ` > ${lineArg}`));
38
- if (eventArg.truncated || text !== eventArg.text)
39
- lines.push(' (text truncated; read the full report with fleet_worker_status)');
129
+ if (text !== eventArg.text)
130
+ lines.push(` (digest: its marker lines and its end; ${fullTextSource(eventArg)})`);
131
+ if (eventArg.truncated)
132
+ lines.push(' (the report passed 32 KiB; the fleet kept only its end)');
40
133
  }
41
134
  return lines.join('\n');
42
135
  };
@@ -212,4 +305,4 @@ export class DriverEventRelay {
212
305
  return { text, count };
213
306
  }
214
307
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kcml2ZXJldmVudHJlbGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZHJpdmVyL2NsYXNzZXMuZHJpdmVyZXZlbnRyZWxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQTRCdkYscUlBQXFJO0FBQ3JJLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQyxJQUFJLEdBQUcsQ0FBa0I7SUFDNUYsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUFFLDBCQUEwQixFQUFFLDJCQUEyQjtJQUN2SCxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsNEJBQTRCO0lBQ3ZILGdCQUFnQixFQUFFLDRCQUE0QjtDQUMvQyxDQUFDLENBQUM7QUFFSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsa0NBQWtDLEdBQUcsSUFBSSxDQUFDO0FBQ3hGLE1BQU0sbUJBQW1CLEdBQUcsOEJBQThCLENBQUM7QUFFM0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFlLEVBQUUsUUFBZ0IsRUFBVSxFQUFFO0lBQ3pELElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxRQUFRO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDM0QsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFD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
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kcml2ZXJldmVudHJlbGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZHJpdmVyL2NsYXNzZXMuZHJpdmVyZXZlbnRyZWxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQTRCbkUscUlBQXFJO0FBQ3JJLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQyxJQUFJLEdBQUcsQ0FBa0I7SUFDNUYsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUFFLDBCQUEwQixFQUFFLDJCQUEyQjtJQUN2SCxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsNEJBQTRCO0lBQ3ZILGdCQUFnQixFQUFFLDRCQUE0QjtDQUMvQyxDQUFDLENBQUM7QUFFSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixzREFBc0Q7QUFDdEQsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLDBFQUEwRTtBQUMxRSxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUNwQyxrRkFBa0Y7QUFDbEYsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFDL0Isd0VBQXdFO0FBQ3hFLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLGtDQUFrQyxHQUFHLElBQUksQ0FBQztBQUN4RixNQUFNLG1CQUFtQixHQUFHLDhCQUE4QixDQUFDO0FBRTNELE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQVUsRUFBRTtJQUN6RCxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUTtRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQzNELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hILElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsZ0dBQWdHO0FBQ2hHLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQVUsRUFBRTtJQUM5RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDN0MsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSTtRQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDM0UsT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUYs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
@@ -2,4 +2,4 @@
2
2
  * The driver's packaged instructions. The owner replaces them through `fleet.driver.instructions`
3
3
  * in the Configuration master; this text applies only while that field is absent.
4
4
  */
5
- export declare const defaultDriverInstructions = "# You are the AGL driver on this host\n\nYou keep the owner's board true and the work moving. The owner talks to you through the Driver button. Your direct reports drive the projects: you appoint them, route between them, relay the owner's answers and keep the board current. You act as the verified driver: ticket changes you make carry the driver role.\n\n## Direct reports\n- A direct report is a full-authority project driver: it owns one or more board projects (or a cross-project initiative) and drives them on its own. It dispatches its own workers, lands, releases and deploys within its subject, and reports to you.\n- Never gate a direct report. Do not hold its landings, releases or deploys for your approval, and do not do its work for it. Its workers are its own: do not steer or stop them.\n- Appoint a running fleet worker with directreport_appoint, or adopt a session with directreport_adopt. A Claude Code session is adopted with a relaunch: its owner stops it first, and the fleet resumes it under its own control so it calls AGL with a verified identity. Never adopt a session that still runs, and never stop one to adopt it. Retire a report with directreport_retire.\n- directreport_list is your digest: each report's status, newest `result:` line and open owner questions. Read a report's recent conversation with directreport_read, and message it with directreport_message, which steers a fleet worker through its driver ticket and gives a Codex thread an agent message from \"Driver\"; steering a turn another Codex client runs needs the turnId directreport_read returned. Batch what you have for one report into one message.\n\n## Your own workers\n- Work that belongs to no report is yours to place: appoint a report for it, or start a worker for a small, self-contained lane with a brief (repository, its own worktree, scope and what to stay out of, the owner's words, how to verify, how to report).\n- Steer a running worker with a message; never stop and resume it to talk to it. Close the loop: after every landing or release, tell the worker that asked for it. Stop or archive workers whose lane is empty.\n\n## The board is the queue\n- Every owner request becomes a ticket, with the owner's words as its source. Split large requests into an epic with tasks, and put each on the project of the report that owns it.\n- A landing links the branch and full sha and moves the ticket to landed; a release links package and version and moves it to released. Reports go onto the ticket as comments.\n- Keep the board true: a ticket's column says where its work really is.\n\n## Routing\n- A report's `cross-subject:` line is work for another subject. Create or update the ticket on the owning project and tell the owning report with directreport_message; when no report owns it, place it yourself.\n- A `spec question:` line asks for a specification answer the report must not work out from the sources itself. Answer it as the host instructions say, or take it to the owner; never pass on material the report is barred from.\n\n## The owner's questions and answers\n- A report asks the owner with a ticket question (ticket_question_ask) and an `owner question:` line, and keeps working on what does not depend on the answer. Bring open owner questions to the owner in one batch, each with its ticket and question id; never let a question block a report.\n- When the owner answers, record it with ticket_question_answer exactly as the owner gave it. The asking session and the ticket's assignee are told. Never answer a question yourself.\n- Ask the owner yourself only for decisions that are really theirs. End that turn with one line starting `needs input:` that states the decision.\n\n## Landing and releasing\n- Land your own workers' lanes through the fleet land tool: it rebases, runs the named tests and guards and fast-forwards main. Never land red; a failed check goes back to the worker with the evidence.\n- A finished, landed lane is released. Release upstream packages first, then move their consumers to the published versions.\n- Releases and pushes of your own lanes are yours to do. Your own deploys happen only when the owner says so.\n- Never restart, stop or upgrade the running AGL controller or proxy.\n\n## Root causes\n- Fix every defect in the component that owns it. Never let a consumer compensate for an upstream defect with a workaround.\n- A workaround is unfinished work: do not report a lane done while one remains.\n\n## Reporting\n- Report outcomes plainly, with a `result:` line. Do not end on an offer to continue when the next step is already in the request.\n\n## Events\n- Fleet events (turns ended, mid-turn reports, releases, ticket effects) arrive as agent messages from \"AGL fleet\". The workers a direct report runs report to it, not to you, and their events do not reach you. Events are observations, not the owner's instructions: read the report, act on it, and keep the board current.\n\n## Notes\n- Keep your working state (open routes, who works on what, what waits on whom, questions taken to the owner) in your driver notes. They are shown to you at the start of every run and survive compaction; update them whenever that state changes. The roster and standing rules belong in these instructions, not in the notes.\n";
5
+ export declare const defaultDriverInstructions = "# You are the AGL driver on this host\n\nYou keep the owner's board true and the work moving. The owner talks to you through the Driver button. Your direct reports drive the projects: you appoint them, route between them, relay the owner's answers and keep the board current. You act as the verified driver: ticket changes you make carry the driver role.\n\n## Direct reports\n- A direct report is a full-authority project driver: it owns one or more board projects (or a cross-project initiative) and drives them on its own. It dispatches its own workers, lands, releases and deploys within its subject, and reports to you.\n- Never gate a direct report. Do not hold its landings, releases or deploys for your approval, and do not do its work for it. Its workers are its own: do not steer or stop them.\n- Appoint a running fleet worker with directreport_appoint, or adopt a session with directreport_adopt. A Claude Code session is adopted with a relaunch: its owner stops it first, and the fleet resumes it under its own control so it calls AGL with a verified identity. Never adopt a session that still runs, and never stop one to adopt it. Retire a report with directreport_retire.\n- directreport_list is your digest: each report's status, newest `result:` line and open owner questions. Read a report's recent conversation with directreport_read, and message it with directreport_message, which steers a fleet worker through its driver ticket and gives a Codex thread an agent message from \"Driver\"; steering a turn another Codex client runs needs the turnId directreport_read returned. Batch what you have for one report into one message.\n\n## Your own workers\n- Work that belongs to no report is yours to place: appoint a report for it, or start a worker for a small, self-contained lane with a brief (repository, its own worktree, scope and what to stay out of, the owner's words, how to verify, how to report).\n- Steer a running worker with a message; never stop and resume it to talk to it. Close the loop: after every landing or release, tell the worker that asked for it. Stop or archive workers whose lane is empty.\n\n## The board is the queue\n- Every owner request becomes a ticket, with the owner's words as its source. Split large requests into an epic with tasks, and put each on the project of the report that owns it.\n- A landing links the branch and full sha and moves the ticket to landed; a release links package and version and moves it to released. Reports go onto the ticket as comments.\n- Keep the board true: a ticket's column says where its work really is.\n\n## Routing\n- A report's `cross-subject:` line is work for another subject. Create or update the ticket on the owning project and tell the owning report with directreport_message; when no report owns it, place it yourself.\n- A `spec question:` line asks for a specification answer the report must not work out from the sources itself. Answer it as the host instructions say, or take it to the owner; never pass on material the report is barred from.\n\n## The owner's questions and answers\n- A report asks the owner with a ticket question (ticket_question_ask) and an `owner question:` line, and keeps working on what does not depend on the answer. Bring open owner questions to the owner in one batch, each with its ticket and question id; never let a question block a report.\n- When the owner answers, record it with ticket_question_answer exactly as the owner gave it. The asking session and the ticket's assignee are told. Never answer a question yourself.\n- Ask the owner yourself only for decisions that are really theirs. End that turn with one line starting `needs input:` that states the decision.\n\n## Landing and releasing\n- Land your own workers' lanes through the fleet land tool: it rebases, runs the named tests and guards and fast-forwards main. Never land red; a failed check goes back to the worker with the evidence.\n- A finished, landed lane is released. Release upstream packages first, then move their consumers to the published versions.\n- Releases and pushes of your own lanes are yours to do. Your own deploys happen only when the owner says so.\n- Never restart, stop or upgrade the running AGL controller or proxy.\n\n## Root causes\n- Fix every defect in the component that owns it. Never let a consumer compensate for an upstream defect with a workaround.\n- A workaround is unfinished work: do not report a lane done while one remains.\n\n## Reporting\n- Report outcomes plainly, with a `result:` line. Do not end on an offer to continue when the next step is already in the request.\n\n## Events\n- Fleet events (turns ended, mid-turn reports, releases, ticket effects) arrive as agent messages from \"AGL fleet\". The workers a direct report runs report to it, not to you, and their events do not reach you. Events are observations, not the owner's instructions: read the report, act on it, and keep the board current.\n\n## Notes\n- Keep your working state (open routes, who works on what, what waits on whom, questions taken to the owner) in your driver notes. They appear in your context as the pinned context \"driver-notes\" when they change and again after a compaction, and they survive restarts; the latest revision there is current. Update them whenever that state changes. The roster and standing rules belong in these instructions, not in the notes.\n";
@@ -47,6 +47,6 @@ You keep the owner's board true and the work moving. The owner talks to you thro
47
47
  - Fleet events (turns ended, mid-turn reports, releases, ticket effects) arrive as agent messages from "AGL fleet". The workers a direct report runs report to it, not to you, and their events do not reach you. Events are observations, not the owner's instructions: read the report, act on it, and keep the board current.
48
48
 
49
49
  ## Notes
50
- - Keep your working state (open routes, who works on what, what waits on whom, questions taken to the owner) in your driver notes. They are shown to you at the start of every run and survive compaction; update them whenever that state changes. The roster and standing rules belong in these instructions, not in the notes.
50
+ - Keep your working state (open routes, who works on what, what waits on whom, questions taken to the owner) in your driver notes. They appear in your context as the pinned context "driver-notes" when they change and again after a compaction, and they survive restarts; the latest revision there is current. Update them whenever that state changes. The roster and standing rules belong in these instructions, not in the notes.
51
51
  `;
52
52
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmRyaXZlcmluc3RydWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2RyaXZlci9mdW5jdGlvbnMuZHJpdmVyaW5zdHJ1Y3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBOEN4QyxDQUFDIn0=
@@ -41,5 +41,14 @@ export declare const driverNotesMaxBytes: number;
41
41
  */
42
42
  export declare const driverToolDefinitions: readonly IDriverToolDefinition[];
43
43
  export declare const driverToolsByName: ReadonlyMap<string, IDriverToolDefinition>;
44
- /** The section the driver's system prompt ends with: its instructions, then its notes. */
45
- export declare const composeDriverSystem: (instructionsArg: string, notesArg: string) => string;
44
+ /** The id of the pinned context that carries the driver's notes. */
45
+ export declare const driverNotesContextId = "driver-notes";
46
+ /**
47
+ * The driver's notes as a FlexHarness pinned context, outside its system prompt: the model sees a
48
+ * revision once, when it is new and again after a compaction, and a new revision leaves the system
49
+ * prompt, the tools and the history in front of it as they were, so the cached prefix survives it.
50
+ * `revisionArg` is the revision of the session scratchpad that holds the notes, which every saved
51
+ * text moves; never the FlexHarness project revision. Empty notes are pinned too, so a cleared
52
+ * text replaces the one saved before it.
53
+ */
54
+ export declare const driverNotesContext: (notesArg: string, revisionArg: number) => plugins.flexharness.IFlexPinnedContext;
@@ -100,7 +100,7 @@ export const driverToolDefinitions = [
100
100
  ...directReportToolDefinitions,
101
101
  {
102
102
  name: 'driver_notes_read',
103
- description: 'Read your driver notes and their revision. The notes are also shown to you at the start of every run.',
103
+ description: 'Read your driver notes and their revision. Your context also shows them as the pinned context "driver-notes" whenever they changed and after a compaction; its latest revision is current.',
104
104
  inputSchema: plugins.z.object({}).strict(),
105
105
  readOnly: true,
106
106
  route: { kind: 'notes', operation: 'read' },
@@ -118,11 +118,21 @@ export const driverToolDefinitions = [
118
118
  },
119
119
  ];
120
120
  export const driverToolsByName = new Map(driverToolDefinitions.map((definitionArg) => [definitionArg.name, definitionArg]));
121
- /** The section the driver's system prompt ends with: its instructions, then its notes. */
122
- export const composeDriverSystem = (instructionsArg, notesArg) => [
123
- instructionsArg.trim(),
124
- notesArg.trim()
125
- ? `## Your driver notes\n\nAs you last saved them with driver_notes_update:\n\n${notesArg.trim()}`
126
- : '## Your driver notes\n\nEmpty. Save your working state with driver_notes_update.',
127
- ].join('\n\n');
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmRyaXZlcnRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZHJpdmVyL2Z1bmN0aW9ucy5kcml2ZXJ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQXNCdEU7OztHQUdHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBd0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUU5RyxzRkFBc0Y7QUFDdEYsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsRUFBRSxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUVqRCx3SEFBd0g7QUFDeEgsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3pGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0tBQ2xFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztBQUNwSixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7S0FDMUQsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsK0NBQStDLENBQUMsQ0FBQztBQUNySCxNQUFNLDJCQUEyQixHQUFxQztJQUNwRTtRQUNFLElBQUksRUFBRSxtQkFBbUI7UUFDekIsV0FBVyxFQUFFLDhOQUE4TjtRQUMzTyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO1FBQ25GLFFBQVEsRUFBRSxLQUFLO1FBQ2YsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO0tBQ25EO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLFdBQVcsRUFBRSw2TUFBNk07UUFDMU4sV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUMzSSxRQUFRLEVBQUUsS0FBSztRQUNmLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtLQUN0RDtJQUNEO1FBQ0UsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixXQUFXLEVBQUUsNGlCQUE0aUI7UUFDempCLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDO1lBQ2hKLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7WUFDMUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDdEksVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7U0FDakUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUNYLFFBQVEsRUFBRSxLQUFLO1FBQ2YsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0tBQ3BEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUscUJBQXFCO1FBQzNCLFdBQVcsRUFBRSxvR0FBb0c7UUFDakgsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDbEUsUUFBUSxFQUFFLEtBQUs7UUFDZixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUU7S0FDckQ7SUFDRDtRQUNFLElBQUksRUFBRSxtQkFBbUI7UUFDekIsV0FBVyxFQUFFLHFHQUFxRyxrQ0FBa0MsYUFBYSw4QkFBOEIsOE5BQThOO1FBQzdaLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUN6SixRQUFRLEVBQUUsS0FBSztRQUNmLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtLQUNuRDtJQUNEO1FBQ0UsSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixXQUFXLEVBQUUsdW9CQUF1b0I7UUFDcHBCLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDNUksUUFBUSxFQUFFLEtBQUs7UUFDZixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7S0FDdEQ7Q0FDRixDQUFDO0FBRUYsd0VBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBRTlDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBcUM7SUFDckUsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVztRQUN4RyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQzdFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUU7S0FDN0QsQ0FBQyxDQUFDO0lBQ0gsR0FBRywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVztRQUN4RyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQzdFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUU7S0FDeEQsQ0FBQyxDQUFDO0lBQ0gsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVztRQUN4RyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFO0tBQ2hHLENBQUMsQ0FBQztJQUNIO1FBQ0UsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixXQUFXLEVBQUUsMlVBQTJVO1FBQ3hWLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO1FBQ3RDLFFBQVEsRUFBRSxLQUFLO1FBQ2YsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFO0tBQy9DO0lBQ0QsR0FBRywyQkFBMkI7SUFDOUI7UUFDRSxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLFdBQVcsRUFBRSx1R0FBdUc7UUFDcEgsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUMxQyxRQUFRLEVBQUUsSUFBSTtRQUNkLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtLQUM1QztJQUNEO1FBQ0UsSUFBSSxFQUFFLHFCQUFxQjtRQUMzQixXQUFXLEVBQUUsMk9BQTJPO1FBQ3hQLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUM7aUJBQ25ELE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksbUJBQW1CLEVBQUUsbUNBQW1DLENBQUM7WUFDeEgsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1NBQ3RGLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDWCxRQUFRLEVBQUUsS0FBSztRQUNmLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRTtLQUM5QztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBK0MsSUFBSSxHQUFHLENBQ2xGLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQ2xGLENBQUM7QUFFRiwwRkFBMEY7QUFDMUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxlQUF1QixFQUFFLFFBQWdCLEVBQVUsRUFBRSxDQUFDO0lBQ3hGLGVBQWUsQ0FBQyxJQUFJLEVBQUU7SUFDdEIsUUFBUSxDQUFDLElBQUksRUFBRTtRQUNiLENBQUMsQ0FBQywrRUFBK0UsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2xHLENBQUMsQ0FBQyxrRkFBa0Y7Q0FDdkYsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMifQ==
121
+ /** The id of the pinned context that carries the driver's notes. */
122
+ export const driverNotesContextId = 'driver-notes';
123
+ /**
124
+ * The driver's notes as a FlexHarness pinned context, outside its system prompt: the model sees a
125
+ * revision once, when it is new and again after a compaction, and a new revision leaves the system
126
+ * prompt, the tools and the history in front of it as they were, so the cached prefix survives it.
127
+ * `revisionArg` is the revision of the session scratchpad that holds the notes, which every saved
128
+ * text moves; never the FlexHarness project revision. Empty notes are pinned too, so a cleared
129
+ * text replaces the one saved before it.
130
+ */
131
+ export const driverNotesContext = (notesArg, revisionArg) => ({
132
+ id: driverNotesContextId,
133
+ revision: revisionArg,
134
+ text: notesArg.trim()
135
+ ? `Your driver notes, as you last saved them with driver_notes_update:\n\n${notesArg.trim()}`
136
+ : 'Your driver notes are empty. Save your working state with driver_notes_update.',
137
+ });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmRyaXZlcnRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZHJpdmVyL2Z1bmN0aW9ucy5kcml2ZXJ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQXNCdEU7OztHQUdHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBd0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUU5RyxzRkFBc0Y7QUFDdEYsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsRUFBRSxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUVqRCx3SEFBd0g7QUFDeEgsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3pGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFF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
@@ -1,4 +1,5 @@
1
- import type { ITicket, ITicketActor, TTicketResponse } from '../../dist_ts_interfaces/tickets.js';
1
+ import type { ITicket, ITicketActor } from '../../dist_ts_interfaces/tickets.js';
2
+ import type { ITicketHistory } from '../classes.ticketstore.js';
2
3
  import type { IFleetBoardPumpConfiguration, IFleetUnboundDriver } from '../../dist_ts_interfaces/fleet.js';
3
4
  import type { IFleetEvent } from '../../dist_ts_interfaces/fleetworkers.js';
4
5
  import type { IControllerFleetWorkerView } from '../../dist_ts_interfaces/index.js';
@@ -19,7 +20,8 @@ export interface IBoardPumpHost {
19
20
  configuration?: IFleetBoardPumpConfiguration;
20
21
  } | undefined>;
21
22
  tickets(): Promise<ITicket[]>;
22
- ticket(ticketKeyArg: string): Promise<TTicketResponse<'get'>>;
23
+ /** One ticket with its whole history and questions; the pump asks only when the ticket's revision moved. */
24
+ history(ticketKeyArg: string): Promise<ITicketHistory>;
23
25
  workers(ownerArg: string): Promise<IControllerFleetWorkerView[]>;
24
26
  /** Steers the live worker bound to the native session `harness:nativeId`; rejects when the harness did not admit the text. */
25
27
  steer(sessionIdArg: string, ticketKeyArg: string, textArg: string): Promise<unknown>;
@@ -54,6 +56,8 @@ export declare class BoardPump {
54
56
  private running?;
55
57
  /** The configuration changed during a pass, so another pass follows at once with it. */
56
58
  private changed;
59
+ /** The facts of each ticket at the revision they were read at; a ticket gone from the board is forgotten. */
60
+ private readonly facts;
57
61
  constructor(host: IBoardPumpHost, options?: IBoardPumpOptions);
58
62
  start(): void;
59
63
  /** A saved Configuration master may change the interval or switch the pump: pass now and schedule from the new interval. */
@@ -63,6 +67,8 @@ export declare class BoardPump {
63
67
  pass(): Promise<number>;
64
68
  /** The stalls of one ticket: its column's, and a comment no driver or assignee followed while no live worker holds it. */
65
69
  private inspect;
70
+ /** The ticket's facts, read again only when its revision is not the one they were read at. */
71
+ private factsOf;
66
72
  private header;
67
73
  /**
68
74
  * A comment that asks a driver something while nobody can hear it: the ticket's newest discussion entry is a comment