@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,362 @@
1
+ /**
2
+ * Learning commands: learning:add, learning:search, learning:recent, learning:helpful, context, learn, recall
3
+ */
4
+ import { Effect } from "effect";
5
+ import { writeFileSync, existsSync, mkdirSync } from "node:fs";
6
+ import { resolve, dirname } from "node:path";
7
+ import { pathToFileURL } from "node:url";
8
+ import { LearningService, FileLearningService, RetrieverService, TaskService, RetrievalError } from "@jamesaphoenix/tx-core";
9
+ import { LEARNING_SOURCE_TYPES } from "@jamesaphoenix/tx-types";
10
+ import { toJson, formatContextMarkdown } from "../output.js";
11
+ import { commandHelp } from "../help.js";
12
+ import { flag, opt, parseIntOpt, parseFloatOpt, parseTaskId } from "../utils/parse.js";
13
+ export const learningAdd = (pos, flags) => Effect.gen(function* () {
14
+ const content = pos[0];
15
+ if (!content) {
16
+ console.error("Usage: tx learning:add <content> [-c category] [--source-ref ref] [--json]");
17
+ process.exit(1);
18
+ }
19
+ const sourceTypeArg = opt(flags, "source-type");
20
+ let sourceType = "manual";
21
+ if (sourceTypeArg) {
22
+ if (!LEARNING_SOURCE_TYPES.includes(sourceTypeArg)) {
23
+ console.error(`Error: Invalid --source-type "${sourceTypeArg}". Valid types: ${LEARNING_SOURCE_TYPES.join(", ")}`);
24
+ process.exit(1);
25
+ }
26
+ sourceType = sourceTypeArg;
27
+ }
28
+ const svc = yield* LearningService;
29
+ const learning = yield* svc.create({
30
+ content,
31
+ category: opt(flags, "category", "c") ?? undefined,
32
+ sourceRef: opt(flags, "source-ref") ?? undefined,
33
+ sourceType
34
+ });
35
+ if (flag(flags, "json")) {
36
+ console.log(toJson(learning));
37
+ }
38
+ else {
39
+ console.log(`Created learning: #${learning.id}`);
40
+ console.log(` Content: ${learning.content.slice(0, 80)}${learning.content.length > 80 ? "..." : ""}`);
41
+ if (learning.category)
42
+ console.log(` Category: ${learning.category}`);
43
+ if (learning.sourceRef)
44
+ console.log(` Source: ${learning.sourceRef}`);
45
+ }
46
+ });
47
+ export const learningSearch = (pos, flags) => Effect.gen(function* () {
48
+ const query = pos[0];
49
+ if (!query) {
50
+ console.error("Usage: tx learning:search <query> [-n limit] [--json]");
51
+ process.exit(1);
52
+ }
53
+ const svc = yield* LearningService;
54
+ const limit = parseIntOpt(flags, "limit", "limit", "n") ?? 10;
55
+ const minScore = parseFloatOpt(flags, "min-score", "min-score") ?? 0.3;
56
+ const results = yield* svc.search({ query, limit, minScore });
57
+ if (flag(flags, "json")) {
58
+ console.log(toJson(results));
59
+ }
60
+ else {
61
+ if (results.length === 0) {
62
+ console.log("No learnings found");
63
+ }
64
+ else {
65
+ console.log(`${results.length} learning(s) found:`);
66
+ for (const r of results) {
67
+ const score = (r.relevanceScore * 100).toFixed(0);
68
+ const category = r.category ? ` [${r.category}]` : "";
69
+ console.log(` #${r.id} (${score}%)${category} ${r.content.slice(0, 60)}${r.content.length > 60 ? "..." : ""}`);
70
+ }
71
+ }
72
+ }
73
+ });
74
+ export const learningRecent = (_pos, flags) => Effect.gen(function* () {
75
+ const svc = yield* LearningService;
76
+ const limit = parseIntOpt(flags, "limit", "limit", "n") ?? 10;
77
+ const learnings = yield* svc.getRecent(limit);
78
+ if (flag(flags, "json")) {
79
+ console.log(toJson(learnings));
80
+ }
81
+ else {
82
+ if (learnings.length === 0) {
83
+ console.log("No learnings found");
84
+ }
85
+ else {
86
+ console.log(`${learnings.length} recent learning(s):`);
87
+ for (const l of learnings) {
88
+ const category = l.category ? ` [${l.category}]` : "";
89
+ const source = l.sourceType !== "manual" ? ` (${l.sourceType})` : "";
90
+ console.log(` #${l.id}${category}${source} ${l.content.slice(0, 60)}${l.content.length > 60 ? "..." : ""}`);
91
+ }
92
+ }
93
+ }
94
+ });
95
+ export const learningHelpful = (pos, flags) => Effect.gen(function* () {
96
+ const idStr = pos[0];
97
+ if (!idStr) {
98
+ console.error("Usage: tx learning:helpful <id> [--score 0.8] [--json]");
99
+ process.exit(1);
100
+ }
101
+ const id = parseInt(idStr, 10);
102
+ if (isNaN(id)) {
103
+ console.error("Error: Learning ID must be a number");
104
+ process.exit(1);
105
+ }
106
+ const svc = yield* LearningService;
107
+ const score = parseFloatOpt(flags, "score", "score") ?? 1.0;
108
+ yield* svc.updateOutcome(id, score);
109
+ const learning = yield* svc.get(id);
110
+ if (flag(flags, "json")) {
111
+ console.log(toJson({ success: true, learning }));
112
+ }
113
+ else {
114
+ console.log(`Recorded helpfulness for learning #${id}`);
115
+ console.log(` Score: ${(score * 100).toFixed(0)}%`);
116
+ console.log(` Content: ${learning.content.slice(0, 60)}${learning.content.length > 60 ? "..." : ""}`);
117
+ }
118
+ });
119
+ /**
120
+ * Load a custom retriever module from a file path.
121
+ * The module should export a default Layer that provides RetrieverService.
122
+ */
123
+ const loadCustomRetriever = (retrieverPath) => Effect.gen(function* () {
124
+ const absolutePath = resolve(process.cwd(), retrieverPath);
125
+ if (!existsSync(absolutePath)) {
126
+ console.error(`Error: Retriever module not found: ${absolutePath}`);
127
+ process.exit(1);
128
+ }
129
+ // Dynamic import of the custom retriever module
130
+ const moduleUrl = pathToFileURL(absolutePath).href;
131
+ const retrieverModule = yield* Effect.tryPromise({
132
+ try: async () => {
133
+ const mod = await import(moduleUrl);
134
+ return mod.default;
135
+ },
136
+ catch: (e) => new RetrievalError({ reason: `Failed to load retriever module: ${String(e)}` })
137
+ });
138
+ return retrieverModule;
139
+ });
140
+ export const context = (pos, flags) => Effect.gen(function* () {
141
+ const rawTaskId = pos[0];
142
+ if (!rawTaskId) {
143
+ console.error("Usage: tx context <task-id> [--json] [--inject] [--retriever <path>]");
144
+ process.exit(1);
145
+ }
146
+ const taskId = parseTaskId(rawTaskId);
147
+ const retrieverPath = opt(flags, "retriever");
148
+ // If custom retriever is specified, load it and use it for direct search
149
+ if (retrieverPath) {
150
+ const customRetrieverLayer = yield* loadCustomRetriever(retrieverPath);
151
+ const taskSvc = yield* TaskService;
152
+ const startTime = Date.now();
153
+ // Get task to build search query
154
+ const task = yield* taskSvc.get(taskId);
155
+ // Build search query from task content
156
+ const searchQuery = `${task.title} ${task.description}`.trim();
157
+ // Build retrieval options
158
+ const retrievalOptions = {
159
+ limit: 10,
160
+ minScore: 0.05
161
+ };
162
+ // Use custom retriever for search
163
+ const searchEffect = Effect.gen(function* () {
164
+ const retriever = yield* RetrieverService;
165
+ return yield* retriever.search(searchQuery, retrievalOptions);
166
+ });
167
+ const learnings = yield* Effect.provide(searchEffect, customRetrieverLayer);
168
+ const result = {
169
+ taskId,
170
+ taskTitle: task.title,
171
+ learnings,
172
+ searchQuery,
173
+ searchDuration: Date.now() - startTime
174
+ };
175
+ if (flag(flags, "inject")) {
176
+ const contextMd = formatContextMarkdown(result);
177
+ const contextPath = resolve(process.cwd(), ".tx", "context.md");
178
+ mkdirSync(dirname(contextPath), { recursive: true });
179
+ writeFileSync(contextPath, contextMd);
180
+ console.log(`Wrote ${result.learnings.length} learning(s) to ${contextPath} (custom retriever)`);
181
+ }
182
+ else if (flag(flags, "json")) {
183
+ console.log(toJson(result));
184
+ }
185
+ else {
186
+ console.log(`Context for: ${result.taskId} - ${result.taskTitle} (custom retriever)`);
187
+ console.log(` Search query: ${result.searchQuery.slice(0, 50)}...`);
188
+ console.log(` Search duration: ${result.searchDuration}ms`);
189
+ console.log(` ${result.learnings.length} relevant learning(s):`);
190
+ for (const l of result.learnings) {
191
+ const score = (l.relevanceScore * 100).toFixed(0);
192
+ console.log(` #${l.id} (${score}%) ${l.content}`);
193
+ }
194
+ }
195
+ return;
196
+ }
197
+ // Default path: use LearningService with built-in retriever
198
+ const svc = yield* LearningService;
199
+ const result = yield* svc.getContextForTask(taskId);
200
+ if (flag(flags, "inject")) {
201
+ // Write to .tx/context.md for injection
202
+ const contextMd = formatContextMarkdown(result);
203
+ const contextPath = resolve(process.cwd(), ".tx", "context.md");
204
+ mkdirSync(dirname(contextPath), { recursive: true });
205
+ writeFileSync(contextPath, contextMd);
206
+ console.log(`Wrote ${result.learnings.length} learning(s) to ${contextPath}`);
207
+ }
208
+ else if (flag(flags, "json")) {
209
+ console.log(toJson(result));
210
+ }
211
+ else {
212
+ console.log(`Context for: ${result.taskId} - ${result.taskTitle}`);
213
+ console.log(` Search query: ${result.searchQuery.slice(0, 50)}...`);
214
+ console.log(` Search duration: ${result.searchDuration}ms`);
215
+ console.log(` ${result.learnings.length} relevant learning(s):`);
216
+ for (const l of result.learnings) {
217
+ const score = (l.relevanceScore * 100).toFixed(0);
218
+ console.log(` #${l.id} (${score}%) ${l.content}`);
219
+ }
220
+ }
221
+ });
222
+ export const learn = (pos, flags) => Effect.gen(function* () {
223
+ const pattern = pos[0];
224
+ const note = pos[1];
225
+ if (!pattern || !note) {
226
+ console.error("Usage: tx learn <path> <note> [--task <id>] [--json]");
227
+ process.exit(1);
228
+ }
229
+ const svc = yield* FileLearningService;
230
+ const learning = yield* svc.create({
231
+ filePattern: pattern,
232
+ note,
233
+ taskId: opt(flags, "task") ?? undefined
234
+ });
235
+ if (flag(flags, "json")) {
236
+ console.log(toJson(learning));
237
+ }
238
+ else {
239
+ console.log(`Created file learning: #${learning.id}`);
240
+ console.log(` Pattern: ${learning.filePattern}`);
241
+ console.log(` Note: ${learning.note.slice(0, 80)}${learning.note.length > 80 ? "..." : ""}`);
242
+ if (learning.taskId)
243
+ console.log(` Task: ${learning.taskId}`);
244
+ }
245
+ });
246
+ export const recall = (pos, flags) => Effect.gen(function* () {
247
+ const path = pos[0];
248
+ const svc = yield* FileLearningService;
249
+ if (path) {
250
+ // Recall learnings for specific path
251
+ const learnings = yield* svc.recall(path);
252
+ if (flag(flags, "json")) {
253
+ console.log(toJson(learnings));
254
+ }
255
+ else {
256
+ if (learnings.length === 0) {
257
+ console.log(`No learnings found for: ${path}`);
258
+ }
259
+ else {
260
+ console.log(`${learnings.length} learning(s) for ${path}:`);
261
+ for (const l of learnings) {
262
+ const taskInfo = l.taskId ? ` [${l.taskId}]` : "";
263
+ console.log(` #${l.id}${taskInfo} (${l.filePattern})`);
264
+ console.log(` ${l.note}`);
265
+ }
266
+ }
267
+ }
268
+ }
269
+ else {
270
+ // List all learnings
271
+ const learnings = yield* svc.getAll();
272
+ if (flag(flags, "json")) {
273
+ console.log(toJson(learnings));
274
+ }
275
+ else {
276
+ if (learnings.length === 0) {
277
+ console.log("No file learnings found");
278
+ }
279
+ else {
280
+ console.log(`${learnings.length} file learning(s):`);
281
+ for (const l of learnings) {
282
+ const taskInfo = l.taskId ? ` [${l.taskId}]` : "";
283
+ console.log(` #${l.id}${taskInfo} ${l.filePattern}`);
284
+ console.log(` ${l.note.slice(0, 60)}${l.note.length > 60 ? "..." : ""}`);
285
+ }
286
+ }
287
+ }
288
+ }
289
+ });
290
+ const VALID_EMBEDDERS = ["auto", "openai", "local", "noop"];
291
+ export const learningEmbed = (_pos, flags) => Effect.gen(function* () {
292
+ // Parse --embedder flag (overrides TX_EMBEDDER env var)
293
+ const embedderArg = opt(flags, "embedder");
294
+ let selectedEmbedder = "auto";
295
+ if (embedderArg) {
296
+ const normalized = embedderArg.toLowerCase().trim();
297
+ if (!VALID_EMBEDDERS.includes(normalized)) {
298
+ console.error(`Error: Invalid --embedder value "${embedderArg}"`);
299
+ console.error(`Valid values: ${VALID_EMBEDDERS.join(", ")}`);
300
+ process.exit(1);
301
+ }
302
+ selectedEmbedder = normalized;
303
+ // Set environment variable for EmbeddingServiceAuto to pick up
304
+ if (selectedEmbedder !== "auto") {
305
+ process.env.TX_EMBEDDER = selectedEmbedder;
306
+ }
307
+ }
308
+ const svc = yield* LearningService;
309
+ // Status check doesn't require embeddings to be enabled
310
+ if (flag(flags, "status")) {
311
+ const status = yield* svc.embeddingStatus();
312
+ if (flag(flags, "json")) {
313
+ console.log(toJson({ ...status, embedder: selectedEmbedder }));
314
+ }
315
+ else {
316
+ console.log("Embedding Status:");
317
+ console.log(` Embedder: ${selectedEmbedder}`);
318
+ console.log(` Total learnings: ${status.total}`);
319
+ console.log(` With embeddings: ${status.withEmbeddings}`);
320
+ console.log(` Without embeddings: ${status.withoutEmbeddings}`);
321
+ console.log(` Coverage: ${status.coveragePercent.toFixed(1)}%`);
322
+ }
323
+ return;
324
+ }
325
+ // Check if embeddings are enabled
326
+ if (process.env.TX_EMBEDDINGS !== "1") {
327
+ console.error("Error: Embeddings not enabled. Set TX_EMBEDDINGS=1 to enable.");
328
+ console.error("Example: TX_EMBEDDINGS=1 tx learning:embed");
329
+ process.exit(1);
330
+ }
331
+ const forceAll = flag(flags, "all");
332
+ const result = yield* svc.embedAll(forceAll);
333
+ if (flag(flags, "json")) {
334
+ console.log(toJson({ ...result, embedder: selectedEmbedder }));
335
+ }
336
+ else {
337
+ console.log("Embedding complete:");
338
+ console.log(` Embedder: ${selectedEmbedder}`);
339
+ console.log(` Processed: ${result.processed}`);
340
+ console.log(` Skipped: ${result.skipped}`);
341
+ console.log(` Failed: ${result.failed}`);
342
+ console.log(` Total: ${result.total}`);
343
+ }
344
+ });
345
+ // Help command handler for learning subcommands
346
+ export const learningHelp = (subcommand) => Effect.sync(() => {
347
+ const helpKey = `learning:${subcommand}`;
348
+ if (commandHelp[helpKey]) {
349
+ console.log(commandHelp[helpKey]);
350
+ }
351
+ else {
352
+ console.log("Learning commands:");
353
+ console.log(" tx learning:add <content> Add a learning");
354
+ console.log(" tx learning:search <query> Search learnings");
355
+ console.log(" tx learning:recent List recent learnings");
356
+ console.log(" tx learning:helpful <id> Record helpfulness");
357
+ console.log(" tx learning:embed Compute embeddings for learnings");
358
+ console.log("");
359
+ console.log("Run 'tx learning:<command> --help' for command-specific help.");
360
+ }
361
+ });
362
+ //# sourceMappingURL=learning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning.js","sourceRoot":"","sources":["../../src/commands/learning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Migrate commands: status
3
+ */
4
+ import { Effect } from "effect";
5
+ import { MigrationService } from "@jamesaphoenix/tx-core";
6
+ type Flags = Record<string, string | boolean>;
7
+ export declare const migrate: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError, MigrationService>;
8
+ export {};
9
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAIzD,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;AAM7C,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,0FAgD/C,CAAA"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Migrate commands: status
3
+ */
4
+ import { Effect } from "effect";
5
+ import { MigrationService } from "@jamesaphoenix/tx-core";
6
+ import { toJson } from "../output.js";
7
+ import { commandHelp } from "../help.js";
8
+ function flag(flags, ...names) {
9
+ return names.some(n => flags[n] === true);
10
+ }
11
+ export const migrate = (pos, flags) => Effect.gen(function* () {
12
+ const subcommand = pos[0];
13
+ if (!subcommand || subcommand === "help") {
14
+ console.log(commandHelp["migrate"]);
15
+ return;
16
+ }
17
+ // Check for --help on subcommand
18
+ if (flag(flags, "help", "h")) {
19
+ const helpKey = `migrate ${subcommand}`;
20
+ if (commandHelp[helpKey]) {
21
+ console.log(commandHelp[helpKey]);
22
+ return;
23
+ }
24
+ }
25
+ const migrationSvc = yield* MigrationService;
26
+ if (subcommand === "status") {
27
+ const status = yield* migrationSvc.getStatus();
28
+ if (flag(flags, "json")) {
29
+ console.log(toJson(status));
30
+ }
31
+ else {
32
+ console.log(`Migration Status:`);
33
+ console.log(` Current version: ${status.currentVersion}`);
34
+ console.log(` Latest version: ${status.latestVersion}`);
35
+ console.log(` Pending migrations: ${status.pendingCount}`);
36
+ if (status.appliedMigrations.length > 0) {
37
+ console.log(`\nApplied migrations:`);
38
+ for (const m of status.appliedMigrations) {
39
+ console.log(` v${m.version} - applied ${m.appliedAt.toISOString()}`);
40
+ }
41
+ }
42
+ if (status.pendingMigrations.length > 0) {
43
+ console.log(`\nPending migrations:`);
44
+ for (const m of status.pendingMigrations) {
45
+ console.log(` v${m.version} - ${m.description}`);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ else {
51
+ console.error(`Unknown migrate subcommand: ${subcommand}`);
52
+ console.error(`Run 'tx migrate --help' for usage information`);
53
+ process.exit(1);
54
+ }
55
+ });
56
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Orchestrator commands: start, stop, status, reconcile
3
+ *
4
+ * CLI commands for managing the worker orchestration system (PRD-018).
5
+ */
6
+ import { Effect } from "effect";
7
+ import { OrchestratorService } from "@jamesaphoenix/tx-core";
8
+ type Flags = Record<string, string | boolean>;
9
+ export declare const orchestrator: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").OrchestratorError, OrchestratorService>;
10
+ export {};
11
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/commands/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,mBAAmB,EAA2B,MAAM,wBAAwB,CAAA;AAIrF,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;AAc7C,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,kJAiHpD,CAAA"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Orchestrator commands: start, stop, status, reconcile
3
+ *
4
+ * CLI commands for managing the worker orchestration system (PRD-018).
5
+ */
6
+ import { Effect } from "effect";
7
+ import { OrchestratorService } from "@jamesaphoenix/tx-core";
8
+ import { toJson } from "../output.js";
9
+ import { commandHelp } from "../help.js";
10
+ function flag(flags, ...names) {
11
+ return names.some(n => flags[n] === true);
12
+ }
13
+ function opt(flags, ...names) {
14
+ for (const n of names) {
15
+ const v = flags[n];
16
+ if (typeof v === "string")
17
+ return v;
18
+ }
19
+ return undefined;
20
+ }
21
+ export const orchestrator = (pos, flags) => Effect.gen(function* () {
22
+ const subcommand = pos[0];
23
+ if (!subcommand || subcommand === "help") {
24
+ console.log(commandHelp["orchestrator"]);
25
+ return;
26
+ }
27
+ // Check for --help on subcommand
28
+ if (flag(flags, "help", "h")) {
29
+ const helpKey = `orchestrator ${subcommand}`;
30
+ if (commandHelp[helpKey]) {
31
+ console.log(commandHelp[helpKey]);
32
+ return;
33
+ }
34
+ }
35
+ const svc = yield* OrchestratorService;
36
+ if (subcommand === "start") {
37
+ // Parse options
38
+ const workersOpt = opt(flags, "workers", "w");
39
+ const workers = workersOpt ? parseInt(workersOpt, 10) : undefined;
40
+ const isDaemon = flag(flags, "daemon", "d");
41
+ // Build config
42
+ const config = workers !== undefined
43
+ ? { workerPoolSize: workers }
44
+ : {};
45
+ // Start orchestrator
46
+ yield* svc.start(config);
47
+ // Get updated status
48
+ const state = yield* svc.status();
49
+ if (flag(flags, "json")) {
50
+ console.log(toJson({
51
+ action: "started",
52
+ status: state.status,
53
+ pid: state.pid,
54
+ workerPoolSize: state.workerPoolSize,
55
+ daemon: isDaemon
56
+ }));
57
+ }
58
+ else {
59
+ console.log("Orchestrator started");
60
+ console.log(` Status: ${state.status}`);
61
+ console.log(` PID: ${state.pid}`);
62
+ console.log(` Worker pool size: ${state.workerPoolSize}`);
63
+ if (isDaemon) {
64
+ console.log(" Mode: daemon (background)");
65
+ }
66
+ }
67
+ }
68
+ else if (subcommand === "stop") {
69
+ const graceful = flag(flags, "graceful", "g");
70
+ yield* svc.stop(graceful);
71
+ const state = yield* svc.status();
72
+ if (flag(flags, "json")) {
73
+ console.log(toJson({
74
+ action: "stopped",
75
+ status: state.status,
76
+ graceful
77
+ }));
78
+ }
79
+ else {
80
+ console.log("Orchestrator stopped");
81
+ if (graceful) {
82
+ console.log(" Mode: graceful (waited for workers to finish)");
83
+ }
84
+ }
85
+ }
86
+ else if (subcommand === "status") {
87
+ const state = yield* svc.status();
88
+ if (flag(flags, "json")) {
89
+ console.log(toJson(state));
90
+ }
91
+ else {
92
+ console.log("Orchestrator Status:");
93
+ console.log(` Status: ${state.status}`);
94
+ if (state.pid) {
95
+ console.log(` PID: ${state.pid}`);
96
+ }
97
+ if (state.startedAt) {
98
+ console.log(` Started: ${state.startedAt.toISOString()}`);
99
+ }
100
+ console.log(` Worker pool size: ${state.workerPoolSize}`);
101
+ console.log(` Heartbeat interval: ${state.heartbeatIntervalSeconds}s`);
102
+ console.log(` Lease duration: ${state.leaseDurationMinutes}m`);
103
+ console.log(` Reconcile interval: ${state.reconcileIntervalSeconds}s`);
104
+ if (state.lastReconcileAt) {
105
+ console.log(` Last reconcile: ${state.lastReconcileAt.toISOString()}`);
106
+ }
107
+ }
108
+ }
109
+ else if (subcommand === "reconcile") {
110
+ const result = yield* svc.reconcile();
111
+ if (flag(flags, "json")) {
112
+ console.log(toJson(result));
113
+ }
114
+ else {
115
+ console.log("Reconciliation completed");
116
+ console.log(` Dead workers found: ${result.deadWorkersFound}`);
117
+ console.log(` Expired claims released: ${result.expiredClaimsReleased}`);
118
+ console.log(` Orphaned tasks recovered: ${result.orphanedTasksRecovered}`);
119
+ console.log(` Stale states fixed: ${result.staleStatesFixed}`);
120
+ console.log(` Time: ${result.reconcileTime}ms`);
121
+ }
122
+ }
123
+ else {
124
+ console.error(`Unknown orchestrator subcommand: ${subcommand}`);
125
+ console.error(`Run 'tx orchestrator --help' for usage information`);
126
+ process.exit(1);
127
+ }
128
+ });
129
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/commands/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Stats command: Queue metrics and health overview
3
+ */
4
+ import { Effect } from "effect";
5
+ import { SqliteClient } from "@jamesaphoenix/tx-core";
6
+ import { type Flags } from "../utils/parse.js";
7
+ export declare const stats: (_pos: string[], flags: Flags) => Effect.Effect<void, never, SqliteClient>;
8
+ //# sourceMappingURL=stats.d.ts.map
@@ -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"}