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,270 @@
1
+ import { Type } from "typebox";
2
+ import type { CommandRecord, ControlEvent, Receipt, ArtifactRef, BuildInfoWire, ReceiptAssurance } from "../schema/index.ts";
3
+ import type { ApprovalJournalState } from "../approval-service.ts";
4
+ export declare const ApprovalOutboxSchema: Type.TUnion<[Type.TObject<{
5
+ kind: Type.TLiteral<"approval.release">;
6
+ intentId: Type.TString;
7
+ approvalRequestId: Type.TString;
8
+ runId: Type.TString;
9
+ reservationId: Type.TString;
10
+ evidence: Type.TObject<{
11
+ proofId: Type.TString;
12
+ projectId: Type.TString;
13
+ projectControlDomainId: Type.TString;
14
+ runId: Type.TString;
15
+ projectAdmitCommitSeq: Type.TInteger;
16
+ providerNoLiveProcessTree: Type.TBoolean;
17
+ noAmbiguousJobs: Type.TBoolean;
18
+ noPendingResourceIntents: Type.TBoolean;
19
+ reconcileTimeoutOnly: Type.TBoolean;
20
+ }>;
21
+ complete: Type.TBoolean;
22
+ }>, Type.TObject<{
23
+ kind: Type.TLiteral<"approval.readmission">;
24
+ intentId: Type.TString;
25
+ approvalRequestId: Type.TString;
26
+ runId: Type.TString;
27
+ reservation: Type.TObject<{
28
+ reservationId: Type.TString;
29
+ state: import("typebox").TUnsafe<string>;
30
+ slots: Type.TLiteral<1>;
31
+ projectId: Type.TString;
32
+ projectControlDomainId: Type.TString;
33
+ runId: Type.TString;
34
+ projectAdmitCommitSeq: Type.TOptional<Type.TInteger>;
35
+ attemptId: Type.TOptional<Type.TString>;
36
+ providerJobHandle: Type.TOptional<Type.TString>;
37
+ coordinatorEpoch: Type.TInteger;
38
+ reservedExpiresAt: Type.TOptional<Type.TInteger>;
39
+ renewedAt: Type.TOptional<Type.TInteger>;
40
+ }>;
41
+ owner: Type.TObject<{
42
+ runId: Type.TString;
43
+ phaseId: Type.TString;
44
+ attemptId: Type.TString;
45
+ unitId: Type.TString;
46
+ ancestry: Type.TArray<Type.TString>;
47
+ }>;
48
+ fragment: Type.TObject<{
49
+ schemaVersion: Type.TLiteral<2>;
50
+ projectId: Type.TString;
51
+ controlDomainId: Type.TString;
52
+ fragmentId: Type.TString;
53
+ parentBoundPlanHash: Type.TString;
54
+ parentBoundFragmentHash: Type.TOptional<Type.TString>;
55
+ sourceEventId: Type.TString;
56
+ sourceCommitSeq: Type.TInteger;
57
+ fragmentIRHash: Type.TString;
58
+ fragmentPolicyHash: Type.TString;
59
+ capabilitySetHash: Type.TString;
60
+ authorityEpoch: Type.TInteger;
61
+ boundFragmentHash: Type.TString;
62
+ executionSemanticHash: Type.TString;
63
+ }>;
64
+ policyHash: Type.TString;
65
+ authorizationContextHash: Type.TString;
66
+ projectAdmitCommitSeq: Type.TInteger;
67
+ complete: Type.TBoolean;
68
+ }>]>;
69
+ export declare const ProjectStateSchema: Type.TObject<{
70
+ run: Type.TObject<{
71
+ runId: Type.TString;
72
+ projectId: Type.TString;
73
+ controlDomainId: Type.TString;
74
+ status: import("typebox").TUnsafe<string>;
75
+ stage: import("typebox").TUnsafe<string>;
76
+ slot: import("typebox").TUnsafe<string>;
77
+ needsOperator: Type.TBoolean;
78
+ runVersion: Type.TInteger;
79
+ boundFragmentHash: Type.TOptional<Type.TString>;
80
+ reservationId: Type.TOptional<Type.TString>;
81
+ owner: Type.TOptional<Type.TObject<{
82
+ runId: Type.TString;
83
+ phaseId: Type.TString;
84
+ attemptId: Type.TString;
85
+ unitId: Type.TString;
86
+ ancestry: Type.TArray<Type.TString>;
87
+ }>>;
88
+ requiresReadmission: Type.TOptional<Type.TBoolean>;
89
+ projectAdmitCommitSeq: Type.TOptional<Type.TInteger>;
90
+ boundPlanHash: Type.TString;
91
+ policyHash: Type.TString;
92
+ authorityEpoch: Type.TInteger;
93
+ }>;
94
+ approvals: Type.TArray<Type.TObject<{
95
+ approvalRequestId: Type.TString;
96
+ runId: Type.TString;
97
+ nodeInstanceId: Type.TString;
98
+ boundPlanHash: Type.TOptional<Type.TString>;
99
+ boundFragmentHash: Type.TOptional<Type.TString>;
100
+ expectedRunVersion: Type.TInteger;
101
+ allowedDecisions: Type.TArray<import("typebox").TUnsafe<string>>;
102
+ owner: Type.TString;
103
+ audience: Type.TOptional<Type.TArray<Type.TString>>;
104
+ requiredPrincipals: Type.TOptional<Type.TArray<Type.TString>>;
105
+ deadline: Type.TInteger;
106
+ timeoutPolicy: import("typebox").TUnsafe<string>;
107
+ status: import("typebox").TUnsafe<string>;
108
+ createdAt: Type.TInteger;
109
+ decidedAt: Type.TOptional<Type.TInteger>;
110
+ decisionCommandId: Type.TOptional<Type.TString>;
111
+ decisionEventId: Type.TOptional<Type.TString>;
112
+ decisionCommitSeq: Type.TOptional<Type.TInteger>;
113
+ editArtifactRef: Type.TOptional<Type.TObject<{
114
+ digest: Type.TString;
115
+ size: Type.TInteger;
116
+ mediaType: Type.TString;
117
+ storageClass: Type.TString;
118
+ redactionClass: Type.TString;
119
+ }>>;
120
+ editKind: Type.TOptional<import("typebox").TUnsafe<string>>;
121
+ }>>;
122
+ outbox: Type.TArray<Type.TUnion<[Type.TObject<{
123
+ kind: Type.TLiteral<"approval.release">;
124
+ intentId: Type.TString;
125
+ approvalRequestId: Type.TString;
126
+ runId: Type.TString;
127
+ reservationId: Type.TString;
128
+ evidence: Type.TObject<{
129
+ proofId: Type.TString;
130
+ projectId: Type.TString;
131
+ projectControlDomainId: Type.TString;
132
+ runId: Type.TString;
133
+ projectAdmitCommitSeq: Type.TInteger;
134
+ providerNoLiveProcessTree: Type.TBoolean;
135
+ noAmbiguousJobs: Type.TBoolean;
136
+ noPendingResourceIntents: Type.TBoolean;
137
+ reconcileTimeoutOnly: Type.TBoolean;
138
+ }>;
139
+ complete: Type.TBoolean;
140
+ }>, Type.TObject<{
141
+ kind: Type.TLiteral<"approval.readmission">;
142
+ intentId: Type.TString;
143
+ approvalRequestId: Type.TString;
144
+ runId: Type.TString;
145
+ reservation: Type.TObject<{
146
+ reservationId: Type.TString;
147
+ state: import("typebox").TUnsafe<string>;
148
+ slots: Type.TLiteral<1>;
149
+ projectId: Type.TString;
150
+ projectControlDomainId: Type.TString;
151
+ runId: Type.TString;
152
+ projectAdmitCommitSeq: Type.TOptional<Type.TInteger>;
153
+ attemptId: Type.TOptional<Type.TString>;
154
+ providerJobHandle: Type.TOptional<Type.TString>;
155
+ coordinatorEpoch: Type.TInteger;
156
+ reservedExpiresAt: Type.TOptional<Type.TInteger>;
157
+ renewedAt: Type.TOptional<Type.TInteger>;
158
+ }>;
159
+ owner: Type.TObject<{
160
+ runId: Type.TString;
161
+ phaseId: Type.TString;
162
+ attemptId: Type.TString;
163
+ unitId: Type.TString;
164
+ ancestry: Type.TArray<Type.TString>;
165
+ }>;
166
+ fragment: Type.TObject<{
167
+ schemaVersion: Type.TLiteral<2>;
168
+ projectId: Type.TString;
169
+ controlDomainId: Type.TString;
170
+ fragmentId: Type.TString;
171
+ parentBoundPlanHash: Type.TString;
172
+ parentBoundFragmentHash: Type.TOptional<Type.TString>;
173
+ sourceEventId: Type.TString;
174
+ sourceCommitSeq: Type.TInteger;
175
+ fragmentIRHash: Type.TString;
176
+ fragmentPolicyHash: Type.TString;
177
+ capabilitySetHash: Type.TString;
178
+ authorityEpoch: Type.TInteger;
179
+ boundFragmentHash: Type.TString;
180
+ executionSemanticHash: Type.TString;
181
+ }>;
182
+ policyHash: Type.TString;
183
+ authorizationContextHash: Type.TString;
184
+ projectAdmitCommitSeq: Type.TInteger;
185
+ complete: Type.TBoolean;
186
+ }>]>>;
187
+ }>;
188
+ export declare const AdmissionDecisionSchema: Type.TObject<{
189
+ reservationId: Type.TString;
190
+ projectId: Type.TString;
191
+ projectControlDomainId: Type.TString;
192
+ runId: Type.TString;
193
+ status: Type.TUnion<[Type.TLiteral<"admitted">, Type.TLiteral<"abandoned">]>;
194
+ decisionCommitSeq: Type.TInteger;
195
+ runVersion: Type.TInteger;
196
+ }>;
197
+ export declare const EvidenceMetadataSchema: Type.TObject<{
198
+ runId: Type.TString;
199
+ buildInfo: Type.TObject<{
200
+ packageVersion: Type.TString;
201
+ gitCommit: Type.TString;
202
+ schemaVersion: Type.TInteger;
203
+ buildTime: Type.TOptional<Type.TInteger>;
204
+ }>;
205
+ assurance: Type.TObject<{
206
+ journalContinuity: Type.TBoolean;
207
+ providerOutcome: import("typebox").TUnsafe<string>;
208
+ artifactIntegrity: import("typebox").TUnsafe<string>;
209
+ provenance: Type.TObject<{
210
+ confidentiality: import("typebox").TUnsafe<string>;
211
+ integrity: import("typebox").TUnsafe<string>;
212
+ }>;
213
+ enforcement: Type.TObject<{
214
+ capabilities: Type.TObject<{
215
+ resolution: import("typebox").TUnsafe<string>;
216
+ mutationMediation: import("typebox").TUnsafe<string>;
217
+ processIsolation: import("typebox").TUnsafe<string>;
218
+ revocation: Type.TUnion<[Type.TLiteral<"admission-only">, Type.TLiteral<"per-mutation">, Type.TObject<{
219
+ mode: Type.TLiteral<"bounded-latency">;
220
+ maxLatencyMs: Type.TInteger;
221
+ }>]>;
222
+ baselinePolicyId: Type.TString;
223
+ hostProbeSha256: Type.TString;
224
+ }>;
225
+ observedRevocationLatencyMs: Type.TOptional<Type.TInteger>;
226
+ }>;
227
+ }>;
228
+ }>;
229
+ export interface AdmissionBinding {
230
+ reservationId: string;
231
+ projectId: string;
232
+ projectControlDomainId: string;
233
+ runId: string;
234
+ }
235
+ export interface AdmissionDecision extends AdmissionBinding {
236
+ status: "admitted" | "abandoned";
237
+ decisionCommitSeq: number;
238
+ runVersion: number;
239
+ }
240
+ export type LegacyJournalBatch = {
241
+ recordKind: "commit-batch";
242
+ commitSeq: number;
243
+ command: CommandRecord;
244
+ events: ControlEvent[];
245
+ };
246
+ export type LifecycleBatch = {
247
+ recordKind: "lifecycle-batch";
248
+ schemaVersion: 2;
249
+ commitSeq: number;
250
+ previousHash: string;
251
+ contentHash: string;
252
+ command?: CommandRecord;
253
+ events: ControlEvent[];
254
+ projection?: ApprovalJournalState;
255
+ receipt?: Receipt;
256
+ responseJson?: string;
257
+ admission?: AdmissionDecision;
258
+ receiptRef?: ArtifactRef;
259
+ manifestProofRef?: ArtifactRef;
260
+ evidenceMetadata?: {
261
+ runId: string;
262
+ buildInfo: BuildInfoWire;
263
+ assurance: ReceiptAssurance;
264
+ };
265
+ };
266
+ export type JournalBatch = LegacyJournalBatch | LifecycleBatch;
267
+ export declare const JOURNAL_GENESIS: string;
268
+ export declare function journalHash(record: Omit<LifecycleBatch, "contentHash"> | LegacyJournalBatch): string;
269
+ export declare function validJournalBatch(value: unknown): value is JournalBatch;
270
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../../../taskflow-control/src/store/journal.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC7H,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAQnE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAM/B,CAAC;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGpB,CAAC;AAKZ,eAAO,MAAM,uBAAuB;;;;;;;;EAGzB,CAAC;AACZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyG,CAAC;AAM7I,MAAM,WAAW,gBAAgB;IAAG,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAC7H,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IAAG,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAC/I,MAAM,MAAM,kBAAkB,GAAG;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC;AACnI,MAAM,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,iBAAiB,CAAC;IAAC,aAAa,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAC9G,OAAO,CAAC,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,CAAC;IAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAAC,gBAAgB,CAAC,EAAE;QAAC,KAAK,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,aAAa,CAAC;QAAA,SAAS,EAAC,gBAAgB,CAAA;KAAC,CAAC;CAC5S,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAC/D,eAAO,MAAM,eAAe,QAAiB,CAAC;AAC9C,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,GAAG,kBAAkB,GAAG,MAAM,CAEpG;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAKvE"}
@@ -0,0 +1,50 @@
1
+ /** Versioned project journal. V1 bytes remain immutable; V2 chains every batch. */
2
+ import { createHash } from "node:crypto";
3
+ import { canonicalJson } from "taskflow-core/flowir/hash";
4
+ import { Type } from "typebox";
5
+ import { Value } from "typebox/value";
6
+ import { ApprovalRequestSchema, CommandRecordSchema, ControlEventSchema, RunSnapshotSchema, ReceiptSchema, UuidSchema, Sha256HexSchema, ConcurrencyReservationSchema, BoundFragmentSchema, ExecutionOwnerSchema, ArtifactRefSchema, BuildInfoWireSchema, ReceiptAssuranceSchema } from "../schema/index.js";
7
+ const options = { additionalProperties: false };
8
+ const QuiescenceSchema = Type.Object({
9
+ proofId: Type.String({ minLength: 1 }), projectId: UuidSchema, projectControlDomainId: UuidSchema, runId: UuidSchema,
10
+ projectAdmitCommitSeq: Type.Integer({ minimum: 1 }), providerNoLiveProcessTree: Type.Boolean(),
11
+ noAmbiguousJobs: Type.Boolean(), noPendingResourceIntents: Type.Boolean(), reconcileTimeoutOnly: Type.Boolean(),
12
+ }, options);
13
+ export const ApprovalOutboxSchema = Type.Union([
14
+ Type.Object({ kind: Type.Literal("approval.release"), intentId: UuidSchema, approvalRequestId: UuidSchema, runId: UuidSchema,
15
+ reservationId: UuidSchema, evidence: QuiescenceSchema, complete: Type.Boolean() }, options),
16
+ Type.Object({ kind: Type.Literal("approval.readmission"), intentId: UuidSchema, approvalRequestId: UuidSchema, runId: UuidSchema,
17
+ reservation: ConcurrencyReservationSchema, owner: ExecutionOwnerSchema, fragment: BoundFragmentSchema,
18
+ policyHash: Sha256HexSchema, authorizationContextHash: Sha256HexSchema, projectAdmitCommitSeq: Type.Integer({ minimum: 1 }), complete: Type.Boolean() }, options),
19
+ ]);
20
+ export const ProjectStateSchema = Type.Object({
21
+ run: Type.Object({ ...RunSnapshotSchema.properties, boundPlanHash: Type.String({ minLength: 1 }), policyHash: Sha256HexSchema, authorityEpoch: Type.Integer({ minimum: 0 }) }, options),
22
+ approvals: Type.Array(ApprovalRequestSchema), outbox: Type.Array(ApprovalOutboxSchema),
23
+ }, options);
24
+ const LegacyBatchSchema = Type.Object({
25
+ recordKind: Type.Literal("commit-batch"), commitSeq: Type.Integer({ minimum: 1 }), command: CommandRecordSchema,
26
+ events: Type.Array(ControlEventSchema, { minItems: 1 }),
27
+ }, options);
28
+ export const AdmissionDecisionSchema = Type.Object({
29
+ reservationId: UuidSchema, projectId: UuidSchema, projectControlDomainId: UuidSchema, runId: UuidSchema,
30
+ status: Type.Union([Type.Literal("admitted"), Type.Literal("abandoned")]), decisionCommitSeq: Type.Integer({ minimum: 1 }), runVersion: Type.Integer({ minimum: 0 }),
31
+ }, options);
32
+ export const EvidenceMetadataSchema = Type.Object({ runId: UuidSchema, buildInfo: BuildInfoWireSchema, assurance: ReceiptAssuranceSchema }, options);
33
+ const BatchSchema = Type.Object({
34
+ recordKind: Type.Literal("lifecycle-batch"), schemaVersion: Type.Literal(2), commitSeq: Type.Integer({ minimum: 1 }),
35
+ previousHash: Sha256HexSchema, contentHash: Sha256HexSchema, command: Type.Optional(CommandRecordSchema),
36
+ events: Type.Array(ControlEventSchema, { minItems: 1 }), projection: Type.Optional(ProjectStateSchema), receipt: Type.Optional(ReceiptSchema), responseJson: Type.Optional(Type.String()), admission: Type.Optional(AdmissionDecisionSchema), receiptRef: Type.Optional(ArtifactRefSchema), manifestProofRef: Type.Optional(ArtifactRefSchema), evidenceMetadata: Type.Optional(EvidenceMetadataSchema),
37
+ }, options);
38
+ export const JOURNAL_GENESIS = "0".repeat(64);
39
+ export function journalHash(record) {
40
+ return createHash("sha256").update(canonicalJson(record)).digest("hex");
41
+ }
42
+ export function validJournalBatch(value) {
43
+ if (Value.Check(LegacyBatchSchema, value))
44
+ return true;
45
+ if (!Value.Check(BatchSchema, value) || value.events.some((event) => event.schemaVersion !== 2))
46
+ return false;
47
+ const { contentHash, ...body } = value;
48
+ return contentHash === journalHash(body);
49
+ }
50
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../../../taskflow-control/src/store/journal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { type ControlStoreHeader } from "../schema/header.ts";
2
+ import { type Receipt } from "../schema/evidence.ts";
3
+ import { type JournalBatch } from "./journal.ts";
4
+ export type ProjectLifecycleOperation = "move-rebind" | "clone" | "adopt" | "export";
5
+ export interface ProjectLifecycleAuthority<C> {
6
+ /** Implement using a verified operator context and CURRENT project policy.
7
+ * Path arguments are trusted launcher/operator configuration, not wire body. */
8
+ authorize(context: C, scope: {
9
+ operation: ProjectLifecycleOperation;
10
+ header: ControlStoreHeader;
11
+ destination?: string;
12
+ }): Promise<{
13
+ principal: string;
14
+ operator: boolean;
15
+ }> | {
16
+ principal: string;
17
+ operator: boolean;
18
+ };
19
+ }
20
+ export interface ForensicFile {
21
+ path: string;
22
+ sha256: string;
23
+ size: number;
24
+ bytesBase64?: string;
25
+ }
26
+ export interface ProjectForensicExport {
27
+ exportKind: "readonly" | "lossy";
28
+ executePromise: false;
29
+ header: ControlStoreHeader;
30
+ sourcePath: string;
31
+ integrity: "verified" | "damaged";
32
+ verificationScope: "captured-bytes-and-journal-structure";
33
+ diagnostics: string[];
34
+ files: ForensicFile[];
35
+ journal: JournalBatch[];
36
+ receipts: Receipt[];
37
+ }
38
+ /** Performs no source writes and does not call recovery/openControlStore. Damaged
39
+ * bytes remain available in readonly export; lossy export explicitly omits raw
40
+ * bytes. A concurrent change fails rather than claiming a coherent snapshot. */
41
+ export declare function exportProjectEvidence<C>(storePath: string, kind: "readonly" | "lossy", context: C, authority: ProjectLifecycleAuthority<C>): Promise<ProjectForensicExport>;
42
+ /** Same inode/device is necessary; a copied directory cannot adopt an identity
43
+ * using a caller's claim that the original is gone. Explicit adoption is only
44
+ * accepted for the same proven moved store until a stronger global fence exists. */
45
+ export declare function rebindMovedProject<C>(storePath: string, context: C, authority: ProjectLifecycleAuthority<C>, operation?: "move-rebind" | "adopt"): Promise<ControlStoreHeader>;
46
+ /** Copies no authoritative history. A copied ledger stays untouched as evidence;
47
+ * destination must be a separate empty path and receives two fresh UUIDs. */
48
+ export declare function createProjectClone<C>(sourcePath: string, destinationPath: string, context: C, authority: ProjectLifecycleAuthority<C>): Promise<ControlStoreHeader>;
49
+ //# sourceMappingURL=project-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-lifecycle.d.ts","sourceRoot":"","sources":["../../../../taskflow-control/src/store/project-lifecycle.ts"],"names":[],"mappings":"AAOA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAmD,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlG,MAAM,MAAM,yBAAyB,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AACrF,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAC3C;oFACgF;IAChF,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE;QAAE,SAAS,EAAE,yBAAyB,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;CACvN;AACD,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AAClG,MAAM,WAAW,qBAAqB;IACrC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;IAAC,cAAc,EAAE,KAAK,CAAC;IACxD,MAAM,EAAE,kBAAkB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC;IAClF,iBAAiB,EAAE,sCAAsC,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACtJ;AAsGD;;gFAEgF;AAChF,wBAAsB,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CASjL;AAED;;oFAEoF;AACpF,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC,EAAE,SAAS,GAAE,aAAa,GAAG,OAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuBnM;AAED;6EAC6E;AAC7E,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAWzK"}