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.
- package/CONTROL_GUIDE.md +113 -0
- package/README.md +34 -25
- package/dist/control/admission-service.d.ts +15 -0
- package/dist/control/admission-service.d.ts.map +1 -0
- package/dist/control/admission-service.js +64 -0
- package/dist/control/admission-service.js.map +1 -0
- package/dist/control/approval-edits.d.ts +12 -0
- package/dist/control/approval-edits.d.ts.map +1 -0
- package/dist/control/approval-edits.js +66 -0
- package/dist/control/approval-edits.js.map +1 -0
- package/dist/control/approval-service.d.ts +173 -0
- package/dist/control/approval-service.d.ts.map +1 -0
- package/dist/control/approval-service.js +342 -0
- package/dist/control/approval-service.js.map +1 -0
- package/dist/control/authorization.d.ts +94 -0
- package/dist/control/authorization.d.ts.map +1 -0
- package/dist/control/authorization.js +302 -0
- package/dist/control/authorization.js.map +1 -0
- package/dist/control/control-cli.d.ts +3 -0
- package/dist/control/control-cli.d.ts.map +1 -0
- package/dist/control/control-cli.js +279 -0
- package/dist/control/control-cli.js.map +1 -0
- package/dist/control/control-console.d.ts +17 -0
- package/dist/control/control-console.d.ts.map +1 -0
- package/dist/control/control-console.js +67 -0
- package/dist/control/control-console.js.map +1 -0
- package/dist/control/control-host.d.ts +98 -0
- package/dist/control/control-host.d.ts.map +1 -0
- package/dist/control/control-host.js +459 -0
- package/dist/control/control-host.js.map +1 -0
- package/dist/control/control-mcp.d.ts +11 -0
- package/dist/control/control-mcp.d.ts.map +1 -0
- package/dist/control/control-mcp.js +78 -0
- package/dist/control/control-mcp.js.map +1 -0
- package/dist/control/errors.d.ts +44 -0
- package/dist/control/errors.d.ts.map +1 -0
- package/dist/control/errors.js +93 -0
- package/dist/control/errors.js.map +1 -0
- package/dist/control/hello.d.ts +39 -0
- package/dist/control/hello.d.ts.map +1 -0
- package/dist/control/hello.js +80 -0
- package/dist/control/hello.js.map +1 -0
- package/dist/control/host-runtime.d.ts +32 -0
- package/dist/control/host-runtime.d.ts.map +1 -0
- package/dist/control/host-runtime.js +542 -0
- package/dist/control/host-runtime.js.map +1 -0
- package/dist/control/index.d.ts +32 -0
- package/dist/control/index.d.ts.map +1 -0
- package/dist/control/index.js +32 -0
- package/dist/control/index.js.map +1 -0
- package/dist/control/legacy-conflict.d.ts +19 -0
- package/dist/control/legacy-conflict.d.ts.map +1 -0
- package/dist/control/legacy-conflict.js +176 -0
- package/dist/control/legacy-conflict.js.map +1 -0
- package/dist/control/local-bootstrap.d.ts +21 -0
- package/dist/control/local-bootstrap.d.ts.map +1 -0
- package/dist/control/local-bootstrap.js +224 -0
- package/dist/control/local-bootstrap.js.map +1 -0
- package/dist/control/modes.d.ts +60 -0
- package/dist/control/modes.d.ts.map +1 -0
- package/dist/control/modes.js +86 -0
- package/dist/control/modes.js.map +1 -0
- package/dist/control/project-admin-cli.d.ts +3 -0
- package/dist/control/project-admin-cli.d.ts.map +1 -0
- package/dist/control/project-admin-cli.js +155 -0
- package/dist/control/project-admin-cli.js.map +1 -0
- package/dist/control/project-registry.d.ts +20 -0
- package/dist/control/project-registry.d.ts.map +1 -0
- package/dist/control/project-registry.js +181 -0
- package/dist/control/project-registry.js.map +1 -0
- package/dist/control/runtime-checkpoint.d.ts +11 -0
- package/dist/control/runtime-checkpoint.d.ts.map +1 -0
- package/dist/control/runtime-checkpoint.js +39 -0
- package/dist/control/runtime-checkpoint.js.map +1 -0
- package/dist/control/runtime-provider.d.ts +100 -0
- package/dist/control/runtime-provider.d.ts.map +1 -0
- package/dist/control/runtime-provider.js +258 -0
- package/dist/control/runtime-provider.js.map +1 -0
- package/dist/control/schema/approval.d.ts +108 -0
- package/dist/control/schema/approval.d.ts.map +1 -0
- package/dist/control/schema/approval.js +65 -0
- package/dist/control/schema/approval.js.map +1 -0
- package/dist/control/schema/commands.d.ts +663 -0
- package/dist/control/schema/commands.d.ts.map +1 -0
- package/dist/control/schema/commands.js +147 -0
- package/dist/control/schema/commands.js.map +1 -0
- package/dist/control/schema/common.d.ts +24 -0
- package/dist/control/schema/common.d.ts.map +1 -0
- package/dist/control/schema/common.js +38 -0
- package/dist/control/schema/common.js.map +1 -0
- package/dist/control/schema/coordinator.d.ts +98 -0
- package/dist/control/schema/coordinator.d.ts.map +1 -0
- package/dist/control/schema/coordinator.js +87 -0
- package/dist/control/schema/coordinator.js.map +1 -0
- package/dist/control/schema/evidence.d.ts +140 -0
- package/dist/control/schema/evidence.d.ts.map +1 -0
- package/dist/control/schema/evidence.js +64 -0
- package/dist/control/schema/evidence.js.map +1 -0
- package/dist/control/schema/header.d.ts +79 -0
- package/dist/control/schema/header.d.ts.map +1 -0
- package/dist/control/schema/header.js +66 -0
- package/dist/control/schema/header.js.map +1 -0
- package/dist/control/schema/index.d.ts +31 -0
- package/dist/control/schema/index.d.ts.map +1 -0
- package/dist/control/schema/index.js +31 -0
- package/dist/control/schema/index.js.map +1 -0
- package/dist/control/schema/plan.d.ts +291 -0
- package/dist/control/schema/plan.d.ts.map +1 -0
- package/dist/control/schema/plan.js +80 -0
- package/dist/control/schema/plan.js.map +1 -0
- package/dist/control/schema/policy.d.ts +96 -0
- package/dist/control/schema/policy.d.ts.map +1 -0
- package/dist/control/schema/policy.js +73 -0
- package/dist/control/schema/policy.js.map +1 -0
- package/dist/control/schema/run.d.ts +61 -0
- package/dist/control/schema/run.d.ts.map +1 -0
- package/dist/control/schema/run.js +56 -0
- package/dist/control/schema/run.js.map +1 -0
- package/dist/control/schema/te-mirrors.d.ts +145 -0
- package/dist/control/schema/te-mirrors.d.ts.map +1 -0
- package/dist/control/schema/te-mirrors.js +145 -0
- package/dist/control/schema/te-mirrors.js.map +1 -0
- package/dist/control/schema/transport.d.ts +479 -0
- package/dist/control/schema/transport.d.ts.map +1 -0
- package/dist/control/schema/transport.js +181 -0
- package/dist/control/schema/transport.js.map +1 -0
- package/dist/control/singleton.d.ts +135 -0
- package/dist/control/singleton.d.ts.map +1 -0
- package/dist/control/singleton.js +607 -0
- package/dist/control/singleton.js.map +1 -0
- package/dist/control/store/coordinator-store.d.ts +143 -0
- package/dist/control/store/coordinator-store.d.ts.map +1 -0
- package/dist/control/store/coordinator-store.js +620 -0
- package/dist/control/store/coordinator-store.js.map +1 -0
- package/dist/control/store/evidence-adapter.d.ts +10 -0
- package/dist/control/store/evidence-adapter.d.ts.map +1 -0
- package/dist/control/store/evidence-adapter.js +114 -0
- package/dist/control/store/evidence-adapter.js.map +1 -0
- package/dist/control/store/evidence-explanation.d.ts +55 -0
- package/dist/control/store/evidence-explanation.d.ts.map +1 -0
- package/dist/control/store/evidence-explanation.js +50 -0
- package/dist/control/store/evidence-explanation.js.map +1 -0
- package/dist/control/store/evidence-store.d.ts +143 -0
- package/dist/control/store/evidence-store.d.ts.map +1 -0
- package/dist/control/store/evidence-store.js +437 -0
- package/dist/control/store/evidence-store.js.map +1 -0
- package/dist/control/store/index.d.ts +3 -0
- package/dist/control/store/index.d.ts.map +1 -0
- package/dist/control/store/index.js +2 -0
- package/dist/control/store/index.js.map +1 -0
- package/dist/control/store/journal.d.ts +270 -0
- package/dist/control/store/journal.d.ts.map +1 -0
- package/dist/control/store/journal.js +50 -0
- package/dist/control/store/journal.js.map +1 -0
- package/dist/control/store/project-lifecycle.d.ts +49 -0
- package/dist/control/store/project-lifecycle.d.ts.map +1 -0
- package/dist/control/store/project-lifecycle.js +288 -0
- package/dist/control/store/project-lifecycle.js.map +1 -0
- package/dist/control/store/store.d.ts +93 -0
- package/dist/control/store/store.d.ts.map +1 -0
- package/dist/control/store/store.js +873 -0
- package/dist/control/store/store.js.map +1 -0
- package/dist/control/te-provider.d.ts +86 -0
- package/dist/control/te-provider.d.ts.map +1 -0
- package/dist/control/te-provider.js +131 -0
- package/dist/control/te-provider.js.map +1 -0
- package/dist/control/uds.d.ts +114 -0
- package/dist/control/uds.d.ts.map +1 -0
- package/dist/control/uds.js +456 -0
- package/dist/control/uds.js.map +1 -0
- package/dist/control/web-console/view.d.ts +5 -0
- package/dist/control/web-console/view.d.ts.map +1 -0
- package/dist/control/web-console/view.js +122 -0
- package/dist/control/web-console/view.js.map +1 -0
- package/dist/control/web-console.d.ts +50 -0
- package/dist/control/web-console.d.ts.map +1 -0
- package/dist/control/web-console.js +317 -0
- package/dist/control/web-console.js.map +1 -0
- package/dist/mcp/jsonrpc.d.ts.map +1 -1
- package/dist/mcp/jsonrpc.js +12 -3
- package/dist/mcp/jsonrpc.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +26 -17
- package/dist/mcp/server.js.map +1 -1
- package/package.json +13 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-bootstrap.js","sourceRoot":"","sources":["../../../taskflow-control/src/local-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* controlMode selection + fail-closed mode contracts (P13 / RFC §5, D5).
|
|
3
|
+
*
|
|
4
|
+
* - auto (default): ensure registry + project store; start or attach the user
|
|
5
|
+
* singleton multi-mount control; control cannot run ⇒ fail closed.
|
|
6
|
+
* - coordinated: external control required; down ⇒ fail closed.
|
|
7
|
+
* - standalone: explicit; in-process ControlHost opens the same project
|
|
8
|
+
* ControlStore; single-owner lease; no global concurrency claims.
|
|
9
|
+
*
|
|
10
|
+
* Silent fallback auto → standalone is FORBIDDEN (P13). Only an explicit
|
|
11
|
+
* `controlMode: standalone` may run standalone.
|
|
12
|
+
*/
|
|
13
|
+
export declare const CONTROL_MODES: readonly ["auto", "coordinated", "standalone"];
|
|
14
|
+
export type ControlMode = (typeof CONTROL_MODES)[number];
|
|
15
|
+
/** Environment override for the mode (documented convenience; CLI wins). */
|
|
16
|
+
export declare const CONTROL_MODE_ENV = "TASKFLOW_CONTROL_MODE";
|
|
17
|
+
export interface ControlModeContract {
|
|
18
|
+
mode: ControlMode;
|
|
19
|
+
/** auto/coordinated participate in the user singleton; standalone is explicit in-process. */
|
|
20
|
+
singletonRequired: boolean;
|
|
21
|
+
/** coordinated requires an existing external control; auto may start one. */
|
|
22
|
+
externalControlRequired: boolean;
|
|
23
|
+
/** standalone never claims global (cross-project) concurrency authority. */
|
|
24
|
+
globalAuthority: boolean;
|
|
25
|
+
failClosedDescription: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function controlModeContract(mode: ControlMode): ControlModeContract;
|
|
28
|
+
/**
|
|
29
|
+
* Parse the control mode. `undefined` / empty / "auto" → auto (fresh-install
|
|
30
|
+
* default, P13). Any other string fails closed (TF_BOOTSTRAP_FAILED) — an
|
|
31
|
+
* unknown mode must never silently choose a weaker one.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseControlMode(value: string | undefined): ControlMode;
|
|
34
|
+
/** Resolve mode from explicit option first, then the environment. */
|
|
35
|
+
export declare function resolveControlMode(explicit?: string): ControlMode;
|
|
36
|
+
export type ControlStartDecision = {
|
|
37
|
+
mode: "auto";
|
|
38
|
+
action: "start-or-attach";
|
|
39
|
+
singletonRequired: true;
|
|
40
|
+
globalAuthority: true;
|
|
41
|
+
} | {
|
|
42
|
+
mode: "coordinated";
|
|
43
|
+
action: "attach-external";
|
|
44
|
+
singletonRequired: true;
|
|
45
|
+
globalAuthority: true;
|
|
46
|
+
} | {
|
|
47
|
+
mode: "standalone";
|
|
48
|
+
action: "standalone";
|
|
49
|
+
singletonRequired: false;
|
|
50
|
+
globalAuthority: false;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Decide what the ControlHost must do for a mode, failing closed when the
|
|
54
|
+
* mode's control cannot be satisfied:
|
|
55
|
+
* - auto + control unavailable → TF_BOOTSTRAP_FAILED (never silent standalone)
|
|
56
|
+
* - coordinated + control unavailable → TF_JOURNAL_UNAVAILABLE (control down)
|
|
57
|
+
* - standalone → explicit standalone regardless of singleton availability
|
|
58
|
+
*/
|
|
59
|
+
export declare function resolveControlStart(mode: ControlMode, controlAvailable: boolean): ControlStartDecision;
|
|
60
|
+
//# sourceMappingURL=modes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../../taskflow-control/src/modes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,eAAO,MAAM,aAAa,YAAI,MAAM,EAAE,aAAa,EAAE,YAAY,CAAU,CAAC;AAC5E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,6FAA6F;IAC7F,iBAAiB,EAAE,OAAO,CAAC;IAC3B,6EAA6E;IAC7E,uBAAuB,EAAE,OAAO,CAAC;IACjC,4EAA4E;IAC5E,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;CAC9B;AA0BD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,mBAAmB,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAKvE;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAEjE;AAED,MAAM,MAAM,oBAAoB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,iBAAiB,EAAE,IAAI,CAAC;IAAC,eAAe,EAAE,IAAI,CAAA;CAAE,GAC3F;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,iBAAiB,EAAE,IAAI,CAAC;IAAC,eAAe,EAAE,IAAI,CAAA;CAAE,GAClG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,iBAAiB,EAAE,KAAK,CAAC;IAAC,eAAe,EAAE,KAAK,CAAA;CAAE,CAAC;AAElG;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,GAAG,oBAAoB,CAwBtG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* controlMode selection + fail-closed mode contracts (P13 / RFC §5, D5).
|
|
3
|
+
*
|
|
4
|
+
* - auto (default): ensure registry + project store; start or attach the user
|
|
5
|
+
* singleton multi-mount control; control cannot run ⇒ fail closed.
|
|
6
|
+
* - coordinated: external control required; down ⇒ fail closed.
|
|
7
|
+
* - standalone: explicit; in-process ControlHost opens the same project
|
|
8
|
+
* ControlStore; single-owner lease; no global concurrency claims.
|
|
9
|
+
*
|
|
10
|
+
* Silent fallback auto → standalone is FORBIDDEN (P13). Only an explicit
|
|
11
|
+
* `controlMode: standalone` may run standalone.
|
|
12
|
+
*/
|
|
13
|
+
import { ControlError, bootstrapFailed } from "./errors.js";
|
|
14
|
+
export const CONTROL_MODES = ["auto", "coordinated", "standalone"];
|
|
15
|
+
/** Environment override for the mode (documented convenience; CLI wins). */
|
|
16
|
+
export const CONTROL_MODE_ENV = "TASKFLOW_CONTROL_MODE";
|
|
17
|
+
const MODE_CONTRACTS = {
|
|
18
|
+
auto: {
|
|
19
|
+
mode: "auto",
|
|
20
|
+
singletonRequired: true,
|
|
21
|
+
externalControlRequired: false,
|
|
22
|
+
globalAuthority: true,
|
|
23
|
+
failClosedDescription: "auto fails closed when the user singleton control cannot run; it never falls back to standalone",
|
|
24
|
+
},
|
|
25
|
+
coordinated: {
|
|
26
|
+
mode: "coordinated",
|
|
27
|
+
singletonRequired: true,
|
|
28
|
+
externalControlRequired: true,
|
|
29
|
+
globalAuthority: true,
|
|
30
|
+
failClosedDescription: "coordinated fails closed when the external control is down",
|
|
31
|
+
},
|
|
32
|
+
standalone: {
|
|
33
|
+
mode: "standalone",
|
|
34
|
+
singletonRequired: false,
|
|
35
|
+
externalControlRequired: false,
|
|
36
|
+
globalAuthority: false,
|
|
37
|
+
failClosedDescription: "standalone is explicit only; single-owner lease, no global concurrency claims",
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
export function controlModeContract(mode) {
|
|
41
|
+
return MODE_CONTRACTS[mode];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse the control mode. `undefined` / empty / "auto" → auto (fresh-install
|
|
45
|
+
* default, P13). Any other string fails closed (TF_BOOTSTRAP_FAILED) — an
|
|
46
|
+
* unknown mode must never silently choose a weaker one.
|
|
47
|
+
*/
|
|
48
|
+
export function parseControlMode(value) {
|
|
49
|
+
const candidate = value?.trim().toLowerCase();
|
|
50
|
+
if (candidate === undefined || candidate === "" || candidate === "auto")
|
|
51
|
+
return "auto";
|
|
52
|
+
if (CONTROL_MODES.includes(candidate))
|
|
53
|
+
return candidate;
|
|
54
|
+
throw bootstrapFailed(`invalid controlMode ${JSON.stringify(value)}; expected auto|coordinated|standalone`);
|
|
55
|
+
}
|
|
56
|
+
/** Resolve mode from explicit option first, then the environment. */
|
|
57
|
+
export function resolveControlMode(explicit) {
|
|
58
|
+
return parseControlMode(explicit ?? process.env[CONTROL_MODE_ENV]);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Decide what the ControlHost must do for a mode, failing closed when the
|
|
62
|
+
* mode's control cannot be satisfied:
|
|
63
|
+
* - auto + control unavailable → TF_BOOTSTRAP_FAILED (never silent standalone)
|
|
64
|
+
* - coordinated + control unavailable → TF_JOURNAL_UNAVAILABLE (control down)
|
|
65
|
+
* - standalone → explicit standalone regardless of singleton availability
|
|
66
|
+
*/
|
|
67
|
+
export function resolveControlStart(mode, controlAvailable) {
|
|
68
|
+
switch (mode) {
|
|
69
|
+
case "auto": {
|
|
70
|
+
if (!controlAvailable) {
|
|
71
|
+
throw bootstrapFailed("auto mode requires the user singleton control; control cannot run and silent fallback to standalone is forbidden (P13)");
|
|
72
|
+
}
|
|
73
|
+
return { mode: "auto", action: "start-or-attach", singletonRequired: true, globalAuthority: true };
|
|
74
|
+
}
|
|
75
|
+
case "coordinated": {
|
|
76
|
+
if (!controlAvailable) {
|
|
77
|
+
throw new ControlError("TF_JOURNAL_UNAVAILABLE", "coordinated mode requires an external control which is down; failing closed (P13)", { recoveryAction: "refresh", sideEffects: "none" });
|
|
78
|
+
}
|
|
79
|
+
return { mode: "coordinated", action: "attach-external", singletonRequired: true, globalAuthority: true };
|
|
80
|
+
}
|
|
81
|
+
case "standalone": {
|
|
82
|
+
return { mode: "standalone", action: "standalone", singletonRequired: false, globalAuthority: false };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=modes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modes.js","sourceRoot":"","sources":["../../../taskflow-control/src/modes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,CAAU,CAAC;AAG5E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAaxD,MAAM,cAAc,GAA6C;IAChE,IAAI,EAAE;QACL,IAAI,EAAE,MAAM;QACZ,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,KAAK;QAC9B,eAAe,EAAE,IAAI;QACrB,qBAAqB,EAAE,iGAAiG;KACxH;IACD,WAAW,EAAE;QACZ,IAAI,EAAE,aAAa;QACnB,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,IAAI;QAC7B,eAAe,EAAE,IAAI;QACrB,qBAAqB,EAAE,4DAA4D;KACnF;IACD,UAAU,EAAE;QACX,IAAI,EAAE,YAAY;QAClB,iBAAiB,EAAE,KAAK;QACxB,uBAAuB,EAAE,KAAK;QAC9B,eAAe,EAAE,KAAK;QACtB,qBAAqB,EAAE,+EAA+E;KACtG;CACD,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACpD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACzD,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvF,IAAK,aAAmC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAwB,CAAC;IAC9F,MAAM,eAAe,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC7G,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,kBAAkB,CAAC,QAAiB;IACnD,OAAO,gBAAgB,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACpE,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAiB,EAAE,gBAAyB;IAC/E,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,MAAM,EAAE,CAAC;YACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvB,MAAM,eAAe,CACpB,wHAAwH,CACxH,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QACpG,CAAC;QACD,KAAK,aAAa,EAAE,CAAC;YACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvB,MAAM,IAAI,YAAY,CACrB,wBAAwB,EACxB,mFAAmF,EACnF,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,CAClD,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QAC3G,CAAC;QACD,KAAK,YAAY,EAAE,CAAC;YACnB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;QACvG,CAAC;IACF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-admin-cli.d.ts","sourceRoot":"","sources":["../../../taskflow-control/src/project-admin-cli.ts"],"names":[],"mappings":";AA4CA,wBAAsB,kBAAkB,CAAC,IAAI,WAAsB,GAAE,OAAO,CAAC,MAAM,CAAC,CAwCnF"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/** Offline, explicit local-operator P3/P10 workflows. No RPC request can create
|
|
3
|
+
* this authority; it is bound to the invoking OS user and configured paths. */
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { randomUUID } from "node:crypto";
|
|
7
|
+
import { pathToFileURL } from "node:url";
|
|
8
|
+
import { Value } from "typebox/value";
|
|
9
|
+
import { ControlError } from "./errors.js";
|
|
10
|
+
import { ControlStoreHeaderSchema } from "./schema/header.js";
|
|
11
|
+
import { readPrivateFile } from "./local-bootstrap.js";
|
|
12
|
+
import { createProjectClone, exportProjectEvidence, rebindMovedProject } from "./store/project-lifecycle.js";
|
|
13
|
+
const HELP = `Offline project identity and evidence maintenance (local OS owner only).
|
|
14
|
+
|
|
15
|
+
taskflow-project-admin move-rebind --store MOVED_STORE
|
|
16
|
+
taskflow-project-admin clone --store SOURCE_STORE --destination NEW_STORE
|
|
17
|
+
taskflow-project-admin export --store STORE --output NEW_JSON [--kind readonly|lossy]
|
|
18
|
+
|
|
19
|
+
Stop writers before moving the directory. move-rebind verifies the moved store's
|
|
20
|
+
original device/inode and refuses copies, active writers, or ambiguous runs.
|
|
21
|
+
Clone creates an empty ledger with fresh project/domain IDs; source history stays
|
|
22
|
+
untouched. Export writes a new private JSON file, preserves damaged journal bytes
|
|
23
|
+
in readonly mode, and always declares executePromise:false. No destination is
|
|
24
|
+
overwritten. Source store and destination parent must be owned private directories.
|
|
25
|
+
`;
|
|
26
|
+
function fail(message) { throw new ControlError("TF_POLICY_DENIED", message, { recoveryAction: "operator", sideEffects: "none" }); }
|
|
27
|
+
function privateDirectory(input) {
|
|
28
|
+
const absolute = path.resolve(input);
|
|
29
|
+
for (let current = absolute;;) {
|
|
30
|
+
const stat = fs.lstatSync(current);
|
|
31
|
+
if (stat.isSymbolicLink())
|
|
32
|
+
fail("operator paths cannot contain symbolic links");
|
|
33
|
+
const parent = path.dirname(current);
|
|
34
|
+
if (parent === current)
|
|
35
|
+
break;
|
|
36
|
+
current = parent;
|
|
37
|
+
}
|
|
38
|
+
const stat = fs.lstatSync(absolute);
|
|
39
|
+
if (!process.getuid || !stat.isDirectory() || stat.uid !== process.getuid() || (stat.mode & 0o077) !== 0)
|
|
40
|
+
fail("operator directory must be owned by this OS user with mode 0700");
|
|
41
|
+
return { path: fs.realpathSync(absolute), dev: stat.dev, ino: stat.ino };
|
|
42
|
+
}
|
|
43
|
+
function missing(file) { try {
|
|
44
|
+
fs.lstatSync(file);
|
|
45
|
+
fail("destination already exists; choose a new path");
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error.code !== "ENOENT")
|
|
49
|
+
throw error;
|
|
50
|
+
} }
|
|
51
|
+
function publishExclusive(file, bytes, check) {
|
|
52
|
+
check();
|
|
53
|
+
missing(file);
|
|
54
|
+
const temporary = path.join(path.dirname(file), `.project-export-${randomUUID()}`);
|
|
55
|
+
const fd = fs.openSync(temporary, "wx", 0o600);
|
|
56
|
+
try {
|
|
57
|
+
fs.writeFileSync(fd, bytes);
|
|
58
|
+
fs.fsyncSync(fd);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
fs.closeSync(fd);
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
check();
|
|
65
|
+
fs.linkSync(temporary, file);
|
|
66
|
+
const dir = fs.openSync(path.dirname(file), "r");
|
|
67
|
+
try {
|
|
68
|
+
fs.fsyncSync(dir);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
fs.closeSync(dir);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
fs.unlinkSync(temporary);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export async function runProjectAdminCli(argv = process.argv.slice(2)) {
|
|
79
|
+
if (argv.length === 0 || argv.includes("--help")) {
|
|
80
|
+
process.stdout.write(HELP);
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
const operation = argv[0];
|
|
84
|
+
if (!["move-rebind", "clone", "export"].includes(operation))
|
|
85
|
+
fail("unknown project administration operation");
|
|
86
|
+
const flags = new Map();
|
|
87
|
+
for (let index = 1; index < argv.length; index += 2) {
|
|
88
|
+
const key = argv[index], value = argv[index + 1];
|
|
89
|
+
if (!["--store", "--destination", "--output", "--kind"].includes(key) || !value || value.startsWith("--") || flags.has(key))
|
|
90
|
+
fail("invalid or duplicate administration argument");
|
|
91
|
+
flags.set(key, value);
|
|
92
|
+
}
|
|
93
|
+
if (!flags.has("--store"))
|
|
94
|
+
fail("--store is required");
|
|
95
|
+
const allowed = operation === "move-rebind" ? ["--store"] : operation === "clone" ? ["--store", "--destination"] : ["--store", "--output", "--kind"];
|
|
96
|
+
if ([...flags.keys()].some(key => !allowed.includes(key)))
|
|
97
|
+
fail("argument does not apply to this operation");
|
|
98
|
+
const source = privateDirectory(flags.get("--store"));
|
|
99
|
+
const raw = JSON.parse(readPrivateFile(path.join(source.path, "header")).toString("utf8"));
|
|
100
|
+
if (!Value.Check(ControlStoreHeaderSchema, raw))
|
|
101
|
+
fail("invalid authoritative store header");
|
|
102
|
+
const header = raw, uid = process.getuid();
|
|
103
|
+
const destinationInput = operation === "clone" ? flags.get("--destination") : operation === "export" ? flags.get("--output") : undefined;
|
|
104
|
+
if (operation !== "move-rebind" && !destinationInput)
|
|
105
|
+
fail(operation === "clone" ? "--destination is required" : "--output is required");
|
|
106
|
+
const destination = destinationInput ? path.resolve(destinationInput) : undefined;
|
|
107
|
+
const parent = destination ? privateDirectory(path.dirname(destination)) : undefined;
|
|
108
|
+
if (destination) {
|
|
109
|
+
if (destination === source.path || destination.startsWith(source.path + path.sep))
|
|
110
|
+
fail("destination must be outside the source ledger");
|
|
111
|
+
missing(destination);
|
|
112
|
+
}
|
|
113
|
+
const token = Object.freeze(Object.create(null));
|
|
114
|
+
const check = () => {
|
|
115
|
+
if (process.getuid() !== uid)
|
|
116
|
+
fail("operator OS identity changed");
|
|
117
|
+
const current = privateDirectory(source.path);
|
|
118
|
+
if (current.dev !== source.dev || current.ino !== source.ino)
|
|
119
|
+
fail("source directory identity changed");
|
|
120
|
+
if (parent) {
|
|
121
|
+
const latest = privateDirectory(parent.path);
|
|
122
|
+
if (latest.dev !== parent.dev || latest.ino !== parent.ino)
|
|
123
|
+
fail("destination parent identity changed");
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const authority = { authorize(context, scope) {
|
|
127
|
+
check();
|
|
128
|
+
if (context !== token || scope.operation !== operation || scope.header.projectId !== header.projectId || scope.header.controlDomainId !== header.controlDomainId)
|
|
129
|
+
fail("operator context does not authorize this identity operation");
|
|
130
|
+
if (scope.destination !== undefined && scope.destination !== (operation === "move-rebind" ? source.path : destination))
|
|
131
|
+
fail("operator destination changed");
|
|
132
|
+
return { principal: `os-user:${uid}`, operator: true };
|
|
133
|
+
} };
|
|
134
|
+
if (operation === "move-rebind") {
|
|
135
|
+
const result = await rebindMovedProject(source.path, token, authority);
|
|
136
|
+
process.stdout.write(JSON.stringify({ operation, header: result }) + "\n");
|
|
137
|
+
return 0;
|
|
138
|
+
}
|
|
139
|
+
if (operation === "clone") {
|
|
140
|
+
const result = await createProjectClone(source.path, destination, token, authority);
|
|
141
|
+
process.stdout.write(JSON.stringify({ operation, header: result, historyCopied: false }) + "\n");
|
|
142
|
+
return 0;
|
|
143
|
+
}
|
|
144
|
+
const kind = flags.get("--kind") ?? "readonly";
|
|
145
|
+
if (kind !== "readonly" && kind !== "lossy")
|
|
146
|
+
fail("export kind must be readonly or lossy");
|
|
147
|
+
const result = await exportProjectEvidence(source.path, kind, token, authority);
|
|
148
|
+
publishExclusive(destination, Buffer.from(JSON.stringify(result, null, 2) + "\n"), check);
|
|
149
|
+
process.stdout.write(JSON.stringify({ operation, exportKind: kind, executePromise: false, integrity: result.integrity, fileCount: result.files.length, output: destination }) + "\n");
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
if (process.argv[1] && fs.existsSync(process.argv[1]) && import.meta.url === pathToFileURL(fs.realpathSync(process.argv[1])).href) {
|
|
153
|
+
runProjectAdminCli().then(code => { process.exitCode = code; }, error => { process.stderr.write(JSON.stringify({ error: error instanceof ControlError ? error.code : "TF_BOOTSTRAP_FAILED", message: error instanceof Error ? error.message : "project administration failed" }) + "\n"); process.exitCode = 1; });
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=project-admin-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-admin-cli.js","sourceRoot":"","sources":["../../../taskflow-control/src/project-admin-cli.ts"],"names":[],"mappings":";AACA;+EAC+E;AAC/E,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,kBAAkB,EACL,MAAM,8BAA8B,CAAC;AAEtG,MAAM,IAAI,GAAG;;;;;;;;;;;;CAYZ,CAAC;AACF,SAAS,IAAI,CAAC,OAAe,IAAW,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,OAAO,EAAE,EAAC,cAAc,EAAC,UAAU,EAAC,WAAW,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAC;AAC9I,SAAS,gBAAgB,CAAC,KAAY;IACrC,MAAM,QAAQ,GAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,KAAI,IAAI,OAAO,GAAC,QAAQ,IAAG,CAAC;QAAA,MAAM,IAAI,GAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAAA,IAAG,IAAI,CAAC,cAAc,EAAE;YAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAAA,MAAM,MAAM,GAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAAA,IAAG,MAAM,KAAG,OAAO;YAAC,MAAM;QAAA,OAAO,GAAC,MAAM,CAAC;IAAA,CAAC;IACxN,MAAM,IAAI,GAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,GAAG,KAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAC,KAAK,CAAC,KAAG,CAAC;QAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAC1K,OAAO,EAAC,IAAI,EAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAC,GAAG,EAAC,IAAI,CAAC,GAAG,EAAC,GAAG,EAAC,IAAI,CAAC,GAAG,EAAC,CAAC;AACnE,CAAC;AACD,SAAS,OAAO,CAAC,IAAW,IAAI,IAAI,CAAC;IAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAAA,IAAI,CAAC,+CAA+C,CAAC,CAAC;AAAA,CAAC;AAAA,OAAM,KAAK,EAAC,CAAC;IAAA,IAAI,KAA+B,CAAC,IAAI,KAAG,QAAQ;QAAC,MAAM,KAAK,CAAC;AAAA,CAAC,CAAC,CAAC;AAC/L,SAAS,gBAAgB,CAAC,IAAW,EAAC,KAAY,EAAC,KAAc;IAChE,KAAK,EAAE,CAAC;IAAA,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,SAAS,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,mBAAmB,UAAU,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,EAAE,GAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAC,IAAI,EAAC,KAAK,CAAC,CAAC;IAC3C,IAAG,CAAC;QAAA,EAAE,CAAC,aAAa,CAAC,EAAE,EAAC,KAAK,CAAC,CAAC;QAAA,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAAA,CAAC;YAAO,CAAC;QAAA,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAAA,CAAC;IAC3E,IAAG,CAAC;QAAA,KAAK,EAAE,CAAC;QAAA,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAC,IAAI,CAAC,CAAC;QAAA,MAAM,GAAG,GAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,GAAG,CAAC,CAAC;QAAA,IAAG,CAAC;YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAAA,CAAC;gBAAO,CAAC;YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAAA,CAAC;IAAA,CAAC;YAClI,CAAC;QAAA,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAAA,CAAC;AACnC,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,IAAG,IAAI,CAAC,MAAM,KAAG,CAAC,IAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAC,CAAC;QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAA,OAAO,CAAC,CAAC;IAAA,CAAC;IAClF,MAAM,SAAS,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAA,IAAG,CAAC,CAAC,aAAa,EAAC,OAAO,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAClI,MAAM,KAAK,GAAC,IAAI,GAAG,EAAiB,CAAC;IACrC,KAAI,IAAI,KAAK,GAAC,CAAC,EAAC,KAAK,GAAC,IAAI,CAAC,MAAM,EAAC,KAAK,IAAE,CAAC,EAAC,CAAC;QAAA,MAAM,GAAG,GAAC,IAAI,CAAC,KAAK,CAAC,EAAC,KAAK,GAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;QAAA,IAAG,CAAC,CAAC,SAAS,EAAC,eAAe,EAAC,UAAU,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAE,CAAC,KAAK,IAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAC,KAAK,CAAC,CAAC;IAAA,CAAC;IACnR,IAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrD,MAAM,OAAO,GAAC,SAAS,KAAG,aAAa,CAAA,CAAC,CAAA,CAAC,SAAS,CAAC,CAAA,CAAC,CAAA,SAAS,KAAG,OAAO,CAAA,CAAC,CAAA,CAAC,SAAS,EAAC,eAAe,CAAC,CAAA,CAAC,CAAA,CAAC,SAAS,EAAC,UAAU,EAAC,QAAQ,CAAC,CAAC;IACpI,IAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAA,EAAE,CAAA,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACzG,MAAM,MAAM,GAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,CAAC;IACrD,MAAM,GAAG,GAAS,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAChG,IAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,EAAC,GAAG,CAAC;QAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACzF,MAAM,MAAM,GAAC,GAAG,EAAE,GAAG,GAAC,OAAO,CAAC,MAAO,EAAE,CAAC;IACxC,MAAM,gBAAgB,GAAC,SAAS,KAAG,OAAO,CAAA,CAAC,CAAA,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA,CAAC,CAAA,SAAS,KAAG,QAAQ,CAAA,CAAC,CAAA,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,CAAC,CAAA,SAAS,CAAC;IAC3H,IAAG,SAAS,KAAG,aAAa,IAAE,CAAC,gBAAgB;QAAC,IAAI,CAAC,SAAS,KAAG,OAAO,CAAA,CAAC,CAAA,2BAA2B,CAAA,CAAC,CAAA,sBAAsB,CAAC,CAAC;IAC7H,MAAM,WAAW,GAAC,gBAAgB,CAAA,CAAC,CAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA,CAAC,CAAA,SAAS,CAAC;IAC5E,MAAM,MAAM,GAAC,WAAW,CAAA,CAAC,CAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA,CAAC,CAAA,SAAS,CAAC;IAC/E,IAAG,WAAW,EAAC,CAAC;QAAA,IAAG,WAAW,KAAG,MAAM,CAAC,IAAI,IAAE,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAC,IAAI,CAAC,GAAG,CAAC;YAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAAA,OAAO,CAAC,WAAW,CAAC,CAAC;IAAA,CAAC;IACvK,MAAM,KAAK,GAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC;IACzD,MAAM,KAAK,GAAC,GAAE,EAAE;QACf,IAAG,OAAO,CAAC,MAAO,EAAE,KAAG,GAAG;YAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAChE,MAAM,OAAO,GAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAA,IAAG,OAAO,CAAC,GAAG,KAAG,MAAM,CAAC,GAAG,IAAE,OAAO,CAAC,GAAG,KAAG,MAAM,CAAC,GAAG;YAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC5I,IAAG,MAAM,EAAC,CAAC;YAAA,MAAM,MAAM,GAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAA,IAAG,MAAM,CAAC,GAAG,KAAG,MAAM,CAAC,GAAG,IAAE,MAAM,CAAC,GAAG,KAAG,MAAM,CAAC,GAAG;gBAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAAA,CAAC;IACxJ,CAAC,CAAC;IACF,MAAM,SAAS,GAAmC,EAAC,SAAS,CAAC,OAAO,EAAC,KAAK;YACzE,KAAK,EAAE,CAAC;YAAA,IAAG,OAAO,KAAG,KAAK,IAAE,KAAK,CAAC,SAAS,KAAG,SAAsC,IAAE,KAAK,CAAC,MAAM,CAAC,SAAS,KAAG,MAAM,CAAC,SAAS,IAAE,KAAK,CAAC,MAAM,CAAC,eAAe,KAAG,MAAM,CAAC,eAAe;gBAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAC3P,IAAG,KAAK,CAAC,WAAW,KAAG,SAAS,IAAI,KAAK,CAAC,WAAW,KAAG,CAAC,SAAS,KAAG,aAAa,CAAA,CAAC,CAAA,MAAM,CAAC,IAAI,CAAA,CAAC,CAAA,WAAW,CAAC;gBAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACjJ,OAAO,EAAC,SAAS,EAAC,WAAW,GAAG,EAAE,EAAC,QAAQ,EAAC,IAAI,EAAC,CAAC;QACnD,CAAC,EAAC,CAAC;IACH,IAAG,SAAS,KAAG,aAAa,EAAC,CAAC;QAC7B,MAAM,MAAM,GAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAC,KAAK,EAAC,SAAS,CAAC,CAAC;QACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,SAAS,EAAC,MAAM,EAAC,MAAM,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC;QAAA,OAAO,CAAC,CAAC;IAC/E,CAAC;IACD,IAAG,SAAS,KAAG,OAAO,EAAC,CAAC;QACvB,MAAM,MAAM,GAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAC,WAAY,EAAC,KAAK,EAAC,SAAS,CAAC,CAAC;QAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,SAAS,EAAC,MAAM,EAAC,MAAM,EAAC,aAAa,EAAC,KAAK,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC;QAAA,OAAO,CAAC,CAAC;IACnG,CAAC;IACD,MAAM,IAAI,GAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAE,UAAU,CAAC;IAAA,IAAG,IAAI,KAAG,UAAU,IAAE,IAAI,KAAG,OAAO;QAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC9H,MAAM,MAAM,GAAC,MAAM,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,SAAS,CAAC,CAAC;IAC3E,gBAAgB,CAAC,WAAY,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAC,IAAI,EAAC,CAAC,CAAC,GAAC,IAAI,CAAC,EAAC,KAAK,CAAC,CAAC;IACrF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,SAAS,EAAC,UAAU,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,SAAS,EAAC,MAAM,CAAC,SAAS,EAAC,SAAS,EAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAC,MAAM,EAAC,WAAW,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC;IAAA,OAAO,CAAC,CAAC;AAClL,CAAC;AACD,IAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAE,OAAO,IAAI,CAAC,GAAG,KAAG,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAC,CAAC;IAC3H,kBAAkB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAA,EAAE,GAAC,OAAO,CAAC,QAAQ,GAAC,IAAI,CAAC,CAAA,CAAC,EAAC,KAAK,CAAA,EAAE,GAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAC,KAAK,YAAY,YAAY,CAAA,CAAC,CAAA,KAAK,CAAC,IAAI,CAAA,CAAC,CAAA,qBAAqB,EAAC,OAAO,EAAC,KAAK,YAAY,KAAK,CAAA,CAAC,CAAA,KAAK,CAAC,OAAO,CAAA,CAAC,CAAA,+BAA+B,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAA,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC;AACvR,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ControlRegistryEntry } from "./schema/header.ts";
|
|
2
|
+
import { type ControlStore } from "./store/store.ts";
|
|
3
|
+
export interface ProjectMount {
|
|
4
|
+
readonly store: ControlStore;
|
|
5
|
+
readonly projectRoot: string;
|
|
6
|
+
}
|
|
7
|
+
/** Constructed by the singleton owner only. Persisted paths are discovery hints,
|
|
8
|
+
* never automatic permission to open a project or restore a run projection. */
|
|
9
|
+
export declare class ProjectRegistry {
|
|
10
|
+
#private;
|
|
11
|
+
readonly registryPath: string;
|
|
12
|
+
constructor(registryPath: string);
|
|
13
|
+
/** Paths are trusted launcher configuration; never call with unchecked RPC paths. */
|
|
14
|
+
mount(storePath: string, projectRoot?: string): ProjectMount;
|
|
15
|
+
resolve(projectId?: string): ProjectMount;
|
|
16
|
+
list(): ControlRegistryEntry[];
|
|
17
|
+
unmount(projectId: string): void;
|
|
18
|
+
close(): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=project-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-registry.d.ts","sourceRoot":"","sources":["../../../taskflow-control/src/project-registry.ts"],"names":[],"mappings":"AAMA,OAAO,EAAwD,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrH,OAAO,EAA6C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhG,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAaD;+EAC+E;AAC/E,qBAAa,eAAe;;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAM9B,YAAY,YAAY,EAAE,MAAM,EAiB/B;IAwBD,qFAAqF;IACrF,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CA4B3D;IACD,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAMxC;IACD,IAAI,IAAI,oBAAoB,EAAE,CAI7B;IACD,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAI/B;IACD,KAAK,IAAI,IAAI,CAKZ;CACD"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/** P3 discovery projection. Header identity and the mounted store remain authority. */
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { Type } from "typebox";
|
|
5
|
+
import { Value } from "typebox/value";
|
|
6
|
+
import { ControlError } from "./errors.js";
|
|
7
|
+
import { ControlRegistryEntrySchema, ControlStoreHeaderSchema } from "./schema/header.js";
|
|
8
|
+
import { openControlStore, writeJsonAtomicHardened } from "./store/store.js";
|
|
9
|
+
const RegistrySchema = Type.Object({ version: Type.Literal(1), entries: Type.Array(ControlRegistryEntrySchema) }, { additionalProperties: false });
|
|
10
|
+
function fail(message) { throw new ControlError("TF_DURABILITY_FAILED", message, { recoveryAction: "operator" }); }
|
|
11
|
+
function noLinks(target) {
|
|
12
|
+
let current = path.resolve(target);
|
|
13
|
+
for (;;) {
|
|
14
|
+
try {
|
|
15
|
+
if (fs.lstatSync(current).isSymbolicLink())
|
|
16
|
+
fail("registry refuses symbolic-link paths");
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (error.code !== "ENOENT")
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
const parent = path.dirname(current);
|
|
23
|
+
if (parent === current)
|
|
24
|
+
return;
|
|
25
|
+
current = parent;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Constructed by the singleton owner only. Persisted paths are discovery hints,
|
|
29
|
+
* never automatic permission to open a project or restore a run projection. */
|
|
30
|
+
export class ProjectRegistry {
|
|
31
|
+
registryPath;
|
|
32
|
+
#directory;
|
|
33
|
+
#directoryIdentity;
|
|
34
|
+
#mounts = new Map();
|
|
35
|
+
#entries = new Map();
|
|
36
|
+
#closed = false;
|
|
37
|
+
constructor(registryPath) {
|
|
38
|
+
this.registryPath = path.resolve(registryPath);
|
|
39
|
+
noLinks(this.registryPath);
|
|
40
|
+
this.#directory = path.dirname(this.registryPath);
|
|
41
|
+
fs.mkdirSync(this.#directory, { recursive: true, mode: 0o700 });
|
|
42
|
+
const stat = fs.lstatSync(this.#directory);
|
|
43
|
+
if (!stat.isDirectory() || process.getuid && stat.uid !== process.getuid())
|
|
44
|
+
fail("registry directory must belong to the host user");
|
|
45
|
+
this.#directoryIdentity = { dev: stat.dev, ino: stat.ino };
|
|
46
|
+
if (process.platform !== "win32")
|
|
47
|
+
fs.chmodSync(this.#directory, 0o700);
|
|
48
|
+
try {
|
|
49
|
+
const raw = JSON.parse(fs.readFileSync(this.registryPath, "utf8"));
|
|
50
|
+
if (!Value.Check(RegistrySchema, raw))
|
|
51
|
+
fail("malformed registry projection; preserve it for operator repair");
|
|
52
|
+
for (const entry of raw.entries) {
|
|
53
|
+
if (this.#entries.has(entry.projectId) || [...this.#entries.values()].some((item) => item.controlDomainId === entry.controlDomainId))
|
|
54
|
+
fail("registry contains conflicting identities");
|
|
55
|
+
this.#entries.set(entry.projectId, { ...entry, mountState: "unmounted" });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error.code !== "ENOENT")
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
#checkDirectory() {
|
|
64
|
+
if (this.#closed)
|
|
65
|
+
fail("project registry is closed");
|
|
66
|
+
noLinks(this.registryPath);
|
|
67
|
+
const stat = fs.lstatSync(this.#directory);
|
|
68
|
+
if (!stat.isDirectory() || stat.dev !== this.#directoryIdentity.dev || stat.ino !== this.#directoryIdentity.ino)
|
|
69
|
+
fail("registry directory identity changed");
|
|
70
|
+
}
|
|
71
|
+
#checkMount(mount) {
|
|
72
|
+
noLinks(mount.store.storePath);
|
|
73
|
+
noLinks(mount.projectRoot);
|
|
74
|
+
const root = fs.lstatSync(mount.projectRoot), dir = fs.lstatSync(mount.store.storePath);
|
|
75
|
+
const header = mount.store.header;
|
|
76
|
+
if (root.dev !== mount.rootDevice || root.ino !== mount.rootInode || !root.isDirectory()
|
|
77
|
+
|| String(dir.dev) !== header.directoryBinding.device || String(dir.ino) !== header.directoryBinding.inode
|
|
78
|
+
|| fs.realpathSync(mount.store.storePath) !== header.directoryBinding.canonicalPath)
|
|
79
|
+
fail("mounted project directory identity changed");
|
|
80
|
+
let durable;
|
|
81
|
+
try {
|
|
82
|
+
const file = path.join(mount.store.storePath, "header");
|
|
83
|
+
noLinks(file);
|
|
84
|
+
durable = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
fail("mounted project header is absent or unreadable");
|
|
88
|
+
}
|
|
89
|
+
if (!Value.Check(ControlStoreHeaderSchema, durable) || JSON.stringify(durable) !== JSON.stringify(header))
|
|
90
|
+
fail("mounted project header changed");
|
|
91
|
+
if (mount.store.status !== "healthy")
|
|
92
|
+
fail("mounted project store is not healthy");
|
|
93
|
+
}
|
|
94
|
+
#save() {
|
|
95
|
+
this.#checkDirectory();
|
|
96
|
+
writeJsonAtomicHardened(this.registryPath, { version: 1, entries: [...this.#entries.values()] });
|
|
97
|
+
}
|
|
98
|
+
/** Paths are trusted launcher configuration; never call with unchecked RPC paths. */
|
|
99
|
+
mount(storePath, projectRoot) {
|
|
100
|
+
this.#checkDirectory();
|
|
101
|
+
noLinks(storePath);
|
|
102
|
+
const resolved = path.resolve(storePath);
|
|
103
|
+
const rootPath = projectRoot ?? (path.basename(resolved) === "control" && path.basename(path.dirname(resolved)) === ".taskflow"
|
|
104
|
+
? path.dirname(path.dirname(resolved)) : fail("nonstandard store path requires an explicit project root"));
|
|
105
|
+
noLinks(rootPath);
|
|
106
|
+
const root = fs.realpathSync(rootPath), rootStat = fs.lstatSync(root);
|
|
107
|
+
if (!rootStat.isDirectory())
|
|
108
|
+
fail("project root must be a directory");
|
|
109
|
+
const relative = path.relative(root, resolved);
|
|
110
|
+
if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative))
|
|
111
|
+
fail("project store must be inside its configured root");
|
|
112
|
+
for (const mounted of this.#mounts.values()) {
|
|
113
|
+
if (path.resolve(mounted.store.storePath) !== resolved)
|
|
114
|
+
continue;
|
|
115
|
+
this.#checkMount(mounted);
|
|
116
|
+
if (mounted.projectRoot !== root)
|
|
117
|
+
fail("mounted store cannot be rebound to a different project root");
|
|
118
|
+
return mounted;
|
|
119
|
+
}
|
|
120
|
+
const store = openControlStore(resolved);
|
|
121
|
+
try {
|
|
122
|
+
const header = store.header;
|
|
123
|
+
if (this.#mounts.has(header.projectId) || [...this.#mounts.values()].some((m) => m.store.header.controlDomainId === header.controlDomainId))
|
|
124
|
+
fail("a project/domain identity is already mounted elsewhere");
|
|
125
|
+
const mounted = { store, projectRoot: root, rootDevice: rootStat.dev, rootInode: rootStat.ino };
|
|
126
|
+
this.#checkMount(mounted);
|
|
127
|
+
const entry = { projectId: header.projectId, controlDomainId: header.controlDomainId, storePath: resolved, directoryBinding: header.directoryBinding, mountState: "mounted" };
|
|
128
|
+
const previous = this.#entries.get(header.projectId);
|
|
129
|
+
this.#entries.set(header.projectId, entry);
|
|
130
|
+
try {
|
|
131
|
+
this.#save();
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (previous)
|
|
135
|
+
this.#entries.set(header.projectId, previous);
|
|
136
|
+
else
|
|
137
|
+
this.#entries.delete(header.projectId);
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
this.#mounts.set(header.projectId, mounted);
|
|
141
|
+
return mounted;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
store.close();
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
resolve(projectId) {
|
|
149
|
+
this.#checkDirectory();
|
|
150
|
+
if (projectId === undefined && this.#mounts.size !== 1)
|
|
151
|
+
throw new ControlError("TF_COMMAND_FAILED", "explicit projectId required for multi-project routing");
|
|
152
|
+
const mount = projectId === undefined ? this.#mounts.values().next().value : this.#mounts.get(projectId);
|
|
153
|
+
if (!mount)
|
|
154
|
+
throw new ControlError("TF_POLICY_DENIED", "project is not mounted");
|
|
155
|
+
this.#checkMount(mount);
|
|
156
|
+
return mount;
|
|
157
|
+
}
|
|
158
|
+
list() {
|
|
159
|
+
this.#checkDirectory();
|
|
160
|
+
for (const mount of this.#mounts.values())
|
|
161
|
+
this.#checkMount(mount);
|
|
162
|
+
return structuredClone([...this.#entries.values()]);
|
|
163
|
+
}
|
|
164
|
+
unmount(projectId) {
|
|
165
|
+
const mount = this.resolve(projectId);
|
|
166
|
+
mount.store.close();
|
|
167
|
+
this.#mounts.delete(projectId);
|
|
168
|
+
const entry = this.#entries.get(projectId);
|
|
169
|
+
this.#entries.set(projectId, { ...entry, mountState: "unmounted" });
|
|
170
|
+
this.#save();
|
|
171
|
+
}
|
|
172
|
+
close() {
|
|
173
|
+
if (this.#closed)
|
|
174
|
+
return;
|
|
175
|
+
this.#closed = true;
|
|
176
|
+
for (const mount of this.#mounts.values())
|
|
177
|
+
mount.store.close();
|
|
178
|
+
this.#mounts.clear();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=project-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-registry.js","sourceRoot":"","sources":["../../../taskflow-control/src/project-registry.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAA6B,MAAM,oBAAoB,CAAC;AACrH,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAqB,MAAM,kBAAkB,CAAC;AAOhG,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;AACnJ,SAAS,IAAI,CAAC,OAAe,IAAW,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AAClI,SAAS,OAAO,CAAC,MAAc;IAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,SAAS,CAAC;QACT,IAAI,CAAC;YAAC,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE;gBAAE,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAAC,CAAC;QACjG,OAAO,KAAK,EAAE,CAAC;YAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QAAC,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO;QAAC,OAAO,GAAG,MAAM,CAAC;IACxF,CAAC;AACF,CAAC;AAED;+EAC+E;AAC/E,MAAM,OAAO,eAAe;IAClB,YAAY,CAAS;IACrB,UAAU,CAAS;IACnB,kBAAkB,CAA+B;IACjD,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC5D,OAAO,GAAG,KAAK,CAAC;IAChB,YAAY,YAAoB;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,iDAAiD,CAAC,CAAC;QACpI,IAAI,CAAC,kBAAkB,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC;YACJ,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC;gBAAE,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAC9G,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,CAAC;oBAAE,IAAI,CAAC,0CAA0C,CAAC,CAAC;gBACvL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YAC3E,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QAAC,CAAC;IACzF,CAAC;IACD,eAAe;QACd,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG;YAAE,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC9J,CAAC;IACD,WAAW,CAAC,KAAc;QACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;eACpF,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,gBAAgB,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,gBAAgB,CAAC,KAAK;eACvG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,gBAAgB,CAAC,aAAa;YAAE,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACzI,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YAAC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAAC,CAAC;QACpI,MAAM,CAAC;YAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAClJ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpF,CAAC;IACD,KAAK;QACJ,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,qFAAqF;IACrF,KAAK,CAAC,SAAiB,EAAE,WAAoB;QAC5C,IAAI,CAAC,eAAe,EAAE,CAAC;QAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,WAAW;YAC9H,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;QAC5G,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAAE,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACrJ,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;gBAAE,SAAS;YACjE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI;gBAAE,IAAI,CAAC,6DAA6D,CAAC,CAAC;YACtG,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,KAAK,MAAM,CAAC,eAAe,CAAC;gBAAE,IAAI,CAAC,wDAAwD,CAAC,CAAC;YAC5M,MAAM,OAAO,GAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;YACzG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAyB,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;YACpM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC;gBAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,IAAI,QAAQ;oBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;;oBAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAC,MAAM,KAAK,CAAC;YAAC,CAAC;YAC9J,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAAC,OAAO,OAAO,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,SAAkB;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,mBAAmB,EAAE,uDAAuD,CAAC,CAAC;QAC7J,MAAM,KAAK,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzG,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC;QACjF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,KAAK,CAAC;IACvC,CAAC;IACD,IAAI;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,SAAiB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAChI,CAAC;IACD,KAAK;QACJ,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type RunState } from "taskflow-core";
|
|
2
|
+
import { type ProcessIdentityLike } from "./singleton.ts";
|
|
3
|
+
export interface RuntimeCheckpoint {
|
|
4
|
+
state: RunState;
|
|
5
|
+
writer: ProcessIdentityLike;
|
|
6
|
+
}
|
|
7
|
+
export declare function isWaitingRuntimeCheckpoint(checkpoint: RuntimeCheckpoint | undefined): boolean;
|
|
8
|
+
export declare function ownRuntimeState(state: RunState): ProcessIdentityLike;
|
|
9
|
+
export declare function captureRuntimeCheckpoint(state: RunState, writer: ProcessIdentityLike, waiting: ReadonlySet<string>): RuntimeCheckpoint;
|
|
10
|
+
export declare function recoverRuntimeCheckpoint(checkpoint: RuntimeCheckpoint | undefined, cwd: string): RunState;
|
|
11
|
+
//# sourceMappingURL=runtime-checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-checkpoint.d.ts","sourceRoot":"","sources":["../../../taskflow-control/src/runtime-checkpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6D,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGlF,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,mBAAmB,CAAC;CAC5B;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAG7F;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,mBAAmB,CAKpE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAQtI;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,iBAAiB,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAWzG"}
|