@jungjaehoon/mama-os 0.32.0 → 0.32.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 (173) hide show
  1. package/dist/agent/agent-loop.d.ts +5 -1
  2. package/dist/agent/agent-loop.d.ts.map +1 -1
  3. package/dist/agent/agent-loop.js +62 -49
  4. package/dist/agent/agent-loop.js.map +1 -1
  5. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  6. package/dist/agent/code-act/host-bridge.js +35 -74
  7. package/dist/agent/code-act/host-bridge.js.map +1 -1
  8. package/dist/agent/gateway-tool-catalog.d.ts +14 -0
  9. package/dist/agent/gateway-tool-catalog.d.ts.map +1 -0
  10. package/dist/agent/gateway-tool-catalog.js +41 -0
  11. package/dist/agent/gateway-tool-catalog.js.map +1 -0
  12. package/dist/agent/gateway-tool-executor.d.ts +12 -1
  13. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  14. package/dist/agent/gateway-tool-executor.js +149 -15
  15. package/dist/agent/gateway-tool-executor.js.map +1 -1
  16. package/dist/agent/gateway-tools.md +5 -7
  17. package/dist/agent/tool-registry.d.ts +6 -4
  18. package/dist/agent/tool-registry.d.ts.map +1 -1
  19. package/dist/agent/tool-registry.js +62 -30
  20. package/dist/agent/tool-registry.js.map +1 -1
  21. package/dist/agent/types.d.ts +18 -2
  22. package/dist/agent/types.d.ts.map +1 -1
  23. package/dist/agent/types.js.map +1 -1
  24. package/dist/api/index.d.ts +10 -0
  25. package/dist/api/index.d.ts.map +1 -1
  26. package/dist/api/index.js +7 -16
  27. package/dist/api/index.js.map +1 -1
  28. package/dist/cli/commands/connector.d.ts +6 -1
  29. package/dist/cli/commands/connector.d.ts.map +1 -1
  30. package/dist/cli/commands/connector.js +61 -45
  31. package/dist/cli/commands/connector.js.map +1 -1
  32. package/dist/cli/commands/start.d.ts +11 -8
  33. package/dist/cli/commands/start.d.ts.map +1 -1
  34. package/dist/cli/commands/start.js +155 -88
  35. package/dist/cli/commands/start.js.map +1 -1
  36. package/dist/cli/config/types.d.ts.map +1 -1
  37. package/dist/cli/config/types.js +0 -4
  38. package/dist/cli/config/types.js.map +1 -1
  39. package/dist/cli/runtime/api-routes-init.d.ts +38 -1
  40. package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
  41. package/dist/cli/runtime/api-routes-init.js +150 -30
  42. package/dist/cli/runtime/api-routes-init.js.map +1 -1
  43. package/dist/cli/runtime/api-server-init.d.ts +4 -0
  44. package/dist/cli/runtime/api-server-init.d.ts.map +1 -1
  45. package/dist/cli/runtime/api-server-init.js +3 -1
  46. package/dist/cli/runtime/api-server-init.js.map +1 -1
  47. package/dist/cli/runtime/connector-bootstrap.d.ts +8 -0
  48. package/dist/cli/runtime/connector-bootstrap.d.ts.map +1 -0
  49. package/dist/cli/runtime/connector-bootstrap.js +14 -0
  50. package/dist/cli/runtime/connector-bootstrap.js.map +1 -0
  51. package/dist/cli/runtime/connector-init.d.ts +4 -1
  52. package/dist/cli/runtime/connector-init.d.ts.map +1 -1
  53. package/dist/cli/runtime/connector-init.js +2 -8
  54. package/dist/cli/runtime/connector-init.js.map +1 -1
  55. package/dist/cli/runtime/envelope-bootstrap.d.ts +2 -1
  56. package/dist/cli/runtime/envelope-bootstrap.d.ts.map +1 -1
  57. package/dist/cli/runtime/envelope-bootstrap.js +7 -15
  58. package/dist/cli/runtime/envelope-bootstrap.js.map +1 -1
  59. package/dist/connectors/index.d.ts +4 -1
  60. package/dist/connectors/index.d.ts.map +1 -1
  61. package/dist/connectors/index.js +3 -2
  62. package/dist/connectors/index.js.map +1 -1
  63. package/dist/connectors/private-connector-policy.d.ts +150 -0
  64. package/dist/connectors/private-connector-policy.d.ts.map +1 -0
  65. package/dist/connectors/private-connector-policy.js +289 -0
  66. package/dist/connectors/private-connector-policy.js.map +1 -0
  67. package/dist/connectors/private-prompt-overlay.d.ts +17 -0
  68. package/dist/connectors/private-prompt-overlay.d.ts.map +1 -0
  69. package/dist/connectors/private-prompt-overlay.js +156 -0
  70. package/dist/connectors/private-prompt-overlay.js.map +1 -0
  71. package/dist/db/migrations/operator-task-external-lifecycle.d.ts +8 -0
  72. package/dist/db/migrations/operator-task-external-lifecycle.d.ts.map +1 -0
  73. package/dist/db/migrations/operator-task-external-lifecycle.js +169 -0
  74. package/dist/db/migrations/operator-task-external-lifecycle.js.map +1 -0
  75. package/dist/envelope/enforcer.js +8 -7
  76. package/dist/envelope/enforcer.js.map +1 -1
  77. package/dist/envelope/reactive-config.d.ts.map +1 -1
  78. package/dist/envelope/reactive-config.js +2 -1
  79. package/dist/envelope/reactive-config.js.map +1 -1
  80. package/dist/envelope/tool-connector-scope.d.ts.map +1 -1
  81. package/dist/envelope/tool-connector-scope.js +4 -0
  82. package/dist/envelope/tool-connector-scope.js.map +1 -1
  83. package/dist/gateways/message-router.d.ts +11 -1
  84. package/dist/gateways/message-router.d.ts.map +1 -1
  85. package/dist/gateways/message-router.js +121 -41
  86. package/dist/gateways/message-router.js.map +1 -1
  87. package/dist/gateways/telegram-message-ledger.d.ts +8 -1
  88. package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
  89. package/dist/gateways/telegram-message-ledger.js +141 -24
  90. package/dist/gateways/telegram-message-ledger.js.map +1 -1
  91. package/dist/gateways/telegram.d.ts +2 -0
  92. package/dist/gateways/telegram.d.ts.map +1 -1
  93. package/dist/gateways/telegram.js +19 -12
  94. package/dist/gateways/telegram.js.map +1 -1
  95. package/dist/multi-agent/agent-process-manager.d.ts +9 -1
  96. package/dist/multi-agent/agent-process-manager.d.ts.map +1 -1
  97. package/dist/multi-agent/agent-process-manager.js +48 -20
  98. package/dist/multi-agent/agent-process-manager.js.map +1 -1
  99. package/dist/multi-agent/dashboard-agent-persona.d.ts +3 -3
  100. package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
  101. package/dist/multi-agent/dashboard-agent-persona.js +10 -13
  102. package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
  103. package/dist/multi-agent/memory-agent-persona.d.ts +1 -1
  104. package/dist/multi-agent/memory-agent-persona.d.ts.map +1 -1
  105. package/dist/multi-agent/memory-agent-persona.js +1 -1
  106. package/dist/multi-agent/wiki-agent-persona.d.ts +2 -2
  107. package/dist/multi-agent/wiki-agent-persona.js +2 -2
  108. package/dist/operator/board-slot-instructions.d.ts +1 -1
  109. package/dist/operator/board-slot-instructions.js +2 -2
  110. package/dist/operator/board-slot-instructions.js.map +1 -1
  111. package/dist/operator/briefs.d.ts +3 -0
  112. package/dist/operator/briefs.d.ts.map +1 -1
  113. package/dist/operator/briefs.js +64 -3
  114. package/dist/operator/briefs.js.map +1 -1
  115. package/dist/operator/console-brief.d.ts +6 -3
  116. package/dist/operator/console-brief.d.ts.map +1 -1
  117. package/dist/operator/console-brief.js +39 -9
  118. package/dist/operator/console-brief.js.map +1 -1
  119. package/dist/operator/external-lifecycle-candidates.d.ts +56 -0
  120. package/dist/operator/external-lifecycle-candidates.d.ts.map +1 -0
  121. package/dist/operator/external-lifecycle-candidates.js +415 -0
  122. package/dist/operator/external-lifecycle-candidates.js.map +1 -0
  123. package/dist/operator/external-lifecycle.d.ts +82 -0
  124. package/dist/operator/external-lifecycle.d.ts.map +1 -0
  125. package/dist/operator/external-lifecycle.js +27 -0
  126. package/dist/operator/external-lifecycle.js.map +1 -0
  127. package/dist/operator/file-coordination.d.ts +7 -0
  128. package/dist/operator/file-coordination.d.ts.map +1 -0
  129. package/dist/operator/file-coordination.js +84 -0
  130. package/dist/operator/file-coordination.js.map +1 -0
  131. package/dist/operator/operator-trigger-loop.d.ts +19 -4
  132. package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
  133. package/dist/operator/operator-trigger-loop.js +151 -23
  134. package/dist/operator/operator-trigger-loop.js.map +1 -1
  135. package/dist/operator/pending-report-store.d.ts +62 -3
  136. package/dist/operator/pending-report-store.d.ts.map +1 -1
  137. package/dist/operator/pending-report-store.js +297 -40
  138. package/dist/operator/pending-report-store.js.map +1 -1
  139. package/dist/operator/report-carry-delivery.d.ts +35 -0
  140. package/dist/operator/report-carry-delivery.d.ts.map +1 -0
  141. package/dist/operator/report-carry-delivery.js +55 -0
  142. package/dist/operator/report-carry-delivery.js.map +1 -0
  143. package/dist/operator/report-carry.d.ts +50 -30
  144. package/dist/operator/report-carry.d.ts.map +1 -1
  145. package/dist/operator/report-carry.js +323 -71
  146. package/dist/operator/report-carry.js.map +1 -1
  147. package/dist/operator/situation-report.d.ts +30 -11
  148. package/dist/operator/situation-report.d.ts.map +1 -1
  149. package/dist/operator/situation-report.js +42 -13
  150. package/dist/operator/situation-report.js.map +1 -1
  151. package/dist/operator/task-ledger.d.ts +101 -0
  152. package/dist/operator/task-ledger.d.ts.map +1 -1
  153. package/dist/operator/task-ledger.js +599 -124
  154. package/dist/operator/task-ledger.js.map +1 -1
  155. package/dist/operator/temporal-worker.js +1 -1
  156. package/dist/operator/worker-run.d.ts +1 -1
  157. package/dist/operator/worker-run.d.ts.map +1 -1
  158. package/dist/operator/worker-run.js +17 -5
  159. package/dist/operator/worker-run.js.map +1 -1
  160. package/dist/operator/workorder-consumer.d.ts +12 -1
  161. package/dist/operator/workorder-consumer.d.ts.map +1 -1
  162. package/dist/operator/workorder-consumer.js +125 -6
  163. package/dist/operator/workorder-consumer.js.map +1 -1
  164. package/dist/operator/workorder-hooks.d.ts +7 -2
  165. package/dist/operator/workorder-hooks.d.ts.map +1 -1
  166. package/dist/operator/workorder-hooks.js +22 -0
  167. package/dist/operator/workorder-hooks.js.map +1 -1
  168. package/dist/operator/workorder-publishers.d.ts +9 -2
  169. package/dist/operator/workorder-publishers.d.ts.map +1 -1
  170. package/dist/operator/workorder-publishers.js +167 -5
  171. package/dist/operator/workorder-publishers.js.map +1 -1
  172. package/package.json +2 -2
  173. package/scripts/generate-gateway-tools.ts +13 -3
