@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,15 @@
1
+ /**
2
+ * CliExitError — Clean exit signaling for CLI commands.
3
+ *
4
+ * Instead of calling process.exit() which terminates immediately and skips
5
+ * database cleanup (WAL checkpoint, transaction rollback, lock release),
6
+ * commands throw CliExitError. This propagates through Effect's runtime
7
+ * as a defect, gets caught by the central handler in cli.ts, and allows
8
+ * the Effect scope finalizers (including db.close()) to run before exit.
9
+ */
10
+ export declare class CliExitError extends Error {
11
+ readonly _tag: "CliExitError";
12
+ readonly code: number;
13
+ constructor(code: number);
14
+ }
15
+ //# sourceMappingURL=cli-exit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-exit.d.ts","sourceRoot":"","sources":["../src/cli-exit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAS;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBAET,IAAI,EAAE,MAAM;CAIzB"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * CliExitError — Clean exit signaling for CLI commands.
3
+ *
4
+ * Instead of calling process.exit() which terminates immediately and skips
5
+ * database cleanup (WAL checkpoint, transaction rollback, lock release),
6
+ * commands throw CliExitError. This propagates through Effect's runtime
7
+ * as a defect, gets caught by the central handler in cli.ts, and allows
8
+ * the Effect scope finalizers (including db.close()) to run before exit.
9
+ */
10
+ export class CliExitError extends Error {
11
+ _tag = "CliExitError";
12
+ code;
13
+ constructor(code) {
14
+ super();
15
+ this.code = code;
16
+ }
17
+ }
18
+ //# sourceMappingURL=cli-exit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-exit.js","sourceRoot":"","sources":["../src/cli-exit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,GAAG,cAAuB,CAAA;IAC9B,IAAI,CAAQ;IAErB,YAAY,IAAY;QACtB,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TX CLI - Task management for AI agents and humans
4
+ *
5
+ * Main entry point for the tx command line tool.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
package/dist/cli.js ADDED
@@ -0,0 +1,349 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TX CLI - Task management for AI agents and humans
4
+ *
5
+ * Main entry point for the tx command line tool.
6
+ */
7
+ import { Effect, Cause, Option } from "effect";
8
+ import { resolve } from "node:path";
9
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
10
+ import { makeAppLayer } from "@jamesaphoenix/tx-core";
11
+ import { HELP_TEXT, commandHelp } from "./help.js";
12
+ import { CliExitError } from "./cli-exit.js";
13
+ import { CLI_VERSION } from "./version.js";
14
+ // Command imports
15
+ import { add, list, ready, show, update, done, deleteTask, reset } from "./commands/task.js";
16
+ import { block, unblock } from "./commands/dep.js";
17
+ import { children, tree } from "./commands/hierarchy.js";
18
+ import { sync } from "./commands/sync.js";
19
+ import { learningAdd, learningSearch, learningRecent, learningHelpful, learningEmbed, context, learn, recall } from "./commands/learning.js";
20
+ import { tryAttempt, attempts } from "./commands/attempt.js";
21
+ import { migrate } from "./commands/migrate.js";
22
+ import { trace } from "./commands/trace.js";
23
+ import { claim, claimRelease, claimRenew } from "./commands/claim.js";
24
+ import { validate } from "./commands/validate.js";
25
+ import { doctor } from "./commands/doctor.js";
26
+ import { stats } from "./commands/stats.js";
27
+ import { bulk } from "./commands/bulk.js";
28
+ import { dashboard } from "./commands/dashboard.js";
29
+ import { doc } from "./commands/doc.js";
30
+ import { invariant } from "./commands/invariant.js";
31
+ import { cycle } from "./commands/cycle.js";
32
+ // --- Argv parsing helpers ---
33
+ function parseArgs(argv) {
34
+ const args = argv.slice(2);
35
+ const positional = [];
36
+ const flags = {};
37
+ // Parse a flag at index idx, using valueCheckPrefix to determine if next arg is a value
38
+ // Returns number of args consumed (1 for boolean flag, 2 for flag with value)
39
+ function consumeFlag(idx, valueCheckPrefix) {
40
+ const arg = args[idx];
41
+ const key = arg.startsWith("--") ? arg.slice(2) : arg.slice(1);
42
+ const next = args[idx + 1];
43
+ if (next && !next.startsWith(valueCheckPrefix)) {
44
+ flags[key] = next;
45
+ return 2;
46
+ }
47
+ flags[key] = true;
48
+ return 1;
49
+ }
50
+ // Find the command (first non-flag argument), parsing any leading flags
51
+ let command = "help";
52
+ let startIdx = 0;
53
+ for (let i = 0; i < args.length; i++) {
54
+ if (args[i].startsWith("-")) {
55
+ i += consumeFlag(i, "-") - 1;
56
+ }
57
+ else {
58
+ command = args[i];
59
+ startIdx = i + 1;
60
+ break;
61
+ }
62
+ }
63
+ // Parse remaining args: positional arguments and flags after command
64
+ for (let i = startIdx; i < args.length; i++) {
65
+ const arg = args[i];
66
+ if (arg.startsWith("--")) {
67
+ i += consumeFlag(i, "-") - 1;
68
+ }
69
+ else if (arg.startsWith("-")) {
70
+ i += consumeFlag(i, "-") - 1;
71
+ }
72
+ else {
73
+ positional.push(arg);
74
+ }
75
+ }
76
+ return { command, positional, flags };
77
+ }
78
+ function flag(flags, ...names) {
79
+ return names.some(n => flags[n] === true);
80
+ }
81
+ // --- Commands registry ---
82
+ const commands = {
83
+ init: (_pos, _flags) => Effect.sync(() => {
84
+ // Layer construction already creates db + runs migrations
85
+ // Just confirm it exists
86
+ console.log("Initialized tx database");
87
+ console.log(" Tables: tasks, task_dependencies, schema_version");
88
+ }),
89
+ add,
90
+ list,
91
+ ready,
92
+ show,
93
+ update,
94
+ done,
95
+ reset,
96
+ delete: deleteTask,
97
+ block,
98
+ unblock,
99
+ children,
100
+ tree,
101
+ sync,
102
+ migrate,
103
+ context,
104
+ learn,
105
+ recall,
106
+ // Attempt commands
107
+ try: tryAttempt,
108
+ attempts,
109
+ // Learning commands (colon-prefixed)
110
+ "learning:add": learningAdd,
111
+ "learning:search": learningSearch,
112
+ "learning:recent": learningRecent,
113
+ "learning:helpful": learningHelpful,
114
+ "learning:embed": learningEmbed,
115
+ // Claim commands (PRD-018)
116
+ claim,
117
+ "claim:release": claimRelease,
118
+ "claim:renew": claimRenew,
119
+ // Trace command (with subcommands)
120
+ trace,
121
+ // Validation command
122
+ validate,
123
+ // Diagnostics command
124
+ doctor,
125
+ // Stats command
126
+ stats,
127
+ // Bulk operations
128
+ bulk,
129
+ // Dashboard command
130
+ dashboard,
131
+ // Doc commands (DD-023)
132
+ doc,
133
+ invariant,
134
+ // Cycle scan
135
+ cycle,
136
+ // Help command
137
+ help: (pos) => Effect.sync(() => {
138
+ const subcommand = pos[0];
139
+ if (subcommand && commandHelp[subcommand]) {
140
+ console.log(commandHelp[subcommand]);
141
+ return;
142
+ }
143
+ // Check for compound command help (e.g., tx help sync export)
144
+ if (subcommand === "sync" && pos[1]) {
145
+ const subcommandKey = `sync ${pos[1]}`;
146
+ if (commandHelp[subcommandKey]) {
147
+ console.log(commandHelp[subcommandKey]);
148
+ return;
149
+ }
150
+ }
151
+ console.log(HELP_TEXT);
152
+ }),
153
+ };
154
+ // --- Main ---
155
+ const { command, positional, flags: parsedFlags } = parseArgs(process.argv);
156
+ // Handle --version early, before any command processing
157
+ if (flag(parsedFlags, "version") || flag(parsedFlags, "v")) {
158
+ console.log(`tx v${CLI_VERSION}`);
159
+ process.exit(0);
160
+ }
161
+ // Handle --help for specific command (tx add --help) or help command (tx help / tx help add)
162
+ if (flag(parsedFlags, "help") || flag(parsedFlags, "h")) {
163
+ // Check for subcommand help (e.g., tx sync export --help)
164
+ if (command === "sync" && positional[0]) {
165
+ const subcommandKey = `sync ${positional[0]}`;
166
+ if (commandHelp[subcommandKey]) {
167
+ console.log(commandHelp[subcommandKey]);
168
+ process.exit(0);
169
+ }
170
+ }
171
+ if (command === "trace" && positional[0]) {
172
+ const subcommandKey = `trace ${positional[0]}`;
173
+ if (commandHelp[subcommandKey]) {
174
+ console.log(commandHelp[subcommandKey]);
175
+ process.exit(0);
176
+ }
177
+ }
178
+ if (command === "bulk" && positional[0]) {
179
+ const subcommandKey = `bulk ${positional[0]}`;
180
+ if (commandHelp[subcommandKey]) {
181
+ console.log(commandHelp[subcommandKey]);
182
+ process.exit(0);
183
+ }
184
+ }
185
+ if (command === "doc" && positional[0]) {
186
+ const subcommandKey = `doc ${positional[0]}`;
187
+ if (commandHelp[subcommandKey]) {
188
+ console.log(commandHelp[subcommandKey]);
189
+ process.exit(0);
190
+ }
191
+ }
192
+ if (command === "invariant" && positional[0]) {
193
+ const subcommandKey = `invariant ${positional[0]}`;
194
+ if (commandHelp[subcommandKey]) {
195
+ console.log(commandHelp[subcommandKey]);
196
+ process.exit(0);
197
+ }
198
+ }
199
+ // Check if we have a command with specific help
200
+ if (command !== "help" && commandHelp[command]) {
201
+ console.log(commandHelp[command]);
202
+ process.exit(0);
203
+ }
204
+ // Fall through to general help
205
+ console.log(HELP_TEXT);
206
+ process.exit(0);
207
+ }
208
+ // Handle 'tx help' and 'tx help <command>'
209
+ if (command === "help") {
210
+ const subcommand = positional[0];
211
+ // Check for compound command help (e.g., tx help sync export)
212
+ if (subcommand === "sync" && positional[1]) {
213
+ const subcommandKey = `sync ${positional[1]}`;
214
+ if (commandHelp[subcommandKey]) {
215
+ console.log(commandHelp[subcommandKey]);
216
+ process.exit(0);
217
+ }
218
+ }
219
+ if (subcommand === "trace" && positional[1]) {
220
+ const subcommandKey = `trace ${positional[1]}`;
221
+ if (commandHelp[subcommandKey]) {
222
+ console.log(commandHelp[subcommandKey]);
223
+ process.exit(0);
224
+ }
225
+ }
226
+ if (subcommand === "bulk" && positional[1]) {
227
+ const subcommandKey = `bulk ${positional[1]}`;
228
+ if (commandHelp[subcommandKey]) {
229
+ console.log(commandHelp[subcommandKey]);
230
+ process.exit(0);
231
+ }
232
+ }
233
+ if (subcommand === "doc" && positional[1]) {
234
+ const subcommandKey = `doc ${positional[1]}`;
235
+ if (commandHelp[subcommandKey]) {
236
+ console.log(commandHelp[subcommandKey]);
237
+ process.exit(0);
238
+ }
239
+ }
240
+ if (subcommand === "invariant" && positional[1]) {
241
+ const subcommandKey = `invariant ${positional[1]}`;
242
+ if (commandHelp[subcommandKey]) {
243
+ console.log(commandHelp[subcommandKey]);
244
+ process.exit(0);
245
+ }
246
+ }
247
+ if (subcommand && commandHelp[subcommand]) {
248
+ console.log(commandHelp[subcommand]);
249
+ }
250
+ else {
251
+ console.log(HELP_TEXT);
252
+ }
253
+ process.exit(0);
254
+ }
255
+ // Handle mcp-server separately (will be moved to apps/mcp)
256
+ if (command === "mcp-server") {
257
+ console.error("MCP server has been moved to a separate package.");
258
+ console.error("Please use the @tx/mcp package or run from the monorepo root.");
259
+ process.exit(1);
260
+ }
261
+ const handler = commands[command];
262
+ if (!handler) {
263
+ console.error(`Unknown command: ${command}`);
264
+ console.error(`Run 'tx help' for usage information`);
265
+ process.exit(1);
266
+ }
267
+ const dbPath = typeof parsedFlags.db === "string"
268
+ ? resolve(parsedFlags.db)
269
+ : resolve(process.cwd(), ".tx", "tasks.db");
270
+ // For init, ensure directory exists
271
+ if (command === "init") {
272
+ const dir = resolve(process.cwd(), ".tx");
273
+ if (!existsSync(dir)) {
274
+ mkdirSync(dir, { recursive: true });
275
+ }
276
+ // Create .gitignore for .tx directory
277
+ const gitignorePath = resolve(dir, ".gitignore");
278
+ if (!existsSync(gitignorePath)) {
279
+ writeFileSync(gitignorePath, "tasks.db\ntasks.db-wal\ntasks.db-shm\n");
280
+ }
281
+ }
282
+ const layer = makeAppLayer(dbPath);
283
+ const program = handler(positional, parsedFlags);
284
+ const runnable = Effect.provide(program, layer);
285
+ // Exit code set by error handlers; applied after Effect runtime cleanup completes
286
+ let _exitCode = 0;
287
+ // Map error tags to exit codes (2 = not found, 1 = general error)
288
+ const errorExitCodes = {
289
+ TaskNotFoundError: 2,
290
+ LearningNotFoundError: 2,
291
+ ClaimNotFoundError: 2,
292
+ DocNotFoundError: 2,
293
+ InvariantNotFoundError: 2,
294
+ ValidationError: 1,
295
+ CircularDependencyError: 1,
296
+ DatabaseError: 1,
297
+ AlreadyClaimedError: 1,
298
+ LeaseExpiredError: 1,
299
+ MaxRenewalsExceededError: 1,
300
+ DocLockedError: 1,
301
+ InvalidDocYamlError: 1,
302
+ AgentError: 1,
303
+ CycleScanError: 1,
304
+ };
305
+ const handled = runnable.pipe(
306
+ // Handle expected Effect errors (from Effect.fail in services)
307
+ Effect.catchAll((error) => {
308
+ const err = error;
309
+ const tag = err._tag ?? "";
310
+ if (tag in errorExitCodes) {
311
+ console.error(err.message ?? tag.replace(/Error$/, " error"));
312
+ if (tag === "HasChildrenError") {
313
+ console.error("Hint: use --cascade to delete with all children, or delete/move children first.");
314
+ }
315
+ _exitCode = errorExitCodes[tag] ?? 1;
316
+ return Effect.void;
317
+ }
318
+ if (tag === "HasChildrenError") {
319
+ console.error(err.message ?? `Cannot delete task with children`);
320
+ console.error("Hint: use --cascade to delete with all children, or delete/move children first.");
321
+ _exitCode = 1;
322
+ return Effect.void;
323
+ }
324
+ console.error(`Error: ${err.message ?? String(error)}`);
325
+ _exitCode = 1;
326
+ return Effect.void;
327
+ }),
328
+ // Handle defects (from throw CliExitError in commands/parse utils)
329
+ Effect.catchAllCause((cause) => {
330
+ const dieOption = Cause.dieOption(cause);
331
+ if (Option.isSome(dieOption) && dieOption.value instanceof CliExitError) {
332
+ _exitCode = dieOption.value.code;
333
+ return Effect.void;
334
+ }
335
+ // Unexpected defect — print and exit
336
+ console.error(`Fatal: ${Cause.pretty(cause)}`);
337
+ _exitCode = 1;
338
+ return Effect.void;
339
+ }));
340
+ // Effect.runPromise resolves AFTER scope finalizers (db.close()) run
341
+ Effect.runPromise(handled).then(() => {
342
+ if (_exitCode !== 0)
343
+ process.exit(_exitCode);
344
+ }).catch((err) => {
345
+ // Should not reach here — catchAllCause handles everything
346
+ console.error(`Fatal: ${err}`);
347
+ process.exit(1);
348
+ });
349
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Attempt commands: try, attempts
3
+ */
4
+ import { Effect } from "effect";
5
+ import { AttemptService, TaskService } from "@jamesaphoenix/tx-core";
6
+ import { type Flags } from "../utils/parse.js";
7
+ export declare const tryAttempt: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").ValidationError | import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").TaskNotFoundError, AttemptService>;
8
+ export declare const attempts: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").TaskNotFoundError, TaskService | AttemptService>;
9
+ //# sourceMappingURL=attempt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attempt.d.ts","sourceRoot":"","sources":["../../src/commands/attempt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpE,OAAO,EAAE,KAAK,KAAK,EAAqB,MAAM,mBAAmB,CAAA;AAEjE,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,gMA0DlD,CAAA;AAEJ,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,2JAoChD,CAAA"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Attempt commands: try, attempts
3
+ */
4
+ import { Effect } from "effect";
5
+ import { AttemptService, TaskService } from "@jamesaphoenix/tx-core";
6
+ import { toJson } from "../output.js";
7
+ import { flag, parseTaskId } from "../utils/parse.js";
8
+ export const tryAttempt = (pos, flags) => Effect.gen(function* () {
9
+ const rawTaskId = pos[0];
10
+ const approach = pos[1];
11
+ if (!rawTaskId || !approach) {
12
+ console.error("Usage: tx try <task-id> <approach> --failed|--succeeded [reason]");
13
+ process.exit(1);
14
+ }
15
+ const taskId = parseTaskId(rawTaskId);
16
+ // Check for --failed and --succeeded flags
17
+ // The parser treats `--failed "reason"` as flags["failed"] = "reason"
18
+ // and `--failed` alone as flags["failed"] = true
19
+ const failedVal = flags["failed"];
20
+ const succeededVal = flags["succeeded"];
21
+ const hasFailedFlag = failedVal !== undefined;
22
+ const hasSucceededFlag = succeededVal !== undefined;
23
+ // Validate mutually exclusive flags
24
+ if (hasFailedFlag && hasSucceededFlag) {
25
+ console.error("Error: --failed and --succeeded are mutually exclusive");
26
+ process.exit(1);
27
+ }
28
+ if (!hasFailedFlag && !hasSucceededFlag) {
29
+ console.error("Error: Must specify either --failed or --succeeded");
30
+ process.exit(1);
31
+ }
32
+ const outcome = hasFailedFlag ? "failed" : "succeeded";
33
+ // Reason can be the value of the flag (if string) or positional arg
34
+ let reason = null;
35
+ if (hasFailedFlag && typeof failedVal === "string") {
36
+ reason = failedVal;
37
+ }
38
+ else if (hasSucceededFlag && typeof succeededVal === "string") {
39
+ reason = succeededVal;
40
+ }
41
+ else if (pos[2]) {
42
+ reason = pos[2];
43
+ }
44
+ const attemptSvc = yield* AttemptService;
45
+ const attempt = yield* attemptSvc.create(taskId, approach, outcome, reason);
46
+ if (flag(flags, "json")) {
47
+ console.log(toJson(attempt));
48
+ }
49
+ else {
50
+ const outcomeSymbol = outcome === "succeeded" ? "\u2713" : "\u2717";
51
+ console.log(`Recorded attempt: ${attempt.id}`);
52
+ console.log(` Task: ${attempt.taskId}`);
53
+ console.log(` Approach: ${attempt.approach}`);
54
+ console.log(` Outcome: ${outcomeSymbol} ${outcome}`);
55
+ if (attempt.reason) {
56
+ console.log(` Reason: ${attempt.reason}`);
57
+ }
58
+ }
59
+ });
60
+ export const attempts = (pos, flags) => Effect.gen(function* () {
61
+ const rawTaskId = pos[0];
62
+ if (!rawTaskId) {
63
+ console.error("Usage: tx attempts <task-id> [--json]");
64
+ process.exit(1);
65
+ }
66
+ const taskId = parseTaskId(rawTaskId);
67
+ const attemptSvc = yield* AttemptService;
68
+ const taskSvc = yield* TaskService;
69
+ // Verify task exists (will throw TaskNotFoundError if not)
70
+ yield* taskSvc.get(taskId);
71
+ const attemptList = yield* attemptSvc.listForTask(taskId);
72
+ if (flag(flags, "json")) {
73
+ console.log(toJson(attemptList));
74
+ }
75
+ else {
76
+ if (attemptList.length === 0) {
77
+ console.log(`No attempts recorded for ${taskId}`);
78
+ }
79
+ else {
80
+ console.log(`${attemptList.length} attempt(s) for ${taskId}:`);
81
+ for (const a of attemptList) {
82
+ const outcomeSymbol = a.outcome === "succeeded" ? "\u2713" : "\u2717";
83
+ const timestamp = a.createdAt.toISOString();
84
+ console.log(` ${outcomeSymbol} ${a.approach}`);
85
+ if (a.reason) {
86
+ console.log(` Reason: ${a.reason}`);
87
+ }
88
+ console.log(` ${timestamp}`);
89
+ }
90
+ }
91
+ }
92
+ });
93
+ //# sourceMappingURL=attempt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attempt.js","sourceRoot":"","sources":["../../src/commands/attempt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAc,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEjE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAa,EAAE,KAAY,EAAE,EAAE,CACxD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IAEvB,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IAErC,2CAA2C;IAC3C,sEAAsE;IACtE,iDAAiD;IACjD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAA;IAEvC,MAAM,aAAa,GAAG,SAAS,KAAK,SAAS,CAAA;IAC7C,MAAM,gBAAgB,GAAG,YAAY,KAAK,SAAS,CAAA;IAEnD,oCAAoC;IACpC,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAA;IAEtD,oEAAoE;IACpE,IAAI,MAAM,GAAkB,IAAI,CAAA;IAChC,IAAI,aAAa,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,GAAG,SAAS,CAAA;IACpB,CAAC;SAAM,IAAI,gBAAgB,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,GAAG,YAAY,CAAA;IACvB,CAAC;SAAM,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAE3E,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;QACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,aAAa,IAAI,OAAO,EAAE,CAAC,CAAA;QACrD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,KAAY,EAAE,EAAE,CACtD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IAExB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IAErC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;IAElC,2DAA2D;IAC3D,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAE1B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAEzD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;IAClC,CAAC;SAAM,CAAC;QACN,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAA;QACnD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,mBAAmB,MAAM,GAAG,CAAC,CAAA;YAC9D,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;gBACrE,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;gBAC/C,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC1C,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,SAAS,SAAS,EAAE,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Bulk commands: batch operations on multiple tasks
3
+ */
4
+ import { Effect } from "effect";
5
+ import { TaskService, ReadyService } from "@jamesaphoenix/tx-core";
6
+ import { type Flags } from "../utils/parse.js";
7
+ export declare const bulk: (pos: string[], flags: Flags) => Effect.Effect<void, never, TaskService | ReadyService>;
8
+ //# sourceMappingURL=bulk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.d.ts","sourceRoot":"","sources":["../../src/commands/bulk.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,KAAK,KAAK,EAAqB,MAAM,mBAAmB,CAAA;AA6BjE,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,2DAuB5C,CAAA"}