create-principles-disciple 1.145.0 → 1.145.3

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 (129) hide show
  1. package/LICENSE +73 -21
  2. package/NOTICE +2 -0
  3. package/README.md +1 -1
  4. package/_release/product-identity.json +2 -2
  5. package/codex-adapter/package.json +5 -3
  6. package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +4 -4
  7. package/console/dist/ui/i18n/en.json +17 -16
  8. package/console/dist/ui/i18n/zh-CN.json +17 -16
  9. package/console/dist/ui/pages/focus/FocusPage.js +9 -5
  10. package/console/dist/ui/pages/focus/OwnerDecisionCard.js +1 -1
  11. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +10 -4
  12. package/console/dist/ui/pages/principles/PrinciplesPage.js +1 -1
  13. package/console/dist/ui/utils/reading-layout.d.ts +19 -0
  14. package/console/dist/ui/utils/reading-layout.js +46 -0
  15. package/console/dist/web/assets/app.js +30 -28
  16. package/console/package.json +2 -1
  17. package/core/dist/runtime-v2/index.d.ts +10 -0
  18. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  19. package/core/dist/runtime-v2/index.js +5 -0
  20. package/core/dist/runtime-v2/index.js.map +1 -1
  21. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +25 -6
  22. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
  23. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js +21 -7
  24. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
  25. package/core/dist/runtime-v2/internalization/artificer-run-correlation.d.ts +82 -0
  26. package/core/dist/runtime-v2/internalization/artificer-run-correlation.d.ts.map +1 -0
  27. package/core/dist/runtime-v2/internalization/artificer-run-correlation.js +79 -0
  28. package/core/dist/runtime-v2/internalization/artificer-run-correlation.js.map +1 -0
  29. package/core/dist/runtime-v2/internalization/artificer-runner.d.ts +16 -2
  30. package/core/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
  31. package/core/dist/runtime-v2/internalization/artificer-runner.js +89 -9
  32. package/core/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
  33. package/core/dist/runtime-v2/internalization/consumer-evidence-preflight.d.ts +141 -0
  34. package/core/dist/runtime-v2/internalization/consumer-evidence-preflight.d.ts.map +1 -0
  35. package/core/dist/runtime-v2/internalization/consumer-evidence-preflight.js +284 -0
  36. package/core/dist/runtime-v2/internalization/consumer-evidence-preflight.js.map +1 -0
  37. package/core/dist/runtime-v2/internalization/evidence-readiness.d.ts +170 -0
  38. package/core/dist/runtime-v2/internalization/evidence-readiness.d.ts.map +1 -0
  39. package/core/dist/runtime-v2/internalization/evidence-readiness.js +335 -0
  40. package/core/dist/runtime-v2/internalization/evidence-readiness.js.map +1 -0
  41. package/core/dist/runtime-v2/internalization/owner-evidence-recovery.d.ts +190 -0
  42. package/core/dist/runtime-v2/internalization/owner-evidence-recovery.d.ts.map +1 -0
  43. package/core/dist/runtime-v2/internalization/owner-evidence-recovery.js +488 -0
  44. package/core/dist/runtime-v2/internalization/owner-evidence-recovery.js.map +1 -0
  45. package/core/dist/runtime-v2/internalization/owner-retry.d.ts +23 -1
  46. package/core/dist/runtime-v2/internalization/owner-retry.d.ts.map +1 -1
  47. package/core/dist/runtime-v2/internalization/owner-retry.js +19 -3
  48. package/core/dist/runtime-v2/internalization/owner-retry.js.map +1 -1
  49. package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +8 -0
  50. package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
  51. package/core/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
  52. package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts +12 -0
  53. package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
  54. package/core/dist/runtime-v2/internalization/pitask-metadata.js +24 -0
  55. package/core/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
  56. package/core/dist/runtime-v2/recovery-actions-log.d.ts +40 -0
  57. package/core/dist/runtime-v2/recovery-actions-log.d.ts.map +1 -1
  58. package/core/dist/runtime-v2/recovery-actions-log.js +77 -2
  59. package/core/dist/runtime-v2/recovery-actions-log.js.map +1 -1
  60. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts +6 -1
  61. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
  62. package/core/dist/runtime-v2/store/runtime-state-manager.js +6 -2
  63. package/core/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
  64. package/core/dist/runtime-v2/store/task/memory-task-store.d.ts +3 -1
  65. package/core/dist/runtime-v2/store/task/memory-task-store.d.ts.map +1 -1
  66. package/core/dist/runtime-v2/store/task/memory-task-store.js +6 -1
  67. package/core/dist/runtime-v2/store/task/memory-task-store.js.map +1 -1
  68. package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts +3 -1
  69. package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
  70. package/core/dist/runtime-v2/store/task/sqlite-task-store.js +10 -2
  71. package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  72. package/core/dist/runtime-v2/store/task/task-store.d.ts +11 -5
  73. package/core/dist/runtime-v2/store/task/task-store.d.ts.map +1 -1
  74. package/core/dist/telemetry-event.d.ts +2 -2
  75. package/core/dist/telemetry-event.d.ts.map +1 -1
  76. package/core/dist/telemetry-event.js +13 -0
  77. package/core/dist/telemetry-event.js.map +1 -1
  78. package/core/package.json +9 -3
  79. package/dist/installers/workbuddy-host-installer.d.ts +16 -3
  80. package/dist/installers/workbuddy-host-installer.d.ts.map +1 -1
  81. package/dist/installers/workbuddy-host-installer.js +57 -10
  82. package/dist/installers/workbuddy-host-installer.js.map +1 -1
  83. package/host-runtime/dist/internalization-consumer-cycle.d.ts +12 -1
  84. package/host-runtime/dist/internalization-consumer-cycle.js +141 -16
  85. package/host-runtime/dist/workspace-telemetry-emitter.js +13 -0
  86. package/host-runtime/package.json +5 -3
  87. package/install-layout/package.json +5 -3
  88. package/package.json +6 -5
  89. package/pd-cli/dist/commands/runtime-internalization-audit-artificer-evidence.d.ts +44 -0
  90. package/pd-cli/dist/commands/runtime-internalization-audit-artificer-evidence.d.ts.map +1 -0
  91. package/pd-cli/dist/commands/runtime-internalization-audit-artificer-evidence.js +138 -0
  92. package/pd-cli/dist/commands/runtime-internalization-audit-artificer-evidence.js.map +1 -0
  93. package/pd-cli/dist/commands/runtime-internalization-evidence.d.ts +72 -0
  94. package/pd-cli/dist/commands/runtime-internalization-evidence.d.ts.map +1 -0
  95. package/pd-cli/dist/commands/runtime-internalization-evidence.js +424 -0
  96. package/pd-cli/dist/commands/runtime-internalization-evidence.js.map +1 -0
  97. package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
  98. package/pd-cli/dist/commands/runtime-internalization-run-once.js +22 -1
  99. package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
  100. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.d.ts.map +1 -1
  101. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js +45 -4
  102. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js.map +1 -1
  103. package/pd-cli/dist/index.js +8 -0
  104. package/pd-cli/dist/index.js.map +1 -1
  105. package/pd-cli/dist/services/artificer-evidence-audit.d.ts +156 -0
  106. package/pd-cli/dist/services/artificer-evidence-audit.d.ts.map +1 -0
  107. package/pd-cli/dist/services/artificer-evidence-audit.js +321 -0
  108. package/pd-cli/dist/services/artificer-evidence-audit.js.map +1 -0
  109. package/pd-cli/dist/services/rulehost-pipeline-runner.d.ts.map +1 -1
  110. package/pd-cli/dist/services/rulehost-pipeline-runner.js +17 -3
  111. package/pd-cli/dist/services/rulehost-pipeline-runner.js.map +1 -1
  112. package/pd-cli/package.json +5 -3
  113. package/plugin/dist/bundle.js +491 -491
  114. package/plugin/dist/openclaw.plugin.json +1 -1
  115. package/plugin/dist/rulehost-evidence.js +26 -26
  116. package/plugin/openclaw.plugin.json +1 -1
  117. package/plugin/package.json +5 -3
  118. package/release-manager/dist/installers/workbuddy-host-installer.d.ts +16 -3
  119. package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +1 -1
  120. package/release-manager/dist/installers/workbuddy-host-installer.js +57 -10
  121. package/release-manager/dist/installers/workbuddy-host-installer.js.map +1 -1
  122. package/release-manager/package.json +5 -4
  123. package/workbuddy-adapter/package.json +5 -3
  124. package/console/dist/ui/utils/navigation.d.ts +0 -9
  125. package/console/dist/ui/utils/navigation.js +0 -7
  126. package/core/dist/runtime-v2/internalization/dimension-coverage-policy.d.ts +0 -54
  127. package/core/dist/runtime-v2/internalization/dimension-coverage-policy.d.ts.map +0 -1
  128. package/core/dist/runtime-v2/internalization/dimension-coverage-policy.js +0 -70
  129. package/core/dist/runtime-v2/internalization/dimension-coverage-policy.js.map +0 -1
