oh-my-copilot 4.13.21 → 4.13.54

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 (219) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +8 -0
  4. package/agents/code-reviewer.agent.md +24 -6
  5. package/agents/designer.agent.md +12 -0
  6. package/bridge/cli.cjs +2231 -1222
  7. package/bridge/mcp-server.cjs +678 -261
  8. package/bridge/runtime-cli.cjs +55 -8
  9. package/bridge/team.js +507 -38
  10. package/dist/__tests__/agent-registry.test.js +92 -1
  11. package/dist/__tests__/agent-registry.test.js.map +1 -1
  12. package/dist/__tests__/auto-slash-aliases.test.js +6 -6
  13. package/dist/__tests__/auto-slash-aliases.test.js.map +1 -1
  14. package/dist/__tests__/auto-update.test.js +132 -2
  15. package/dist/__tests__/auto-update.test.js.map +1 -1
  16. package/dist/__tests__/bedrock-model-routing.test.js +18 -17
  17. package/dist/__tests__/bedrock-model-routing.test.js.map +1 -1
  18. package/dist/__tests__/delegation-enforcer.test.js +46 -6
  19. package/dist/__tests__/delegation-enforcer.test.js.map +1 -1
  20. package/dist/__tests__/hooks/session-end-cleanup.test.d.ts +2 -0
  21. package/dist/__tests__/hooks/session-end-cleanup.test.d.ts.map +1 -0
  22. package/dist/__tests__/hooks/session-end-cleanup.test.js +93 -0
  23. package/dist/__tests__/hooks/session-end-cleanup.test.js.map +1 -0
  24. package/dist/__tests__/hud/stdin.test.d.ts +2 -0
  25. package/dist/__tests__/hud/stdin.test.d.ts.map +1 -0
  26. package/dist/__tests__/hud/stdin.test.js +556 -0
  27. package/dist/__tests__/hud/stdin.test.js.map +1 -0
  28. package/dist/__tests__/model-routing-override-three-site-sync.test.d.ts +2 -0
  29. package/dist/__tests__/model-routing-override-three-site-sync.test.d.ts.map +1 -0
  30. package/dist/__tests__/model-routing-override-three-site-sync.test.js +75 -0
  31. package/dist/__tests__/model-routing-override-three-site-sync.test.js.map +1 -0
  32. package/dist/__tests__/non-claude-provider-detection.test.js +37 -0
  33. package/dist/__tests__/non-claude-provider-detection.test.js.map +1 -1
  34. package/dist/__tests__/package-dir-resolution-regression.test.js +25 -0
  35. package/dist/__tests__/package-dir-resolution-regression.test.js.map +1 -1
  36. package/dist/__tests__/pre-tool-enforcer.test.js +304 -0
  37. package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -1
  38. package/dist/__tests__/session-start-script-context.test.js +121 -0
  39. package/dist/__tests__/session-start-script-context.test.js.map +1 -1
  40. package/dist/__tests__/setup-claude-md-script.test.js +44 -1
  41. package/dist/__tests__/setup-claude-md-script.test.js.map +1 -1
  42. package/dist/__tests__/skills.test.js +77 -7
  43. package/dist/__tests__/skills.test.js.map +1 -1
  44. package/dist/__tests__/wiki-hook-output-format.test.d.ts +2 -0
  45. package/dist/__tests__/wiki-hook-output-format.test.d.ts.map +1 -0
  46. package/dist/__tests__/wiki-hook-output-format.test.js +59 -0
  47. package/dist/__tests__/wiki-hook-output-format.test.js.map +1 -0
  48. package/dist/agents/definitions.d.ts.map +1 -1
  49. package/dist/agents/definitions.js +2 -1
  50. package/dist/agents/definitions.js.map +1 -1
  51. package/dist/autoresearch/__tests__/decide-outcome.test.d.ts +2 -0
  52. package/dist/autoresearch/__tests__/decide-outcome.test.d.ts.map +1 -0
  53. package/dist/autoresearch/__tests__/decide-outcome.test.js +69 -0
  54. package/dist/autoresearch/__tests__/decide-outcome.test.js.map +1 -0
  55. package/dist/autoresearch/runtime.d.ts.map +1 -1
  56. package/dist/autoresearch/runtime.js +16 -2
  57. package/dist/autoresearch/runtime.js.map +1 -1
  58. package/dist/cli/__tests__/launch.test.js +23 -0
  59. package/dist/cli/__tests__/launch.test.js.map +1 -1
  60. package/dist/cli/__tests__/self-improve-paths.test.js +3 -2
  61. package/dist/cli/__tests__/self-improve-paths.test.js.map +1 -1
  62. package/dist/cli/__tests__/team.test.js +100 -0
  63. package/dist/cli/__tests__/team.test.js.map +1 -1
  64. package/dist/cli/commands/__tests__/team-role-shorthand.test.js +30 -0
  65. package/dist/cli/commands/__tests__/team-role-shorthand.test.js.map +1 -1
  66. package/dist/cli/commands/__tests__/team.test.js +48 -1
  67. package/dist/cli/commands/__tests__/team.test.js.map +1 -1
  68. package/dist/cli/commands/team.d.ts +2 -0
  69. package/dist/cli/commands/team.d.ts.map +1 -1
  70. package/dist/cli/commands/team.js +9 -2
  71. package/dist/cli/commands/team.js.map +1 -1
  72. package/dist/cli/launch.d.ts.map +1 -1
  73. package/dist/cli/launch.js +7 -0
  74. package/dist/cli/launch.js.map +1 -1
  75. package/dist/cli/team.d.ts.map +1 -1
  76. package/dist/cli/team.js +34 -3
  77. package/dist/cli/team.js.map +1 -1
  78. package/dist/config/__tests__/loader.test.js +35 -4
  79. package/dist/config/__tests__/loader.test.js.map +1 -1
  80. package/dist/config/__tests__/models.test.js +126 -3
  81. package/dist/config/__tests__/models.test.js.map +1 -1
  82. package/dist/config/models.d.ts +8 -0
  83. package/dist/config/models.d.ts.map +1 -1
  84. package/dist/config/models.js +119 -8
  85. package/dist/config/models.js.map +1 -1
  86. package/dist/features/auto-update.d.ts.map +1 -1
  87. package/dist/features/auto-update.js +53 -5
  88. package/dist/features/auto-update.js.map +1 -1
  89. package/dist/features/delegation-enforcer.d.ts.map +1 -1
  90. package/dist/features/delegation-enforcer.js +10 -9
  91. package/dist/features/delegation-enforcer.js.map +1 -1
  92. package/dist/hooks/__tests__/bridge-routing.test.js +1 -0
  93. package/dist/hooks/__tests__/bridge-routing.test.js.map +1 -1
  94. package/dist/hooks/autopilot/enforcement.d.ts.map +1 -1
  95. package/dist/hooks/autopilot/enforcement.js +19 -0
  96. package/dist/hooks/autopilot/enforcement.js.map +1 -1
  97. package/dist/hooks/bridge.d.ts.map +1 -1
  98. package/dist/hooks/bridge.js +135 -4
  99. package/dist/hooks/bridge.js.map +1 -1
  100. package/dist/hooks/persistent-mode/index.d.ts +6 -0
  101. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  102. package/dist/hooks/persistent-mode/index.js +96 -0
  103. package/dist/hooks/persistent-mode/index.js.map +1 -1
  104. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js +152 -23
  105. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js.map +1 -1
  106. package/dist/hooks/session-end/index.d.ts +9 -2
  107. package/dist/hooks/session-end/index.d.ts.map +1 -1
  108. package/dist/hooks/session-end/index.js +90 -35
  109. package/dist/hooks/session-end/index.js.map +1 -1
  110. package/dist/hud/stdin.d.ts +12 -1
  111. package/dist/hud/stdin.d.ts.map +1 -1
  112. package/dist/hud/stdin.js +123 -18
  113. package/dist/hud/stdin.js.map +1 -1
  114. package/dist/hud/types.d.ts +1 -0
  115. package/dist/hud/types.d.ts.map +1 -1
  116. package/dist/hud/types.js.map +1 -1
  117. package/dist/installer/__tests__/session-start-template.test.d.ts +2 -0
  118. package/dist/installer/__tests__/session-start-template.test.d.ts.map +1 -0
  119. package/dist/installer/__tests__/session-start-template.test.js +174 -0
  120. package/dist/installer/__tests__/session-start-template.test.js.map +1 -0
  121. package/dist/lib/__tests__/mode-state-io.test.js +75 -12
  122. package/dist/lib/__tests__/mode-state-io.test.js.map +1 -1
  123. package/dist/lib/mode-state-io.d.ts +11 -0
  124. package/dist/lib/mode-state-io.d.ts.map +1 -1
  125. package/dist/lib/mode-state-io.js +64 -0
  126. package/dist/lib/mode-state-io.js.map +1 -1
  127. package/dist/lib/worktree-paths.d.ts +12 -0
  128. package/dist/lib/worktree-paths.d.ts.map +1 -1
  129. package/dist/lib/worktree-paths.js +75 -0
  130. package/dist/lib/worktree-paths.js.map +1 -1
  131. package/dist/planning/__tests__/artifacts.test.d.ts +2 -0
  132. package/dist/planning/__tests__/artifacts.test.d.ts.map +1 -0
  133. package/dist/planning/__tests__/artifacts.test.js +486 -0
  134. package/dist/planning/__tests__/artifacts.test.js.map +1 -0
  135. package/dist/planning/artifact-names.d.ts +13 -0
  136. package/dist/planning/artifact-names.d.ts.map +1 -0
  137. package/dist/planning/artifact-names.js +108 -0
  138. package/dist/planning/artifact-names.js.map +1 -0
  139. package/dist/planning/artifacts.d.ts +47 -0
  140. package/dist/planning/artifacts.d.ts.map +1 -0
  141. package/dist/planning/artifacts.js +221 -0
  142. package/dist/planning/artifacts.js.map +1 -0
  143. package/dist/team/__tests__/api-interop.compatibility.test.js +194 -5
  144. package/dist/team/__tests__/api-interop.compatibility.test.js.map +1 -1
  145. package/dist/team/__tests__/model-contract.test.js +92 -2
  146. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  147. package/dist/team/__tests__/runtime-v2.dispatch.test.js +30 -0
  148. package/dist/team/__tests__/runtime-v2.dispatch.test.js.map +1 -1
  149. package/dist/team/__tests__/scaling.test.js +39 -1
  150. package/dist/team/__tests__/scaling.test.js.map +1 -1
  151. package/dist/team/__tests__/worker-bootstrap.test.js +6 -0
  152. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  153. package/dist/team/api-interop.d.ts.map +1 -1
  154. package/dist/team/api-interop.js +89 -2
  155. package/dist/team/api-interop.js.map +1 -1
  156. package/dist/team/delegation-evidence.d.ts +5 -0
  157. package/dist/team/delegation-evidence.d.ts.map +1 -0
  158. package/dist/team/delegation-evidence.js +29 -0
  159. package/dist/team/delegation-evidence.js.map +1 -0
  160. package/dist/team/model-contract.d.ts +8 -0
  161. package/dist/team/model-contract.d.ts.map +1 -1
  162. package/dist/team/model-contract.js +13 -0
  163. package/dist/team/model-contract.js.map +1 -1
  164. package/dist/team/runtime-v2.d.ts +2 -1
  165. package/dist/team/runtime-v2.d.ts.map +1 -1
  166. package/dist/team/runtime-v2.js +3 -1
  167. package/dist/team/runtime-v2.js.map +1 -1
  168. package/dist/team/state/tasks.d.ts +4 -1
  169. package/dist/team/state/tasks.d.ts.map +1 -1
  170. package/dist/team/state/tasks.js +38 -1
  171. package/dist/team/state/tasks.js.map +1 -1
  172. package/dist/team/team-ops.d.ts +4 -1
  173. package/dist/team/team-ops.d.ts.map +1 -1
  174. package/dist/team/team-ops.js +2 -2
  175. package/dist/team/team-ops.js.map +1 -1
  176. package/dist/team/types.d.ts +22 -1
  177. package/dist/team/types.d.ts.map +1 -1
  178. package/dist/team/types.js.map +1 -1
  179. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  180. package/dist/team/worker-bootstrap.js +6 -1
  181. package/dist/team/worker-bootstrap.js.map +1 -1
  182. package/dist/tools/__tests__/state-tools.test.js +322 -5
  183. package/dist/tools/__tests__/state-tools.test.js.map +1 -1
  184. package/dist/tools/__tests__/wiki-tools-working-directory.test.d.ts +2 -0
  185. package/dist/tools/__tests__/wiki-tools-working-directory.test.d.ts.map +1 -0
  186. package/dist/tools/__tests__/wiki-tools-working-directory.test.js +66 -0
  187. package/dist/tools/__tests__/wiki-tools-working-directory.test.js.map +1 -0
  188. package/dist/tools/state-tools.d.ts +3 -10
  189. package/dist/tools/state-tools.d.ts.map +1 -1
  190. package/dist/tools/state-tools.js +393 -91
  191. package/dist/tools/state-tools.js.map +1 -1
  192. package/dist/tools/wiki-tools.js +8 -8
  193. package/dist/tools/wiki-tools.js.map +1 -1
  194. package/docs/GETTING-STARTED.md +7 -0
  195. package/docs/REFERENCE.md +5 -5
  196. package/docs/copilot-instructions.md +1 -1
  197. package/package.json +1 -1
  198. package/scripts/lib/model-routing-override-message.mjs +21 -0
  199. package/scripts/persistent-mode.cjs +107 -0
  200. package/scripts/persistent-mode.mjs +102 -0
  201. package/scripts/post-tool-verifier.mjs +1 -0
  202. package/scripts/pre-tool-enforcer.mjs +163 -2
  203. package/scripts/session-start.mjs +63 -0
  204. package/scripts/setup-copilot-instructions.sh +12 -2
  205. package/scripts/wiki-pre-compact.mjs +1 -4
  206. package/skills/configure-notifications/SKILL.md +3 -3
  207. package/skills/deep-dive/SKILL.md +52 -4
  208. package/skills/deep-interview/SKILL.md +109 -15
  209. package/skills/mcp-setup/SKILL.md +60 -45
  210. package/skills/omc-setup/SKILL.md +3 -3
  211. package/skills/omc-setup/phases/01-install-claude-md.md +1 -1
  212. package/skills/omc-setup/phases/04-welcome.md +8 -8
  213. package/skills/plan/SKILL.md +1 -1
  214. package/skills/project-session-manager/SKILL.md +2 -2
  215. package/skills/project-session-manager/psm.sh +1 -1
  216. package/skills/ralplan/SKILL.md +2 -2
  217. package/templates/hooks/lib/model-routing-override-message.mjs +21 -0
  218. package/templates/hooks/persistent-mode.mjs +66 -0
  219. package/templates/hooks/session-start.mjs +62 -0
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { pathToFileURL } from 'node:url';
3
+ import { resolve } from 'node:path';
4
+ // extractOverrideBlock assumes no nested <system-reminder> blocks inside the
5
+ // override text; if nested reminders are ever introduced, this helper must
6
+ // become depth-aware.
7
+ function extractOverrideBlock(source) {
8
+ const start = source.indexOf('[MODEL ROUTING OVERRIDE');
9
+ if (start < 0)
10
+ return '';
11
+ const end = source.indexOf('</system-reminder>', start);
12
+ if (end < 0)
13
+ return '';
14
+ return source.slice(start, end);
15
+ }
16
+ describe('MODEL ROUTING OVERRIDE message — three-site sync', () => {
17
+ const ORIGINAL_ENV = { ...process.env };
18
+ beforeEach(() => {
19
+ delete process.env.CLAUDE_CODE_USE_BEDROCK;
20
+ delete process.env.CLAUDE_CODE_USE_VERTEX;
21
+ });
22
+ afterEach(() => {
23
+ process.env = { ...ORIGINAL_ENV };
24
+ });
25
+ // REQUIRED canary — guarantees bridge emission path is exercisable from
26
+ // Vitest. Harness pattern from src/__tests__/bedrock-model-routing.test.ts:445-477.
27
+ it('bridge emits MODEL ROUTING OVERRIDE block under forced Bedrock env', async () => {
28
+ process.env.CLAUDE_CODE_USE_BEDROCK = '1';
29
+ const bridge = await import('../hooks/bridge.js');
30
+ const result = await bridge.processHook('session-start', {
31
+ sessionId: 'three-site-sync-test',
32
+ directory: process.cwd(),
33
+ });
34
+ const parsed = typeof result === 'string' ? JSON.parse(result) : result;
35
+ const bridgeBlock = extractOverrideBlock(parsed.message ?? '');
36
+ expect(bridgeBlock).not.toBe('');
37
+ expect(bridgeBlock).toContain('MODEL ROUTING OVERRIDE');
38
+ });
39
+ it('all three emission sites produce byte-equal override text', async () => {
40
+ process.env.CLAUDE_CODE_USE_BEDROCK = '1';
41
+ // Import the shared constant from the side-effect-free lib modules instead
42
+ // of the hook entrypoints (which call main() at load time). Both lib copies
43
+ // (scripts/lib/ and templates/hooks/lib/) are checked for mutual equality.
44
+ const scriptsLibUrl = pathToFileURL(resolve(__dirname, '../../scripts/lib/model-routing-override-message.mjs')).href;
45
+ const scriptsLibMod = await import(scriptsLibUrl);
46
+ const scriptsSlice = extractOverrideBlock(scriptsLibMod.MODEL_ROUTING_OVERRIDE_MESSAGE);
47
+ const templateLibUrl = pathToFileURL(resolve(__dirname, '../../templates/hooks/lib/model-routing-override-message.mjs')).href;
48
+ const templateLibMod = await import(templateLibUrl);
49
+ const templateSlice = extractOverrideBlock(templateLibMod.MODEL_ROUTING_OVERRIDE_MESSAGE);
50
+ const bridge = await import('../hooks/bridge.js');
51
+ const result = await bridge.processHook('session-start', {
52
+ sessionId: 'three-site-sync-test',
53
+ directory: process.cwd(),
54
+ });
55
+ const parsed = typeof result === 'string' ? JSON.parse(result) : result;
56
+ const bridgeBlock = extractOverrideBlock(parsed.message ?? '');
57
+ expect(scriptsSlice).not.toBe('');
58
+ expect(templateSlice).not.toBe('');
59
+ expect(bridgeBlock).not.toBe('');
60
+ // 3-way byte-equal (unconditional — no guard).
61
+ expect(templateSlice).toBe(scriptsSlice);
62
+ expect(bridgeBlock).toBe(scriptsSlice);
63
+ // Prescriptive shape applied to all three.
64
+ for (const block of [scriptsSlice, templateSlice, bridgeBlock]) {
65
+ expect(block).toMatch(/ANTHROPIC_DEFAULT_SONNET_MODEL|CLAUDE_CODE_BEDROCK_SONNET_MODEL|OMC_SUBAGENT_MODEL/);
66
+ expect(block).toMatch(/\[1m\][\s\S]{0,200}REQUIRED/);
67
+ expect(block).toContain('MODEL ROUTING OVERRIDE');
68
+ expect(block).toContain('NON-STANDARD PROVIDER DETECTED');
69
+ expect(block).toContain('tier alias');
70
+ expect(block).not.toContain('Do NOT pass the `model` parameter');
71
+ expect(block).not.toContain('always omit');
72
+ }
73
+ });
74
+ });
75
+ //# sourceMappingURL=model-routing-override-three-site-sync.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-routing-override-three-site-sync.test.js","sourceRoot":"","sources":["../../src/__tests__/model-routing-override-three-site-sync.test.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,15 @@ describe('isNonCopilotProvider (issue #1201)', () => {
19
19
  'OMC_ROUTING_FORCE_INHERIT',
