@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,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"}
|