taskflow-mcp-core 0.3.0-beta.1.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/CONTROL_GUIDE.md +113 -0
  2. package/README.md +34 -25
  3. package/dist/control/admission-service.d.ts +15 -0
  4. package/dist/control/admission-service.d.ts.map +1 -0
  5. package/dist/control/admission-service.js +64 -0
  6. package/dist/control/admission-service.js.map +1 -0
  7. package/dist/control/approval-edits.d.ts +12 -0
  8. package/dist/control/approval-edits.d.ts.map +1 -0
  9. package/dist/control/approval-edits.js +66 -0
  10. package/dist/control/approval-edits.js.map +1 -0
  11. package/dist/control/approval-service.d.ts +173 -0
  12. package/dist/control/approval-service.d.ts.map +1 -0
  13. package/dist/control/approval-service.js +342 -0
  14. package/dist/control/approval-service.js.map +1 -0
  15. package/dist/control/authorization.d.ts +94 -0
  16. package/dist/control/authorization.d.ts.map +1 -0
  17. package/dist/control/authorization.js +302 -0
  18. package/dist/control/authorization.js.map +1 -0
  19. package/dist/control/control-cli.d.ts +3 -0
  20. package/dist/control/control-cli.d.ts.map +1 -0
  21. package/dist/control/control-cli.js +279 -0
  22. package/dist/control/control-cli.js.map +1 -0
  23. package/dist/control/control-console.d.ts +17 -0
  24. package/dist/control/control-console.d.ts.map +1 -0
  25. package/dist/control/control-console.js +67 -0
  26. package/dist/control/control-console.js.map +1 -0
  27. package/dist/control/control-host.d.ts +98 -0
  28. package/dist/control/control-host.d.ts.map +1 -0
  29. package/dist/control/control-host.js +459 -0
  30. package/dist/control/control-host.js.map +1 -0
  31. package/dist/control/control-mcp.d.ts +11 -0
  32. package/dist/control/control-mcp.d.ts.map +1 -0
  33. package/dist/control/control-mcp.js +78 -0
  34. package/dist/control/control-mcp.js.map +1 -0
  35. package/dist/control/errors.d.ts +44 -0
  36. package/dist/control/errors.d.ts.map +1 -0
  37. package/dist/control/errors.js +93 -0
  38. package/dist/control/errors.js.map +1 -0
  39. package/dist/control/hello.d.ts +39 -0
  40. package/dist/control/hello.d.ts.map +1 -0
  41. package/dist/control/hello.js +80 -0
  42. package/dist/control/hello.js.map +1 -0
  43. package/dist/control/host-runtime.d.ts +32 -0
  44. package/dist/control/host-runtime.d.ts.map +1 -0
  45. package/dist/control/host-runtime.js +542 -0
  46. package/dist/control/host-runtime.js.map +1 -0
  47. package/dist/control/index.d.ts +32 -0
  48. package/dist/control/index.d.ts.map +1 -0
  49. package/dist/control/index.js +32 -0
  50. package/dist/control/index.js.map +1 -0
  51. package/dist/control/legacy-conflict.d.ts +19 -0
  52. package/dist/control/legacy-conflict.d.ts.map +1 -0
  53. package/dist/control/legacy-conflict.js +176 -0
  54. package/dist/control/legacy-conflict.js.map +1 -0
  55. package/dist/control/local-bootstrap.d.ts +21 -0
  56. package/dist/control/local-bootstrap.d.ts.map +1 -0
  57. package/dist/control/local-bootstrap.js +224 -0
  58. package/dist/control/local-bootstrap.js.map +1 -0
  59. package/dist/control/modes.d.ts +60 -0
  60. package/dist/control/modes.d.ts.map +1 -0
  61. package/dist/control/modes.js +86 -0
  62. package/dist/control/modes.js.map +1 -0
  63. package/dist/control/project-admin-cli.d.ts +3 -0
  64. package/dist/control/project-admin-cli.d.ts.map +1 -0
  65. package/dist/control/project-admin-cli.js +155 -0
  66. package/dist/control/project-admin-cli.js.map +1 -0
  67. package/dist/control/project-registry.d.ts +20 -0
  68. package/dist/control/project-registry.d.ts.map +1 -0
  69. package/dist/control/project-registry.js +181 -0
  70. package/dist/control/project-registry.js.map +1 -0
  71. package/dist/control/runtime-checkpoint.d.ts +11 -0
  72. package/dist/control/runtime-checkpoint.d.ts.map +1 -0
  73. package/dist/control/runtime-checkpoint.js +39 -0
  74. package/dist/control/runtime-checkpoint.js.map +1 -0
  75. package/dist/control/runtime-provider.d.ts +100 -0
  76. package/dist/control/runtime-provider.d.ts.map +1 -0
  77. package/dist/control/runtime-provider.js +258 -0
  78. package/dist/control/runtime-provider.js.map +1 -0
  79. package/dist/control/schema/approval.d.ts +108 -0
  80. package/dist/control/schema/approval.d.ts.map +1 -0
  81. package/dist/control/schema/approval.js +65 -0
  82. package/dist/control/schema/approval.js.map +1 -0
  83. package/dist/control/schema/commands.d.ts +663 -0
  84. package/dist/control/schema/commands.d.ts.map +1 -0
  85. package/dist/control/schema/commands.js +147 -0
  86. package/dist/control/schema/commands.js.map +1 -0
  87. package/dist/control/schema/common.d.ts +24 -0
  88. package/dist/control/schema/common.d.ts.map +1 -0
  89. package/dist/control/schema/common.js +38 -0
  90. package/dist/control/schema/common.js.map +1 -0
  91. package/dist/control/schema/coordinator.d.ts +98 -0
  92. package/dist/control/schema/coordinator.d.ts.map +1 -0
  93. package/dist/control/schema/coordinator.js +87 -0
  94. package/dist/control/schema/coordinator.js.map +1 -0
  95. package/dist/control/schema/evidence.d.ts +140 -0
  96. package/dist/control/schema/evidence.d.ts.map +1 -0
  97. package/dist/control/schema/evidence.js +64 -0
  98. package/dist/control/schema/evidence.js.map +1 -0
  99. package/dist/control/schema/header.d.ts +79 -0
  100. package/dist/control/schema/header.d.ts.map +1 -0
  101. package/dist/control/schema/header.js +66 -0
  102. package/dist/control/schema/header.js.map +1 -0
  103. package/dist/control/schema/index.d.ts +31 -0
  104. package/dist/control/schema/index.d.ts.map +1 -0
  105. package/dist/control/schema/index.js +31 -0
  106. package/dist/control/schema/index.js.map +1 -0
  107. package/dist/control/schema/plan.d.ts +291 -0
  108. package/dist/control/schema/plan.d.ts.map +1 -0
  109. package/dist/control/schema/plan.js +80 -0
  110. package/dist/control/schema/plan.js.map +1 -0
  111. package/dist/control/schema/policy.d.ts +96 -0
  112. package/dist/control/schema/policy.d.ts.map +1 -0
  113. package/dist/control/schema/policy.js +73 -0
  114. package/dist/control/schema/policy.js.map +1 -0
  115. package/dist/control/schema/run.d.ts +61 -0
  116. package/dist/control/schema/run.d.ts.map +1 -0
  117. package/dist/control/schema/run.js +56 -0
  118. package/dist/control/schema/run.js.map +1 -0
  119. package/dist/control/schema/te-mirrors.d.ts +145 -0
  120. package/dist/control/schema/te-mirrors.d.ts.map +1 -0
  121. package/dist/control/schema/te-mirrors.js +145 -0
  122. package/dist/control/schema/te-mirrors.js.map +1 -0
  123. package/dist/control/schema/transport.d.ts +479 -0
  124. package/dist/control/schema/transport.d.ts.map +1 -0
  125. package/dist/control/schema/transport.js +181 -0
  126. package/dist/control/schema/transport.js.map +1 -0
  127. package/dist/control/singleton.d.ts +135 -0
  128. package/dist/control/singleton.d.ts.map +1 -0
  129. package/dist/control/singleton.js +607 -0
  130. package/dist/control/singleton.js.map +1 -0
  131. package/dist/control/store/coordinator-store.d.ts +143 -0
  132. package/dist/control/store/coordinator-store.d.ts.map +1 -0
  133. package/dist/control/store/coordinator-store.js +620 -0
  134. package/dist/control/store/coordinator-store.js.map +1 -0
  135. package/dist/control/store/evidence-adapter.d.ts +10 -0
  136. package/dist/control/store/evidence-adapter.d.ts.map +1 -0
  137. package/dist/control/store/evidence-adapter.js +114 -0
  138. package/dist/control/store/evidence-adapter.js.map +1 -0
  139. package/dist/control/store/evidence-explanation.d.ts +55 -0
  140. package/dist/control/store/evidence-explanation.d.ts.map +1 -0
  141. package/dist/control/store/evidence-explanation.js +50 -0
  142. package/dist/control/store/evidence-explanation.js.map +1 -0
  143. package/dist/control/store/evidence-store.d.ts +143 -0
  144. package/dist/control/store/evidence-store.d.ts.map +1 -0
  145. package/dist/control/store/evidence-store.js +437 -0
  146. package/dist/control/store/evidence-store.js.map +1 -0
  147. package/dist/control/store/index.d.ts +3 -0
  148. package/dist/control/store/index.d.ts.map +1 -0
  149. package/dist/control/store/index.js +2 -0
  150. package/dist/control/store/index.js.map +1 -0
  151. package/dist/control/store/journal.d.ts +270 -0
  152. package/dist/control/store/journal.d.ts.map +1 -0
  153. package/dist/control/store/journal.js +50 -0
  154. package/dist/control/store/journal.js.map +1 -0
  155. package/dist/control/store/project-lifecycle.d.ts +49 -0
  156. package/dist/control/store/project-lifecycle.d.ts.map +1 -0
  157. package/dist/control/store/project-lifecycle.js +288 -0
  158. package/dist/control/store/project-lifecycle.js.map +1 -0
  159. package/dist/control/store/store.d.ts +93 -0
  160. package/dist/control/store/store.d.ts.map +1 -0
  161. package/dist/control/store/store.js +873 -0
  162. package/dist/control/store/store.js.map +1 -0
  163. package/dist/control/te-provider.d.ts +86 -0
  164. package/dist/control/te-provider.d.ts.map +1 -0
  165. package/dist/control/te-provider.js +131 -0
  166. package/dist/control/te-provider.js.map +1 -0
  167. package/dist/control/uds.d.ts +114 -0
  168. package/dist/control/uds.d.ts.map +1 -0
  169. package/dist/control/uds.js +456 -0
  170. package/dist/control/uds.js.map +1 -0
  171. package/dist/control/web-console/view.d.ts +5 -0
  172. package/dist/control/web-console/view.d.ts.map +1 -0
  173. package/dist/control/web-console/view.js +122 -0
  174. package/dist/control/web-console/view.js.map +1 -0
  175. package/dist/control/web-console.d.ts +50 -0
  176. package/dist/control/web-console.d.ts.map +1 -0
  177. package/dist/control/web-console.js +317 -0
  178. package/dist/control/web-console.js.map +1 -0
  179. package/dist/mcp/jsonrpc.d.ts.map +1 -1
  180. package/dist/mcp/jsonrpc.js +12 -3
  181. package/dist/mcp/jsonrpc.js.map +1 -1
  182. package/dist/mcp/server.d.ts.map +1 -1
  183. package/dist/mcp/server.js +26 -17
  184. package/dist/mcp/server.js.map +1 -1
  185. package/package.json +13 -5