@@ -1,13 +1,64 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FilePendingReportStore = void 0;
4
+ exports.pendingReportRequestPayloadIdentity = pendingReportRequestPayloadIdentity;
5
+ exports.pendingReportDeliveryPayloadIdentity = pendingReportDeliveryPayloadIdentity;
4
6
  const node_fs_1 = require("node:fs");
7
+ const node_crypto_1 = require("node:crypto");
5
8
  const node_path_1 = require("node:path");
9
+ const report_carry_js_1 = require("./report-carry.js");
10
+ const file_coordination_js_1 = require("./file-coordination.js");
6
11
  const MAX_PENDING_REPORT_BYTES = 8 * 1024 * 1024;
7
12
  const MAX_CHANNELS = 48;
8
13
  const MAX_FIRES = 100;
9
14
  const MAX_RECALLED = 20;
10
15
  const MAX_EVENT_KEYS = 10_000;
16
+ function reportTargetIdentity(target) {
17
+ return JSON.stringify([target.source, target.channelId]);
18
+ }
19
+ function occurrenceIdentity(occurrence) {
20
+ return JSON.stringify([
21
+ occurrence.kind,
22
+ occurrence.hourKey ?? null,
23
+ occurrence.firedAtIso ?? null,
24
+ ]);
25
+ }
26
+ function pendingReportRequestPayloadIdentity(request) {
27
+ return (0, node_crypto_1.createHash)('sha256')
28
+ .update(JSON.stringify([
29
+ 'pending-report-request-v1',
30
+ request.mode,
31
+ request.deliveryId,
32
+ request.acceptedAtIso,
33
+ occurrenceIdentity(request.occurrence),
34
+ reportTargetIdentity(request.target),
35
+ ]))
36
+ .digest('hex');
37
+ }
38
+ function pendingReportDeliveryPayloadIdentity(delivery) {
39
+ const provenanceIdentity = delivery.provenance?.status === 'available'
40
+ ? ['available', delivery.provenance.modelRunId]
41
+ : delivery.provenance?.status === 'unavailable'
42
+ ? ['unavailable', delivery.provenance.reason]
43
+ : null;
44
+ return (0, node_crypto_1.createHash)('sha256')
45
+ .update(JSON.stringify([
46
+ 'pending-report-delivery-v2',
47
+ delivery.mode,
48
+ delivery.deliveryId,
49
+ delivery.text,
50
+ delivery.citedTriggerIds,
51
+ delivery.createdAtIso,
52
+ provenanceIdentity,
53
+ [
54
+ delivery.occurrence.kind,
55
+ delivery.occurrence.hourKey ?? null,
56
+ delivery.occurrence.firedAtIso ?? null,
57
+ ],
58
+ [delivery.target.source, delivery.target.channelId],
59
+ ]))
60
+ .digest('hex');
61
+ }
11
62
  function isPendingReportState(value) {
12
63
  if (!value || typeof value !== 'object')
13
64
  return false;
@@ -23,6 +74,9 @@ function isPendingReportState(value) {
23
74
  return false;
24
75
  }
25
76
  }