@@ -0,0 +1,488 @@
1
+ import { PDRuntimeError } from '../error-categories.js';
2
+ import { createPITaskDiagnosticJson, hydratePITaskRecord, mergePITaskMetadata, } from './pitask-metadata.js';
3
+ import { assessEvidenceReadiness, validateOwnerEvidenceSelectionShape, } from './evidence-readiness.js';
4
+ import { resolveArtificerCanonicalPainId } from './consumer-evidence-preflight.js';
5
+ import { buildArtificerRunCorrelation } from './artificer-run-correlation.js';
6
+ import { ownerRetryNeedsHumanReviewTask } from './owner-retry.js';
7
+ import { appendOwnerEvidenceAction } from '../recovery-actions-log.js';
8
+ // ── evidence-waiting task identification (FR-06 1/2) ────────────────────────
9
+ /**
10
+ * FR-04: a task is "waiting for Owner evidence" iff it sits in
11
+ * needs_human_review with one of the four stable reason codes in its
12
+ * humanReviewContext. Other NHR tasks (verdict reviews etc.) are NOT
13
+ * evidence-waiting and are never touched by this module.
14
+ */
15
+ export const EVIDENCE_WAIT_REASON_CODES = new Set([
16
+ 'owner_behavior_examples_required',
17
+ 'owner_behavior_examples_invalid',
18
+ 'owner_behavior_examples_stale',
19
+ 'owner_behavior_examples_scope_mismatch',
20
+ ]);
21
+ /** Field names whose absence the readiness gate reports (FR-06 2). */
22
+ const SELECTION_FIELD_NAMES = [
23
+ 'sourcePainId',
24
+ 'sourceNegativeToolCallId',
25
+ 'positiveToolCallIds',
26
+ 'ownerDesiredOutcome',
27
+ ];
28
+ function nextActionForReasonCode(reasonCode) {
29
+ switch (reasonCode) {
30
+ case 'owner_behavior_examples_required':
31
+ return 'Attach evidence (dry-run by default): pd runtime internalization evidence attach --task <taskId> --pain <canonicalPainId> --negative <toolCallId> --positive <id>... --outcome "<desired behavior>" — then resume with evidence resume --confirm.';
32
+ case 'owner_behavior_examples_invalid':
33
+ return 'The stored selection failed validation; re-attach a corrected selection with evidence attach --confirm (revision increments), then resume.';
34
+ case 'owner_behavior_examples_stale':
35
+ return 'The referenced trajectory changed or was cleaned; re-attach fresh examples with evidence attach --confirm, then resume (resume refuses stale digests).';
36
+ case 'owner_behavior_examples_scope_mismatch':
37
+ return 'The selection references another pain/session; re-attach examples that belong to the referenced pain session, then resume.';
38
+ default:
39
+ return 'Inspect the task: pd runtime internalization queue --json';
40
+ }
41
+ }
42
+ /**
43
+ * FR-06 1/2: list Artificer tasks waiting for Owner evidence. Read-only;
44
+ * non-artificer or non-evidence NHR tasks are not listed. Hydration
45
+ * failures are skipped (the task is not listable as evidence-waiting —
46
+ * `pd runtime internalization integrity` is the surface for those).
47
+ */
48
+ // ── shared helpers ──────────────────────────────────────────────────────────
49
+ function hydrateOrNull(task) {
50
+ return hydratePITaskRecord(task);
51
+ }
52
+ function readDiagnosticJson(task) {
53
+ const raw = task.diagnosticJson;
54
+ return typeof raw === 'string' && raw.trim() !== '' ? raw : null;
55
+ }
56
+ export async function listEvidenceWaitingTasks(stateManager) {
57
+ const tasks = await stateManager.listTasks({ status: 'needs_human_review', taskKind: 'artificer' });
58
+ const summaries = [];
59
+ for (const task of tasks) {
60
+ const piTask = hydrateOrNull(task);
61
+ if (!piTask)
62
+ continue;
63
+ const context = piTask.humanReviewContext;
64
+ if (!context || !EVIDENCE_WAIT_REASON_CODES.has(context.reasonCode))
65
+ continue;
66
+ const selection = piTask.ownerEvidenceSelection;
67
+ summaries.push({
68
+ taskId: task.taskId,
69
+ channel: piTask.channel,
70
+ painId: selection?.sourcePainId ?? null,
71
+ reasonCode: context.reasonCode,
72
+ missingFields: context.reasonCode === 'owner_behavior_examples_required'
73
+ ? SELECTION_FIELD_NAMES
74
+ : [],
75
+ nextAction: nextActionForReasonCode(context.reasonCode),
76
+ attemptCount: task.attemptCount,
77
+ maxAttempts: task.maxAttempts,
78
+ evidenceRevision: selection?.revision ?? 0,
79
+ });
80
+ }
81
+ return summaries;
82
+ }
83
+ function ownerOperationLabel(decidedBy) {
84
+ return decidedBy !== undefined && decidedBy.trim() !== '' ? `cli:attach:${decidedBy.trim()}` : 'cli:attach';
85
+ }
86
+ async function loadEvidenceTask(stateManager, taskId) {
87
+ const task = await stateManager.getTask(taskId);
88
+ if (!task) {
89
+ return { ok: false, refusal: { status: 'refused', taskId, reason: 'task_not_found', nextAction: 'Verify the task id and workspace (pd runtime internalization queue --json).' } };
90
+ }
91
+ if (task.status !== 'needs_human_review') {
92
+ return {
93
+ ok: false,
94
+ refusal: {
95
+ status: 'refused',
96
+ taskId,
97
+ reason: 'task_not_needs_human_review',
98
+ // PRI-980 review P2-2: name the REAL out-chain — a terminal-failed
99
+ // task (e.g. the run-once input_invalid landing) must first be
100
+ // recovered to pending before the consumer preflight can park it
101
+ // here for evidence attach.
102
+ nextAction: 'Only needs_human_review tasks waiting for Owner evidence accept this operation (pd runtime internalization evidence list). '
103
+ + 'A failed task returns to pending via pd runtime recovery failed-tasks --confirm; the consumer evidence preflight then parks it in needs_human_review for evidence attach.',
104
+ },
105
+ };
106
+ }
107
+ const piTask = hydrateOrNull(task);
108
+ if (!piTask) {
109
+ return {
110
+ ok: false,
111
+ refusal: {
112
+ status: 'refused',
113
+ taskId,
114
+ reason: 'metadata_invalid',
115
+ nextAction: 'Task metadata failed PI hydration; inspect with pd runtime internalization integrity --json before any owner action.',
116
+ },
117
+ };
118
+ }
119
+ const context = piTask.humanReviewContext;
120
+ if (!context || !EVIDENCE_WAIT_REASON_CODES.has(context.reasonCode)) {
121
+ return {
122
+ ok: false,
123
+ refusal: {
124
+ status: 'refused',
125
+ taskId,
126
+ reason: 'not_evidence_review',
127
+ nextAction: 'This needs_human_review task is not an evidence review (verdict/decision tasks use the governance focus or pd runtime internalization retry).',
128
+ },
129
+ };
130
+ }
131
+ return { ok: true, task, piTask };
132
+ }
133
+ /**
134
+ * FR-03/FR-06 3-6: assemble + validate the Owner selection, then persist it
135
+ * (with revision/contentDigest/ownerOperation/attachedAt) into
136
+ * `pi_metadata.ownerEvidenceSelection` via the narrow diagnosticJson CAS.
137
+ * Dry-run assembles and reports without writing ANY state (cli-5); failures
138
+ * refuse with the stable FR-04 reason codes and zero mutation.
139
+ */
140
+ export async function attachOwnerEvidence(stateManager, input) {
141
+ const loaded = await loadEvidenceTask(stateManager, input.taskId);
142
+ if (loaded.ok === false)
143
+ return loaded.refusal;
144
+ const { task, piTask } = loaded;
145
+ const canonicalPainId = await resolveArtificerCanonicalPainId(input.taskId, (id) => stateManager.getTask(id));
146
+ if (canonicalPainId === null || canonicalPainId !== input.selection.sourcePainId) {
147
+ return {
148
+ status: 'refused',
149
+ taskId: input.taskId,
150
+ reason: 'owner_behavior_examples_scope_mismatch',
151
+ nextAction: 'Selected Pain must match the task canonical seed Pain; inspect the task lineage before attaching evidence.',
152
+ };
153
+ }
154
+ // One shared judgment: shape → assembly → pack contract (ready ⇒ pack +
155
+ // digest). The shape check runs first even in dry-run so an unusable
156
+ // selection refuses before any assembly I/O.
157
+ const selectionProblems = validateOwnerEvidenceSelectionShape(input.selection);
158
+ if (selectionProblems.length > 0) {
159
+ return {
160
+ status: 'refused',
161
+ taskId: input.taskId,
162
+ reason: 'owner_behavior_examples_invalid',
163
+ detail: selectionProblems.join('; '),
164
+ nextAction: 'Provide a positive safe integer negative tool call id, 1..3 unique positive positive ids, and a non-empty outcome text.',
165
+ };
166
+ }
167
+ const readiness = assessEvidenceReadiness({
168
+ channelRequiresOwnerEvidence: true,
169
+ ownerSelection: input.selection,
170
+ assemblePack: () => input.assemble.assemble(input.selection),
171
+ });
172
+ if (readiness.status !== 'ready') {
173
+ if (readiness.status === 'owner_evidence_required') {
174
+ // Unreachable: the caller provided the selection above.
175
+ return {
176
+ status: 'refused',
177
+ taskId: input.taskId,
178
+ reason: 'owner_behavior_examples_invalid',
179
+ nextAction: 'Provide the complete Owner selection.',
180
+ };
181
+ }
182
+ if (readiness.status === 'not_applicable') {
183
+ return {
184
+ status: 'refused',
185
+ taskId: input.taskId,
186
+ reason: 'owner_behavior_examples_invalid',
187
+ nextAction: 'Evidence gate returned not_applicable — caller bug (channel is hard-required for attach).',
188
+ };
189
+ }
190
+ if (readiness.status === 'evidence_source_error') {
191
+ // PRI-980 review P2-1 (SPEC §6.2 case 3): a trajectory-store I/O fault
192
+ // is not an Owner evidence fault — the refusal carries the storage
193
+ // reason verbatim and mutates nothing (attach is zero-mutation until
194
+ // its CAS anyway; cli-5).
195
+ return {
196
+ status: 'refused',
197
+ taskId: input.taskId,
198
+ reason: readiness.reason,
199
+ detail: readiness.detail,
200
+ nextAction: readiness.nextAction,
201
+ };
202
+ }
203
+ return {
204
+ status: 'refused',
205
+ taskId: input.taskId,
206
+ reason: readiness.reasonCode,
207
+ detail: readiness.detail,
208
+ nextAction: readiness.nextAction,
209
+ };
210
+ }
211
+ const previousRevision = piTask.ownerEvidenceSelection?.revision ?? 0;
212
+ const revision = previousRevision + 1;
213
+ const ownerOperation = ownerOperationLabel(input.decidedBy);
214
+ const attachedAt = new Date().toISOString();
215
+ const persisted = {
216
+ ...input.selection,
217
+ revision,
218
+ contentDigest: readiness.evidenceHash,
219
+ ownerOperation,
220
+ attachedAt,
221
+ };
222
+ if (input.mode === 'dry_run') {
223
+ return {
224
+ status: 'dry_run',
225
+ taskId: input.taskId,
226
+ painId: persisted.sourcePainId,
227
+ wouldPersist: {
228
+ revision,
229
+ contentDigest: readiness.evidenceHash,
230
+ ownerOperation,
231
+ attachedAt,
232
+ },
233
+ nextAction: 'Dry-run only — nothing was written. Re-run with --confirm to attach this selection (the task stays needs_human_review until evidence resume --confirm).',
234
+ };
235
+ }
236
+ // Narrow CAS: single conditional UPDATE on diagnostic_json (status untouched
237
+ // — attach must not unblock). A concurrent writer between our read and write
238
+ // makes us lose the CAS and refuse observably instead of clobbering.
239
+ const merged = mergePITaskMetadata(piTask, { ownerEvidenceSelection: persisted });
240
+ const updated = await stateManager.updateTaskIfDiagnosticJsonUnchanged(input.taskId, readDiagnosticJson(task), { diagnosticJson: createPITaskDiagnosticJson(merged) }, { expectedStatus: 'needs_human_review' });
241
+ if (!updated) {
242
+ return {
243
+ status: 'conflict',
244
+ taskId: input.taskId,
245
+ nextAction: 'The task row changed concurrently; re-run evidence list / attach (the CAS refused this write — nothing was mutated).',
246
+ };
247
+ }
248
+ // Read-back invariant (EP-07): only a durable effect may be reported.
249
+ const reread = await stateManager.getTask(input.taskId);
250
+ const rereadPi = reread ? hydrateOrNull(reread) : null;
251
+ if (reread === null || rereadPi === null || rereadPi.ownerEvidenceSelection?.revision !== revision
252
+ || rereadPi.ownerEvidenceSelection.contentDigest !== readiness.evidenceHash) {
253
+ throw new PDRuntimeError('storage_unavailable', `owner evidence attach not durable for task ${input.taskId} (read-back revision/digest mismatch)`);
254
+ }
255
+ appendOwnerEvidenceAction(input.workspaceDir, {
256
+ taskId: input.taskId,
257
+ action: 'attach_evidence',
258
+ painId: persisted.sourcePainId,
259
+ revision,
260
+ contentDigest: readiness.evidenceHash,
261
+ operator: input.decidedBy ?? null,
262
+ });
263
+ input.eventEmitter.emitTelemetry({
264
+ eventType: 'artificer_owner_evidence_attached',
265
+ traceId: input.taskId,
266
+ timestamp: attachedAt,
267
+ sessionId: input.owner,
268
+ agentId: 'artificer',
269
+ payload: {
270
+ // FR-08 run-correlation block (PRI-984): attach never leases an NHR
271
+ // task → persistentRunId/adapterRunId are semantically absent.
272
+ ...buildArtificerRunCorrelation({
273
+ taskId: input.taskId,
274
+ attemptNumber: task.attemptCount, // attach never touches the budget — real value at write time
275
+ executionMode: 'recovery',
276
+ reasonCode: 'attached', // no failure reason code exists → the operation status
277
+ workspaceDir: input.workspaceDir,
278
+ evidenceDigest: readiness.evidenceHash,
279
+ }),
280
+ painId: persisted.sourcePainId,
281
+ revision,
282
+ contentDigest: readiness.evidenceHash,
283
+ ownerOperation,
284
+ taskStillNeedsHumanReview: true,
285
+ },
286
+ });
287
+ return {
288
+ status: 'attached',
289
+ taskId: input.taskId,
290
+ revision,
291
+ contentDigest: readiness.evidenceHash,
292
+ ownerOperation,
293
+ attachedAt,
294
+ taskStillNeedsHumanReview: true,
295
+ nextAction: 'Selection attached (task still needs_human_review). Verify with evidence resume (dry-run), then execute: pd runtime internalization evidence resume --task <taskId> --confirm.',
296
+ };
297
+ }
298
+ /**
299
+ * FR-06 7/8: digest-verified, atomic, single-authority recovery.
300
+ *
301
+ * Sequence: NHR + evidence-code gate → stored selection present → re-assemble
302
+ * through the shared readiness judgment → digest comparison (mismatch ⇒
303
+ * `owner_behavior_examples_stale`, missing digest ⇒ `invalid`) → ONE
304
+ * conditional authority reset via `ownerRetryNeedsHumanReviewTask` (CAS
305
+ * option; loser gets `conflict`). Run history / audit records are never
306
+ * deleted; the attempt budget reset is explicit and audited (see header).
307
+ */
308
+ export async function resumeOwnerEvidenceTask(stateManager, input) {
309
+ const loaded = await loadEvidenceTask(stateManager, input.taskId);
310
+ if (loaded.ok === false)
311
+ return loaded.refusal;
312
+ const { task, piTask } = loaded;
313
+ const previousAttemptCount = task.attemptCount;
314
+ const selection = piTask.ownerEvidenceSelection;
315
+ if (selection === undefined) {
316
+ return {
317
+ status: 'refused',
318
+ taskId: input.taskId,
319
+ reason: 'owner_behavior_examples_required',
320
+ nextAction: 'No evidence selection is attached yet; run evidence attach (dry-run by default) first.',
321
+ };
322
+ }
323
+ const canonicalPainId = await resolveArtificerCanonicalPainId(input.taskId, (id) => stateManager.getTask(id));
324
+ if (canonicalPainId === null || canonicalPainId !== selection.sourcePainId) {
325
+ return {
326
+ status: 'refused',
327
+ taskId: input.taskId,
328
+ reason: 'owner_behavior_examples_scope_mismatch',
329
+ nextAction: 'Owner evidence does not match the canonical task Pain; re-attach evidence for this task lineage.',
330
+ };
331
+ }
332
+ const readiness = assessEvidenceReadiness({
333
+ channelRequiresOwnerEvidence: true,
334
+ ownerSelection: selection,
335
+ assemblePack: () => input.assemble.assemble(selection),
336
+ });
337
+ if (readiness.status !== 'ready') {
338
+ if (readiness.status === 'owner_evidence_required' || readiness.status === 'not_applicable') {
339
+ return {
340
+ status: 'refused',
341
+ taskId: input.taskId,
342
+ reason: 'owner_behavior_examples_invalid',
343
+ nextAction: 'Stored selection is unusable; re-attach with evidence attach --confirm.',
344
+ };
345
+ }
346
+ if (readiness.status === 'evidence_source_error') {
347
+ // PRI-980 review P2-1 (SPEC §6.2 case 3): a storage fault during the
348
+ // re-assembly must not read as a stale/invalid Owner selection. The
349
+ // task STAYS needs_human_review with its existing owner-fault reason
350
+ // untouched — the refusal reports the storage reason so the operator
351
+ // can retry when the store recovers.
352
+ return {
353
+ status: 'refused',
354
+ taskId: input.taskId,
355
+ reason: readiness.reason,
356
+ detail: readiness.detail,
357
+ nextAction: readiness.nextAction,
358
+ };
359
+ }
360
+ return {
361
+ status: 'refused',
362
+ taskId: input.taskId,
363
+ reason: readiness.reasonCode,
364
+ detail: readiness.detail,
365
+ nextAction: readiness.nextAction,
366
+ };
367
+ }
368
+ if (selection.contentDigest === undefined) {
369
+ return {
370
+ status: 'refused',
371
+ taskId: input.taskId,
372
+ reason: 'owner_behavior_examples_invalid',
373
+ detail: 'stored selection carries no contentDigest (legacy pre-B1 record); resume cannot verify it',
374
+ nextAction: 'Re-attach the selection with evidence attach --confirm (this upgrades it to a digest-verified revision), then resume.',
375
+ };
376
+ }
377
+ if (readiness.evidenceHash !== selection.contentDigest) {
378
+ return {
379
+ status: 'refused',
380
+ taskId: input.taskId,
381
+ reason: 'owner_behavior_examples_stale',
382
+ detail: `re-assembled digest ${readiness.evidenceHash} != stored ${selection.contentDigest}`,
383
+ nextAction: 'Evidence content changed since attach; re-attach fresh examples with evidence attach --confirm, then resume.',
384
+ };
385
+ }
386
+ if (input.mode === 'dry_run') {
387
+ return {
388
+ status: 'dry_run',
389
+ taskId: input.taskId,
390
+ reasonCode: 'owner_behavior_examples_verified',
391
+ previousAttemptCount,
392
+ revision: selection.revision ?? 0,
393
+ contentDigest: selection.contentDigest,
394
+ painId: selection.sourcePainId,
395
+ nextAction: 'Digest verified — nothing was written. Re-run with --confirm to atomically requeue this task (attempt budget resets; the reset is audited with previousAttemptCount).',
396
+ };
397
+ }
398
+ // Single recovery authority (owner-retry.ts) with the B1 CAS precondition:
399
+ // at most one concurrent resume can win (T06); the loser gets `conflict`
400
+ // with the row untouched.
401
+ const retryOutcome = await ownerRetryNeedsHumanReviewTask(stateManager, input.taskId, {
402
+ expectedDiagnosticJson: readDiagnosticJson(task),
403
+ });
404
+ if (retryOutcome.status === 'conflict') {
405
+ return {
406
+ status: 'conflict',
407
+ taskId: input.taskId,
408
+ nextAction: 'Another writer changed the task concurrently (possible parallel resume); inspect status and re-run evidence resume if still appropriate.',
409
+ };
410
+ }
411
+ if (retryOutcome.status === 'rejected') {
412
+ return {
413
+ status: 'refused',
414
+ taskId: input.taskId,
415
+ reason: retryOutcome.reason,
416
+ nextAction: 'This task awaits an Owner decision (governance focus) — recover is not a governance exit.',
417
+ };
418
+ }
419
+ if (retryOutcome.status === 'metadata_invalid') {
420
+ return {
421
+ status: 'refused',
422
+ taskId: input.taskId,
423
+ reason: 'metadata_invalid',
424
+ nextAction: 'Task metadata failed PI hydration mid-resume; inspect pd runtime internalization integrity --json.',
425
+ };
426
+ }
427
+ if (retryOutcome.status !== 'requeued') {
428
+ // not_found / skipped: state moved between our read and the authority.
429
+ return {
430
+ status: 'conflict',
431
+ taskId: input.taskId,
432
+ nextAction: `Task state changed concurrently (authority outcome: ${retryOutcome.status}); inspect with evidence list and re-run if appropriate.`,
433
+ };
434
+ }
435
+ appendOwnerEvidenceAction(input.workspaceDir, {
436
+ taskId: input.taskId,
437
+ action: 'resume_evidence',
438
+ painId: selection.sourcePainId,
439
+ revision: selection.revision ?? 0,
440
+ contentDigest: selection.contentDigest,
441
+ previousAttemptCount,
442
+ operator: input.decidedBy ?? null,
443
+ });
444
+ const resumedAt = new Date().toISOString();
445
+ input.eventEmitter.emitTelemetry({
446
+ eventType: 'artificer_owner_evidence_resumed',
447
+ traceId: input.taskId,
448
+ timestamp: resumedAt,
449
+ sessionId: input.owner,
450
+ agentId: 'artificer',
451
+ payload: {
452
+ // FR-08 run-correlation block (PRI-984): the resume requeues to
453
+ // pending; the next attempt's run row is minted by the NEXT lease
454
+ // (deterministic `run_<taskId>_<max+1>`), so persistentRunId stays
455
+ // absent here and the correlation joins through
456
+ // (taskId, attemptNumber) — proven by the recovery T10 test.
457
+ ...buildArtificerRunCorrelation({
458
+ taskId: input.taskId,
459
+ // PRI-984/F-1 wording: this is the WRITE-TIME value the authority
460
+ // reset landed (attemptCount=0). It is NOT "a new budget start" — the
461
+ // NEXT lease renumbers attempt_count from run history
462
+ // (lease-manager.ts, T10 pins the renumbered value). The correlation
463
+ // join keys on this write-time value.
464
+ attemptNumber: 0,
465
+ executionMode: 'recovery',
466
+ reasonCode: 'owner_behavior_examples_verified',
467
+ workspaceDir: input.workspaceDir,
468
+ evidenceDigest: selection.contentDigest,
469
+ }),
470
+ painId: selection.sourcePainId,
471
+ revision: selection.revision ?? 0,
472
+ contentDigest: selection.contentDigest,
473
+ previousAttemptCount,
474
+ ownerOperation: input.decidedBy !== undefined && input.decidedBy.trim() !== '' ? `cli:resume:${input.decidedBy.trim()}` : 'cli:resume',
475
+ },
476
+ });
477
+ return {
478
+ status: 'resumed',
479
+ taskId: input.taskId,
480
+ previousStatus: 'needs_human_review',
481
+ newStatus: 'pending',
482
+ previousAttemptCount,
483
+ revision: selection.revision ?? 0,
484
+ contentDigest: selection.contentDigest,
485
+ nextAction: 'Task requeued with its full history; the evidence-aware auto-consumer picks up Code Rule tasks. run-once is not an evidence-capable execution entry. The attempt budget reset is audited.',
486
+ };
487
+ }
488
+ //# sourceMappingURL=owner-evidence-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-evidence-recovery.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/owner-evidence-recovery.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,29 @@ export type OwnerRetryOutcome = {
42
42
  previousStatus: string;
