@codyswann/lisa 2.124.9 → 2.124.11

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 (48) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa-agy/plugin.json +1 -1
  5. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  6. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  7. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  8. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  9. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  10. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -12
  11. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  14. package/plugins/lisa-expo-agy/plugin.json +1 -1
  15. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +8 -2
  16. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  20. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -12
  21. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  24. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  25. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  30. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-rails-agy/plugin.json +1 -1
  35. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -12
  36. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  40. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  45. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  47. package/scripts/generate-copilot-plugin-artifacts.mjs +41 -0
  48. package/scripts/lib/per-agent-hook-filter.mjs +38 -1
package/package.json CHANGED
@@ -83,7 +83,7 @@
83
83
  "lodash": ">=4.18.1"
84
84
  },
85
85
  "name": "@codyswann/lisa",
86
- "version": "2.124.9",
86
+ "version": "2.124.11",
87
87
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
88
88
  "main": "dist/index.js",
89
89
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -45,17 +45,6 @@
45
45
  }
46
46
  ]
47
47
  }
48
- ],
49
- "subagentStart": [
50
- {
51
- "matcher": "",
52
- "hooks": [
53
- {
54
- "type": "command",
55
- "command": "${CLAUDE_PLUGIN_ROOT}/hooks/inject-rules.sh"
56
- }
57
- ]
58
- }
59
48
  ]
60
49
  }
61
50
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,11 +1,17 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
7
7
  },
8
8
  "dependencies": [
9
9
  "lisa-typescript"
10
- ]
10
+ ],
11
+ "mcpServers": {
12
+ "expo": {
13
+ "type": "http",
14
+ "url": "https://mcp.expo.dev/mcp"
15
+ }
16
+ }
11
17
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -19,17 +19,6 @@
19
19
  }
20
20
  ]
21
21
  }
22
- ],
23
- "subagentStart": [
24
- {
25
- "matcher": "",
26
- "hooks": [
27
- {
28
- "type": "command",
29
- "command": "${CLAUDE_PLUGIN_ROOT}/hooks/inject-rules.sh"
30
- }
31
- ]
32
- }
33
22
  ]
34
23
  }
35
24
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -20,17 +20,6 @@
20
20
  ]
21
21
  }
22
22
  ],
