@jamesaphoenix/tx-cli 0.4.6 → 0.5.2

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 (110) hide show
  1. package/dist/cli-exit.d.ts.map +1 -0
  2. package/dist/cli-exit.js.map +1 -0
  3. package/dist/cli.d.ts +1 -1
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +69 -21
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/attempt.d.ts.map +1 -0
  8. package/dist/commands/attempt.js +4 -5
  9. package/dist/commands/attempt.js.map +1 -0
  10. package/dist/commands/bulk.d.ts.map +1 -0
  11. package/dist/commands/bulk.js +7 -8
  12. package/dist/commands/bulk.js.map +1 -0
  13. package/dist/commands/claim.d.ts.map +1 -0
  14. package/dist/commands/claim.js +3 -4
  15. package/dist/commands/claim.js.map +1 -0
  16. package/dist/commands/compact.d.ts.map +1 -0
  17. package/dist/commands/compact.js.map +1 -0
  18. package/dist/commands/coordinator.d.ts.map +1 -0
  19. package/dist/commands/coordinator.js.map +1 -0
  20. package/dist/commands/cycle.d.ts +1 -3
  21. package/dist/commands/cycle.d.ts.map +1 -0
  22. package/dist/commands/cycle.js +28 -25
  23. package/dist/commands/cycle.js.map +1 -0
  24. package/dist/commands/daemon.d.ts +1 -1
  25. package/dist/commands/daemon.d.ts.map +1 -0
  26. package/dist/commands/daemon.js.map +1 -0
  27. package/dist/commands/dashboard.d.ts.map +1 -0
  28. package/dist/commands/dashboard.js +70 -18
  29. package/dist/commands/dashboard.js.map +1 -0
  30. package/dist/commands/dashboard.test.d.ts +2 -0
  31. package/dist/commands/dashboard.test.d.ts.map +1 -0
  32. package/dist/commands/dashboard.test.js +166 -0
  33. package/dist/commands/dashboard.test.js.map +1 -0
  34. package/dist/commands/dep.d.ts.map +1 -0
  35. package/dist/commands/dep.js +2 -3
  36. package/dist/commands/dep.js.map +1 -0
  37. package/dist/commands/doc.d.ts +1 -1
  38. package/dist/commands/doc.d.ts.map +1 -0
  39. package/dist/commands/doc.js +3 -3
  40. package/dist/commands/doc.js.map +1 -0
  41. package/dist/commands/doctor.d.ts +1 -1
  42. package/dist/commands/doctor.d.ts.map +1 -0
  43. package/dist/commands/doctor.js +32 -21
  44. package/dist/commands/doctor.js.map +1 -0
  45. package/dist/commands/graph.d.ts.map +1 -0
  46. package/dist/commands/graph.js.map +1 -0
  47. package/dist/commands/hierarchy.d.ts.map +1 -0
  48. package/dist/commands/hierarchy.js +2 -3
  49. package/dist/commands/hierarchy.js.map +1 -0
  50. package/dist/commands/hooks.d.ts +2 -2
  51. package/dist/commands/hooks.d.ts.map +1 -0
  52. package/dist/commands/hooks.js +22 -14
  53. package/dist/commands/hooks.js.map +1 -0
  54. package/dist/commands/invariant.d.ts +1 -1
  55. package/dist/commands/invariant.d.ts.map +1 -0
  56. package/dist/commands/invariant.js +4 -5
  57. package/dist/commands/invariant.js.map +1 -0
  58. package/dist/commands/learning.d.ts.map +1 -0
  59. package/dist/commands/learning.js +57 -14
  60. package/dist/commands/learning.js.map +1 -0
  61. package/dist/commands/migrate.d.ts.map +1 -0
  62. package/dist/commands/migrate.js.map +1 -0
  63. package/dist/commands/orchestrator.d.ts.map +1 -0
  64. package/dist/commands/orchestrator.js.map +1 -0
  65. package/dist/commands/outbox.d.ts +48 -0
  66. package/dist/commands/outbox.d.ts.map +1 -0
  67. package/dist/commands/outbox.js +186 -0
  68. package/dist/commands/outbox.js.map +1 -0
  69. package/dist/commands/scaffold.d.ts +30 -0
  70. package/dist/commands/scaffold.d.ts.map +1 -0
  71. package/dist/commands/scaffold.js +222 -0
  72. package/dist/commands/scaffold.js.map +1 -0
  73. package/dist/commands/stats.d.ts.map +1 -0
  74. package/dist/commands/stats.js.map +1 -0
  75. package/dist/commands/sync-platform.d.ts.map +1 -0
  76. package/dist/commands/sync-platform.js +3 -4
  77. package/dist/commands/sync-platform.js.map +1 -0
  78. package/dist/commands/sync.d.ts.map +1 -0
  79. package/dist/commands/sync.js +2 -3
  80. package/dist/commands/sync.js.map +1 -0
  81. package/dist/commands/task.d.ts.map +1 -0
  82. package/dist/commands/task.js +7 -8
  83. package/dist/commands/task.js.map +1 -0
  84. package/dist/commands/test.d.ts.map +1 -0
  85. package/dist/commands/test.js.map +1 -0
  86. package/dist/commands/trace.d.ts.map +1 -0
  87. package/dist/commands/trace.js +13 -14
  88. package/dist/commands/trace.js.map +1 -0
  89. package/dist/commands/validate.d.ts.map +1 -0
  90. package/dist/commands/validate.js +1 -2
  91. package/dist/commands/validate.js.map +1 -0
  92. package/dist/commands/worker.d.ts +1 -1
  93. package/dist/commands/worker.d.ts.map +1 -0
  94. package/dist/commands/worker.js.map +1 -0
  95. package/dist/help.d.ts.map +1 -0
  96. package/dist/help.js +893 -203
  97. package/dist/help.js.map +1 -0
  98. package/dist/output.d.ts.map +1 -0
  99. package/dist/output.js.map +1 -0
  100. package/dist/tx +0 -0
  101. package/dist/utils/parse.d.ts.map +1 -0
  102. package/dist/utils/parse.js.map +1 -0
  103. package/dist/utils/parse.test.d.ts +2 -0
  104. package/dist/utils/parse.test.d.ts.map +1 -0
  105. package/dist/utils/parse.test.js +140 -0
  106. package/dist/utils/parse.test.js.map +1 -0
  107. package/dist/version.d.ts.map +1 -0
  108. package/dist/version.js.map +1 -0
  109. package/package.json +11 -20
  110. package/bin/tx +0 -41
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Outbox commands: send, inbox, ack, ack:all, outbox:pending, outbox:gc
3
+ *
4
+ * PRD-024: Agent Outbox Messaging Primitive
5
+ *
6
+ * Channel-based agent-to-agent messaging.
7
+ */
8
+ import { Effect } from "effect";
9
+ import { MessageService } from "@jamesaphoenix/tx-core";
10
+ import { serializeMessage } from "@jamesaphoenix/tx-types";
11
+ import { toJson } from "../output.js";
12
+ import { flag, opt, parseIntOpt } from "../utils/parse.js";
13
+ /**
14
+ * Send a message to a channel.
15
+ *
16
+ * Usage: tx send <channel> <content> [--sender <s>] [--task <id>] [--ttl <sec>] [--correlation <id>] [--metadata '{}'] [--json]
17
+ */
18
+ export const send = (pos, flags) => Effect.gen(function* () {
19
+ const channel = pos[0];
20
+ const content = pos[1];
21
+ if (!channel || !content) {
22
+ console.error("Usage: tx send <channel> <content> [--sender <s>] [--task <id>] [--ttl <sec>] [--correlation <id>] [--metadata '{}'] [--json]");
23
+ process.exit(1);
24
+ }
25
+ const sender = opt(flags, "sender", "s") ?? "cli";
26
+ const taskId = opt(flags, "task") ?? null;
27
+ const ttlSeconds = parseIntOpt(flags, "ttl", "ttl");
28
+ const correlationId = opt(flags, "correlation", "corr") ?? null;
29
+ const metadataRaw = opt(flags, "metadata");
30
+ let metadata;
31
+ if (metadataRaw) {
32
+ try {
33
+ metadata = JSON.parse(metadataRaw);
34
+ }
35
+ catch {
36
+ console.error("Error: --metadata must be valid JSON");
37
+ process.exit(1);
38
+ }
39
+ }
40
+ const svc = yield* MessageService;
41
+ const message = yield* svc.send({
42
+ channel,
43
+ sender,
44
+ content,
45
+ correlationId,
46
+ taskId,
47
+ metadata,
48
+ ttlSeconds
49
+ });
50
+ if (flag(flags, "json")) {
51
+ console.log(toJson(serializeMessage(message)));
52
+ }
53
+ else {
54
+ console.log(`Message ${message.id} sent to channel "${message.channel}"`);
55
+ console.log(` Sender: ${message.sender}`);
56
+ if (message.correlationId)
57
+ console.log(` Correlation: ${message.correlationId}`);
58
+ if (message.taskId)
59
+ console.log(` Task: ${message.taskId}`);
60
+ if (message.expiresAt)
61
+ console.log(` Expires: ${message.expiresAt.toISOString()}`);
62
+ }
63
+ });
64
+ /**
65
+ * Read messages from a channel's inbox.
66
+ * This is a pure read — no side effects, no status changes.
67
+ *
68
+ * Usage: tx inbox <channel> [--after <id>] [--limit <n>] [--sender <s>] [--correlation <id>] [--include-acked] [--json]
69
+ */
70
+ export const inbox = (pos, flags) => Effect.gen(function* () {
71
+ const channel = pos[0];
72
+ if (!channel) {
73
+ console.error("Usage: tx inbox <channel> [--after <id>] [--limit <n>] [--sender <s>] [--correlation <id>] [--include-acked] [--json]");
74
+ process.exit(1);
75
+ }
76
+ const afterId = parseIntOpt(flags, "after", "after");
77
+ const limit = parseIntOpt(flags, "limit", "limit", "n");
78
+ const sender = opt(flags, "sender", "s");
79
+ const correlationId = opt(flags, "correlation", "corr");
80
+ const includeAcked = flag(flags, "include-acked");
81
+ const svc = yield* MessageService;
82
+ const messages = yield* svc.inbox({
83
+ channel,
84
+ afterId,
85
+ limit,
86
+ sender,
87
+ correlationId,
88
+ includeAcked
89
+ });
90
+ if (flag(flags, "json")) {
91
+ console.log(toJson(messages.map(serializeMessage)));
92
+ }
93
+ else {
94
+ if (messages.length === 0) {
95
+ console.log(`No messages in channel "${channel}"`);
96
+ return;
97
+ }
98
+ for (const msg of messages) {
99
+ const ts = msg.createdAt.toISOString().slice(0, 19).replace("T", " ");
100
+ console.log(`[${msg.id}] ${ts} ${msg.sender}: ${msg.content}`);
101
+ }
102
+ console.log(`\n${messages.length} message(s)`);
103
+ }
104
+ });
105
+ /**
106
+ * Acknowledge a single message by ID.
107
+ *
108
+ * Usage: tx ack <message-id> [--json]
109
+ */
110
+ export const ack = (pos, flags) => Effect.gen(function* () {
111
+ const rawId = pos[0];
112
+ if (!rawId) {
113
+ console.error("Usage: tx ack <message-id> [--json]");
114
+ process.exit(1);
115
+ }
116
+ const id = parseInt(rawId, 10);
117
+ if (isNaN(id)) {
118
+ console.error(`Error: invalid message ID "${rawId}"`);
119
+ process.exit(1);
120
+ }
121
+ const svc = yield* MessageService;
122
+ const message = yield* svc.ack(id);
123
+ if (flag(flags, "json")) {
124
+ console.log(toJson(serializeMessage(message)));
125
+ }
126
+ else {
127
+ console.log(`Message ${message.id} acknowledged`);
128
+ }
129
+ });
130
+ /**
131
+ * Acknowledge all pending messages on a channel.
132
+ *
133
+ * Usage: tx ack:all <channel> [--json]
134
+ */
135
+ export const ackAll = (pos, flags) => Effect.gen(function* () {
136
+ const channel = pos[0];
137
+ if (!channel) {
138
+ console.error("Usage: tx ack:all <channel> [--json]");
139
+ process.exit(1);
140
+ }
141
+ const svc = yield* MessageService;
142
+ const count = yield* svc.ackAll(channel);
143
+ if (flag(flags, "json")) {
144
+ console.log(toJson({ channel, ackedCount: count }));
145
+ }
146
+ else {
147
+ console.log(`${count} message(s) acknowledged on channel "${channel}"`);
148
+ }
149
+ });
150
+ /**
151
+ * Count pending messages on a channel.
152
+ *
153
+ * Usage: tx outbox:pending <channel> [--json]
154
+ */
155
+ export const outboxPending = (pos, flags) => Effect.gen(function* () {
156
+ const channel = pos[0];
157
+ if (!channel) {
158
+ console.error("Usage: tx outbox:pending <channel> [--json]");
159
+ process.exit(1);
160
+ }
161
+ const svc = yield* MessageService;
162
+ const count = yield* svc.pending(channel);
163
+ if (flag(flags, "json")) {
164
+ console.log(toJson({ channel, count }));
165
+ }
166
+ else {
167
+ console.log(`${count} pending message(s) on channel "${channel}"`);
168
+ }
169
+ });
170
+ /**
171
+ * Garbage collect old messages.
172
+ *
173
+ * Usage: tx outbox:gc [--acked-older-than <hours>] [--json]
174
+ */
175
+ export const outboxGc = (_pos, flags) => Effect.gen(function* () {
176
+ const ackedOlderThanHours = parseIntOpt(flags, "acked-older-than", "acked-older-than");
177
+ const svc = yield* MessageService;
178
+ const result = yield* svc.gc({ ackedOlderThanHours });
179
+ if (flag(flags, "json")) {
180
+ console.log(toJson(result));
181
+ }
182
+ else {
183
+ console.log(`GC complete: ${result.expired} expired, ${result.acked} old acked messages removed`);
184
+ }
185
+ });
186
+ //# sourceMappingURL=outbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../../src/commands/outbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Scaffold Claude Code or Codex integration files into the current project.
3
+ *
4
+ * Copies template files (CLAUDE.md / AGENTS.md, skills, scripts) into the
5
+ * user's project, skipping any files that already exist.
6
+ */
7
+ export interface ScaffoldResult {
8
+ copied: string[];
9
+ skipped: string[];
10
+ }
11
+ export interface ClaudeOptions {
12
+ claudeMd?: boolean;
13
+ workflowSkill?: boolean;
14
+ cycleSkill?: boolean;
15
+ ralphScript?: boolean;
16
+ }
17
+ /**
18
+ * Scaffold Claude Code integration into the current project.
19
+ */
20
+ export declare function scaffoldClaude(projectDir: string, options?: ClaudeOptions): ScaffoldResult;
21
+ /**
22
+ * Scaffold Codex integration into the current project.
23
+ */
24
+ export declare function scaffoldCodex(projectDir: string): ScaffoldResult;
25
+ /**
26
+ * Interactive scaffold using @clack/prompts.
27
+ * Asks the user what they want step by step.
28
+ */
29
+ export declare function interactiveScaffold(projectDir: string): Promise<void>;
30
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyEH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAkD1F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CA8BhE;AAYD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD3E"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Scaffold Claude Code or Codex integration files into the current project.
3
+ *
4
+ * Copies template files (CLAUDE.md / AGENTS.md, skills, scripts) into the
5
+ * user's project, skipping any files that already exist.
6
+ */
7
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, statSync, chmodSync } from "node:fs";
8
+ import { resolve, join, dirname, relative } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import * as p from "@clack/prompts";
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ /** Resolve the templates directory relative to this source file */
13
+ function templatesDir() {
14
+ return resolve(__dirname, "..", "templates");
15
+ }
16
+ /**
17
+ * Detect whether a document already has the tx onboarding section.
18
+ * Accepts either '-' or '—' in the heading to avoid accidental duplicates.
19
+ */
20
+ function hasTxSection(content) {
21
+ return /^\s*#\s*tx\s*[—-]\s*Headless,\s*Local Infra for AI Agents\s*$/im.test(content);
22
+ }
23
+ /**
24
+ * Recursively copy files from src to dest, skipping files that already exist.
25
+ * Returns arrays of copied and skipped file paths (relative to dest).
26
+ */
27
+ function copyTree(src, dest, baseDir) {
28
+ const copied = [];
29
+ const skipped = [];
30
+ const base = baseDir ?? dest;
31
+ if (!existsSync(src))
32
+ return { copied, skipped };
33
+ for (const entry of readdirSync(src)) {
34
+ const srcPath = join(src, entry);
35
+ const destPath = join(dest, entry);
36
+ const stat = statSync(srcPath);
37
+ if (stat.isDirectory()) {
38
+ const sub = copyTree(srcPath, destPath, base);
39
+ copied.push(...sub.copied);
40
+ skipped.push(...sub.skipped);
41
+ }
42
+ else {
43
+ const relPath = relative(base, destPath);
44
+ if (existsSync(destPath)) {
45
+ skipped.push(relPath);
46
+ }
47
+ else {
48
+ try {
49
+ mkdirSync(dirname(destPath), { recursive: true });
50
+ }
51
+ catch (error) {
52
+ const err = error;
53
+ if (err.code === "ENOTDIR") {
54
+ throw new Error(`Cannot scaffold '${relPath}': a parent path exists as a file. Move/delete conflicting path and retry.`);
55
+ }
56
+ throw error;
57
+ }
58
+ writeFileSync(destPath, readFileSync(srcPath));
59
+ // Make .sh files executable
60
+ if (destPath.endsWith(".sh")) {
61
+ chmodSync(destPath, 0o755);
62
+ }
63
+ copied.push(relPath);
64
+ }
65
+ }
66
+ }
67
+ return { copied, skipped };
68
+ }
69
+ /**
70
+ * Scaffold Claude Code integration into the current project.
71
+ */
72
+ export function scaffoldClaude(projectDir, options) {
73
+ const opts = { claudeMd: true, workflowSkill: true, cycleSkill: true, ralphScript: false, ...options };
74
+ const allCopied = [];
75
+ const allSkipped = [];
76
+ const templates = templatesDir();
77
+ // Copy individual skills based on options
78
+ const skillsDest = join(projectDir, ".claude", "skills");
79
+ const skillsToInclude = [];
80
+ if (opts.workflowSkill)
81
+ skillsToInclude.push("tx-workflow");
82
+ if (opts.cycleSkill)
83
+ skillsToInclude.push("tx-cycle");
84
+ for (const skill of skillsToInclude) {
85
+ const src = join(templates, "claude", "skills", skill);
86
+ const dest = join(skillsDest, skill);
87
+ const result = copyTree(src, dest);
88
+ allCopied.push(...result.copied.map(p => `.claude/skills/${skill}/${p}`));
89
+ allSkipped.push(...result.skipped.map(p => `.claude/skills/${skill}/${p}`));
90
+ }
91
+ // Copy ralph script
92
+ if (opts.ralphScript) {
93
+ const scriptsSrc = join(templates, "claude", "scripts");
94
+ const scriptsDest = join(projectDir, "scripts");
95
+ const result = copyTree(scriptsSrc, scriptsDest);
96
+ allCopied.push(...result.copied.map(p => `scripts/${p}`));
97
+ allSkipped.push(...result.skipped.map(p => `scripts/${p}`));
98
+ }
99
+ // Copy/create CLAUDE.md
100
+ if (opts.claudeMd) {
101
+ const claudeMdSrc = join(templates, "claude", "CLAUDE.md");
102
+ const claudeMdDest = join(projectDir, "CLAUDE.md");
103
+ if (existsSync(claudeMdDest)) {
104
+ const existing = readFileSync(claudeMdDest, "utf-8");
105
+ if (hasTxSection(existing)) {
106
+ allSkipped.push("CLAUDE.md (tx section already present)");
107
+ }
108
+ else {
109
+ const txSection = readFileSync(claudeMdSrc, "utf-8");
110
+ writeFileSync(claudeMdDest, existing + "\n\n" + txSection);
111
+ allCopied.push("CLAUDE.md (appended tx section)");
112
+ }
113
+ }
114
+ else {
115
+ writeFileSync(claudeMdDest, readFileSync(claudeMdSrc, "utf-8"));
116
+ allCopied.push("CLAUDE.md");
117
+ }
118
+ }
119
+ return { copied: allCopied, skipped: allSkipped };
120
+ }
121
+ /**
122
+ * Scaffold Codex integration into the current project.
123
+ */
124
+ export function scaffoldCodex(projectDir) {
125
+ const allCopied = [];
126
+ const allSkipped = [];
127
+ const templates = templatesDir();
128
+ // Copy codex agent profiles
129
+ const codexAgentsSrc = join(templates, "codex", "agents");
130
+ const codexAgentsDest = join(projectDir, ".codex", "agents");
131
+ const agentsResult = copyTree(codexAgentsSrc, codexAgentsDest);
132
+ allCopied.push(...agentsResult.copied.map(p => `.codex/agents/${p}`));
133
+ allSkipped.push(...agentsResult.skipped.map(p => `.codex/agents/${p}`));
134
+ const agentsMdSrc = join(templates, "codex", "AGENTS.md");
135
+ const agentsMdDest = join(projectDir, "AGENTS.md");
136
+ if (existsSync(agentsMdDest)) {
137
+ const existing = readFileSync(agentsMdDest, "utf-8");
138
+ if (hasTxSection(existing)) {
139
+ allSkipped.push("AGENTS.md (tx section already present)");
140
+ }
141
+ else {
142
+ const txSection = readFileSync(agentsMdSrc, "utf-8");
143
+ writeFileSync(agentsMdDest, existing + "\n\n" + txSection);
144
+ allCopied.push("AGENTS.md (appended tx section)");
145
+ }
146
+ }
147
+ else {
148
+ writeFileSync(agentsMdDest, readFileSync(agentsMdSrc, "utf-8"));
149
+ allCopied.push("AGENTS.md");
150
+ }
151
+ return { copied: allCopied, skipped: allSkipped };
152
+ }
153
+ /** Format scaffold results for clack note */
154
+ function formatResults(results) {
155
+ const lines = [];
156
+ for (const r of results) {
157
+ for (const f of r.copied)
158
+ lines.push(` + ${f}`);
159
+ for (const f of r.skipped)
160
+ lines.push(` ~ ${f} (exists)`);
161
+ }
162
+ return lines.join("\n");
163
+ }
164
+ /**
165
+ * Interactive scaffold using @clack/prompts.
166
+ * Asks the user what they want step by step.
167
+ */
168
+ export async function interactiveScaffold(projectDir) {
169
+ const wantsClaude = await p.confirm({
170
+ message: "Add Claude Code integration? (CLAUDE.md + skills)",
171
+ initialValue: true,
172
+ });
173
+ if (p.isCancel(wantsClaude)) {
174
+ p.cancel("Setup cancelled.");
175
+ return;
176
+ }
177
+ const results = [];
178
+ if (wantsClaude) {
179
+ const wantsCycle = await p.confirm({
180
+ message: "Include cycle sub-agent skill? (automated issue discovery)",
181
+ initialValue: true,
182
+ });
183
+ if (p.isCancel(wantsCycle)) {
184
+ p.cancel("Setup cancelled.");
185
+ return;
186
+ }
187
+ const wantsRalph = await p.confirm({
188
+ message: "Include ralph script? (autonomous task loop)",
189
+ initialValue: false,
190
+ });
191
+ if (p.isCancel(wantsRalph)) {
192
+ p.cancel("Setup cancelled.");
193
+ return;
194
+ }
195
+ const result = scaffoldClaude(projectDir, {
196
+ claudeMd: true,
197
+ workflowSkill: true,
198
+ cycleSkill: !!wantsCycle,
199
+ ralphScript: !!wantsRalph,
200
+ });
201
+ results.push(result);
202
+ }
203
+ const wantsCodex = await p.confirm({
204
+ message: "Add Codex integration? (AGENTS.md + .codex/agents)",
205
+ initialValue: true,
206
+ });
207
+ if (p.isCancel(wantsCodex)) {
208
+ p.cancel("Setup cancelled.");
209
+ return;
210
+ }
211
+ if (wantsCodex) {
212
+ results.push(scaffoldCodex(projectDir));
213
+ }
214
+ const output = formatResults(results);
215
+ if (output) {
216
+ p.note(output, "Files");
217
+ }
218
+ if (!wantsClaude && !wantsCodex) {
219
+ p.log.info("Skipped agent integration. Run tx init --claude or tx init --codex later.");
220
+ }
221
+ }
222
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAErD,OAAO,EAAE,KAAK,KAAK,EAAQ,MAAM,mBAAmB,CAAA;AAuBpD,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,6CAqG9C,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-platform.d.ts","sourceRoot":"","sources":["../../src/commands/sync-platform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAI/B,OAAO,EAAE,WAAW,EAAwB,MAAM,wBAAwB,CAAA;AAE1E,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,mBAAmB,CAAA;AAEzD,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,qFA8DnD,CAAA;AAEJ,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,EAAE,QAAQ,KAAK,uCAInD,CAAA"}
@@ -11,7 +11,6 @@ import { homedir } from "node:os";
11
11
  import { TaskService, buildClaudeTaskFiles } from "@jamesaphoenix/tx-core";
