cortex-tms 4.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -12
- package/dist/cli.js +45 -37
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive.d.ts +1 -1
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +36 -34
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/auto-tier.d.ts +1 -1
- package/dist/commands/auto-tier.d.ts.map +1 -1
- package/dist/commands/auto-tier.js +77 -76
- package/dist/commands/auto-tier.js.map +1 -1
- package/dist/commands/dashboard.d.ts +1 -1
- package/dist/commands/dashboard.js +8 -8
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +73 -73
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +2 -2
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +147 -136
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/prompt.d.ts +1 -1
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +32 -31
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/review.d.ts +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +60 -60
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +51 -45
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tutorial.d.ts +1 -1
- package/dist/commands/tutorial.js +168 -168
- package/dist/commands/tutorial.js.map +1 -1
- package/dist/commands/validate.d.ts +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +60 -60
- package/dist/commands/validate.js.map +1 -1
- package/dist/types/cli.d.ts +15 -15
- package/dist/types/guardian.d.ts +2 -2
- package/dist/ui/components/Dashboard.d.ts +2 -2
- package/dist/ui/components/Dashboard.d.ts.map +1 -1
- package/dist/ui/components/Dashboard.js +24 -23
- package/dist/ui/components/Dashboard.js.map +1 -1
- package/dist/ui/components/dashboard/ContextReductionCard.d.ts +1 -1
- package/dist/ui/components/dashboard/ContextReductionCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/ContextReductionCard.js +5 -5
- package/dist/ui/components/dashboard/ContextReductionCard.js.map +1 -1
- package/dist/ui/components/dashboard/CostSavingsCard.d.ts +1 -1
- package/dist/ui/components/dashboard/CostSavingsCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/CostSavingsCard.js +7 -7
- package/dist/ui/components/dashboard/CostSavingsCard.js.map +1 -1
- package/dist/ui/components/dashboard/FileDistributionCard.d.ts +1 -1
- package/dist/ui/components/dashboard/FileDistributionCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/FileDistributionCard.js +10 -10
- package/dist/ui/components/dashboard/FileDistributionCard.js.map +1 -1
- package/dist/ui/components/dashboard/FileSizeHealthCard.d.ts +2 -2
- package/dist/ui/components/dashboard/FileSizeHealthCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/FileSizeHealthCard.js +12 -12
- package/dist/ui/components/dashboard/FileSizeHealthCard.js.map +1 -1
- package/dist/ui/components/dashboard/Footer.d.ts +1 -1
- package/dist/ui/components/dashboard/Footer.d.ts.map +1 -1
- package/dist/ui/components/dashboard/Footer.js +2 -2
- package/dist/ui/components/dashboard/Footer.js.map +1 -1
- package/dist/ui/components/dashboard/GovernanceHealthCard.d.ts +3 -3
- package/dist/ui/components/dashboard/GovernanceHealthCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/GovernanceHealthCard.js +17 -14
- package/dist/ui/components/dashboard/GovernanceHealthCard.js.map +1 -1
- package/dist/ui/components/dashboard/GuardianStatusCard.d.ts +2 -2
- package/dist/ui/components/dashboard/GuardianStatusCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/GuardianStatusCard.js +29 -16
- package/dist/ui/components/dashboard/GuardianStatusCard.js.map +1 -1
- package/dist/ui/components/dashboard/Header.d.ts +1 -1
- package/dist/ui/components/dashboard/Header.js +2 -2
- package/dist/ui/components/dashboard/HotFilesCard.d.ts +1 -1
- package/dist/ui/components/dashboard/HotFilesCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/HotFilesCard.js +6 -6
- package/dist/ui/components/dashboard/HotFilesCard.js.map +1 -1
- package/dist/ui/components/dashboard/NotConfiguredCard.d.ts +2 -2
- package/dist/ui/components/dashboard/NotConfiguredCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/NotConfiguredCard.js +3 -3
- package/dist/ui/components/dashboard/NotConfiguredCard.js.map +1 -1
- package/dist/ui/components/dashboard/SprintProgressCard.d.ts +1 -1
- package/dist/ui/components/dashboard/SprintProgressCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/SprintProgressCard.js +4 -4
- package/dist/ui/components/dashboard/SprintProgressCard.js.map +1 -1
- package/dist/ui/components/dashboard/StalenessCard.d.ts +1 -1
- package/dist/ui/components/dashboard/StalenessCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/StalenessCard.js +9 -9
- package/dist/ui/components/dashboard/StalenessCard.js.map +1 -1
- package/dist/ui/components/dashboard/TabBar.d.ts +2 -2
- package/dist/ui/components/dashboard/TabBar.js +7 -7
- package/dist/ui/components/dashboard/TabBar.js.map +1 -1
- package/dist/ui/components/dashboard/ValidationCard.d.ts +2 -2
- package/dist/ui/components/dashboard/ValidationCard.d.ts.map +1 -1
- package/dist/ui/components/dashboard/ValidationCard.js +22 -22
- package/dist/ui/components/dashboard/ValidationCard.js.map +1 -1
- package/dist/ui/components/dashboard/ViewContainer.d.ts +3 -3
- package/dist/ui/components/dashboard/ViewContainer.d.ts.map +1 -1
- package/dist/ui/components/dashboard/ViewContainer.js +20 -20
- package/dist/ui/components/dashboard/ViewContainer.js.map +1 -1
- package/dist/ui/components/dashboard/index.d.ts +13 -13
- package/dist/ui/components/dashboard/index.js +13 -13
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +10 -10
- package/dist/ui/index.js.map +1 -1
- package/dist/utils/backup.d.ts.map +1 -1
- package/dist/utils/backup.js +20 -20
- package/dist/utils/backup.js.map +1 -1
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.js +68 -68
- package/dist/utils/detection.d.ts +1 -1
- package/dist/utils/detection.js +25 -25
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +4 -4
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/git-history.d.ts.map +1 -1
- package/dist/utils/git-history.js +9 -5
- package/dist/utils/git-history.js.map +1 -1
- package/dist/utils/git-staleness.d.ts.map +1 -1
- package/dist/utils/git-staleness.js +21 -21
- package/dist/utils/git-staleness.js.map +1 -1
- package/dist/utils/guardian-prompt.d.ts.map +1 -1
- package/dist/utils/guardian-prompt.js +1 -1
- package/dist/utils/guardian-prompt.js.map +1 -1
- package/dist/utils/llm-client.d.ts +5 -5
- package/dist/utils/llm-client.d.ts.map +1 -1
- package/dist/utils/llm-client.js +56 -53
- package/dist/utils/llm-client.js.map +1 -1
- package/dist/utils/prompt-parser.d.ts.map +1 -1
- package/dist/utils/prompt-parser.js +13 -17
- package/dist/utils/prompt-parser.js.map +1 -1
- package/dist/utils/prompts.d.ts +1 -1
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +74 -49
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/sanitize.js +6 -6
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/utils/stats-collector.d.ts +3 -9
- package/dist/utils/stats-collector.d.ts.map +1 -1
- package/dist/utils/stats-collector.js +74 -83
- package/dist/utils/stats-collector.js.map +1 -1
- package/dist/utils/status.d.ts +1 -1
- package/dist/utils/status.d.ts.map +1 -1
- package/dist/utils/status.js +16 -16
- package/dist/utils/status.js.map +1 -1
- package/dist/utils/templates.d.ts +3 -3
- package/dist/utils/templates.d.ts.map +1 -1
- package/dist/utils/templates.js +59 -54
- package/dist/utils/templates.js.map +1 -1
- package/dist/utils/tier-tags.d.ts +1 -1
- package/dist/utils/tier-tags.js +2 -2
- package/dist/utils/token-counter.d.ts +1 -43
- package/dist/utils/token-counter.d.ts.map +1 -1
- package/dist/utils/token-counter.js +32 -80
- package/dist/utils/token-counter.js.map +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +25 -24
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/validator.d.ts +1 -1
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +97 -90
- package/dist/utils/validator.js.map +1 -1
- package/package.json +7 -5
- package/templates/CLAUDE.md +1 -1
- package/templates/FUTURE-ENHANCEMENTS.md +1 -1
- package/templates/NEXT-TASKS.md +1 -1
- package/templates/PROMPTS.md +1 -1
- package/templates/README.md +1 -1
- package/templates/docs/archive/v1.0-CHANGELOG.md +1 -1
- package/templates/docs/core/ARCHITECTURE.md +1 -1
- package/templates/docs/core/DECISIONS.md +1 -1
- package/templates/docs/core/DOMAIN-LOGIC.md +1 -1
- package/templates/docs/core/GLOSSARY.md +1 -1
- package/templates/docs/core/PATTERNS.md +1 -1
- package/templates/docs/core/SCHEMA.md +1 -1
- package/templates/docs/core/TROUBLESHOOTING.md +1 -1
package/dist/utils/config.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { readFile, writeFile } from
|
|
2
|
-
import { existsSync } from
|
|
3
|
-
import { join } from
|
|
4
|
-
export const CONFIG_VERSION =
|
|
1
|
+
import { readFile, writeFile } from "fs/promises";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
export const CONFIG_VERSION = "1.0.0";
|
|
5
5
|
const DEFAULT_LINE_LIMITS = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
"NEXT-TASKS.md": 200,
|
|
7
|
+
"FUTURE-ENHANCEMENTS.md": 500,
|
|
8
|
+
"ARCHITECTURE.md": 500,
|
|
9
|
+
"PATTERNS.md": 650,
|
|
10
|
+
"DOMAIN-LOGIC.md": 400,
|
|
11
|
+
"DECISIONS.md": 400,
|
|
12
|
+
"GLOSSARY.md": 200,
|
|
13
|
+
"SCHEMA.md": 600,
|
|
14
|
+
"TROUBLESHOOTING.md": 400,
|
|
15
15
|
};
|
|
16
16
|
export const DEFAULT_CONFIG = {
|
|
17
17
|
version: CONFIG_VERSION,
|
|
18
|
-
scope:
|
|
18
|
+
scope: "standard",
|
|
19
19
|
paths: {
|
|
20
|
-
docs:
|
|
21
|
-
tasks:
|
|
22
|
-
archive:
|
|
20
|
+
docs: "docs/core",
|
|
21
|
+
tasks: "NEXT-TASKS.md",
|
|
22
|
+
archive: "docs/archive",
|
|
23
23
|
},
|
|
24
24
|
limits: {},
|
|
25
25
|
validation: {
|
|
@@ -29,78 +29,78 @@ export const DEFAULT_CONFIG = {
|
|
|
29
29
|
};
|
|
30
30
|
export const SCOPE_PRESETS = [
|
|
31
31
|
{
|
|
32
|
-
name:
|
|
33
|
-
displayName:
|
|
34
|
-
description:
|
|
35
|
-
mandatoryFiles: [
|
|
32
|
+
name: "nano",
|
|
33
|
+
displayName: "Nano",
|
|
34
|
+
description: "Minimal setup for scripts and small tools",
|
|
35
|
+
mandatoryFiles: ["NEXT-TASKS.md", "CLAUDE.md"],
|
|
36
36
|
optionalFiles: [],
|
|
37
37
|
lineLimits: {
|
|
38
|
-
|
|
38
|
+
"NEXT-TASKS.md": 100,
|
|
39
39
|
},
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
|
-
name:
|
|
43
|
-
displayName:
|
|
44
|
-
description:
|
|
42
|
+
name: "standard",
|
|
43
|
+
displayName: "Standard",
|
|
44
|
+
description: "Complete setup for most products (recommended)",
|
|
45
45
|
mandatoryFiles: [
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
"NEXT-TASKS.md",
|
|
47
|
+
"CLAUDE.md",
|
|
48
|
+
".github/copilot-instructions.md",
|
|
49
49
|
],
|
|
50
50
|
optionalFiles: [
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
"PROMPTS.md",
|
|
52
|
+
"FUTURE-ENHANCEMENTS.md",
|
|
53
|
+
"docs/core/ARCHITECTURE.md",
|
|
54
|
+
"docs/core/PATTERNS.md",
|
|
55
|
+
"docs/core/DOMAIN-LOGIC.md",
|
|
56
|
+
"docs/core/DECISIONS.md",
|
|
57
|
+
"docs/core/TROUBLESHOOTING.md",
|
|
58
58
|
],
|
|
59
59
|
lineLimits: DEFAULT_LINE_LIMITS,
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
|
-
name:
|
|
63
|
-
displayName:
|
|
64
|
-
description:
|
|
62
|
+
name: "enterprise",
|
|
63
|
+
displayName: "Enterprise",
|
|
64
|
+
description: "Full suite for large, complex repositories",
|
|
65
65
|
mandatoryFiles: [
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
"NEXT-TASKS.md",
|
|
67
|
+
"CLAUDE.md",
|
|
68
|
+
".github/copilot-instructions.md",
|
|
69
69
|
],
|
|
70
70
|
optionalFiles: [
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
71
|
+
"PROMPTS.md",
|
|
72
|
+
"FUTURE-ENHANCEMENTS.md",
|
|
73
|
+
"docs/core/ARCHITECTURE.md",
|
|
74
|
+
"docs/core/PATTERNS.md",
|
|
75
|
+
"docs/core/DOMAIN-LOGIC.md",
|
|
76
|
+
"docs/core/DECISIONS.md",
|
|
77
|
+
"docs/core/TROUBLESHOOTING.md",
|
|
78
|
+
"docs/core/GLOSSARY.md",
|
|
79
|
+
"docs/core/SCHEMA.md",
|
|
80
80
|
],
|
|
81
81
|
lineLimits: {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
82
|
+
"NEXT-TASKS.md": 300,
|
|
83
|
+
"FUTURE-ENHANCEMENTS.md": 800,
|
|
84
|
+
"ARCHITECTURE.md": 800,
|
|
85
|
+
"PATTERNS.md": 800,
|
|
86
|
+
"DOMAIN-LOGIC.md": 500,
|
|
87
|
+
"DECISIONS.md": 600,
|
|
88
|
+
"GLOSSARY.md": 400,
|
|
89
|
+
"SCHEMA.md": 1000,
|
|
90
|
+
"TROUBLESHOOTING.md": 600,
|
|
91
91
|
},
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
|
-
name:
|
|
95
|
-
displayName:
|
|
96
|
-
description:
|
|
94
|
+
name: "custom",
|
|
95
|
+
displayName: "Custom",
|
|
96
|
+
description: "Choose specific files to include (advanced)",
|
|
97
97
|
mandatoryFiles: [],
|
|
98
98
|
optionalFiles: [],
|
|
99
99
|
lineLimits: DEFAULT_LINE_LIMITS,
|
|
100
100
|
},
|
|
101
101
|
];
|
|
102
102
|
export function getConfigPath(cwd) {
|
|
103
|
-
return join(cwd,
|
|
103
|
+
return join(cwd, ".cortexrc");
|
|
104
104
|
}
|
|
105
105
|
export function hasConfig(cwd) {
|
|
106
106
|
return existsSync(getConfigPath(cwd));
|
|
@@ -111,7 +111,7 @@ export async function loadConfig(cwd) {
|
|
|
111
111
|
return null;
|
|
112
112
|
}
|
|
113
113
|
try {
|
|
114
|
-
const content = await readFile(configPath,
|
|
114
|
+
const content = await readFile(configPath, "utf-8");
|
|
115
115
|
const config = JSON.parse(content);
|
|
116
116
|
if (config.version !== CONFIG_VERSION) {
|
|
117
117
|
console.warn(`⚠️ Config version mismatch: expected ${CONFIG_VERSION}, got ${config.version}`);
|
|
@@ -119,7 +119,7 @@ export async function loadConfig(cwd) {
|
|
|
119
119
|
return config;
|
|
120
120
|
}
|
|
121
121
|
catch (error) {
|
|
122
|
-
throw new Error(`Failed to parse .cortexrc: ${error instanceof Error ? error.message :
|
|
122
|
+
throw new Error(`Failed to parse .cortexrc: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
export function mergeConfig(userConfig) {
|
|
@@ -154,10 +154,10 @@ export async function saveConfig(cwd, config) {
|
|
|
154
154
|
const configPath = getConfigPath(cwd);
|
|
155
155
|
try {
|
|
156
156
|
const content = JSON.stringify(config, null, 2);
|
|
157
|
-
await writeFile(configPath, content,
|
|
157
|
+
await writeFile(configPath, content, "utf-8");
|
|
158
158
|
}
|
|
159
159
|
catch (error) {
|
|
160
|
-
throw new Error(`Failed to write .cortexrc: ${error instanceof Error ? error.message :
|
|
160
|
+
throw new Error(`Failed to write .cortexrc: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
export function createConfigFromScope(scope, projectName, customFiles) {
|
|
@@ -176,7 +176,7 @@ export function createConfigFromScope(scope, projectName, customFiles) {
|
|
|
176
176
|
config.metadata = {
|
|
177
177
|
created: new Date().toISOString(),
|
|
178
178
|
projectName,
|
|
179
|
-
...(scope ===
|
|
179
|
+
...(scope === "custom" && customFiles && { customFiles }),
|
|
180
180
|
};
|
|
181
181
|
}
|
|
182
182
|
return config;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ProjectContext } from
|
|
1
|
+
import type { ProjectContext } from "../types/cli.js";
|
|
2
2
|
export declare function detectContext(cwd: string): ProjectContext;
|
|
3
3
|
export declare function getDefaultProjectName(cwd: string): string;
|
|
4
4
|
export declare function isSafeToInitialize(context: ProjectContext): boolean;
|
package/dist/utils/detection.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { existsSync } from
|
|
2
|
-
import { join, basename } from
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { join, basename } from "path";
|
|
3
3
|
export function detectContext(cwd) {
|
|
4
|
-
const isGitRepo = existsSync(join(cwd,
|
|
5
|
-
const hasPackageJson = existsSync(join(cwd,
|
|
6
|
-
let packageManager =
|
|
7
|
-
if (existsSync(join(cwd,
|
|
8
|
-
packageManager =
|
|
4
|
+
const isGitRepo = existsSync(join(cwd, ".git"));
|
|
5
|
+
const hasPackageJson = existsSync(join(cwd, "package.json"));
|
|
6
|
+
let packageManager = "unknown";
|
|
7
|
+
if (existsSync(join(cwd, "pnpm-lock.yaml"))) {
|
|
8
|
+
packageManager = "pnpm";
|
|
9
9
|
}
|
|
10
|
-
else if (existsSync(join(cwd,
|
|
11
|
-
packageManager =
|
|
10
|
+
else if (existsSync(join(cwd, "yarn.lock"))) {
|
|
11
|
+
packageManager = "yarn";
|
|
12
12
|
}
|
|
13
|
-
else if (existsSync(join(cwd,
|
|
14
|
-
packageManager =
|
|
13
|
+
else if (existsSync(join(cwd, "package-lock.json"))) {
|
|
14
|
+
packageManager = "npm";
|
|
15
15
|
}
|
|
16
|
-
else if (existsSync(join(cwd,
|
|
17
|
-
packageManager =
|
|
16
|
+
else if (existsSync(join(cwd, "bun.lockb"))) {
|
|
17
|
+
packageManager = "bun";
|
|
18
18
|
}
|
|
19
19
|
const existingFiles = [];
|
|
20
20
|
const tmsFiles = [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
"NEXT-TASKS.md",
|
|
22
|
+
"FUTURE-ENHANCEMENTS.md",
|
|
23
|
+
"CLAUDE.md",
|
|
24
|
+
"README.md",
|
|
25
|
+
".github/copilot-instructions.md",
|
|
26
|
+
"docs/core/ARCHITECTURE.md",
|
|
27
|
+
"docs/core/PATTERNS.md",
|
|
28
|
+
"docs/core/DOMAIN-LOGIC.md",
|
|
29
29
|
];
|
|
30
30
|
for (const file of tmsFiles) {
|
|
31
31
|
if (existsSync(join(cwd, file))) {
|
|
@@ -43,16 +43,16 @@ export function getDefaultProjectName(cwd) {
|
|
|
43
43
|
const dirName = basename(cwd);
|
|
44
44
|
return dirName
|
|
45
45
|
.toLowerCase()
|
|
46
|
-
.replace(/[^a-z0-9-]/g,
|
|
47
|
-
.replace(/-+/g,
|
|
48
|
-
.replace(/^-|-$/g,
|
|
46
|
+
.replace(/[^a-z0-9-]/g, "-")
|
|
47
|
+
.replace(/-+/g, "-")
|
|
48
|
+
.replace(/^-|-$/g, "");
|
|
49
49
|
}
|
|
50
50
|
export function isSafeToInitialize(context) {
|
|
51
51
|
if (context.existingFiles.length === 0) {
|
|
52
52
|
return true;
|
|
53
53
|
}
|
|
54
54
|
if (context.existingFiles.length === 1 &&
|
|
55
|
-
context.existingFiles[0] ===
|
|
55
|
+
context.existingFiles[0] === "README.md") {
|
|
56
56
|
return true;
|
|
57
57
|
}
|
|
58
58
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAMnD,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,YAAY;CAW1E;AAMD,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAKD,qBAAa,QAAS,SAAQ,QAAQ;gBACxB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAKD,qBAAa,WAAY,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAKD,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAQD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAMnD,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,YAAY;CAW1E;AAMD,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAKD,qBAAa,QAAS,SAAQ,QAAQ;gBACxB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAKD,qBAAa,WAAY,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAKD,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAQD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CA4BhD"}
|
package/dist/utils/errors.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sanitizeApiKey, sanitizeObject } from
|
|
1
|
+
import { sanitizeApiKey, sanitizeObject } from "./sanitize.js";
|
|
2
2
|
export class CLIError extends Error {
|
|
3
3
|
exitCode;
|
|
4
4
|
context;
|
|
@@ -39,13 +39,13 @@ export function formatError(error) {
|
|
|
39
39
|
const sanitizedContext = sanitizeObject(error.context);
|
|
40
40
|
const contextLines = Object.entries(sanitizedContext)
|
|
41
41
|
.map(([key, value]) => {
|
|
42
|
-
const formattedValue = typeof value ===
|
|
42
|
+
const formattedValue = typeof value === "object" && value !== null
|
|
43
43
|
? JSON.stringify(value)
|
|
44
44
|
: String(value);
|
|
45
45
|
return ` ${key}=${formattedValue}`;
|
|
46
46
|
})
|
|
47
|
-
.join(
|
|
48
|
-
message +=
|
|
47
|
+
.join("\n");
|
|
48
|
+
message += "\n" + contextLines;
|
|
49
49
|
}
|
|
50
50
|
return message;
|
|
51
51
|
}
|
package/dist/utils/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAY/D,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,QAAQ,CAAS;IACjB,OAAO,CAA2B;IAElD,YAAY,OAAe,EAAE,WAAmB,CAAC,EAAE,OAAsB;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAGvB,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF;AAMD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAKD,MAAM,OAAO,QAAS,SAAQ,QAAQ;IACpC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAKD,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAKD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAQD,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAE9B,IAAI,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAG5C,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAE3D,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;iBAClD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAEpB,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAY/D,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,QAAQ,CAAS;IACjB,OAAO,CAA2B;IAElD,YAAY,OAAe,EAAE,WAAmB,CAAC,EAAE,OAAsB;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAGvB,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF;AAMD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAKD,MAAM,OAAO,QAAS,SAAQ,QAAQ;IACpC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAKD,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAKD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAQD,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAE9B,IAAI,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAG5C,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAE3D,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;iBAClD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAEpB,MAAM,cAAc,GAClB,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;oBACzC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBACvB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACvC,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,IAAI,IAAI,GAAG,YAAY,CAAC;QACjC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-history.d.ts","sourceRoot":"","sources":["../../src/utils/git-history.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"git-history.d.ts","sourceRoot":"","sources":["../../src/utils/git-history.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAW9C;AAMD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAWf;AAKD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,GACd,WAAW,EAAE,CAoBf"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { execSync } from
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
2
|
export function isGitRepo(cwd) {
|
|
3
3
|
try {
|
|
4
|
-
const result = execSync(
|
|
5
|
-
|
|
4
|
+
const result = execSync("git rev-parse --is-inside-work-tree", {
|
|
5
|
+
cwd,
|
|
6
|
+
encoding: "utf-8",
|
|
7
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
8
|
+
}).trim();
|
|
9
|
+
return result === "true";
|
|
6
10
|
}
|
|
7
11
|
catch {
|
|
8
12
|
return false;
|
|
@@ -10,7 +14,7 @@ export function isGitRepo(cwd) {
|
|
|
10
14
|
}
|
|
11
15
|
export function getFileLastCommit(cwd, filePath) {
|
|
12
16
|
try {
|
|
13
|
-
const result = execSync(`git log -1 --format=%ct --follow -- "${filePath}"`, { cwd, encoding:
|
|
17
|
+
const result = execSync(`git log -1 --format=%ct --follow -- "${filePath}"`, { cwd, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
14
18
|
return result ? parseInt(result, 10) : null;
|
|
15
19
|
}
|
|
16
20
|
catch {
|
|
@@ -19,7 +23,7 @@ export function getFileLastCommit(cwd, filePath) {
|
|
|
19
23
|
}
|
|
20
24
|
export function analyzeFileHistory(cwd, files) {
|
|
21
25
|
const now = Math.floor(Date.now() / 1000);
|
|
22
|
-
return files.map(path => {
|
|
26
|
+
return files.map((path) => {
|
|
23
27
|
const lastCommitTimestamp = getFileLastCommit(cwd, path);
|
|
24
28
|
const isTracked = lastCommitTimestamp !== null;
|
|
25
29
|
const daysSinceChange = isTracked
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-history.js","sourceRoot":"","sources":["../../src/utils/git-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAczC,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"git-history.js","sourceRoot":"","sources":["../../src/utils/git-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAczC,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,qCAAqC,EAAE;YAC7D,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,KAAK,MAAM,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAMD,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CACrB,wCAAwC,QAAQ,GAAG,EACnD,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAC5D,CAAC,IAAI,EAAE,CAAC;QAET,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,KAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAE1C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,mBAAmB,KAAK,IAAI,CAAC;QAG/C,MAAM,eAAe,GAAG,SAAS;YAC/B,CAAC,CAAC,CAAC,GAAG,GAAG,mBAAoB,CAAC,GAAG,KAAK;YACtC,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO;YACL,IAAI;YACJ,mBAAmB;YACnB,eAAe;YACf,SAAS;YACT,SAAS,EAAE,CAAC,SAAS;SACtB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-staleness.d.ts","sourceRoot":"","sources":["../../src/utils/git-staleness.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"git-staleness.d.ts","sourceRoot":"","sources":["../../src/utils/git-staleness.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAiBf;AAMD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,MAAM,CAsDR;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAKD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAAE,EACpB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,eAAe,CAoFjB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { execSync } from
|
|
2
|
-
import { existsSync } from
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
3
|
export function getLastGitCommitEpochSeconds(pathSpec, cwd) {
|
|
4
4
|
try {
|
|
5
5
|
const result = execSync(`git log -1 --format=%ct -- "${pathSpec}"`, {
|
|
6
6
|
cwd,
|
|
7
|
-
encoding:
|
|
8
|
-
stdio: [
|
|
7
|
+
encoding: "utf-8",
|
|
8
|
+
stdio: ["pipe", "pipe", "ignore"],
|
|
9
9
|
}).trim();
|
|
10
10
|
if (!result) {
|
|
11
11
|
return null;
|
|
@@ -21,30 +21,30 @@ export function countMeaningfulCommits(pathSpec, sinceEpoch, cwd) {
|
|
|
21
21
|
try {
|
|
22
22
|
const result = execSync(`git log --no-merges --format=%H --since="${sinceEpoch}" -- "${pathSpec}"`, {
|
|
23
23
|
cwd,
|
|
24
|
-
encoding:
|
|
25
|
-
stdio: [
|
|
24
|
+
encoding: "utf-8",
|
|
25
|
+
stdio: ["pipe", "pipe", "ignore"],
|
|
26
26
|
}).trim();
|
|
27
27
|
if (!result) {
|
|
28
28
|
return 0;
|
|
29
29
|
}
|
|
30
|
-
const commits = result.split(
|
|
30
|
+
const commits = result.split("\n").filter(Boolean);
|
|
31
31
|
let meaningfulCount = 0;
|
|
32
32
|
for (const commitHash of commits) {
|
|
33
33
|
const files = execSync(`git diff-tree --no-commit-id --name-only -r ${commitHash}`, {
|
|
34
34
|
cwd,
|
|
35
|
-
encoding:
|
|
36
|
-
stdio: [
|
|
35
|
+
encoding: "utf-8",
|
|
36
|
+
stdio: ["pipe", "pipe", "ignore"],
|
|
37
37
|
})
|
|
38
38
|
.trim()
|
|
39
|
-
.split(
|
|
39
|
+
.split("\n")
|
|
40
40
|
.filter(Boolean);
|
|
41
|
-
const hasMeaningfulFile = files.some((file) => !file.includes(
|
|
42
|
-
!file.includes(
|
|
43
|
-
!file.includes(
|
|
44
|
-
!file.includes(
|
|
45
|
-
!file.includes(
|
|
46
|
-
!file.endsWith(
|
|
47
|
-
!file.endsWith(
|
|
41
|
+
const hasMeaningfulFile = files.some((file) => !file.includes("test") &&
|
|
42
|
+
!file.includes(".test.") &&
|
|
43
|
+
!file.includes("package-lock.json") &&
|
|
44
|
+
!file.includes("yarn.lock") &&
|
|
45
|
+
!file.includes("pnpm-lock.yaml") &&
|
|
46
|
+
!file.endsWith(".config.js") &&
|
|
47
|
+
!file.endsWith(".config.ts"));
|
|
48
48
|
if (hasMeaningfulFile) {
|
|
49
49
|
meaningfulCount++;
|
|
50
50
|
}
|
|
@@ -68,7 +68,7 @@ export function checkDocStaleness(docPath, watchPaths, thresholdDays, minCommits
|
|
|
68
68
|
codeLastModified: null,
|
|
69
69
|
daysSinceDocUpdate: null,
|
|
70
70
|
meaningfulCommits: 0,
|
|
71
|
-
reason:
|
|
71
|
+
reason: "Doc has no git history (may be new or untracked)",
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
let mostRecentCodeTimestamp = 0;
|
|
@@ -85,7 +85,7 @@ export function checkDocStaleness(docPath, watchPaths, thresholdDays, minCommits
|
|
|
85
85
|
codeLastModified: null,
|
|
86
86
|
daysSinceDocUpdate: null,
|
|
87
87
|
meaningfulCommits: 0,
|
|
88
|
-
reason:
|
|
88
|
+
reason: "No code changes found in watched paths",
|
|
89
89
|
};
|
|
90
90
|
}
|
|
91
91
|
const secondsSinceDocUpdate = mostRecentCodeTimestamp - docTimestamp;
|
|
@@ -97,7 +97,7 @@ export function checkDocStaleness(docPath, watchPaths, thresholdDays, minCommits
|
|
|
97
97
|
codeLastModified: mostRecentCodeTimestamp,
|
|
98
98
|
daysSinceDocUpdate: 0,
|
|
99
99
|
meaningfulCommits: 0,
|
|
100
|
-
reason:
|
|
100
|
+
reason: "Doc is up to date (modified after code)",
|
|
101
101
|
};
|
|
102
102
|
}
|
|
103
103
|
let totalMeaningfulCommits = 0;
|
|
@@ -107,7 +107,7 @@ export function checkDocStaleness(docPath, watchPaths, thresholdDays, minCommits
|
|
|
107
107
|
const exceedsTimeThreshold = daysSinceDocUpdate > thresholdDays;
|
|
108
108
|
const exceedsCommitThreshold = totalMeaningfulCommits >= minCommits;
|
|
109
109
|
const isStale = exceedsTimeThreshold && exceedsCommitThreshold;
|
|
110
|
-
let reason =
|
|
110
|
+
let reason = "";
|
|
111
111
|
if (isStale) {
|
|
112
112
|
reason = `Doc is ${Math.round(daysSinceDocUpdate)} days older than code with ${totalMeaningfulCommits} meaningful commits`;
|
|
113
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-staleness.js","sourceRoot":"","sources":["../../src/utils/git-staleness.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAehC,MAAM,UAAU,4BAA4B,
|
|
1
|
+
{"version":3,"file":"git-staleness.js","sourceRoot":"","sources":["../../src/utils/git-staleness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guardian-prompt.d.ts","sourceRoot":"","sources":["../../src/utils/guardian-prompt.ts"],"names":[],"mappings":"AAcA,wBAAgB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"guardian-prompt.d.ts","sourceRoot":"","sources":["../../src/utils/guardian-prompt.ts"],"names":[],"mappings":"AAcA,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,MAAM,CA4ER;AASD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,CASR"}
|
|
@@ -2,7 +2,7 @@ export function buildGuardianSystemPrompt(patterns, domainLogic) {
|
|
|
2
2
|
let prompt = `You are Guardian, a code review assistant that analyzes code against project-specific patterns and architectural rules.
|
|
3
3
|
|
|
4
4
|
# Your Task
|
|
5
|
-
Analyze the provided code file and identify violations of the patterns defined in PATTERNS.md${domainLogic ?
|
|
5
|
+
Analyze the provided code file and identify violations of the patterns defined in PATTERNS.md${domainLogic ? " and domain logic rules in DOMAIN-LOGIC.md" : ""}.
|
|
6
6
|
|
|
7
7
|
# PATTERNS.md
|
|
8
8
|
${patterns}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guardian-prompt.js","sourceRoot":"","sources":["../../src/utils/guardian-prompt.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,yBAAyB,
|
|
1
|
+
{"version":3,"file":"guardian-prompt.js","sourceRoot":"","sources":["../../src/utils/guardian-prompt.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,yBAAyB,CACvC,QAAgB,EAChB,WAA0B;IAE1B,IAAI,MAAM,GAAG;;;+FAGgF,WAAW,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE;;;EAG5J,QAAQ;CACT,CAAC;IAEA,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI;;EAEZ,WAAW;CACZ,CAAC;IACA,CAAC;IAED,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFAwDuE,CAAC;IAElF,OAAO,MAAM,CAAC;AAChB,CAAC;AASD,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,IAAY;IAEZ,OAAO;cACK,QAAQ;;;EAGpB,IAAI;;;mFAG6E,CAAC;AACpF,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { GuardianResult } from
|
|
1
|
+
import type { GuardianResult } from "../types/guardian.js";
|
|
2
2
|
export interface LLMConfig {
|
|
3
|
-
provider:
|
|
3
|
+
provider: "openai" | "anthropic";
|
|
4
4
|
apiKey: string;
|
|
5
5
|
model?: string;
|
|
6
6
|
timeoutMs?: number;
|
|
7
|
-
responseFormat?:
|
|
7
|
+
responseFormat?: "text" | "json";
|
|
8
8
|
retryConfig?: {
|
|
9
9
|
maxRetries?: number;
|
|
10
10
|
initialDelayMs?: number;
|
|
@@ -13,7 +13,7 @@ export interface LLMConfig {
|
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
15
|
export interface LLMMessage {
|
|
16
|
-
role:
|
|
16
|
+
role: "system" | "user" | "assistant";
|
|
17
17
|
content: string;
|
|
18
18
|
}
|
|
19
19
|
export interface LLMResponse {
|
|
@@ -26,5 +26,5 @@ export interface LLMResponse {
|
|
|
26
26
|
}
|
|
27
27
|
export declare function callLLM(config: LLMConfig, messages: LLMMessage[]): Promise<LLMResponse>;
|
|
28
28
|
export declare function parseGuardianJSON(content: string): GuardianResult | null;
|
|
29
|
-
export declare function getApiKey(provider:
|
|
29
|
+
export declare function getApiKey(provider: "openai" | "anthropic"): string | null;
|
|
30
30
|
//# sourceMappingURL=llm-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/utils/llm-client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAY3D,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE;QACZ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/utils/llm-client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAY3D,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE;QACZ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAmED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,UAAU,EAAE,GACrB,OAAO,CAAC,WAAW,CAAC,CA2CtB;AAkLD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA8DxE;AAKD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,IAAI,CAGzE"}
|