43
43
  reason: 'owner_decision_required';
44
44
  nextAction: 'open_governance_focus';
45
+ }
46
+ /**
47
+ * PRI-983 (SPEC-PD-IAER-001 FR-06/T06): only with `options.expectedDiagnosticJson`
48
+ * — the CAS precondition was lost to a concurrent writer (another resume /
49
+ * metadata mutation landed between this caller's read and write). The task
50
+ * row is untouched; the caller must re-read and re-evaluate. Never returned
51
+ * by the legacy two-argument call shape.
52
+ */
53
+ | {
54
+ status: 'conflict';
55
+ taskKind: string;
56
+ previousStatus: string;
45
57
  };
58
+ export interface OwnerRetryOptions {
59
+ /**
60
+ * PRI-983: optional CAS precondition — apply the authority reset ONLY while
61
+ * the task's diagnostic_json is still byte-equal to this value (the caller's
62
+ * read). Absent (the existing two-argument call shape used by
63
+ * `pd runtime internalization retry` and the Console recover endpoint)
64
+ * keeps the exact historical unconditional-write semantics.
65
+ */
66
+ readonly expectedDiagnosticJson?: string | null;
67
+ }
46
68
  /**
47
69
  * 对单个 needs_human_review 任务执行 Owner authority reset(→ pending)。
48
70
  *
@@ -57,5 +79,5 @@ export type OwnerRetryOutcome = {
57
79
  * 保留 revisionCount / revisionCauseId / rolloutRevisionPayload / repairPayload
58
80
  * / lineage —— revision budget 证据不动。
59
81
  */
