@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.
- package/dist/cli-exit.d.ts +15 -0
- package/dist/cli-exit.d.ts.map +1 -0
- package/dist/cli-exit.js +18 -0
- package/dist/cli-exit.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +349 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/attempt.d.ts +9 -0
- package/dist/commands/attempt.d.ts.map +1 -0
- package/dist/commands/attempt.js +93 -0
- package/dist/commands/attempt.js.map +1 -0
- package/dist/commands/bulk.d.ts +8 -0
- package/dist/commands/bulk.d.ts.map +1 -0
- package/dist/commands/bulk.js +168 -0
- package/dist/commands/bulk.js.map +1 -0
- package/dist/commands/claim.d.ts +39 -0
- package/dist/commands/claim.d.ts.map +1 -0
- package/dist/commands/claim.js +96 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/compact.d.ts +17 -0
- package/dist/commands/compact.d.ts.map +1 -0
- package/dist/commands/compact.js +167 -0
- package/dist/commands/compact.js.map +1 -0
- package/dist/commands/coordinator.d.ts +12 -0
- package/dist/commands/coordinator.d.ts.map +1 -0
- package/dist/commands/coordinator.js +124 -0
- package/dist/commands/coordinator.js.map +1 -0
- package/dist/commands/cycle.d.ts +12 -0
- package/dist/commands/cycle.d.ts.map +1 -0
- package/dist/commands/cycle.js +109 -0
- package/dist/commands/cycle.js.map +1 -0
- package/dist/commands/daemon.d.ts +16 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +635 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/dashboard.d.ts +12 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +105 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/dashboard.test.d.ts +2 -0
- package/dist/commands/dashboard.test.d.ts.map +1 -0
- package/dist/commands/dashboard.test.js +99 -0
- package/dist/commands/dashboard.test.js.map +1 -0
- package/dist/commands/dep.d.ts +9 -0
- package/dist/commands/dep.d.ts.map +1 -0
- package/dist/commands/dep.js +50 -0
- package/dist/commands/dep.js.map +1 -0
- package/dist/commands/doc.d.ts +10 -0
- package/dist/commands/doc.d.ts.map +1 -0
- package/dist/commands/doc.js +397 -0
- package/dist/commands/doc.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +168 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/graph.d.ts +58 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +441 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/hierarchy.d.ts +9 -0
- package/dist/commands/hierarchy.d.ts.map +1 -0
- package/dist/commands/hierarchy.js +68 -0
- package/dist/commands/hierarchy.js.map +1 -0
- package/dist/commands/hooks.d.ts +56 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +365 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/invariant.d.ts +9 -0
- package/dist/commands/invariant.d.ts.map +1 -0
- package/dist/commands/invariant.js +126 -0
- package/dist/commands/invariant.js.map +1 -0
- package/dist/commands/learning.d.ts +16 -0
- package/dist/commands/learning.d.ts.map +1 -0
- package/dist/commands/learning.js +362 -0
- package/dist/commands/learning.js.map +1 -0
- package/dist/commands/migrate.d.ts +9 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +56 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/orchestrator.d.ts +11 -0
- package/dist/commands/orchestrator.d.ts.map +1 -0
- package/dist/commands/orchestrator.js +129 -0
- package/dist/commands/orchestrator.js.map +1 -0
- package/dist/commands/stats.d.ts +8 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +128 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sync-platform.d.ts +12 -0
- package/dist/commands/sync-platform.d.ts.map +1 -0
- package/dist/commands/sync-platform.js +74 -0
- package/dist/commands/sync-platform.js.map +1 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +128 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/task.d.ts +15 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +233 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/test.d.ts +16 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +112 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/trace.d.ts +39 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +620 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/validate.d.ts +9 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +94 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/worker.d.ts +10 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +204 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/help.d.ts +3 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +1366 -0
- package/dist/help.js.map +1 -0
- package/dist/output.d.ts +12 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +76 -0
- package/dist/output.js.map +1 -0
- package/dist/tx +0 -0
- package/dist/utils/parse.d.ts +45 -0
- package/dist/utils/parse.d.ts.map +1 -0
- package/dist/utils/parse.js +79 -0
- package/dist/utils/parse.js.map +1 -0
- package/dist/utils/parse.test.d.ts +2 -0
- package/dist/utils/parse.test.d.ts.map +1 -0
- package/dist/utils/parse.test.js +140 -0
- package/dist/utils/parse.test.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- 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"}
|
package/dist/cli-exit.js
ADDED
|
@@ -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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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":"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"}
|
|
@@ -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"}
|