77
+ if (record.delivery !== undefined && record.request !== undefined) {
78
+ return false;
79
+ }
26
80
  return ((record.delivery === undefined || isPendingDelivery(record.delivery)) &&
27
81
  (record.request === undefined || isPendingRequest(record.request)));
28
82
  }
@@ -30,33 +84,115 @@ function isPendingRequest(value) {
30
84
  if (!value || typeof value !== 'object')
31
85
  return false;
32
86
  const record = value;
33
- const occurrence = record.occurrence;
34
- return (record.mode === 'full' &&
35
- isBoundedString(record.deliveryId, 512) &&
36
- isBoundedString(record.acceptedAtIso, 64) &&
37
- Boolean(occurrence) &&
38
- occurrence?.kind === 'on_demand_full' &&
39
- (occurrence.hourKey === undefined || isBoundedString(occurrence.hourKey, 128)) &&
40
- isBoundedString(occurrence.firedAtIso, 64));
87
+ if (!(record.mode === 'full' &&
88
+ isNonEmptyBoundedString(record.deliveryId, 512) &&
89
+ isNonEmptyBoundedString(record.acceptedAtIso, 64) &&
90
+ isOnDemandFullOccurrence(record.occurrence) &&
91
+ isReportTarget(record.target) &&
92
+ isSha256Identity(record.payloadIdentity))) {
93
+ return false;
94
+ }
95
+ return (record.payloadIdentity ===
96
+ pendingReportRequestPayloadIdentity({
97
+ mode: 'full',
98
+ deliveryId: record.deliveryId,
99
+ acceptedAtIso: record.acceptedAtIso,
100
+ occurrence: record.occurrence,
101
+ target: record.target,
102
+ }));
41
103
  }
