@jamesaphoenix/tx-core 0.4.2 → 0.4.4
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 +108 -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/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/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/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/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/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/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/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/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.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/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 +546 -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/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/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 +3 -3
- 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 +66 -27
- package/dist/services/orchestrator-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/sync-service.d.ts +17 -4
- package/dist/services/sync-service.d.ts.map +1 -1
- package/dist/services/sync-service.js +381 -116
- 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 +165 -35
- 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 +168 -72
- 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
- package/dist/mappers/anchor.d.ts +0 -14
- package/dist/mappers/anchor.d.ts.map +0 -1
- package/dist/mappers/anchor.js +0 -38
- package/dist/mappers/anchor.js.map +0 -1
- package/dist/mappers/candidate.d.ts +0 -23
- package/dist/mappers/candidate.d.ts.map +0 -1
- package/dist/mappers/candidate.js +0 -53
- package/dist/mappers/candidate.js.map +0 -1
- package/dist/mappers/edge.d.ts +0 -10
- package/dist/mappers/edge.d.ts.map +0 -1
- package/dist/mappers/edge.js +0 -19
- package/dist/mappers/edge.js.map +0 -1
- package/dist/repo/anchor-repo.d.ts +0 -52
- package/dist/repo/anchor-repo.d.ts.map +0 -1
- package/dist/repo/anchor-repo.js +0 -204
- package/dist/repo/anchor-repo.js.map +0 -1
- package/dist/repo/candidate-repo.d.ts +0 -16
- package/dist/repo/candidate-repo.d.ts.map +0 -1
- package/dist/repo/candidate-repo.js +0 -143
- package/dist/repo/candidate-repo.js.map +0 -1
- package/dist/repo/edge-repo.d.ts +0 -26
- package/dist/repo/edge-repo.d.ts.map +0 -1
- package/dist/repo/edge-repo.js +0 -227
- package/dist/repo/edge-repo.js.map +0 -1
- package/dist/services/anchor-service.d.ts +0 -147
- package/dist/services/anchor-service.d.ts.map +0 -1
- package/dist/services/anchor-service.js +0 -540
- package/dist/services/anchor-service.js.map +0 -1
- package/dist/services/anchor-verification.d.ts +0 -94
- package/dist/services/anchor-verification.d.ts.map +0 -1
- package/dist/services/anchor-verification.js +0 -617
- package/dist/services/anchor-verification.js.map +0 -1
- package/dist/services/ast-grep-service.d.ts +0 -58
- package/dist/services/ast-grep-service.d.ts.map +0 -1
- package/dist/services/ast-grep-service.js +0 -356
- package/dist/services/ast-grep-service.js.map +0 -1
- package/dist/services/candidate-extractor-service.d.ts +0 -56
- package/dist/services/candidate-extractor-service.d.ts.map +0 -1
- package/dist/services/candidate-extractor-service.js +0 -365
- package/dist/services/candidate-extractor-service.js.map +0 -1
- package/dist/services/edge-service.d.ts +0 -78
- package/dist/services/edge-service.d.ts.map +0 -1
- package/dist/services/edge-service.js +0 -158
- package/dist/services/edge-service.js.map +0 -1
- package/dist/services/feedback-tracker.d.ts +0 -64
- package/dist/services/feedback-tracker.d.ts.map +0 -1
- package/dist/services/feedback-tracker.js +0 -110
- package/dist/services/feedback-tracker.js.map +0 -1
- package/dist/services/graph-expansion.d.ts +0 -155
- package/dist/services/graph-expansion.d.ts.map +0 -1
- package/dist/services/graph-expansion.js +0 -466
- package/dist/services/graph-expansion.js.map +0 -1
- package/dist/services/promotion-service.d.ts +0 -67
- package/dist/services/promotion-service.d.ts.map +0 -1
- package/dist/services/promotion-service.js +0 -151
- package/dist/services/promotion-service.js.map +0 -1
- package/dist/services/swarm-verification.d.ts +0 -104
- package/dist/services/swarm-verification.d.ts.map +0 -1
- package/dist/services/swarm-verification.js +0 -400
- package/dist/services/swarm-verification.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/schemas/worker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/schemas/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentService — Effect wrapper around @anthropic-ai/claude-agent-sdk query()
|
|
3
|
+
*
|
|
4
|
+
* Provides a typed Effect interface for dispatching sub-agents with structured
|
|
5
|
+
* output schemas, tool permissions, and transcript streaming.
|
|
6
|
+
*
|
|
7
|
+
* Backends:
|
|
8
|
+
* - Live: Real Agent SDK calls via dynamic import
|
|
9
|
+
* - Noop: Returns empty results (tests, core commands)
|
|
10
|
+
*/
|
|
11
|
+
import { Context, Effect, Layer } from "effect";
|
|
12
|
+
import { AgentError } from "../errors.js";
|
|
13
|
+
interface AgentSdkQueryOptions {
|
|
14
|
+
tools?: string[];
|
|
15
|
+
permissionMode?: string;
|
|
16
|
+
allowDangerouslySkipPermissions?: boolean;
|
|
17
|
+
model?: string;
|
|
18
|
+
maxTurns?: number;
|
|
19
|
+
persistSession?: boolean;
|
|
20
|
+
outputFormat?: {
|
|
21
|
+
type: "json_schema";
|
|
22
|
+
schema: unknown;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** Configuration for a single agent run. */
|
|
26
|
+
export interface AgentRunConfig {
|
|
27
|
+
prompt: string;
|
|
28
|
+
options: AgentSdkQueryOptions;
|
|
29
|
+
}
|
|
30
|
+
/** Result from a completed agent run. */
|
|
31
|
+
export interface AgentResult {
|
|
32
|
+
/** Raw text result from the agent */
|
|
33
|
+
text: string;
|
|
34
|
+
/** Parsed structured output, if outputFormat was specified */
|
|
35
|
+
structuredOutput: unknown | null;
|
|
36
|
+
}
|
|
37
|
+
declare const AgentService_base: Context.TagClass<AgentService, "AgentService", {
|
|
38
|
+
/** Run a sub-agent with the given config and optional message callback. */
|
|
39
|
+
readonly run: (config: AgentRunConfig, onMessage?: (msg: unknown) => void) => Effect.Effect<AgentResult, AgentError>;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* AgentService dispatches sub-agents via the Claude Agent SDK.
|
|
43
|
+
*/
|
|
44
|
+
export declare class AgentService extends AgentService_base {
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Live implementation using @anthropic-ai/claude-agent-sdk.
|
|
48
|
+
* Dynamic import — agent SDK is an optional peer dependency.
|
|
49
|
+
*/
|
|
50
|
+
export declare const AgentServiceLive: Layer.Layer<AgentService, AgentError, never>;
|
|
51
|
+
/**
|
|
52
|
+
* Noop implementation — returns empty results for all agent runs.
|
|
53
|
+
* Used in test layers and core commands where no agent dispatch is needed.
|
|
54
|
+
*/
|
|
55
|
+
export declare const AgentServiceNoop: Layer.Layer<AgentService, never, never>;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=agent-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-service.d.ts","sourceRoot":"","sources":["../../src/services/agent-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAazC,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,aAAa,CAAA;QACnB,MAAM,EAAE,OAAO,CAAA;KAChB,CAAA;CACF;AAED,4CAA4C;AAE5C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,oBAAoB,CAAA;CAC9B;AAED,yCAAyC;AAEzC,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,8DAA8D;IAC9D,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAA;CACjC;;IAQG,2EAA2E;kBAC7D,CACZ,MAAM,EAAE,cAAc,EACtB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,KAC/B,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;;AAV/C;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBAS/B;CAAG;AAEN;;;GAGG;AACH,eAAO,MAAM,gBAAgB,8CAgE5B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,yCAG3B,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentService — Effect wrapper around @anthropic-ai/claude-agent-sdk query()
|
|
3
|
+
*
|
|
4
|
+
* Provides a typed Effect interface for dispatching sub-agents with structured
|
|
5
|
+
* output schemas, tool permissions, and transcript streaming.
|
|
6
|
+
*
|
|
7
|
+
* Backends:
|
|
8
|
+
* - Live: Real Agent SDK calls via dynamic import
|
|
9
|
+
* - Noop: Returns empty results (tests, core commands)
|
|
10
|
+
*/
|
|
11
|
+
import { Context, Effect, Layer } from "effect";
|
|
12
|
+
import { AgentError } from "../errors.js";
|
|
13
|
+
/**
|
|
14
|
+
* AgentService dispatches sub-agents via the Claude Agent SDK.
|
|
15
|
+
*/
|
|
16
|
+
export class AgentService extends Context.Tag("AgentService")() {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Live implementation using @anthropic-ai/claude-agent-sdk.
|
|
20
|
+
* Dynamic import — agent SDK is an optional peer dependency.
|
|
21
|
+
*/
|
|
22
|
+
export const AgentServiceLive = Layer.effect(AgentService, Effect.gen(function* () {
|
|
23
|
+
// Dynamic import of Claude Agent SDK
|
|
24
|
+
const queryFn = yield* Effect.tryPromise({
|
|
25
|
+
try: async () => {
|
|
26
|
+
// @ts-ignore - @anthropic-ai/claude-agent-sdk is an optional peer dependency
|
|
27
|
+
const mod = await import("@anthropic-ai/claude-agent-sdk");
|
|
28
|
+
return mod.query;
|
|
29
|
+
},
|
|
30
|
+
catch: (e) => new AgentError({
|
|
31
|
+
agent: "agent-service",
|
|
32
|
+
reason: `@anthropic-ai/claude-agent-sdk not installed: ${e instanceof Error ? e.message : String(e)}`,
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
run: (config, onMessage) => Effect.tryPromise({
|
|
37
|
+
try: async () => {
|
|
38
|
+
let text = "";
|
|
39
|
+
let structuredOutput = null;
|
|
40
|
+
let errorMessage = null;
|
|
41
|
+
for await (const message of queryFn({
|
|
42
|
+
prompt: config.prompt,
|
|
43
|
+
options: config.options,
|
|
44
|
+
})) {
|
|
45
|
+
// Forward message to callback for transcript logging
|
|
46
|
+
if (onMessage) {
|
|
47
|
+
onMessage(message);
|
|
48
|
+
}
|
|
49
|
+
const msg = message;
|
|
50
|
+
if (msg.type === "result") {
|
|
51
|
+
if (msg.subtype === "success") {
|
|
52
|
+
text = msg.result ?? "";
|
|
53
|
+
structuredOutput = msg.structured_output ?? null;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
errorMessage =
|
|
57
|
+
msg.errors?.join(", ") ?? msg.subtype ?? "unknown error";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (errorMessage) {
|
|
62
|
+
return Promise.reject(new Error(`Agent SDK error: ${errorMessage}`));
|
|
63
|
+
}
|
|
64
|
+
return { text, structuredOutput };
|
|
65
|
+
},
|
|
66
|
+
catch: (e) => new AgentError({
|
|
67
|
+
agent: "agent-service",
|
|
68
|
+
reason: `Agent SDK call failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
69
|
+
cause: e,
|
|
70
|
+
}),
|
|
71
|
+
}),
|
|
72
|
+
};
|
|
73
|
+
}));
|
|
74
|
+
/**
|
|
75
|
+
* Noop implementation — returns empty results for all agent runs.
|
|
76
|
+
* Used in test layers and core commands where no agent dispatch is needed.
|
|
77
|
+
*/
|
|
78
|
+
export const AgentServiceNoop = Layer.succeed(AgentService, {
|
|
79
|
+
run: (_config, _onMessage) => Effect.succeed({ text: "", structuredOutput: null }),
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=agent-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-service.js","sourceRoot":"","sources":["../../src/services/agent-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt-service.d.ts","sourceRoot":"","sources":["../../src/services/attempt-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEtG,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;;IAK7E,8DAA8D;qBAC7C,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,KACnB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,eAAe,GAAG,aAAa,CAAC;IAEhF,2BAA2B;kBACb,CAAC,EAAE,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAE7F,mCAAmC;0BACb,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,OAAO,EAAE,EAAE,aAAa,CAAC;IAE1F,8BAA8B;qBACb,CAAC,EAAE,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAE7F,8CAA8C;6BACrB,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAEjF,qEAAqE;sCACnC,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC;;AAxBvH,qBAAa,cAAe,SAAQ,mBA0BjC;CAAG;AAEN,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"attempt-service.d.ts","sourceRoot":"","sources":["../../src/services/attempt-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEtG,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;;IAK7E,8DAA8D;qBAC7C,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,KACnB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,eAAe,GAAG,aAAa,CAAC;IAEhF,2BAA2B;kBACb,CAAC,EAAE,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAE7F,mCAAmC;0BACb,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,OAAO,EAAE,EAAE,aAAa,CAAC;IAE1F,8BAA8B;qBACb,CAAC,EAAE,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAE7F,8CAA8C;6BACrB,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAEjF,qEAAqE;sCACnC,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC;;AAxBvH,qBAAa,cAAe,SAAQ,mBA0BjC;CAAG;AAEN,eAAO,MAAM,kBAAkB,wEA6D9B,CAAA"}
|
|
@@ -45,10 +45,7 @@ export const AttemptServiceLive = Layer.effect(AttemptService, Effect.gen(functi
|
|
|
45
45
|
}
|
|
46
46
|
yield* attemptRepo.remove(id);
|
|
47
47
|
}),
|
|
48
|
-
getFailedCount: (taskId) => Effect.
|
|
49
|
-
const attempts = yield* attemptRepo.findByTaskId(taskId);
|
|
50
|
-
return attempts.filter(a => a.outcome === "failed").length;
|
|
51
|
-
}),
|
|
48
|
+
getFailedCount: (taskId) => attemptRepo.getFailedCountsForTasks([taskId]).pipe(Effect.map(counts => counts.get(taskId) ?? 0)),
|
|
52
49
|
getFailedCountsForTasks: (taskIds) => attemptRepo.getFailedCountsForTasks(taskIds)
|
|
53
50
|
};
|
|
54
51
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt-service.js","sourceRoot":"","sources":["../../src/services/attempt-service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"attempt-service.js","sourceRoot":"","sources":["../../src/services/attempt-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-sync-service.d.ts","sourceRoot":"","sources":["../../src/services/auto-sync-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"auto-sync-service.d.ts","sourceRoot":"","sources":["../../src/services/auto-sync-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAS,KAAK,EAAO,MAAM,QAAQ,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,WAAW,GAAG,gBAAgB,GAAG,UAAU,CAAA;;IAK9E;;;OAGG;gCACyB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAE5D;;;OAGG;oCAC6B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAEhE;;;OAGG;wCACiC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAEpE;;;OAGG;mCAC4B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAE/D;;;OAGG;+BACwB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;;AA/B/D,qBAAa,eAAgB,SAAQ,oBAiClC;CAAG;AAEN,eAAO,MAAM,mBAAmB,iEA2E/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,4CAS/B,CAAA"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - Error-resilient: Export errors are logged but never propagate to caller
|
|
11
11
|
* - Configurable: Controlled via sync_config "auto_sync" setting
|
|
12
12
|
*/
|
|
13
|
-
import { Context, Effect, Layer } from "effect";
|
|
13
|
+
import { Context, Effect, Fiber, Layer, Ref } from "effect";
|
|
14
14
|
import { SqliteClient } from "../db.js";
|
|
15
15
|
import { SyncService } from "./sync-service.js";
|
|
16
16
|
import { DatabaseError } from "../errors.js";
|
|
@@ -19,6 +19,10 @@ export class AutoSyncService extends Context.Tag("AutoSyncService")() {
|
|
|
19
19
|
export const AutoSyncServiceLive = Layer.effect(AutoSyncService, Effect.gen(function* () {
|
|
20
20
|
const db = yield* SqliteClient;
|
|
21
21
|
const syncService = yield* SyncService;
|
|
22
|
+
// Track the current export fiber to prevent unbounded accumulation.
|
|
23
|
+
// When a new mutation triggers an export, any in-flight export is interrupted
|
|
24
|
+
// first — only the latest export needs to succeed since it captures all state.
|
|
25
|
+
const currentFiber = yield* Ref.make(null);
|
|
22
26
|
// Check if auto-sync is enabled
|
|
23
27
|
const isEnabled = () => Effect.try({
|
|
24
28
|
try: () => {
|
|
@@ -27,28 +31,32 @@ export const AutoSyncServiceLive = Layer.effect(AutoSyncService, Effect.gen(func
|
|
|
27
31
|
},
|
|
28
32
|
catch: (cause) => new DatabaseError({ cause })
|
|
29
33
|
});
|
|
30
|
-
// Run export in background,
|
|
34
|
+
// Run export in background, interrupting any previous in-flight export
|
|
31
35
|
const runInBackground = (exportEffect) => Effect.gen(function* () {
|
|
32
36
|
const enabled = yield* isEnabled().pipe(Effect.catchAll(() => Effect.succeed(false)));
|
|
33
37
|
if (!enabled) {
|
|
34
38
|
return;
|
|
35
39
|
}
|
|
36
|
-
// Fork the export
|
|
37
|
-
|
|
40
|
+
// Fork the new export
|
|
41
|
+
const clearRef = Ref.set(currentFiber, null);
|
|
42
|
+
const fiber = yield* Effect.fork(exportEffect.pipe(Effect.catchAll((error) => Effect.sync(() => {
|
|
38
43
|
// Log error but don't propagate
|
|
39
44
|
console.error("[auto-sync] Export failed:", error);
|
|
40
|
-
}))
|
|
45
|
+
})), Effect.asVoid,
|
|
46
|
+
// Clear the fiber ref when this export completes or is interrupted
|
|
47
|
+
Effect.ensuring(clearRef)));
|
|
48
|
+
// Atomically swap the previous fiber with the new one, then interrupt the old one.
|
|
49
|
+
// Using Ref.getAndSet ensures no concurrent caller can read a stale fiber.
|
|
50
|
+
const prevFiber = yield* Ref.getAndSet(currentFiber, fiber);
|
|
51
|
+
if (prevFiber !== null) {
|
|
52
|
+
yield* Fiber.interrupt(prevFiber);
|
|
53
|
+
}
|
|
41
54
|
});
|
|
42
55
|
return {
|
|
43
|
-
// Tasks use the standard export
|
|
44
56
|
afterTaskMutation: () => runInBackground(syncService.export()),
|
|
45
|
-
// TODO: Implement when learning sync is added to SyncService
|
|
46
57
|
afterLearningMutation: () => runInBackground(syncService.export()),
|
|
47
|
-
// TODO: Implement when file-learning sync is added to SyncService
|
|
48
58
|
afterFileLearningMutation: () => runInBackground(syncService.export()),
|
|
49
|
-
// TODO: Implement when attempt sync is added to SyncService
|
|
50
59
|
afterAttemptMutation: () => runInBackground(syncService.export()),
|
|
51
|
-
// For now, just exports tasks - extend when other entity types are supported
|
|
52
60
|
afterAnyMutation: () => runInBackground(syncService.export())
|
|
53
61
|
};
|
|
54
62
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-sync-service.js","sourceRoot":"","sources":["../../src/services/auto-sync-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"auto-sync-service.js","sourceRoot":"","sources":["../../src/services/auto-sync-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,12 +20,12 @@ declare const ClaimService_base: Context.TagClass<ClaimService, "ClaimService",
|
|
|
20
20
|
* Release a claim on a task.
|
|
21
21
|
* Only the worker who holds the claim can release it.
|
|
22
22
|
*/
|
|
23
|
-
readonly release: (taskId: string, workerId: string) => Effect.Effect<void, ClaimNotFoundError | DatabaseError>;
|
|
23
|
+
readonly release: (taskId: string, workerId: string) => Effect.Effect<void, ClaimNotFoundError | ClaimIdNotFoundError | DatabaseError>;
|
|
24
24
|
/**
|
|
25
25
|
* Renew the lease on an existing claim.
|
|
26
26
|
* Fails if the claim is expired or max renewals exceeded.
|
|
27
27
|
*/
|
|
28
|
-
readonly renew: (taskId: string, workerId: string) => Effect.Effect<TaskClaim, ClaimNotFoundError | LeaseExpiredError | MaxRenewalsExceededError | DatabaseError>;
|
|
28
|
+
readonly renew: (taskId: string, workerId: string) => Effect.Effect<TaskClaim, ClaimNotFoundError | ClaimIdNotFoundError | LeaseExpiredError | MaxRenewalsExceededError | DatabaseError>;
|
|
29
29
|
/**
|
|
30
30
|
* Get all claims that have expired but are still marked as active.
|
|
31
31
|
*/
|
|
@@ -44,6 +44,12 @@ declare const ClaimService_base: Context.TagClass<ClaimService, "ClaimService",
|
|
|
44
44
|
* Get the active claim for a task, if any.
|
|
45
45
|
*/
|
|
46
46
|
readonly getActiveClaim: (taskId: string) => Effect.Effect<TaskClaim | null, DatabaseError>;
|
|
47
|
+
/**
|
|
48
|
+
* Get active claims on tasks that are not in 'active' status.
|
|
49
|
+
* These are orphaned claims left behind when claim release fails
|
|
50
|
+
* after task completion.
|
|
51
|
+
*/
|
|
52
|
+
readonly getOrphanedClaims: () => Effect.Effect<readonly TaskClaim[], DatabaseError>;
|
|
47
53
|
}>;
|
|
48
54
|
export declare class ClaimService extends ClaimService_base {
|
|
49
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim-service.d.ts","sourceRoot":"","sources":["../../src/services/claim-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;;IAWjD;;;OAGG;oBACa,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,oBAAoB,CAAC,EAAE,MAAM,KAC1B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,aAAa,CAAC;IAEtF;;;OAGG;sBACe,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"claim-service.d.ts","sourceRoot":"","sources":["../../src/services/claim-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;;IAWjD;;;OAGG;oBACa,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,oBAAoB,CAAC,EAAE,MAAM,KAC1B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,aAAa,CAAC;IAEtF;;;OAGG;sBACe,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,aAAa,CAAC;IAEnF;;;OAGG;oBACa,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,wBAAwB,GAAG,aAAa,CAAC;IAEvI;;OAEG;yBACkB,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,EAAE,aAAa,CAAC;IAE7E;;;OAGG;qBACc,CACf,OAAO,EAAE,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAE9D;;;OAGG;8BACuB,CACxB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAEzC;;OAEG;6BACsB,CACvB,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,aAAa,CAAC;IAEnD;;;;OAIG;gCACyB,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,EAAE,aAAa,CAAC;;AAhExF,qBAAa,YAAa,SAAQ,iBAkE/B;CAAG;AAEN,eAAO,MAAM,gBAAgB,kGA8K5B,CAAA"}
|
|
@@ -27,12 +27,12 @@ export const ClaimServiceLive = Layer.effect(ClaimService, Effect.gen(function*
|
|
|
27
27
|
if (!task) {
|
|
28
28
|
return yield* Effect.fail(new TaskNotFoundError({ id: taskId }));
|
|
29
29
|
}
|
|
30
|
-
//
|
|
31
|
-
const
|
|
32
|
-
if (
|
|
30
|
+
// Verify task is in a claimable status (not terminal)
|
|
31
|
+
const TERMINAL_STATUSES = ["done", "review", "human_needs_to_review"];
|
|
32
|
+
if (TERMINAL_STATUSES.some(s => s === task.status)) {
|
|
33
33
|
return yield* Effect.fail(new AlreadyClaimedError({
|
|
34
34
|
taskId,
|
|
35
|
-
claimedByWorkerId:
|
|
35
|
+
claimedByWorkerId: `task in terminal status '${task.status}'`
|
|
36
36
|
}));
|
|
37
37
|
}
|
|
38
38
|
// Get lease duration from config or use provided/default
|
|
@@ -40,7 +40,9 @@ export const ClaimServiceLive = Layer.effect(ClaimService, Effect.gen(function*
|
|
|
40
40
|
const duration = leaseDurationMinutes ?? state.leaseDurationMinutes;
|
|
41
41
|
const now = new Date();
|
|
42
42
|
const leaseExpiresAt = new Date(now.getTime() + duration * 60 * 1000);
|
|
43
|
-
|
|
43
|
+
// Use atomic insert to prevent race condition
|
|
44
|
+
// This single SQL operation checks for existing claims AND inserts atomically
|
|
45
|
+
const result = yield* claimRepo.tryInsertAtomic({
|
|
44
46
|
taskId,
|
|
45
47
|
workerId,
|
|
46
48
|
claimedAt: now,
|
|
@@ -48,8 +50,15 @@ export const ClaimServiceLive = Layer.effect(ClaimService, Effect.gen(function*
|
|
|
48
50
|
renewedCount: 0,
|
|
49
51
|
status: "active"
|
|
50
52
|
});
|
|
53
|
+
if (!result.success) {
|
|
54
|
+
// Another worker already has an active claim
|
|
55
|
+
return yield* Effect.fail(new AlreadyClaimedError({
|
|
56
|
+
taskId,
|
|
57
|
+
claimedByWorkerId: result.existingClaim?.workerId ?? "unknown"
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
51
60
|
yield* Effect.log(`Task ${taskId} claimed by worker ${workerId}, expires at ${leaseExpiresAt.toISOString()}`);
|
|
52
|
-
return claim;
|
|
61
|
+
return result.claim;
|
|
53
62
|
}),
|
|
54
63
|
release: (taskId, workerId) => Effect.gen(function* () {
|
|
55
64
|
const claim = yield* claimRepo.findActiveByTaskId(taskId);
|
|
@@ -68,6 +77,7 @@ export const ClaimServiceLive = Layer.effect(ClaimService, Effect.gen(function*
|
|
|
68
77
|
yield* Effect.log(`Task ${taskId} claim released by worker ${workerId}`);
|
|
69
78
|
}),
|
|
70
79
|
renew: (taskId, workerId) => Effect.gen(function* () {
|
|
80
|
+
// First fetch the claim to check ownership and max renewals
|
|
71
81
|
const claim = yield* claimRepo.findActiveByTaskId(taskId);
|
|
72
82
|
if (!claim) {
|
|
73
83
|
return yield* Effect.fail(new ClaimNotFoundError({ taskId, workerId }));
|
|
@@ -76,15 +86,7 @@ export const ClaimServiceLive = Layer.effect(ClaimService, Effect.gen(function*
|
|
|
76
86
|
if (claim.workerId !== workerId) {
|
|
77
87
|
return yield* Effect.fail(new ClaimNotFoundError({ taskId, workerId }));
|
|
78
88
|
}
|
|
79
|
-
// Check
|
|
80
|
-
const now = new Date();
|
|
81
|
-
if (claim.leaseExpiresAt < now) {
|
|
82
|
-
return yield* Effect.fail(new LeaseExpiredError({
|
|
83
|
-
taskId,
|
|
84
|
-
expiredAt: claim.leaseExpiresAt.toISOString()
|
|
85
|
-
}));
|
|
86
|
-
}
|
|
87
|
-
// Check max renewals
|
|
89
|
+
// Check max renewals before attempting atomic renewal
|
|
88
90
|
if (claim.renewedCount >= DEFAULT_MAX_RENEWALS) {
|
|
89
91
|
return yield* Effect.fail(new MaxRenewalsExceededError({
|
|
90
92
|
taskId,
|
|
@@ -94,15 +96,24 @@ export const ClaimServiceLive = Layer.effect(ClaimService, Effect.gen(function*
|
|
|
94
96
|
}
|
|
95
97
|
// Get lease duration from config
|
|
96
98
|
const state = yield* orchestratorRepo.get();
|
|
99
|
+
const now = new Date();
|
|
97
100
|
const newLeaseExpiresAt = new Date(now.getTime() + state.leaseDurationMinutes * 60 * 1000);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
// Use atomic renewal to prevent race condition between expiration check and update
|
|
102
|
+
// The renewal only succeeds if the lease hasn't expired at the moment of update
|
|
103
|
+
const result = yield* claimRepo.tryRenewAtomic(claim.id, workerId, newLeaseExpiresAt);
|
|
104
|
+
if (!result.success) {
|
|
105
|
+
if (result.failureReason === "expired") {
|
|
106
|
+
// The lease expired between our initial check and the atomic renewal attempt
|
|
107
|
+
return yield* Effect.fail(new LeaseExpiredError({
|
|
108
|
+
taskId,
|
|
109
|
+
expiredAt: claim.leaseExpiresAt.toISOString()
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
// not_found - claim was released or expired by another process
|
|
113
|
+
return yield* Effect.fail(new ClaimNotFoundError({ taskId, workerId }));
|
|
114
|
+
}
|
|
115
|
+
yield* Effect.log(`Task ${taskId} lease renewed (${result.claim.renewedCount}/${DEFAULT_MAX_RENEWALS}), new expiry: ${newLeaseExpiresAt.toISOString()}`);
|
|
116
|
+
return result.claim;
|
|
106
117
|
}),
|
|
107
118
|
getExpired: () => Effect.gen(function* () {
|
|
108
119
|
const now = new Date();
|
|
@@ -128,6 +139,9 @@ export const ClaimServiceLive = Layer.effect(ClaimService, Effect.gen(function*
|
|
|
128
139
|
}),
|
|
129
140
|
getActiveClaim: (taskId) => Effect.gen(function* () {
|
|
130
141
|
return yield* claimRepo.findActiveByTaskId(taskId);
|
|
142
|
+
}),
|
|
143
|
+
getOrphanedClaims: () => Effect.gen(function* () {
|
|
144
|
+
return yield* claimRepo.findOrphanedClaims();
|
|
131
145
|
})
|
|
132
146
|
};
|
|
133
147
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim-service.js","sourceRoot":"","sources":["../../src/services/claim-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAElB,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,cAAc,CAAA;AAGrB;;;GAGG;AACH,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAE/B,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"claim-service.js","sourceRoot":"","sources":["../../src/services/claim-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CycleScanService — Cycle-Based Issue Discovery
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates sub-agent swarms via AgentService to scan for codebase issues,
|
|
5
|
+
* deduplicates findings against known issues using an LLM-as-judge, and
|
|
6
|
+
* optionally fixes them. Repeats in rounds within each cycle until convergence.
|
|
7
|
+
*
|
|
8
|
+
* Replaces scripts/cycle-scan.ts with proper Effect service patterns.
|
|
9
|
+
*/
|
|
10
|
+
import { Context, Effect, Layer } from "effect";
|
|
11
|
+
import type { Finding, CycleConfig, CycleResult, CycleProgressEvent } from "@jamesaphoenix/tx-types";
|
|
12
|
+
import { CycleScanError } from "../errors.js";
|
|
13
|
+
import { AgentService } from "./agent-service.js";
|
|
14
|
+
import { SqliteClient } from "../db.js";
|
|
15
|
+
declare const CycleScanService_base: Context.TagClass<CycleScanService, "CycleScanService", {
|
|
16
|
+
/** Run one or more scan cycles with the given configuration. */
|
|
17
|
+
readonly runCycles: (config: CycleConfig, onProgress?: (event: CycleProgressEvent) => void) => Effect.Effect<CycleResult[], CycleScanError>;
|
|
18
|
+
/** Compute loss from a set of findings using weighted severity formula. */
|
|
19
|
+
readonly computeLoss: (findings: readonly Finding[]) => number;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* CycleScanService orchestrates cycle-based issue discovery.
|
|
23
|
+
*/
|
|
24
|
+
export declare class CycleScanService extends CycleScanService_base {
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Live implementation of CycleScanService.
|
|
28
|
+
* Depends on AgentService for sub-agent dispatch and SqliteClient for DB ops.
|
|
29
|
+
*/
|
|
30
|
+
export declare const CycleScanServiceLive: Layer.Layer<CycleScanService, never, SqliteClient | AgentService>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=cycle-scan-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cycle-scan-service.d.ts","sourceRoot":"","sources":["../../src/services/cycle-scan-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAM/C,OAAO,KAAK,EACV,OAAO,EAEP,WAAW,EACX,WAAW,EACX,kBAAkB,EACnB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;;IAiMnC,gEAAgE;wBAC5C,CAClB,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,KAC7C,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC;IAEjD,2EAA2E;0BACrD,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,KAAK,MAAM;;AAblE;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,qBAYnC;CAAG;AAEN;;;GAGG;AACH,eAAO,MAAM,oBAAoB,mEAmchC,CAAA"}
|