@xioflow/kernel 0.1.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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/dist/domain.d.ts +56 -0
  4. package/dist/domain.d.ts.map +1 -0
  5. package/dist/domain.js +322 -0
  6. package/dist/domain.js.map +1 -0
  7. package/dist/driver/node-driver.d.ts +29 -0
  8. package/dist/driver/node-driver.d.ts.map +1 -0
  9. package/dist/driver/node-driver.js +404 -0
  10. package/dist/driver/node-driver.js.map +1 -0
  11. package/dist/driver/types.d.ts +60 -0
  12. package/dist/driver/types.d.ts.map +1 -0
  13. package/dist/driver/types.js +2 -0
  14. package/dist/driver/types.js.map +1 -0
  15. package/dist/index.d.ts +9 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +9 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/recovery/engine.d.ts +19 -0
  20. package/dist/recovery/engine.d.ts.map +1 -0
  21. package/dist/recovery/engine.js +129 -0
  22. package/dist/recovery/engine.js.map +1 -0
  23. package/dist/store/schema.d.ts +5 -0
  24. package/dist/store/schema.d.ts.map +1 -0
  25. package/dist/store/schema.js +78 -0
  26. package/dist/store/schema.js.map +1 -0
  27. package/dist/store/sqlite.d.ts +53 -0
  28. package/dist/store/sqlite.d.ts.map +1 -0
  29. package/dist/store/sqlite.js +466 -0
  30. package/dist/store/sqlite.js.map +1 -0
  31. package/dist/supervisor/supervisor.d.ts +36 -0
  32. package/dist/supervisor/supervisor.d.ts.map +1 -0
  33. package/dist/supervisor/supervisor.js +421 -0
  34. package/dist/supervisor/supervisor.js.map +1 -0
  35. package/dist/testing/contract-suite.d.ts +11 -0
  36. package/dist/testing/contract-suite.d.ts.map +1 -0
  37. package/dist/testing/contract-suite.js +582 -0
  38. package/dist/testing/contract-suite.js.map +1 -0
  39. package/dist/types.d.ts +190 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +90 -0
  42. package/dist/types.js.map +1 -0
  43. package/package.json +68 -0
