safeword 0.8.7 → 0.8.10
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/{check-PPVIEF3Q.js → check-4HX4SNVV.js} +27 -27
- package/dist/check-4HX4SNVV.js.map +1 -0
- package/dist/{chunk-W66Z3C5H.js → chunk-FJYRWU2V.js} +5 -5
- package/dist/chunk-FJYRWU2V.js.map +1 -0
- package/dist/chunk-POPS3ZRQ.js +1219 -0
- package/dist/chunk-POPS3ZRQ.js.map +1 -0
- package/dist/cli.js +5 -9
- package/dist/cli.js.map +1 -1
- package/dist/{diff-S3ICSYQY.js → diff-7QIV6Z5B.js} +14 -16
- package/dist/diff-7QIV6Z5B.js.map +1 -0
- package/dist/index.d.ts +2 -7
- package/dist/reset-RP7AGR2Y.js +73 -0
- package/dist/reset-RP7AGR2Y.js.map +1 -0
- package/dist/setup-ZYRPDTQI.js +91 -0
- package/dist/setup-ZYRPDTQI.js.map +1 -0
- package/dist/upgrade-K2FFESUH.js +76 -0
- package/dist/upgrade-K2FFESUH.js.map +1 -0
- package/package.json +2 -2
- package/templates/SAFEWORD.md +5 -2
- package/templates/commands/cleanup-zombies.md +48 -0
- package/templates/guides/cli-reference.md +9 -11
- package/templates/guides/zombie-process-cleanup.md +40 -24
- package/templates/scripts/cleanup-zombies.sh +222 -0
- package/dist/check-PPVIEF3Q.js.map +0 -1
- package/dist/chunk-34PU3QZI.js +0 -1047
- package/dist/chunk-34PU3QZI.js.map +0 -1
- package/dist/chunk-3OK3NQEW.js +0 -476
- package/dist/chunk-3OK3NQEW.js.map +0 -1
- package/dist/chunk-BFBUEJDH.js +0 -88
- package/dist/chunk-BFBUEJDH.js.map +0 -1
- package/dist/chunk-W66Z3C5H.js.map +0 -1
- package/dist/diff-S3ICSYQY.js.map +0 -1
- package/dist/reset-ZST2SGZ2.js +0 -74
- package/dist/reset-ZST2SGZ2.js.map +0 -1
- package/dist/setup-ANAIEP3D.js +0 -100
- package/dist/setup-ANAIEP3D.js.map +0 -1
- package/dist/sync-V6D7QTMO.js +0 -9
- package/dist/sync-V6D7QTMO.js.map +0 -1
- package/dist/upgrade-QFIGWZ5I.js +0 -76
- package/dist/upgrade-QFIGWZ5I.js.map +0 -1
|
@@ -1,30 +1,28 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isNewerVersion
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FJYRWU2V.js";
|
|
4
4
|
import {
|
|
5
|
+
SAFEWORD_SCHEMA,
|
|
5
6
|
createProjectContext,
|
|
7
|
+
exists,
|
|
6
8
|
header,
|
|
7
9
|
info,
|
|
8
10
|
keyValue,
|
|
11
|
+
readFileSafe,
|
|
9
12
|
reconcile,
|
|
10
13
|
success,
|
|
11
14
|
warn
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import {
|
|
14
|
-
SAFEWORD_SCHEMA,
|
|
15
|
-
exists,
|
|
16
|
-
readFileSafe
|
|
17
|
-
} from "./chunk-34PU3QZI.js";
|
|
15
|
+
} from "./chunk-POPS3ZRQ.js";
|
|
18
16
|
import {
|
|
19
17
|
VERSION
|
|
20
18
|
} from "./chunk-ORQHKDT2.js";
|
|
21
19
|
|
|
22
20
|
// src/commands/check.ts
|
|
23
|
-
import
|
|
21
|
+
import nodePath from "path";
|
|
24
22
|
function findMissingFiles(cwd, actions) {
|
|
25
23
|
const issues = [];
|
|
26
24
|
for (const action of actions) {
|
|
27
|
-
if (action.type === "write" && !exists(join(cwd, action.path))) {
|
|
25
|
+
if (action.type === "write" && !exists(nodePath.join(cwd, action.path))) {
|
|
28
26
|
issues.push(`Missing: ${action.path}`);
|
|
29
27
|
}
|
|
30
28
|
}
|
|
@@ -34,14 +32,14 @@ function findMissingPatches(cwd, actions) {
|
|
|
34
32
|
const issues = [];
|
|
35
33
|
for (const action of actions) {
|
|
36
34
|
if (action.type !== "text-patch") continue;
|
|
37
|
-
const fullPath = join(cwd, action.path);
|
|
38
|
-
if (
|
|
39
|
-
issues.push(`${action.path} file missing`);
|
|
40
|
-
} else {
|
|
35
|
+
const fullPath = nodePath.join(cwd, action.path);
|
|
36
|
+
if (exists(fullPath)) {
|
|
41
37
|
const content = readFileSafe(fullPath) ?? "";
|
|
42
38
|
if (action.definition && !content.includes(action.definition.marker)) {
|
|
43
39
|
issues.push(`${action.path} missing safeword link`);
|
|
44
40
|
}
|
|
41
|
+
} else {
|
|
42
|
+
issues.push(`${action.path} file missing`);
|
|
45
43
|
}
|
|
46
44
|
}
|
|
47
45
|
return issues;
|
|
@@ -49,40 +47,42 @@ function findMissingPatches(cwd, actions) {
|
|
|
49
47
|
async function checkLatestVersion(timeout = 3e3) {
|
|
50
48
|
try {
|
|
51
49
|
const controller = new AbortController();
|
|
52
|
-
const timeoutId = setTimeout(() =>
|
|
50
|
+
const timeoutId = setTimeout(() => {
|
|
51
|
+
controller.abort();
|
|
52
|
+
}, timeout);
|
|
53
53
|
const response = await fetch("https://registry.npmjs.org/safeword/latest", {
|
|
54
54
|
signal: controller.signal
|
|
55
55
|
});
|
|
56
56
|
clearTimeout(timeoutId);
|
|
57
|
-
if (!response.ok) return
|
|
57
|
+
if (!response.ok) return void 0;
|
|
58
58
|
const data = await response.json();
|
|
59
|
-
return data.version ??
|
|
59
|
+
return data.version ?? void 0;
|
|
60
60
|
} catch {
|
|
61
|
-
return
|
|
61
|
+
return void 0;
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
async function checkHealth(cwd) {
|
|
65
|
-
const
|
|
66
|
-
if (!exists(
|
|
65
|
+
const safewordDirectory = nodePath.join(cwd, ".safeword");
|
|
66
|
+
if (!exists(safewordDirectory)) {
|
|
67
67
|
return {
|
|
68
68
|
configured: false,
|
|
69
|
-
projectVersion:
|
|
69
|
+
projectVersion: void 0,
|
|
70
70
|
cliVersion: VERSION,
|
|
71
71
|
updateAvailable: false,
|
|
72
|
-
latestVersion:
|
|
72
|
+
latestVersion: void 0,
|
|
73
73
|
issues: [],
|
|
74
74
|
missingPackages: []
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
|
-
const versionPath = join(
|
|
78
|
-
const projectVersion = readFileSafe(versionPath)?.trim() ??
|
|
77
|
+
const versionPath = nodePath.join(safewordDirectory, "version");
|
|
78
|
+
const projectVersion = readFileSafe(versionPath)?.trim() ?? void 0;
|
|
79
79
|
const ctx = createProjectContext(cwd);
|
|
80
80
|
const result = await reconcile(SAFEWORD_SCHEMA, "upgrade", ctx, { dryRun: true });
|
|
81
81
|
const issues = [
|
|
82
82
|
...findMissingFiles(cwd, result.actions),
|
|
83
83
|
...findMissingPatches(cwd, result.actions)
|
|
84
84
|
];
|
|
85
|
-
if (!exists(join(cwd, ".claude", "settings.json"))) {
|
|
85
|
+
if (!exists(nodePath.join(cwd, ".claude", "settings.json"))) {
|
|
86
86
|
issues.push("Missing: .claude/settings.json");
|
|
87
87
|
}
|
|
88
88
|
return {
|
|
@@ -90,7 +90,7 @@ async function checkHealth(cwd) {
|
|
|
90
90
|
projectVersion,
|
|
91
91
|
cliVersion: VERSION,
|
|
92
92
|
updateAvailable: false,
|
|
93
|
-
latestVersion:
|
|
93
|
+
latestVersion: void 0,
|
|
94
94
|
issues,
|
|
95
95
|
missingPackages: result.packagesToInstall
|
|
96
96
|
};
|
|
@@ -136,7 +136,7 @@ function reportHealthSummary(health) {
|
|
|
136
136
|
if (health.missingPackages.length > 0) {
|
|
137
137
|
header("Missing Packages");
|
|
138
138
|
info(`${health.missingPackages.length} linting packages not installed`);
|
|
139
|
-
info("Run `safeword
|
|
139
|
+
info("Run `safeword upgrade` to install missing packages");
|
|
140
140
|
return;
|
|
141
141
|
}
|
|
142
142
|
success("\nConfiguration is healthy");
|
|
@@ -162,4 +162,4 @@ async function check(options) {
|
|
|
162
162
|
export {
|
|
163
163
|
check
|
|
164
164
|
};
|
|
165
|
-
//# sourceMappingURL=check-
|
|
165
|
+
//# sourceMappingURL=check-4HX4SNVV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/check.ts"],"sourcesContent":["/**\n * Check command - Verify project health and configuration\n *\n * Uses reconcile() with dryRun to detect missing files and configuration issues.\n */\n\nimport nodePath from 'node:path';\n\nimport { reconcile } from '../reconcile.js';\nimport { SAFEWORD_SCHEMA } from '../schema.js';\nimport { createProjectContext } from '../utils/context.js';\nimport { exists, readFileSafe } from '../utils/fs.js';\nimport { header, info, keyValue, success, warn } from '../utils/output.js';\nimport { isNewerVersion } from '../utils/version.js';\nimport { VERSION } from '../version.js';\n\nexport interface CheckOptions {\n offline?: boolean;\n}\n\n/**\n * Check for missing files from write actions\n * @param cwd\n * @param actions\n */\nfunction findMissingFiles(cwd: string, actions: { type: string; path: string }[]): string[] {\n const issues: string[] = [];\n for (const action of actions) {\n if (action.type === 'write' && !exists(nodePath.join(cwd, action.path))) {\n issues.push(`Missing: ${action.path}`);\n }\n }\n return issues;\n}\n\n/**\n * Check for missing text patch markers\n * @param cwd\n * @param actions\n */\nfunction findMissingPatches(\n cwd: string,\n actions: { type: string; path: string; definition?: { marker: string } }[],\n): string[] {\n const issues: string[] = [];\n for (const action of actions) {\n if (action.type !== 'text-patch') continue;\n\n const fullPath = nodePath.join(cwd, action.path);\n if (exists(fullPath)) {\n const content = readFileSafe(fullPath) ?? '';\n if (action.definition && !content.includes(action.definition.marker)) {\n issues.push(`${action.path} missing safeword link`);\n }\n } else {\n issues.push(`${action.path} file missing`);\n }\n }\n return issues;\n}\n\ninterface HealthStatus {\n configured: boolean;\n projectVersion: string | undefined;\n cliVersion: string;\n updateAvailable: boolean;\n latestVersion: string | undefined;\n issues: string[];\n missingPackages: string[];\n}\n\n/**\n * Check for latest version from npm (with timeout)\n * @param timeout\n */\nasync function checkLatestVersion(timeout = 3000): Promise<string | undefined> {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => {\n controller.abort();\n }, timeout);\n\n const response = await fetch('https://registry.npmjs.org/safeword/latest', {\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) return undefined;\n\n const data = (await response.json()) as { version?: string };\n return data.version ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Check project configuration health using reconcile dryRun\n * @param cwd\n */\nasync function checkHealth(cwd: string): Promise<HealthStatus> {\n const safewordDirectory = nodePath.join(cwd, '.safeword');\n\n // Check if configured\n if (!exists(safewordDirectory)) {\n return {\n configured: false,\n projectVersion: undefined,\n cliVersion: VERSION,\n updateAvailable: false,\n latestVersion: undefined,\n issues: [],\n missingPackages: [],\n };\n }\n\n // Read project version\n const versionPath = nodePath.join(safewordDirectory, 'version');\n const projectVersion = readFileSafe(versionPath)?.trim() ?? undefined;\n\n // Use reconcile with dryRun to detect issues\n const ctx = createProjectContext(cwd);\n const result = await reconcile(SAFEWORD_SCHEMA, 'upgrade', ctx, { dryRun: true });\n\n // Collect issues from write actions and text patches\n const issues: string[] = [\n ...findMissingFiles(cwd, result.actions),\n ...findMissingPatches(cwd, result.actions),\n ];\n\n // Check for missing .claude/settings.json\n if (!exists(nodePath.join(cwd, '.claude', 'settings.json'))) {\n issues.push('Missing: .claude/settings.json');\n }\n\n return {\n configured: true,\n projectVersion,\n cliVersion: VERSION,\n updateAvailable: false,\n latestVersion: undefined,\n issues,\n missingPackages: result.packagesToInstall,\n };\n}\n\n/**\n * Check for CLI updates and report status\n * @param health\n */\nasync function reportUpdateStatus(health: HealthStatus): Promise<void> {\n info('\\nChecking for updates...');\n const latestVersion = await checkLatestVersion();\n\n if (!latestVersion) {\n warn(\"Couldn't check for updates (offline?)\");\n return;\n }\n\n health.latestVersion = latestVersion;\n health.updateAvailable = isNewerVersion(health.cliVersion, latestVersion);\n\n if (health.updateAvailable) {\n warn(`Update available: v${latestVersion}`);\n info('Run `npm install -g safeword` to upgrade');\n } else {\n success('CLI is up to date');\n }\n}\n\n/**\n * Compare project version vs CLI version and report\n * @param health\n */\nfunction reportVersionMismatch(health: HealthStatus): void {\n if (!health.projectVersion) return;\n\n if (isNewerVersion(health.cliVersion, health.projectVersion)) {\n warn(`Project config (v${health.projectVersion}) is newer than CLI (v${health.cliVersion})`);\n info('Consider upgrading the CLI');\n } else if (isNewerVersion(health.projectVersion, health.cliVersion)) {\n info(`\\nUpgrade available for project config`);\n info(\n `Run \\`safeword upgrade\\` to update from v${health.projectVersion} to v${health.cliVersion}`,\n );\n }\n}\n\n/**\n * Report issues or success\n * @param health\n */\nfunction reportHealthSummary(health: HealthStatus): void {\n if (health.issues.length > 0) {\n header('Issues Found');\n for (const issue of health.issues) {\n warn(issue);\n }\n info('\\nRun `safeword upgrade` to repair configuration');\n return;\n }\n\n if (health.missingPackages.length > 0) {\n header('Missing Packages');\n info(`${health.missingPackages.length} linting packages not installed`);\n info('Run `safeword upgrade` to install missing packages');\n return;\n }\n\n success('\\nConfiguration is healthy');\n}\n\n/**\n *\n * @param options\n */\nexport async function check(options: CheckOptions): Promise<void> {\n const cwd = process.cwd();\n\n header('Safeword Health Check');\n\n const health = await checkHealth(cwd);\n\n // Not configured\n if (!health.configured) {\n info('Not configured. Run `safeword setup` to initialize.');\n return;\n }\n\n // Show versions\n keyValue('Safeword CLI', `v${health.cliVersion}`);\n keyValue('Project config', health.projectVersion ? `v${health.projectVersion}` : 'unknown');\n\n // Check for updates (unless offline)\n if (options.offline) {\n info('\\nSkipped update check (offline mode)');\n } else {\n await reportUpdateStatus(health);\n }\n\n reportVersionMismatch(health);\n reportHealthSummary(health);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,10 +3,10 @@ function compareVersions(a, b) {
|
|
|
3
3
|
const aParts = a.split(".").map(Number);
|
|
4
4
|
const bParts = b.split(".").map(Number);
|
|
5
5
|
for (let i = 0; i < 3; i++) {
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
if (
|
|
9
|
-
if (
|
|
6
|
+
const aValue = aParts[i] ?? 0;
|
|
7
|
+
const bValue = bParts[i] ?? 0;
|
|
8
|
+
if (aValue < bValue) return -1;
|
|
9
|
+
if (aValue > bValue) return 1;
|
|
10
10
|
}
|
|
11
11
|
return 0;
|
|
12
12
|
}
|
|
@@ -18,4 +18,4 @@ export {
|
|
|
18
18
|
compareVersions,
|
|
19
19
|
isNewerVersion
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
21
|
+
//# sourceMappingURL=chunk-FJYRWU2V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/version.ts"],"sourcesContent":["/**\n * Version comparison utilities\n */\n\n/**\n * Compare two semver versions\n * @param a\n * @param b\n * @returns -1 if a < b, 0 if a == b, 1 if a > b\n */\nexport function compareVersions(a: string, b: string): -1 | 0 | 1 {\n const aParts = a.split('.').map(Number);\n const bParts = b.split('.').map(Number);\n\n for (let i = 0; i < 3; i++) {\n const aValue = aParts[i] ?? 0;\n const bValue = bParts[i] ?? 0;\n if (aValue < bValue) return -1;\n if (aValue > bValue) return 1;\n }\n\n return 0;\n}\n\n/**\n * Check if latest version is newer than current\n * @param current\n * @param latest\n */\nexport function isNewerVersion(current: string, latest: string): boolean {\n return compareVersions(current, latest) === -1;\n}\n"],"mappings":";AAUO,SAAS,gBAAgB,GAAW,GAAuB;AAChE,QAAM,SAAS,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AACtC,QAAM,SAAS,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AAEtC,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAM,SAAS,OAAO,CAAC,KAAK;AAC5B,UAAM,SAAS,OAAO,CAAC,KAAK;AAC5B,QAAI,SAAS,OAAQ,QAAO;AAC5B,QAAI,SAAS,OAAQ,QAAO;AAAA,EAC9B;AAEA,SAAO;AACT;AAOO,SAAS,eAAe,SAAiB,QAAyB;AACvE,SAAO,gBAAgB,SAAS,MAAM,MAAM;AAC9C;","names":[]}
|