@jamesaphoenix/tx-cli 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.
Files changed (138) hide show
  1. package/dist/cli-exit.d.ts +15 -0
  2. package/dist/cli-exit.d.ts.map +1 -0
  3. package/dist/cli-exit.js +18 -0
  4. package/dist/cli-exit.js.map +1 -0
  5. package/dist/cli.d.ts +8 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +349 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/attempt.d.ts +9 -0
  10. package/dist/commands/attempt.d.ts.map +1 -0
  11. package/dist/commands/attempt.js +93 -0
  12. package/dist/commands/attempt.js.map +1 -0
  13. package/dist/commands/bulk.d.ts +8 -0
  14. package/dist/commands/bulk.d.ts.map +1 -0
  15. package/dist/commands/bulk.js +168 -0
  16. package/dist/commands/bulk.js.map +1 -0
  17. package/dist/commands/claim.d.ts +39 -0
  18. package/dist/commands/claim.d.ts.map +1 -0
  19. package/dist/commands/claim.js +96 -0
  20. package/dist/commands/claim.js.map +1 -0
  21. package/dist/commands/compact.d.ts +17 -0
  22. package/dist/commands/compact.d.ts.map +1 -0
  23. package/dist/commands/compact.js +167 -0
  24. package/dist/commands/compact.js.map +1 -0
  25. package/dist/commands/coordinator.d.ts +12 -0
  26. package/dist/commands/coordinator.d.ts.map +1 -0
  27. package/dist/commands/coordinator.js +124 -0
  28. package/dist/commands/coordinator.js.map +1 -0
  29. package/dist/commands/cycle.d.ts +12 -0
  30. package/dist/commands/cycle.d.ts.map +1 -0
  31. package/dist/commands/cycle.js +109 -0
  32. package/dist/commands/cycle.js.map +1 -0
  33. package/dist/commands/daemon.d.ts +16 -0
  34. package/dist/commands/daemon.d.ts.map +1 -0
  35. package/dist/commands/daemon.js +635 -0
  36. package/dist/commands/daemon.js.map +1 -0
  37. package/dist/commands/dashboard.d.ts +12 -0
  38. package/dist/commands/dashboard.d.ts.map +1 -0
  39. package/dist/commands/dashboard.js +105 -0
  40. package/dist/commands/dashboard.js.map +1 -0
  41. package/dist/commands/dashboard.test.d.ts +2 -0
  42. package/dist/commands/dashboard.test.d.ts.map +1 -0
  43. package/dist/commands/dashboard.test.js +99 -0
  44. package/dist/commands/dashboard.test.js.map +1 -0
  45. package/dist/commands/dep.d.ts +9 -0
  46. package/dist/commands/dep.d.ts.map +1 -0
  47. package/dist/commands/dep.js +50 -0
  48. package/dist/commands/dep.js.map +1 -0
  49. package/dist/commands/doc.d.ts +10 -0
  50. package/dist/commands/doc.d.ts.map +1 -0
  51. package/dist/commands/doc.js +397 -0
  52. package/dist/commands/doc.js.map +1 -0
  53. package/dist/commands/doctor.d.ts +9 -0
  54. package/dist/commands/doctor.d.ts.map +1 -0
  55. package/dist/commands/doctor.js +168 -0
  56. package/dist/commands/doctor.js.map +1 -0
  57. package/dist/commands/graph.d.ts +58 -0
  58. package/dist/commands/graph.d.ts.map +1 -0
  59. package/dist/commands/graph.js +441 -0
  60. package/dist/commands/graph.js.map +1 -0
  61. package/dist/commands/hierarchy.d.ts +9 -0
  62. package/dist/commands/hierarchy.d.ts.map +1 -0
  63. package/dist/commands/hierarchy.js +68 -0
  64. package/dist/commands/hierarchy.js.map +1 -0
  65. package/dist/commands/hooks.d.ts +56 -0
  66. package/dist/commands/hooks.d.ts.map +1 -0
  67. package/dist/commands/hooks.js +365 -0
  68. package/dist/commands/hooks.js.map +1 -0
  69. package/dist/commands/invariant.d.ts +9 -0
  70. package/dist/commands/invariant.d.ts.map +1 -0
  71. package/dist/commands/invariant.js +126 -0
  72. package/dist/commands/invariant.js.map +1 -0
  73. package/dist/commands/learning.d.ts +16 -0
  74. package/dist/commands/learning.d.ts.map +1 -0
  75. package/dist/commands/learning.js +362 -0
  76. package/dist/commands/learning.js.map +1 -0
  77. package/dist/commands/migrate.d.ts +9 -0
  78. package/dist/commands/migrate.d.ts.map +1 -0
  79. package/dist/commands/migrate.js +56 -0
  80. package/dist/commands/migrate.js.map +1 -0
  81. package/dist/commands/orchestrator.d.ts +11 -0
  82. package/dist/commands/orchestrator.d.ts.map +1 -0
  83. package/dist/commands/orchestrator.js +129 -0
  84. package/dist/commands/orchestrator.js.map +1 -0
  85. package/dist/commands/stats.d.ts +8 -0
  86. package/dist/commands/stats.d.ts.map +1 -0
  87. package/dist/commands/stats.js +128 -0
  88. package/dist/commands/stats.js.map +1 -0
  89. package/dist/commands/sync-platform.d.ts +12 -0
  90. package/dist/commands/sync-platform.d.ts.map +1 -0
  91. package/dist/commands/sync-platform.js +74 -0
  92. package/dist/commands/sync-platform.js.map +1 -0
  93. package/dist/commands/sync.d.ts +8 -0
  94. package/dist/commands/sync.d.ts.map +1 -0
  95. package/dist/commands/sync.js +128 -0
  96. package/dist/commands/sync.js.map +1 -0
  97. package/dist/commands/task.d.ts +15 -0
  98. package/dist/commands/task.d.ts.map +1 -0
  99. package/dist/commands/task.js +233 -0
  100. package/dist/commands/task.js.map +1 -0
  101. package/dist/commands/test.d.ts +16 -0
  102. package/dist/commands/test.d.ts.map +1 -0
  103. package/dist/commands/test.js +112 -0
  104. package/dist/commands/test.js.map +1 -0
  105. package/dist/commands/trace.d.ts +39 -0
  106. package/dist/commands/trace.d.ts.map +1 -0
  107. package/dist/commands/trace.js +620 -0
  108. package/dist/commands/trace.js.map +1 -0
  109. package/dist/commands/validate.d.ts +9 -0
  110. package/dist/commands/validate.d.ts.map +1 -0
  111. package/dist/commands/validate.js +94 -0
  112. package/dist/commands/validate.js.map +1 -0
  113. package/dist/commands/worker.d.ts +10 -0
  114. package/dist/commands/worker.d.ts.map +1 -0
  115. package/dist/commands/worker.js +204 -0
  116. package/dist/commands/worker.js.map +1 -0
  117. package/dist/help.d.ts +3 -0
  118. package/dist/help.d.ts.map +1 -0
  119. package/dist/help.js +1366 -0
  120. package/dist/help.js.map +1 -0
  121. package/dist/output.d.ts +12 -0
  122. package/dist/output.d.ts.map +1 -0
  123. package/dist/output.js +76 -0
  124. package/dist/output.js.map +1 -0
  125. package/dist/tx +0 -0
  126. package/dist/utils/parse.d.ts +45 -0
  127. package/dist/utils/parse.d.ts.map +1 -0
  128. package/dist/utils/parse.js +79 -0
  129. package/dist/utils/parse.js.map +1 -0
  130. package/dist/utils/parse.test.d.ts +2 -0
  131. package/dist/utils/parse.test.d.ts.map +1 -0
  132. package/dist/utils/parse.test.js +140 -0
  133. package/dist/utils/parse.test.js.map +1 -0
  134. package/dist/version.d.ts +2 -0
  135. package/dist/version.d.ts.map +1 -0
  136. package/dist/version.js +10 -0
  137. package/dist/version.js.map +1 -0
  138. package/package.json +58 -0
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Coordinator commands: start, stop, status, reconcile
3
+ *
4
+ * CLI commands for managing the worker coordination system (PRD-018).
5
+ * Named "coordinator" to emphasize tx provides coordination primitives,
6
+ * not an orchestration framework - you own the orchestration loop.
7
+ */
8
+ import { Effect } from "effect";
9
+ import { OrchestratorService } from "@jamesaphoenix/tx-core";
10
+ import { toJson } from "../output.js";
11
+ import { commandHelp } from "../help.js";
12
+ import { flag, parseIntOpt } from "../utils/parse.js";
13
+ export const coordinator = (pos, flags) => Effect.gen(function* () {
14
+ const subcommand = pos[0];
15
+ if (!subcommand || subcommand === "help") {
16
+ console.log(commandHelp["coordinator"]);
17
+ return;
18
+ }
19
+ // Check for --help on subcommand
20
+ if (flag(flags, "help", "h")) {
21
+ const helpKey = `coordinator ${subcommand}`;
22
+ if (commandHelp[helpKey]) {
23
+ console.log(commandHelp[helpKey]);
24
+ return;
25
+ }
26
+ }
27
+ const svc = yield* OrchestratorService;
28
+ if (subcommand === "start") {
29
+ // Parse options
30
+ const workers = parseIntOpt(flags, "workers", "workers", "w");
31
+ if (workers !== undefined && workers < 1) {
32
+ console.error(`Invalid workers value: '${workers}'. Must be a positive integer.`);
33
+ process.exit(1);
34
+ }
35
+ const isDaemon = flag(flags, "daemon", "d");
36
+ // Build config
37
+ const config = workers !== undefined
38
+ ? { workerPoolSize: workers }
39
+ : {};
40
+ // Start coordinator
41
+ yield* svc.start(config);
42
+ // Get updated status
43
+ const state = yield* svc.status();
44
+ if (flag(flags, "json")) {
45
+ console.log(toJson({
46
+ action: "started",
47
+ status: state.status,
48
+ pid: state.pid,
49
+ workerPoolSize: state.workerPoolSize,
50
+ daemon: isDaemon
51
+ }));
52
+ }
53
+ else {
54
+ console.log("Coordinator started");
55
+ console.log(` Status: ${state.status}`);
56
+ console.log(` PID: ${state.pid}`);
57
+ console.log(` Worker pool size: ${state.workerPoolSize}`);
58
+ if (isDaemon) {
59
+ console.log(" Mode: daemon (background)");
60
+ }
61
+ }
62
+ }
63
+ else if (subcommand === "stop") {
64
+ const graceful = flag(flags, "graceful", "g");
65
+ yield* svc.stop(graceful);
66
+ const state = yield* svc.status();
67
+ if (flag(flags, "json")) {
68
+ console.log(toJson({
69
+ action: "stopped",
70
+ status: state.status,
71
+ graceful
72
+ }));
73
+ }
74
+ else {
75
+ console.log("Coordinator stopped");
76
+ if (graceful) {
77
+ console.log(" Mode: graceful (waited for workers to finish)");
78
+ }
79
+ }
80
+ }
81
+ else if (subcommand === "status") {
82
+ const state = yield* svc.status();
83
+ if (flag(flags, "json")) {
84
+ console.log(toJson(state));
85
+ }
86
+ else {
87
+ console.log("Coordinator Status:");
88
+ console.log(` Status: ${state.status}`);
89
+ if (state.pid) {
90
+ console.log(` PID: ${state.pid}`);
91
+ }
92
+ if (state.startedAt) {
93
+ console.log(` Started: ${state.startedAt.toISOString()}`);
94
+ }
95
+ console.log(` Worker pool size: ${state.workerPoolSize}`);
96
+ console.log(` Heartbeat interval: ${state.heartbeatIntervalSeconds}s`);
97
+ console.log(` Lease duration: ${state.leaseDurationMinutes}m`);
98
+ console.log(` Reconcile interval: ${state.reconcileIntervalSeconds}s`);
99
+ if (state.lastReconcileAt) {
100
+ console.log(` Last reconcile: ${state.lastReconcileAt.toISOString()}`);
101
+ }
102
+ }
103
+ }
104
+ else if (subcommand === "reconcile") {
105
+ const result = yield* svc.reconcile();
106
+ if (flag(flags, "json")) {
107
+ console.log(toJson(result));
108
+ }
109
+ else {
110
+ console.log("Reconciliation completed");
111
+ console.log(` Dead workers found: ${result.deadWorkersFound}`);
112
+ console.log(` Expired claims released: ${result.expiredClaimsReleased}`);
113
+ console.log(` Orphaned tasks recovered: ${result.orphanedTasksRecovered}`);
114
+ console.log(` Stale states fixed: ${result.staleStatesFixed}`);
115
+ console.log(` Time: ${result.reconcileTime}ms`);
116
+ }
117
+ }
118
+ else {
119
+ console.error(`Unknown coordinator subcommand: ${subcommand}`);
120
+ console.error(`Run 'tx coordinator --help' for usage information`);
121
+ process.exit(1);
122
+ }
123
+ });
124
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/commands/coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Cycle commands: tx cycle
3
+ *
4
+ * Dispatches sub-agent swarms to scan for codebase issues, deduplicates
5
+ * findings against known issues, and optionally fixes them.
6
+ */
7
+ import { Effect } from "effect";
8
+ import { CycleScanService } from "@jamesaphoenix/tx-core";
9
+ import { type Flags } from "../utils/parse.js";
10
+ /** Dispatch cycle command. */
11
+ export declare const cycle: (_pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").CycleScanError, CycleScanService>;
12
+ //# sourceMappingURL=cycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycle.d.ts","sourceRoot":"","sources":["../../src/commands/cycle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,OAAO,EAAE,KAAK,KAAK,EAA0B,MAAM,mBAAmB,CAAA;AAEtE,8BAA8B;AAC9B,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,2FAsGjD,CAAA"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Cycle commands: tx cycle
3
+ *
4
+ * Dispatches sub-agent swarms to scan for codebase issues, deduplicates
5
+ * findings against known issues, and optionally fixes them.
6
+ */
7
+ import { Effect } from "effect";
8
+ import { CycleScanService } from "@jamesaphoenix/tx-core";
9
+ import { toJson } from "../output.js";
10
+ import { flag, opt, parseIntOpt } from "../utils/parse.js";
11
+ /** Dispatch cycle command. */
12
+ export const cycle = (_pos, flags) => {
13
+ const taskPrompt = opt(flags, "task-prompt");
14
+ if (!taskPrompt) {
15
+ return Effect.sync(() => {
16
+ console.error("Error: --task-prompt is required");
17
+ console.error();
18
+ console.error("Usage:");
19
+ console.error(' tx cycle --task-prompt "Review core services" --scan-prompt "Find bugs"');
20
+ console.error();
21
+ console.error("Options:");
22
+ console.error(" --task-prompt <text|file> Area/work being reviewed (required)");
23
+ console.error(" --scan-prompt <text|file> What sub-agents look for (optional)");
24
+ console.error(" --name <text> Cycle name (shown in dashboard)");
25
+ console.error(" --description <text> Cycle description");
26
+ console.error(" --cycles <N> Number of cycles (default: 1)");
27
+ console.error(" --max-rounds <N> Max rounds per cycle (default: 10)");
28
+ console.error(" --agents <N> Parallel scan agents per round (default: 3)");
29
+ console.error(" --model <model> LLM model (default: claude-opus-4-6)");
30
+ console.error(" --fix Enable fix agent between scan rounds");
31
+ console.error(" --scan-only Skip fix phase (explicit default)");
32
+ console.error(" --dry-run Report only, no DB writes");
33
+ console.error(" --score <N> Base score for new tasks (default: 500)");
34
+ console.error(" --json Output as JSON");
35
+ process.exit(1);
36
+ });
37
+ }
38
+ return Effect.gen(function* () {
39
+ const svc = yield* CycleScanService;
40
+ const cycles = parseIntOpt(flags, "cycles", "cycles") ?? 1;
41
+ const maxRounds = parseIntOpt(flags, "max-rounds", "max-rounds") ?? 10;
42
+ const agents = parseIntOpt(flags, "agents", "agents") ?? 3;
43
+ const score = parseIntOpt(flags, "score", "score") ?? 500;
44
+ const scanPrompt = opt(flags, "scan-prompt") ?? "Find bugs, anti-patterns, missing error handling, security vulnerabilities, and untested code paths.";
45
+ const name = opt(flags, "name");
46
+ const description = opt(flags, "description");
47
+ const model = opt(flags, "model") ?? "claude-opus-4-6";
48
+ const doFix = flag(flags, "fix");
49
+ const scanOnly = flag(flags, "scan-only");
50
+ const dryRun = flag(flags, "dry-run");
51
+ const jsonOutput = flag(flags, "json");
52
+ const effectiveMaxRounds = (scanOnly || (!doFix && !dryRun)) ? 1 : maxRounds;
53
+ if (!jsonOutput) {
54
+ console.log("Cycle Scan — Cycle-Based Issue Discovery");
55
+ console.log(` Task: ${taskPrompt.slice(0, 80)}${taskPrompt.length > 80 ? "..." : ""}`);
56
+ if (scanPrompt) {
57
+ console.log(` Scan: ${scanPrompt.slice(0, 80)}${scanPrompt.length > 80 ? "..." : ""}`);
58
+ }
59
+ console.log(` Cycles: ${cycles}, Max rounds: ${effectiveMaxRounds}${effectiveMaxRounds !== maxRounds ? ` (capped from ${maxRounds} — no fix agent)` : ""}, Agents: ${agents}`);
60
+ console.log(` Model: ${model}, Fix: ${doFix}, Scan-only: ${scanOnly}, Dry-run: ${dryRun}`);
61
+ console.log();
62
+ }
63
+ const onProgress = jsonOutput ? undefined : (event) => {
64
+ switch (event.type) {
65
+ case "cycle_start":
66
+ console.log(`=== Cycle ${event.cycle}/${event.totalCycles}: "${event.name}" ===`);
67
+ break;
68
+ case "scan_complete":
69
+ console.log(` Round ${event.round}: Found ${event.findings} findings in ${(event.durationMs / 1000).toFixed(1)}s`);
70
+ break;
71
+ case "dedup_complete":
72
+ console.log(` Round ${event.round}: Dedup: ${event.newIssues} new, ${event.duplicates} duplicates`);
73
+ break;
74
+ case "round_loss":
75
+ console.log(` Round ${event.round}: Loss = ${event.loss} (${event.high}H x3 + ${event.medium}M x2 + ${event.low}L x1)`);
76
+ break;
77
+ case "converged":
78
+ console.log(` Round ${event.round}: Converged!`);
79
+ break;
80
+ case "cycle_complete": {
81
+ const r = event.result;
82
+ console.log(`\n Cycle ${r.cycle} complete: ${r.rounds} rounds, ${r.totalNewIssues} new issues, final loss ${r.finalLoss}${r.converged ? " -- CONVERGED" : ""}`);
83
+ break;
84
+ }
85
+ }
86
+ };
87
+ const results = yield* svc.runCycles({
88
+ taskPrompt,
89
+ scanPrompt,
90
+ name,
91
+ description,
92
+ cycles,
93
+ maxRounds,
94
+ agents,
95
+ model,
96
+ fix: doFix,
97
+ scanOnly,
98
+ dryRun,
99
+ score,
100
+ }, onProgress);
101
+ if (jsonOutput) {
102
+ console.log(toJson(results));
103
+ }
104
+ else {
105
+ console.log("\nDone.");
106
+ }
107
+ });
108
+ };
109
+ //# sourceMappingURL=cycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycle.js","sourceRoot":"","sources":["../../src/commands/cycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Daemon commands: start, stop, status, process, review, promote, reject, track, untrack, list
3
+ */
4
+ import { Effect } from "effect";
5
+ import { CandidateRepository, CandidateExtractorService, DaemonService, DeduplicationService, PromotionService, TrackedProjectRepository } from "@jamesaphoenix/tx-core";
6
+ import { type Flags } from "../utils/parse.js";
7
+ export declare const daemon: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").BatchProcessingError<{
8
+ readonly filePath: string;
9
+ readonly totalLines: number;
10
+ readonly newLines: number;
11
+ readonly skippedLines: number;
12
+ readonly startLine: number;
13
+ readonly endLine: number;
14
+ readonly duration: number;
15
+ }>, DaemonService | TrackedProjectRepository | CandidateRepository | CandidateExtractorService | DeduplicationService | PromotionService>;
16
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EAEzB,MAAM,wBAAwB,CAAA;AAI/B,OAAO,EAAE,KAAK,KAAK,EAA0B,MAAM,mBAAmB,CAAA;AAqHtE,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK;;;;;;;;yIAohB9C,CAAA"}