@pegma/support-desk-application 0.1.1 → 0.2.1

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 (86) hide show
  1. package/README.md +237 -7
  2. package/dist/assistant-turn-capacity.d.ts +13 -0
  3. package/dist/assistant-turn-capacity.d.ts.map +1 -0
  4. package/dist/assistant-turn-capacity.js +111 -0
  5. package/dist/assistant-turn-capacity.js.map +1 -0
  6. package/dist/assistant-turn-records.d.ts +68 -0
  7. package/dist/assistant-turn-records.d.ts.map +1 -0
  8. package/dist/assistant-turn-records.js +418 -0
  9. package/dist/assistant-turn-records.js.map +1 -0
  10. package/dist/assistant-turn-types.d.ts +133 -0
  11. package/dist/assistant-turn-types.d.ts.map +1 -0
  12. package/dist/assistant-turn-types.js +2 -0
  13. package/dist/assistant-turn-types.js.map +1 -0
  14. package/dist/assistant-turns.d.ts +42 -0
  15. package/dist/assistant-turns.d.ts.map +1 -0
  16. package/dist/assistant-turns.js +660 -0
  17. package/dist/assistant-turns.js.map +1 -0
  18. package/dist/engineering-evidence.d.ts +20 -0
  19. package/dist/engineering-evidence.d.ts.map +1 -0
  20. package/dist/engineering-evidence.js +899 -0
  21. package/dist/engineering-evidence.js.map +1 -0
  22. package/dist/engineering-followup-internal.d.ts +45 -0
  23. package/dist/engineering-followup-internal.d.ts.map +1 -0
  24. package/dist/engineering-followup-internal.js +2 -0
  25. package/dist/engineering-followup-internal.js.map +1 -0
  26. package/dist/engineering-followup-records.d.ts +209 -0
  27. package/dist/engineering-followup-records.d.ts.map +1 -0
  28. package/dist/engineering-followup-records.js +1434 -0
  29. package/dist/engineering-followup-records.js.map +1 -0
  30. package/dist/engineering-followup-source.d.ts +168 -0
  31. package/dist/engineering-followup-source.d.ts.map +1 -0
  32. package/dist/engineering-followup-source.js +1144 -0
  33. package/dist/engineering-followup-source.js.map +1 -0
  34. package/dist/engineering-followup-types.d.ts +364 -0
  35. package/dist/engineering-followup-types.d.ts.map +1 -0
  36. package/dist/engineering-followup-types.js +2 -0
  37. package/dist/engineering-followup-types.js.map +1 -0
  38. package/dist/engineering-followup-work.d.ts +70 -0
  39. package/dist/engineering-followup-work.d.ts.map +1 -0
  40. package/dist/engineering-followup-work.js +1153 -0
  41. package/dist/engineering-followup-work.js.map +1 -0
  42. package/dist/engineering-internal.d.ts +38 -0
  43. package/dist/engineering-internal.d.ts.map +1 -0
  44. package/dist/engineering-internal.js +11 -0
  45. package/dist/engineering-internal.js.map +1 -0
  46. package/dist/engineering-policy.d.ts +47 -0
  47. package/dist/engineering-policy.d.ts.map +1 -0
  48. package/dist/engineering-policy.js +579 -0
  49. package/dist/engineering-policy.js.map +1 -0
  50. package/dist/engineering-reconciliation.d.ts +6 -0
  51. package/dist/engineering-reconciliation.d.ts.map +1 -0
  52. package/dist/engineering-reconciliation.js +464 -0
  53. package/dist/engineering-reconciliation.js.map +1 -0
  54. package/dist/engineering-records.d.ts +227 -0
  55. package/dist/engineering-records.d.ts.map +1 -0
  56. package/dist/engineering-records.js +1272 -0
  57. package/dist/engineering-records.js.map +1 -0
  58. package/dist/engineering-types.d.ts +505 -0
  59. package/dist/engineering-types.d.ts.map +1 -0
  60. package/dist/engineering-types.js +2 -0
  61. package/dist/engineering-types.js.map +1 -0
  62. package/dist/engineering-work.d.ts +32 -0
  63. package/dist/engineering-work.d.ts.map +1 -0
  64. package/dist/engineering-work.js +1757 -0
  65. package/dist/engineering-work.js.map +1 -0
  66. package/dist/index.d.ts +609 -14
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +3680 -233
  69. package/dist/index.js.map +1 -1
  70. package/dist/resolution-learning-records.d.ts +154 -0
  71. package/dist/resolution-learning-records.d.ts.map +1 -0
  72. package/dist/resolution-learning-records.js +657 -0
  73. package/dist/resolution-learning-records.js.map +1 -0
  74. package/dist/resolution-learning-types.d.ts +356 -0
  75. package/dist/resolution-learning-types.d.ts.map +1 -0
  76. package/dist/resolution-learning-types.js +2 -0
  77. package/dist/resolution-learning-types.js.map +1 -0
  78. package/dist/resolution-learning-worker.d.ts +21 -0
  79. package/dist/resolution-learning-worker.d.ts.map +1 -0
  80. package/dist/resolution-learning-worker.js +1027 -0
  81. package/dist/resolution-learning-worker.js.map +1 -0
  82. package/dist/resolution-learning.d.ts +38 -0
  83. package/dist/resolution-learning.d.ts.map +1 -0
  84. package/dist/resolution-learning.js +860 -0
  85. package/dist/resolution-learning.js.map +1 -0
  86. package/package.json +6 -6
