@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
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OrchestratorState mappers - convert database rows to domain objects
|
|
3
3
|
*/
|
|
4
|
+
import { InvalidStatusError } from "../errors.js";
|
|
5
|
+
import { parseDate } from "./parse-date.js";
|
|
4
6
|
/**
|
|
5
7
|
* Valid orchestrator statuses.
|
|
6
8
|
*/
|
|
@@ -11,24 +13,48 @@ export const ORCHESTRATOR_STATUSES = ["stopped", "starting", "running", "stoppin
|
|
|
11
13
|
export const isValidOrchestratorStatus = (s) => {
|
|
12
14
|
return ORCHESTRATOR_STATUSES.includes(s);
|
|
13
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Safely parse a JSON object string, returning empty object on failure.
|
|
18
|
+
*/
|
|
19
|
+
const safeParseMetadata = (json) => {
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(json || "{}");
|
|
22
|
+
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
23
|
+
const result = {};
|
|
24
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
25
|
+
result[key] = value;
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
};
|
|
14
35
|
/**
|
|
15
36
|
* Convert a database row to an OrchestratorState domain object.
|
|
16
|
-
* Throws if status is invalid.
|
|
37
|
+
* Throws InvalidStatusError if status is invalid.
|
|
17
38
|
*/
|
|
18
39
|
export const rowToOrchestratorState = (row) => {
|
|
19
40
|
if (!isValidOrchestratorStatus(row.status)) {
|
|
20
|
-
throw new
|
|
41
|
+
throw new InvalidStatusError({
|
|
42
|
+
entity: "orchestrator",
|
|
43
|
+
status: row.status,
|
|
44
|
+
validStatuses: ORCHESTRATOR_STATUSES,
|
|
45
|
+
rowId: row.id
|
|
46
|
+
});
|
|
21
47
|
}
|
|
22
48
|
return {
|
|
23
49
|
status: row.status,
|
|
24
50
|
pid: row.pid,
|
|
25
|
-
startedAt: row.started_at ?
|
|
26
|
-
lastReconcileAt: row.last_reconcile_at ?
|
|
51
|
+
startedAt: row.started_at ? parseDate(row.started_at, "started_at", row.id) : null,
|
|
52
|
+
lastReconcileAt: row.last_reconcile_at ? parseDate(row.last_reconcile_at, "last_reconcile_at", row.id) : null,
|
|
27
53
|
workerPoolSize: row.worker_pool_size,
|
|
28
54
|
reconcileIntervalSeconds: row.reconcile_interval_seconds,
|
|
29
55
|
heartbeatIntervalSeconds: row.heartbeat_interval_seconds,
|
|
30
56
|
leaseDurationMinutes: row.lease_duration_minutes,
|
|
31
|
-
metadata:
|
|
57
|
+
metadata: safeParseMetadata(row.metadata)
|
|
32
58
|
};
|
|
33
59
|
};
|
|
34
60
|
//# sourceMappingURL=orchestrator-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-state.js","sourceRoot":"","sources":["../../src/mappers/orchestrator-state.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"orchestrator-state.js","sourceRoot":"","sources":["../../src/mappers/orchestrator-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAmB3C;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAA;AAE5F;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAS,EAA2B,EAAE;IAC9E,OAAQ,qBAA2C,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAA+B,EAA2B,EAAE;IACrF,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAA4B,EAAE,CAAA;YAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACrB,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAyB,EAAqB,EAAE;IACrF,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,kBAAkB,CAAC;YAC3B,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,qBAAqB;YACpC,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAClF,eAAe,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7G,cAAc,EAAE,GAAG,CAAC,gBAAgB;QACpC,wBAAwB,EAAE,GAAG,CAAC,0BAA0B;QACxD,wBAAwB,EAAE,GAAG,CAAC,0BAA0B;QACxD,oBAAoB,EAAE,GAAG,CAAC,sBAAsB;QAChD,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC1C,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared date parsing utility for all mapper functions.
|
|
3
|
+
* Validates that parsed Date objects are valid, preventing NaN cascades
|
|
4
|
+
* through score calculations and sorting.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Parse a date string from a database row and validate it.
|
|
8
|
+
* Throws InvalidDateError if the string produces an Invalid Date.
|
|
9
|
+
*/
|
|
10
|
+
export declare const parseDate: (value: string, field: string, rowId?: string | number) => Date;
|
|
11
|
+
//# sourceMappingURL=parse-date.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-date.d.ts","sourceRoot":"","sources":["../../src/mappers/parse-date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,KAAG,IAMjF,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared date parsing utility for all mapper functions.
|
|
3
|
+
* Validates that parsed Date objects are valid, preventing NaN cascades
|
|
4
|
+
* through score calculations and sorting.
|
|
5
|
+
*/
|
|
6
|
+
import { InvalidDateError } from "../errors.js";
|
|
7
|
+
/**
|
|
8
|
+
* Parse a date string from a database row and validate it.
|
|
9
|
+
* Throws InvalidDateError if the string produces an Invalid Date.
|
|
10
|
+
*/
|
|
11
|
+
export const parseDate = (value, field, rowId) => {
|
|
12
|
+
const date = new Date(value);
|
|
13
|
+
if (isNaN(date.getTime())) {
|
|
14
|
+
throw new InvalidDateError({ field, value, rowId });
|
|
15
|
+
}
|
|
16
|
+
return date;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=parse-date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-date.js","sourceRoot":"","sources":["../../src/mappers/parse-date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,KAAuB,EAAQ,EAAE;IACvF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
package/dist/mappers/run.d.ts
CHANGED
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Run mappers - convert database rows to domain objects
|
|
3
3
|
*/
|
|
4
|
-
import type { Run, RunId, RunRow } from "@jamesaphoenix/tx-types";
|
|
5
|
-
|
|
4
|
+
import type { Run, RunId, RunStatus, RunRow } from "@jamesaphoenix/tx-types";
|
|
5
|
+
import { RUN_STATUSES } from "@jamesaphoenix/tx-types";
|
|
6
|
+
export { RUN_STATUSES };
|
|
6
7
|
/**
|
|
7
8
|
* Generate a run ID from timestamp + random.
|
|
8
9
|
*/
|
|
9
10
|
export declare const generateRunId: () => RunId;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a string is a valid RunStatus.
|
|
13
|
+
*/
|
|
14
|
+
export declare const isValidRunStatus: (s: string) => s is RunStatus;
|
|
10
15
|
/**
|
|
11
16
|
* Convert a database row to a Run domain object.
|
|
17
|
+
* Validates status at runtime.
|
|
12
18
|
*/
|
|
13
19
|
export declare const rowToRun: (row: RunRow) => Run;
|
|
14
20
|
/**
|
|
15
21
|
* Serialize Run for JSON output.
|
|
16
22
|
*/
|
|
17
23
|
export declare const serializeRun: (run: Run) => {
|
|
18
|
-
id:
|
|
24
|
+
id: string & import("effect/Brand").Brand<"RunId">;
|
|
19
25
|
taskId: string | null;
|
|
20
26
|
agent: string;
|
|
21
27
|
startedAt: string;
|
|
@@ -24,9 +30,13 @@ export declare const serializeRun: (run: Run) => {
|
|
|
24
30
|
exitCode: number | null;
|
|
25
31
|
pid: number | null;
|
|
26
32
|
transcriptPath: string | null;
|
|
33
|
+
stderrPath: string | null;
|
|
34
|
+
stdoutPath: string | null;
|
|
27
35
|
contextInjected: string | null;
|
|
28
36
|
summary: string | null;
|
|
29
37
|
errorMessage: string | null;
|
|
30
|
-
metadata:
|
|
38
|
+
metadata: {
|
|
39
|
+
readonly [x: string]: unknown;
|
|
40
|
+
};
|
|
31
41
|
};
|
|
32
42
|
//# sourceMappingURL=run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/mappers/run.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/mappers/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,GAAG,EACH,KAAK,EACL,SAAS,EACT,MAAM,EACP,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAKtD,OAAO,EAAE,YAAY,EAAE,CAAA;AAOvB;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,KAMhC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,SAEjD,CAAA;AAeD;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,GA0BtC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,GAAG;;;;;;;;;;;;;;;;;;CAgBnC,CAAA"}
|
package/dist/mappers/run.js
CHANGED
|
@@ -2,8 +2,16 @@
|
|
|
2
2
|
* Run mappers - convert database rows to domain objects
|
|
3
3
|
*/
|
|
4
4
|
import { createHash } from "crypto";
|
|
5
|
+
import { Schema } from "effect";
|
|
6
|
+
import { RUN_STATUSES } from "@jamesaphoenix/tx-types";
|
|
7
|
+
import { InvalidStatusError } from "../errors.js";
|
|
8
|
+
import { parseDate } from "./parse-date.js";
|
|
5
9
|
// Re-export constants from @tx/types for convenience
|
|
6
|
-
export { RUN_STATUSES }
|
|
10
|
+
export { RUN_STATUSES };
|
|
11
|
+
/**
|
|
12
|
+
* Schema for metadata - a record of string keys to unknown values.
|
|
13
|
+
*/
|
|
14
|
+
const MetadataSchema = Schema.Record({ key: Schema.String, value: Schema.Unknown });
|
|
7
15
|
/**
|
|
8
16
|
* Generate a run ID from timestamp + random.
|
|
9
17
|
*/
|
|
@@ -15,11 +23,19 @@ export const generateRunId = () => {
|
|
|
15
23
|
return `run-${hash}`;
|
|
16
24
|
};
|
|
17
25
|
/**
|
|
18
|
-
*
|
|
26
|
+
* Check if a string is a valid RunStatus.
|
|
27
|
+
*/
|
|
28
|
+
export const isValidRunStatus = (s) => {
|
|
29
|
+
return RUN_STATUSES.includes(s);
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Safely parse and validate metadata JSON string.
|
|
33
|
+
* Returns empty object if parsing fails or validation fails.
|
|
19
34
|
*/
|
|
20
35
|
const safeParseMetadata = (json) => {
|
|
21
36
|
try {
|
|
22
|
-
|
|
37
|
+
const parsed = JSON.parse(json || "{}");
|
|
38
|
+
return Schema.decodeUnknownSync(MetadataSchema)(parsed);
|
|
23
39
|
}
|
|
24
40
|
catch {
|
|
25
41
|
return {};
|
|
@@ -27,22 +43,35 @@ const safeParseMetadata = (json) => {
|
|
|
27
43
|
};
|
|
28
44
|
/**
|
|
29
45
|
* Convert a database row to a Run domain object.
|
|
46
|
+
* Validates status at runtime.
|
|
30
47
|
*/
|
|
31
|
-
export const rowToRun = (row) =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
export const rowToRun = (row) => {
|
|
49
|
+
if (!isValidRunStatus(row.status)) {
|
|
50
|
+
throw new InvalidStatusError({
|
|
51
|
+
entity: "run",
|
|
52
|
+
status: row.status,
|
|
53
|
+
validStatuses: RUN_STATUSES,
|
|
54
|
+
rowId: row.id
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
id: row.id,
|
|
59
|
+
taskId: row.task_id,
|
|
60
|
+
agent: row.agent,
|
|
61
|
+
startedAt: parseDate(row.started_at, "started_at", row.id),
|
|
62
|
+
endedAt: row.ended_at ? parseDate(row.ended_at, "ended_at", row.id) : null,
|
|
63
|
+
status: row.status,
|
|
64
|
+
exitCode: row.exit_code,
|
|
65
|
+
pid: row.pid,
|
|
66
|
+
transcriptPath: row.transcript_path,
|
|
67
|
+
stderrPath: row.stderr_path,
|
|
68
|
+
stdoutPath: row.stdout_path,
|
|
69
|
+
contextInjected: row.context_injected,
|
|
70
|
+
summary: row.summary,
|
|
71
|
+
errorMessage: row.error_message,
|
|
72
|
+
metadata: safeParseMetadata(row.metadata)
|
|
73
|
+
};
|
|
74
|
+
};
|
|
46
75
|
/**
|
|
47
76
|
* Serialize Run for JSON output.
|
|
48
77
|
*/
|
|
@@ -56,6 +85,8 @@ export const serializeRun = (run) => ({
|
|
|
56
85
|
exitCode: run.exitCode,
|
|
57
86
|
pid: run.pid,
|
|
58
87
|
transcriptPath: run.transcriptPath,
|
|
88
|
+
stderrPath: run.stderrPath,
|
|
89
|
+
stdoutPath: run.stdoutPath,
|
|
59
90
|
contextInjected: run.contextInjected,
|
|
60
91
|
summary: run.summary,
|
|
61
92
|
errorMessage: run.errorMessage,
|
package/dist/mappers/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/mappers/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/mappers/run.ts"],"names":[],"mappings":"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"}
|
package/dist/mappers/task.d.ts
CHANGED
|
@@ -2,14 +2,18 @@
|
|
|
2
2
|
* Task mappers - convert database rows to domain objects
|
|
3
3
|
*/
|
|
4
4
|
import type { Task, TaskStatus, TaskRow, TaskDependency, DependencyRow } from "@jamesaphoenix/tx-types";
|
|
5
|
+
import { TASK_STATUSES } from "@jamesaphoenix/tx-types";
|
|
5
6
|
export type { TaskRow, DependencyRow } from "@jamesaphoenix/tx-types";
|
|
6
|
-
export { TASK_STATUSES
|
|
7
|
+
export { TASK_STATUSES };
|
|
8
|
+
export { VALID_TRANSITIONS } from "@jamesaphoenix/tx-types";
|
|
7
9
|
/**
|
|
8
10
|
* Convert a database row to a Task domain object.
|
|
11
|
+
* Validates status and ID fields at runtime before constructing domain object.
|
|
9
12
|
*/
|
|
10
13
|
export declare const rowToTask: (row: TaskRow) => Task;
|
|
11
14
|
/**
|
|
12
15
|
* Convert a dependency database row to a TaskDependency domain object.
|
|
16
|
+
* Validates TaskId fields at runtime.
|
|
13
17
|
*/
|
|
14
18
|
export declare const rowToDependency: (row: DependencyRow) => TaskDependency;
|
|
15
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/mappers/task.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/mappers/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,IAAI,EACJ,UAAU,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACd,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAgB,aAAa,EAAE,MAAM,yBAAyB,CAAA;AA0CrE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,KAAG,IAqBxC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,aAAa,KAAG,cAInD,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,UAM9C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,UAAU,EAAE,IAAI,UAAU,KAAG,OAYpE,CAAA"}
|
package/dist/mappers/task.js
CHANGED
|
@@ -1,29 +1,79 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Task mappers - convert database rows to domain objects
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
import { Schema } from "effect";
|
|
5
|
+
import { assertTaskId, TASK_STATUSES } from "@jamesaphoenix/tx-types";
|
|
6
|
+
import { InvalidStatusError } from "../errors.js";
|
|
7
|
+
import { parseDate } from "./parse-date.js";
|
|
8
|
+
/**
|
|
9
|
+
* Schema for task metadata - a record of string keys to unknown values.
|
|
10
|
+
* Used to validate JSON.parse output before casting to object.
|
|
11
|
+
*/
|
|
12
|
+
const MetadataSchema = Schema.Record({ key: Schema.String, value: Schema.Unknown });
|
|
13
|
+
/**
|
|
14
|
+
* Safely parse and validate metadata JSON string.
|
|
15
|
+
* On corruption: logs a warning, preserves the raw value under `_corruptedRaw`
|
|
16
|
+
* with the error message under `_corruptionError` for downstream recovery.
|
|
17
|
+
* Only catches expected errors (SyntaxError, Schema ParseError); re-throws unexpected ones.
|
|
18
|
+
*/
|
|
19
|
+
const parseMetadata = (metadataJson) => {
|
|
20
|
+
if (!metadataJson)
|
|
21
|
+
return {};
|
|
22
|
+
let parsed;
|
|
23
|
+
try {
|
|
24
|
+
parsed = JSON.parse(metadataJson);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (!(error instanceof SyntaxError))
|
|
28
|
+
throw error;
|
|
29
|
+
console.warn(`[tx] Corrupted metadata JSON (SyntaxError): ${error.message}. Raw value preserved for recovery.`);
|
|
30
|
+
return { _corruptedRaw: metadataJson, _corruptionError: `SyntaxError: ${error.message}` };
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
return Schema.decodeUnknownSync(MetadataSchema)(parsed);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
37
|
+
console.warn(`[tx] Metadata schema validation failed: ${message}. Raw value preserved for recovery.`);
|
|
38
|
+
return { _corruptedRaw: metadataJson, _corruptionError: `SchemaError: ${message}` };
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
export { TASK_STATUSES };
|
|
42
|
+
export { VALID_TRANSITIONS } from "@jamesaphoenix/tx-types";
|
|
5
43
|
/**
|
|
6
44
|
* Convert a database row to a Task domain object.
|
|
45
|
+
* Validates status and ID fields at runtime before constructing domain object.
|
|
7
46
|
*/
|
|
8
|
-
export const rowToTask = (row) =>
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
47
|
+
export const rowToTask = (row) => {
|
|
48
|
+
if (!isValidStatus(row.status)) {
|
|
49
|
+
throw new InvalidStatusError({
|
|
50
|
+
entity: "task",
|
|
51
|
+
status: row.status,
|
|
52
|
+
validStatuses: TASK_STATUSES,
|
|
53
|
+
rowId: row.id
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
id: assertTaskId(row.id),
|
|
58
|
+
title: row.title,
|
|
59
|
+
description: row.description,
|
|
60
|
+
status: row.status,
|
|
61
|
+
parentId: row.parent_id ? assertTaskId(row.parent_id) : null,
|
|
62
|
+
score: row.score,
|
|
63
|
+
createdAt: parseDate(row.created_at, "created_at", row.id),
|
|
64
|
+
updatedAt: parseDate(row.updated_at, "updated_at", row.id),
|
|
65
|
+
completedAt: row.completed_at ? parseDate(row.completed_at, "completed_at", row.id) : null,
|
|
66
|
+
metadata: parseMetadata(row.metadata)
|
|
67
|
+
};
|
|
68
|
+
};
|
|
20
69
|
/**
|
|
21
70
|
* Convert a dependency database row to a TaskDependency domain object.
|
|
71
|
+
* Validates TaskId fields at runtime.
|
|
22
72
|
*/
|
|
23
73
|
export const rowToDependency = (row) => ({
|
|
24
|
-
blockerId: row.blocker_id,
|
|
25
|
-
blockedId: row.blocked_id,
|
|
26
|
-
createdAt:
|
|
74
|
+
blockerId: assertTaskId(row.blocker_id),
|
|
75
|
+
blockedId: assertTaskId(row.blocked_id),
|
|
76
|
+
createdAt: parseDate(row.created_at, "created_at")
|
|
27
77
|
});
|
|
28
78
|
/**
|
|
29
79
|
* Check if a string is a valid TaskStatus.
|
package/dist/mappers/task.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/mappers/task.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/mappers/task.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
* TrackedProject mappers - convert database rows to domain objects
|
|
3
3
|
*/
|
|
4
4
|
import type { TrackedProject, TrackedProjectRow, SourceType } from "@jamesaphoenix/tx-types";
|
|
5
|
+
import { SOURCE_TYPES } from "@jamesaphoenix/tx-types";
|
|
5
6
|
export type { TrackedProjectRow } from "@jamesaphoenix/tx-types";
|
|
6
|
-
export { SOURCE_TYPES }
|
|
7
|
+
export { SOURCE_TYPES };
|
|
7
8
|
/**
|
|
8
9
|
* Check if a string is a valid SourceType for tracked projects.
|
|
9
10
|
*/
|
|
10
11
|
export declare const isValidTrackedSourceType: (s: string) => s is SourceType;
|
|
11
12
|
/**
|
|
12
13
|
* Convert a database row to a TrackedProject domain object.
|
|
14
|
+
* Validates source_type at runtime.
|
|
13
15
|
*/
|
|
14
16
|
export declare const rowToTrackedProject: (row: TrackedProjectRow) => TrackedProject;
|
|
15
17
|
//# sourceMappingURL=tracked-project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracked-project.d.ts","sourceRoot":"","sources":["../../src/mappers/tracked-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,UAAU,EACX,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"tracked-project.d.ts","sourceRoot":"","sources":["../../src/mappers/tracked-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,UAAU,EACX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAKtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;GAEG;AACH,eAAO,MAAM,wBAAwB,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,UAGzD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,iBAAiB,KAAG,cAiB5D,CAAA"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TrackedProject mappers - convert database rows to domain objects
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
import { SOURCE_TYPES } from "@jamesaphoenix/tx-types";
|
|
5
|
+
import { InvalidStatusError } from "../errors.js";
|
|
6
|
+
import { parseDate } from "./parse-date.js";
|
|
7
|
+
export { SOURCE_TYPES };
|
|
5
8
|
/**
|
|
6
9
|
* Check if a string is a valid SourceType for tracked projects.
|
|
7
10
|
*/
|
|
@@ -11,13 +14,24 @@ export const isValidTrackedSourceType = (s) => {
|
|
|
11
14
|
};
|
|
12
15
|
/**
|
|
13
16
|
* Convert a database row to a TrackedProject domain object.
|
|
17
|
+
* Validates source_type at runtime.
|
|
14
18
|
*/
|
|
15
|
-
export const rowToTrackedProject = (row) =>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
});
|
|
19
|
+
export const rowToTrackedProject = (row) => {
|
|
20
|
+
if (!isValidTrackedSourceType(row.source_type)) {
|
|
21
|
+
throw new InvalidStatusError({
|
|
22
|
+
entity: "tracked_project",
|
|
23
|
+
status: row.source_type,
|
|
24
|
+
validStatuses: SOURCE_TYPES,
|
|
25
|
+
rowId: row.id
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
id: row.id,
|
|
30
|
+
projectPath: row.project_path,
|
|
31
|
+
projectId: row.project_id,
|
|
32
|
+
sourceType: row.source_type,
|
|
33
|
+
addedAt: parseDate(row.added_at, "added_at", row.id),
|
|
34
|
+
enabled: row.enabled === 1
|
|
35
|
+
};
|
|
36
|
+
};
|
|
23
37
|
//# sourceMappingURL=tracked-project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracked-project.js","sourceRoot":"","sources":["../../src/mappers/tracked-project.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"tracked-project.js","sourceRoot":"","sources":["../../src/mappers/tracked-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAS,EAAmB,EAAE;IACrE,MAAM,WAAW,GAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAChF,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAsB,EAAkB,EAAE;IAC5E,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,kBAAkB,CAAC;YAC3B,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,GAAG,CAAC,WAAW;YACvB,aAAa,EAAE,YAAY;YAC3B,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,CAAC;KAC3B,CAAA;AACH,CAAC,CAAA"}
|
package/dist/mappers/worker.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export declare const WORKER_STATUSES: readonly ["starting", "idle", "busy", "sto
|
|
|
27
27
|
export declare const isValidWorkerStatus: (s: string) => s is WorkerStatus;
|
|
28
28
|
/**
|
|
29
29
|
* Convert a database row to a Worker domain object.
|
|
30
|
-
* Throws if status is invalid.
|
|
30
|
+
* Throws InvalidStatusError if status is invalid.
|
|
31
31
|
*/
|
|
32
32
|
export declare const rowToWorker: (row: WorkerRow) => Worker;
|
|
33
33
|
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/mappers/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/mappers/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEhE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,2DAA4D,CAAA;AAExF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,YAEpD,CAAA;AAiCD;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,SAAS,KAAG,MAqB5C,CAAA"}
|
package/dist/mappers/worker.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Worker mappers - convert database rows to domain objects
|
|
3
3
|
*/
|
|
4
|
+
import { InvalidStatusError } from "../errors.js";
|
|
5
|
+
import { parseDate } from "./parse-date.js";
|
|
4
6
|
/**
|
|
5
7
|
* Valid worker statuses.
|
|
6
8
|
*/
|
|
@@ -11,13 +13,49 @@ export const WORKER_STATUSES = ["starting", "idle", "busy", "stopping", "dead"];
|
|
|
11
13
|
export const isValidWorkerStatus = (s) => {
|
|
12
14
|
return WORKER_STATUSES.includes(s);
|
|
13
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Safely parse a JSON array of strings, returning empty array on failure.
|
|
18
|
+
*/
|
|
19
|
+
const safeParseCapabilities = (json) => {
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(json || "[]");
|
|
22
|
+
return Array.isArray(parsed) ? parsed.filter((v) => typeof v === "string") : [];
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Safely parse a JSON object string, returning empty object on failure.
|
|
30
|
+
*/
|
|
31
|
+
const safeParseMetadata = (json) => {
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(json || "{}");
|
|
34
|
+
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
35
|
+
const result = {};
|
|
36
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
37
|
+
result[key] = value;
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return {};
|
|
45
|
+
}
|
|
46
|
+
};
|
|
14
47
|
/**
|
|
15
48
|
* Convert a database row to a Worker domain object.
|
|
16
|
-
* Throws if status is invalid.
|
|
49
|
+
* Throws InvalidStatusError if status is invalid.
|
|
17
50
|
*/
|
|
18
51
|
export const rowToWorker = (row) => {
|
|
19
52
|
if (!isValidWorkerStatus(row.status)) {
|
|
20
|
-
throw new
|
|
53
|
+
throw new InvalidStatusError({
|
|
54
|
+
entity: "worker",
|
|
55
|
+
status: row.status,
|
|
56
|
+
validStatuses: WORKER_STATUSES,
|
|
57
|
+
rowId: row.id
|
|
58
|
+
});
|
|
21
59
|
}
|
|
22
60
|
return {
|
|
23
61
|
id: row.id,
|
|
@@ -25,11 +63,11 @@ export const rowToWorker = (row) => {
|
|
|
25
63
|
hostname: row.hostname,
|
|
26
64
|
pid: row.pid,
|
|
27
65
|
status: row.status,
|
|
28
|
-
registeredAt:
|
|
29
|
-
lastHeartbeatAt:
|
|
66
|
+
registeredAt: parseDate(row.registered_at, "registered_at", row.id),
|
|
67
|
+
lastHeartbeatAt: parseDate(row.last_heartbeat_at, "last_heartbeat_at", row.id),
|
|
30
68
|
currentTaskId: row.current_task_id,
|
|
31
|
-
capabilities:
|
|
32
|
-
metadata:
|
|
69
|
+
capabilities: safeParseCapabilities(row.capabilities),
|
|
70
|
+
metadata: safeParseMetadata(row.metadata)
|
|
33
71
|
};
|
|
34
72
|
};
|
|
35
73
|
//# sourceMappingURL=worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/mappers/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/mappers/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAmB3C;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAU,CAAA;AAExF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAqB,EAAE;IAClE,OAAQ,eAAqC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,IAA+B,EAAY,EAAE;IAC1E,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAChD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAA+B,EAA2B,EAAE;IACrF,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAA4B,EAAE,CAAA;YAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACrB,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAc,EAAU,EAAE;IACpD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,kBAAkB,CAAC;YAC3B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,eAAe;YAC9B,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC;QACnE,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC;QAC9E,aAAa,EAAE,GAAG,CAAC,eAAe;QAClC,YAAY,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;QACrD,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC1C,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -25,9 +25,9 @@ declare const AnchorRepository_base: Context.TagClass<AnchorRepository, "AnchorR
|
|
|
25
25
|
readonly updateStatus: (id: number, status: AnchorStatus) => Effect.Effect<boolean, DatabaseError>;
|
|
26
26
|
readonly updateVerifiedAt: (id: number) => Effect.Effect<boolean, DatabaseError>;
|
|
27
27
|
/** Find all anchors */
|
|
28
|
-
readonly findAll: () => Effect.Effect<readonly Anchor[], DatabaseError>;
|
|
28
|
+
readonly findAll: (limit?: number) => Effect.Effect<readonly Anchor[], DatabaseError>;
|
|
29
29
|
/** Find all valid anchors (for verification) */
|
|
30
|
-
readonly findAllValid: () => Effect.Effect<readonly Anchor[], DatabaseError>;
|
|
30
|
+
readonly findAllValid: (limit?: number) => Effect.Effect<readonly Anchor[], DatabaseError>;
|
|
31
31
|
/** Set pinned status */
|
|
32
32
|
readonly setPinned: (id: number, pinned: boolean) => Effect.Effect<boolean, DatabaseError>;
|
|
33
33
|
/** Delete old invalid anchors */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor-repo.d.ts","sourceRoot":"","sources":["../../src/repo/anchor-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"anchor-repo.d.ts","sourceRoot":"","sources":["../../src/repo/anchor-repo.ts"],"names":[],"mappings":"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"}
|