@jamesaphoenix/tx-core 0.4.2 → 0.4.3
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/README.md +480 -0
- package/dist/db.d.ts +28 -14
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +102 -14
- package/dist/db.js.map +1 -1
- package/dist/errors.d.ts +178 -34
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +119 -26
- package/dist/errors.js.map +1 -1
- package/dist/id.d.ts +10 -0
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +17 -1
- package/dist/id.js.map +1 -1
- package/dist/index.d.ts +15 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -8
- package/dist/index.js.map +1 -1
- package/dist/layer.d.ts +23 -14
- package/dist/layer.d.ts.map +1 -1
- package/dist/layer.js +75 -76
- package/dist/layer.js.map +1 -1
- package/dist/mappers/anchor.d.ts +15 -1
- package/dist/mappers/anchor.d.ts.map +1 -1
- package/dist/mappers/anchor.js +95 -28
- package/dist/mappers/anchor.js.map +1 -1
- package/dist/mappers/attempt.d.ts +3 -1
- package/dist/mappers/attempt.d.ts.map +1 -1
- package/dist/mappers/attempt.js +23 -9
- package/dist/mappers/attempt.js.map +1 -1
- package/dist/mappers/candidate.d.ts +3 -1
- package/dist/mappers/candidate.d.ts.map +1 -1
- package/dist/mappers/candidate.js +46 -16
- package/dist/mappers/candidate.js.map +1 -1
- package/dist/mappers/claim.d.ts +1 -1
- package/dist/mappers/claim.d.ts.map +1 -1
- package/dist/mappers/claim.js +11 -4
- package/dist/mappers/claim.js.map +1 -1
- package/dist/mappers/deduplication.d.ts +13 -1
- package/dist/mappers/deduplication.d.ts.map +1 -1
- package/dist/mappers/deduplication.js +22 -3
- package/dist/mappers/deduplication.js.map +1 -1
- package/dist/mappers/doc.d.ts +24 -0
- package/dist/mappers/doc.d.ts.map +1 -0
- package/dist/mappers/doc.js +161 -0
- package/dist/mappers/doc.js.map +1 -0
- package/dist/mappers/edge.d.ts +10 -1
- package/dist/mappers/edge.d.ts.map +1 -1
- package/dist/mappers/edge.js +74 -12
- package/dist/mappers/edge.js.map +1 -1
- package/dist/mappers/file-learning.d.ts.map +1 -1
- package/dist/mappers/file-learning.js +2 -1
- package/dist/mappers/file-learning.js.map +1 -1
- package/dist/mappers/index.d.ts +6 -7
- package/dist/mappers/index.d.ts.map +1 -1
- package/dist/mappers/index.js +10 -12
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/learning.d.ts +9 -1
- package/dist/mappers/learning.d.ts.map +1 -1
- package/dist/mappers/learning.js +94 -14
- package/dist/mappers/learning.js.map +1 -1
- package/dist/mappers/orchestrator-state.d.ts +1 -1
- package/dist/mappers/orchestrator-state.d.ts.map +1 -1
- package/dist/mappers/orchestrator-state.js +31 -5
- package/dist/mappers/orchestrator-state.js.map +1 -1
- package/dist/mappers/parse-date.d.ts +11 -0
- package/dist/mappers/parse-date.d.ts.map +1 -0
- package/dist/mappers/parse-date.js +18 -0
- package/dist/mappers/parse-date.js.map +1 -0
- package/dist/mappers/run.d.ts +14 -4
- package/dist/mappers/run.d.ts.map +1 -1
- package/dist/mappers/run.js +49 -18
- package/dist/mappers/run.js.map +1 -1
- package/dist/mappers/task.d.ts +5 -1
- package/dist/mappers/task.d.ts.map +1 -1
- package/dist/mappers/task.js +66 -16
- package/dist/mappers/task.js.map +1 -1
- package/dist/mappers/tracked-project.d.ts +3 -1
- package/dist/mappers/tracked-project.d.ts.map +1 -1
- package/dist/mappers/tracked-project.js +23 -9
- package/dist/mappers/tracked-project.js.map +1 -1
- package/dist/mappers/worker.d.ts +1 -1
- package/dist/mappers/worker.d.ts.map +1 -1
- package/dist/mappers/worker.js +44 -6
- package/dist/mappers/worker.js.map +1 -1
- package/dist/repo/anchor-repo.d.ts +2 -2
- package/dist/repo/anchor-repo.d.ts.map +1 -1
- package/dist/repo/anchor-repo.js +46 -5
- package/dist/repo/anchor-repo.js.map +1 -1
- package/dist/repo/attempt-repo.d.ts +2 -2
- package/dist/repo/attempt-repo.d.ts.map +1 -1
- package/dist/repo/attempt-repo.js +16 -6
- package/dist/repo/attempt-repo.js.map +1 -1
- package/dist/repo/candidate-repo.d.ts.map +1 -1
- package/dist/repo/candidate-repo.js +22 -1
- package/dist/repo/candidate-repo.js.map +1 -1
- package/dist/repo/claim-repo.d.ts +46 -2
- package/dist/repo/claim-repo.d.ts.map +1 -1
- package/dist/repo/claim-repo.js +113 -6
- package/dist/repo/claim-repo.js.map +1 -1
- package/dist/repo/compaction-repo.d.ts +41 -0
- package/dist/repo/compaction-repo.d.ts.map +1 -0
- package/dist/repo/compaction-repo.js +84 -0
- package/dist/repo/compaction-repo.js.map +1 -0
- package/dist/repo/deduplication-repo.d.ts +9 -1
- package/dist/repo/deduplication-repo.d.ts.map +1 -1
- package/dist/repo/deduplication-repo.js +46 -9
- package/dist/repo/deduplication-repo.js.map +1 -1
- package/dist/repo/dep-repo.d.ts +27 -3
- package/dist/repo/dep-repo.d.ts.map +1 -1
- package/dist/repo/dep-repo.js +166 -39
- package/dist/repo/dep-repo.js.map +1 -1
- package/dist/repo/doc-repo.d.ts +59 -0
- package/dist/repo/doc-repo.d.ts.map +1 -0
- package/dist/repo/doc-repo.js +276 -0
- package/dist/repo/doc-repo.js.map +1 -0
- package/dist/repo/edge-repo.d.ts +1 -1
- package/dist/repo/edge-repo.d.ts.map +1 -1
- package/dist/repo/edge-repo.js +65 -34
- package/dist/repo/edge-repo.js.map +1 -1
- package/dist/repo/file-learning-repo.d.ts +3 -3
- package/dist/repo/file-learning-repo.d.ts.map +1 -1
- package/dist/repo/file-learning-repo.js +19 -8
- package/dist/repo/file-learning-repo.js.map +1 -1
- package/dist/repo/index.d.ts +4 -6
- package/dist/repo/index.d.ts.map +1 -1
- package/dist/repo/index.js +3 -5
- package/dist/repo/index.js.map +1 -1
- package/dist/repo/learning-repo.d.ts +10 -3
- package/dist/repo/learning-repo.d.ts.map +1 -1
- package/dist/repo/learning-repo.js +68 -11
- package/dist/repo/learning-repo.js.map +1 -1
- package/dist/repo/orchestrator-state-repo.d.ts.map +1 -1
- package/dist/repo/orchestrator-state-repo.js +8 -1
- package/dist/repo/orchestrator-state-repo.js.map +1 -1
- package/dist/repo/run-repo.d.ts +3 -3
- package/dist/repo/run-repo.d.ts.map +1 -1
- package/dist/repo/run-repo.js +40 -19
- package/dist/repo/run-repo.js.map +1 -1
- package/dist/repo/task-repo.d.ts +14 -3
- package/dist/repo/task-repo.d.ts.map +1 -1
- package/dist/repo/task-repo.js +194 -20
- package/dist/repo/task-repo.js.map +1 -1
- package/dist/repo/tracked-project-repo.d.ts.map +1 -1
- package/dist/repo/tracked-project-repo.js +15 -1
- package/dist/repo/tracked-project-repo.js.map +1 -1
- package/dist/repo/worker-repo.d.ts +3 -2
- package/dist/repo/worker-repo.d.ts.map +1 -1
- package/dist/repo/worker-repo.js +54 -8
- package/dist/repo/worker-repo.js.map +1 -1
- package/dist/schemas/sync.js +2 -2
- package/dist/schemas/sync.js.map +1 -1
- package/dist/schemas/worker.d.ts +1 -0
- package/dist/schemas/worker.d.ts.map +1 -1
- package/dist/schemas/worker.js +1 -0
- package/dist/schemas/worker.js.map +1 -1
- package/dist/services/agent-service.d.ts +57 -0
- package/dist/services/agent-service.d.ts.map +1 -0
- package/dist/services/agent-service.js +81 -0
- package/dist/services/agent-service.js.map +1 -0
- package/dist/services/anchor-service.js +1 -1
- package/dist/services/anchor-service.js.map +1 -1
- package/dist/services/anchor-verification.d.ts +8 -0
- package/dist/services/anchor-verification.d.ts.map +1 -1
- package/dist/services/anchor-verification.js +237 -37
- package/dist/services/anchor-verification.js.map +1 -1
- package/dist/services/ast-grep-service.d.ts.map +1 -1
- package/dist/services/ast-grep-service.js +93 -22
- package/dist/services/ast-grep-service.js.map +1 -1
- package/dist/services/attempt-service.d.ts.map +1 -1
- package/dist/services/attempt-service.js +1 -4
- package/dist/services/attempt-service.js.map +1 -1
- package/dist/services/auto-sync-service.d.ts +1 -1
- package/dist/services/auto-sync-service.d.ts.map +1 -1
- package/dist/services/auto-sync-service.js +18 -10
- package/dist/services/auto-sync-service.js.map +1 -1
- package/dist/services/claim-service.d.ts +8 -2
- package/dist/services/claim-service.d.ts.map +1 -1
- package/dist/services/claim-service.js +37 -23
- package/dist/services/claim-service.js.map +1 -1
- package/dist/services/compaction-service.d.ts +105 -0
- package/dist/services/compaction-service.d.ts.map +1 -0
- package/dist/services/compaction-service.js +369 -0
- package/dist/services/compaction-service.js.map +1 -0
- package/dist/services/cycle-scan-service.d.ts +32 -0
- package/dist/services/cycle-scan-service.d.ts.map +1 -0
- package/dist/services/cycle-scan-service.js +542 -0
- package/dist/services/cycle-scan-service.js.map +1 -0
- package/dist/services/daemon-service.d.ts +40 -2
- package/dist/services/daemon-service.d.ts.map +1 -1
- package/dist/services/daemon-service.js +199 -52
- package/dist/services/daemon-service.js.map +1 -1
- package/dist/services/deduplication-service.d.ts +8 -4
- package/dist/services/deduplication-service.d.ts.map +1 -1
- package/dist/services/deduplication-service.js +79 -25
- package/dist/services/deduplication-service.js.map +1 -1
- package/dist/services/dep-service.d.ts +2 -2
- package/dist/services/dep-service.d.ts.map +1 -1
- package/dist/services/dep-service.js +9 -5
- package/dist/services/dep-service.js.map +1 -1
- package/dist/services/diversifier-service.d.ts +2 -1
- package/dist/services/diversifier-service.d.ts.map +1 -1
- package/dist/services/diversifier-service.js +37 -43
- package/dist/services/diversifier-service.js.map +1 -1
- package/dist/services/doc-service.d.ts +49 -0
- package/dist/services/doc-service.d.ts.map +1 -0
- package/dist/services/doc-service.js +605 -0
- package/dist/services/doc-service.js.map +1 -0
- package/dist/services/edge-service.js +2 -2
- package/dist/services/edge-service.js.map +1 -1
- package/dist/services/embedding-service.d.ts +66 -2
- package/dist/services/embedding-service.d.ts.map +1 -1
- package/dist/services/embedding-service.js +138 -24
- package/dist/services/embedding-service.js.map +1 -1
- package/dist/services/file-learning-service.d.ts.map +1 -1
- package/dist/services/file-learning-service.js +8 -7
- package/dist/services/file-learning-service.js.map +1 -1
- package/dist/services/file-watcher-service.d.ts.map +1 -1
- package/dist/services/file-watcher-service.js +58 -11
- package/dist/services/file-watcher-service.js.map +1 -1
- package/dist/services/graph-expansion.d.ts +3 -0
- package/dist/services/graph-expansion.d.ts.map +1 -1
- package/dist/services/graph-expansion.js +28 -7
- package/dist/services/graph-expansion.js.map +1 -1
- package/dist/services/hierarchy-service.d.ts +1 -1
- package/dist/services/hierarchy-service.d.ts.map +1 -1
- package/dist/services/hierarchy-service.js +50 -32
- package/dist/services/hierarchy-service.js.map +1 -1
- package/dist/services/index.d.ts +13 -15
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +13 -15
- package/dist/services/index.js.map +1 -1
- package/dist/services/learning-service.d.ts +4 -4
- package/dist/services/learning-service.d.ts.map +1 -1
- package/dist/services/learning-service.js +75 -42
- package/dist/services/learning-service.js.map +1 -1
- package/dist/services/llm-service.d.ts +62 -0
- package/dist/services/llm-service.d.ts.map +1 -0
- package/dist/services/llm-service.js +172 -0
- package/dist/services/llm-service.js.map +1 -0
- package/dist/services/migration-service.d.ts +1 -1
- package/dist/services/migration-service.d.ts.map +1 -1
- package/dist/services/migration-service.js +18 -7
- package/dist/services/migration-service.js.map +1 -1
- package/dist/services/orchestrator-service.d.ts +4 -3
- package/dist/services/orchestrator-service.d.ts.map +1 -1
- package/dist/services/orchestrator-service.js +67 -29
- package/dist/services/orchestrator-service.js.map +1 -1
- package/dist/services/promotion-service.d.ts +1 -1
- package/dist/services/promotion-service.js +1 -1
- package/dist/services/promotion-service.js.map +1 -1
- package/dist/services/query-expansion-service.d.ts +30 -9
- package/dist/services/query-expansion-service.d.ts.map +1 -1
- package/dist/services/query-expansion-service.js +54 -63
- package/dist/services/query-expansion-service.js.map +1 -1
- package/dist/services/ready-service.d.ts +21 -1
- package/dist/services/ready-service.d.ts.map +1 -1
- package/dist/services/ready-service.js +44 -21
- package/dist/services/ready-service.js.map +1 -1
- package/dist/services/retriever-service.d.ts +10 -10
- package/dist/services/retriever-service.d.ts.map +1 -1
- package/dist/services/retriever-service.js +53 -161
- package/dist/services/retriever-service.js.map +1 -1
- package/dist/services/swarm-verification.d.ts +2 -2
- package/dist/services/swarm-verification.d.ts.map +1 -1
- package/dist/services/swarm-verification.js +12 -6
- package/dist/services/swarm-verification.js.map +1 -1
- package/dist/services/sync-service.d.ts +17 -4
- package/dist/services/sync-service.d.ts.map +1 -1
- package/dist/services/sync-service.js +378 -114
- package/dist/services/sync-service.js.map +1 -1
- package/dist/services/task-service.d.ts +6 -4
- package/dist/services/task-service.d.ts.map +1 -1
- package/dist/services/task-service.js +162 -33
- package/dist/services/task-service.js.map +1 -1
- package/dist/services/tracing-service.d.ts +55 -0
- package/dist/services/tracing-service.d.ts.map +1 -0
- package/dist/services/tracing-service.js +99 -0
- package/dist/services/tracing-service.js.map +1 -0
- package/dist/services/transcript-adapter.d.ts +99 -0
- package/dist/services/transcript-adapter.d.ts.map +1 -0
- package/dist/services/transcript-adapter.js +283 -0
- package/dist/services/transcript-adapter.js.map +1 -0
- package/dist/services/validation-service.d.ts +85 -0
- package/dist/services/validation-service.d.ts.map +1 -0
- package/dist/services/validation-service.js +289 -0
- package/dist/services/validation-service.js.map +1 -0
- package/dist/services/worker-process.d.ts +23 -4
- package/dist/services/worker-process.d.ts.map +1 -1
- package/dist/services/worker-process.js +159 -70
- package/dist/services/worker-process.js.map +1 -1
- package/dist/services/worker-service.d.ts.map +1 -1
- package/dist/services/worker-service.js +7 -12
- package/dist/services/worker-service.js.map +1 -1
- package/dist/sync/claude-task-writer.d.ts +49 -0
- package/dist/sync/claude-task-writer.d.ts.map +1 -0
- package/dist/sync/claude-task-writer.js +135 -0
- package/dist/sync/claude-task-writer.js.map +1 -0
- package/dist/utils/doc-hash.d.ts +10 -0
- package/dist/utils/doc-hash.d.ts.map +1 -0
- package/dist/utils/doc-hash.js +14 -0
- package/dist/utils/doc-hash.js.map +1 -0
- package/dist/utils/doc-renderer.d.ts +44 -0
- package/dist/utils/doc-renderer.d.ts.map +1 -0
- package/dist/utils/doc-renderer.js +202 -0
- package/dist/utils/doc-renderer.js.map +1 -0
- package/dist/utils/math.d.ts +5 -1
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +12 -4
- package/dist/utils/math.js.map +1 -1
- package/dist/utils/sql.d.ts +9 -0
- package/dist/utils/sql.d.ts.map +1 -0
- package/dist/utils/sql.js +9 -0
- package/dist/utils/sql.js.map +1 -0
- package/dist/utils/toml-config.d.ts +22 -0
- package/dist/utils/toml-config.d.ts.map +1 -0
- package/dist/utils/toml-config.js +75 -0
- package/dist/utils/toml-config.js.map +1 -0
- package/dist/worker/hooks.d.ts +102 -0
- package/dist/worker/hooks.d.ts.map +1 -0
- package/dist/worker/hooks.js +11 -0
- package/dist/worker/hooks.js.map +1 -0
- package/dist/worker/index.d.ts +9 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +8 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/run-worker.d.ts +33 -0
- package/dist/worker/run-worker.d.ts.map +1 -0
- package/dist/worker/run-worker.js +265 -0
- package/dist/worker/run-worker.js.map +1 -0
- package/package.json +14 -12
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Hooks - PRD-018
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the headless worker hooks system.
|
|
5
|
+
* Two hooks. That's it. Extensible context for user customization.
|
|
6
|
+
*
|
|
7
|
+
* See PRD-018 "Worker Hooks (Customization Points)" section and
|
|
8
|
+
* DD-018 "Worker Hooks Interface" section.
|
|
9
|
+
*/
|
|
10
|
+
import type { Task } from "@jamesaphoenix/tx-types";
|
|
11
|
+
/**
|
|
12
|
+
* Result from executing a task.
|
|
13
|
+
*/
|
|
14
|
+
export interface ExecutionResult {
|
|
15
|
+
/** Whether the execution succeeded */
|
|
16
|
+
readonly success: boolean;
|
|
17
|
+
/** Optional output from the execution */
|
|
18
|
+
readonly output?: string;
|
|
19
|
+
/** Error message if execution failed */
|
|
20
|
+
readonly error?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* IO capture paths for run tracking.
|
|
24
|
+
*/
|
|
25
|
+
export interface IOCapture {
|
|
26
|
+
/** Path to transcript file */
|
|
27
|
+
readonly transcriptPath?: string;
|
|
28
|
+
/** Path to stderr capture file */
|
|
29
|
+
readonly stderrPath?: string;
|
|
30
|
+
/** Path to stdout capture file */
|
|
31
|
+
readonly stdoutPath?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Context provided to the execute hook by tx.
|
|
35
|
+
* Contains tx primitives and mutable state.
|
|
36
|
+
*/
|
|
37
|
+
export interface WorkerContext {
|
|
38
|
+
/** ID of the worker processing this task */
|
|
39
|
+
readonly workerId: string;
|
|
40
|
+
/** Unique ID for this run/execution */
|
|
41
|
+
readonly runId: string;
|
|
42
|
+
/** Renew the lease on the current task to prevent expiration */
|
|
43
|
+
readonly renewLease: () => Promise<void>;
|
|
44
|
+
/** Log a message (associated with this worker/run) */
|
|
45
|
+
readonly log: (message: string) => void;
|
|
46
|
+
/** Mutable state that persists across calls within a single task execution */
|
|
47
|
+
readonly state: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Worker hooks interface.
|
|
51
|
+
* Two hooks. That's it.
|
|
52
|
+
*
|
|
53
|
+
* @template TContext - Custom context type merged with WorkerContext
|
|
54
|
+
*/
|
|
55
|
+
export interface WorkerHooks<TContext = object> {
|
|
56
|
+
/**
|
|
57
|
+
* Execute the work - YOUR logic lives here.
|
|
58
|
+
* Called for each task claimed by the worker.
|
|
59
|
+
*
|
|
60
|
+
* @param task - The task to execute
|
|
61
|
+
* @param ctx - Combined WorkerContext + your custom TContext
|
|
62
|
+
* @returns ExecutionResult indicating success/failure
|
|
63
|
+
*/
|
|
64
|
+
readonly execute: (task: Task, ctx: WorkerContext & TContext) => Promise<ExecutionResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Where to capture IO (optional).
|
|
67
|
+
* Called before execute to determine where to store run output.
|
|
68
|
+
*
|
|
69
|
+
* @param runId - The unique run ID
|
|
70
|
+
* @param task - The task being executed
|
|
71
|
+
* @returns IOCapture with paths for transcript/stderr/stdout
|
|
72
|
+
*/
|
|
73
|
+
readonly captureIO?: (runId: string, task: Task) => IOCapture;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Configuration for runWorker().
|
|
77
|
+
* Combines hooks with worker settings and custom context.
|
|
78
|
+
*
|
|
79
|
+
* @template TContext - Custom context type merged with WorkerContext
|
|
80
|
+
*/
|
|
81
|
+
export interface WorkerConfig<TContext = object> {
|
|
82
|
+
/** Optional worker name. Defaults to auto-generated name. */
|
|
83
|
+
readonly name?: string;
|
|
84
|
+
/** Heartbeat interval in seconds. Should match orchestrator config. Default: 30 */
|
|
85
|
+
readonly heartbeatIntervalSeconds?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Your custom context - merged into ctx.
|
|
88
|
+
* Use this to pass your own primitives (db clients, LLM clients, etc.)
|
|
89
|
+
*/
|
|
90
|
+
readonly context?: TContext;
|
|
91
|
+
/**
|
|
92
|
+
* Execute hook - YOUR logic lives here.
|
|
93
|
+
* Called for each task claimed by the worker.
|
|
94
|
+
*/
|
|
95
|
+
readonly execute: WorkerHooks<TContext>["execute"];
|
|
96
|
+
/**
|
|
97
|
+
* Optional IO capture hook.
|
|
98
|
+
* Called before execute to determine where to store run output.
|
|
99
|
+
*/
|
|
100
|
+
readonly captureIO?: WorkerHooks<TContext>["captureIO"];
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/worker/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAEnD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,kCAAkC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,kCAAkC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW,CAAC,QAAQ,GAAG,MAAM;IAC5C;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,CAChB,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,aAAa,GAAG,QAAQ,KAC1B,OAAO,CAAC,eAAe,CAAC,CAAA;IAE7B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,SAAS,CAAA;CAC9D;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,MAAM;IAC7C,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,mFAAmF;IACnF,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAC1C;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;IAC3B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAA;IAClD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAA;CACxD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Hooks - PRD-018
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the headless worker hooks system.
|
|
5
|
+
* Two hooks. That's it. Extensible context for user customization.
|
|
6
|
+
*
|
|
7
|
+
* See PRD-018 "Worker Hooks (Customization Points)" section and
|
|
8
|
+
* DD-018 "Worker Hooks Interface" section.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/worker/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tx/core/worker - Worker exports
|
|
3
|
+
*
|
|
4
|
+
* Headless worker primitives for agent orchestration.
|
|
5
|
+
* See PRD-018 and DD-018 for design specification.
|
|
6
|
+
*/
|
|
7
|
+
export { type ExecutionResult, type IOCapture, type WorkerContext, type WorkerHooks, type WorkerConfig } from "./hooks.js";
|
|
8
|
+
export { runWorker } from "./run-worker.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* runWorker - PRD-018
|
|
3
|
+
*
|
|
4
|
+
* Headless worker that executes tasks using user-provided hooks.
|
|
5
|
+
* Two hooks: execute (required), captureIO (optional).
|
|
6
|
+
* Extensible context for user customization.
|
|
7
|
+
*
|
|
8
|
+
* See PRD-018 "Worker Hooks (Customization Points)" section and
|
|
9
|
+
* DD-018 "Headless Worker Design" section.
|
|
10
|
+
*/
|
|
11
|
+
import { Effect } from "effect";
|
|
12
|
+
import { WorkerService } from "../services/worker-service.js";
|
|
13
|
+
import { ClaimService } from "../services/claim-service.js";
|
|
14
|
+
import { ReadyService } from "../services/ready-service.js";
|
|
15
|
+
import { RunRepository } from "../repo/run-repo.js";
|
|
16
|
+
import type { WorkerConfig } from "./hooks.js";
|
|
17
|
+
/**
|
|
18
|
+
* Run a headless worker that executes tasks using user-provided hooks.
|
|
19
|
+
*
|
|
20
|
+
* This function:
|
|
21
|
+
* 1. Registers the worker with the orchestrator
|
|
22
|
+
* 2. Starts a background heartbeat fiber
|
|
23
|
+
* 3. Runs a work loop that claims and processes tasks
|
|
24
|
+
* 4. Calls user's execute hook for each task with merged context
|
|
25
|
+
* 5. Creates run records with optional IO capture
|
|
26
|
+
* 6. Handles graceful shutdown via SIGTERM/SIGINT
|
|
27
|
+
*
|
|
28
|
+
* @template TContext - Custom context type merged with WorkerContext
|
|
29
|
+
* @param config - Worker configuration with hooks and optional custom context
|
|
30
|
+
* @returns Effect that runs until shutdown is requested
|
|
31
|
+
*/
|
|
32
|
+
export declare const runWorker: <TContext = object>(config: WorkerConfig<TContext>) => Effect.Effect<void, import("../errors.js").DatabaseError | import("../errors.js").WorkerNotFoundError | import("../errors.js").RegistrationError, ReadyService | RunRepository | WorkerService | ClaimService>;
|
|
33
|
+
//# sourceMappingURL=run-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-worker.d.ts","sourceRoot":"","sources":["../../src/worker/run-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAA6C,MAAM,YAAY,CAAA;AAoBzF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,MAAM,EACzC,QAAQ,YAAY,CAAC,QAAQ,CAAC,mNAsO5B,CAAA"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* runWorker - PRD-018
|
|
3
|
+
*
|
|
4
|
+
* Headless worker that executes tasks using user-provided hooks.
|
|
5
|
+
* Two hooks: execute (required), captureIO (optional).
|
|
6
|
+
* Extensible context for user customization.
|
|
7
|
+
*
|
|
8
|
+
* See PRD-018 "Worker Hooks (Customization Points)" section and
|
|
9
|
+
* DD-018 "Headless Worker Design" section.
|
|
10
|
+
*/
|
|
11
|
+
import { Effect, Duration, Fiber, Ref } from "effect";
|
|
12
|
+
import * as os from "os";
|
|
13
|
+
import { WorkerService } from "../services/worker-service.js";
|
|
14
|
+
import { ClaimService } from "../services/claim-service.js";
|
|
15
|
+
import { ReadyService } from "../services/ready-service.js";
|
|
16
|
+
import { RunRepository } from "../repo/run-repo.js";
|
|
17
|
+
/**
|
|
18
|
+
* Default heartbeat interval in seconds.
|
|
19
|
+
*/
|
|
20
|
+
const DEFAULT_HEARTBEAT_INTERVAL = 30;
|
|
21
|
+
/**
|
|
22
|
+
* Default lease renewal interval multiplier (10x heartbeat = 5 minutes at default).
|
|
23
|
+
*/
|
|
24
|
+
const LEASE_RENEWAL_MULTIPLIER = 10;
|
|
25
|
+
/**
|
|
26
|
+
* Run a headless worker that executes tasks using user-provided hooks.
|
|
27
|
+
*
|
|
28
|
+
* This function:
|
|
29
|
+
* 1. Registers the worker with the orchestrator
|
|
30
|
+
* 2. Starts a background heartbeat fiber
|
|
31
|
+
* 3. Runs a work loop that claims and processes tasks
|
|
32
|
+
* 4. Calls user's execute hook for each task with merged context
|
|
33
|
+
* 5. Creates run records with optional IO capture
|
|
34
|
+
* 6. Handles graceful shutdown via SIGTERM/SIGINT
|
|
35
|
+
*
|
|
36
|
+
* @template TContext - Custom context type merged with WorkerContext
|
|
37
|
+
* @param config - Worker configuration with hooks and optional custom context
|
|
38
|
+
* @returns Effect that runs until shutdown is requested
|
|
39
|
+
*/
|
|
40
|
+
export const runWorker = (config) => Effect.gen(function* () {
|
|
41
|
+
const workerService = yield* WorkerService;
|
|
42
|
+
const claimService = yield* ClaimService;
|
|
43
|
+
const readyService = yield* ReadyService;
|
|
44
|
+
const runRepo = yield* RunRepository;
|
|
45
|
+
const heartbeatInterval = config.heartbeatIntervalSeconds ?? DEFAULT_HEARTBEAT_INTERVAL;
|
|
46
|
+
// Shutdown state ref (mutable, shared with signal handlers)
|
|
47
|
+
const shutdownState = yield* Ref.make({
|
|
48
|
+
requested: false
|
|
49
|
+
});
|
|
50
|
+
// Register with orchestrator
|
|
51
|
+
const worker = yield* workerService.register({
|
|
52
|
+
name: config.name,
|
|
53
|
+
hostname: os.hostname(),
|
|
54
|
+
pid: process.pid
|
|
55
|
+
});
|
|
56
|
+
const workerId = worker.id;
|
|
57
|
+
yield* Effect.log(`runWorker: Worker ${workerId} registered`);
|
|
58
|
+
// Set up signal handlers for graceful shutdown
|
|
59
|
+
const handleSignal = (signal) => {
|
|
60
|
+
console.log(`runWorker: Worker ${workerId} received ${signal}`);
|
|
61
|
+
// Mark shutdown as requested (sync since signal handlers can't use async)
|
|
62
|
+
Effect.runSync(Ref.update(shutdownState, (state) => ({
|
|
63
|
+
...state,
|
|
64
|
+
requested: true
|
|
65
|
+
})));
|
|
66
|
+
};
|
|
67
|
+
const sigTermHandler = () => handleSignal("SIGTERM");
|
|
68
|
+
const sigIntHandler = () => handleSignal("SIGINT");
|
|
69
|
+
process.on("SIGTERM", sigTermHandler);
|
|
70
|
+
process.on("SIGINT", sigIntHandler);
|
|
71
|
+
// Completed tasks counter for metrics
|
|
72
|
+
const tasksCompletedRef = yield* Ref.make(0);
|
|
73
|
+
// Heartbeat fiber - runs continuously in background
|
|
74
|
+
const heartbeatFiber = yield* Effect.fork(runHeartbeatLoop(workerId, heartbeatInterval, shutdownState, tasksCompletedRef));
|
|
75
|
+
try {
|
|
76
|
+
// Main work loop
|
|
77
|
+
while (true) {
|
|
78
|
+
// Check if shutdown was requested
|
|
79
|
+
const state = yield* Ref.get(shutdownState);
|
|
80
|
+
if (state.requested) {
|
|
81
|
+
yield* Effect.log(`runWorker: Worker ${workerId} shutting down gracefully`);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
// Update status to idle
|
|
85
|
+
yield* workerService.updateStatus(workerId, "idle");
|
|
86
|
+
// Check for available work
|
|
87
|
+
const readyTasks = yield* readyService.getReady(1);
|
|
88
|
+
if (readyTasks.length === 0) {
|
|
89
|
+
// No work available, wait and try again
|
|
90
|
+
yield* Effect.sleep(Duration.seconds(5));
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const task = readyTasks[0];
|
|
94
|
+
// Try to claim the task
|
|
95
|
+
const claimResult = yield* claimService.claim(task.id, workerId).pipe(Effect.either);
|
|
96
|
+
if (claimResult._tag === "Left") {
|
|
97
|
+
// Someone else claimed it, try again
|
|
98
|
+
yield* Effect.log(`runWorker: Worker ${workerId} failed to claim task ${task.id}: ${claimResult.left._tag}`);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
yield* Effect.log(`runWorker: Worker ${workerId} claimed task ${task.id}`);
|
|
102
|
+
// Create run record (this generates the run ID)
|
|
103
|
+
const runRecord = yield* runRepo.create({
|
|
104
|
+
taskId: task.id,
|
|
105
|
+
agent: workerId,
|
|
106
|
+
pid: process.pid
|
|
107
|
+
});
|
|
108
|
+
const runId = runRecord.id;
|
|
109
|
+
// Get IO capture paths from user's hook if provided
|
|
110
|
+
const ioCapture = config.captureIO?.(runId, task) ?? {};
|
|
111
|
+
// Update run record with IO paths if provided
|
|
112
|
+
if (ioCapture.transcriptPath || ioCapture.stderrPath || ioCapture.stdoutPath) {
|
|
113
|
+
yield* runRepo.update(runId, {
|
|
114
|
+
transcriptPath: ioCapture.transcriptPath,
|
|
115
|
+
stderrPath: ioCapture.stderrPath,
|
|
116
|
+
stdoutPath: ioCapture.stdoutPath
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
// Update worker status to busy
|
|
120
|
+
const tasksCompleted = yield* Ref.get(tasksCompletedRef);
|
|
121
|
+
yield* workerService.heartbeat({
|
|
122
|
+
workerId,
|
|
123
|
+
timestamp: new Date(),
|
|
124
|
+
status: "busy",
|
|
125
|
+
currentTaskId: task.id,
|
|
126
|
+
metrics: {
|
|
127
|
+
cpuPercent: process.cpuUsage().user / 1000000,
|
|
128
|
+
memoryMb: process.memoryUsage().heapUsed / 1024 / 1024,
|
|
129
|
+
tasksCompleted
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
// Start lease renewal fiber
|
|
133
|
+
const renewalInterval = heartbeatInterval * LEASE_RENEWAL_MULTIPLIER;
|
|
134
|
+
const renewFiber = yield* Effect.fork(runLeaseRenewalLoop(task.id, workerId, renewalInterval, shutdownState));
|
|
135
|
+
// Build worker context with tx primitives
|
|
136
|
+
const baseContext = {
|
|
137
|
+
workerId,
|
|
138
|
+
runId,
|
|
139
|
+
renewLease: async () => {
|
|
140
|
+
await Effect.runPromise(claimService.renew(task.id, workerId).pipe(Effect.catchAll((error) => {
|
|
141
|
+
console.error(`runWorker: renewLease failed: ${error._tag}`);
|
|
142
|
+
return Effect.void;
|
|
143
|
+
})));
|
|
144
|
+
},
|
|
145
|
+
log: (message) => {
|
|
146
|
+
console.log(`[${workerId}] ${message}`);
|
|
147
|
+
},
|
|
148
|
+
state: {}
|
|
149
|
+
};
|
|
150
|
+
// Merge user's custom context
|
|
151
|
+
const mergedContext = {
|
|
152
|
+
...baseContext,
|
|
153
|
+
...(config.context ?? {})
|
|
154
|
+
};
|
|
155
|
+
let result;
|
|
156
|
+
try {
|
|
157
|
+
// USER HOOK: Execute (all your logic here)
|
|
158
|
+
// Use Effect.tryPromise to properly handle the async execute hook
|
|
159
|
+
result = yield* Effect.tryPromise({
|
|
160
|
+
try: () => config.execute(task, mergedContext),
|
|
161
|
+
catch: (error) => error
|
|
162
|
+
}).pipe(Effect.catchAll((error) => {
|
|
163
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
164
|
+
return Effect.succeed({
|
|
165
|
+
success: false,
|
|
166
|
+
error: errorMessage
|
|
167
|
+
});
|
|
168
|
+
}));
|
|
169
|
+
// Update run status based on result
|
|
170
|
+
yield* runRepo.update(runId, {
|
|
171
|
+
status: result.success ? "completed" : "failed",
|
|
172
|
+
endedAt: new Date(),
|
|
173
|
+
exitCode: result.success ? 0 : 1,
|
|
174
|
+
summary: result.output,
|
|
175
|
+
errorMessage: result.error
|
|
176
|
+
});
|
|
177
|
+
if (result.success) {
|
|
178
|
+
yield* Ref.update(tasksCompletedRef, (n) => n + 1);
|
|
179
|
+
yield* Effect.log(`runWorker: Task ${task.id} completed successfully`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
yield* Effect.log(`runWorker: Task ${task.id} failed: ${result.error ?? "Unknown error"}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
// Stop renewal fiber
|
|
187
|
+
yield* Fiber.interrupt(renewFiber);
|
|
188
|
+
}
|
|
189
|
+
// Release the claim
|
|
190
|
+
yield* claimService.release(task.id, workerId).pipe(Effect.catchAll((error) => Effect.log(`runWorker: Failed to release claim for task ${task.id}: ${error.message}`)));
|
|
191
|
+
}
|
|
192
|
+
// Graceful shutdown: mark as stopping
|
|
193
|
+
yield* workerService.updateStatus(workerId, "stopping");
|
|
194
|
+
}
|
|
195
|
+
finally {
|
|
196
|
+
// Remove signal handlers to prevent accumulation across multiple runWorker calls
|
|
197
|
+
process.removeListener("SIGTERM", sigTermHandler);
|
|
198
|
+
process.removeListener("SIGINT", sigIntHandler);
|
|
199
|
+
// Cleanup: stop heartbeat fiber and deregister
|
|
200
|
+
yield* Fiber.interrupt(heartbeatFiber);
|
|
201
|
+
// Release any active claims before deregistering
|
|
202
|
+
yield* claimService.releaseByWorker(workerId).pipe(Effect.catchAll((error) => Effect.log(`runWorker: Failed to release claims for worker ${workerId}: ${error.message}`).pipe(Effect.as(0))));
|
|
203
|
+
yield* workerService.deregister(workerId).pipe(Effect.catchAll((error) => Effect.log(`runWorker: Failed to deregister worker ${workerId}: ${error.message}`)));
|
|
204
|
+
yield* Effect.log(`runWorker: Worker ${workerId} shutdown complete`);
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
/**
|
|
208
|
+
* Run the heartbeat loop.
|
|
209
|
+
* Sends periodic heartbeats to the orchestrator.
|
|
210
|
+
*/
|
|
211
|
+
const runHeartbeatLoop = (workerId, intervalSeconds, shutdownState, tasksCompletedRef) => Effect.gen(function* () {
|
|
212
|
+
const workerService = yield* WorkerService;
|
|
213
|
+
while (true) {
|
|
214
|
+
// Check shutdown before heartbeat
|
|
215
|
+
const state = yield* Ref.get(shutdownState);
|
|
216
|
+
if (state.requested)
|
|
217
|
+
break;
|
|
218
|
+
const tasksCompleted = yield* Ref.get(tasksCompletedRef);
|
|
219
|
+
yield* workerService
|
|
220
|
+
.heartbeat({
|
|
221
|
+
workerId,
|
|
222
|
+
timestamp: new Date(),
|
|
223
|
+
status: "idle", // Will be updated by main loop when busy
|
|
224
|
+
currentTaskId: undefined,
|
|
225
|
+
metrics: {
|
|
226
|
+
cpuPercent: process.cpuUsage().user / 1000000,
|
|
227
|
+
memoryMb: process.memoryUsage().heapUsed / 1024 / 1024,
|
|
228
|
+
tasksCompleted
|
|
229
|
+
}
|
|
230
|
+
})
|
|
231
|
+
.pipe(Effect.catchAll((error) => Effect.log(`runWorker: Heartbeat failed for ${workerId}: ${error.message}`)));
|
|
232
|
+
yield* Effect.sleep(Duration.seconds(intervalSeconds));
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
/**
|
|
236
|
+
* Run the lease renewal loop.
|
|
237
|
+
* Periodically renews the lease on a claimed task.
|
|
238
|
+
*/
|
|
239
|
+
const runLeaseRenewalLoop = (taskId, workerId, intervalSeconds, shutdownState) => Effect.gen(function* () {
|
|
240
|
+
const claimService = yield* ClaimService;
|
|
241
|
+
while (true) {
|
|
242
|
+
// Wait before first renewal
|
|
243
|
+
yield* Effect.sleep(Duration.seconds(intervalSeconds));
|
|
244
|
+
// Check shutdown before renewal
|
|
245
|
+
const state = yield* Ref.get(shutdownState);
|
|
246
|
+
if (state.requested)
|
|
247
|
+
break;
|
|
248
|
+
const renewResult = yield* claimService
|
|
249
|
+
.renew(taskId, workerId)
|
|
250
|
+
.pipe(Effect.tap(() => Effect.log(`runWorker: Renewed lease on task ${taskId}`)), Effect.map(() => true), Effect.catchAll((error) => Effect.gen(function* () {
|
|
251
|
+
yield* Effect.log(`runWorker: CRITICAL: Lease renewal failed for task ${taskId}: ${error.message}. Stopping worker to prevent duplicate execution.`);
|
|
252
|
+
// Stop the worker to prevent duplicate task execution
|
|
253
|
+
// Another worker may have claimed this task after lease expiry
|
|
254
|
+
yield* Ref.update(shutdownState, (state) => ({
|
|
255
|
+
...state,
|
|
256
|
+
requested: true
|
|
257
|
+
}));
|
|
258
|
+
return false;
|
|
259
|
+
})));
|
|
260
|
+
// Exit renewal loop if renewal failed
|
|
261
|
+
if (!renewResult)
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
//# sourceMappingURL=run-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-worker.js","sourceRoot":"","sources":["../../src/worker/run-worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jamesaphoenix/tx-core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "Core business logic for tx - Effect-TS services and repositories",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -32,35 +32,37 @@
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
|
-
"dist"
|
|
35
|
+
"dist",
|
|
36
|
+
"README.md"
|
|
36
37
|
],
|
|
37
38
|
"scripts": {
|
|
38
39
|
"build": "tsc -b",
|
|
39
40
|
"typecheck": "tsc --noEmit",
|
|
40
41
|
"lint": "eslint src/",
|
|
41
|
-
"test": "vitest run --passWithNoTests"
|
|
42
|
+
"test": "bun vitest run --passWithNoTests"
|
|
42
43
|
},
|
|
43
44
|
"dependencies": {
|
|
44
|
-
"@jamesaphoenix/tx-types": "
|
|
45
|
+
"@jamesaphoenix/tx-types": "*",
|
|
45
46
|
"chokidar": "^5.0.0",
|
|
46
|
-
"effect": "^3.19.15"
|
|
47
|
+
"effect": "^3.19.15",
|
|
48
|
+
"yaml": "^2.7.0"
|
|
47
49
|
},
|
|
48
50
|
"peerDependencies": {
|
|
49
|
-
"@anthropic-ai/sdk": "
|
|
50
|
-
"
|
|
51
|
+
"@anthropic-ai/claude-agent-sdk": ">=0.1.0",
|
|
52
|
+
"@anthropic-ai/sdk": "^0.52.0"
|
|
51
53
|
},
|
|
52
54
|
"peerDependenciesMeta": {
|
|
53
|
-
"@anthropic-ai/sdk": {
|
|
55
|
+
"@anthropic-ai/claude-agent-sdk": {
|
|
54
56
|
"optional": true
|
|
55
57
|
},
|
|
56
|
-
"
|
|
57
|
-
"optional":
|
|
58
|
+
"@anthropic-ai/sdk": {
|
|
59
|
+
"optional": true
|
|
58
60
|
}
|
|
59
61
|
},
|
|
60
62
|
"devDependencies": {
|
|
61
|
-
"@types/
|
|
63
|
+
"@types/bun": "^1.2.0",
|
|
62
64
|
"typescript": "^5.7.0",
|
|
63
|
-
"vitest": "^
|
|
65
|
+
"vitest": "^4.0.18"
|
|
64
66
|
},
|
|
65
67
|
"repository": {
|
|
66
68
|
"type": "git",
|