@@ -0,0 +1,129 @@
1
+ export class RecoveryEngine {
2
+ domain;
3
+ driver;
4
+ constructor(domain, driver) {
5
+ this.domain = domain;
6
+ this.driver = driver;
7
+ }
8
+ /**
9
+ * 恢复协议:对未终结操作现场核查并安全推进至终态或保留隔离
10
+ */
11
+ async recover() {
12
+ const store = this.domain.getStore();
13
+ const unfinishedOps = store.getUnfinishedOperations(this.domain.domainId);
14
+ const report = { recoveredOperations: [] };
15
+ for (const op of unfinishedOps) {
16
+ if (op.status === 'intent_registered' && !op.processIdentity) {
17
+ // 场景 1:意图登记后崩溃,驱动未启动(无进程身份)
18
+ // 安全清理资源,推进至失败终态
19
+ const failResult = {
20
+ kind: 'process',
21
+ status: 'failed',
22
+ exitCode: null,
23
+ signal: null,
24
+ stdout: '',
25
+ stderr: 'Process was never spawned before crash occurred',
26
+ isTruncated: false,
27
+ identityVerification: 'not_original_process',
28
+ durationMs: 0,
29
+ completedAt: new Date().toISOString(),
30
+ };
31
+ store.recordOperationResult(op.id, failResult, true);
32
+ this.domain.releaseResources(op.id, op.requiredResources);
33
+ report.recoveredOperations.push({
34
+ opId: op.id,
35
+ action: 'cleaned_unspawned',
36
+ resourcesReleased: true,
37
+ });
38
+ continue;
39
+ }
40
+ if (op.processIdentity) {
41
+ // 场景 2-5:存在进程身份,现场向驱动核实身份
42
+ const verification = await this.driver.verifyIdentity(op.processIdentity);
43
+ if (verification === 'is_original_process') {
44
+ // 进程依然存活,发送停止确认流水线
45
+ const stopResult = await this.driver.terminate(op.processIdentity, 2000);
46
+ if (stopResult.stopped) {
47
+ const cancelResult = {
48
+ kind: 'process',
49
+ status: 'cancelled',
50
+ exitCode: null,
51
+ signal: 'SIGKILL',
52
+ stdout: '',
53
+ stderr: 'Alive process safely terminated and recovered',
54
+ isTruncated: false,
55
+ identityVerification: 'is_original_process',
56
+ durationMs: 0,
57
+ completedAt: new Date().toISOString(),
58
+ };
59
+ store.recordOperationResult(op.id, cancelResult, true);
60
+ this.domain.releaseResources(op.id, op.requiredResources);
61
+ report.recoveredOperations.push({
62
+ opId: op.id,
63
+ action: 'stopped_alive_process',
64
+ resourcesReleased: true,
65
+ });
66
+ }
67
+ else {
68
+ // 无法确认停止,转为 indeterminate,绝不释放资源
69
+ const indetResult = {
70
+ kind: 'indeterminate',
71
+ status: 'indeterminate',
72
+ reason: 'Alive process failed to stop during recovery',
73
+ recoveryGuidance: 'Residual PID detected. Check system processes manually.',
74
+ durationMs: 0,
75
+ completedAt: new Date().toISOString(),
76
+ };
77
+ store.recordOperationResult(op.id, indetResult, false);
78
+ report.recoveredOperations.push({
79
+ opId: op.id,
80
+ action: 'isolated_indeterminate',
81
+ resourcesReleased: false,
82
+ });
83
+ }
84
+ }
85
+ else if (verification === 'not_original_process') {
86
+ // 进程已确定死亡,核定终态并结清资源
87
+ const deadResult = {
88
+ kind: 'process',
89
+ status: 'failed',
90
+ exitCode: 137,
91
+ signal: 'SIGKILL',
92
+ stdout: '',
93
+ stderr: 'Process terminated due to system crash',
94
+ isTruncated: false,
95
+ identityVerification: 'not_original_process',
96
+ durationMs: 0,
97
+ completedAt: new Date().toISOString(),
98
+ };
99
+ store.recordOperationResult(op.id, deadResult, true);
100
+ this.domain.releaseResources(op.id, op.requiredResources);
101
+ report.recoveredOperations.push({
102
+ opId: op.id,
103
+ action: 'marked_dead',
104
+ resourcesReleased: true,
105
+ });
106
+ }
107
+ else {
108
+ // cannot_determine: 无法确认是否为原进程,标记 indeterminate 绝不释放锁
109
+ const indetResult = {
110
+ kind: 'indeterminate',
111
+ status: 'indeterminate',
112
+ reason: 'Cannot determine process identity after restart',
113
+ recoveryGuidance: 'Manual inspection required. Resource isolation remains active.',
114
+ durationMs: 0,
115
+ completedAt: new Date().toISOString(),
116
+ };
117
+ store.recordOperationResult(op.id, indetResult, false);
118
+ report.recoveredOperations.push({
119
+ opId: op.id,
120
+ action: 'isolated_indeterminate',
121
+ resourcesReleased: false,
122
+ });
123
+ }
124
+ }
125
+ }
126
+ return report;
127
+ }
128
+ }
129
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/recovery/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * xioflow 数据库 Schema 定义与初始化迁移
3
+ */
4
+ export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS owners (\n domain_id TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n epoch INTEGER NOT NULL,\n heartbeat_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n hostname TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY,\n domain_id TEXT NOT NULL,\n name TEXT NOT NULL,\n created_at TEXT NOT NULL,\n meta TEXT\n);\n\nCREATE TABLE IF NOT EXISTS runs (\n id TEXT PRIMARY KEY,\n task_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n owner TEXT NOT NULL,\n status TEXT NOT NULL,\n termination_reason TEXT,\n started_at TEXT NOT NULL,\n ended_at TEXT,\n config_snapshot TEXT,\n FOREIGN KEY(task_id) REFERENCES tasks(id)\n);\n\nCREATE TABLE IF NOT EXISTS operations (\n id TEXT PRIMARY KEY,\n run_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n name TEXT NOT NULL,\n input_fingerprint TEXT NOT NULL,\n status TEXT NOT NULL,\n required_resources TEXT NOT NULL,\n timeout_ms INTEGER,\n resource_budget TEXT,\n output_ref TEXT,\n process_identity TEXT,\n result TEXT,\n FOREIGN KEY(run_id) REFERENCES runs(id)\n);\n\nCREATE TABLE IF NOT EXISTS resource_leases (\n resource_id TEXT NOT NULL,\n operation_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n budget TEXT,\n PRIMARY KEY (resource_id, operation_id)\n);\n\nCREATE TABLE IF NOT EXISTS journal_events (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n domain_id TEXT NOT NULL,\n run_id TEXT,\n operation_id TEXT,\n type TEXT NOT NULL,\n payload TEXT NOT NULL,\n timestamp TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_runs_task_id ON runs(task_id);\nCREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status);\nCREATE INDEX IF NOT EXISTS idx_operations_run_id ON operations(run_id);\nCREATE INDEX IF NOT EXISTS idx_operations_status ON operations(status);\nCREATE INDEX IF NOT EXISTS idx_resource_leases_op ON resource_leases(operation_id);\nCREATE INDEX IF NOT EXISTS idx_journal_events_domain ON journal_events(domain_id);\n";
5
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,UAAU,k+DAyEtB,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * xioflow 数据库 Schema 定义与初始化迁移
3
+ */
4
+ export const SCHEMA_SQL = `
5
+ CREATE TABLE IF NOT EXISTS owners (
6
+ domain_id TEXT PRIMARY KEY,
7
+ owner_id TEXT NOT NULL,
8
+ epoch INTEGER NOT NULL,
9
+ heartbeat_at TEXT NOT NULL,
10
+ expires_at TEXT NOT NULL,
11
+ hostname TEXT NOT NULL
12
+ );
13
+
14
+ CREATE TABLE IF NOT EXISTS tasks (
15
+ id TEXT PRIMARY KEY,
16
+ domain_id TEXT NOT NULL,
17
+ name TEXT NOT NULL,
18
+ created_at TEXT NOT NULL,
19
+ meta TEXT
20
+ );
21
+
22
+ CREATE TABLE IF NOT EXISTS runs (
23
+ id TEXT PRIMARY KEY,
24
+ task_id TEXT NOT NULL,
25
+ domain_id TEXT NOT NULL,
26
+ owner TEXT NOT NULL,
27
+ status TEXT NOT NULL,
28
+ termination_reason TEXT,
29
+ started_at TEXT NOT NULL,
30
+ ended_at TEXT,
31
+ config_snapshot TEXT,
32
+ FOREIGN KEY(task_id) REFERENCES tasks(id)
33
+ );
34
+
35
+ CREATE TABLE IF NOT EXISTS operations (
36
+ id TEXT PRIMARY KEY,
37
+ run_id TEXT NOT NULL,
38
+ domain_id TEXT NOT NULL,
39
+ kind TEXT NOT NULL,
40
+ name TEXT NOT NULL,
41
+ input_fingerprint TEXT NOT NULL,
42
+ status TEXT NOT NULL,
43
+ required_resources TEXT NOT NULL,
44
+ timeout_ms INTEGER,
45
+ resource_budget TEXT,
46
+ output_ref TEXT,
47
+ process_identity TEXT,
48
+ result TEXT,
49
+ FOREIGN KEY(run_id) REFERENCES runs(id)
50
+ );
51
+
52
+ CREATE TABLE IF NOT EXISTS resource_leases (
53
+ resource_id TEXT NOT NULL,
54
+ operation_id TEXT NOT NULL,
55
+ domain_id TEXT NOT NULL,
56
+ acquired_at TEXT NOT NULL,
57
+ budget TEXT,
58
+ PRIMARY KEY (resource_id, operation_id)
59
+ );
60
+
61
+ CREATE TABLE IF NOT EXISTS journal_events (
62
+ seq INTEGER PRIMARY KEY AUTOINCREMENT,
63
+ domain_id TEXT NOT NULL,
64
+ run_id TEXT,
65
+ operation_id TEXT,
66
+ type TEXT NOT NULL,
67
+ payload TEXT NOT NULL,
68
+ timestamp TEXT NOT NULL
69
+ );
70
+
71
+ CREATE INDEX IF NOT EXISTS idx_runs_task_id ON runs(task_id);
72
+ CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status);
73
+ CREATE INDEX IF NOT EXISTS idx_operations_run_id ON operations(run_id);
74
+ CREATE INDEX IF NOT EXISTS idx_operations_status ON operations(status);
75
+ CREATE INDEX IF NOT EXISTS idx_resource_leases_op ON resource_leases(operation_id);
76
+ CREATE INDEX IF NOT EXISTS idx_journal_events_domain ON journal_events(domain_id);
77
+ `;
78
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEzB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { Task, Run, Operation, OperationResult, OperationStatus, KernelRunStatus, TerminationReason, ResourceLease, JournalEvent, OwnerRecord, ResourceBudget } from '../types.js';
2
+ export declare class SqliteStore {
3
+ private db;
4
+ private currentEpoch;
5
+ constructor(dbPath: string);
6
+ private configurePragmas;
7
+ private initSchema;
8
+ private inTransaction;
9
+ transaction<T>(fn: () => T): T;
10
+ /**
11
+ * @internal 仅供测试套件模拟跨代/代际穿透场景,严禁在生产运行时直接调用
12
+ */
13
+ unsafeSetCurrentEpochForTesting(epoch: number | null): void;
14
+ /**
15
+ * @deprecated 请使用 unsafeSetCurrentEpochForTesting (@internal)
16
+ */
17
+ setCurrentEpoch(epoch: number | null): void;
18
+ getCurrentEpoch(): number | null;
19
+ getOwner(domainId: string): OwnerRecord | null;
20
+ acquireOwnerLease(domainId: string, ownerId: string, hostname: string, ttlMs?: number, force?: boolean): OwnerRecord;
21
+ releaseOwnerLease(domainId: string, ownerId: string): void;
22
+ verifyEpochFencing(domainId: string): void;
23
+ saveTask(task: Task): void;
24
+ getTask(id: string): Task | null;
25
+ saveRun(run: Run): void;
26
+ getRun(id: string): Run | null;
27
+ updateRunStatus(runId: string, status: KernelRunStatus, terminationReason?: TerminationReason, endedAt?: string): void;
28
+ /**
29
+ * Run 完成协议:业务验收与执行事实分离
30
+ */
31
+ reportRunSucceeded(runId: string): void;
32
+ reportRunFailed(runId: string, reason?: TerminationReason): void;
33
+ registerOperationIntent(op: Operation, domainId: string): void;
34
+ updateOperationStatus(opId: string, status: OperationStatus, processIdentity?: Operation['processIdentity'], outputRef?: string): void;
35
+ recordOperationResult(opId: string, result: OperationResult, releaseResources?: boolean): void;
36
+ getOperation(id: string): (Operation & {
37
+ domainId: string;
38
+ }) | null;
39
+ getOperationsByRun(runId: string): (Operation & {
40
+ domainId: string;
41
+ })[];
42
+ getUnfinishedOperations(domainId: string): (Operation & {
43
+ domainId: string;
44
+ })[];
45
+ getPersistedResourceLeases(domainId: string): (ResourceLease & {
46
+ budget?: ResourceBudget;
47
+ })[];
48
+ releaseResourceLease(operationId: string, resourceId?: string): void;
49
+ recordEventAndTransitionState(event: Omit<JournalEvent, 'seq'>): number;
50
+ getJournalEvents(domainId: string, fromSeq?: number): JournalEvent[];
51
+ close(): void;
52
+ }
53
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/store/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,IAAI,EACJ,GAAG,EACH,SAAS,EACT,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,EAIf,MAAM,aAAa,CAAC;AAErB,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,YAAY,CAAuB;IAE3C,YAAY,MAAM,EAAE,MAAM,EAIzB;IAED,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa,CAAS;IAEvB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAgBpC;IAED;;OAEG;IACI,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEjE;IAED;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEjD;IAEM,eAAe,IAAI,MAAM,GAAG,IAAI,CAEtC;IAEM,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAYpD;IAEM,iBAAiB,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAc,EACrB,KAAK,GAAE,OAAe,GACrB,WAAW,CA8Db;IAEM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAOhE;IAEM,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOhD;IAEM,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAgBhC;IAEM,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAWtC;IAEM,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAuB7B;IAEM,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAepC;IAEM,eAAe,CACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAuBN;IAED;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAsB7C;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,iBAA+B,GAAG,IAAI,CAOnF;IAEM,uBAAuB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAgEpE;IAEM,qBAAqB,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,eAAe,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,EAC9C,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAwBN;IAEM,qBAAqB,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,gBAAgB,GAAE,OAAc,GAC/B,IAAI,CA+BN;IAEM,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAmBzE;IAEM,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAkB7E;IAEM,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAqBrF;IAEM,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,aAAa,GAAG;QAAE,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE,CAAC,EAAE,CAUnG;IAEM,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ1E;IAEM,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,MAAM,CAc7E;IAEM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,GAAG,YAAY,EAAE,CAgB7E;IAEM,KAAK,IAAI,IAAI,CAEnB;CACF"}