@dsh-enhanced/assistant-goals 0.1.30

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 (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -0
  3. package/cordis.patch.yml +3 -0
  4. package/lib/budget-store.d.ts +73 -0
  5. package/lib/budget-store.d.ts.map +1 -0
  6. package/lib/budget-store.js +345 -0
  7. package/lib/budget-store.js.map +1 -0
  8. package/lib/budget.d.ts +78 -0
  9. package/lib/budget.d.ts.map +1 -0
  10. package/lib/budget.js +344 -0
  11. package/lib/budget.js.map +1 -0
  12. package/lib/dependency.d.ts +11 -0
  13. package/lib/dependency.d.ts.map +1 -0
  14. package/lib/dependency.js +34 -0
  15. package/lib/dependency.js.map +1 -0
  16. package/lib/event-wait-store.d.ts +56 -0
  17. package/lib/event-wait-store.d.ts.map +1 -0
  18. package/lib/event-wait-store.js +189 -0
  19. package/lib/event-wait-store.js.map +1 -0
  20. package/lib/event-wait.d.ts +47 -0
  21. package/lib/event-wait.d.ts.map +1 -0
  22. package/lib/event-wait.js +372 -0
  23. package/lib/event-wait.js.map +1 -0
  24. package/lib/execution-store.d.ts +23 -0
  25. package/lib/execution-store.d.ts.map +1 -0
  26. package/lib/execution-store.js +207 -0
  27. package/lib/execution-store.js.map +1 -0
  28. package/lib/execution.d.ts +49 -0
  29. package/lib/execution.d.ts.map +1 -0
  30. package/lib/execution.js +438 -0
  31. package/lib/execution.js.map +1 -0
  32. package/lib/feedback.d.ts +63 -0
  33. package/lib/feedback.d.ts.map +1 -0
  34. package/lib/feedback.js +134 -0
  35. package/lib/feedback.js.map +1 -0
  36. package/lib/index.d.ts +27 -0
  37. package/lib/index.d.ts.map +1 -0
  38. package/lib/index.js +9 -0
  39. package/lib/index.js.map +1 -0
  40. package/lib/outcome-store.d.ts +47 -0
  41. package/lib/outcome-store.d.ts.map +1 -0
  42. package/lib/outcome-store.js +271 -0
  43. package/lib/outcome-store.js.map +1 -0
  44. package/lib/outcome.d.ts +77 -0
  45. package/lib/outcome.d.ts.map +1 -0
  46. package/lib/outcome.js +417 -0
  47. package/lib/outcome.js.map +1 -0
  48. package/lib/service.d.ts +363 -0
  49. package/lib/service.d.ts.map +1 -0
  50. package/lib/service.js +1839 -0
  51. package/lib/service.js.map +1 -0
  52. package/lib/store.d.ts +21 -0
  53. package/lib/store.d.ts.map +1 -0
  54. package/lib/store.js +577 -0
  55. package/lib/store.js.map +1 -0
  56. package/lib/strategy-feedback.d.ts +29 -0
  57. package/lib/strategy-feedback.d.ts.map +1 -0
  58. package/lib/strategy-feedback.js +53 -0
  59. package/lib/strategy-feedback.js.map +1 -0
  60. package/lib/strategy-identity.d.ts +11 -0
  61. package/lib/strategy-identity.d.ts.map +1 -0
  62. package/lib/strategy-identity.js +10 -0
  63. package/lib/strategy-identity.js.map +1 -0
  64. package/lib/strategy-store.d.ts +76 -0
  65. package/lib/strategy-store.d.ts.map +1 -0
  66. package/lib/strategy-store.js +277 -0
  67. package/lib/strategy-store.js.map +1 -0
  68. package/lib/strategy.d.ts +56 -0
  69. package/lib/strategy.d.ts.map +1 -0
  70. package/lib/strategy.js +478 -0
  71. package/lib/strategy.js.map +1 -0
  72. package/lib/tools.d.ts +4 -0
  73. package/lib/tools.d.ts.map +1 -0
  74. package/lib/tools.js +130 -0
  75. package/lib/tools.js.map +1 -0
  76. package/lib/types.d.ts +285 -0
  77. package/lib/types.d.ts.map +1 -0
  78. package/lib/types.js +10 -0
  79. package/lib/types.js.map +1 -0
  80. package/lib/verified-artifact.d.ts +72 -0
  81. package/lib/verified-artifact.d.ts.map +1 -0
  82. package/lib/verified-artifact.js +142 -0
  83. package/lib/verified-artifact.js.map +1 -0
  84. package/lib/verified-workflow.d.ts +120 -0
  85. package/lib/verified-workflow.d.ts.map +1 -0
  86. package/lib/verified-workflow.js +253 -0
  87. package/lib/verified-workflow.js.map +1 -0
  88. package/lib/version.d.ts +2 -0
  89. package/lib/version.d.ts.map +1 -0
  90. package/lib/version.js +2 -0
  91. package/lib/version.js.map +1 -0
  92. package/lib/wake-store.d.ts +38 -0
  93. package/lib/wake-store.d.ts.map +1 -0
  94. package/lib/wake-store.js +177 -0
  95. package/lib/wake-store.js.map +1 -0
  96. package/lib/wake.d.ts +45 -0
  97. package/lib/wake.d.ts.map +1 -0
  98. package/lib/wake.js +327 -0
  99. package/lib/wake.js.map +1 -0
  100. package/package.json +143 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { acceptanceCanonicalJson, validateTaskAcceptanceContract, validateTaskVerificationReceipt, } from '@dsh-enhanced/task-acceptance-contract';
2
+ const MAX_RUNS = 50;
3
+ const MAX_HISTORY = 3;
4
+ const MAX_EVIDENCE = 3;
5
+ const MAX_TEXT = 256;
6
+ function freeze(value) {
7
+ if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
8
+ for (const key of Reflect.ownKeys(value))
9
+ freeze(value[key]);
10
+ Object.freeze(value);
11
+ }
12
+ return value;
13
+ }
14
+ function excerpt(value) {
15
+ const text = typeof value === 'string' ? value : '';
16
+ return freeze({ excerpt: text.slice(0, MAX_TEXT), truncated: text.length > MAX_TEXT });
17
+ }
18
+ function same(left, right) {
19
+ try {
20
+ return acceptanceCanonicalJson(left) === acceptanceCanonicalJson(right);
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ function unavailable(run, status) {
27
+ const execution = run.execution === undefined ? null : freeze({ ...run.execution, executionRef: run.intent.runId });
28
+ return freeze({ runId: run.intent.runId, definitionVersion: run.intent.task.goal.definitionVersion, status, execution, criteria: freeze([]), criteriaTruncated: false });
29
+ }
30
+ function criteria(contract, receipt) {
31
+ const values = receipt.results.slice(0, 32).map(result => {
32
+ const criterion = contract.criteria.find(item => item.id === result.criterionId);
33
+ const definition = criterion.kind === 'process-behavior' || criterion.kind === 'isolated-process-behavior' || criterion.kind === 'document-citations'
34
+ ? { kind: criterion.kind, artifactPath: criterion.artifactPath,
35
+ ...(criterion.kind === 'document-citations' ? { requiredText: freeze(criterion.requiredText.slice(0, 3).map(excerpt)), requiredTextTruncated: criterion.requiredText.length > 3 } : {}) }
36
+ : { kind: criterion.kind, objectId: criterion.objectId };
37
+ const boundedReason = excerpt(result.reason);
38
+ return freeze({
39
+ id: result.criterionId, status: result.status, reason: boundedReason.excerpt, reasonTruncated: boundedReason.truncated,
40
+ evidence: freeze(result.evidence.slice(0, MAX_EVIDENCE).map(item => {
41
+ const bounded = excerpt(item.ref);
42
+ return freeze({ kind: item.kind, ref: bounded.excerpt, truncated: bounded.truncated });
43
+ })),
44
+ definition: freeze(definition), evidenceTruncated: result.evidence.length > MAX_EVIDENCE,
45
+ });
46
+ });
47
+ return freeze({ values: freeze(values), truncated: receipt.results.length > 32 });
48
+ }
49
+ function assessed(run, lookup, now) {
50
+ // The private execution ledger itself establishes uncertainty. Losing the
51
+ // Verifier must never hide an unreconciled dispatch or make replay look safe.
52
+ if (run.execution === undefined)
53
+ return unavailable(run, run.intent.admission.expiresAt <= now ? 'expired' : 'pending');
54
+ if (!run.execution.quiescent || run.execution.status === 'unknown')
55
+ return unavailable(run, 'unknown');
56
+ if (run.acceptance === undefined || lookup === undefined)
57
+ return unavailable(run, 'unavailable');
58
+ let raw;
59
+ try {
60
+ raw = lookup(run.acceptance.contractId);
61
+ }
62
+ catch {
63
+ return unavailable(run, 'unavailable');
64
+ }
65
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
66
+ return unavailable(run, 'unavailable');
67
+ const item = raw;
68
+ try {
69
+ const contract = validateTaskAcceptanceContract(item.contract);
70
+ const execution = item.execution;
71
+ if ((contract.protocol !== 'task-acceptance/v2' && contract.protocol !== 'task-acceptance/v4') || contract.id !== run.acceptance.contractId
72
+ || contract.digest !== run.acceptance.contractDigest || !same(contract.task, run.intent.task)
73
+ || contract.scope.workspace !== run.intent.scope.workspace || contract.scope.preset !== run.intent.scope.preset
74
+ || contract.owner.principalRecordId !== run.intent.scope.principalRecordId || contract.owner.principalVersion !== run.intent.scope.principalVersion
75
+ || contract.objective !== run.intent.objective || contract.issuedAt < run.intent.admission.issuedAt
76
+ || run.dispatchedAt === undefined || contract.issuedAt > run.dispatchedAt || run.dispatchedAt >= run.intent.admission.expiresAt)
77
+ return unavailable(run, 'invalid');
78
+ if (run.execution.completedAt < run.dispatchedAt || run.execution.completedAt >= run.intent.admission.expiresAt || run.execution.completedAt > now)
79
+ return unavailable(run, 'invalid');
80
+ if (execution === null || typeof execution !== 'object') {
81
+ return unavailable(run, item.receipt === null || item.receipt === undefined
82
+ ? contract.expiresAt <= now ? 'expired' : 'pending' : 'invalid');
83
+ }
84
+ if (execution.status !== run.execution.status || execution.quiescent !== run.execution.quiescent
85
+ || execution.completedAt !== run.execution.completedAt || execution.executionRef !== run.intent.runId)
86
+ return unavailable(run, 'invalid');
87
+ const actual = freeze({ ...run.execution, executionRef: run.intent.runId });
88
+ if (item.receipt === null || item.receipt === undefined) {
89
+ return freeze({ runId: run.intent.runId, definitionVersion: run.intent.task.goal.definitionVersion, status: contract.expiresAt <= now ? 'expired' : 'pending', execution: actual, criteria: freeze([]), criteriaTruncated: false });
90
+ }
91
+ const receipt = validateTaskVerificationReceipt(contract, item.receipt);
92
+ if (receipt.startedAt < run.execution.completedAt || receipt.completedAt < receipt.startedAt || receipt.completedAt > now)
93
+ return unavailable(run, 'invalid');
94
+ const summarized = criteria(contract, receipt);
95
+ const verification = freeze({ contractId: contract.id, receiptId: receipt.id, verifiedAt: receipt.completedAt, validUntil: receipt.validUntil });
96
+ if (receipt.validUntil <= now)
97
+ return freeze({ runId: run.intent.runId, definitionVersion: run.intent.task.goal.definitionVersion, status: 'expired', execution: actual, criteria: summarized.values, criteriaTruncated: summarized.truncated, verification });
98
+ return freeze({ runId: run.intent.runId, definitionVersion: run.intent.task.goal.definitionVersion, status: receipt.objectiveStatus, execution: actual, criteria: summarized.values, criteriaTruncated: summarized.truncated, verification });
99
+ }
100
+ catch {
101
+ return unavailable(run, 'invalid');
102
+ }
103
+ }
104
+ /** Pure, bounded read-model. It never treats a checkpoint or one step as goal completion. */
105
+ export function buildGoalFeedback(record, runs, lookup, now) {
106
+ const considered = (Array.isArray(runs) ? runs : []).filter(run => run?.intent?.task?.goal?.id === record.id
107
+ && run.intent.scope.principalId === record.scope.principalId && run.intent.scope.principalRecordId === record.scope.principalRecordId
108
+ && run.intent.scope.principalVersion === record.scope.principalVersion && run.intent.scope.workspace === record.scope.workspace
109
+ && run.intent.scope.preset === record.scope.preset).slice(0, MAX_RUNS);
110
+ const entries = considered.map(run => assessed(run, lookup, now));
111
+ const current = entries.filter((_entry, index) => considered[index].intent.task.goal.id === record.id
112
+ && considered[index].intent.task.goal.definitionVersion === record.definition.version
113
+ && considered[index].intent.task.goal.definitionDigest === record.definition.digest);
114
+ const latest = current[0] ?? null;
115
+ const settled = current.find(entry => entry.status !== 'pending') ?? null;
116
+ const pending = latest?.status === 'pending' ? latest : null;
117
+ const unreconciled = entries.find(entry => entry.status === 'unknown' && entry.execution?.quiescent === false) ?? null;
118
+ const historical = freeze(entries.slice(0, MAX_HISTORY));
119
+ const hasOldDefinition = entries.some((_entry, index) => considered[index].intent.task.goal.definitionVersion !== record.definition.version
120
+ || considered[index].intent.task.goal.definitionDigest !== record.definition.digest);
121
+ const nextAction = unreconciled !== null ? 'reconcile-execution'
122
+ : latest?.status === 'unknown' ? 'gather-evidence'
123
+ : pending !== null ? 'await-verification'
124
+ : hasOldDefinition && settled === null ? 'plan-current-definition'
125
+ : settled?.status === 'not-achieved' ? 'revise-plan'
126
+ : settled?.status === 'achieved' ? 'review-remaining-criteria'
127
+ : settled?.status === 'unknown' ? 'gather-evidence'
128
+ : settled?.status === 'invalid' || settled?.status === 'unavailable' || settled?.status === 'expired' ? 'inspect-verification'
129
+ : 'plan-current-definition';
130
+ return freeze({ protocol: 'assistant-goals/feedback/v1', goalId: record.id, goalOutcome: 'unverified',
131
+ definition: freeze({ version: record.definition.version, digest: record.definition.digest, objective: excerpt(record.definition.objective) }),
132
+ verification: freeze({ current: settled, pending, history: historical }), nextAction });
133
+ }
134
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,wCAAwC,CAAA;AAG/C,MAAM,QAAQ,GAAG,EAAE,CAAA;AACnB,MAAM,WAAW,GAAG,CAAC,CAAA;AACrB,MAAM,YAAY,GAAG,CAAC,CAAA;AACtB,MAAM,QAAQ,GAAG,GAAG,CAAA;AAkCpB,SAAS,MAAM,CAAI,KAAQ;IACzB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,CAAE,KAAsC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC9F,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AACD,SAAS,OAAO,CAAC,KAAc;IAC7B,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IACnD,OAAO,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAA;AACxF,CAAC;AACD,SAAS,IAAI,CAAC,IAAa,EAAE,KAAc;IACzC,IAAI,CAAC;QAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,uBAAuB,CAAC,KAAK,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC;AACxG,CAAC;AACD,SAAS,WAAW,CAAC,GAAqB,EAAE,MAAkG;IAC5I,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;IACnH,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAA;AAC1K,CAAC;AACD,SAAS,QAAQ,CAAC,QAA2D,EAAE,OAA2D;IACxI,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAE,CAAA;QACjF,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,KAAK,kBAAkB,IAAI,SAAS,CAAC,IAAI,KAAK,2BAA2B,IAAI,SAAS,CAAC,IAAI,KAAK,oBAAoB;YACnJ,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY;gBAC5D,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,qBAAqB,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YAC3L,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAA;QAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5C,OAAO,MAAM,CAAC;YACZ,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC,SAAS;YACtH,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACjE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACjC,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;YACxF,CAAC,CAAC,CAAC;YACH,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY;SACzF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAA;AACnF,CAAC;AACD,SAAS,QAAQ,CAAC,GAAqB,EAAE,MAA6C,EAAE,GAAW;IACjG,0EAA0E;IAC1E,8EAA8E;IAC9E,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACvH,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IACtG,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAChG,IAAI,GAAY,CAAA;IAChB,IAAI,CAAC;QAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAAC,CAAC;IAChG,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IACzG,MAAM,IAAI,GAAG,GAAkC,CAAA;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAiH,CAAA;QACxI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,oBAAoB,IAAI,QAAQ,CAAC,QAAQ,KAAK,oBAAoB,CAAC,IAAI,QAAQ,CAAC,EAAE,KAAK,GAAG,CAAC,UAAU,CAAC,UAAU;eACtI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;eAC1F,QAAQ,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;eAC5G,QAAQ,CAAC,KAAK,CAAC,iBAAiB,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,QAAQ,CAAC,KAAK,CAAC,gBAAgB,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB;eAChJ,QAAQ,CAAC,SAAS,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ;eAChG,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS;YAAE,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QACrK,IAAI,GAAG,CAAC,SAAS,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,SAAS,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,WAAW,GAAG,GAAG;YAAE,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QACtL,IAAI,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACxD,OAAO,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBACzE,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,CAAC,SAAS;eAC3F,SAAS,CAAC,WAAW,KAAK,GAAG,CAAC,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,YAAY,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAC3I,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QAC3E,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAA;QACrO,CAAC;QACD,MAAM,OAAO,GAAG,+BAA+B,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACvE,IAAI,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,GAAG,GAAG;YAAE,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAC7J,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;QAChJ,IAAI,OAAO,CAAC,UAAU,IAAI,GAAG;YAAE,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAA;QAC9P,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAA;IAC/O,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IAAC,CAAC;AAChD,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,iBAAiB,CAC/B,MAAkB,EAClB,IAAiC,EACjC,MAA6C,EAC7C,GAAW;IAEX,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE;WACvG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,MAAM,CAAC,KAAK,CAAC,iBAAiB;WAClI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK,CAAC,SAAS;WAC5H,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;WACjG,UAAU,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,KAAK,MAAM,CAAC,UAAU,CAAC,OAAO;WACnF,UAAU,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACvF,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,IAAI,CAAA;IACzE,MAAM,OAAO,GAAG,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK,CAAC,IAAI,IAAI,CAAA;IACtH,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;IACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,KAAK,MAAM,CAAC,UAAU,CAAC,OAAO;WACvI,UAAU,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACvF,MAAM,UAAU,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,qBAAqB;QAC9D,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB;YAClD,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB;gBACvC,CAAC,CAAC,gBAAgB,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAyB;oBAChE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,aAAa;wBAClD,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,2BAA2B;4BAC5D,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB;gCACjD,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,EAAE,MAAM,KAAK,aAAa,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB;oCAClI,CAAC,CAAC,yBAAyB,CAAA;IACnC,OAAO,MAAM,CAAC,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,YAAY;QACnG,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7I,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;AAC3F,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import { AssistantGoalsService, Config } from './service.js';
3
+ import { version } from './version.js';
4
+ export declare const name = "dsh-enhanced-assistant-goals";
5
+ export { AssistantGoalsService, Config, version };
6
+ export { OwnerVerifiedWorkflowSourceError } from './verified-workflow.js';
7
+ export type { VerifiedWorkflowSource, VerifiedWorkflowSegment } from './verified-workflow.js';
8
+ export type { OwnerVerifiedArtifactsInput } from './verified-artifact.js';
9
+ export type * from './types.js';
10
+ export type { GoalBudgetConfig, GoalTokenBudgetConfig, GoalCallsBudgetConfig, GoalBudgetMeter, GoalBudgetFailure } from './budget.js';
11
+ export type { GoalBudgetLimits, GoalBudgetSnapshot } from './budget-store.js';
12
+ export type { GoalWakeConfig } from './wake.js';
13
+ export type { GoalEventWait, GoalEventWaitIntent, GoalEventSourceSnapshot } from './event-wait-store.js';
14
+ export type { GoalStrategyConfig, GoalStrategyInput, GoalStrategyResult } from './strategy.js';
15
+ export { validateGoalStrategyConfig } from './strategy.js';
16
+ export type { GoalBudgetRunUsage } from './budget-store.js';
17
+ export type { GoalStrategyAssessment, GoalStrategyHistory } from './strategy-feedback.js';
18
+ export type { GoalOutcomeAssessment, GoalOutcomeDefinition } from './outcome-store.js';
19
+ export type { StrategyChildDiagnostics, StrategyTerminationReason } from './strategy-store.js';
20
+ export declare function apply(ctx: Context, config?: Config): void;
21
+ declare const _default: {
22
+ name: string;
23
+ Config: import("@deepseek-ai/schemastery").default<Config>;
24
+ apply: typeof apply;
25
+ };
26
+ export default _default;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,eAAO,MAAM,IAAI,iCAAiC,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AACjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAA;AACzE,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAC7F,YAAY,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AACzE,mBAAmB,YAAY,CAAA;AAC/B,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrI,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC7E,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACxG,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACzF,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AACtF,YAAY,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC9F,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,IAAI,CAA2C;;;;;;AACzG,wBAAsC"}
package/lib/index.js ADDED
@@ -0,0 +1,9 @@
1
+ import { AssistantGoalsService, Config } from './service.js';
2
+ import { version } from './version.js';
3
+ export const name = 'dsh-enhanced-assistant-goals';
4
+ export { AssistantGoalsService, Config, version };
5
+ export { OwnerVerifiedWorkflowSourceError } from './verified-workflow.js';
6
+ export { validateGoalStrategyConfig } from './strategy.js';
7
+ export function apply(ctx, config = {}) { new AssistantGoalsService(ctx, config); }
8
+ export default { name, Config, apply };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,MAAM,CAAC,MAAM,IAAI,GAAG,8BAA8B,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AACjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAA;AASzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAK1D,MAAM,UAAU,KAAK,CAAC,GAAY,EAAE,SAAiB,EAAE,IAAU,IAAI,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA,CAAC,CAAC;AACzG,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,47 @@
1
+ import type { TaskAcceptanceContract } from '@dsh-enhanced/task-acceptance-contract';
2
+ import type { GoalDefinition, GoalScope } from './types.js';
3
+ /** The immutable acceptance policy for one semantic definition of a goal. */
4
+ export interface GoalOutcomeDefinition {
5
+ readonly scope: GoalScope;
6
+ readonly goalId: string;
7
+ readonly definition: GoalDefinition;
8
+ readonly sessionId: string;
9
+ readonly nativeGoalId: string;
10
+ readonly template: TaskAcceptanceContract;
11
+ }
12
+ export interface GoalOutcomeAssessment {
13
+ readonly definition: GoalOutcomeDefinition;
14
+ readonly contract: TaskAcceptanceContract;
15
+ readonly triggerRunId?: string;
16
+ readonly dispatchedAt?: number;
17
+ readonly execution?: {
18
+ readonly status: 'succeeded' | 'unknown';
19
+ readonly quiescent: boolean;
20
+ readonly completedAt: number;
21
+ };
22
+ }
23
+ /** A private durable ledger for whole-goal acceptance assessment. */
24
+ export declare class GoalOutcomeStore {
25
+ #private;
26
+ constructor(path: string);
27
+ bind(input: GoalOutcomeDefinition): GoalOutcomeDefinition;
28
+ getDefinition(scopeValue: GoalScope, goalId: string, definitionVersion: number): GoalOutcomeDefinition | undefined;
29
+ prepare(input: GoalOutcomeDefinition, contractValue: TaskAcceptanceContract, triggerRunId?: string): GoalOutcomeAssessment;
30
+ get(assessmentId: string): GoalOutcomeAssessment | undefined;
31
+ getByContract(contractId: string): GoalOutcomeAssessment | undefined;
32
+ getByTriggerRun(scopeValue: GoalScope, goalId: string, definitionVersion: number, triggerRunId: string): GoalOutcomeAssessment | undefined;
33
+ markDispatched(assessmentId: string, now: number): GoalOutcomeAssessment;
34
+ finish(assessmentId: string, execution: {
35
+ status: 'succeeded' | 'unknown';
36
+ quiescent: boolean;
37
+ completedAt: number;
38
+ }): GoalOutcomeAssessment;
39
+ /**
40
+ * An explicit owner/runtime recovery fence. Construction stays read-only so an
41
+ * inspector cannot turn a live assessment owned by another Host into unknown.
42
+ */
43
+ recoverIncomplete(now?: number): number;
44
+ list(scopeValue: GoalScope, goalId: string, limit?: number): readonly GoalOutcomeAssessment[];
45
+ close(): void;
46
+ }
47
+ //# sourceMappingURL=outcome-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome-store.d.ts","sourceRoot":"","sources":["../src/outcome-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAA;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAG3D,6EAA6E;AAC7E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAA;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;CAC7H;AA8DD,qEAAqE;AACrE,qBAAa,gBAAgB;;gBAEf,IAAI,EAAE,MAAM;IAoDxB,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB;IASzD,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAClH,OAAO,CAAC,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAoB1H,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAC5D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IACpE,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAK1I,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,qBAAqB;IAIxE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE;QAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,qBAAqB;IAI5I;;;OAGG;IACH,iBAAiB,CAAC,GAAG,SAAa,GAAG,MAAM;IAc3C,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,SAAS,qBAAqB,EAAE;IAKzF,KAAK,IAAI,IAAI;CACd"}
@@ -0,0 +1,271 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ import { acceptanceCanonicalJson, acceptanceDigest, validateTaskAcceptanceContract } from '@dsh-enhanced/task-acceptance-contract';
3
+ import { GoalStoreError } from './types.js';
4
+ import { prepareGoalStoreDatabaseFile } from './store.js';
5
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/u;
6
+ const DIGEST = /^[a-f0-9]{64}$/u;
7
+ function fail(code) { throw new GoalStoreError(code); }
8
+ const same = (left, right) => acceptanceDigest(left) === acceptanceDigest(right);
9
+ const integer = (value, min = 0) => typeof value === 'number' && Number.isSafeInteger(value) && value >= min;
10
+ const text = (value) => typeof value === 'string' && ID.test(value);
11
+ const plain = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
12
+ const exact = (value, keys) => plain(value) && Object.keys(value).length === keys.length && keys.every(key => Object.hasOwn(value, key));
13
+ const freeze = (value) => { if (value && typeof value === 'object' && !Object.isFrozen(value)) {
14
+ for (const child of Object.values(value))
15
+ freeze(child);
16
+ Object.freeze(value);
17
+ } ; return value; };
18
+ const parse = (value) => { try {
19
+ return JSON.parse(value);
20
+ }
21
+ catch {
22
+ return fail('schema');
23
+ } };
24
+ function scope(value) {
25
+ if (!exact(value, ['principalId', 'principalRecordId', 'principalVersion', 'workspace', 'preset']) || !text(value.principalId) || !text(value.principalRecordId)
26
+ || !integer(value.principalVersion, 1) || typeof value.workspace !== 'string' || !value.workspace.startsWith('/') || value.workspace.length > 4096 || !text(value.preset))
27
+ fail('invalid-input');
28
+ return freeze({ principalId: value.principalId, principalRecordId: value.principalRecordId, principalVersion: value.principalVersion, workspace: value.workspace, preset: value.preset });
29
+ }
30
+ function definition(value) {
31
+ if (!exact(value, ['version', 'digest', 'objective']) || !integer(value.version, 1) || typeof value.objective !== 'string' || value.objective.length < 1 || value.objective.length > 16_384 || typeof value.digest !== 'string' || !DIGEST.test(value.digest) || value.digest !== acceptanceDigest({ objective: value.objective }))
32
+ fail('invalid-input');
33
+ return freeze({ version: value.version, digest: value.digest, objective: value.objective });
34
+ }
35
+ function scopeKey(value) { return acceptanceCanonicalJson(scope(value)); }
36
+ /** Validate the full shared wire format before applying goal-specific fences. */
37
+ function contract(value, code = 'invalid-input') {
38
+ let parsed;
39
+ try {
40
+ parsed = validateTaskAcceptanceContract(value);
41
+ }
42
+ catch {
43
+ return fail(code);
44
+ }
45
+ if ((parsed.protocol !== 'task-acceptance/v3' && parsed.protocol !== 'task-acceptance/v4') || parsed.task.kind !== 'goal-outcome' || parsed.task.ref !== parsed.task.goal.assessmentId)
46
+ fail(code);
47
+ return parsed;
48
+ }
49
+ function outcomeDefinition(value) {
50
+ if (!exact(value, ['scope', 'goalId', 'definition', 'sessionId', 'nativeGoalId', 'template']) || !text(value.goalId) || !text(value.sessionId) || !text(value.nativeGoalId))
51
+ fail('invalid-input');
52
+ const result = { scope: scope(value.scope), goalId: value.goalId, definition: definition(value.definition), sessionId: value.sessionId, nativeGoalId: value.nativeGoalId, template: contract(value.template) };
53
+ validateContract(result, contract(result.template));
54
+ return freeze(result);
55
+ }
56
+ function validateContract(value, item) {
57
+ if (item.objective !== value.definition.objective || item.scope.workspace !== value.scope.workspace || item.scope.preset !== value.scope.preset
58
+ || item.owner.principalRecordId !== value.scope.principalRecordId || item.owner.principalVersion !== value.scope.principalVersion
59
+ || item.task.goal.id !== value.goalId || item.task.goal.definitionVersion !== value.definition.version || item.task.goal.definitionDigest !== value.definition.digest
60
+ || item.task.goal.sessionId !== value.sessionId || item.task.goal.nativeGoalId !== value.nativeGoalId)
61
+ fail('invalid-input');
62
+ }
63
+ function assessment(row, bound) {
64
+ const input = outcomeDefinition(parse(row.definition_json));
65
+ const item = contract(parse(row.contract_json), 'schema');
66
+ if (row.scope_key !== scopeKey(input.scope) || row.goal_id !== input.goalId || row.definition_version !== input.definition.version || !integer(row.created_seq, 1) || row.assessment_id !== item.task.ref || row.assessment_id !== item.task.goal.assessmentId || row.contract_id !== item.id || row.issued_at !== item.issuedAt || (bound !== undefined && !same(input, bound)))
67
+ fail('schema');
68
+ validateContract(input, item);
69
+ const template = contract(input.template, 'schema');
70
+ if (!same(item.criteria, template.criteria) || !same(item.profile, template.profile) || !same(item.bounds, template.bounds) || item.expiresAt !== template.expiresAt)
71
+ fail('schema');
72
+ const triggerRunId = row.trigger_run_id === null ? undefined : text(row.trigger_run_id) ? row.trigger_run_id : fail('schema');
73
+ const dispatchedAt = row.dispatched_at === null ? undefined : integer(row.dispatched_at) ? row.dispatched_at : fail('schema');
74
+ const execution = row.execution_json === null ? undefined : parse(row.execution_json);
75
+ if (dispatchedAt !== undefined && (dispatchedAt < item.issuedAt || dispatchedAt >= item.expiresAt))
76
+ fail('schema');
77
+ if (execution !== undefined && (!exact(execution, ['status', 'quiescent', 'completedAt']) || (execution.status !== 'succeeded' && execution.status !== 'unknown') || typeof execution.quiescent !== 'boolean' || (execution.status === 'unknown' && execution.quiescent) || !integer(execution.completedAt) || dispatchedAt === undefined || execution.completedAt < dispatchedAt || (execution.status === 'succeeded' && (!execution.quiescent || execution.completedAt >= item.expiresAt))))
78
+ fail('schema');
79
+ return freeze({ definition: input, contract: item, ...(triggerRunId === undefined ? {} : { triggerRunId }), ...(dispatchedAt === undefined ? {} : { dispatchedAt }), ...(execution === undefined ? {} : { execution: freeze(execution) }) });
80
+ }
81
+ /** A private durable ledger for whole-goal acceptance assessment. */
82
+ export class GoalOutcomeStore {
83
+ #database;
84
+ constructor(path) {
85
+ if (path !== ':memory:')
86
+ prepareGoalStoreDatabaseFile(path);
87
+ this.#database = new DatabaseSync(path, { enableForeignKeyConstraints: true });
88
+ try {
89
+ this.#database.exec('PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 250; PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL;');
90
+ const version = this.#database.prepare('PRAGMA user_version').get().user_version;
91
+ const tables = this.#database.prepare("SELECT name FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").all().map(row => row.name);
92
+ if (version === 0 && tables.length === 0)
93
+ this.#database.exec(`BEGIN IMMEDIATE;
94
+ CREATE TABLE goal_outcome_definitions (scope_key TEXT NOT NULL, goal_id TEXT NOT NULL, definition_version INTEGER NOT NULL, definition_json TEXT NOT NULL, PRIMARY KEY(scope_key, goal_id, definition_version)) STRICT, WITHOUT ROWID;
95
+ CREATE TABLE goal_outcome_assessments (assessment_id TEXT PRIMARY KEY, definition_json TEXT NOT NULL, contract_id TEXT NOT NULL UNIQUE, contract_json TEXT NOT NULL, trigger_run_id TEXT, dispatched_at INTEGER, execution_json TEXT, scope_key TEXT NOT NULL, goal_id TEXT NOT NULL, definition_version INTEGER NOT NULL, issued_at INTEGER NOT NULL, created_seq INTEGER NOT NULL, FOREIGN KEY(scope_key, goal_id, definition_version) REFERENCES goal_outcome_definitions(scope_key, goal_id, definition_version) ON DELETE RESTRICT) STRICT;
96
+ CREATE INDEX goal_outcome_scope_goal_issued ON goal_outcome_assessments(scope_key, goal_id, issued_at DESC, created_seq DESC);
97
+ CREATE UNIQUE INDEX goal_outcome_trigger_run ON goal_outcome_assessments(scope_key, goal_id, definition_version, trigger_run_id) WHERE trigger_run_id IS NOT NULL;
98
+ PRAGMA user_version = 2; COMMIT;`);
99
+ else if (version === 1 && same(tables, ['goal_outcome_assessments', 'goal_outcome_definitions'])) {
100
+ this.#database.exec('BEGIN IMMEDIATE;');
101
+ try {
102
+ this.#database.exec('ALTER TABLE goal_outcome_assessments ADD COLUMN created_seq INTEGER NOT NULL DEFAULT 0; UPDATE goal_outcome_assessments SET created_seq = rowid WHERE created_seq = 0; CREATE INDEX goal_outcome_scope_goal_issued_v2 ON goal_outcome_assessments(scope_key, goal_id, issued_at DESC, created_seq DESC); CREATE UNIQUE INDEX goal_outcome_trigger_run ON goal_outcome_assessments(scope_key, goal_id, definition_version, trigger_run_id) WHERE trigger_run_id IS NOT NULL; PRAGMA user_version = 2; COMMIT;');
103
+ }
104
+ catch (error) {
105
+ this.#database.exec('ROLLBACK');
106
+ throw error;
107
+ }
108
+ }
109
+ else if (version !== 2 || !same(tables, ['goal_outcome_assessments', 'goal_outcome_definitions']))
110
+ fail('schema');
111
+ const definitions = this.#database.prepare('PRAGMA table_info(goal_outcome_definitions)').all().map(row => row.name);
112
+ const assessments = this.#database.prepare('PRAGMA table_info(goal_outcome_assessments)').all().map(row => row.name);
113
+ const sql = this.#database.prepare("SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = 'goal_outcome_assessments'").get()?.sql;
114
+ if (!same(definitions, ['scope_key', 'goal_id', 'definition_version', 'definition_json']) || !same(assessments, ['assessment_id', 'definition_json', 'contract_id', 'contract_json', 'trigger_run_id', 'dispatched_at', 'execution_json', 'scope_key', 'goal_id', 'definition_version', 'issued_at', 'created_seq']) || !sql || !/\bSTRICT\b/u.test(sql))
115
+ fail('schema');
116
+ if (this.#database.prepare('PRAGMA quick_check').get().quick_check !== 'ok')
117
+ fail('schema');
118
+ for (const row of this.#database.prepare('SELECT scope_key, goal_id, definition_version, definition_json FROM goal_outcome_definitions').all())
119
+ this.#definition(row);
120
+ for (const row of this.#database.prepare('SELECT assessment_id, definition_json, contract_id, contract_json, trigger_run_id, dispatched_at, execution_json, scope_key, goal_id, definition_version, issued_at, created_seq FROM goal_outcome_assessments').all()) {
121
+ const found = assessment(row);
122
+ const bound = this.#getDefinition(found.definition.scope, found.definition.goalId, found.definition.definition.version);
123
+ if (bound === undefined)
124
+ fail('schema');
125
+ assessment(row, bound);
126
+ }
127
+ if (path !== ':memory:')
128
+ prepareGoalStoreDatabaseFile(path);
129
+ }
130
+ catch (error) {
131
+ this.#database.close();
132
+ throw error;
133
+ }
134
+ }
135
+ #write(sql, ...values) { try {
136
+ return Number(this.#database.prepare(sql).run(...values).changes);
137
+ }
138
+ catch {
139
+ fail('conflict');
140
+ } }
141
+ #definition(row) {
142
+ const value = outcomeDefinition(parse(row.definition_json));
143
+ if (row.scope_key !== scopeKey(value.scope) || row.goal_id !== value.goalId || row.definition_version !== value.definition.version)
144
+ fail('schema');
145
+ return value;
146
+ }
147
+ #getDefinition(scopeValue, goalId, definitionVersion) {
148
+ const row = this.#database.prepare('SELECT scope_key, goal_id, definition_version, definition_json FROM goal_outcome_definitions WHERE scope_key = ? AND goal_id = ? AND definition_version = ?').get(scopeKey(scopeValue), goalId, definitionVersion);
149
+ return row === undefined ? undefined : this.#definition(row);
150
+ }
151
+ #get(id) {
152
+ const row = this.#database.prepare('SELECT assessment_id, definition_json, contract_id, contract_json, trigger_run_id, dispatched_at, execution_json, scope_key, goal_id, definition_version, issued_at, created_seq FROM goal_outcome_assessments WHERE assessment_id = ?').get(id);
153
+ if (row === undefined)
154
+ return undefined;
155
+ const parsed = assessment(row);
156
+ const bound = this.#getDefinition(parsed.definition.scope, parsed.definition.goalId, parsed.definition.definition.version);
157
+ return bound === undefined ? fail('schema') : assessment(row, bound);
158
+ }
159
+ #transaction(operation) { this.#database.exec('BEGIN IMMEDIATE'); try {
160
+ const value = operation();
161
+ this.#database.exec('COMMIT');
162
+ return value;
163
+ }
164
+ catch (error) {
165
+ this.#database.exec('ROLLBACK');
166
+ throw error;
167
+ } }
168
+ bind(input) {
169
+ const value = outcomeDefinition(input);
170
+ return this.#transaction(() => {
171
+ const current = this.#getDefinition(value.scope, value.goalId, value.definition.version);
172
+ if (current !== undefined) {
173
+ if (!same(current, value))
174
+ fail('conflict');
175
+ return current;
176
+ }
177
+ this.#write('INSERT INTO goal_outcome_definitions(scope_key, goal_id, definition_version, definition_json) VALUES (?, ?, ?, ?)', scopeKey(value.scope), value.goalId, value.definition.version, JSON.stringify(value));
178
+ return this.#getDefinition(value.scope, value.goalId, value.definition.version);
179
+ });
180
+ }
181
+ getDefinition(scopeValue, goalId, definitionVersion) { if (!text(goalId) || !integer(definitionVersion, 1))
182
+ fail('invalid-input'); return this.#getDefinition(scope(scopeValue), goalId, definitionVersion); }
183
+ prepare(input, contractValue, triggerRunId) {
184
+ const value = outcomeDefinition(input);
185
+ const item = contract(contractValue);
186
+ if (triggerRunId !== undefined && !text(triggerRunId))
187
+ fail('invalid-input');
188
+ validateContract(value, item);
189
+ const template = contract(value.template);
190
+ if (!same(item.criteria, template.criteria) || !same(item.profile, template.profile) || !same(item.bounds, template.bounds) || item.expiresAt !== template.expiresAt)
191
+ fail('conflict');
192
+ return this.#transaction(() => {
193
+ const bound = this.#getDefinition(value.scope, value.goalId, value.definition.version);
194
+ if (bound === undefined || !same(bound, value))
195
+ fail('conflict');
196
+ const byTrigger = triggerRunId === undefined ? undefined : this.getByTriggerRun(value.scope, value.goalId, value.definition.version, triggerRunId);
197
+ if (byTrigger !== undefined && (!same(byTrigger.definition, value) || !same(byTrigger.contract, item)))
198
+ fail('conflict');
199
+ if (byTrigger !== undefined)
200
+ return byTrigger;
201
+ const current = this.#get(item.task.ref);
202
+ if (current !== undefined) {
203
+ if (!same(current.definition, value) || !same(current.contract, item) || current.triggerRunId !== triggerRunId)
204
+ fail('conflict');
205
+ return current;
206
+ }
207
+ const created = this.#database.prepare('SELECT COALESCE(MAX(created_seq), 0) + 1 AS value FROM goal_outcome_assessments').get().value;
208
+ if (!integer(created, 1))
209
+ fail('conflict');
210
+ this.#write('INSERT INTO goal_outcome_assessments(assessment_id, definition_json, contract_id, contract_json, trigger_run_id, scope_key, goal_id, definition_version, issued_at, created_seq) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', item.task.ref, JSON.stringify(value), item.id, JSON.stringify(item), triggerRunId ?? null, scopeKey(value.scope), value.goalId, value.definition.version, item.issuedAt, created);
211
+ return this.#get(item.task.ref);
212
+ });
213
+ }
214
+ get(assessmentId) { return text(assessmentId) ? this.#get(assessmentId) : fail('invalid-input'); }
215
+ getByContract(contractId) { if (!text(contractId))
216
+ fail('invalid-input'); const row = this.#database.prepare('SELECT assessment_id FROM goal_outcome_assessments WHERE contract_id = ?').get(contractId); return row === undefined ? undefined : this.#get(row.assessment_id); }
217
+ getByTriggerRun(scopeValue, goalId, definitionVersion, triggerRunId) {
218
+ if (!text(goalId) || !integer(definitionVersion, 1) || !text(triggerRunId))
219
+ fail('invalid-input');
220
+ const row = this.#database.prepare('SELECT assessment_id FROM goal_outcome_assessments WHERE scope_key = ? AND goal_id = ? AND definition_version = ? AND trigger_run_id = ?').get(scopeKey(scope(scopeValue)), goalId, definitionVersion, triggerRunId);
221
+ return row === undefined ? undefined : this.#get(row.assessment_id);
222
+ }
223
+ markDispatched(assessmentId, now) {
224
+ if (!text(assessmentId) || !integer(now))
225
+ fail('invalid-input');
226
+ return this.#transaction(() => { const current = this.#get(assessmentId); if (!current || current.dispatchedAt !== undefined || current.execution !== undefined || now < current.contract.issuedAt || now >= current.contract.expiresAt)
227
+ fail('conflict'); if (this.#write('UPDATE goal_outcome_assessments SET dispatched_at = ? WHERE assessment_id = ? AND dispatched_at IS NULL AND execution_json IS NULL', now, assessmentId) !== 1)
228
+ fail('conflict'); return this.#get(assessmentId); });
229
+ }
230
+ finish(assessmentId, execution) {
231
+ if (!text(assessmentId) || !exact(execution, ['status', 'quiescent', 'completedAt']) || (execution.status !== 'succeeded' && execution.status !== 'unknown') || typeof execution.quiescent !== 'boolean' || (execution.status === 'unknown' && execution.quiescent) || !integer(execution.completedAt))
232
+ fail('invalid-input');
233
+ return this.#transaction(() => { const current = this.#get(assessmentId); if (!current || current.dispatchedAt === undefined || execution.completedAt < current.dispatchedAt)
234
+ fail('conflict'); if (current.execution !== undefined) {
235
+ if (same(current.execution, execution))
236
+ return current;
237
+ fail('conflict');
238
+ } ; if (execution.status === 'succeeded' && (!execution.quiescent || execution.completedAt >= current.contract.expiresAt))
239
+ fail('conflict'); if (this.#write('UPDATE goal_outcome_assessments SET execution_json = ? WHERE assessment_id = ? AND execution_json IS NULL', JSON.stringify(freeze({ ...execution })), assessmentId) !== 1)
240
+ fail('conflict'); return this.#get(assessmentId); });
241
+ }
242
+ /**
243
+ * An explicit owner/runtime recovery fence. Construction stays read-only so an
244
+ * inspector cannot turn a live assessment owned by another Host into unknown.
245
+ */
246
+ recoverIncomplete(now = Date.now()) {
247
+ if (!integer(now))
248
+ fail('invalid-input');
249
+ return this.#transaction(() => {
250
+ const rows = this.#database.prepare('SELECT assessment_id FROM goal_outcome_assessments WHERE dispatched_at IS NOT NULL AND execution_json IS NULL').all();
251
+ let recovered = 0;
252
+ for (const row of rows) {
253
+ const current = this.#get(row.assessment_id);
254
+ if (!current || current.dispatchedAt === undefined || current.execution !== undefined || now < current.dispatchedAt)
255
+ fail('conflict');
256
+ const execution = JSON.stringify({ status: 'unknown', quiescent: false, completedAt: now });
257
+ if (this.#write('UPDATE goal_outcome_assessments SET execution_json = ? WHERE assessment_id = ? AND dispatched_at IS NOT NULL AND execution_json IS NULL', execution, row.assessment_id) === 1)
258
+ recovered += 1;
259
+ }
260
+ return recovered;
261
+ });
262
+ }
263
+ list(scopeValue, goalId, limit = 20) {
264
+ if (!text(goalId) || !integer(limit, 1) || limit > 100)
265
+ fail('invalid-input');
266
+ const rows = this.#database.prepare('SELECT assessment_id FROM goal_outcome_assessments WHERE scope_key = ? AND goal_id = ? ORDER BY issued_at DESC, created_seq DESC LIMIT ?').all(scopeKey(scope(scopeValue)), goalId, limit);
267
+ return freeze(rows.map(row => this.#get(row.assessment_id)));
268
+ }
269
+ close() { this.#database.close(); }
270
+ }
271
+ //# sourceMappingURL=outcome-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome-store.js","sourceRoot":"","sources":["../src/outcome-store.ts"],"names":[],"mappings":"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"}