@@ -0,0 +1,437 @@
1
+ /**
2
+ * Subordinate immutable evidence storage. The project journal remains authority.
3
+ * These internal ports MUST be implemented by the authenticated ControlHost and
4
+ * its fenced store, never from request body fields. No standalone receipt
5
+ * admission, authentication, journal migration, or physical retention is implied.
6
+ */
7
+ import * as crypto from "node:crypto";
8
+ import * as fs from "node:fs";
9
+ import * as path from "node:path";
10
+ import { Value } from "typebox/value";
11
+ import { canonicalJson } from "taskflow-core/flowir/hash";
12
+ import { ControlError, reconcileRequired } from "../errors.js";
13
+ import { ArtifactRefSchema, ControlEventSchema, ReceiptSchema, CONTROL_WIRE_SCHEMA_VERSION, } from "../schema/index.js";
14
+ const HEX = /^[0-9a-f]{64}$/;
15
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
16
+ function fail(message) {
17
+ throw new ControlError("TF_DURABILITY_FAILED", message, { recoveryAction: "operator", sideEffects: "unknown" });
18
+ }
19
+ function digest(bytes) { return crypto.createHash("sha256").update(bytes).digest("hex"); }
20
+ export function evidenceEventHash(previousHash, event) {
21
+ if (!HEX.test(previousHash))
22
+ fail("invalid evidence chain predecessor");
23
+ return digest(canonicalJson({ format: "taskflow:control-event:v1", previousHash, event }));
24
+ }
25
+ function proofRoot(proof) {
26
+ return digest(canonicalJson({ format: "taskflow:receipt-manifest:v1", proof }));
27
+ }
28
+ function validRef(ref) {
29
+ if (!Value.Check(ArtifactRefSchema, ref) || !HEX.test(ref.digest) || !Number.isSafeInteger(ref.size))
30
+ fail("invalid artifact reference");
31
+ }
32
+ function sameRef(a, b) { return canonicalJson(a) === canonicalJson(b); }
33
+ /** Resolve committed run artifacts without inventing Receipt metadata for live runs.
34
+ * Callers outside EvidenceStore must supply the validated owner ledger view. */
35
+ export function evidenceRunArtifactRefs(view, runId) {
36
+ if (Object.hasOwn(view.runs, runId))
37
+ return view.runs[runId].artifactRefs;
38
+ const scoped = view.events.filter(({ event }) => event.correlationId === runId);
39
+ if (!scoped.some(({ event }) => event.payload.kind === "run.snapshot" && event.payload.run.runId === runId
40
+ && event.payload.run.projectId === view.projectId && event.payload.run.controlDomainId === view.controlDomainId))
41
+ return [];
42
+ const refs = [];
43
+ for (const { event } of scoped) {
44
+ if (event.payload.kind !== "artifact.recorded" || event.payload.runId !== runId)
45
+ continue;
46
+ const ref = event.payload.artifact;
47
+ if (!refs.some(candidate => sameRef(candidate, ref)))
48
+ refs.push(ref);
49
+ }
50
+ return refs;
51
+ }
52
+ /** Logical compaction only. No method in this class deletes journal or blobs. */
53
+ export class EvidenceStore {
54
+ #options;
55
+ #root;
56
+ #identity;
57
+ #failed = false;
58
+ constructor(options, initial) {
59
+ if (!options.ledger || typeof options.ledger.read !== "function" || typeof options.ledger.withWriter !== "function" || typeof options.ledger.commitReceiptOnce !== "function"
60
+ || typeof options.authorize !== "function" || typeof options.terminalEvidence?.verify !== "function")
61
+ fail("evidence store requires trusted ledger, writer, terminal evidence and live authorization ports");
62
+ this.#options = options;
63
+ const supplied = path.resolve(options.storePath);
64
+ if (fs.lstatSync(supplied).isSymbolicLink())
65
+ fail("evidence root is a symlink");
66
+ this.#root = fs.realpathSync(supplied);
67
+ this.#identity = { projectId: initial.projectId, controlDomainId: initial.controlDomainId,
68
+ device: initial.directoryBinding.device, inode: initial.directoryBinding.inode };
69
+ this.#validateView(initial);
70
+ }
71
+ static async open(options) {
72
+ if (!options.ledger || typeof options.ledger.read !== "function")
73
+ fail("evidence store requires trusted ledger");
74
+ return new EvidenceStore(options, await options.ledger.read());
75
+ }
76
+ #validateView(view) {
77
+ if (this.#failed)
78
+ fail("evidence store is fail-closed; reopen after recovery");
79
+ const st = fs.lstatSync(this.#root);
80
+ if (!st.isDirectory() || st.isSymbolicLink() || fs.realpathSync(this.#root) !== this.#root
81
+ || view.projectId !== this.#identity.projectId || view.controlDomainId !== this.#identity.controlDomainId
82
+ || String(st.dev) !== this.#identity.device || String(st.ino) !== this.#identity.inode
83
+ || view.directoryBinding.canonicalPath !== this.#root
84
+ || view.directoryBinding.device !== String(st.dev) || view.directoryBinding.inode !== String(st.ino))
85
+ fail("evidence store directory identity changed");
86
+ if (!UUID.test(view.projectId) || !UUID.test(view.controlDomainId) || !HEX.test(view.anchorHash)
87
+ || !HEX.test(view.tipHash) || !Number.isSafeInteger(view.tipCommitSeq) || view.tipCommitSeq < 0)
88
+ fail("invalid evidence ledger identity or tip");
89
+ let previous = view.anchorHash;
90
+ let sequence = 0;
91
+ const ids = new Set();
92
+ for (const entry of view.events) {
93
+ const event = entry.event;
94
+ if (!Value.Check(ControlEventSchema, event) || !Number.isSafeInteger(event.commitSeq)
95
+ || event.projectId !== view.projectId || event.controlDomainId !== view.controlDomainId
96
+ || event.commitSeq < sequence || event.commitSeq > sequence + 1 || event.commitSeq < 1
97
+ || ids.has(event.eventId) || entry.previousHash !== previous
98
+ || entry.hash !== evidenceEventHash(previous, event))
99
+ fail("invalid evidence ledger chain");
100
+ ids.add(event.eventId);
101
+ previous = entry.hash;
102
+ sequence = event.commitSeq;
103
+ }
104
+ if (previous !== view.tipHash || sequence !== view.tipCommitSeq)
105
+ fail("evidence ledger tip does not match complete retained chain");
106
+ this.#floor(view);
107
+ }
108
+ async #write(operation) {
109
+ return this.#options.ledger.withWriter(async (view) => {
110
+ this.#validateView(view);
111
+ try {
112
+ return await operation(view);
113
+ }
114
+ catch (error) {
115
+ if (!(error instanceof ControlError) || error.code === "TF_DURABILITY_FAILED")
116
+ this.#failed = true;
117
+ throw error;
118
+ }
119
+ });
120
+ }
121
+ #path(ref, create) {
122
+ validRef(ref);
123
+ let current = this.#root;
124
+ const root = fs.lstatSync(current);
125
+ if (!root.isDirectory() || root.isSymbolicLink() || fs.realpathSync(current) !== current
126
+ || String(root.dev) !== this.#identity.device || String(root.ino) !== this.#identity.inode)
127
+ fail("evidence root identity changed");
128
+ const directories = [{ path: current, device: root.dev, inode: root.ino }];
129
+ for (const part of ["artifacts", "sha256", ref.digest.slice(0, 2)]) {
130
+ current = path.join(current, part);
131
+ if (create && !fs.existsSync(current)) {
132
+ fs.mkdirSync(current, { mode: 0o700 });
133
+ const parentFd = fs.openSync(path.dirname(current), "r");
134
+ try {
135
+ fs.fsyncSync(parentFd);
136
+ }
137
+ finally {
138
+ fs.closeSync(parentFd);
139
+ }
140
+ }
141
+ const st = fs.lstatSync(current);
142
+ if (!st.isDirectory() || st.isSymbolicLink() || fs.realpathSync(current) !== current)
143
+ fail("artifact directory is not a confined regular directory");
144
+ directories.push({ path: current, device: st.dev, inode: st.ino });
145
+ }
146
+ const file = path.join(current, ref.digest);
147
+ try {
148
+ if (!fs.lstatSync(file).isFile())
149
+ fail("artifact destination is not a regular file");
150
+ }
151
+ catch (error) {
152
+ if (error.code !== "ENOENT")
153
+ throw error;
154
+ }
155
+ return { file, directories };
156
+ }
157
+ // Revalidate every ancestor at durability boundaries, including before any
158
+ // cleanup. Portable Node path APIs cannot guarantee confinement against a
159
+ // hostile same-UID process replacing paths between individual syscalls.
160
+ #assertDirectories(directories) {
161
+ for (const directory of directories) {
162
+ const st = fs.lstatSync(directory.path);
163
+ if (!st.isDirectory() || st.isSymbolicLink() || st.dev !== directory.device || st.ino !== directory.inode
164
+ || fs.realpathSync(directory.path) !== directory.path)
165
+ fail("artifact directory identity changed");
166
+ }
167
+ }
168
+ #read(ref) {
169
+ const { file, directories } = this.#path(ref, false);
170
+ this.#assertDirectories(directories);
171
+ const fd = fs.openSync(file, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW);
172
+ let bytes;
173
+ try {
174
+ if (!fs.fstatSync(fd).isFile())
175
+ fail("artifact is not a regular file");
176
+ bytes = fs.readFileSync(fd);
177
+ }
178
+ finally {
179
+ fs.closeSync(fd);
180
+ }
181
+ this.#assertDirectories(directories);
182
+ if (bytes.length !== ref.size || digest(bytes) !== ref.digest)
183
+ fail("artifact bytes do not match committed reference");
184
+ return bytes;
185
+ }
186
+ #stage(bytes, metadata) {
187
+ if (metadata.redactionClass === "secret")
188
+ throw new ControlError("TF_POLICY_DENIED", "secret material must use SecretRef, not the generic artifact store");
189
+ const ref = { ...metadata, size: bytes.length, digest: digest(bytes) };
190
+ const { file, directories } = this.#path(ref, true);
191
+ if (fs.existsSync(file)) {
192
+ this.#read(ref);
193
+ return ref;
194
+ }
195
+ const temp = path.join(path.dirname(file), `.${crypto.randomUUID()}`);
196
+ this.#assertDirectories(directories);
197
+ const fd = fs.openSync(temp, "wx", 0o600);
198
+ const tempIdentity = fs.fstatSync(fd);
199
+ try {
200
+ try {
201
+ fs.writeFileSync(fd, bytes);
202
+ fs.fsyncSync(fd);
203
+ }
204
+ finally {
205
+ fs.closeSync(fd);
206
+ }
207
+ this.#options.onDurabilityPoint?.("file-fsynced");
208
+ this.#assertDirectories(directories);
209
+ const staged = fs.lstatSync(temp);
210
+ if (!staged.isFile() || staged.dev !== tempIdentity.dev || staged.ino !== tempIdentity.ino)
211
+ fail("staged artifact identity changed");
212
+ try {
213
+ fs.linkSync(temp, file);
214
+ }
215
+ catch (error) {
216
+ if (error.code !== "EEXIST")
217
+ throw error;
218
+ this.#read(ref);
219
+ }
220
+ this.#assertDirectories(directories);
221
+ const directoryFd = fs.openSync(path.dirname(file), "r");
222
+ try {
223
+ fs.fsyncSync(directoryFd);
224
+ }
225
+ finally {
226
+ fs.closeSync(directoryFd);
227
+ }
228
+ this.#options.onDurabilityPoint?.("file-published");
229
+ this.#assertDirectories(directories);
230
+ this.#read(ref);
231
+ }
232
+ finally {
233
+ // Preserve forensic staging bytes if the original directory or file was
234
+ // replaced. In particular, never follow a replacement symlink to clean up.
235
+ let unchanged = false;
236
+ try {
237
+ this.#assertDirectories(directories);
238
+ const staged = fs.lstatSync(temp);
239
+ unchanged = staged.isFile() && staged.dev === tempIdentity.dev && staged.ino === tempIdentity.ino;
240
+ }
241
+ catch { /* Untrusted cleanup path: leave it alone. */ }
242
+ if (unchanged)
243
+ fs.unlinkSync(temp);
244
+ }
245
+ return ref;
246
+ }
247
+ async stageArtifact(bytes, metadata) {
248
+ return this.#write(() => this.#stage(bytes, metadata));
249
+ }
250
+ /** Owner must call under its commit fence before acknowledging acceptance. */
251
+ async assertDurableReferences(refs) {
252
+ await this.#write(() => { for (const ref of refs)
253
+ this.#read(ref); });
254
+ }
255
+ #json(value, mediaType) {
256
+ return this.#stage(Buffer.from(canonicalJson(value)), { mediaType, storageClass: "local", redactionClass: "internal" });
257
+ }
258
+ #run(view, runId) {
259
+ if (!UUID.test(runId) || !Object.hasOwn(view.runs, runId))
260
+ fail("run has no committed evidence");
261
+ const run = view.runs[runId];
262
+ if (run.runId !== runId || (!run.boundPlanHash && !run.boundFragmentHash))
263
+ fail("run evidence identity or bound plan missing");
264
+ return run;
265
+ }
266
+ #proof(view, run) {
267
+ const selected = new Set(run.eventIds);
268
+ const events = view.events.filter(({ event }) => selected.has(event.eventId));
269
+ if (selected.size !== run.eventIds.length || events.length !== selected.size || events.length === 0
270
+ || events.some(({ event }, index) => event.eventId !== run.eventIds[index]))
271
+ fail("run event manifest is incomplete, duplicated or out of order");
272
+ return { version: 1, projectId: view.projectId, controlDomainId: view.controlDomainId, runId: run.runId,
273
+ entries: events.map(({ event }) => ({ eventId: event.eventId, commitSeq: event.commitSeq,
274
+ eventDigest: digest(canonicalJson(event)) })) };
275
+ }
276
+ /** Internal preparation only; its blobs remain unreachable until committed. */
277
+ async prepareFinalReceipt(runId) {
278
+ return this.#write((view) => this.#prepare(view, runId));
279
+ }
280
+ /** Trusted control service entry. Holds the owner fence through commit-once. */
281
+ async issueFinalReceipt(runId) {
282
+ return this.#write(async (view) => {
283
+ const prepared = await this.#prepare(view, runId);
284
+ if (!Object.hasOwn(view.receipts, runId)) {
285
+ await this.#options.ledger.commitReceiptOnce(runId, prepared);
286
+ }
287
+ const committed = await this.#options.ledger.read();
288
+ this.#validateView(committed);
289
+ if (!Object.hasOwn(committed.receipts, runId))
290
+ fail("receipt journal commit did not establish reachability");
291
+ const issued = committed.receipts[runId];
292
+ if (!sameRef(issued.receiptRef, prepared.receiptRef) || !sameRef(issued.manifestProofRef, prepared.manifestProofRef))
293
+ fail("receipt commit returned a different immutable outcome");
294
+ return this.#verifyReceipt(committed, runId, issued);
295
+ });
296
+ }
297
+ async #prepare(view, runId) {
298
+ const expectedTip = { commitSeq: view.tipCommitSeq, hash: view.tipHash };
299
+ if (Object.hasOwn(view.receipts, runId)) {
300
+ const existing = view.receipts[runId];
301
+ return { ...existing, receipt: this.#verifyReceipt(view, runId, existing), expectedTip };
302
+ }
303
+ const run = this.#run(view, runId);
304
+ const proof = this.#proof(view, run);
305
+ const last = view.events.find(({ event }) => event.eventId === run.eventIds.at(-1)).event;
306
+ if (last.payload.kind !== "run.terminal" || !run.terminalEvidenceId)
307
+ throw reconcileRequired("final Receipt requires committed terminal and complete provider quiescence evidence");
308
+ const termination = await this.#options.terminalEvidence.verify(view, runId, run.terminalEvidenceId);
309
+ this.#validateView(view);
310
+ if (termination.terminalStatus !== last.payload.status || termination.terminalEventId !== last.eventId || !termination.evidenceCommit
311
+ || !["completed", "failed", "operator-intervened"].includes(termination.providerOutcome))
312
+ throw reconcileRequired("terminal evidence is incomplete or ambiguous");
313
+ for (const ref of run.artifactRefs)
314
+ this.#read(ref);
315
+ const receipt = {
316
+ schemaVersion: CONTROL_WIRE_SCHEMA_VERSION, controlDomainId: view.controlDomainId, runId,
317
+ ...(run.boundPlanHash ? { boundPlanHash: run.boundPlanHash } : {}),
318
+ ...(run.boundFragmentHash ? { boundFragmentHash: run.boundFragmentHash } : {}),
319
+ eventManifest: [...run.eventIds], manifestRoot: proofRoot(proof),
320
+ startCommitSeq: proof.entries[0].commitSeq, endCommitSeq: proof.entries.at(-1).commitSeq,
321
+ artifactRefs: [...run.artifactRefs], assurance: { ...run.assurance, providerOutcome: termination.providerOutcome, journalContinuity: true, artifactIntegrity: "verified" },
322
+ buildInfo: run.buildInfo,
323
+ };
324
+ if (!Value.Check(ReceiptSchema, receipt))
325
+ fail("derived Receipt failed schema validation");
326
+ const manifestProofRef = this.#json(proof, "application/vnd.taskflow.manifest+json");
327
+ const receiptRef = this.#json(receipt, "application/vnd.taskflow.receipt+json");
328
+ return { receipt, receiptRef, manifestProofRef, expectedTip };
329
+ }
330
+ async #disclose(actor, target, artifactRef, read) {
331
+ return this.#write(async (view) => {
332
+ const authorize = () => this.#options.authorize(actor, { projectId: view.projectId, controlDomainId: view.controlDomainId,
333
+ target, ...(artifactRef ? { artifactRef } : {}) });
334
+ const validateDecision = (decision) => {
335
+ if (!decision || typeof decision.principal !== "string" || decision.principal.length === 0
336
+ || !HEX.test(decision.authorizationContextHash))
337
+ throw new ControlError("TF_POLICY_DENIED", "evidence authorization decision unavailable");
338
+ };
339
+ validateDecision(await authorize());
340
+ // The owner fence protects this fresh projection through disclosure. A
341
+ // final live policy check must follow the last asynchronous ledger read:
342
+ // revocation during that read may not reuse the earlier decision.
343
+ const current = await this.#options.ledger.read();
344
+ this.#validateView(current);
345
+ validateDecision(await authorize());
346
+ this.#validateView(current);
347
+ // No await between final authorization, reachability and filesystem read.
348
+ return read(current);
349
+ });
350
+ }
351
+ async readArtifact(actor, target, ref) {
352
+ return this.#disclose(actor, target, ref, (view) => {
353
+ validRef(ref);
354
+ const refs = target.kind === "run"
355
+ ? evidenceRunArtifactRefs(view, target.id)
356
+ : (Object.hasOwn(view.commands, target.id) && view.commands[target.id].responseArtifactRef ? [view.commands[target.id].responseArtifactRef] : []);
357
+ if (!refs.some((candidate) => sameRef(candidate, ref)))
358
+ throw new ControlError("TF_POLICY_DENIED", "artifact has no authorized ledger reference");
359
+ return this.#read(ref);
360
+ });
361
+ }
362
+ #verifyReceipt(view, runId, issued) {
363
+ let receipt;
364
+ let proof;
365
+ try {
366
+ receipt = JSON.parse(this.#read(issued.receiptRef).toString("utf8"));
367
+ proof = JSON.parse(this.#read(issued.manifestProofRef).toString("utf8"));
368
+ }
369
+ catch {
370
+ return fail("committed Receipt or manifest proof is missing or damaged");
371
+ }
372
+ const run = this.#run(view, runId);
373
+ const expected = this.#proof(view, run);
374
+ if (!Value.Check(ReceiptSchema, receipt) || receipt.runId !== runId || receipt.controlDomainId !== view.controlDomainId
375
+ || receipt.boundPlanHash !== run.boundPlanHash || receipt.boundFragmentHash !== run.boundFragmentHash
376
+ || canonicalJson(receipt.artifactRefs) !== canonicalJson(run.artifactRefs)
377
+ || canonicalJson(receipt.buildInfo) !== canonicalJson(run.buildInfo)
378
+ || canonicalJson(proof) !== canonicalJson(expected) || receipt.manifestRoot !== proofRoot(expected)
379
+ || canonicalJson(receipt.eventManifest) !== canonicalJson(expected.entries.map((entry) => entry.eventId))
380
+ || receipt.startCommitSeq !== expected.entries[0].commitSeq || receipt.endCommitSeq !== expected.entries.at(-1).commitSeq)
381
+ fail("Receipt manifest does not match committed run evidence");
382
+ return receipt;
383
+ }
384
+ async readReceipt(actor, runId) {
385
+ return this.#disclose(actor, { kind: "run", id: runId }, undefined, (view) => {
386
+ if (!Object.hasOwn(view.receipts, runId))
387
+ throw new ControlError("TF_POLICY_DENIED", "run has no issued Receipt");
388
+ const receipt = this.#verifyReceipt(view, runId, view.receipts[runId]);
389
+ let artifactIntegrity = "verified";
390
+ for (const ref of receipt.artifactRefs) {
391
+ try {
392
+ this.#read(ref);
393
+ }
394
+ catch (error) {
395
+ if (error.code === "ENOENT")
396
+ artifactIntegrity = "unknown";
397
+ else
398
+ throw error;
399
+ }
400
+ }
401
+ return { receipt, verification: { artifactIntegrity } };
402
+ });
403
+ }
404
+ #floor(view) {
405
+ let through = 0;
406
+ for (const { event } of view.events)
407
+ if (event.payload.kind === "compaction.checkpoint") {
408
+ if (!Number.isSafeInteger(event.payload.throughCommitSeq) || event.payload.throughCommitSeq < through
409
+ || event.payload.throughCommitSeq >= event.commitSeq)
410
+ fail("invalid committed compaction checkpoint");
411
+ through = event.payload.throughCommitSeq;
412
+ }
413
+ return through + 1;
414
+ }
415
+ async prepareCheckpoint(throughCommitSeq) {
416
+ return this.#write((view) => {
417
+ if (!Number.isSafeInteger(throughCommitSeq) || throughCommitSeq < this.#floor(view) || throughCommitSeq > view.tipCommitSeq)
418
+ fail("invalid logical compaction boundary");
419
+ // Full chain remains on disk. Validate issued evidence before advancing
420
+ // visibility; this method never commits a checkpoint or deletes a byte.
421
+ for (const [runId, issued] of Object.entries(view.receipts))
422
+ this.#verifyReceipt(view, runId, issued);
423
+ return { eventPayload: { kind: "compaction.checkpoint", throughCommitSeq }, expectedTip: { commitSeq: view.tipCommitSeq, hash: view.tipHash } };
424
+ });
425
+ }
426
+ async checkCursor(cursor, now) {
427
+ const view = await this.#options.ledger.read();
428
+ this.#validateView(view);
429
+ const minAvailableCommitSeq = this.#floor(view);
430
+ if (!Number.isSafeInteger(now) || !Number.isSafeInteger(cursor.nextCommitSeq) || !Number.isSafeInteger(cursor.leaseExpiresAt)
431
+ || cursor.nextCommitSeq < minAvailableCommitSeq || cursor.leaseExpiresAt <= now)
432
+ throw new ControlError("TF_CURSOR_EXPIRED", "cursor requires checkpoint resync", { recoveryAction: "refresh" });
433
+ return { minAvailableCommitSeq };
434
+ }
435
+ }
436
+ export async function createEvidenceStore(options) { return EvidenceStore.open(options); }
437
+ //# sourceMappingURL=evidence-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-store.js","sourceRoot":"","sources":["../../../../taskflow-control/src/store/evidence-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { CONTROL_CRASH_ENV, ControlStore, controlStorePaths, maybeCrash, openControlStore, writeJsonAtomicHardened, } from "./store.ts";
2
+ export type { CommitBatchInput, ControlCrashPoint, ControlStoreSnapshot, OpenControlStoreOptions, } from "./store.ts";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../taskflow-control/src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,uBAAuB,GACvB,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,GACvB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CONTROL_CRASH_ENV, ControlStore, controlStorePaths, maybeCrash, openControlStore, writeJsonAtomicHardened, } from "./store.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../taskflow-control/src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,uBAAuB,GACvB,MAAM,YAAY,CAAC"}