60
- export declare function ownerRetryNeedsHumanReviewTask(stateManager: RuntimeStateManager, taskId: string): Promise<OwnerRetryOutcome>;
82
+ export declare function ownerRetryNeedsHumanReviewTask(stateManager: RuntimeStateManager, taskId: string, options?: OwnerRetryOptions): Promise<OwnerRetryOutcome>;
61
83
  //# sourceMappingURL=owner-retry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"owner-retry.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/owner-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAS7E,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE;AAClE;;;;GAIG;GACD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAC;IAAC,UAAU,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAE7I;;;;;;;;;;;;;GAaG;AACH,wBAAsB,8BAA8B,CAClD,YAAY,EAAE,mBAAmB,EACjC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CA4D5B"}
1
+ {"version":3,"file":"owner-retry.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/owner-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAS7E,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE;AAClE;;;;GAIG;GACD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAC;IAAC,UAAU,EAAE,uBAAuB,CAAA;CAAE;AAC1I;;;;;;GAMG;GACD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,8BAA8B,CAClD,YAAY,EAAE,mBAAmB,EACjC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAgF5B"}
@@ -15,7 +15,7 @@ import { factStoreFromStateManager } from './owner-resolution-service.js';
15
15
  * 保留 revisionCount / revisionCauseId / rolloutRevisionPayload / repairPayload
