@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,365 @@
1
+ /**
2
+ * Git hooks commands: hooks:install, hooks:uninstall, hooks:status
3
+ *
4
+ * Integrates tx with git post-commit hooks for automatic actions
5
+ * after commits (e.g., auto-sync).
6
+ */
7
+ import { Effect } from "effect";
8
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, unlinkSync, chmodSync } from "node:fs";
9
+ import { resolve, dirname } from "node:path";
10
+ import { toJson } from "../output.js";
11
+ import { flag, opt, parseIntOpt } from "../utils/parse.js";
12
+ /** Default high-value file patterns */
13
+ const DEFAULT_HIGH_VALUE_FILES = [
14
+ "package.json",
15
+ "tsconfig.json",
16
+ "*.config.ts",
17
+ "*.config.js",
18
+ "src/index.ts",
19
+ "src/index.js",
20
+ ];
21
+ /** Default file change threshold for triggering verification */
22
+ const DEFAULT_FILE_THRESHOLD = 10;
23
+ /**
24
+ * Allowlist regex for file patterns safe to embed in bash scripts.
25
+ * Permits: alphanumeric, dots, underscores, hyphens, slashes, stars,
26
+ * question marks, and square brackets (for glob character classes).
27
+ * Rejects: quotes, backticks, $, ;, |, &, (), newlines, spaces, backslashes.
28
+ */
29
+ const SAFE_PATTERN_RE = /^[a-zA-Z0-9._/*?\-[\]]+$/;
30
+ /**
31
+ * Validate a file pattern for safe embedding in generated bash scripts.
32
+ * Rejects patterns containing shell metacharacters that could enable
33
+ * command injection when interpolated into grep -qE '...' expressions.
34
+ */
35
+ export function isValidHookPattern(pattern) {
36
+ return pattern.length > 0 && SAFE_PATTERN_RE.test(pattern);
37
+ }
38
+ /**
39
+ * Validate that a file threshold is a safe positive integer.
40
+ * Returns the validated value or the default if invalid.
41
+ */
42
+ function safeFileThreshold(value) {
43
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
44
+ return Math.floor(value);
45
+ }
46
+ return DEFAULT_FILE_THRESHOLD;
47
+ }
48
+ /**
49
+ * Read .txrc configuration file.
50
+ * Returns default config if file doesn't exist.
51
+ */
52
+ export function readTxrc(projectDir) {
53
+ const txrcPath = resolve(projectDir, ".txrc");
54
+ const txrcJsonPath = resolve(projectDir, ".txrc.json");
55
+ let configPath;
56
+ if (existsSync(txrcJsonPath)) {
57
+ configPath = txrcJsonPath;
58
+ }
59
+ else if (existsSync(txrcPath)) {
60
+ configPath = txrcPath;
61
+ }
62
+ if (!configPath) {
63
+ return {};
64
+ }
65
+ try {
66
+ const content = readFileSync(configPath, "utf-8");
67
+ return JSON.parse(content);
68
+ }
69
+ catch {
70
+ return {};
71
+ }
72
+ }
73
+ /**
74
+ * Write .txrc configuration file.
75
+ */
76
+ export function writeTxrc(projectDir, config) {
77
+ const txrcPath = resolve(projectDir, ".txrc.json");
78
+ const dir = dirname(txrcPath);
79
+ if (!existsSync(dir)) {
80
+ mkdirSync(dir, { recursive: true });
81
+ }
82
+ writeFileSync(txrcPath, JSON.stringify(config, null, 2) + "\n");
83
+ }
84
+ /**
85
+ * Find git root directory from current directory.
86
+ */
87
+ export function findGitRoot(startDir) {
88
+ let dir = startDir;
89
+ while (dir !== "/") {
90
+ if (existsSync(resolve(dir, ".git"))) {
91
+ return dir;
92
+ }
93
+ dir = dirname(dir);
94
+ }
95
+ return null;
96
+ }
97
+ /**
98
+ * Generate the post-commit hook script content.
99
+ */
100
+ export function generatePostCommitHook(config) {
101
+ const fileThreshold = safeFileThreshold(config.hooks?.fileThreshold);
102
+ const highValueFiles = config.hooks?.highValueFiles ?? DEFAULT_HIGH_VALUE_FILES;
103
+ // Filter out unsafe patterns to prevent command injection via grep -qE '...'
104
+ const safePatterns = highValueFiles.filter(pattern => {
105
+ if (!isValidHookPattern(pattern)) {
106
+ console.error(`[tx] Warning: Skipping unsafe hook pattern: "${pattern}"`);
107
+ return false;
108
+ }
109
+ return true;
110
+ });
111
+ // Generate the high-value file pattern matching
112
+ const highValuePatterns = safePatterns
113
+ .map(pattern => {
114
+ // Convert glob pattern to grep pattern
115
+ const grepPattern = pattern
116
+ .replace(/\./g, "\\.")
117
+ .replace(/\*/g, ".*");
118
+ return `echo "$CHANGED_FILES" | grep -qE '${grepPattern}'`;
119
+ })
120
+ .join(" || ");
121
+ return `#!/bin/bash
122
+ # tx post-commit hook - Automatic sync after commits
123
+ # Installed by: tx hooks:install
124
+ # Documentation: https://github.com/tx/tx#git-hooks
125
+
126
+ set -e
127
+
128
+ # Skip if tx is not available
129
+ if ! command -v tx &> /dev/null; then
130
+ exit 0
131
+ fi
132
+
133
+ # Skip if .txrc has hooks.enabled = false
134
+ if [ -f ".txrc.json" ]; then
135
+ ENABLED=$(cat .txrc.json 2>/dev/null | grep -o '"enabled"[[:space:]]*:[[:space:]]*\\(true\\|false\\)' | grep -o '\\(true\\|false\\)' || echo "true")
136
+ if [ "$ENABLED" = "false" ]; then
137
+ exit 0
138
+ fi
139
+ fi
140
+ if [ -f ".txrc" ]; then
141
+ ENABLED=$(cat .txrc 2>/dev/null | grep -o '"enabled"[[:space:]]*:[[:space:]]*\\(true\\|false\\)' | grep -o '\\(true\\|false\\)' || echo "true")
142
+ if [ "$ENABLED" = "false" ]; then
143
+ exit 0
144
+ fi
145
+ fi
146
+
147
+ # Get changed files from the commit
148
+ CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r HEAD 2>/dev/null || echo "")
149
+ FILE_COUNT=$(echo "$CHANGED_FILES" | grep -c . 2>/dev/null || echo "0")
150
+
151
+ # Check if we should trigger post-commit actions
152
+ SHOULD_TRIGGER=false
153
+
154
+ # Condition 1: More than ${fileThreshold} files changed
155
+ if [ "$FILE_COUNT" -gt ${fileThreshold} ]; then
156
+ SHOULD_TRIGGER=true
157
+ echo "[tx] Large commit detected ($FILE_COUNT files)."
158
+ fi
159
+
160
+ # Condition 2: High-value files modified
161
+ if [ "$SHOULD_TRIGGER" = "false" ] && [ -n "$CHANGED_FILES" ]; then
162
+ if ${highValuePatterns}; then
163
+ SHOULD_TRIGGER=true
164
+ echo "[tx] High-value files modified."
165
+ fi
166
+ fi
167
+
168
+ # Run auto-sync in background if conditions are met
169
+ if [ "$SHOULD_TRIGGER" = "true" ]; then
170
+ echo "[tx] Running auto-sync in background..."
171
+ (tx sync export 2>/dev/null || true) &
172
+ fi
173
+
174
+ exit 0
175
+ `;
176
+ }
177
+ /**
178
+ * tx hooks:install [--force] [--threshold <n>] [--high-value <patterns>]
179
+ * Install post-commit hook for anchor verification
180
+ */
181
+ export const hooksInstall = (_pos, flags) => Effect.sync(() => {
182
+ const projectDir = process.cwd();
183
+ const gitRoot = findGitRoot(projectDir);
184
+ const jsonOutput = flag(flags, "json");
185
+ if (!gitRoot) {
186
+ if (jsonOutput) {
187
+ console.log(toJson({ success: false, error: "Not a git repository (or any parent up to mount point)" }));
188
+ return;
189
+ }
190
+ console.error("Error: Not a git repository (or any parent up to mount point)");
191
+ process.exit(1);
192
+ }
193
+ const hooksDir = resolve(gitRoot, ".git", "hooks");
194
+ const hookPath = resolve(hooksDir, "post-commit");
195
+ // Check if hook already exists
196
+ if (existsSync(hookPath) && !flag(flags, "force", "f")) {
197
+ const content = readFileSync(hookPath, "utf-8");
198
+ if (content.includes("tx post-commit hook")) {
199
+ if (jsonOutput) {
200
+ console.log(toJson({ success: false, error: "already_installed", message: "tx post-commit hook is already installed. Use --force to reinstall." }));
201
+ return;
202
+ }
203
+ console.log("tx post-commit hook is already installed.");
204
+ console.log("Use --force to reinstall.");
205
+ return;
206
+ }
207
+ if (jsonOutput) {
208
+ console.log(toJson({ success: false, error: "hook_exists", message: "A post-commit hook already exists. Use --force to overwrite." }));
209
+ return;
210
+ }
211
+ console.error("Error: A post-commit hook already exists.");
212
+ console.error("Use --force to overwrite, or manually integrate tx verification.");
213
+ process.exit(1);
214
+ }
215
+ // Read existing config or create default
216
+ let config = readTxrc(projectDir);
217
+ // Apply CLI options
218
+ const thresholdVal = parseIntOpt(flags, "threshold", "threshold", "t");
219
+ const highValue = opt(flags, "high-value", "h");
220
+ if (!config.hooks) {
221
+ config.hooks = {};
222
+ }
223
+ if (thresholdVal !== undefined && thresholdVal > 0) {
224
+ config.hooks.fileThreshold = thresholdVal;
225
+ }
226
+ if (highValue) {
227
+ const patterns = highValue.split(",").map(s => s.trim());
228
+ const invalid = patterns.filter(p => !isValidHookPattern(p));
229
+ if (invalid.length > 0) {
230
+ if (jsonOutput) {
231
+ console.log(toJson({ success: false, error: "invalid_patterns", message: `Unsafe patterns rejected: ${invalid.join(", ")}. Only alphanumeric, dots, slashes, stars, hyphens, underscores, question marks, and brackets are allowed.` }));
232
+ return;
233
+ }
234
+ console.error(`Error: Unsafe patterns rejected: ${invalid.join(", ")}`);
235
+ console.error("Patterns may only contain: a-z A-Z 0-9 . _ / * ? - [ ]");
236
+ process.exit(1);
237
+ }
238
+ config.hooks.highValueFiles = patterns;
239
+ }
240
+ config.hooks.enabled = true;
241
+ config.hooks.verifyOnCommit = true;
242
+ // Ensure hooks directory exists
243
+ if (!existsSync(hooksDir)) {
244
+ mkdirSync(hooksDir, { recursive: true });
245
+ }
246
+ // Generate and write the hook
247
+ const hookContent = generatePostCommitHook(config);
248
+ writeFileSync(hookPath, hookContent);
249
+ chmodSync(hookPath, 0o755);
250
+ // Save config to .txrc.json
251
+ writeTxrc(projectDir, config);
252
+ if (jsonOutput) {
253
+ console.log(toJson({
254
+ success: true,
255
+ hookPath,
256
+ config: {
257
+ fileThreshold: config.hooks.fileThreshold ?? DEFAULT_FILE_THRESHOLD,
258
+ highValueFiles: config.hooks.highValueFiles ?? DEFAULT_HIGH_VALUE_FILES,
259
+ enabled: true,
260
+ verifyOnCommit: true,
261
+ }
262
+ }));
263
+ return;
264
+ }
265
+ console.log("tx post-commit hook installed successfully!");
266
+ console.log();
267
+ console.log("Configuration:");
268
+ console.log(` File threshold: ${config.hooks.fileThreshold ?? DEFAULT_FILE_THRESHOLD} files`);
269
+ console.log(` High-value files: ${(config.hooks.highValueFiles ?? DEFAULT_HIGH_VALUE_FILES).join(", ")}`);
270
+ console.log();
271
+ console.log("The hook will automatically verify anchors when:");
272
+ console.log(` - More than ${config.hooks.fileThreshold ?? DEFAULT_FILE_THRESHOLD} files are changed in a commit`);
273
+ console.log(" - Any high-value configuration files are modified");
274
+ console.log();
275
+ console.log("To disable, set hooks.enabled = false in .txrc.json");
276
+ });
277
+ /**
278
+ * tx hooks:uninstall
279
+ * Remove post-commit hook
280
+ */
281
+ export const hooksUninstall = (_pos, flags) => Effect.sync(() => {
282
+ const projectDir = process.cwd();
283
+ const gitRoot = findGitRoot(projectDir);
284
+ const jsonOutput = flag(flags, "json");
285
+ if (!gitRoot) {
286
+ if (jsonOutput) {
287
+ console.log(toJson({ success: false, error: "Not a git repository (or any parent up to mount point)" }));
288
+ return;
289
+ }
290
+ console.error("Error: Not a git repository (or any parent up to mount point)");
291
+ process.exit(1);
292
+ }
293
+ const hookPath = resolve(gitRoot, ".git", "hooks", "post-commit");
294
+ if (!existsSync(hookPath)) {
295
+ if (jsonOutput) {
296
+ console.log(toJson({ success: false, error: "not_found", message: "No post-commit hook found." }));
297
+ return;
298
+ }
299
+ console.log("No post-commit hook found.");
300
+ return;
301
+ }
302
+ const content = readFileSync(hookPath, "utf-8");
303
+ if (!content.includes("tx post-commit hook")) {
304
+ if (jsonOutput) {
305
+ console.log(toJson({ success: false, error: "not_tx_hook", message: "Existing post-commit hook was not installed by tx." }));
306
+ return;
307
+ }
308
+ console.error("Error: Existing post-commit hook was not installed by tx.");
309
+ console.error("Please manually remove the hook if desired.");
310
+ process.exit(1);
311
+ }
312
+ unlinkSync(hookPath);
313
+ // Update config
314
+ const config = readTxrc(projectDir);
315
+ if (config.hooks) {
316
+ config.hooks.enabled = false;
317
+ config.hooks.verifyOnCommit = false;
318
+ writeTxrc(projectDir, config);
319
+ }
320
+ if (jsonOutput) {
321
+ console.log(toJson({ success: true, hookPath, message: "tx post-commit hook uninstalled." }));
322
+ return;
323
+ }
324
+ console.log("tx post-commit hook uninstalled.");
325
+ });
326
+ /**
327
+ * tx hooks:status [--json]
328
+ * Show current hook status
329
+ */
330
+ export const hooksStatus = (_pos, flags) => Effect.sync(() => {
331
+ const projectDir = process.cwd();
332
+ const gitRoot = findGitRoot(projectDir);
333
+ const status = {
334
+ gitRoot,
335
+ hookInstalled: false,
336
+ hookPath: null,
337
+ config: readTxrc(projectDir),
338
+ enabled: false
339
+ };
340
+ if (gitRoot) {
341
+ const hookPath = resolve(gitRoot, ".git", "hooks", "post-commit");
342
+ status.hookPath = hookPath;
343
+ if (existsSync(hookPath)) {
344
+ const content = readFileSync(hookPath, "utf-8");
345
+ status.hookInstalled = content.includes("tx post-commit hook");
346
+ }
347
+ }
348
+ status.enabled = status.hookInstalled && (status.config.hooks?.enabled !== false);
349
+ if (flag(flags, "json")) {
350
+ console.log(toJson(status));
351
+ return;
352
+ }
353
+ console.log("tx Git Hook Status");
354
+ console.log();
355
+ console.log(` Git root: ${status.gitRoot ?? "Not found"} `);
356
+ console.log(` Hook installed: ${status.hookInstalled ? "Yes" : "No"}`);
357
+ console.log(` Hook enabled: ${status.enabled ? "Yes" : "No"}`);
358
+ if (status.config.hooks) {
359
+ console.log();
360
+ console.log("Configuration (.txrc.json):");
361
+ console.log(` File threshold: ${status.config.hooks.fileThreshold ?? DEFAULT_FILE_THRESHOLD}`);
362
+ console.log(` High-value files: ${(status.config.hooks.highValueFiles ?? DEFAULT_HIGH_VALUE_FILES).join(", ")}`);
363
+ }
364
+ });
365
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Invariant commands: invariant list, invariant show, invariant record, invariant sync
3
+ */
4
+ import { Effect } from "effect";
5
+ import { DocService } from "@jamesaphoenix/tx-core";
6
+ import { type Flags } from "../utils/parse.js";
7
+ /** Dispatch invariant subcommands. */
8
+ export declare const invariant: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").InvalidDocYamlError | import("@jamesaphoenix/tx-core").DocNotFoundError, DocService> | Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").InvariantNotFoundError, DocService>;
9
+ //# sourceMappingURL=invariant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../../src/commands/invariant.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,mBAAmB,CAAA;AAEzD,sCAAsC;AACtC,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,2UAgBpD,CAAA"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Invariant commands: invariant list, invariant show, invariant record, invariant sync
3
+ */
4
+ import { Effect } from "effect";
5
+ import { DocService } from "@jamesaphoenix/tx-core";
6
+ import { toJson } from "../output.js";
7
+ import { flag, opt } from "../utils/parse.js";
8
+ /** Dispatch invariant subcommands. */
9
+ export const invariant = (pos, flags) => {
10
+ const sub = pos[0];
11
+ const rest = pos.slice(1);
12
+ switch (sub) {
13
+ case "list": return invariantList(rest, flags);
14
+ case "show": return invariantShow(rest, flags);
15
+ case "record": return invariantRecord(rest, flags);
16
+ case "sync": return invariantSync(rest, flags);
17
+ default:
18
+ return Effect.sync(() => {
19
+ console.error(`Unknown invariant subcommand: ${sub ?? "(none)"}`);
20
+ console.error("Run 'tx invariant --help' for usage information");
21
+ process.exit(1);
22
+ });
23
+ }
24
+ };
25
+ const invariantList = (_pos, flags) => Effect.gen(function* () {
26
+ const subsystem = opt(flags, "subsystem", "s") ?? undefined;
27
+ const enforcement = opt(flags, "enforcement", "e") ?? undefined;
28
+ const svc = yield* DocService;
29
+ const invariants = yield* svc.listInvariants({ subsystem, enforcement });
30
+ if (flag(flags, "json")) {
31
+ console.log(toJson(invariants));
32
+ }
33
+ else {
34
+ if (invariants.length === 0) {
35
+ console.log("No invariants found");
36
+ }
37
+ else {
38
+ console.log(`${invariants.length} invariant(s):`);
39
+ for (const inv of invariants) {
40
+ const sub = inv.subsystem ? ` [${inv.subsystem}]` : " [system]";
41
+ const statusIcon = inv.status === "active" ? "●" : "○";
42
+ console.log(` ${statusIcon} ${inv.id}${sub} (${inv.enforcement})`);
43
+ console.log(` ${inv.rule}`);
44
+ }
45
+ }
46
+ }
47
+ });
48
+ const invariantShow = (pos, flags) => Effect.gen(function* () {
49
+ const id = pos[0];
50
+ if (!id) {
51
+ console.error("Usage: tx invariant show <id>");
52
+ process.exit(1);
53
+ }
54
+ const svc = yield* DocService;
55
+ // Find invariant by listing all and filtering (no direct get in service)
56
+ const all = yield* svc.listInvariants();
57
+ const inv = all.find(i => i.id === id);
58
+ if (!inv) {
59
+ console.error(`Invariant not found: ${id}`);
60
+ process.exit(1);
61
+ }
62
+ if (flag(flags, "json")) {
63
+ console.log(toJson(inv));
64
+ }
65
+ else {
66
+ console.log(`Invariant: ${inv.id}`);
67
+ console.log(` Rule: ${inv.rule}`);
68
+ console.log(` Enforcement: ${inv.enforcement}`);
69
+ console.log(` Status: ${inv.status}`);
70
+ console.log(` Subsystem: ${inv.subsystem ?? "system"}`);
71
+ if (inv.testRef)
72
+ console.log(` Test ref: ${inv.testRef}`);
73
+ if (inv.lintRule)
74
+ console.log(` Lint rule: ${inv.lintRule}`);
75
+ if (inv.promptRef)
76
+ console.log(` Prompt ref: ${inv.promptRef}`);
77
+ console.log(` Created: ${inv.createdAt.toISOString()}`);
78
+ }
79
+ });
80
+ const invariantRecord = (pos, flags) => Effect.gen(function* () {
81
+ const id = pos[0];
82
+ if (!id) {
83
+ console.error("Usage: tx invariant record <id> --passed|--failed [--details <text>]");
84
+ process.exit(1);
85
+ }
86
+ const passed = flag(flags, "passed");
87
+ const failed = flag(flags, "failed");
88
+ if (!passed && !failed) {
89
+ console.error("Must specify --passed or --failed");
90
+ process.exit(1);
91
+ }
92
+ const details = opt(flags, "details", "d") ?? undefined;
93
+ const svc = yield* DocService;
94
+ const check = yield* svc.recordInvariantCheck(id, passed, details);
95
+ if (flag(flags, "json")) {
96
+ console.log(toJson(check));
97
+ }
98
+ else {
99
+ const icon = check.passed ? "✓" : "✗";
100
+ console.log(`${icon} Recorded check for ${id}: ${check.passed ? "PASSED" : "FAILED"}`);
101
+ if (check.details)
102
+ console.log(` Details: ${check.details}`);
103
+ console.log(` Checked at: ${check.checkedAt.toISOString()}`);
104
+ }
105
+ });
106
+ const invariantSync = (_pos, flags) => Effect.gen(function* () {
107
+ const docName = opt(flags, "doc") ?? undefined;
108
+ const svc = yield* DocService;
109
+ const synced = yield* svc.syncInvariants(docName);
110
+ if (flag(flags, "json")) {
111
+ console.log(toJson({ synced: synced.length, invariants: synced }));
112
+ }
113
+ else {
114
+ if (synced.length === 0) {
115
+ console.log("No invariants found in doc YAML files");
116
+ }
117
+ else {
118
+ console.log(`Synced ${synced.length} invariant(s):`);
119
+ for (const inv of synced) {
120
+ const sub = inv.subsystem ? ` [${inv.subsystem}]` : " [system]";
121
+ console.log(` ${inv.id}${sub} (${inv.enforcement}) ${inv.rule.slice(0, 60)}`);
122
+ }
123
+ }
124
+ }
125
+ });
126
+ //# sourceMappingURL=invariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant.js","sourceRoot":"","sources":["../../src/commands/invariant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Learning commands: learning:add, learning:search, learning:recent, learning:helpful, context, learn, recall
3
+ */
4
+ import { Effect } from "effect";
5
+ import { LearningService, FileLearningService, TaskService, RetrievalError } from "@jamesaphoenix/tx-core";
6
+ import { type Flags } from "../utils/parse.js";
7
+ export declare const learningAdd: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").ValidationError | import("@jamesaphoenix/tx-core").DatabaseError, LearningService>;
8
+ export declare const learningSearch: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError | RetrievalError | import("@jamesaphoenix/tx-core").EmbeddingDimensionMismatchError, LearningService>;
9
+ export declare const learningRecent: (_pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError, LearningService>;
10
+ export declare const learningHelpful: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").ValidationError | import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").LearningNotFoundError, LearningService>;
11
+ export declare const context: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").TaskNotFoundError | RetrievalError | import("@jamesaphoenix/tx-core").EmbeddingDimensionMismatchError, TaskService | LearningService>;
12
+ export declare const learn: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").ValidationError | import("@jamesaphoenix/tx-core").DatabaseError, FileLearningService>;
13
+ export declare const recall: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError, FileLearningService>;
14
+ export declare const learningEmbed: (_pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError, LearningService>;
15
+ export declare const learningHelp: (subcommand: string) => Effect.Effect<void, never, never>;
16
+ //# sourceMappingURL=learning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../../src/commands/learning.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAS,MAAM,QAAQ,CAAA;AAItC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAoB,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAK5H,OAAO,EAAE,KAAK,KAAK,EAAsD,MAAM,mBAAmB,CAAA;AAElG,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,4IAkCnD,CAAA;AAEJ,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,6KA4BtD,CAAA;AAEJ,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,yFAqBvD,CAAA;AAEJ,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,qMA2BvD,CAAA;AA4BJ,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,gPA0F/C,CAAA;AAEJ,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,gJAwB7C,CAAA;AAEJ,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,6FA0C9C,CAAA;AAKJ,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,yFA2DtD,CAAA;AAGJ,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,sCAe3C,CAAA"}