42
104
  function isPendingDelivery(value) {
43
105
  if (!value || typeof value !== 'object')
44
106
  return false;
45
107
  const record = value;
46
- const occurrence = record.occurrence;
47
- return ((record.mode === 'digest' || record.mode === 'full') &&
48
- isBoundedString(record.text, 1_000_000) &&
49
- isBoundedString(record.deliveryId, 512) &&
50
- isBoundedString(record.createdAtIso, 64) &&
51
- Array.isArray(record.citedTriggerIds) &&
52
- record.citedTriggerIds.length <= MAX_FIRES &&
53
- record.citedTriggerIds.every((item) => isBoundedString(item, 512)) &&
54
- Boolean(occurrence) &&
55
- (occurrence?.kind === 'digest' ||
56
- occurrence?.kind === 'scheduled_full' ||
57
- occurrence?.kind === 'on_demand_full') &&
58
- (occurrence.hourKey === undefined || isBoundedString(occurrence.hourKey, 128)) &&
59
- (occurrence.firedAtIso === undefined || isBoundedString(occurrence.firedAtIso, 64)));
108
+ const mode = record.mode;
109
+ const text = record.text;
110
+ const deliveryId = record.deliveryId;
111
+ const createdAtIso = record.createdAtIso;
112
+ const citedTriggerIds = record.citedTriggerIds;
113
+ const target = record.target;
114
+ const payloadIdentity = record.payloadIdentity;
115
+ if ((mode !== 'digest' && mode !== 'full') ||
116
+ !isBoundedString(text, 1_000_000) ||
117
+ !isNonEmptyBoundedString(deliveryId, 512) ||
118
+ !isNonEmptyBoundedString(createdAtIso, 64) ||
119
+ !Array.isArray(citedTriggerIds) ||
120
+ citedTriggerIds.length > MAX_FIRES ||
121
+ !citedTriggerIds.every((item) => isNonEmptyBoundedString(item, 512)) ||
122
+ !isReportTarget(target) ||
123
+ !isSha256Identity(payloadIdentity)) {
124
+ return false;
125
+ }
126
+ const modeValid = mode === 'digest'
127
+ ? record.provenance === undefined && isDigestOccurrence(record.occurrence)
128
+ : (0, report_carry_js_1.isArtifactProvenance)(record.provenance) && isFullOccurrence(record.occurrence);
129
+ if (!modeValid) {
130
+ return false;
131
+ }
132
+ const expectedKeys = [
133
+ 'mode',
134
+ 'text',
135
+ 'citedTriggerIds',
136
+ 'createdAtIso',
137
+ 'deliveryId',
138
+ 'occurrence',
139
+ 'target',
140
+ 'payloadIdentity',
141
+ ...(mode === 'full' ? ['provenance'] : []),
142
+ ];
143
+ if (Object.keys(record).length !== expectedKeys.length ||
144
+ !Object.keys(record).every((key) => expectedKeys.includes(key))) {
145
+ return false;
146
+ }
147
+ return (payloadIdentity ===
148
+ pendingReportDeliveryPayloadIdentity({
149
+ mode,
150
+ deliveryId,
151
+ text,
152
+ citedTriggerIds,
153
+ createdAtIso,
154
+ ...((0, report_carry_js_1.isArtifactProvenance)(record.provenance) ? { provenance: record.provenance } : {}),
155
+ occurrence: record.occurrence,
156
+ target,
157
+ }));
158
+ }
159
+ function isDigestOccurrence(value) {
160
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
161
+ return false;
162
+ }
163
+ const record = value;
164
+ return record.kind === 'digest' && Object.keys(record).length === 1;
165
+ }
166
+ function isFullOccurrence(value) {
167
+ return isScheduledFullOccurrence(value) || isOnDemandFullOccurrence(value);
168
+ }
169
+ function isScheduledFullOccurrence(value) {
170
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
171
+ return false;
172
+ }
173
+ const record = value;
174
+ const keys = Object.keys(record);
175
+ return (record.kind === 'scheduled_full' &&
176
+ (keys.length === 2 || keys.length === 3) &&
177
+ keys.every((key) => key === 'kind' || key === 'hourKey' || key === 'firedAtIso') &&
178
+ keys.includes('kind') &&
179
+ keys.includes('hourKey') &&
180
+ isNonEmptyBoundedString(record.hourKey, 128) &&
181
+ (record.firedAtIso === undefined || isNonEmptyBoundedString(record.firedAtIso, 64)));
182
+ }
183
+ function isOnDemandFullOccurrence(value) {
184
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
185
+ return false;
186
+ }
187
+ const record = value;
188
+ const keys = Object.keys(record);
189
+ return (record.kind === 'on_demand_full' &&
190
+ (keys.length === 2 || keys.length === 3) &&
191
+ keys.every((key) => key === 'kind' || key === 'firedAtIso' || key === 'hourKey') &&
192
+ keys.includes('kind') &&
193
+ keys.includes('firedAtIso') &&
194
+ isNonEmptyBoundedString(record.firedAtIso, 64) &&
195
+ (record.hourKey === undefined || isNonEmptyBoundedString(record.hourKey, 128)));
60
196
  }
