@chimix/agentscan 1.0.0 → 1.3.0

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.
Files changed (4) hide show
  1. package/CHANGELOG.md +234 -0
  2. package/README.md +207 -68
  3. package/dist/cli.js +9102 -6630
  4. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -7,6 +7,240 @@ read-only in every version below.
7
7
  GitHub already has release pages for [v0.1.0](https://github.com/SimaAlexandru99/agentscan/releases/tag/v0.1.0)
8
8
  and [v0.4.0](https://github.com/SimaAlexandru99/agentscan/releases/tag/v0.4.0).
9
9
  0.9.0 was planned as a separate train and shipped inside 1.0.0.
10
+ 1.0.1 is the shared-MCP hotfix; it is documented below and ships inside 1.1.0
11
+ (the published package version). A separate 1.0.1 npm tag would need an
12
+ intermediate commit that this train does not cut.
13
+
14
+ ## 1.3.0 — 2026-08-31
15
+
16
+ Native Windsurf / Cascade coverage against 2026-08-31 official docs.
17
+ **99 checks**, **457 tests**.
18
+
19
+ ### Added
20
+
21
+ - Spec captures `docs/spec/windsurf-rules.md`, `windsurf-agents-md.md`,
22
+ `windsurf-mcp.md`.
23
+ - Workspace rules: `.devin/rules/*.md` (preferred), `.windsurf/rules/*.md`
24
+ (fallback), subdirectory-scoped trees, legacy `.windsurfrules`.
25
+ `.devin` is a scan-root signal.
26
+ - Character budgets: `windsurf.rule.too-large` (12,000) and
27
+ `windsurf.rule.global-too-large` (6,000). Never `cursor.rule.too-large`.
28
+ - `windsurf.rule.missing-trigger` on workspace `.devin` / `.windsurf` rules
29
+ that omit frontmatter `trigger`. Not on `.windsurfrules`,
30
+ `global_rules.md`, or `AGENTS.md`.
31
+ - Portable lowercase `agents.md` (same `sourceProvider: unknown` as
32
+ `AGENTS.md`).
33
+ - `--global` Cascade MCP at `~/.codeium/windsurf/mcp_config.json`
34
+ (`windsurf-json`). Launch is `command` or `serverUrl` or `url`.
35
+ `windsurf.mcp.no-launch` when none are set. Never
36
+ `claude.mcp.url-without-type`.
37
+ - `--global` `~/.codeium/windsurf/memories/global_rules.md` only. Other
38
+ files in that memories directory stay unread.
39
+
40
+ ### Unread (intentional)
41
+
42
+ - Devin Local CLI MCP (no published path).
43
+ - Auto-generated memories other than `global_rules.md`.
44
+ - System / enterprise rule directories.
45
+ - Project MCP (none quoted).
46
+ - Marketplace, admin allowlists, OAuth stores.
47
+
48
+ ## 1.2.1 — 2026-08-31
49
+
50
+ Codex user MCP under `--global`. **95 checks**, **441 tests**.
51
+
52
+ ### Added
53
+
54
+ - `$CODEX_HOME/config.toml` (default `~/.codex/config.toml`) is opened only
55
+ with `--global`. Same `codex-toml` shape as project `.codex/config.toml`.
56
+ - Same-name user and project servers both stay in the inventory. The
57
+ published page does not quote a replace-entirely rule, so this scanner
58
+ does not invent `codexEffective`.
59
+ - Spec recapture `docs/spec/codex-mcp.md` (user path, `CODEX_HOME`, unread
60
+ system / managed / requirements / profiles / plugins / trust / `auth.json`).
61
+
62
+ ### Unread (intentional)
63
+
64
+ - System `/etc/codex/config.toml`, managed preferences, `requirements.toml`,
65
+ profile files, plugin MCP, `trust_level`.
66
+ - User-file `project_doc_*` knobs.
67
+ - Claude global settings; Command Code `projects/{slug}/mcp.json`.
68
+
69
+ ## 1.2.0 — 2026-08-31
70
+
71
+ Native Grok Build provider against 2026-08-31 official docs. **95 checks**,
72
+ **435 tests**. Compatibility with Claude or Cursor is not schema identity.
73
+
74
+ ### Added
75
+
76
+ - Spec captures `docs/spec/grok-mcp.md`, `grok-hooks.md`, `grok-skills.md`,
77
+ `grok-rules.md`, `grok-agents.md`.
78
+ - Profiles: `grok-toml` MCP, `grok` hook and skill schemas.
79
+ `inferHookSchemaProfile("grok")` is `"grok"`, not `"claude"`.
80
+ - Project `.grok/config.toml` walk-up (cwd → scan boundary). User
81
+ `$GROK_HOME/config.toml` or `~/.grok/config.toml` under `--global`.
82
+ Same-name project replaces user; closer project file wins.
83
+ `grok.mcp.no-launch` when neither `command` nor `url` is set. Never
84
+ `claude.mcp.url-without-type` on `grok-toml`.
85
+ - `.grok/hooks/*.json` and user hooks under `--global`. Fourteen events;
86
+ handlers `command` / `http`. Copilot `version: 1` remap is not applied.
87
+ - `.grok/skills` (and user skills under `--global`). Frontmatter required;
88
+ `name` / `description` optional. Agent Skills directory-match and Claude
89
+ listing-budget checks do not run.
90
+ - `.grok/rules/*.md` with no size cap. `Agents.md` and `AGENT.md` as Grok
91
+ instruction files beside `AGENTS.md`.
92
+ - Conformance fixture `tests/fixtures/conformance/grok-toml/`.
93
+ - `spec:check` drifts Grok hook event names against the live hooks page.
94
+
95
+ ### Unread (intentional)
96
+
97
+ - Managed / requirements TOML, plugins, marketplaces, personas, LSP,
98
+ `sandbox.toml`, `pager.toml`.
99
+ - `[skills] paths` (no quoted resolution base).
100
+ - `.grok/agents/` (directory named, no filename pattern).
101
+ - Claude / Cursor / `.mcp.json` as Grok-consumed.
102
+ - `.gitignore` skip for instruction files.
103
+ - Credential files (`auth.json`, `mcp_credentials.json`).
104
+
105
+ ## 1.1.0 — 2026-08-31
106
+
107
+ Native Command Code provider, then a correctness pass over every registered
108
+ check against 2026-08-31 official docs. Includes 1.0.1. **87 checks**, **420
109
+ tests**.
110
+
111
+ ### Added
112
+
113
+ - Hook schema profiles: `claude` | `vscode-native` | `copilot-cli` |
114
+ `commandcode`. `.github/hooks` with `version: 1` is Copilot CLI.
115
+ - Claude hook schema: required `type` (not inferred from `command`/`url`);
116
+ `mcp_tool` needs `server` + `tool`; `prompt`/`agent` need `prompt`;
117
+ documented event/handler compatibility; nested matcher groups only.
118
+ - Copilot CLI: camelCase events mapped onto VS Code names; `bash` /
119
+ `powershell` / `command`; `cwd`; `timeoutSec` then `timeout`. Prompt
120
+ hooks only on `sessionStart`. User `~/.copilot/hooks` under `--global`.
121
+ - Agent Skills optional constrained fields: `compatibility` 1..500,
122
+ `metadata` map<string,string>, `allowed-tools` string. Info for
123
+ `SKILL.md` >500 lines. File references resolve from the skill root only.
124
+ - Claude skill listing budget: 1% context window, 8000-character fallback,
125
+ per-entry cap 1536, listing text is description (or first markdown
126
+ paragraph) plus `when_to_use`. First paragraph satisfies missing
127
+ description.
128
+ - OpenCode V2: local `command` must be an argv array
129
+ (`opencode.mcp.command-not-array`).
130
+ - Continue standalone YAML blocks require `name` / `version` / `schema`
131
+ (`continue.mcp.missing-block-metadata`). Copied JSON is not checked.
132
+ - Gemini underscore alias warning (`gemini.mcp.underscore-alias`).
133
+ - Claude reserved MCP names including `workspace`
134
+ (`claude.mcp.reserved-name`).
135
+ - Codex chain knobs: `AGENTS.override.md` > `AGENTS.md` >
136
+ `project_doc_fallback_filenames`; one file per directory; root→cwd;
137
+ `project_doc_max_bytes`; `project_root_markers`.
138
+ - Coverage matrix uses five dimensions (project discovery, global
139
+ discovery, schema, precedence, conformance) instead of `full` /
140
+ `partial`.
141
+ - Conformance fixture `tests/fixtures/conformance/copilot-hooks/`.
142
+ - Spec capture `docs/spec/copilot-hooks.md`. Alias
143
+ `claude.hook.mcp-tool-without-name` →
144
+ `claude.hook.mcp-tool-without-server-or-tool`.
145
+
146
+ ### Changed
147
+
148
+ - Nested `<dir>/.commandcode/AGENTS.md` is Command Code memory when that
149
+ directory has no `AGENTS.md` (official memory table).
150
+ - Native VS Code remains command-only with its documented eight events.
151
+ `vscode.hook.http-without-url` and `vscode.hook.mcp-tool-without-name`
152
+ are removed.
153
+ - Claude agent names: lowercase letters and hyphens (no digits); filename
154
+ is not compared to `name`.
155
+ - `skill.description-budget` provenance is vendor-recommendation, not a
156
+ 16000-byte heuristic.
157
+
158
+ ### Added (Command Code provider)
159
+
160
+ - Provider `commandcode` from official pages under `docs/spec/commandcode-*.md`
161
+ (read 2026-08-31). Unknown stays skip: no invented local-project MCP slug,
162
+ no bundled-skill scan, no `--skill` flags, no model-id list, no mods
163
+ execution.
164
+ - Skills: `.commandcode/skills` only at the Command Code project root
165
+ (Agent Skills contract), `.agents/skills` walk-up (max 10 hops from cwd,
166
+ stopping at home), extra dirs from the highest-precedence settings
167
+ `skills` array (replace, not merge; relative paths resolve against the git
168
+ root). User `~/.commandcode/skills` and `~/.agents/skills` under
169
+ `--global`.
170
+ - Memory: per directory, first existing of `AGENTS.md` or
171
+ `.commandcode/AGENTS.md` (project and nested). User
172
+ `~/.commandcode/AGENTS.md` under `--global`. Unresolved `@path` is not a
173
+ hard error. Codex's instruction chain excludes `.commandcode/AGENTS.md`.
174
+ - Agents: `<project>/.commandcode/agents/*.md` at the Command Code project
175
+ root only (git root, or cwd outside a git repo); filename supplies
176
+ `name`; no `claude.agent.*` on these files. Checks:
177
+ `commandcode.agent.reserved-name` (`explore` / `plan` / `review` /
178
+ `general`), `invalid-permission-mode`, `invalid-field-type` covering every
179
+ documented custom-agent typed field (`reasoningEffort` is not one of them).
180
+ `maxTurns` must be a positive integer.
181
+ - Hooks: four events (`PreToolUse`, `PostToolUse`, `Stop`, `SessionStart`);
182
+ nested `hooks` array required; `type` must be the string `"command"`;
183
+ `command` must be a string (not an argv array); `matcher` must be a string
184
+ when present. Timeout 0–600. A matcher on `Stop` / `SessionStart` is
185
+ runtime-dead, not a schema error. Project and user hooks for the same event
186
+ coexist; only an exact duplicate command string is deduplicated (project
187
+ wins). `settings.local.json` follows settings merge (an event array
188
+ replaces the project array for that event). `COMMANDCODE_PROJECT_DIR` and
189
+ `COMMANDCODE_CWD` expand against the Command Code project root.
190
+ - Settings: Command Code project root is the git root (a child `.cursor`
191
+ does not hide `<git-root>/.commandcode/`). `model` inventoried, not
192
+ validated. Inline `mcp.servers` (array or object map; unnamed array items
193
+ are inventory-only). User `~/.commandcode/mcp.json` under `--global`.
194
+ Spec/runtime checks skip shadowed lower-precedence definitions; security
195
+ checks still inspect every readable MCP file.
196
+ - Slash commands: inventory `.commandcode/commands` at the project root and
197
+ the user dir — no required-field checks.
198
+ - Mods: inventory `mods.paths` — never execute or import TypeScript.
199
+ - Conformance fixture `tests/fixtures/conformance/commandcode/`.
200
+ - `spec:check` tracks captured surfaces and diffs Claude, VS Code, Copilot
201
+ CLI, and Command Code hook events against live pages.
202
+
203
+ ### Also changed
204
+
205
+ - Default `skillPaths` includes `.commandcode/skills`.
206
+ - `--global` / `includeGlobal` also scans `~/.commandcode/skills`,
207
+ `~/.agents/skills`, user Command Code agents, MCP, memory, Copilot user
208
+ hooks, and Codex global AGENTS files.
209
+ - Shared `.mcp.json` is `mcp-json`, not Claude-only.
210
+
211
+ ## 1.0.1 — 2026-08-31
212
+
213
+ Shared `.mcp.json` is not Claude-only. Command Code writes it for `--scope
214
+ project` with `transport` (and `type` as an alias). A Claude-keyed
215
+ `url`-without-`type` check on that path is a false positive on valid
216
+ Command Code HTTP config.
217
+
218
+ ### Fixed
219
+
220
+ - `.mcp.json` uses schema profile `mcp-json`, `consumedBy: ["claude",
221
+ "commandcode"]`, `sourceProvider: "unknown"`. `.claude/mcp.json` and
222
+ project `mcp.json` stay `claude-json`.
223
+ - Parse `transport` first; `type` is an alias. Store which field was
224
+ present.
225
+ - `claude.mcp.url-without-type` on `mcp-json` fires only when `url` is set
226
+ and transport is unset. On `claude-json` it still fires when the field is
227
+ `transport` or missing. `{ "transport": "http", "url": "…" }` does not
228
+ emit this.
229
+ - Command Code transport defects on `mcp-json` and `commandcode-json`:
230
+ `commandcode.mcp.invalid-transport`, `http-without-url`,
231
+ `stdio-without-command`. Valid transports are `http` and `stdio`. Claude
232
+ `sse` / `ws` on shared `.mcp.json` is not a Command Code invalid-transport.
233
+ - Empty launch on `mcp-json` still emits `claude.mcp.no-launch` (both
234
+ consumers need a launch field). `commandcode-json` empty launch emits
235
+ `commandcode.mcp.no-launch`.
236
+ - `looksLikeServerEntry` recognises `transport`. Absolute MCP paths under
237
+ `--global` are not joined as relative.
238
+
239
+ ### Security
240
+
241
+ - Never open `~/.commandcode/auth.json` or `mcp-tokens.json`.
242
+ - Local `~/.commandcode/projects/{project}/mcp.json` is unread: the slug
243
+ encoding is unpublished. Prefer skip over inventing it.
10
244
 
11
245
  ## 1.0.0 — 2026-08-30
12
246