20
20
  'CLAUDE_CODE_USE_BEDROCK',
21
21
  'CLAUDE_CODE_USE_VERTEX',
22
+ 'OMC_MODEL_HIGH',
23
+ 'OMC_MODEL_MEDIUM',
24
+ 'OMC_MODEL_LOW',
25
+ 'CLAUDE_CODE_BEDROCK_OPUS_MODEL',
26
+ 'CLAUDE_CODE_BEDROCK_SONNET_MODEL',
27
+ 'CLAUDE_CODE_BEDROCK_HAIKU_MODEL',
28
+ 'ANTHROPIC_DEFAULT_OPUS_MODEL',
29
+ 'ANTHROPIC_DEFAULT_SONNET_MODEL',
30
+ 'ANTHROPIC_DEFAULT_HAIKU_MODEL',
22
31
  ];
23
32
  beforeEach(() => {
24
33
  for (const key of envKeys) {
@@ -71,6 +80,18 @@ describe('isNonCopilotProvider (issue #1201)', () => {
71
80
  process.env.CLAUDE_MODEL = 'Copilot-Sonnet-4-6';
72
81
  expect(isNonCopilotProvider()).toBe(false);
73
82
  });
83
+ // TODO(port-2866 path-B): tier-env-based provider detection is upstream-only.
84
+ // Fork's isNonCopilotProvider() only checks CLAUDE_MODEL/ANTHROPIC_MODEL, not
85
+ // ANTHROPIC_DEFAULT_*_MODEL or OMC_MODEL_*. Re-enable if fork adopts upstream's
86
+ // hasNonClaudeModelId(getProviderDetectionModelEnvValues()) approach.
87
+ it.skip('returns true when ANTHROPIC_DEFAULT_SONNET_MODEL is non-Claude', () => {
88
+ process.env.ANTHROPIC_DEFAULT_SONNET_MODEL = 'kimi-k2.6:cloud';
89
+ expect(isNonCopilotProvider()).toBe(true);
90
+ });
91
+ it.skip('returns true when OMC_MODEL_MEDIUM is non-Claude', () => {
92
+ process.env.OMC_MODEL_MEDIUM = 'glm-5.1:cloud';
93
+ expect(isNonCopilotProvider()).toBe(true);
94
+ });
74
95
  // --- Bedrock detection ---
75
96
  it('returns true when CLAUDE_CODE_USE_BEDROCK=1', () => {
76
97
  process.env.CLAUDE_CODE_USE_BEDROCK = '1';
@@ -225,6 +246,15 @@ describe('loadConfig auto-enables forceInherit for non-Copilot providers (issue
225
246
  'OMC_ROUTING_FORCE_INHERIT',
226
247
  'CLAUDE_CODE_USE_BEDROCK',
227
248
  'CLAUDE_CODE_USE_VERTEX',
249
+ 'OMC_MODEL_HIGH',
250
+ 'OMC_MODEL_MEDIUM',
251
+ 'OMC_MODEL_LOW',
252
+ 'CLAUDE_CODE_BEDROCK_OPUS_MODEL',
253
+ 'CLAUDE_CODE_BEDROCK_SONNET_MODEL',
254
+ 'CLAUDE_CODE_BEDROCK_HAIKU_MODEL',
255
+ 'ANTHROPIC_DEFAULT_OPUS_MODEL',
256
+ 'ANTHROPIC_DEFAULT_SONNET_MODEL',
257
+ 'ANTHROPIC_DEFAULT_HAIKU_MODEL',
228
258
  ];
229
259
  beforeEach(() => {
230
260
  for (const key of envKeys) {
@@ -247,6 +277,13 @@ describe('loadConfig auto-enables forceInherit for non-Copilot providers (issue
247
277
  const config = loadConfig();
248
278
  expect(config.routing?.forceInherit).toBe(true);
249
279
  });
280
+ it('does not auto-enable forceInherit for partial OMC tier env overrides', () => {
281
+ process.env.OMC_MODEL_HIGH = 'glm-5.1:cloud';
282
+ const config = loadConfig();
283
+ expect(config.routing?.forceInherit).toBe(false);
284
+ expect(config.agents?.architect?.model).toBe('glm-5.1:cloud');
285
+ expect(config.agents?.executor?.model).toContain('claude-sonnet');
286
+ });
250
287
  it('auto-enables forceInherit when ANTHROPIC_BASE_URL is non-Anthropic', () => {
251
288
  process.env.ANTHROPIC_BASE_URL = 'https://litellm.example.com/v1';
252
289
  const config = loadConfig();
@@ -1 +1 @@
1
- {"version":3,"file":"non-claude-provider-detection.test.js","sourceRoot":"","sources":["../../src/__tests__/non-claude-provider-detection.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"non-claude-provider-detection.test.js","sourceRoot":"","sources":["../../src/__tests__/non-claude-provider-detection.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,MAAM,QAAQ,GAAuC,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG;QACd,cAAc;QACd,iBAAiB;QACjB,oBAAoB;QACpB,2BAA2B;QAC3B,yBAAyB;QACzB,wBAAwB;QACxB,gBAAgB;QAChB,kBAAkB;QAClB,eAAe;QACf,gCAAgC;QAChC,kCAAkC;QAClC,iCAAiC;QACjC,8BAA8B;QAC9B,gCAAgC;QAChC,+BAA+B;KAChC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC;QACnC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,iBAAiB,CAAC;QAChD,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAC;QAC/C,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,iCAAiC,CAAC;QACnE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,8BAA8B,CAAC;QAChE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,MAAM,CAAC;QAC/C,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;QACrC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,oBAAoB,CAAC;QAChD,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,8EAA8E;IAC9E,gFAAgF;IAChF,sEAAsE;IACtE,EAAE,CAAC,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAC7E,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,iBAAiB,CAAC;QAC/D,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC/D,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAC/C,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,4BAA4B;IAE5B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,qCAAqC,CAAC;QACjE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,kDAAkD,CAAC;QAC9E,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,wCAAwC,CAAC;QACvE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,qCAAqC,CAAC;QACjE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,8BAA8B;IAE9B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,GAAG,CAAC;QACzC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,6BAA6B,CAAC;QACzD,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,QAAQ,GAAuC,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,CAAC,yBAAyB,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAE/E,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,qCAAqC,CAAC;QACjE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,kDAAkD,CAAC;QACjF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,wCAAwC,CAAC;QACpE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mCAAmC,CAAC;QAC/D,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,qCAAqC,CAAC;QACpE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAC;QAC/C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC;QACnC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,qCAAqC,CAAC;QACpE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,QAAQ,GAAuC,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,CAAC,wBAAwB,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAE9E,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,GAAG,CAAC;QACzC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,GAAG,CAAC;QACzC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,6BAA6B,CAAC;QACzD,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,6BAA6B,CAAC;QAC5D,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,6BAA6B,CAAC;QACzD,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAC;QAC/C,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,qCAAqC,CAAC;QACjE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8EAA8E,EAAE,GAAG,EAAE;IAC5F,MAAM,QAAQ,GAAuC,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG;QACd,cAAc;QACd,iBAAiB;QACjB,oBAAoB;QACpB,2BAA2B;QAC3B,yBAAyB;QACzB,wBAAwB;QACxB,gBAAgB;QAChB,kBAAkB;QAClB,eAAe;QACf,gCAAgC;QAChC,kCAAkC;QAClC,iCAAiC;QACjC,8BAA8B;QAC9B,gCAAgC;QAChC,+BAA+B;KAChC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC;QACnC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,eAAe,CAAC;QAC7C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,gCAAgC,CAAC;QAClE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,OAAO,CAAC;QAChD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,iEAAiE;QACjE,oEAAoE;QACpE,gEAAgE;QAChE,8BAA8B;QAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,MAAM,CAAC;QAC/C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,8BAA8B;IAE9B,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,qCAAqC,CAAC;QACpE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,OAAO,CAAC;QAChD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAEhC,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,GAAG,CAAC;QACzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,6BAA6B,CAAC;QACzD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -43,6 +43,31 @@ describe('package dir resolution regression (#1322, #1324)', () => {
43
43
  expect(snippet).toContain('fileURLToPath)(import_meta.url)');
44
44
  expect(snippet.indexOf('typeof __dirname !== "undefined"')).toBeLessThan(snippet.indexOf('fileURLToPath)(import_meta.url)'));
45
45
  });
46
+ it('bridge/cli.cjs keeps builtin skills package-dir resolution bridge-aware', () => {
47
+ const source = readFileSync(join(REPO_ROOT, 'bridge', 'cli.cjs'), 'utf-8');
48
+ const skillsDirIndex = source.indexOf('var SKILLS_DIR2 =');
49
+ const helperIndex = source.lastIndexOf('function getPackageDir', skillsDirIndex);
50
+ const snippet = helperIndex === -1 ? '' : source.slice(helperIndex, helperIndex + 1400);
51
+ expect(snippet).toContain('typeof __dirname !== "undefined"');
52
+ expect(snippet).toContain('currentDirName === "bridge"');
53
+ expect(snippet).toContain('fileURLToPath)(importMetaUrl)');
54
+ expect(snippet.indexOf('typeof __dirname !== "undefined"')).toBeLessThan(snippet.indexOf('fileURLToPath)(importMetaUrl)'));
55
+ });
56
+ it('bridge/team.js keeps import.meta package-dir resolution bridge-aware', () => {
57
+ const source = readFileSync(join(REPO_ROOT, 'bridge', 'team.js'), 'utf-8');
58
+ const snippet = getSnippetByMarker(source, 'function getPackageDir() {');
59
+ const importMetaIndex = snippet.indexOf('fileURLToPath(import.meta.url)');
60
+ const importMetaSnippet = importMetaIndex === -1 ? '' : snippet.slice(importMetaIndex);
61
+ const importMetaBridgeBranchIndex = importMetaSnippet.indexOf('currentDirName === "bridge"');
62
+ const importMetaBridgeReturnIndex = importMetaSnippet.search(/return join\d+\(__dirname\d+, "\.\."\)/);
63
+ const importMetaDefaultReturnIndex = importMetaSnippet.search(/return join\d+\(__dirname\d+, "\.\.", "\.\."\)/);
64
+ expect(snippet).toContain('fileURLToPath(import.meta.url)');
65
+ expect(snippet).toContain('currentDirName === "bridge"');
66
+ expect(importMetaSnippet).not.toBe('');
67
+ expect(importMetaBridgeBranchIndex).toBeGreaterThanOrEqual(0);
68
+ expect(importMetaBridgeReturnIndex).toBeGreaterThan(importMetaBridgeBranchIndex);
69
+ expect(importMetaBridgeReturnIndex).toBeLessThan(importMetaDefaultReturnIndex);
70
+ });
46
71
  it('loadAgentPrompt resolves prompts even when cwd is unrelated', () => {
47
72
  const sandboxDir = mkdtempSync(join(tmpdir(), 'omc-agents-path-resolution-'));
48
73
  process.chdir(sandboxDir);
@@ -1 +1 @@
1
- {"version":3,"file":"package-dir-resolution-regression.test.js","sourceRoot":"","sources":["../../src/__tests__/package-dir-resolution-regression.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-dir-resolution-regression.test.js","sourceRoot":"","sources":["../../src/__tests__/package-dir-resolution-regression.test.ts"],"names":[],"mappings":"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"}
@@ -184,6 +184,45 @@ describe('pre-tool-enforcer fallback gating (issue #970)', () => {
184
184
  expect(String(hookSpecificOutput.additionalContext)).not.toContain('TEAM ROUTING REQUIRED');
185
185
  expect(String(hookSpecificOutput.additionalContext)).toContain('Spawning agent');
186
186
  });
187
+ it('suppresses built-in TaskCreate task-list operation chatter', () => {
188
+ const output = runPreToolEnforcer({
189
+ tool_name: 'TaskCreate',
190
+ toolInput: {
191
+ title: 'Inspect hook behavior',
192
+ status: 'pending',
193
+ },
194
+ cwd: tempDir,
195
+ session_id: 'session-taskcreate-builtin',
196
+ });
197
+ expect(output).toEqual({ continue: true, suppressOutput: true });
198
+ });
199
+ it('suppresses built-in TaskUpdate task-list operation chatter', () => {
200
+ const output = runPreToolEnforcer({
201
+ tool_name: 'TaskUpdate',
202
+ toolInput: {
203
+ id: 'task-1',
204
+ status: 'in_progress',
205
+ },
206
+ cwd: tempDir,
207
+ session_id: 'session-taskupdate-builtin',
208
+ });
209
+ expect(output).toEqual({ continue: true, suppressOutput: true });
210
+ });
211
+ it('preserves Agent spawn warnings for real subagent delegation', () => {
212
+ const output = runPreToolEnforcer({
213
+ tool_name: 'Agent',
214
+ toolInput: {
215
+ subagent_type: 'oh-my-claudecode:executor',
216
+ description: 'Fix type errors',
217
+ prompt: 'Fix all type errors in src/auth/',
218
+ },
219
+ cwd: tempDir,
220
+ session_id: 'session-agent-spawn',
221
+ });
222
+ const hookSpecificOutput = output.hookSpecificOutput;
223
+ expect(output.continue).toBe(true);
224
+ expect(String(hookSpecificOutput.additionalContext)).toContain('Spawning agent: oh-my-claudecode:executor');
225
+ });
187
226
  it('reads team state from legacy path when session_id is absent', () => {
188
227
  writeJson(join(tempDir, '.omcp', 'state', 'team-state.json'), {
189
228
  active: true,
@@ -293,6 +332,271 @@ describe('pre-tool-enforcer fallback gating (issue #970)', () => {
293
332
  }, { OMC_QUIET: '2' });
294
333
  expect(output).toEqual({ continue: true, suppressOutput: true });
295
334
  });
335
+ it('warns without blocking when Task prompt uses fallback or workaround language', () => {
336
+ const output = runPreToolEnforcer({
337
+ tool_name: 'Task',
338
+ toolInput: {
339
+ subagent_type: 'oh-my-copilot:executor',
340
+ description: 'Implement a fallback',
341
+ prompt: 'Add a workaround if the normal architecture is hard.',
342
+ },
343
+ cwd: tempDir,
344
+ session_id: 'session-slop-warning',
345
+ });
346
+ const hookSpecificOutput = output.hookSpecificOutput;
347
+ const context = String(hookSpecificOutput.additionalContext);
348
+ expect(output.continue).toBe(true);
349
+ expect(hookSpecificOutput.hookEventName).toBe('PreToolUse');
350
+ expect(context).toContain('[SLOP WARNING]');
351
+ expect(context).toContain('Do not make potential slop');
352
+ expect(context).toContain('consult the architect');
353
+ expect(context).toContain('ask the user to confirm constraints');
354
+ expect(context).toContain('Spawning agent');
355
+ expect(hookSpecificOutput).not.toHaveProperty('permissionDecision');
356
+ });
357
+ it('keeps slop warning visible even when routine reminders are quieted', () => {
358
+ const output = runPreToolEnforcerWithEnv({
359
+ tool_name: 'Bash',
360
+ toolInput: {
361
+ command: 'node scripts/add-fallback-workaround.mjs',
362
+ },
363
+ cwd: tempDir,
364
+ session_id: 'session-slop-warning-quiet',
365
+ }, { OMC_QUIET: '2' });
366
+ const hookSpecificOutput = output.hookSpecificOutput;
367
+ const context = String(hookSpecificOutput.additionalContext);
368
+ expect(output.continue).toBe(true);
369
+ expect(context).toContain('[SLOP WARNING]');
370
+ expect(context).not.toContain('Use parallel execution');
371
+ });
372
+ it('does not warn for documentation edits that describe workaround terms as nouns', () => {
373
+ const output = runPreToolEnforcer({
374
+ tool_name: 'Write',
375
+ toolInput: {
376
+ file_path: join(tempDir, 'docs', 'troubleshooting.md'),
377
+ content: [
378
+ '# Troubleshooting',
379
+ '',
380
+ 'Document workaround for a specific bug in the troubleshooting guide.',
381
+ 'This section explains when the workaround term appears in instructions.',
382
+ ].join('\n'),
383
+ },
384
+ cwd: tempDir,
385
+ session_id: 'session-slop-doc-text',
386
+ });
387
+ const hookSpecificOutput = output.hookSpecificOutput;
388
+ expect(output.continue).toBe(true);
389
+ expect(String(hookSpecificOutput.additionalContext)).not.toContain('[SLOP WARNING]');
390
+ });
391
+ it('does not warn for self-referential pre-tool enforcer edits that document the rule', () => {
392
+ const output = runPreToolEnforcer({
393
+ tool_name: 'Edit',
394
+ toolInput: {
395
+ file_path: 'scripts/pre-tool-enforcer.mjs',
396
+ old_string: 'const SLOP_FALLBACK_LANGUAGE_PATTERN = /fallback|workaround/i;',
397
+ new_string: [
398
+ '// The fallback/workaround detector should avoid warning on rule documentation.',
399
+ 'const SLOP_FALLBACK_LANGUAGE_PATTERN = /fallback|workaround/i;',
400
+ ].join('\n'),
401
+ },
402
+ cwd: tempDir,
403
+ session_id: 'session-slop-self-reference',
404
+ });
405
+ const hookSpecificOutput = output.hookSpecificOutput;
406
+ expect(output.continue).toBe(true);
407
+ expect(String(hookSpecificOutput.additionalContext)).not.toContain('[SLOP WARNING]');
408
+ });
409
+ it('still warns for action-shaped fallback narration outside documentation contexts', () => {
410
+ const output = runPreToolEnforcer({
411
+ tool_name: 'Task',
412
+ toolInput: {
413
+ subagent_type: 'oh-my-claudecode:executor',
414
+ description: 'Implement fallback routing',
415
+ prompt: 'Please implement a fallback layer for the flaky API.',
416
+ },
417
+ cwd: tempDir,
418
+ session_id: 'session-slop-action-shaped',
419
+ });
420
+ const hookSpecificOutput = output.hookSpecificOutput;
421
+ expect(output.continue).toBe(true);
422
+ expect(String(hookSpecificOutput.additionalContext)).toContain('[SLOP WARNING]');
423
+ });
424
+ it('warns for natural work-around phrasing with direct noun objects', () => {
425
+ const output = runPreToolEnforcer({
426
+ tool_name: 'Task',
427
+ toolInput: {
428
+ subagent_type: 'oh-my-claudecode:executor',
429
+ description: 'Skip architecture for flaky API failures',
430
+ prompt: 'Please work around flaky API failures by skipping the normal architecture.',
431
+ },
432
+ cwd: tempDir,
433
+ session_id: 'session-slop-work-around-noun-object',
434
+ });
435
+ const hookSpecificOutput = output.hookSpecificOutput;
436
+ expect(output.continue).toBe(true);
437
+ expect(String(hookSpecificOutput.additionalContext)).toContain('[SLOP WARNING]');
438
+ });
439
+ it('warns for fall back on cached responses phrasing', () => {
440
+ const output = runPreToolEnforcer({
441
+ tool_name: 'Task',
442
+ toolInput: {
443
+ subagent_type: 'oh-my-claudecode:executor',
444
+ description: 'Add API fallback',
445
+ prompt: 'If the API fails, fall back on cached responses.',
446
+ },
447
+ cwd: tempDir,
448
+ session_id: 'session-slop-fall-back-on',
449
+ });
450
+ const hookSpecificOutput = output.hookSpecificOutput;
451
+ expect(output.continue).toBe(true);
452
+ expect(String(hookSpecificOutput.additionalContext)).toContain('[SLOP WARNING]');
453
+ });
454
+ it('warns for single-word fallback to cached responses phrasing', () => {
455
+ const output = runPreToolEnforcer({
456
+ tool_name: 'Task',
457
+ toolInput: {
458
+ subagent_type: 'oh-my-claudecode:executor',
459
+ description: 'Add API fallback',
460
+ prompt: 'If the API fails, fallback to cached responses.',
461
+ },
462
+ cwd: tempDir,
463
+ session_id: 'session-slop-fallback-to',
464
+ });
465
+ const hookSpecificOutput = output.hookSpecificOutput;
466
+ expect(output.continue).toBe(true);
467
+ expect(String(hookSpecificOutput.additionalContext)).toContain('[SLOP WARNING]');
468
+ });
469
+ it('does not treat markdown headings alone as documentation context for Task prompts', () => {
470
+ const output = runPreToolEnforcer({
471
+ tool_name: 'Task',
472
+ toolInput: {
473
+ subagent_type: 'oh-my-claudecode:executor',
474
+ description: 'Implement fallback routing',
475
+ prompt: [
476
+ '## Implementation',
477
+ '',
478
+ 'Please implement a fallback layer and explain why.',
479
+ ].join('\n'),
480
+ },
481
+ cwd: tempDir,
482
+ session_id: 'session-slop-markdown-task',
483
+ });
484
+ const hookSpecificOutput = output.hookSpecificOutput;
485
+ expect(output.continue).toBe(true);
486
+ expect(String(hookSpecificOutput.additionalContext)).toContain('[SLOP WARNING]');
487
+ });
488
+ it('does not warn for documentation edits that quote action-shaped work-around wording', () => {
489
+ const output = runPreToolEnforcer({
490
+ tool_name: 'Write',
491
+ toolInput: {
492
+ file_path: join(tempDir, 'docs', 'architecture-notes.md'),
493
+ content: [
494
+ '# Architecture notes',
495
+ '',
496
+ 'Explain why the phrase "Please work around flaky API failures" should be reviewed carefully.',
497
+ ].join('\n'),
498
+ },
499
+ cwd: tempDir,
500
+ session_id: 'session-slop-doc-action-shaped',
501
+ });
502
+ const hookSpecificOutput = output.hookSpecificOutput;
503
+ expect(output.continue).toBe(true);
504
+ expect(String(hookSpecificOutput.additionalContext)).not.toContain('[SLOP WARNING]');
505
+ });
506
+ it('does not warn for read-only search tools that mention fallback as the query', () => {
507
+ const output = runPreToolEnforcer({
508
+ tool_name: 'Grep',
509
+ toolInput: {
510
+ pattern: 'fallback|workaround',
511
+ },
512
+ cwd: tempDir,
513
+ session_id: 'session-slop-search',
514
+ });
515
+ const hookSpecificOutput = output.hookSpecificOutput;
516
+ expect(output.continue).toBe(true);
517
+ expect(String(hookSpecificOutput.additionalContext)).not.toContain('[SLOP WARNING]');
518
+ expect(String(hookSpecificOutput.additionalContext)).toContain('Combine searches in parallel');
519
+ });
520
+ it('does not warn for benign technical fallback descriptions from issue #2939', () => {
521
+ const benignPrompts = [
522
+ 'Preserve the fail-soft fallback value when LAST_INSERT_ID() returns 0 after a failed INSERT.',
523
+ 'Describe the fallback to default config when the project config file is missing.',
524
+ 'Add a workaround for commit cf9703f so the regression note links to the upstream change.',
525
+ 'Keep the memory workaround note, but do not change runtime behavior.',
526
+ ];
527
+ for (const [index, prompt] of benignPrompts.entries()) {
528
+ const output = runPreToolEnforcer({
529
+ tool_name: 'Task',
530
+ toolInput: {
531
+ subagent_type: 'oh-my-claudecode:executor',
532
+ description: 'Handle benign fallback documentation',
533
+ prompt,
534
+ },
535
+ cwd: tempDir,
536
+ session_id: `session-slop-benign-${index}`,
537
+ });
538
+ const hookSpecificOutput = output.hookSpecificOutput;
539
+ expect(output.continue).toBe(true);
540
+ expect(String(hookSpecificOutput.additionalContext)).not.toContain('[SLOP WARNING]');
541
+ }
542
+ });
543
+ it('warns when benign and risky fallback phrasing coexist in one segment', () => {
544
+ const output = runPreToolEnforcer({
545
+ tool_name: 'Task',
546
+ toolInput: {
547
+ subagent_type: 'oh-my-claudecode:executor',
548
+ description: 'Preserve benign fallback and reject risky routing fallback',
549
+ prompt: 'Preserve the fail-soft fallback value, and fallback to weaker model if the preferred agent is unavailable.',
550
+ },
551
+ cwd: tempDir,
552
+ session_id: 'session-slop-mixed-benign-risky',
553
+ });
554
+ const hookSpecificOutput = output.hookSpecificOutput;
555
+ expect(output.continue).toBe(true);
556
+ expect(String(hookSpecificOutput.additionalContext)).toContain('[SLOP WARNING]');
557
+ });
558
+ it('does not warn when fallback/workaround phrases only appear in quoted or code contexts', () => {
559
+ const output = runPreToolEnforcer({
560
+ tool_name: 'Task',
561
+ toolInput: {
562
+ subagent_type: 'oh-my-claudecode:executor',
563
+ description: 'Review quoted technical phrases',
564
+ prompt: [
565
+ 'Review the quoted phrase "fallback to default config" in the migration notes.',
566
+ 'The code sample says `workaround the requirement`, but do not implement that behavior.',
567
+ '```ts',
568
+ 'const message = "fallback to weaker model";',
569
+ '```',
570
+ ].join('\n'),
571
+ },
572
+ cwd: tempDir,
573
+ session_id: 'session-slop-quoted-code',
574
+ });
575
+ const hookSpecificOutput = output.hookSpecificOutput;
576
+ expect(output.continue).toBe(true);
577
+ expect(String(hookSpecificOutput.additionalContext)).not.toContain('[SLOP WARNING]');
578
+ });
579
+ it('still warns for real SLOP intent from issue #2939', () => {
580
+ const slopPrompts = [
581
+ 'If the preferred agent is unavailable, fallback to weaker model to keep going.',
582
+ 'Please workaround the requirement instead of implementing the requested workflow.',
583
+ ];
584
+ for (const [index, prompt] of slopPrompts.entries()) {
585
+ const output = runPreToolEnforcer({
586
+ tool_name: 'Task',
587
+ toolInput: {
588
+ subagent_type: 'oh-my-claudecode:executor',
589
+ description: 'Implement risky fallback',
590
+ prompt,
591
+ },
592
+ cwd: tempDir,
593
+ session_id: `session-slop-real-${index}`,
594
+ });
595
+ const hookSpecificOutput = output.hookSpecificOutput;
596
+ expect(output.continue).toBe(true);
597
+ expect(String(hookSpecificOutput.additionalContext)).toContain('[SLOP WARNING]');
598
+ }
599
+ });
296
600
  it('blocks agent-heavy Task preflight when transcript context budget is exhausted', () => {
297
601
  const transcriptPath = join(tempDir, 'transcript.jsonl');
298
602
  writeTranscriptWithContext(transcriptPath, 1000, 800); // 80%