claudecode-linter 0.1.0 → 2.1.70
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 +37 -0
- package/dist/contracts.d.ts +13 -0
- package/dist/contracts.js +195 -0
- package/dist/contracts.js.map +1 -0
- package/dist/linters/agent-md.js +5 -6
- package/dist/linters/agent-md.js.map +1 -1
- package/dist/linters/command-md.js +2 -6
- package/dist/linters/command-md.js.map +1 -1
- package/dist/linters/hooks-json.js +3 -10
- package/dist/linters/hooks-json.js.map +1 -1
- package/dist/linters/mcp-json.js +2 -4
- package/dist/linters/mcp-json.js.map +1 -1
- package/dist/linters/plugin-json.js +3 -6
- package/dist/linters/plugin-json.js.map +1 -1
- package/dist/linters/settings-json.js +5 -21
- package/dist/linters/settings-json.js.map +1 -1
- package/dist/linters/skill-md.js +3 -6
- package/dist/linters/skill-md.js.map +1 -1
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -168,6 +168,15 @@ Formatting is powered by [prettier](https://prettier.io/) for consistent JSON an
|
|
|
168
168
|
| 1 | Lint errors found |
|
|
169
169
|
| 2 | Fatal error |
|
|
170
170
|
|
|
171
|
+
## Versioning
|
|
172
|
+
|
|
173
|
+
This linter's version tracks the Claude Code version it was extracted from:
|
|
174
|
+
|
|
175
|
+
- **Contract sync**: version matches Claude Code exactly (e.g., `2.1.69` for Claude Code v2.1.69)
|
|
176
|
+
- **Linter-only bugfix**: pre-release suffix `2.1.69-patch.1`, `2.1.69-patch.2`, etc.
|
|
177
|
+
|
|
178
|
+
Pre-release versions sort below the base version in npm (`2.1.69-patch.1 < 2.1.69`), but `^2.1.68` will still resolve them. When the next Claude Code version is released (e.g., `2.1.70`), it supersedes all patches.
|
|
179
|
+
|
|
171
180
|
## Development
|
|
172
181
|
|
|
173
182
|
```bash
|
|
@@ -176,6 +185,34 @@ npm run build
|
|
|
176
185
|
npm test
|
|
177
186
|
```
|
|
178
187
|
|
|
188
|
+
### Updating contracts
|
|
189
|
+
|
|
190
|
+
When a new Claude Code version is released:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# 1. Extract contracts from latest Claude Code
|
|
194
|
+
npm run extract-contracts
|
|
195
|
+
|
|
196
|
+
# Or extract from a specific version
|
|
197
|
+
npm run extract-contracts -- --version 2.1.58
|
|
198
|
+
|
|
199
|
+
# 2. Generate src/contracts.ts from the JSON
|
|
200
|
+
npm run generate-contracts
|
|
201
|
+
|
|
202
|
+
# 3. Build and test
|
|
203
|
+
npm run build && npm test
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
The `--version` flag is useful for testing the CI pipeline: extract an older version, commit it, then let CI detect the newer latest version and run the full release flow.
|
|
207
|
+
|
|
208
|
+
Use `--changelog` to also write a `CHANGELOG_ENTRY.md` file with a markdown drift report (used by CI):
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
npm run extract-contracts -- --changelog
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
This is automated in CI via `.woodpecker/release.yml`.
|
|
215
|
+
|
|
179
216
|
## License
|
|
180
217
|
|
|
181
218
|
MIT
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const TOOLS: Set<string>;
|
|
2
|
+
export declare const HOOK_EVENTS: Set<string>;
|
|
3
|
+
export declare const HOOK_TYPES: Set<string>;
|
|
4
|
+
export declare const PROMPT_EVENTS: Set<string>;
|
|
5
|
+
export declare const AGENT_COLORS: Set<string>;
|
|
6
|
+
export declare const AGENT_MODELS: Set<string>;
|
|
7
|
+
export declare const PLUGIN_JSON_FIELDS: Set<string>;
|
|
8
|
+
export declare const AGENT_FRONTMATTER: Set<string>;
|
|
9
|
+
export declare const COMMAND_FRONTMATTER: Set<string>;
|
|
10
|
+
export declare const MCP_SERVER_FIELDS: Set<string>;
|
|
11
|
+
export declare const SKILL_FRONTMATTER: Set<string>;
|
|
12
|
+
export declare const SETTINGS_USER_FIELDS: Set<string>;
|
|
13
|
+
export declare const SETTINGS_PROJECT_FIELDS: Set<string>;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// Auto-generated from contracts/claude-code-contracts.json
|
|
2
|
+
// Claude Code v2.1.70 — extracted 2026-03-06T15:33:15.488Z
|
|
3
|
+
// Do not edit manually. Run: npm run generate-contracts
|
|
4
|
+
export const TOOLS = new Set([
|
|
5
|
+
"Agent",
|
|
6
|
+
"AskUserQuestion",
|
|
7
|
+
"Bash",
|
|
8
|
+
"Edit",
|
|
9
|
+
"EnterPlanMode",
|
|
10
|
+
"EnterWorktree",
|
|
11
|
+
"ExitPlanMode",
|
|
12
|
+
"Glob",
|
|
13
|
+
"Grep",
|
|
14
|
+
"LSP",
|
|
15
|
+
"NotebookEdit",
|
|
16
|
+
"NotebookRead",
|
|
17
|
+
"Read",
|
|
18
|
+
"SendMessage",
|
|
19
|
+
"Skill",
|
|
20
|
+
"TaskCreate",
|
|
21
|
+
"TaskGet",
|
|
22
|
+
"TaskList",
|
|
23
|
+
"TaskOutput",
|
|
24
|
+
"TaskStop",
|
|
25
|
+
"TaskUpdate",
|
|
26
|
+
"TeamCreate",
|
|
27
|
+
"TeamDelete",
|
|
28
|
+
"TodoWrite",
|
|
29
|
+
"ToolSearch",
|
|
30
|
+
"WebFetch",
|
|
31
|
+
"WebSearch",
|
|
32
|
+
"Write",
|
|
33
|
+
]);
|
|
34
|
+
export const HOOK_EVENTS = new Set([
|
|
35
|
+
"ConfigChange",
|
|
36
|
+
"Elicitation",
|
|
37
|
+
"ElicitationResult",
|
|
38
|
+
"InstructionsLoaded",
|
|
39
|
+
"Notification",
|
|
40
|
+
"PermissionRequest",
|
|
41
|
+
"PostToolUse",
|
|
42
|
+
"PostToolUseFailure",
|
|
43
|
+
"PreCompact",
|
|
44
|
+
"PreToolUse",
|
|
45
|
+
"SessionEnd",
|
|
46
|
+
"SessionStart",
|
|
47
|
+
"Setup",
|
|
48
|
+
"Stop",
|
|
49
|
+
"SubagentStart",
|
|
50
|
+
"SubagentStop",
|
|
51
|
+
"TaskCompleted",
|
|
52
|
+
"TeammateIdle",
|
|
53
|
+
"UserPromptSubmit",
|
|
54
|
+
"WorktreeCreate",
|
|
55
|
+
"WorktreeRemove",
|
|
56
|
+
]);
|
|
57
|
+
export const HOOK_TYPES = new Set(["agent", "command", "http", "prompt"]);
|
|
58
|
+
export const PROMPT_EVENTS = new Set([
|
|
59
|
+
"Notification",
|
|
60
|
+
"PostToolUse",
|
|
61
|
+
"PostToolUseFailure",
|
|
62
|
+
"PreToolUse",
|
|
63
|
+
"SessionStart",
|
|
64
|
+
"Setup",
|
|
65
|
+
"SubagentStart",
|
|
66
|
+
"UserPromptSubmit",
|
|
67
|
+
]);
|
|
68
|
+
export const AGENT_COLORS = new Set([
|
|
69
|
+
"blue",
|
|
70
|
+
"cyan",
|
|
71
|
+
"green",
|
|
72
|
+
"magenta",
|
|
73
|
+
"orange",
|
|
74
|
+
"pink",
|
|
75
|
+
"purple",
|
|
76
|
+
"red",
|
|
77
|
+
"yellow",
|
|
78
|
+
]);
|
|
79
|
+
export const AGENT_MODELS = new Set(["haiku", "inherit", "opus", "sonnet"]);
|
|
80
|
+
export const PLUGIN_JSON_FIELDS = new Set([
|
|
81
|
+
"name",
|
|
82
|
+
"version",
|
|
83
|
+
"description",
|
|
84
|
+
"author",
|
|
85
|
+
"homepage",
|
|
86
|
+
"repository",
|
|
87
|
+
"license",
|
|
88
|
+
"keywords",
|
|
89
|
+
]);
|
|
90
|
+
export const AGENT_FRONTMATTER = new Set([
|
|
91
|
+
"description",
|
|
92
|
+
"tools",
|
|
93
|
+
"disallowedTools",
|
|
94
|
+
"prompt",
|
|
95
|
+
"model",
|
|
96
|
+
"mcpServers",
|
|
97
|
+
"criticalSystemReminder_EXPERIMENTAL",
|
|
98
|
+
"skills",
|
|
99
|
+
"maxTurns",
|
|
100
|
+
]);
|
|
101
|
+
export const COMMAND_FRONTMATTER = new Set([
|
|
102
|
+
"source",
|
|
103
|
+
"content",
|
|
104
|
+
"description",
|
|
105
|
+
"argumentHint",
|
|
106
|
+
"model",
|
|
107
|
+
"allowedTools",
|
|
108
|
+
]);
|
|
109
|
+
export const MCP_SERVER_FIELDS = new Set([
|
|
110
|
+
"type",
|
|
111
|
+
"command",
|
|
112
|
+
"args",
|
|
113
|
+
"env",
|
|
114
|
+
"url",
|
|
115
|
+
"headers",
|
|
116
|
+
"headersHelper",
|
|
117
|
+
"oauth",
|
|
118
|
+
"cwd",
|
|
119
|
+
]);
|
|
120
|
+
export const SKILL_FRONTMATTER = new Set([
|
|
121
|
+
"allowed-tools",
|
|
122
|
+
"argument-hint",
|
|
123
|
+
"description",
|
|
124
|
+
"disable-model-invocation",
|
|
125
|
+
"model",
|
|
126
|
+
"name",
|
|
127
|
+
"user-invocable",
|
|
128
|
+
"version",
|
|
129
|
+
"when_to_use",
|
|
130
|
+
]);
|
|
131
|
+
export const SETTINGS_USER_FIELDS = new Set([
|
|
132
|
+
"agent",
|
|
133
|
+
"allowManagedHooksOnly",
|
|
134
|
+
"allowManagedMcpServersOnly",
|
|
135
|
+
"allowManagedPermissionRulesOnly",
|
|
136
|
+
"allowedHttpHookUrls",
|
|
137
|
+
"allowedMcpServers",
|
|
138
|
+
"alwaysThinkingEnabled",
|
|
139
|
+
"apiKeyHelper",
|
|
140
|
+
"attribution",
|
|
141
|
+
"autoMemoryEnabled",
|
|
142
|
+
"autoUpdatesChannel",
|
|
143
|
+
"availableModels",
|
|
144
|
+
"awsAuthRefresh",
|
|
145
|
+
"awsCredentialExport",
|
|
146
|
+
"blockedMarketplaces",
|
|
147
|
+
"claudeMdExcludes",
|
|
148
|
+
"cleanupPeriodDays",
|
|
149
|
+
"companyAnnouncements",
|
|
150
|
+
"deniedMcpServers",
|
|
151
|
+
"disableAllHooks",
|
|
152
|
+
"disabledMcpjsonServers",
|
|
153
|
+
"enableAllProjectMcpServers",
|
|
154
|
+
"enabledMcpjsonServers",
|
|
155
|
+
"enabledPlugins",
|
|
156
|
+
"env",
|
|
157
|
+
"extraKnownMarketplaces",
|
|
158
|
+
"fastMode",
|
|
159
|
+
"fastModePerSessionOptIn",
|
|
160
|
+
"fileSuggestion",
|
|
161
|
+
"forceLoginMethod",
|
|
162
|
+
"forceLoginOrgUUID",
|
|
163
|
+
"hooks",
|
|
164
|
+
"httpHookAllowedEnvVars",
|
|
165
|
+
"includeCoAuthoredBy",
|
|
166
|
+
"includeGitInstructions",
|
|
167
|
+
"language",
|
|
168
|
+
"minimumVersion",
|
|
169
|
+
"model",
|
|
170
|
+
"otelHeadersHelper",
|
|
171
|
+
"outputStyle",
|
|
172
|
+
"permissions",
|
|
173
|
+
"plansDirectory",
|
|
174
|
+
"pluginConfigs",
|
|
175
|
+
"pluginTrustMessage",
|
|
176
|
+
"prefersReducedMotion",
|
|
177
|
+
"promptSuggestionEnabled",
|
|
178
|
+
"remote",
|
|
179
|
+
"respectGitignore",
|
|
180
|
+
"sandbox",
|
|
181
|
+
"showThinkingSummaries",
|
|
182
|
+
"skipDangerousModePermissionPrompt",
|
|
183
|
+
"skipWebFetchPreflight",
|
|
184
|
+
"spinnerTipsEnabled",
|
|
185
|
+
"spinnerTipsOverride",
|
|
186
|
+
"spinnerVerbs",
|
|
187
|
+
"sshConfigs",
|
|
188
|
+
"statusLine",
|
|
189
|
+
"strictKnownMarketplaces",
|
|
190
|
+
"syntaxHighlightingDisabled",
|
|
191
|
+
"terminalTitleFromRename",
|
|
192
|
+
"worktree",
|
|
193
|
+
]);
|
|
194
|
+
export const SETTINGS_PROJECT_FIELDS = new Set(["permissions"]);
|
|
195
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
package/dist/linters/agent-md.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AGENT_MODELS, AGENT_COLORS } from "../contracts.js";
|
|
1
2
|
import { isRuleEnabled, getRuleSeverity } from "../types.js";
|
|
2
3
|
import { parseFrontmatter } from "../utils/frontmatter.js";
|
|
3
4
|
const RULES = [
|
|
@@ -14,8 +15,6 @@ const RULES = [
|
|
|
14
15
|
{ id: "agent-md/system-prompt-length", defaultSeverity: "warning" },
|
|
15
16
|
{ id: "agent-md/system-prompt-second-person", defaultSeverity: "info" },
|
|
16
17
|
];
|
|
17
|
-
const VALID_MODELS = new Set(["inherit", "sonnet", "opus", "haiku"]);
|
|
18
|
-
const VALID_COLORS = new Set(["blue", "cyan", "green", "yellow", "magenta", "red"]);
|
|
19
18
|
function diag(config, filePath, ruleId, defaultSeverity, message, line, column) {
|
|
20
19
|
if (!isRuleEnabled(config, ruleId))
|
|
21
20
|
return null;
|
|
@@ -62,15 +61,15 @@ export const agentMdLinter = {
|
|
|
62
61
|
if (!("model" in fm.data) || typeof fm.data.model !== "string") {
|
|
63
62
|
push(diag(config, filePath, "agent-md/model-required", "error", "\"model\" is required in frontmatter"));
|
|
64
63
|
}
|
|
65
|
-
else if (!
|
|
66
|
-
push(diag(config, filePath, "agent-md/model-valid", "warning", `"model" must be one of: ${[...
|
|
64
|
+
else if (!AGENT_MODELS.has(fm.data.model)) {
|
|
65
|
+
push(diag(config, filePath, "agent-md/model-valid", "warning", `"model" must be one of: ${[...AGENT_MODELS].join(", ")} (got "${fm.data.model}")`));
|
|
67
66
|
}
|
|
68
67
|
// color
|
|
69
68
|
if (!("color" in fm.data) || typeof fm.data.color !== "string") {
|
|
70
69
|
push(diag(config, filePath, "agent-md/color-required", "error", "\"color\" is required in frontmatter"));
|
|
71
70
|
}
|
|
72
|
-
else if (!
|
|
73
|
-
push(diag(config, filePath, "agent-md/color-valid", "warning", `"color" must be one of: ${[...
|
|
71
|
+
else if (!AGENT_COLORS.has(fm.data.color)) {
|
|
72
|
+
push(diag(config, filePath, "agent-md/color-valid", "warning", `"color" must be one of: ${[...AGENT_COLORS].join(", ")} (got "${fm.data.color}")`));
|
|
74
73
|
}
|
|
75
74
|
// system prompt (body)
|
|
76
75
|
const body = fm.body.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-md.js","sourceRoot":"","sources":["../../src/linters/agent-md.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-md.js","sourceRoot":"","sources":["../../src/linters/agent-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TOOLS } from "../contracts.js";
|
|
1
2
|
import { isRuleEnabled, getRuleSeverity } from "../types.js";
|
|
2
3
|
import { parseFrontmatter } from "../utils/frontmatter.js";
|
|
3
4
|
const RULES = [
|
|
@@ -6,11 +7,6 @@ const RULES = [
|
|
|
6
7
|
{ id: "command-md/allowed-tools-valid", defaultSeverity: "warning" },
|
|
7
8
|
{ id: "command-md/body-present", defaultSeverity: "warning" },
|
|
8
9
|
];
|
|
9
|
-
const KNOWN_TOOLS = new Set([
|
|
10
|
-
"Read", "Write", "Edit", "Bash", "Glob", "Grep",
|
|
11
|
-
"WebFetch", "WebSearch", "Agent", "AskUserQuestion",
|
|
12
|
-
"NotebookEdit", "TodoWrite", "EnterPlanMode", "ExitPlanMode",
|
|
13
|
-
]);
|
|
14
10
|
function diag(config, filePath, ruleId, defaultSeverity, message, line, column) {
|
|
15
11
|
if (!isRuleEnabled(config, ruleId))
|
|
16
12
|
return null;
|
|
@@ -43,7 +39,7 @@ export const commandMdLinter = {
|
|
|
43
39
|
const tools = fm.data["allowed-tools"];
|
|
44
40
|
if (Array.isArray(tools)) {
|
|
45
41
|
for (const t of tools) {
|
|
46
|
-
if (typeof t === "string" && !
|
|
42
|
+
if (typeof t === "string" && !TOOLS.has(t)) {
|
|
47
43
|
push(diag(config, filePath, "command-md/allowed-tools-valid", "warning", `Unknown tool "${t}" in allowed-tools`));
|
|
48
44
|
}
|
|
49
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-md.js","sourceRoot":"","sources":["../../src/linters/command-md.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command-md.js","sourceRoot":"","sources":["../../src/linters/command-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { HOOK_EVENTS, PROMPT_EVENTS } from "../contracts.js";
|
|
1
2
|
import { isRuleEnabled, getRuleSeverity } from "../types.js";
|
|
2
3
|
const RULES = [
|
|
3
4
|
{ id: "hooks-json/valid-json", defaultSeverity: "error" },
|
|
@@ -10,14 +11,6 @@ const RULES = [
|
|
|
10
11
|
{ id: "hooks-json/prompt-event-support", defaultSeverity: "warning" },
|
|
11
12
|
{ id: "hooks-json/timeout-range", defaultSeverity: "warning" },
|
|
12
13
|
];
|
|
13
|
-
const VALID_EVENTS = new Set([
|
|
14
|
-
"PreToolUse", "PostToolUse", "UserPromptSubmit",
|
|
15
|
-
"Stop", "SubagentStop", "SessionStart", "SessionEnd",
|
|
16
|
-
"PreCompact", "Notification",
|
|
17
|
-
]);
|
|
18
|
-
const PROMPT_EVENTS = new Set([
|
|
19
|
-
"Stop", "SubagentStop", "UserPromptSubmit", "PreToolUse",
|
|
20
|
-
]);
|
|
21
14
|
function findKeyPosition(content, key) {
|
|
22
15
|
const re = new RegExp(`"${key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}"\\s*:`);
|
|
23
16
|
const match = re.exec(content);
|
|
@@ -69,8 +62,8 @@ export const hooksJsonLinter = {
|
|
|
69
62
|
for (const [eventName, matchers] of Object.entries(hooks)) {
|
|
70
63
|
const ep = findKeyPosition(content, eventName);
|
|
71
64
|
// valid event name
|
|
72
|
-
if (!
|
|
73
|
-
push(diag(config, filePath, "hooks-json/valid-event-names", "error", `Invalid event name "${eventName}" (valid: ${[...
|
|
65
|
+
if (!HOOK_EVENTS.has(eventName)) {
|
|
66
|
+
push(diag(config, filePath, "hooks-json/valid-event-names", "error", `Invalid event name "${eventName}" (valid: ${[...HOOK_EVENTS].join(", ")})`, ep?.line, ep?.column));
|
|
74
67
|
continue;
|
|
75
68
|
}
|
|
76
69
|
if (!Array.isArray(matchers))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-json.js","sourceRoot":"","sources":["../../src/linters/hooks-json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hooks-json.js","sourceRoot":"","sources":["../../src/linters/hooks-json.ts"],"names":[],"mappings":"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"}
|
package/dist/linters/mcp-json.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
|
+
import { MCP_SERVER_FIELDS } from "../contracts.js";
|
|
2
3
|
import { isRuleEnabled, getRuleSeverity } from "../types.js";
|
|
3
4
|
import { isKebabCase } from "../utils/kebab-case.js";
|
|
4
5
|
const RULES = [
|
|
@@ -19,9 +20,6 @@ const RULES = [
|
|
|
19
20
|
{ id: "mcp-json/no-unknown-server-fields", defaultSeverity: "info" },
|
|
20
21
|
{ id: "mcp-json/no-unknown-root-fields", defaultSeverity: "info" },
|
|
21
22
|
];
|
|
22
|
-
const KNOWN_SERVER_FIELDS = new Set([
|
|
23
|
-
"type", "url", "command", "args", "env", "cwd",
|
|
24
|
-
]);
|
|
25
23
|
function findKeyPosition(content, key) {
|
|
26
24
|
const re = new RegExp(`"${key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}"\\s*:`);
|
|
27
25
|
const match = re.exec(content);
|
|
@@ -141,7 +139,7 @@ export const mcpJsonLinter = {
|
|
|
141
139
|
}
|
|
142
140
|
// unknown fields
|
|
143
141
|
for (const key of Object.keys(server)) {
|
|
144
|
-
if (!
|
|
142
|
+
if (!MCP_SERVER_FIELDS.has(key)) {
|
|
145
143
|
push(diag(config, filePath, "mcp-json/no-unknown-server-fields", "info", `Server "${name}" has unknown field "${key}"`, sp?.line, sp?.column));
|
|
146
144
|
}
|
|
147
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-json.js","sourceRoot":"","sources":["../../src/linters/mcp-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-json.js","sourceRoot":"","sources":["../../src/linters/mcp-json.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import semver from "semver";
|
|
2
|
+
import { PLUGIN_JSON_FIELDS } from "../contracts.js";
|
|
2
3
|
import { isRuleEnabled, getRuleSeverity } from "../types.js";
|
|
3
4
|
import { isKebabCase } from "../utils/kebab-case.js";
|
|
4
|
-
const KNOWN_FIELDS = new Set([
|
|
5
|
-
"name", "version", "description", "author",
|
|
6
|
-
"repository", "homepage", "license", "keywords",
|
|
7
|
-
]);
|
|
8
5
|
const SPDX_COMMON = new Set([
|
|
9
6
|
"MIT", "Apache-2.0", "GPL-2.0-only", "GPL-3.0-only",
|
|
10
7
|
"BSD-2-Clause", "BSD-3-Clause", "ISC", "MPL-2.0",
|
|
@@ -147,9 +144,9 @@ export const pluginJsonLinter = {
|
|
|
147
144
|
}
|
|
148
145
|
// unknown fields
|
|
149
146
|
for (const key of Object.keys(parsed)) {
|
|
150
|
-
if (!
|
|
147
|
+
if (!PLUGIN_JSON_FIELDS.has(key)) {
|
|
151
148
|
const p = pos(key);
|
|
152
|
-
push(diag(config, filePath, "plugin-json/no-unknown-fields", "info", `Unknown field "${key}" (known: ${[...
|
|
149
|
+
push(diag(config, filePath, "plugin-json/no-unknown-fields", "info", `Unknown field "${key}" (known: ${[...PLUGIN_JSON_FIELDS].join(", ")})`, p?.line, p?.column));
|
|
153
150
|
}
|
|
154
151
|
}
|
|
155
152
|
// license
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-json.js","sourceRoot":"","sources":["../../src/linters/plugin-json.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-json.js","sourceRoot":"","sources":["../../src/linters/plugin-json.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
|
+
import { SETTINGS_USER_FIELDS, SETTINGS_PROJECT_FIELDS, TOOLS } from "../contracts.js";
|
|
2
3
|
import { isRuleEnabled, getRuleSeverity } from "../types.js";
|
|
3
4
|
const RULES = [
|
|
4
5
|
{ id: "settings-json/valid-json", defaultSeverity: "error" },
|
|
@@ -16,23 +17,6 @@ const RULES = [
|
|
|
16
17
|
{ id: "settings-json/plugins-format", defaultSeverity: "warning" },
|
|
17
18
|
{ id: "settings-json/skip-prompt-boolean", defaultSeverity: "error" },
|
|
18
19
|
];
|
|
19
|
-
// Fields valid at user level (settings.json)
|
|
20
|
-
const USER_FIELDS = new Set([
|
|
21
|
-
"env", "permissions", "enabledPlugins",
|
|
22
|
-
"skipDangerousModePermissionPrompt", "voiceEnabled",
|
|
23
|
-
]);
|
|
24
|
-
// Fields valid at project/subdirectory level (settings.local.json)
|
|
25
|
-
const PROJECT_FIELDS = new Set([
|
|
26
|
-
"permissions",
|
|
27
|
-
]);
|
|
28
|
-
const KNOWN_TOOLS = new Set([
|
|
29
|
-
"Read", "Write", "Edit", "Bash", "Glob", "Grep",
|
|
30
|
-
"WebFetch", "WebSearch", "Agent", "AskUserQuestion",
|
|
31
|
-
"NotebookEdit", "TodoWrite", "EnterPlanMode", "ExitPlanMode",
|
|
32
|
-
"Skill", "EnterWorktree", "SendMessage", "TaskCreate",
|
|
33
|
-
"TaskUpdate", "TaskGet", "TaskList", "TaskStop", "TaskOutput",
|
|
34
|
-
"TeamCreate", "TeamDelete", "NotebookRead",
|
|
35
|
-
]);
|
|
36
20
|
function findKeyPosition(content, key) {
|
|
37
21
|
const re = new RegExp(`"${key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}"\\s*:`);
|
|
38
22
|
const match = re.exec(content);
|
|
@@ -81,15 +65,15 @@ export const settingsJsonLinter = {
|
|
|
81
65
|
push(diag(config, filePath, "settings-json/scope-file-name", "error", `"settings.json" should only exist at user level (~/.claude/). Use "settings.local.json" for project-level settings`));
|
|
82
66
|
}
|
|
83
67
|
// Determine which fields are valid for this scope
|
|
84
|
-
const knownFields = (scope === "user" || !scope) ?
|
|
68
|
+
const knownFields = (scope === "user" || !scope) ? SETTINGS_USER_FIELDS : SETTINGS_PROJECT_FIELDS;
|
|
85
69
|
// unknown/misplaced top-level fields
|
|
86
70
|
for (const key of Object.keys(parsed)) {
|
|
87
71
|
if (!knownFields.has(key)) {
|
|
88
72
|
const p = findKeyPosition(content, key);
|
|
89
|
-
if (
|
|
73
|
+
if (SETTINGS_USER_FIELDS.has(key) && scope && scope !== "user") {
|
|
90
74
|
push(diag(config, filePath, "settings-json/scope-field", "warning", `"${key}" is a user-level field — it has no effect in project-level settings.local.json`, p?.line, p?.column));
|
|
91
75
|
}
|
|
92
|
-
else if (!
|
|
76
|
+
else if (!SETTINGS_USER_FIELDS.has(key)) {
|
|
93
77
|
push(diag(config, filePath, "settings-json/no-unknown-fields", "warning", `Unknown top-level field "${key}"`, p?.line, p?.column));
|
|
94
78
|
}
|
|
95
79
|
}
|
|
@@ -119,7 +103,7 @@ export const settingsJsonLinter = {
|
|
|
119
103
|
const toolMatch = entry.match(/^([A-Za-z]+)(\(.*\))?$/);
|
|
120
104
|
if (toolMatch) {
|
|
121
105
|
const toolName = toolMatch[1];
|
|
122
|
-
if (!
|
|
106
|
+
if (!TOOLS.has(toolName)) {
|
|
123
107
|
// Allow MCP tool patterns (mcp__*)
|
|
124
108
|
if (!entry.startsWith("mcp__")) {
|
|
125
109
|
push(diag(config, filePath, "settings-json/allow-known-tools", "warning", `Unknown tool "${toolName}" in permissions.allow`, ap?.line, ap?.column));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-json.js","sourceRoot":"","sources":["../../src/linters/settings-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"settings-json.js","sourceRoot":"","sources":["../../src/linters/settings-json.ts"],"names":[],"mappings":"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"}
|
package/dist/linters/skill-md.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SKILL_FRONTMATTER } from "../contracts.js";
|
|
1
2
|
import { isRuleEnabled, getRuleSeverity } from "../types.js";
|
|
2
3
|
import { parseFrontmatter } from "../utils/frontmatter.js";
|
|
3
4
|
import { isKebabCase } from "../utils/kebab-case.js";
|
|
@@ -14,10 +15,6 @@ const RULES = [
|
|
|
14
15
|
{ id: "skill-md/body-word-count", defaultSeverity: "warning" },
|
|
15
16
|
{ id: "skill-md/body-has-headers", defaultSeverity: "info" },
|
|
16
17
|
];
|
|
17
|
-
const KNOWN_FRONTMATTER = new Set([
|
|
18
|
-
"name", "description", "version", "license",
|
|
19
|
-
"allowed-tools", "metadata", "compatibility",
|
|
20
|
-
]);
|
|
21
18
|
function diag(config, filePath, ruleId, defaultSeverity, message, line, column) {
|
|
22
19
|
if (!isRuleEnabled(config, ruleId))
|
|
23
20
|
return null;
|
|
@@ -72,8 +69,8 @@ export const skillMdLinter = {
|
|
|
72
69
|
}
|
|
73
70
|
// unknown frontmatter keys
|
|
74
71
|
for (const key of Object.keys(fm.data)) {
|
|
75
|
-
if (!
|
|
76
|
-
push(diag(config, filePath, "skill-md/no-unknown-frontmatter", "warning", `Unknown frontmatter key "${key}" (known: ${[...
|
|
72
|
+
if (!SKILL_FRONTMATTER.has(key)) {
|
|
73
|
+
push(diag(config, filePath, "skill-md/no-unknown-frontmatter", "warning", `Unknown frontmatter key "${key}" (known: ${[...SKILL_FRONTMATTER].join(", ")})`));
|
|
77
74
|
}
|
|
78
75
|
}
|
|
79
76
|
// body checks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-md.js","sourceRoot":"","sources":["../../src/linters/skill-md.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-md.js","sourceRoot":"","sources":["../../src/linters/skill-md.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claudecode-linter",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.1.70",
|
|
4
4
|
"description": "Standalone linter for Claude Code plugin artifacts",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
"prepublishOnly": "npm run build",
|
|
16
16
|
"deps:check": "ncu",
|
|
17
17
|
"deps:update": "ncu -u",
|
|
18
|
-
"knip": "knip --exclude types"
|
|
18
|
+
"knip": "knip --exclude types",
|
|
19
|
+
"extract-contracts": "tsx scripts/extract-contracts.ts",
|
|
20
|
+
"generate-contracts": "tsx scripts/generate-contracts.ts"
|
|
19
21
|
},
|
|
20
22
|
"files": [
|
|
21
23
|
"dist/",
|
|
@@ -45,8 +47,11 @@
|
|
|
45
47
|
"devDependencies": {
|
|
46
48
|
"@types/node": "^25.3.3",
|
|
47
49
|
"@types/semver": "^7.7.1",
|
|
50
|
+
"acorn": "^8.16.0",
|
|
51
|
+
"acorn-walk": "^8.3.5",
|
|
48
52
|
"knip": "^5.85.0",
|
|
49
53
|
"npm-check-updates": "^19.6.3",
|
|
54
|
+
"tsx": "^4.21.0",
|
|
50
55
|
"typescript": "^5.9.3",
|
|
51
56
|
"vitest": "4.0.18"
|
|
52
57
|
}
|