23
- "subagentStart": [
24
- {
25
- "matcher": "",
26
- "hooks": [
27
- {
28
- "type": "command",
29
- "command": "${CLAUDE_PLUGIN_ROOT}/hooks/inject-rules.sh"
30
- }
31
- ]
32
- }
33
- ],
34
23
  "postToolUse": [
35
24
  {
36
25
  "matcher": "Write|Edit",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.124.9",
3
+ "version": "2.124.11",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -199,6 +199,47 @@ export function generateCopilotVariant(srcDir, outDir, version) {
199
199
  } else {
200
200
  delete manifest.hooks;
201
201
  }
202
+
203
+ // 3b. Surface a bundled `.mcp.json`'s servers as an INLINE `mcpServers` object
204
+ // in the manifest. Copilot does NOT auto-discover a plugin's bundled
205
+ // `.mcp.json` (it reads `.mcp.json` only at the WORKSPACE root), and a
206
+ // `".mcp.json"` path-string pointer is ignored; only an inline `mcpServers`
207
+ // OBJECT in the manifest is honored. Verified by run (GitHub Copilot CLI
208
+ // 1.0.55, issue #1056): after `copilot plugin install`, the inline object made
209
+ // Copilot load the bundled server (the expo server initiated its OAuth
210
+ // connect), whereas bare `.mcp.json` and the path-string form both left
211
+ // Copilot reporting "No MCP servers configured". The `.mcp.json` file is kept
212
+ // (it is the source of truth and harmless to Copilot) and mirrored inline.
213
+ const mcpJsonPath = path.join(outDir, ".mcp.json");
214
+ if (fs.existsSync(mcpJsonPath)) {
215
+ try {
216
+ const mcpDoc = JSON.parse(fs.readFileSync(mcpJsonPath, "utf8"));
217
+ const servers = mcpDoc?.mcpServers;
218
+ if (
219
+ servers &&
220
+ typeof servers === "object" &&
221
+ !Array.isArray(servers) &&
222
+ Object.keys(servers).length > 0
223
+ ) {
224
+ manifest.mcpServers = servers;
225
+ } else if (mcpDoc && "mcpServers" in mcpDoc) {
226
+ // Present but not a non-empty plain object (e.g. `[]`, a string) — a
227
+ // parseable-but-invalid file. Skip the pointer rather than emit a broken
228
+ // one, and surface why.
229
+ console.warn(
230
+ `[copilot] skipping mcpServers pointer: invalid mcpServers shape in ${mcpJsonPath}`
231
+ );
232
+ }
233
+ } catch (err) {
234
+ // Malformed `.mcp.json` — leave the manifest without an mcpServers pointer
235
+ // rather than emitting a broken one, but surface it so a broken MCP file
236
+ // doesn't ship silently without its servers.
237
+ console.warn(
238
+ `[copilot] skipping mcpServers pointer: could not parse ${mcpJsonPath}: ${err.message}`
239
+ );
240
+ }
241
+ }
242
+
202
243
  fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
203
244
 
204
245
  // 4. Filter the hooks/ directory.
@@ -148,7 +148,9 @@ const COPILOT_EVENTS = {
148
148
  SessionEnd: "sessionEnd",
149
149
  UserPromptSubmit: "userPromptSubmitted",
150
150
  Stop: "agentStop",
151
- SubagentStart: "subagentStart", // not supported but include for symmetry
151
+ // No `SubagentStart`: Copilot has no such event. It is dropped wholesale by
152
+ // AGENT_UNSUPPORTED_EVENTS before translation ever runs (see
153
+ // filterHooksForAgent), so it never needs a mapping here.
152
154
  SubagentStop: "subagentStop",
153
155
  };
154
156
 
@@ -169,6 +171,40 @@ const CURSOR_EVENTS = {
169
171
  PreCompact: "preCompact",
170
172
  };
171
173
 
174
+ /**
175
+ * Events a target agent's hook runner does NOT recognize. A hook block under one
176
+ * of these events is dropped wholesale for that agent — even when an individual
177
+ * handler script would otherwise ship — because emitting the event yields a
178
+ * manifest the agent rejects.
179
+ *
180
+ * Copilot has no `SubagentStart` event. Worse, the emitted `subagentStart` entry
181
+ * carries an empty `matcher`, and GitHub Copilot CLI (verified against 1.0.55)
182
+ * rejects the ENTIRE inline hooks config on it — `Invalid inline hooks config
183
+ * ...: hooks.subagentStart[0].matcher: matcher cannot be empty` — so NONE of the
184
+ * plugin's hooks fire, not just the subagent one. Dropping the event restores
185
+ * Copilot hook firing; `inject-rules.sh` still ships under `SessionStart`, so no
186
+ * rule delivery is lost. (Issue #1056, verified by run: with `subagentStart`
187
+ * present zero hooks fired; with it removed the `SessionStart` hooks fired and
188
+ * `${CLAUDE_PLUGIN_ROOT}` resolved.)
189
+ *
190
+ * @type {Record<string, Set<string>>}
191
+ */
192
+ const AGENT_UNSUPPORTED_EVENTS = {
193
+ copilot: new Set(["SubagentStart"]),
194
+ };
195
+
196
+ /**
197
+ * Whether a Claude event name is unsupported by the target agent and must be
198
+ * dropped wholesale (not translated, not partially filtered).
199
+ *
200
+ * @param {string} claudeEventName Claude event name (e.g. "SubagentStart")
201
+ * @param {"cursor"|"agy"|"copilot"|"codex"} agent Target agent slug
202
+ * @returns {boolean}
203
+ */
204
+ export function isUnsupportedEvent(claudeEventName, agent) {
205
+ return Boolean(AGENT_UNSUPPORTED_EVENTS[agent]?.has(claudeEventName));
206
+ }
207
+
172
208
  /**
173
209
  * Translate Claude PascalCase event names to a target agent's native casing.
174
210
  *
@@ -278,6 +314,7 @@ export function filterHooksForAgent(hookBlock, agent, opts = {}) {
278
314
  const out = {};
279
315
 
280
316
  for (const [claudeEventName, entries] of Object.entries(hookBlock)) {
317
+ if (isUnsupportedEvent(claudeEventName, agent)) continue;
281
318
  if (!Array.isArray(entries)) continue;
282
319
  const filteredEntries = [];
283
320
  for (const entry of entries) {