cortex-tms 4.0.0 → 4.0.1
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 +21 -11
- 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 +5 -4
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"}
|