61
197
  function isSituationSnapshot(fields) {
62
198
  if (fields.version !== 1 ||
@@ -109,46 +245,167 @@ function isRecalledSnapshot(value) {
109
245
  function isSafeCount(value) {
110
246
  return Number.isSafeInteger(value) && value >= 0;
111
247
  }
248
+ function isReportTarget(value) {
249
+ if (!value || typeof value !== 'object' || Array.isArray(value))
250
+ return false;
251
+ const record = value;
252
+ return (Object.keys(record).length === 2 &&
253
+ record.source === 'telegram' &&
254
+ isNonEmptyBoundedString(record.channelId, 512) &&
255
+ record.channelId.trim() === record.channelId);
256
+ }
257
+ function isSha256Identity(value) {
258
+ return typeof value === 'string' && /^[a-f0-9]{64}$/.test(value);
259
+ }
112
260
  function isBoundedString(value, maxLength) {
113
261
  return typeof value === 'string' && value.length <= maxLength;
114
262
  }
263
+ function isNonEmptyBoundedString(value, maxLength) {
264
+ return isBoundedString(value, maxLength) && value.trim().length > 0;
265
+ }
266
+ function revisionFor(raw) {
267
+ return (0, node_crypto_1.createHash)('sha256').update(raw).digest('hex');
268
+ }
269
+ function isErrno(error, code) {
270
+ return typeof error === 'object' && error !== null && 'code' in error && error.code === code;
271
+ }
272
+ function writeTextAtomically(path, text) {
273
+ const directory = (0, node_path_1.dirname)(path);
274
+ (0, node_fs_1.mkdirSync)(directory, { recursive: true, mode: 0o700 });
275
+ const stagingDirectory = (0, node_path_1.join)(directory, `.${(0, node_path_1.basename)(path)}.${process.pid}.${(0, node_crypto_1.randomUUID)()}.stage`);
276
+ let payloadPath;
277
+ let ownsStagingDirectory = false;
278
+ let published = false;
279
+ let operationError;
280
+ let cleanupError;
281
+ try {
282
+ (0, node_fs_1.mkdirSync)(stagingDirectory, { mode: 0o700 });
283
+ ownsStagingDirectory = true;
284
+ (0, node_fs_1.chmodSync)(stagingDirectory, 0o700);
285
+ payloadPath = (0, node_path_1.join)(stagingDirectory, `${(0, node_crypto_1.randomUUID)()}.json`);
286
+ (0, node_fs_1.writeFileSync)(payloadPath, text, { mode: 0o600, flag: 'wx' });
287
+ (0, node_fs_1.chmodSync)(payloadPath, 0o600);
288
+ (0, node_fs_1.renameSync)(payloadPath, path);
289
+ published = true;
290
+ (0, node_fs_1.chmodSync)(path, 0o600);
291
+ }
292
+ catch (error) {
293
+ operationError = error;
294
+ }
295
+ finally {
296
+ if (!published && payloadPath !== undefined) {
297
+ try {
298
+ (0, node_fs_1.unlinkSync)(payloadPath);
299
+ }
300
+ catch (error) {
301
+ if (!isErrno(error, 'ENOENT')) {
302
+ cleanupError = error;
303
+ }
304
+ }
305
+ }
306
+ if (ownsStagingDirectory) {
307
+ try {
308
+ (0, node_fs_1.rmdirSync)(stagingDirectory);
309
+ }
310
+ catch (error) {
311
+ if (!isErrno(error, 'ENOENT') && cleanupError === undefined) {
312
+ cleanupError = error;
313
+ }
314
+ }
315
+ }
316
+ }
317
+ if (cleanupError !== undefined) {
318
+ throw new Error(`Unable to clean pending owner-report staging directory: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`);
319
+ }
320
+ if (operationError !== undefined) {
321
+ throw operationError;
322
+ }
323
+ }
115
324
  class FilePendingReportStore {
116
325
  path;
117
326
  log;
118
- constructor(path, log = () => { }) {
327
+ testHooks;
328
+ constructor(path, log = () => { }, testHooks) {
119
329
  this.path = path;
120
330
  this.log = log;
331
+ this.testHooks = testHooks;
332
+ }
333
+ quarantineMarkerPath() {
334
+ return `${this.path}.quarantined`;
335
+ }
336
+ loadStatus() {
337
+ return this.loadOutcome().status;
338
+ }
339
+ loadOutcome() {
340
+ return (0, file_coordination_js_1.withFileCoordinationTransaction)(this.path, 'pending owner-report state', () => this.readOutcomeInsideTransaction());
121
341
  }
122
342
  load() {
123
- if (!(0, node_fs_1.existsSync)(this.path))
124
- return null;
343
+ const outcome = this.loadOutcome();
344
+ return outcome.status === 'ready' ? outcome.state : null;
345
+ }
346
+ save(state, expected) {
347
+ if (!isPendingReportState(state)) {
348
+ throw new Error('Refusing to persist invalid pending operator report state');
349
+ }
350
+ (0, file_coordination_js_1.withFileCoordinationTransaction)(this.path, 'pending owner-report state', () => {
351
+ const current = this.readOutcomeInsideTransaction();
352
+ if (current.status === 'quarantined') {
353
+ throw new Error('Pending owner-report state is quarantined; explicit recovery is required');
354
+ }
355
+ if (expected !== undefined &&
356
+ (current.status !== expected.status || current.revision !== expected.revision)) {
357
+ throw new Error('Pending owner-report state changed before normal save');
358
+ }
359
+ writeTextAtomically(this.path, `${JSON.stringify(state)}\n`);
360
+ });
361
+ }
362
+ recoverWithValidState(state) {
363
+ if (!isPendingReportState(state)) {
364
+ throw new Error('Refusing to recover pending owner-report state with invalid data');
365
+ }
366
+ (0, file_coordination_js_1.withFileCoordinationTransaction)(this.path, 'pending owner-report state', () => {
367
+ writeTextAtomically(this.path, `${JSON.stringify(state)}\n`);
368
+ const markerPath = this.quarantineMarkerPath();
369
+ if ((0, node_fs_1.existsSync)(markerPath)) {
370
+ (0, node_fs_1.unlinkSync)(markerPath);
371
+ }
372
+ });
373
+ }
374
+ readOutcomeInsideTransaction() {
375
+ if ((0, node_fs_1.existsSync)(this.quarantineMarkerPath())) {
376
+ this.log(`[trigger-loop] pending owner-report state remains quarantined at ${this.quarantineMarkerPath()}`);
377
+ return { status: 'quarantined' };
378
+ }
379
+ if (!(0, node_fs_1.existsSync)(this.path)) {
380
+ return { status: 'empty', revision: null };
381
+ }
125
382
  const size = (0, node_fs_1.statSync)(this.path).size;
126
383
  const raw = size <= MAX_PENDING_REPORT_BYTES ? (0, node_fs_1.readFileSync)(this.path, 'utf8') : null;
127
384
  try {
128
- const parsed = raw === null ? null : JSON.parse(raw);
385
+ if (raw === null) {
386
+ throw new Error('Pending operator report state exceeds its size limit');
387
+ }
388
+ const parsed = JSON.parse(raw);
129
389
  if (!isPendingReportState(parsed)) {
130
390
  throw new Error(size > MAX_PENDING_REPORT_BYTES
131
391
  ? 'Pending operator report state exceeds its size limit'
132
392
  : 'Pending operator report state is invalid');
133
393
  }
134
- return parsed;
394
+ return {
395
+ status: 'ready',
396
+ revision: revisionFor(raw),
397
+ state: parsed,
398
+ };
135
399
  }
136
400
  catch (error) {
137
- const quarantinePath = `${this.path}.corrupt-${Date.now()}-${process.pid}`;
401
+ const quarantinePath = `${this.path}.corrupt-${Date.now()}-${process.pid}-${(0, node_crypto_1.randomUUID)()}`;
402
+ const reason = error instanceof Error ? error.message : String(error);
403
+ this.testHooks?.afterInvalidReadBeforeQuarantine?.();
404
+ writeTextAtomically(this.quarantineMarkerPath(), `${JSON.stringify({ version: 1, quarantinePath, reason })}\n`);
138
405
  (0, node_fs_1.renameSync)(this.path, quarantinePath);
139
- this.log(`[trigger-loop] invalid pending owner-report state quarantined at ${quarantinePath}: ${error instanceof Error ? error.message : String(error)}`);
140
- return null;
141
- }
142
- }
143
- save(state) {
144
- if (!isPendingReportState(state)) {
145
- throw new Error('Refusing to persist invalid pending operator report state');
406
+ this.log(`[trigger-loop] invalid pending owner-report state quarantined at ${quarantinePath}: ${reason}`);
407
+ return { status: 'quarantined' };
146
408
  }
147
- (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(this.path), { recursive: true, mode: 0o700 });
148
- const temporaryPath = `${this.path}.tmp`;
149
- (0, node_fs_1.writeFileSync)(temporaryPath, `${JSON.stringify(state)}\n`, { mode: 0o600 });
150
- (0, node_fs_1.chmodSync)(temporaryPath, 0o600);
151
- (0, node_fs_1.renameSync)(temporaryPath, this.path);
152
409
  }
153
410
  }
154
411
  exports.FilePendingReportStore = FilePendingReportStore;
@@ -1 +1 @@
1
- {"version":3,"file":"pending-report-store.js","sourceRoot":"","sources":["../../src/operator/pending-report-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pending-report-store.js","sourceRoot":"","sources":["../../src/operator/pending-report-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { PersistDeliveredInput } from './report-carry.js';
2
+ import type { DeliveredFullReport } from './situation-report.js';
3
+ /** Narrow persistence port so startup wiring stays independent of the concrete file implementation. */
4
+ export interface ReportCarryDeliveryStore {
5
+ persistDelivered(input: PersistDeliveredInput): void;
6
+ }
7
+ export interface TelegramReportCarryDeliveryOptions {
8
+ reportChatId: string;
9
+ carryStore: ReportCarryDeliveryStore;
10
+ }
11
+ /** The Telegram boundary used by detached operator reports. */
12
+ export interface TelegramSystemMessageSender {
13
+ sendSystemMessage(chatId: string, text: string, deliveryId?: string): Promise<void>;
14
+ }
15
+ export interface TelegramReportOutputOptions {
16
+ reportChatId: string;
17
+ telegramSender: TelegramSystemMessageSender;
18
+ }
19
+ /**
20
+ * Binds the host-authorized Telegram destination to the operator output surface.
21
+ * Prepared full reports retain their delivery identity; legacy digest sends receive a new one.
22
+ */
23
+ export declare function createTelegramReportOutput({ reportChatId, telegramSender, }: TelegramReportOutputOptions): {
24
+ target: {
25
+ source: 'telegram';
26
+ channelId: string;
27
+ };
28
+ send(text: string, deliveryId?: string): Promise<void>;
29
+ };
30
+ /**
31
+ * Binds an already-authorized Telegram report destination to the durable carry store.
32
+ * The returned callback receives only the successful full-delivery artifact from the reporter.
33
+ */
34
+ export declare function createTelegramReportCarryDelivery({ reportChatId, carryStore, }: TelegramReportCarryDeliveryOptions): (report: DeliveredFullReport) => void;
35
+ //# sourceMappingURL=report-carry-delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-carry-delivery.d.ts","sourceRoot":"","sources":["../../src/operator/report-carry-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIjE,uGAAuG;AACvG,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,kCAAkC;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,wBAAwB,CAAC;CACtC;AAED,+DAA+D;AAC/D,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,2BAA2B,CAAC;CAC7C;AAQD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,YAAY,EACZ,cAAc,GACf,EAAE,2BAA2B,GAAG;IAC/B,MAAM,EAAE;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD,CAWA;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,EAChD,YAAY,EACZ,UAAU,GACX,EAAE,kCAAkC,GAAG,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CA6B5E"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTelegramReportOutput = createTelegramReportOutput;
4
+ exports.createTelegramReportCarryDelivery = createTelegramReportCarryDelivery;
5
+ const pending_report_store_js_1 = require("./pending-report-store.js");
6
+ const node_crypto_1 = require("node:crypto");
7
+ function requireCanonicalTelegramReportChatId(reportChatId) {
8
+ if (reportChatId.length === 0 || reportChatId.trim() !== reportChatId) {
9
+ throw new Error('Telegram report delivery requires a canonical report chat ID');
10
+ }
11
+ }
12
+ /**
13
+ * Binds the host-authorized Telegram destination to the operator output surface.
14
+ * Prepared full reports retain their delivery identity; legacy digest sends receive a new one.
15
+ */
16
+ function createTelegramReportOutput({ reportChatId, telegramSender, }) {
17
+ requireCanonicalTelegramReportChatId(reportChatId);
18
+ return {
19
+ target: { source: 'telegram', channelId: reportChatId },
20
+ send: (text, deliveryId) => telegramSender.sendSystemMessage(reportChatId, text, deliveryId ?? `operator-report:legacy:${(0, node_crypto_1.randomUUID)()}`),
21
+ };
22
+ }
23
+ /**
24
+ * Binds an already-authorized Telegram report destination to the durable carry store.
25
+ * The returned callback receives only the successful full-delivery artifact from the reporter.
26
+ */
27
+ function createTelegramReportCarryDelivery({ reportChatId, carryStore, }) {
28
+ requireCanonicalTelegramReportChatId(reportChatId);
29
+ return (report) => {
30
+ if (report.target?.source !== 'telegram' ||
31
+ report.target.channelId !== reportChatId ||
32
+ report.occurrence === undefined ||
33
+ report.payloadIdentity !==
34
+ (0, pending_report_store_js_1.pendingReportDeliveryPayloadIdentity)({
35
+ mode: report.mode,
36
+ deliveryId: report.deliveryId,
37
+ text: report.text,
38
+ citedTriggerIds: report.citedTriggerIds,
39
+ createdAtIso: report.createdAtIso,
40
+ provenance: report.provenance,
41
+ occurrence: report.occurrence,
42
+ target: report.target,
43
+ })) {
44
+ throw new Error('Full report carry delivery binding does not match its Telegram target');
45
+ }
46
+ carryStore.persistDelivered({
47
+ deliveryId: report.deliveryId,
48
+ target: report.target,
49
+ deliveredAt: report.deliveredAtIso,
50
+ text: report.text,
51
+ provenance: report.provenance,
52
+ });
53
+ };
54
+ }
55
+ //# sourceMappingURL=report-carry-delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-carry-delivery.js","sourceRoot":"","sources":["../../src/operator/report-carry-delivery.ts"],"names":[],"mappings":";;AAmCA,gEAiBC;AAMD,8EAgCC;AAxFD,uEAAiF;AACjF,6CAAyC;AAsBzC,SAAS,oCAAoC,CAAC,YAAoB;IAChE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,YAAY,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,0BAA0B,CAAC,EACzC,YAAY,EACZ,cAAc,GACc;IAI5B,oCAAoC,CAAC,YAAY,CAAC,CAAC;IACnD,OAAO;QACL,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE;QACvD,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CACzB,cAAc,CAAC,iBAAiB,CAC9B,YAAY,EACZ,IAAI,EACJ,UAAU,IAAI,0BAA0B,IAAA,wBAAU,GAAE,EAAE,CACvD;KACJ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,iCAAiC,CAAC,EAChD,YAAY,EACZ,UAAU,GACyB;IACnC,oCAAoC,CAAC,YAAY,CAAC,CAAC;IACnD,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IACE,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU;YACpC,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,YAAY;YACxC,MAAM,CAAC,UAAU,KAAK,SAAS;YAC/B,MAAM,CAAC,eAAe;gBACpB,IAAA,8DAAoC,EAAC;oBACnC,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,EACJ,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,UAAU,CAAC,gBAAgB,CAAC;YAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,cAAc;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,24 +1,10 @@
1
1
  /**
2
- * Context carry for the owner console (plan v6 S1-T4).
2
+ * TG-06 one-shot owner-report carry.
3
3
  *
4
- * Kagemusha's continuity mechanism, minimal form: the chat persona can
5
- * reference "the report you just received" because the last DELIVERED full
6
- * report is persisted at delivery time and injected per turn. Carry is
7
- * DERIVED state (storage-layer, never session accumulation - owner principle
8
- * "session = cache").
9
- *
10
- * Injection rides the user-message prefix path - the only channel that flows
11
- * on EVERY turn including CONTINUE (per-call system prompts never reach a
12
- * pooled CLI process).
13
- */
14
- /**
15
- * Whether a delivered report can be traced back to the run that produced it.
16
- *
17
- * Discriminated rather than a nullable id, for the reason the turn contract uses the
18
- * same shape: "no handle recorded" and "no run happened" are different facts, and a
19
- * delivered artifact that cannot be traced should say which one it is. A report is the
20
- * most consequential thing this system emits - it goes to a person and gets acted on -
21
- * so it is the last place an absence should be silent.
4
+ * The report itself is durable data, but this derived context must only reach
5
+ * the Telegram chat that received it and only until its first durable owner
6
+ * turn acknowledgement. Invalid state is deliberately not repaired here: it
7
+ * cannot safely be attributed to a target or delivery.
22
8
  */
23
9
  export type ArtifactProvenance = {
24
10
  status: 'available';
@@ -27,20 +13,54 @@ export type ArtifactProvenance = {
27
13
  status: 'unavailable';
28
14
  reason: 'no_run_handle' | 'commit_failed' | 'legacy_record';
29
15
  };
30
- export interface LastFullReport {
16
+ export interface ReportCarryTarget {
17
+ source: 'telegram';
18
+ channelId: string;
19
+ }
20
+ export interface ReportCarryV2 {
21
+ version: 2;
22
+ deliveryId: string;
23
+ target: ReportCarryTarget;
31
24
  deliveredAt: string;
32
25
  text: string;
33
26
  provenance: ArtifactProvenance;
27
+ consumedAt?: string;
28
+ consumingChannelKey?: string;
29
+ }
30
+ export interface ReportCarryPeek {
31
+ deliveryId: string;
32
+ prefix: string;
33
+ }
34
+ export interface PersistDeliveredInput {
35
+ deliveryId: string;
36
+ target: ReportCarryTarget;
37
+ deliveredAt: string;
38
+ text: string;
39
+ provenance: ArtifactProvenance;
40
+ }
41
+ export interface AckInput {
42
+ deliveryId: string;
43
+ target: ReportCarryTarget;
44
+ consumingChannelKey: string;
45
+ consumedAtIso: string;
46
+ }
47
+ export interface ReportCarryPort {
48
+ peek(target: ReportCarryTarget, nowMs?: number): ReportCarryPeek | null;
49
+ acknowledge(input: AckInput): boolean;
34
50
  }
35
51
  export declare function defaultCarryPath(): string;
36
- /** Persist the delivered full report (atomic write, same pattern as the schedule store). */
37
- export declare function persistLastFullReport(deliveredAtIso: string, text: string, provenance: ArtifactProvenance, path?: string): void;
38
- /** Load the last delivered full report; null when none exists or the file is unreadable. */
39
- export declare function loadLastFullReport(path?: string): LastFullReport | null;
40
- /**
41
- * Build the per-turn carry prefix for the owner console. Empty string when no
42
- * report has been delivered yet (nothing to carry - the persona should use
43
- * report_request/board_read instead).
44
- */
45
- export declare function buildReportCarryPrefix(path?: string): string;
52
+ /** Exact persisted provenance contract shared by report composition and outbox recovery. */
53
+ export declare function isArtifactProvenance(value: unknown): value is ArtifactProvenance;
54
+ /** @internal Atomic publisher used only while FileReportCarryStore owns its SQLite transaction. */
55
+ export declare function writeReportCarryAtomically(path: string, record: ReportCarryV2): void;
56
+ export declare class FileReportCarryStore implements ReportCarryPort {
57
+ private readonly path;
58
+ constructor(path?: string);
59
+ persistDelivered(input: PersistDeliveredInput): void;
60
+ peek(target: ReportCarryTarget, nowMs?: number): ReportCarryPeek | null;
61
+ acknowledge(input: AckInput): boolean;
62
+ private read;
63
+ private quarantineLegacy;
64
+ private warn;
65
+ }
46
66
  //# sourceMappingURL=report-carry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"report-carry.d.ts","sourceRoot":"","sources":["../../src/operator/report-carry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAID,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,4FAA4F;AAC5F,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,kBAAkB,EAC9B,IAAI,GAAE,MAA2B,GAChC,IAAI,CAYN;AAaD,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAA2B,GAAG,cAAc,GAAG,IAAI,CAiC3F;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,MAA2B,GAAG,MAAM,CAmBhF"}
1
+ {"version":3,"file":"report-carry.d.ts","sourceRoot":"","sources":["../../src/operator/report-carry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,kBAAkB,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;IACxE,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;CACvC;AA0BD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AA8BD,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAkBhF;AA+ID,mGAAmG;AACnG,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAyDpF;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,MAA2B;IAE9D,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAiCpD,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,GAAE,MAAmB,GAAG,eAAe,GAAG,IAAI;IAgBnF,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAsBrC,OAAO,CAAC,IAAI;IA4BZ,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,IAAI;CAGb"}