16
16
  * / lineage —— revision budget 证据不动。
17
17
  */
18
- export async function ownerRetryNeedsHumanReviewTask(stateManager, taskId) {
18
+ export async function ownerRetryNeedsHumanReviewTask(stateManager, taskId, options) {
19
19
  const task = await stateManager.getTask(taskId);
20
20
  if (!task) {
21
21
  return { status: 'not_found' };
@@ -60,11 +60,27 @@ export async function ownerRetryNeedsHumanReviewTask(stateManager, taskId) {
60
60
  runnerDecision: undefined,
61
61
  completionIntent: undefined,
62
62
  });
63
- await stateManager.updateTask(taskId, {
63
+ const patch = {
64
64
  status: 'pending',
65
65
  attemptCount: 0,
66
66
  diagnosticJson: createPITaskDiagnosticJson(merged),
67
- });
67
+ };
68
+ if (options?.expectedDiagnosticJson !== undefined) {
69
+ // PRI-983 CAS variant: single conditional UPDATE — the authority reset
70
+ // lands only while the task row is still byte-identical to the caller's
71
+ // read AND still sits in needs_human_review (SPEC §6.3: 前置状态 + 版本
72
+ // 检查). The status precondition is what arbitrates two concurrent
73
+ // resumes when the reset is content-neutral (an artificer NHR task has no
74
+ // runnerDecision/completionIntent to clear): the first writer moves the
75
+ // status to pending, the second's precondition fails → `conflict`.
76
+ const updated = await stateManager.updateTaskIfDiagnosticJsonUnchanged(taskId, options.expectedDiagnosticJson, patch, { expectedStatus: 'needs_human_review' });
77
+ if (!updated) {
78
+ return { status: 'conflict', taskKind: task.taskKind, previousStatus: task.status };
79
+ }
80
+ }
81
+ else {
82
+ await stateManager.updateTask(taskId, patch);
83
+ }
68
84
  return {
69
85
  status: 'requeued',
70
86
  taskKind: task.taskKind,
@@ -1 +1 @@
1
- {"version":3,"file":"owner-retry.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/owner-retry.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5G,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,yCAAyC,GAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAc1E;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,YAAiC,EACjC,MAAc;IAEd,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;QACzC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,cAAc,EAAE,IAAI,CAAC,MAAM;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,qDAAqD;QACrD,+CAA+C;QAC/C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjE,CAAC;IAED,4DAA4D;IAC5D,qEAAqE;IACrE,yCAAyC;IACzC,gEAAgE;IAChE,uDAAuD;IACvD,oDAAoD;IACpD,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/F,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACxD,yDAAyD;QACzD,0DAA0D;QAC1D,iDAAiD;QACjD,6BAA6B;QAC7B,IAAI,UAAU,CAAC,QAAQ,IAAI,yCAAyC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACjF,OAAO;gBACL,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,cAAc,EAAE,IAAI,CAAC,MAAM;gBAC3B,MAAM,EAAE,yBAAyB;gBACjC,UAAU,EAAE,uBAAuB;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE;QACzC,cAAc,EAAE,SAAS;QACzB,gBAAgB,EAAE,SAAS;KAC5B,CAAC,CAAC;IACH,MAAM,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE;QACpC,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,0BAA0B,CAAC,MAAM,CAAC;KACnD,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,cAAc,EAAE,IAAI,CAAC,MAAM;KAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"owner-retry.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/owner-retry.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import type { TaskRecord } from '../task-status.js';
17
17
  import type { RepairPayload, RunnerDecision, RolloutRevisionPayload, RunnerCompletionIntent, HumanReviewContext, OwnerResolutionRecord } from './pitask-metadata.js';
18
+ import type { OwnerEvidenceSelection } from './evidence-readiness.js';
18
19
  /**
19
20
  * The 4 channels through which principle internalization can occur.
20
21
  *
@@ -141,6 +142,13 @@ export interface PITaskRecord extends TaskRecord {
141
142
  humanReviewContext?: HumanReviewContext;
142
143
  /** PRI-629: task-scoped Owner resolution log (append-only; not a state source). */
143
144
  ownerResolutions?: readonly OwnerResolutionRecord[];
145
+ /**
146
+ * PRI-982 (SPEC-PD-IAER-001 FR-03): Owner-labelled evidence selection —
147
+ * written only by the authorized Owner operation (never fabricated by an
148
+ * internal agent); ABSENT = evidence not yet provided. The single shape
149
+ * authority is `validateOwnerEvidenceSelectionShape` (evidence-readiness.ts).
150
+ */
151
+ ownerEvidenceSelection?: OwnerEvidenceSelection;
144
152
  }
145
153
  /**
146
154
  * All valid peer runner kinds. Useful for validation and iteration.
@@ -1 +1 @@
1
- {"version":3,"file":"peer-runner-contracts.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/peer-runner-contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peer-runner-contracts.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/peer-runner-contracts.ts"],"names":[],"mappings":"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"}