12
12
  import { toJson } from "../output.js";
13
13
  import { flag, opt } from "../utils/parse.js";
14
- import { CliExitError } from "../cli-exit.js";
15
14
  export const syncClaude = (_pos, flags) => Effect.gen(function* () {
16
15
  const taskSvc = yield* TaskService;
17
16
  // Resolve target directory
@@ -22,7 +21,7 @@ export const syncClaude = (_pos, flags) => Effect.gen(function* () {
22
21
  // Validate team name to prevent path traversal (e.g. --team ../../.ssh)
23
22
  if (!/^[a-zA-Z0-9_-]+$/.test(teamName)) {
24
23
  console.error("Invalid team name: must contain only alphanumeric characters, hyphens, and underscores");
25
- throw new CliExitError(1);
24
+ process.exit(1);
26
25
  }
27
26
  targetDir = join(homedir(), ".claude", "tasks", teamName);
28
27
  }
@@ -31,7 +30,7 @@ export const syncClaude = (_pos, flags) => Effect.gen(function* () {
31
30
  }
32
31
  else {
33
32
  console.error("Either --team <name> or --dir <path> is required");
34
- throw new CliExitError(1);
33
+ process.exit(1);
35
34
  }
36
35
  // Create directory if it doesn't exist
37
36
  if (!existsSync(targetDir)) {
@@ -70,6 +69,6 @@ export const syncClaude = (_pos, flags) => Effect.gen(function* () {
70
69
  });
71
70
  export const syncCodex = (_pos, _flags) => Effect.sync(() => {
72
71
  console.error("Codex sync is not yet implemented. Use 'tx sync claude' for Claude Code.");
73
- throw new CliExitError(1);
72
+ process.exit(1);
74
73
  });
75
74
  //# sourceMappingURL=sync-platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-platform.js","sourceRoot":"","sources":["../../src/commands/sync-platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGpD,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,mBAAmB,CAAA;AAGzD,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,4OAoH5C,CAAA"}
@@ -6,7 +6,6 @@ import { SyncService } from "@jamesaphoenix/tx-core";
6
6
  import { toJson } from "../output.js";
7
7
  import { commandHelp } from "../help.js";
8
8
  import { flag, opt } from "../utils/parse.js";
9
- import { CliExitError } from "../cli-exit.js";
10
9
  import { syncClaude, syncCodex } from "./sync-platform.js";
11
10
  export const sync = (pos, flags) => Effect.gen(function* () {
12
11
  const subcommand = pos[0];
@@ -80,7 +79,7 @@ export const sync = (pos, flags) => Effect.gen(function* () {
80
79
  const disableFlag = flag(flags, "disable");
81
80
  if (enableFlag && disableFlag) {
82
81
  console.error("Cannot specify both --enable and --disable");
83
- throw new CliExitError(1);
82
+ process.exit(1);
84
83
  }
85
84
  if (enableFlag) {
86
85
  yield* syncSvc.enableAutoSync();
@@ -123,7 +122,7 @@ export const sync = (pos, flags) => Effect.gen(function* () {
123
122
  else {
124
123
  console.error(`Unknown sync subcommand: ${subcommand}`);
125
124
  console.error(`Run 'tx sync --help' for usage information`);
126
- throw new CliExitError(1);
125
+ process.exit(1);
127
126
  }
128
127
  });
129
128
  //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGlF,OAAO,EAAE,KAAK,KAAK,EAAuC,MAAM,mBAAmB,CAAA;AAEnF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,6LA0B3C,CAAA;AAEJ,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,qFAkC7C,CAAA;AAEJ,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,uGA8B9C,CAAA;AAEJ,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,2JAmC5C,CAAA;AAEJ,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,+OA4B9C,CAAA;AAEJ,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,8PAkC5C,CAAA;AAEJ,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,8LAmBlD,CAAA;AAEJ,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,+OAyB7C,CAAA"}
@@ -6,12 +6,11 @@ import { TaskService, ReadyService, AttemptService } from "@jamesaphoenix/tx-cor
6
6
  import { assertTaskStatus, TASK_STATUSES } from "@jamesaphoenix/tx-types";
7
7
  import { toJson, formatTaskWithDeps, formatTaskLine, formatReadyTaskLine } from "../output.js";
8
8
  import { flag, opt, parseIntOpt, parseTaskId } from "../utils/parse.js";
9
- import { CliExitError } from "../cli-exit.js";
10
9
  export const add = (pos, flags) => Effect.gen(function* () {
11
10
  const title = pos[0];
12
11
  if (!title) {
13
12
  console.error("Usage: tx add <title> [--parent/-p <id>] [--score/-s <n>] [--description/-d <text>] [--json]");
14
- throw new CliExitError(1);
13
+ process.exit(1);
15
14
  }
16
15
  const svc = yield* TaskService;
17
16
  const task = yield* svc.create({
@@ -45,7 +44,7 @@ export const list = (_pos, flags) => Effect.gen(function* () {
45
44
  }
46
45
  catch {
47
46
  console.error(`Invalid status filter. Valid statuses: ${TASK_STATUSES.join(", ")}`);
48
- throw new CliExitError(1);
47
+ process.exit(1);
49
48
  }
50
49
  }
51
50
  const tasks = yield* svc.listWithDeps({
@@ -101,7 +100,7 @@ export const show = (pos, flags) => Effect.gen(function* () {
101
100
  const raw = pos[0];
102
101
  if (!raw) {
103
102
  console.error("Usage: tx show <id> [--json]");
104
- throw new CliExitError(1);
103
+ process.exit(1);
105
104
  }
106
105
  const id = parseTaskId(raw);
107
106
  const svc = yield* TaskService;
@@ -134,7 +133,7 @@ export const update = (pos, flags) => Effect.gen(function* () {
134
133
  const raw = pos[0];
135
134
  if (!raw) {
136
135
  console.error("Usage: tx update <id> [--status <s>] [--title <t>] [--score <n>] [--description <d>] [--parent <p>] [--json]");
137
- throw new CliExitError(1);
136
+ process.exit(1);
138
137
  }
139
138
  const id = parseTaskId(raw);
140
139
  const svc = yield* TaskService;
@@ -165,7 +164,7 @@ export const done = (pos, flags) => Effect.gen(function* () {
165
164
  const raw = pos[0];
166
165
  if (!raw) {
167
166
  console.error("Usage: tx done <id> [--json]");
168
- throw new CliExitError(1);
167
+ process.exit(1);
169
168
  }
170
169
  const id = parseTaskId(raw);
171
170
  const taskSvc = yield* TaskService;
@@ -195,7 +194,7 @@ export const deleteTask = (pos, flags) => Effect.gen(function* () {
195
194
  const raw = pos[0];
196
195
  if (!raw) {
197
196
  console.error("Usage: tx delete <id> [--cascade] [--json]");
198
- throw new CliExitError(1);
197
+ process.exit(1);
199
198
  }
200
199
  const id = parseTaskId(raw);
201
200
  const cascade = flag(flags, "cascade");
@@ -213,7 +212,7 @@ export const reset = (pos, flags) => Effect.gen(function* () {
213
212
  const raw = pos[0];
214
213
  if (!raw) {
215
214
  console.error("Usage: tx reset <id> [--json]");
216
- throw new CliExitError(1);
215
+ process.exit(1);
217
216
  }
218
217
  const id = parseTaskId(raw);
219
218
  const taskSvc = yield* TaskService;