@@ -0,0 +1,418 @@
1
+ const identifierMaximum = 200;
2
+ export const maximumRecordBytes = 60_000;
3
+ /** Initial ceiling; preparation also reserves the largest reachable later state. */
4
+ export const preparedRecordBytes = 52_000;
5
+ export const maximumBindingBytes = 12_000;
6
+ export function dataObject(value, name) {
7
+ if (value === null || typeof value !== "object" || Array.isArray(value))
8
+ throw new TypeError(`${name} must be a data object`);
9
+ const prototype = Object.getPrototypeOf(value);
10
+ if (prototype !== Object.prototype && prototype !== null)
11
+ throw new TypeError(`${name} must be a plain data object`);
12
+ if (Object.getOwnPropertySymbols(value).length !== 0)
13
+ throw new TypeError(`${name} cannot contain symbol fields`);
14
+ for (const descriptor of Object.values(Object.getOwnPropertyDescriptors(value)))
15
+ if (!("value" in descriptor) || !descriptor.enumerable)
16
+ throw new TypeError(`${name} must contain enumerable data fields`);
17
+ return value;
18
+ }
19
+ export function fields(value, name, required, optional = []) {
20
+ const source = dataObject(value, name);
21
+ const allowed = new Set([...required, ...optional]);
22
+ for (const key of Object.getOwnPropertyNames(source))
23
+ if (!allowed.has(key))
24
+ throw new TypeError(`${name} has an unknown field`);
25
+ for (const key of required)
26
+ if (!Object.hasOwn(source, key) || source[key] === undefined)
27
+ throw new TypeError(`${name}.${key} is required`);
28
+ return source;
29
+ }
30
+ export function dataArray(value, name, maximum) {
31
+ if (!Array.isArray(value) ||
32
+ value.length > maximum ||
33
+ Object.getOwnPropertySymbols(value).length !== 0)
34
+ throw new TypeError(`${name} must be a bounded data array`);
35
+ for (const key of Object.getOwnPropertyNames(value)) {
36
+ if (key === "length")
37
+ continue;
38
+ if (!/^(0|[1-9][0-9]*)$/.test(key) ||
39
+ Number(key) >= value.length ||
40
+ !("value" in Object.getOwnPropertyDescriptor(value, key)))
41
+ throw new TypeError(`${name} must contain only data elements`);
42
+ }
43
+ for (let index = 0; index < value.length; index += 1)
44
+ if (!Object.hasOwn(value, index))
45
+ throw new TypeError(`${name} cannot contain sparse elements`);
46
+ return value;
47
+ }
48
+ export function text(value, name, maximum = identifierMaximum) {
49
+ if (typeof value !== "string" ||
50
+ value.trim().length === 0 ||
51
+ value.length > maximum ||
52
+ /[\u0000-\u001F\u007F]/.test(value))
53
+ throw new TypeError(`${name} must be bounded nonempty text without controls`);
54
+ return value;
55
+ }
56
+ export function integer(value, name, minimum = 0, maximum = Number.MAX_SAFE_INTEGER) {
57
+ if (typeof value !== "number" ||
58
+ !Number.isSafeInteger(value) ||
59
+ value < minimum ||
60
+ value > maximum)
61
+ throw new TypeError(`${name} must be a bounded safe integer`);
62
+ return value;
63
+ }
64
+ export function timestamp(value, name) {
65
+ if (typeof value !== "string")
66
+ throw new TypeError(`${name} must be a timestamp`);
67
+ const result = Date.parse(value);
68
+ if (!Number.isFinite(result) || new Date(result).toISOString() !== value)
69
+ throw new TypeError(`${name} must be a canonical ISO timestamp`);
70
+ return result;
71
+ }
72
+ export function encodedBytes(value) {
73
+ // This is the same conservative UTF-16 JSON-string bound used by Support's
74
+ // Azure-compatible record codec. JSON.stringify accounts for escaping too.
75
+ return JSON.stringify(value).length * 2;
76
+ }
77
+ export function canonical(value) {
78
+ if (Array.isArray(value))
79
+ return `[${value.map(canonical).join(",")}]`;
80
+ if (value !== null && typeof value === "object") {
81
+ const object = value;
82
+ return `{${Object.keys(object)
83
+ .filter((key) => object[key] !== undefined)
84
+ .sort()
85
+ .map((key) => `${JSON.stringify(key)}:${canonical(object[key])}`)
86
+ .join(",")}}`;
87
+ }
88
+ const encoded = JSON.stringify(value);
89
+ if (encoded === undefined)
90
+ throw new TypeError("Cannot fingerprint non-JSON data");
91
+ return encoded;
92
+ }
93
+ export async function fingerprint(value) {
94
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(canonical(value)));
95
+ return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
96
+ }
97
+ export function snapshot(value) {
98
+ return JSON.parse(JSON.stringify(value));
99
+ }
100
+ export function resolveAssistantTurnOptions(input) {
101
+ if (input === undefined)
102
+ return undefined;
103
+ const source = fields(input, "assistantTurns", [], ["maxAttempts", "maxTurnMilliseconds", "maxLeaseMilliseconds"]);
104
+ return Object.freeze({
105
+ maxAttempts: integer(source.maxAttempts ?? 2, "assistantTurns.maxAttempts", 1, 4),
106
+ maxTurnMilliseconds: integer(source.maxTurnMilliseconds ?? 300_000, "assistantTurns.maxTurnMilliseconds", 1, 3_600_000),
107
+ maxLeaseMilliseconds: integer(source.maxLeaseMilliseconds ?? 60_000, "assistantTurns.maxLeaseMilliseconds", 1, 300_000),
108
+ });
109
+ }
110
+ export function assistantTurnKey(ticketId, turnId) {
111
+ return { partition: ticketId, id: "assistant-turn:" + turnId };
112
+ }
113
+ export function terminalTurn(record) {
114
+ return (record.status === "completed" ||
115
+ record.status === "escalated" ||
116
+ record.status === "superseded");
117
+ }
118
+ export function withoutAssistantTurnLease(job) {
119
+ const { claim: _claim, leaseUntil: _lease, nextAttemptAt: _next, ...rest } = job;
120
+ return rest;
121
+ }
122
+ /** Shared by real state changes and the constructive preparation size bound. */
123
+ export function assistantTurnProcessingState(job, processing, accounting) {
124
+ return {
125
+ ...job,
126
+ preparedAttempts: accounting === undefined
127
+ ? job.preparedAttempts
128
+ : job.preparedAttempts.map((attempt) => attempt.attemptId === accounting.attemptId
129
+ ? {
130
+ ...attempt,
131
+ accounting: accounting.accounting,
132
+ ...(processing === undefined ? {} : { processing }),
133
+ }
134
+ : attempt),
135
+ ...(processing === undefined ? {} : { processing }),
136
+ };
137
+ }
138
+ export async function createAssistantTurnRecord(ticket, message, correlationId, options) {
139
+ const turnId = await fingerprint({ messageId: message.id });
140
+ const row = {
141
+ kind: "assistant_turn",
142
+ partition: ticket.id,
143
+ id: assistantTurnKey(ticket.id, turnId).id,
144
+ ticketId: ticket.id,
145
+ turnId,
146
+ triggerMessageId: message.id,
147
+ triggerRevision: ticket.revision,
148
+ triggerHandlingGeneration: ticket.handling.generation,
149
+ correlationId,
150
+ createdAt: message.createdAt,
151
+ turnDeadline: new Date(timestamp(message.createdAt, "message.createdAt") +
152
+ options.maxTurnMilliseconds).toISOString(),
153
+ maxAttempts: options.maxAttempts,
154
+ status: "pending",
155
+ attempt: 0,
156
+ claimGeneration: 0,
157
+ preparedAttempts: [],
158
+ };
159
+ assertAssistantTurnRecord(row);
160
+ return row;
161
+ }
162
+ const fenceFields = [
163
+ "ticketId",
164
+ "turnId",
165
+ "workerId",
166
+ "claimId",
167
+ "claimGeneration",
168
+ "attempt",
169
+ "attemptId",
170
+ "commandId",
171
+ "correlationId",
172
+ "expectedRevision",
173
+ "expectedHandlingGeneration",
174
+ "triggerMessageId",
175
+ ];
176
+ export const assistantTurnFenceFields = fenceFields;
177
+ export function validateFence(input, extraRequired = [], extraOptional = []) {
178
+ const source = fields(input, "assistant turn command", [...fenceFields, ...extraRequired], extraOptional);
179
+ for (const field of [
180
+ "ticketId",
181
+ "turnId",
182
+ "workerId",
183
+ "claimId",
184
+ "attemptId",
185
+ "commandId",
186
+ "correlationId",
187
+ "triggerMessageId",
188
+ ])
189
+ text(source[field], field);
190
+ for (const field of [
191
+ "claimGeneration",
192
+ "attempt",
193
+ "expectedRevision",
194
+ "expectedHandlingGeneration",
195
+ ])
196
+ integer(source[field], field, 1);
197
+ return source;
198
+ }
199
+ export function validateProcessing(input) {
200
+ if (input === undefined)
201
+ return undefined;
202
+ const source = fields(input, "processing", [], [
203
+ "provider",
204
+ "model",
205
+ "requestId",
206
+ "inputTokens",
207
+ "outputTokens",
208
+ "costMicros",
209
+ "currency",
210
+ "failureCategory",
211
+ ]);
212
+ for (const key of [
213
+ "provider",
214
+ "model",
215
+ "requestId",
216
+ "currency",
217
+ "failureCategory",
218
+ ])
219
+ if (source[key] !== undefined)
220
+ text(source[key], `processing.${key}`, key === "failureCategory" ? 80 : 200);
221
+ for (const key of ["inputTokens", "outputTokens", "costMicros"])
222
+ if (source[key] !== undefined)
223
+ integer(source[key], `processing.${key}`);
224
+ return snapshot(source);
225
+ }
226
+ export function validateBinding(input) {
227
+ const source = fields(input, "binding", [
228
+ "inputFingerprint",
229
+ "versions",
230
+ "references",
231
+ "contextBinding",
232
+ "deadline",
233
+ "usageReservationId",
234
+ ]);
235
+ text(source.inputFingerprint, "binding.inputFingerprint");
236
+ text(source.contextBinding, "binding.contextBinding", 2_000);
237
+ text(source.usageReservationId, "binding.usageReservationId");
238
+ timestamp(source.deadline, "binding.deadline");
239
+ const versions = dataObject(source.versions, "binding.versions");
240
+ if (Object.getOwnPropertyNames(versions).length > 16)
241
+ throw new TypeError("binding.versions has too many entries");
242
+ for (const key of Object.getOwnPropertyNames(versions)) {
243
+ const value = versions[key];
244
+ text(key, "binding version name", 80);
245
+ text(value, "binding version");
246
+ }
247
+ for (const reference of dataArray(source.references, "binding.references", 32)) {
248
+ const item = fields(reference, "binding reference", [
249
+ "namespace",
250
+ "resourceId",
251
+ "revision",
252
+ "binding",
253
+ ]);
254
+ for (const key of ["namespace", "resourceId", "revision"])
255
+ text(item[key], `reference.${key}`);
256
+ text(item.binding, "reference.binding", 6_000);
257
+ }
258
+ if (encodedBytes(source) > maximumBindingBytes)
259
+ throw new TypeError("Assistant attempt binding exceeds its encoded bound");
260
+ return snapshot(source);
261
+ }
262
+ export function assertAssistantTurnRecord(value, physical) {
263
+ const row = fields(value, "assistant turn record", [
264
+ "kind",
265
+ "partition",
266
+ "id",
267
+ "ticketId",
268
+ "turnId",
269
+ "triggerMessageId",
270
+ "triggerRevision",
271
+ "triggerHandlingGeneration",
272
+ "correlationId",
273
+ "createdAt",
274
+ "turnDeadline",
275
+ "maxAttempts",
276
+ "status",
277
+ "attempt",
278
+ "claimGeneration",
279
+ "preparedAttempts",
280
+ ], [
281
+ "claim",
282
+ "leaseUntil",
283
+ "nextAttemptAt",
284
+ "processing",
285
+ "terminalResult",
286
+ "lastFinish",
287
+ ]);
288
+ if (row.kind !== "assistant_turn" ||
289
+ !/^[0-9a-f]{64}$/.test(text(row.turnId, "turnId")))
290
+ throw new TypeError("Invalid assistant turn identity");
291
+ for (const key of [
292
+ "partition",
293
+ "ticketId",
294
+ "triggerMessageId",
295
+ "correlationId",
296
+ ])
297
+ text(row[key], key);
298
+ if (row.partition !== row.ticketId ||
299
+ row.id !== assistantTurnKey(value.ticketId, value.turnId).id ||
300
+ (physical !== undefined &&
301
+ (physical.partition !== row.partition || physical.id !== row.id)))
302
+ throw new TypeError("Assistant turn physical key disagrees with its identity");
303
+ integer(row.triggerRevision, "triggerRevision", 1);
304
+ integer(row.triggerHandlingGeneration, "triggerHandlingGeneration", 1);
305
+ integer(row.maxAttempts, "maxAttempts", 1, 4);
306
+ integer(row.attempt, "attempt", 0, value.maxAttempts);
307
+ integer(row.claimGeneration, "claimGeneration");
308
+ if (row.claimGeneration !== row.attempt)
309
+ throw new TypeError("Assistant claim generation disagrees with its bounded attempt");
310
+ if (timestamp(row.turnDeadline, "turnDeadline") <=
311
+ timestamp(row.createdAt, "createdAt"))
312
+ throw new TypeError("Invalid assistant turn deadline");
313
+ if (typeof row.status !== "string" ||
314
+ ![
315
+ "pending",
316
+ "claimed",
317
+ "retry",
318
+ "completed",
319
+ "escalated",
320
+ "superseded",
321
+ ].includes(row.status))
322
+ throw new TypeError("Invalid assistant turn status");
323
+ if (row.claim !== undefined) {
324
+ const claim = validateFence(row.claim);
325
+ if (claim.ticketId !== row.ticketId ||
326
+ claim.turnId !== row.turnId ||
327
+ claim.triggerMessageId !== row.triggerMessageId ||
328
+ claim.correlationId !== row.correlationId ||
329
+ claim.attempt !== row.attempt ||
330
+ claim.claimGeneration !== row.claimGeneration ||
331
+ claim.expectedHandlingGeneration !== row.triggerHandlingGeneration ||
332
+ claim.expectedRevision < value.triggerRevision ||
333
+ claim.attemptId !== `${value.turnId}:${value.attempt}` ||
334
+ claim.commandId !== `assistant-complete:${claim.attemptId}`)
335
+ throw new TypeError("Invalid assistant turn claim identity");
336
+ }
337
+ if (row.leaseUntil !== undefined &&
338
+ timestamp(row.leaseUntil, "leaseUntil") >
339
+ timestamp(row.turnDeadline, "turnDeadline"))
340
+ throw new TypeError("Assistant lease exceeds its turn deadline");
341
+ if (row.nextAttemptAt !== undefined)
342
+ timestamp(row.nextAttemptAt, "nextAttemptAt");
343
+ if (row.status === "claimed" &&
344
+ (row.claim === undefined || row.leaseUntil === undefined))
345
+ throw new TypeError("Claimed assistant turn has no lease");
346
+ if (row.status !== "claimed" &&
347
+ (row.claim !== undefined || row.leaseUntil !== undefined))
348
+ throw new TypeError("Unclaimed assistant turn retains a live claim");
349
+ if (row.status === "retry" && row.nextAttemptAt === undefined)
350
+ throw new TypeError("Retrying assistant turn has no next attempt time");
351
+ if (row.status !== "retry" && row.nextAttemptAt !== undefined)
352
+ throw new TypeError("Assistant retry time disagrees with its status");
353
+ if (row.status === "pending" &&
354
+ (row.attempt !== 0 || value.preparedAttempts.length !== 0))
355
+ throw new TypeError("Pending assistant turn already contains an attempt");
356
+ dataArray(row.preparedAttempts, "preparedAttempts", value.maxAttempts);
357
+ const seen = new Set();
358
+ for (const prepared of value.preparedAttempts) {
359
+ const item = fields(prepared, "prepared attempt", ["attempt", "attemptId", "inputFingerprint", "binding", "accounting"], ["processing"]);
360
+ integer(item.attempt, "prepared attempt", 1, value.attempt);
361
+ const binding = validateBinding(item.binding);
362
+ if (timestamp(binding.deadline, "prepared deadline") >
363
+ timestamp(row.turnDeadline, "turnDeadline"))
364
+ throw new TypeError("Prepared request exceeds its turn deadline");
365
+ if (item.attemptId !== `${value.turnId}:${prepared.attempt}` ||
366
+ item.inputFingerprint !== binding.inputFingerprint ||
367
+ seen.has(prepared.attemptId) ||
368
+ typeof item.accounting !== "string" ||
369
+ !["not_called", "accounted", "unknown"].includes(item.accounting))
370
+ throw new TypeError("Invalid prepared assistant attempt");
371
+ seen.add(prepared.attemptId);
372
+ validateProcessing(item.processing);
373
+ }
374
+ validateProcessing(row.processing);
375
+ if (row.terminalResult !== undefined)
376
+ validateHandlingResult(row.terminalResult, value.ticketId);
377
+ if ((row.status === "completed" || row.status === "escalated") !==
378
+ (row.terminalResult !== undefined))
379
+ throw new TypeError("Assistant terminal result disagrees with its status");
380
+ if (row.lastFinish !== undefined) {
381
+ const last = fields(row.lastFinish, "lastFinish", [
382
+ "fingerprint",
383
+ "result",
384
+ ]);
385
+ text(last.fingerprint, "finish fingerprint");
386
+ const result = fields(last.result, "finish result", ["ticketId", "turnId", "outcome"], ["nextAttemptAt", "result"]);
387
+ if (result.ticketId !== value.ticketId ||
388
+ result.turnId !== value.turnId ||
389
+ typeof result.outcome !== "string" ||
390
+ ![
391
+ "retry_scheduled",
392
+ "superseded",
393
+ "escalated",
394
+ "already_terminal",
395
+ ].includes(result.outcome))
396
+ throw new TypeError("Invalid finish result identity");
397
+ if (result.nextAttemptAt !== undefined)
398
+ timestamp(result.nextAttemptAt, "nextAttemptAt");
399
+ if (result.result !== undefined)
400
+ validateHandlingResult(result.result, value.ticketId);
401
+ if ((result.outcome === "retry_scheduled") !==
402
+ (result.nextAttemptAt !== undefined) ||
403
+ (result.outcome === "escalated" && result.result === undefined))
404
+ throw new TypeError("Assistant finish result is incomplete");
405
+ }
406
+ if (encodedBytes(row) > maximumRecordBytes)
407
+ throw new TypeError("Assistant turn exceeds its encoded record bound");
408
+ }
409
+ function validateHandlingResult(input, ticketId) {
410
+ const result = fields(input, "assistant terminal result", ["ticketId", "revision", "handlingGeneration"], ["messageId"]);
411
+ if (result.ticketId !== ticketId)
412
+ throw new TypeError("Assistant terminal ticket disagrees");
413
+ integer(result.revision, "terminal revision", 1);
414
+ integer(result.handlingGeneration, "terminal handlingGeneration", 1);
415
+ if (result.messageId !== undefined)
416
+ text(result.messageId, "terminal messageId");
417
+ }
418
+ //# sourceMappingURL=assistant-turn-records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-turn-records.js","sourceRoot":"","sources":["../src/assistant-turn-records.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import type { AccessContext } from "@pegma/authorization-core";
2
+ import type { IsoTimestamp, PrincipalId } from "@pegma/spine";
3
+ import type { MessageId, TicketId } from "@pegma/support-desk-contracts";
4
+ import type { AssistantConversationView, AssistantEscalationReason, AssistantTurnFence, HandlingCommandResult } from "./index.js";
5
+ export interface AssistantTurnKey {
6
+ readonly ticketId: TicketId;
7
+ readonly turnId: string;
8
+ }
9
+ export interface AssistantTurnClaimFence extends AssistantTurnKey, AssistantTurnFence {
10
+ readonly workerId: string;
11
+ readonly claimId: string;
12
+ readonly claimGeneration: number;
13
+ readonly attempt: number;
14
+ readonly attemptId: string;
15
+ }
16
+ /** Generic immutable request identity. Never contains prompts or conversation text. */
17
+ export interface AssistantAttemptBinding {
18
+ readonly inputFingerprint: string;
19
+ readonly versions: Readonly<Record<string, string>>;
20
+ readonly references: readonly {
21
+ readonly namespace: string;
22
+ readonly resourceId: string;
23
+ readonly revision: string;
24
+ readonly binding: string;
25
+ }[];
26
+ readonly contextBinding: string;
27
+ readonly deadline: IsoTimestamp;
28
+ readonly usageReservationId: string;
29
+ }
30
+ export type AssistantTurnAccounting = "not_called" | "accounted" | "unknown";
31
+ export interface AssistantTurnProcessingMetadata {
32
+ readonly provider?: string;
33
+ readonly model?: string;
34
+ readonly requestId?: string;
35
+ readonly inputTokens?: number;
36
+ readonly outputTokens?: number;
37
+ readonly costMicros?: number;
38
+ readonly currency?: string;
39
+ readonly failureCategory?: string;
40
+ }
41
+ export interface AssistantPreparedAttempt {
42
+ readonly attempt: number;
43
+ readonly attemptId: string;
44
+ readonly inputFingerprint: string;
45
+ readonly binding: AssistantAttemptBinding;
46
+ /** Preparation alone cannot establish whether a provider call occurred. */
47
+ readonly accounting: AssistantTurnAccounting;
48
+ readonly processing?: AssistantTurnProcessingMetadata;
49
+ }
50
+ export interface AssistantTurnClaim {
51
+ readonly fence: AssistantTurnClaimFence;
52
+ readonly triggerRevision: number;
53
+ readonly leaseUntil: IsoTimestamp;
54
+ readonly turnDeadline: IsoTimestamp;
55
+ /** Service-only identity for independently resolving current customer authority. */
56
+ readonly requesterPrincipalId: PrincipalId;
57
+ readonly conversation: AssistantConversationView;
58
+ readonly preparedAttempts: readonly AssistantPreparedAttempt[];
59
+ }
60
+ export interface AssistantTurnOptions {
61
+ readonly maxAttempts?: number;
62
+ readonly maxTurnMilliseconds?: number;
63
+ readonly maxLeaseMilliseconds?: number;
64
+ }
65
+ export interface AssistantTurnScanBounds {
66
+ readonly cursor?: string;
67
+ /** Physical adapter rows, including all rows discarded by filtering. */
68
+ readonly limit: number;
69
+ }
70
+ export interface AssistantTurnScanResult {
71
+ readonly candidates: readonly AssistantTurnKey[];
72
+ readonly nextCursor: string | null;
73
+ readonly physicalRows: number;
74
+ readonly pages: 1;
75
+ }
76
+ export interface ClaimAssistantTurnCommand extends AssistantTurnKey {
77
+ readonly workerId: string;
78
+ readonly claimId: string;
79
+ readonly leaseMilliseconds: number;
80
+ }
81
+ export interface PrepareAssistantTurnAttemptCommand extends AssistantTurnClaimFence {
82
+ readonly binding: AssistantAttemptBinding;
83
+ }
84
+ export interface PreparedAssistantTurnAttempt {
85
+ readonly attemptId: string;
86
+ readonly inputFingerprint: string;
87
+ readonly binding: AssistantAttemptBinding;
88
+ }
89
+ export type AssistantTurnOutcome = {
90
+ readonly kind: "answer";
91
+ readonly messageId: MessageId;
92
+ readonly body: string;
93
+ } | {
94
+ readonly kind: "escalate";
95
+ readonly reason?: AssistantEscalationReason;
96
+ readonly summary?: string;
97
+ readonly attemptedGuideIds?: readonly string[];
98
+ };
99
+ export interface CompleteAssistantTurnCommand extends AssistantTurnClaimFence {
100
+ readonly inputFingerprint: string;
101
+ readonly outcome: AssistantTurnOutcome;
102
+ readonly processing?: AssistantTurnProcessingMetadata;
103
+ }
104
+ export interface FinishAssistantTurnAttemptCommand extends AssistantTurnClaimFence {
105
+ readonly disposition: "retry" | "superseded" | "escalate";
106
+ readonly accounting: AssistantTurnAccounting;
107
+ readonly retryAt?: IsoTimestamp;
108
+ readonly reason?: AssistantEscalationReason;
109
+ readonly summary?: string;
110
+ readonly processing?: AssistantTurnProcessingMetadata;
111
+ }
112
+ export type AssistantTurnFinishResult = AssistantTurnKey & ({
113
+ readonly outcome: "retry_scheduled";
114
+ readonly nextAttemptAt: IsoTimestamp;
115
+ } | {
116
+ readonly outcome: "superseded";
117
+ } | {
118
+ readonly outcome: "escalated";
119
+ readonly result: HandlingCommandResult;
120
+ } | {
121
+ readonly outcome: "already_terminal";
122
+ readonly result?: HandlingCommandResult;
123
+ });
124
+ /** Read-only authority/source validation. Throwing prevents the transaction. */
125
+ export type AssistantTurnCommitGuard = () => void | Promise<void>;
126
+ export interface AssistantTurnApplication {
127
+ scanAssistantTurnCandidates(access: AccessContext, bounds: AssistantTurnScanBounds): Promise<AssistantTurnScanResult>;
128
+ claimAssistantTurn(access: AccessContext, command: ClaimAssistantTurnCommand): Promise<AssistantTurnClaim | null>;
129
+ prepareAssistantTurnAttempt(access: AccessContext, command: PrepareAssistantTurnAttemptCommand): Promise<PreparedAssistantTurnAttempt>;
130
+ completeAssistantTurn(access: AccessContext, command: CompleteAssistantTurnCommand, verifyBeforeCommit: AssistantTurnCommitGuard): Promise<HandlingCommandResult>;
131
+ finishAssistantTurnAttempt(access: AccessContext, command: FinishAssistantTurnAttemptCommand): Promise<AssistantTurnFinishResult>;
132
+ }
133
+ //# sourceMappingURL=assistant-turn-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-turn-types.d.ts","sourceRoot":"","sources":["../src/assistant-turn-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=assistant-turn-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-turn-types.js","sourceRoot":"","sources":["../src/assistant-turn-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { type AccessContext } from "@pegma/authorization-core";
2
+ import type { Clock } from "@pegma/spine";
3
+ import { type CollectionStore } from "@pegma/storage-core";
4
+ import type { Ticket } from "@pegma/support-desk-contracts";
5
+ import { type AssistantConversationView, type AssistantEscalationCommand, type AssistantReplyCommand, type SupportDeskLimits, type SupportRecord } from "./index.js";
6
+ import type { AssistantTurnApplication, AssistantTurnCommitGuard, CompleteAssistantTurnCommand, FinishAssistantTurnAttemptCommand } from "./assistant-turn-types.js";
7
+ import { type ResolvedAssistantTurnOptions } from "./assistant-turn-records.js";
8
+ /** Private, closed integration with the existing handling transaction executor. */
9
+ export type AssistantTurnCommit = {
10
+ readonly kind: "complete";
11
+ readonly command: CompleteAssistantTurnCommand;
12
+ readonly fingerprint: string;
13
+ readonly guard: AssistantTurnCommitGuard;
14
+ } | {
15
+ readonly kind: "finish";
16
+ readonly command: FinishAssistantTurnAttemptCommand;
17
+ readonly fingerprint: string;
18
+ } | {
19
+ readonly kind: "exhausted";
20
+ readonly ticketId: string;
21
+ readonly turnId: string;
22
+ readonly claimGeneration: number;
23
+ readonly fingerprint: string;
24
+ };
25
+ interface AssistantTurnDependencies {
26
+ readonly records: CollectionStore<SupportRecord>;
27
+ readonly clock: Clock;
28
+ readonly options: ResolvedAssistantTurnOptions | undefined;
29
+ readonly assistantHandlingEnabled: boolean;
30
+ readonly limits: SupportDeskLimits;
31
+ readonly maxConflictAttempts: number;
32
+ conversation(ticket: Ticket, rows: readonly SupportRecord[]): AssistantConversationView;
33
+ mutateHandling(access: AccessContext, command: AssistantReplyCommand | AssistantEscalationCommand, operation: "assistant_reply" | "assistant_escalate", commit: AssistantTurnCommit): Promise<Ticket>;
34
+ }
35
+ export declare function createAssistantTurnServices(dependencies: AssistantTurnDependencies): AssistantTurnApplication & {
36
+ completionAction(ticket: Ticket, rows: readonly SupportRecord[], updated: Ticket, commit: AssistantTurnCommit): Promise<{
37
+ action: Parameters<CollectionStore<SupportRecord>["transact"]>[1][number];
38
+ verifyBeforeCommit(): Promise<void>;
39
+ }>;
40
+ };
41
+ export {};
42
+ //# sourceMappingURL=assistant-turns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-turns.d.ts","sourceRoot":"","sources":["../src/assistant-turns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAKL,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAE1B,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,wBAAwB,EAGxB,wBAAwB,EAExB,4BAA4B,EAC5B,iCAAiC,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAqBL,KAAK,4BAA4B,EAClC,MAAM,6BAA6B,CAAC;AAGrC,mFAAmF;AACnF,MAAM,MAAM,mBAAmB,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;CAC1C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,iCAAiC,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEN,UAAU,yBAAyB;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,4BAA4B,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,YAAY,CACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,aAAa,EAAE,GAC7B,yBAAyB,CAAC;IAC7B,cAAc,CACZ,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,qBAAqB,GAAG,0BAA0B,EAC3D,SAAS,EAAE,iBAAiB,GAAG,oBAAoB,EACnD,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AA8GD,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,yBAAyB,GACtC,wBAAwB,GAAG;IAC5B,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,aAAa,EAAE,EAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC;QACT,MAAM,EAAE,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1E,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;KACrC,CAAC,CAAC;CACJ,CAswBA"}