@wingman-ai/gateway 0.5.3 → 0.6.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 (327) hide show
  1. package/dist/agent/backend/filtered-backend.cjs +130 -0
  2. package/dist/agent/backend/filtered-backend.d.ts +10 -0
  3. package/dist/agent/backend/filtered-backend.js +87 -0
  4. package/dist/agent/config/agentConfig.cjs +4 -0
  5. package/dist/agent/config/agentConfig.d.ts +12 -0
  6. package/dist/agent/config/agentConfig.js +4 -0
  7. package/dist/agent/config/toolRegistry.cjs +75 -1
  8. package/dist/agent/config/toolRegistry.d.ts +3 -0
  9. package/dist/agent/config/toolRegistry.js +75 -1
  10. package/dist/agent/middleware/additional-messages.cjs +4 -1
  11. package/dist/agent/middleware/additional-messages.js +4 -1
  12. package/dist/agent/middleware/large-tool-results.cjs +207 -0
  13. package/dist/agent/middleware/large-tool-results.d.ts +16 -0
  14. package/dist/agent/middleware/large-tool-results.js +173 -0
  15. package/dist/agent/tools/browser_control.cjs +9 -1231
  16. package/dist/agent/tools/browser_control.d.ts +126 -234
  17. package/dist/agent/tools/browser_control.js +7 -1226
  18. package/dist/agent/tools/browser_runtime.cjs +1358 -0
  19. package/dist/agent/tools/browser_runtime.d.ts +617 -0
  20. package/dist/agent/tools/browser_runtime.js +1288 -0
  21. package/dist/agent/tools/browser_session.cjs +189 -0
  22. package/dist/agent/tools/browser_session.d.ts +686 -0
  23. package/dist/agent/tools/browser_session.js +146 -0
  24. package/dist/agent/tools/browser_session_manager.cjs +213 -0
  25. package/dist/agent/tools/browser_session_manager.d.ts +70 -0
  26. package/dist/agent/tools/browser_session_manager.js +176 -0
  27. package/dist/cli/commands/init.cjs +80 -98
  28. package/dist/cli/commands/init.js +80 -98
  29. package/dist/cli/config/loader.cjs +0 -5
  30. package/dist/cli/config/loader.js +0 -5
  31. package/dist/cli/config/schema.cjs +3 -7
  32. package/dist/cli/config/schema.d.ts +6 -6
  33. package/dist/cli/config/schema.js +3 -7
  34. package/dist/cli/core/agentInvoker.cjs +88 -22
  35. package/dist/cli/core/agentInvoker.d.ts +10 -3
  36. package/dist/cli/core/agentInvoker.js +88 -25
  37. package/dist/cli/core/outputManager.cjs +7 -2
  38. package/dist/cli/core/outputManager.d.ts +2 -2
  39. package/dist/cli/core/outputManager.js +7 -2
  40. package/dist/cli/core/sessionManager.cjs +208 -41
  41. package/dist/cli/core/sessionManager.d.ts +20 -0
  42. package/dist/cli/core/sessionManager.js +208 -41
  43. package/dist/cli/index.cjs +16 -1
  44. package/dist/cli/index.js +16 -1
  45. package/dist/cli/services/updateCheck.cjs +212 -0
  46. package/dist/cli/services/updateCheck.d.ts +26 -0
  47. package/dist/cli/services/updateCheck.js +166 -0
  48. package/dist/cli/types.d.ts +2 -1
  49. package/dist/gateway/server.cjs +7 -0
  50. package/dist/gateway/server.js +7 -0
  51. package/dist/webui/assets/index-D3x3G75t.css +11 -0
  52. package/dist/webui/assets/index-UpMmcU1f.js +215 -0
  53. package/dist/webui/index.html +2 -2
  54. package/package.json +12 -12
  55. package/templates/agents/README.md +3 -1
  56. package/templates/agents/coding/agent.md +6 -13
  57. package/templates/agents/coding-v2/agent.md +6 -1
  58. package/templates/agents/game-dev/agent.md +9 -2
  59. package/templates/agents/game-dev/game-designer.md +4 -0
  60. package/templates/agents/game-dev/scene-engineer.md +4 -0
  61. package/templates/agents/main/agent.md +7 -2
  62. package/templates/agents/researcher/agent.md +14 -3
  63. package/templates/agents/stock-trader/agent.md +4 -0
  64. package/dist/agent/tests/agentConfig.test.cjs +0 -224
  65. package/dist/agent/tests/agentConfig.test.d.ts +0 -1
  66. package/dist/agent/tests/agentConfig.test.js +0 -218
  67. package/dist/agent/tests/agentLoader.test.cjs +0 -335
  68. package/dist/agent/tests/agentLoader.test.d.ts +0 -1
  69. package/dist/agent/tests/agentLoader.test.js +0 -329
  70. package/dist/agent/tests/backgroundTerminal.test.cjs +0 -70
  71. package/dist/agent/tests/backgroundTerminal.test.d.ts +0 -1
  72. package/dist/agent/tests/backgroundTerminal.test.js +0 -64
  73. package/dist/agent/tests/browserControlHelpers.test.cjs +0 -35
  74. package/dist/agent/tests/browserControlHelpers.test.d.ts +0 -1
  75. package/dist/agent/tests/browserControlHelpers.test.js +0 -29
  76. package/dist/agent/tests/browserControlTool.test.cjs +0 -2117
  77. package/dist/agent/tests/browserControlTool.test.d.ts +0 -1
  78. package/dist/agent/tests/browserControlTool.test.js +0 -2111
  79. package/dist/agent/tests/commandExecuteTool.test.cjs +0 -29
  80. package/dist/agent/tests/commandExecuteTool.test.d.ts +0 -1
  81. package/dist/agent/tests/commandExecuteTool.test.js +0 -23
  82. package/dist/agent/tests/internet_search.test.cjs +0 -107
  83. package/dist/agent/tests/internet_search.test.d.ts +0 -1
  84. package/dist/agent/tests/internet_search.test.js +0 -101
  85. package/dist/agent/tests/mcpClientManager.test.cjs +0 -290
  86. package/dist/agent/tests/mcpClientManager.test.d.ts +0 -1
  87. package/dist/agent/tests/mcpClientManager.test.js +0 -284
  88. package/dist/agent/tests/mcpResourceTools.test.cjs +0 -101
  89. package/dist/agent/tests/mcpResourceTools.test.d.ts +0 -1
  90. package/dist/agent/tests/mcpResourceTools.test.js +0 -95
  91. package/dist/agent/tests/modelFactory.test.cjs +0 -190
  92. package/dist/agent/tests/modelFactory.test.d.ts +0 -1
  93. package/dist/agent/tests/modelFactory.test.js +0 -184
  94. package/dist/agent/tests/terminalSessionManager.test.cjs +0 -121
  95. package/dist/agent/tests/terminalSessionManager.test.d.ts +0 -1
  96. package/dist/agent/tests/terminalSessionManager.test.js +0 -115
  97. package/dist/agent/tests/test-agent-loader.cjs +0 -33
  98. package/dist/agent/tests/test-agent-loader.d.ts +0 -1
  99. package/dist/agent/tests/test-agent-loader.js +0 -27
  100. package/dist/agent/tests/test-subagent-loading.cjs +0 -99
  101. package/dist/agent/tests/test-subagent-loading.d.ts +0 -1
  102. package/dist/agent/tests/test-subagent-loading.js +0 -93
  103. package/dist/agent/tests/toolRegistry.test.cjs +0 -147
  104. package/dist/agent/tests/toolRegistry.test.d.ts +0 -1
  105. package/dist/agent/tests/toolRegistry.test.js +0 -141
  106. package/dist/agent/tests/uiRegistryTools.test.cjs +0 -114
  107. package/dist/agent/tests/uiRegistryTools.test.d.ts +0 -1
  108. package/dist/agent/tests/uiRegistryTools.test.js +0 -105
  109. package/dist/agent/tests/xaiImageModel.test.cjs +0 -194
  110. package/dist/agent/tests/xaiImageModel.test.d.ts +0 -1
  111. package/dist/agent/tests/xaiImageModel.test.js +0 -188
  112. package/dist/tests/additionalMessageMiddleware.test.cjs +0 -216
  113. package/dist/tests/additionalMessageMiddleware.test.d.ts +0 -1
  114. package/dist/tests/additionalMessageMiddleware.test.js +0 -188
  115. package/dist/tests/agent-config-voice.test.cjs +0 -25
  116. package/dist/tests/agent-config-voice.test.d.ts +0 -1
  117. package/dist/tests/agent-config-voice.test.js +0 -19
  118. package/dist/tests/agentInvokerAttachments.test.cjs +0 -190
  119. package/dist/tests/agentInvokerAttachments.test.d.ts +0 -1
  120. package/dist/tests/agentInvokerAttachments.test.js +0 -184
  121. package/dist/tests/agentInvokerSummarization.test.cjs +0 -613
  122. package/dist/tests/agentInvokerSummarization.test.d.ts +0 -1
  123. package/dist/tests/agentInvokerSummarization.test.js +0 -607
  124. package/dist/tests/agentInvokerTokenUsage.test.cjs +0 -124
  125. package/dist/tests/agentInvokerTokenUsage.test.d.ts +0 -1
  126. package/dist/tests/agentInvokerTokenUsage.test.js +0 -118
  127. package/dist/tests/agentInvokerWorkdir.test.cjs +0 -150
  128. package/dist/tests/agentInvokerWorkdir.test.d.ts +0 -1
  129. package/dist/tests/agentInvokerWorkdir.test.js +0 -122
  130. package/dist/tests/agents-api.test.cjs +0 -324
  131. package/dist/tests/agents-api.test.d.ts +0 -1
  132. package/dist/tests/agents-api.test.js +0 -318
  133. package/dist/tests/attachments-utils.test.cjs +0 -46
  134. package/dist/tests/attachments-utils.test.d.ts +0 -1
  135. package/dist/tests/attachments-utils.test.js +0 -40
  136. package/dist/tests/browser-command.test.cjs +0 -264
  137. package/dist/tests/browser-command.test.d.ts +0 -1
  138. package/dist/tests/browser-command.test.js +0 -258
  139. package/dist/tests/browser-relay-server.test.cjs +0 -20
  140. package/dist/tests/browser-relay-server.test.d.ts +0 -1
  141. package/dist/tests/browser-relay-server.test.js +0 -14
  142. package/dist/tests/bunSqliteAdapter.test.cjs +0 -265
  143. package/dist/tests/bunSqliteAdapter.test.d.ts +0 -1
  144. package/dist/tests/bunSqliteAdapter.test.js +0 -259
  145. package/dist/tests/candleRange.test.cjs +0 -48
  146. package/dist/tests/candleRange.test.d.ts +0 -1
  147. package/dist/tests/candleRange.test.js +0 -42
  148. package/dist/tests/cli-config-loader.test.cjs +0 -532
  149. package/dist/tests/cli-config-loader.test.d.ts +0 -1
  150. package/dist/tests/cli-config-loader.test.js +0 -526
  151. package/dist/tests/cli-config-warnings.test.cjs +0 -94
  152. package/dist/tests/cli-config-warnings.test.d.ts +0 -1
  153. package/dist/tests/cli-config-warnings.test.js +0 -88
  154. package/dist/tests/cli-init.test.cjs +0 -225
  155. package/dist/tests/cli-init.test.d.ts +0 -1
  156. package/dist/tests/cli-init.test.js +0 -219
  157. package/dist/tests/cli-workspace-root.test.cjs +0 -114
  158. package/dist/tests/cli-workspace-root.test.d.ts +0 -1
  159. package/dist/tests/cli-workspace-root.test.js +0 -108
  160. package/dist/tests/codex-credentials-precedence.test.cjs +0 -94
  161. package/dist/tests/codex-credentials-precedence.test.d.ts +0 -1
  162. package/dist/tests/codex-credentials-precedence.test.js +0 -88
  163. package/dist/tests/codex-provider.test.cjs +0 -383
  164. package/dist/tests/codex-provider.test.d.ts +0 -1
  165. package/dist/tests/codex-provider.test.js +0 -377
  166. package/dist/tests/config-json-schema.test.cjs +0 -37
  167. package/dist/tests/config-json-schema.test.d.ts +0 -1
  168. package/dist/tests/config-json-schema.test.js +0 -31
  169. package/dist/tests/discord-adapter.test.cjs +0 -89
  170. package/dist/tests/discord-adapter.test.d.ts +0 -1
  171. package/dist/tests/discord-adapter.test.js +0 -83
  172. package/dist/tests/falRuntime.test.cjs +0 -78
  173. package/dist/tests/falRuntime.test.d.ts +0 -1
  174. package/dist/tests/falRuntime.test.js +0 -72
  175. package/dist/tests/falSummary.test.cjs +0 -51
  176. package/dist/tests/falSummary.test.d.ts +0 -1
  177. package/dist/tests/falSummary.test.js +0 -45
  178. package/dist/tests/fs-api.test.cjs +0 -138
  179. package/dist/tests/fs-api.test.d.ts +0 -1
  180. package/dist/tests/fs-api.test.js +0 -132
  181. package/dist/tests/gateway-command-workspace.test.cjs +0 -150
  182. package/dist/tests/gateway-command-workspace.test.d.ts +0 -1
  183. package/dist/tests/gateway-command-workspace.test.js +0 -144
  184. package/dist/tests/gateway-http-security.test.cjs +0 -318
  185. package/dist/tests/gateway-http-security.test.d.ts +0 -1
  186. package/dist/tests/gateway-http-security.test.js +0 -312
  187. package/dist/tests/gateway-node-mode.test.cjs +0 -174
  188. package/dist/tests/gateway-node-mode.test.d.ts +0 -1
  189. package/dist/tests/gateway-node-mode.test.js +0 -168
  190. package/dist/tests/gateway-origin-policy.test.cjs +0 -82
  191. package/dist/tests/gateway-origin-policy.test.d.ts +0 -1
  192. package/dist/tests/gateway-origin-policy.test.js +0 -76
  193. package/dist/tests/gateway-request-execution-overrides.test.cjs +0 -42
  194. package/dist/tests/gateway-request-execution-overrides.test.d.ts +0 -1
  195. package/dist/tests/gateway-request-execution-overrides.test.js +0 -36
  196. package/dist/tests/gateway.test.cjs +0 -700
  197. package/dist/tests/gateway.test.d.ts +0 -1
  198. package/dist/tests/gateway.test.js +0 -694
  199. package/dist/tests/hooks-matcher.test.cjs +0 -309
  200. package/dist/tests/hooks-matcher.test.d.ts +0 -1
  201. package/dist/tests/hooks-matcher.test.js +0 -303
  202. package/dist/tests/hooks-merger.test.cjs +0 -528
  203. package/dist/tests/hooks-merger.test.d.ts +0 -1
  204. package/dist/tests/hooks-merger.test.js +0 -522
  205. package/dist/tests/imagePersistence.test.cjs +0 -169
  206. package/dist/tests/imagePersistence.test.d.ts +0 -1
  207. package/dist/tests/imagePersistence.test.js +0 -163
  208. package/dist/tests/integration/agent-invocation.integration.test.cjs +0 -264
  209. package/dist/tests/integration/agent-invocation.integration.test.d.ts +0 -1
  210. package/dist/tests/integration/agent-invocation.integration.test.js +0 -258
  211. package/dist/tests/integration/finnhub-candles.integration.test.cjs +0 -98
  212. package/dist/tests/integration/finnhub-candles.integration.test.d.ts +0 -1
  213. package/dist/tests/integration/finnhub-candles.integration.test.js +0 -92
  214. package/dist/tests/integration/summarization-e2e.integration.test.cjs +0 -127
  215. package/dist/tests/integration/summarization-e2e.integration.test.d.ts +0 -1
  216. package/dist/tests/integration/summarization-e2e.integration.test.js +0 -121
  217. package/dist/tests/logger.test.cjs +0 -353
  218. package/dist/tests/logger.test.d.ts +0 -1
  219. package/dist/tests/logger.test.js +0 -347
  220. package/dist/tests/mediaCompatibilityMiddleware.test.cjs +0 -106
  221. package/dist/tests/mediaCompatibilityMiddleware.test.d.ts +0 -1
  222. package/dist/tests/mediaCompatibilityMiddleware.test.js +0 -100
  223. package/dist/tests/node-tools.test.cjs +0 -77
  224. package/dist/tests/node-tools.test.d.ts +0 -1
  225. package/dist/tests/node-tools.test.js +0 -71
  226. package/dist/tests/nodes-api.test.cjs +0 -86
  227. package/dist/tests/nodes-api.test.d.ts +0 -1
  228. package/dist/tests/nodes-api.test.js +0 -80
  229. package/dist/tests/outputManagerContextSummarized.test.cjs +0 -43
  230. package/dist/tests/outputManagerContextSummarized.test.d.ts +0 -1
  231. package/dist/tests/outputManagerContextSummarized.test.js +0 -37
  232. package/dist/tests/provider-command-codex.test.cjs +0 -57
  233. package/dist/tests/provider-command-codex.test.d.ts +0 -1
  234. package/dist/tests/provider-command-codex.test.js +0 -51
  235. package/dist/tests/routines-api.test.cjs +0 -107
  236. package/dist/tests/routines-api.test.d.ts +0 -1
  237. package/dist/tests/routines-api.test.js +0 -101
  238. package/dist/tests/run-terminal-bench-official-script.test.cjs +0 -61
  239. package/dist/tests/run-terminal-bench-official-script.test.d.ts +0 -1
  240. package/dist/tests/run-terminal-bench-official-script.test.js +0 -55
  241. package/dist/tests/sessionManager-uionly.test.cjs +0 -50
  242. package/dist/tests/sessionManager-uionly.test.d.ts +0 -1
  243. package/dist/tests/sessionManager-uionly.test.js +0 -44
  244. package/dist/tests/sessionMessageAttachments.test.cjs +0 -197
  245. package/dist/tests/sessionMessageAttachments.test.d.ts +0 -1
  246. package/dist/tests/sessionMessageAttachments.test.js +0 -191
  247. package/dist/tests/sessionMessageRole.test.cjs +0 -44
  248. package/dist/tests/sessionMessageRole.test.d.ts +0 -1
  249. package/dist/tests/sessionMessageRole.test.js +0 -38
  250. package/dist/tests/sessionStateMessages.test.cjs +0 -236
  251. package/dist/tests/sessionStateMessages.test.d.ts +0 -1
  252. package/dist/tests/sessionStateMessages.test.js +0 -230
  253. package/dist/tests/sessions-api.test.cjs +0 -250
  254. package/dist/tests/sessions-api.test.d.ts +0 -1
  255. package/dist/tests/sessions-api.test.js +0 -244
  256. package/dist/tests/skill-activation.test.cjs +0 -86
  257. package/dist/tests/skill-activation.test.d.ts +0 -1
  258. package/dist/tests/skill-activation.test.js +0 -80
  259. package/dist/tests/skill-metadata.test.cjs +0 -119
  260. package/dist/tests/skill-metadata.test.d.ts +0 -1
  261. package/dist/tests/skill-metadata.test.js +0 -113
  262. package/dist/tests/skill-repository.test.cjs +0 -469
  263. package/dist/tests/skill-repository.test.d.ts +0 -1
  264. package/dist/tests/skill-repository.test.js +0 -463
  265. package/dist/tests/skill-security-scanner.test.cjs +0 -126
  266. package/dist/tests/skill-security-scanner.test.d.ts +0 -1
  267. package/dist/tests/skill-security-scanner.test.js +0 -120
  268. package/dist/tests/sms-api.test.cjs +0 -183
  269. package/dist/tests/sms-api.test.d.ts +0 -1
  270. package/dist/tests/sms-api.test.js +0 -177
  271. package/dist/tests/sms-commands.test.cjs +0 -90
  272. package/dist/tests/sms-commands.test.d.ts +0 -1
  273. package/dist/tests/sms-commands.test.js +0 -84
  274. package/dist/tests/sms-policy-store.test.cjs +0 -69
  275. package/dist/tests/sms-policy-store.test.d.ts +0 -1
  276. package/dist/tests/sms-policy-store.test.js +0 -63
  277. package/dist/tests/teams-adapter.test.cjs +0 -58
  278. package/dist/tests/teams-adapter.test.d.ts +0 -1
  279. package/dist/tests/teams-adapter.test.js +0 -52
  280. package/dist/tests/technicalIndicators.test.cjs +0 -82
  281. package/dist/tests/technicalIndicators.test.d.ts +0 -1
  282. package/dist/tests/technicalIndicators.test.js +0 -76
  283. package/dist/tests/terminal-bench-adapters-helpers.test.cjs +0 -64
  284. package/dist/tests/terminal-bench-adapters-helpers.test.d.ts +0 -1
  285. package/dist/tests/terminal-bench-adapters-helpers.test.js +0 -58
  286. package/dist/tests/terminal-bench-cleanup.test.cjs +0 -93
  287. package/dist/tests/terminal-bench-cleanup.test.d.ts +0 -1
  288. package/dist/tests/terminal-bench-cleanup.test.js +0 -87
  289. package/dist/tests/terminal-bench-config.test.cjs +0 -62
  290. package/dist/tests/terminal-bench-config.test.d.ts +0 -1
  291. package/dist/tests/terminal-bench-config.test.js +0 -56
  292. package/dist/tests/terminal-bench-official.test.cjs +0 -194
  293. package/dist/tests/terminal-bench-official.test.d.ts +0 -1
  294. package/dist/tests/terminal-bench-official.test.js +0 -188
  295. package/dist/tests/terminal-bench-runner.test.cjs +0 -82
  296. package/dist/tests/terminal-bench-runner.test.d.ts +0 -1
  297. package/dist/tests/terminal-bench-runner.test.js +0 -76
  298. package/dist/tests/terminal-bench-scoring.test.cjs +0 -128
  299. package/dist/tests/terminal-bench-scoring.test.d.ts +0 -1
  300. package/dist/tests/terminal-bench-scoring.test.js +0 -122
  301. package/dist/tests/terminalProbe.test.cjs +0 -45
  302. package/dist/tests/terminalProbe.test.d.ts +0 -1
  303. package/dist/tests/terminalProbe.test.js +0 -39
  304. package/dist/tests/terminalProbeAuth.test.cjs +0 -85
  305. package/dist/tests/terminalProbeAuth.test.d.ts +0 -1
  306. package/dist/tests/terminalProbeAuth.test.js +0 -79
  307. package/dist/tests/toolDisplayHelpers.test.cjs +0 -46
  308. package/dist/tests/toolDisplayHelpers.test.d.ts +0 -1
  309. package/dist/tests/toolDisplayHelpers.test.js +0 -40
  310. package/dist/tests/uv.test.cjs +0 -47
  311. package/dist/tests/uv.test.d.ts +0 -1
  312. package/dist/tests/uv.test.js +0 -41
  313. package/dist/tests/voice-config.test.cjs +0 -35
  314. package/dist/tests/voice-config.test.d.ts +0 -1
  315. package/dist/tests/voice-config.test.js +0 -29
  316. package/dist/tests/websocket-transport.test.cjs +0 -31
  317. package/dist/tests/websocket-transport.test.d.ts +0 -1
  318. package/dist/tests/websocket-transport.test.js +0 -25
  319. package/dist/tests/yahooCandles.test.cjs +0 -111
  320. package/dist/tests/yahooCandles.test.d.ts +0 -1
  321. package/dist/tests/yahooCandles.test.js +0 -105
  322. package/dist/tools/finance/optionsAnalytics.test.cjs +0 -128
  323. package/dist/tools/finance/optionsAnalytics.test.d.ts +0 -1
  324. package/dist/tools/finance/optionsAnalytics.test.js +0 -122
  325. package/dist/webui/assets/index-BMf95nv5.js +0 -215
  326. package/dist/webui/assets/index-DhJQ8Mbn.css +0 -11
  327. package/dist/webui/assets/wingman_logo-Cogyt3qm.webp +0 -0
@@ -1,88 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { validateConfig } from "../cli/config/schema.js";
3
- import { collectConfigWarnings } from "../cli/config/warnings.js";
4
- describe("Config warnings", ()=>{
5
- it("returns warnings for common Discord config issues", ()=>{
6
- const base = validateConfig({}).data;
7
- const config = {
8
- ...base,
9
- gateway: {
10
- ...base.gateway,
11
- adapters: {
12
- ...base.gateway.adapters,
13
- discord: {
14
- enabled: true,
15
- token: void 0,
16
- mentionOnly: true,
17
- allowBots: false,
18
- allowedGuilds: [
19
- " "
20
- ],
21
- allowedChannels: [
22
- "",
23
- " 123 "
24
- ],
25
- channelSessions: {
26
- " 123 ": " session-plain ",
27
- 456: "session-plain"
28
- },
29
- sessionCommand: " ",
30
- responseChunkSize: 1900
31
- }
32
- }
33
- }
34
- };
35
- const warnings = collectConfigWarnings(config).map((warning)=>warning.message);
36
- expect(warnings.some((msg)=>msg.includes("token"))).toBe(true);
37
- expect(warnings.some((msg)=>msg.includes("sessionCommand"))).toBe(true);
38
- expect(warnings.some((msg)=>msg.includes("channelSessions"))).toBe(true);
39
- expect(warnings.some((msg)=>msg.includes("agent prefix"))).toBe(true);
40
- expect(warnings.some((msg)=>msg.includes("allowedChannels"))).toBe(true);
41
- expect(warnings.some((msg)=>msg.includes("allowedGuilds"))).toBe(true);
42
- });
43
- it("returns warnings for common Teams config issues", ()=>{
44
- const base = validateConfig({}).data;
45
- const config = validateConfig({
46
- ...base,
47
- gateway: {
48
- ...base.gateway,
49
- adapters: {
50
- ...base.gateway.adapters,
51
- teams: {
52
- enabled: true,
53
- appId: "",
54
- appPassword: " ",
55
- appType: "MultiTenant",
56
- endpointPath: " ",
57
- mentionOnly: true,
58
- allowBots: false,
59
- allowedTeamIds: [
60
- " "
61
- ],
62
- allowedChannelIds: [
63
- "",
64
- " 19:abc "
65
- ],
66
- channelSessions: {
67
- " 19:channel ": " session-plain "
68
- },
69
- sessionCommand: " ",
70
- responseChunkSize: 3500
71
- }
72
- }
73
- }
74
- }).data;
75
- const warnings = collectConfigWarnings(config).map((warning)=>warning.message);
76
- expect(warnings.some((msg)=>msg.includes("appId/appPassword"))).toBe(true);
77
- expect(warnings.some((msg)=>msg.includes("sessionCommand"))).toBe(true);
78
- expect(warnings.some((msg)=>msg.includes("endpointPath"))).toBe(true);
79
- expect(warnings.some((msg)=>msg.includes("channelSessions"))).toBe(true);
80
- expect(warnings.some((msg)=>msg.includes("agent prefix"))).toBe(true);
81
- expect(warnings.some((msg)=>msg.includes("allowedChannelIds"))).toBe(true);
82
- expect(warnings.some((msg)=>msg.includes("allowedTeamIds"))).toBe(true);
83
- });
84
- it("returns no warnings when Discord adapter is disabled", ()=>{
85
- const base = validateConfig({}).data;
86
- expect(collectConfigWarnings(base)).toEqual([]);
87
- });
88
- });
@@ -1,225 +0,0 @@
1
- "use strict";
2
- var __webpack_exports__ = {};
3
- const external_node_fs_namespaceObject = require("node:fs");
4
- const external_node_os_namespaceObject = require("node:os");
5
- const external_node_path_namespaceObject = require("node:path");
6
- const external_vitest_namespaceObject = require("vitest");
7
- const init_cjs_namespaceObject = require("../cli/commands/init.cjs");
8
- (0, external_vitest_namespaceObject.describe)("CLI init", ()=>{
9
- let workspace;
10
- (0, external_vitest_namespaceObject.beforeEach)(()=>{
11
- workspace = (0, external_node_fs_namespaceObject.mkdtempSync)((0, external_node_path_namespaceObject.join)((0, external_node_os_namespaceObject.tmpdir)(), "wingman-init-"));
12
- });
13
- (0, external_vitest_namespaceObject.afterEach)(()=>{
14
- if ((0, external_node_fs_namespaceObject.existsSync)(workspace)) (0, external_node_fs_namespaceObject.rmSync)(workspace, {
15
- recursive: true,
16
- force: true
17
- });
18
- });
19
- (0, external_vitest_namespaceObject.it)("creates config and agent with defaults", async ()=>{
20
- await (0, init_cjs_namespaceObject.executeInitCommand)({
21
- subcommand: "",
22
- args: [],
23
- verbosity: "silent",
24
- outputMode: "json",
25
- options: {
26
- yes: true,
27
- only: "config,agents"
28
- },
29
- agent: "wingman"
30
- }, {
31
- workspace
32
- });
33
- const configPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "wingman.config.json");
34
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(configPath)).toBe(true);
35
- const config = JSON.parse((0, external_node_fs_namespaceObject.readFileSync)(configPath, "utf-8"));
36
- (0, external_vitest_namespaceObject.expect)(config.defaultAgent).toBe("wingman");
37
- (0, external_vitest_namespaceObject.expect)(config.gateway.fsRoots).toContain(".");
38
- (0, external_vitest_namespaceObject.expect)(config.browser?.defaultProfile).toBe("default");
39
- (0, external_vitest_namespaceObject.expect)(config.browser?.profiles?.default).toBe(".wingman/browser-profiles/default");
40
- (0, external_vitest_namespaceObject.expect)(config.browser?.extensions?.wingman).toBe(".wingman/browser-extensions/wingman");
41
- (0, external_vitest_namespaceObject.expect)(config.browser?.defaultExtensions).toContain("wingman");
42
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)((0, external_node_path_namespaceObject.join)(workspace, ".wingman", "browser-profiles", "default"))).toBe(true);
43
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)((0, external_node_path_namespaceObject.join)(workspace, ".wingman", "browser-extensions", "wingman", "manifest.json"))).toBe(true);
44
- const agentPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "wingman", "agent.json");
45
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(agentPath)).toBe(true);
46
- const agent = JSON.parse((0, external_node_fs_namespaceObject.readFileSync)(agentPath, "utf-8"));
47
- (0, external_vitest_namespaceObject.expect)(agent.name).toBe("wingman");
48
- (0, external_vitest_namespaceObject.expect)(agent.tools).toContain("browser_control");
49
- const codingAgentPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "coding", "agent.md");
50
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(codingAgentPath)).toBe(true);
51
- const codingPrompt = (0, external_node_fs_namespaceObject.readFileSync)(codingAgentPath, "utf-8");
52
- (0, external_vitest_namespaceObject.expect)(codingPrompt).toContain("write_todos");
53
- (0, external_vitest_namespaceObject.expect)(codingPrompt).toContain("read_todos");
54
- (0, external_vitest_namespaceObject.expect)(codingPrompt).not.toContain("update_plan");
55
- (0, external_vitest_namespaceObject.expect)(codingPrompt).not.toContain("subAgents:");
56
- (0, external_vitest_namespaceObject.expect)(codingPrompt).toContain("Do not delegate coding work to subagents");
57
- const codingV2AgentPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "coding-v2", "agent.md");
58
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(codingV2AgentPath)).toBe(true);
59
- const codingV2Prompt = (0, external_node_fs_namespaceObject.readFileSync)(codingV2AgentPath, "utf-8");
60
- (0, external_vitest_namespaceObject.expect)(codingV2Prompt).toContain("name: coding-v2");
61
- (0, external_vitest_namespaceObject.expect)(codingV2Prompt).toContain("subAgents:");
62
- (0, external_vitest_namespaceObject.expect)(codingV2Prompt).toContain("name: coding-worker");
63
- (0, external_vitest_namespaceObject.expect)(codingV2Prompt).toContain("promptFile: ./implementor.md");
64
- (0, external_vitest_namespaceObject.expect)(codingV2Prompt).toContain("`task` tool");
65
- (0, external_vitest_namespaceObject.expect)(codingV2Prompt).toContain("write_todos");
66
- (0, external_vitest_namespaceObject.expect)(codingV2Prompt).toContain("read_todos");
67
- const codingV2ImplementorPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "coding-v2", "implementor.md");
68
- const codingV2PlannerPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "coding-v2", "planner.md");
69
- const codingV2ReviewerPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "coding-v2", "reviewer.md");
70
- const codingV2ResearcherPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "coding-v2", "researcher.md");
71
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(codingV2ImplementorPath)).toBe(true);
72
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(codingV2PlannerPath)).toBe(false);
73
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(codingV2ReviewerPath)).toBe(false);
74
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(codingV2ResearcherPath)).toBe(false);
75
- const gameDevAgentPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "game-dev", "agent.md");
76
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(gameDevAgentPath)).toBe(true);
77
- const gameDevPrompt = (0, external_node_fs_namespaceObject.readFileSync)(gameDevAgentPath, "utf-8");
78
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("name: game-dev");
79
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("subAgents:");
80
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("name: art-director");
81
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("promptFile: ./art-director.md");
82
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("name: scene-engineer");
83
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("promptFile: ./scene-engineer.md");
84
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("name: game-designer");
85
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("promptFile: ./game-designer.md");
86
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("write_todos");
87
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("read_todos");
88
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("Delegation routing");
89
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("MeshStandardMaterial");
90
- (0, external_vitest_namespaceObject.expect)(gameDevPrompt).toContain("three-mesh-bvh");
91
- const gameDevArtDirectorPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "game-dev", "art-director.md");
92
- const gameDevSceneEngineerPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "game-dev", "scene-engineer.md");
93
- const gameDevDesignerPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "game-dev", "game-designer.md");
94
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(gameDevArtDirectorPath)).toBe(true);
95
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(gameDevSceneEngineerPath)).toBe(true);
96
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(gameDevDesignerPath)).toBe(true);
97
- const gameDevArtDirectorPrompt = (0, external_node_fs_namespaceObject.readFileSync)(gameDevArtDirectorPath, "utf-8");
98
- (0, external_vitest_namespaceObject.expect)(gameDevArtDirectorPrompt).toContain("You are `art-director`");
99
- (0, external_vitest_namespaceObject.expect)(gameDevArtDirectorPrompt).toContain("Texture-to-geometry mapping: mesh, material slot, UV set");
100
- (0, external_vitest_namespaceObject.expect)(gameDevArtDirectorPrompt).toContain("flipY = false");
101
- (0, external_vitest_namespaceObject.expect)(gameDevArtDirectorPrompt).toContain("RepeatWrapping");
102
- const gameDevSceneEngineerPrompt = (0, external_node_fs_namespaceObject.readFileSync)(gameDevSceneEngineerPath, "utf-8");
103
- (0, external_vitest_namespaceObject.expect)(gameDevSceneEngineerPrompt).toContain("You are `scene-engineer`");
104
- (0, external_vitest_namespaceObject.expect)(gameDevSceneEngineerPrompt).toContain("Rapier is the default physics engine");
105
- (0, external_vitest_namespaceObject.expect)(gameDevSceneEngineerPrompt).toContain("Prefer `postprocessing` over Three.js built-in `EffectComposer`");
106
- const gameDevDesignerPrompt = (0, external_node_fs_namespaceObject.readFileSync)(gameDevDesignerPath, "utf-8");
107
- (0, external_vitest_namespaceObject.expect)(gameDevDesignerPrompt).toContain("You are `game-designer`");
108
- (0, external_vitest_namespaceObject.expect)(gameDevDesignerPrompt).toContain("Always present 2-3 mechanic variants with tradeoffs");
109
- (0, external_vitest_namespaceObject.expect)(gameDevDesignerPrompt).toContain("UI Conventions");
110
- const mainAgentTemplatePath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "main", "agent.md");
111
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(mainAgentTemplatePath)).toBe(true);
112
- const mainAgentTemplatePrompt = (0, external_node_fs_namespaceObject.readFileSync)(mainAgentTemplatePath, "utf-8");
113
- (0, external_vitest_namespaceObject.expect)(mainAgentTemplatePrompt).toContain("name: main");
114
- (0, external_vitest_namespaceObject.expect)(mainAgentTemplatePrompt).toContain("Primary Wingman agent");
115
- });
116
- (0, external_vitest_namespaceObject.it)("merges existing config when --merge is set", async ()=>{
117
- const configDir = (0, external_node_path_namespaceObject.join)(workspace, ".wingman");
118
- (0, external_node_fs_namespaceObject.mkdirSync)(configDir, {
119
- recursive: true
120
- });
121
- const configPath = (0, external_node_path_namespaceObject.join)(configDir, "wingman.config.json");
122
- (0, external_node_fs_namespaceObject.writeFileSync)(configPath, JSON.stringify({
123
- logLevel: "debug",
124
- gateway: {
125
- fsRoots: [
126
- "./existing"
127
- ]
128
- }
129
- }, null, 2));
130
- await (0, init_cjs_namespaceObject.executeInitCommand)({
131
- subcommand: "",
132
- args: [],
133
- verbosity: "silent",
134
- outputMode: "json",
135
- options: {
136
- merge: true,
137
- only: "config"
138
- },
139
- agent: "wingman"
140
- }, {
141
- workspace
142
- });
143
- const updated = JSON.parse((0, external_node_fs_namespaceObject.readFileSync)(configPath, "utf-8"));
144
- (0, external_vitest_namespaceObject.expect)(updated.logLevel).toBe("debug");
145
- (0, external_vitest_namespaceObject.expect)(updated.defaultAgent).toBe("wingman");
146
- (0, external_vitest_namespaceObject.expect)(updated.gateway.fsRoots).toEqual(external_vitest_namespaceObject.expect.arrayContaining([
147
- "./existing",
148
- "."
149
- ]));
150
- (0, external_vitest_namespaceObject.expect)(updated.browser?.defaultProfile).toBe("default");
151
- (0, external_vitest_namespaceObject.expect)(updated.browser?.profiles?.default).toBe(".wingman/browser-profiles/default");
152
- (0, external_vitest_namespaceObject.expect)(updated.browser?.extensions?.wingman).toBe(".wingman/browser-extensions/wingman");
153
- (0, external_vitest_namespaceObject.expect)(updated.browser?.defaultExtensions).toContain("wingman");
154
- });
155
- (0, external_vitest_namespaceObject.it)("merges config without overriding existing browser profile defaults", async ()=>{
156
- const configDir = (0, external_node_path_namespaceObject.join)(workspace, ".wingman");
157
- const configPath = (0, external_node_path_namespaceObject.join)(configDir, "wingman.config.json");
158
- (0, external_node_fs_namespaceObject.mkdirSync)(configDir, {
159
- recursive: true
160
- });
161
- (0, external_node_fs_namespaceObject.writeFileSync)(configPath, JSON.stringify({
162
- defaultAgent: "wingman",
163
- browser: {
164
- defaultProfile: "trading",
165
- profiles: {
166
- trading: ".wingman/browser-profiles/trading"
167
- },
168
- extensions: {
169
- relay: ".wingman/browser-extensions/relay"
170
- },
171
- defaultExtensions: [
172
- "relay"
173
- ]
174
- }
175
- }, null, 2));
176
- await (0, init_cjs_namespaceObject.executeInitCommand)({
177
- subcommand: "",
178
- args: [],
179
- verbosity: "silent",
180
- outputMode: "json",
181
- options: {
182
- merge: true,
183
- only: "config"
184
- },
185
- agent: "wingman"
186
- }, {
187
- workspace
188
- });
189
- const updated = JSON.parse((0, external_node_fs_namespaceObject.readFileSync)(configPath, "utf-8"));
190
- (0, external_vitest_namespaceObject.expect)(updated.browser?.defaultProfile).toBe("trading");
191
- (0, external_vitest_namespaceObject.expect)(updated.browser?.profiles?.trading).toBe(".wingman/browser-profiles/trading");
192
- (0, external_vitest_namespaceObject.expect)(updated.browser?.defaultExtensions).toEqual(external_vitest_namespaceObject.expect.arrayContaining([
193
- "relay",
194
- "wingman"
195
- ]));
196
- (0, external_vitest_namespaceObject.expect)(updated.browser?.extensions?.relay).toBe(".wingman/browser-extensions/relay");
197
- (0, external_vitest_namespaceObject.expect)(updated.browser?.extensions?.wingman).toBe(".wingman/browser-extensions/wingman");
198
- });
199
- (0, external_vitest_namespaceObject.it)("sync mode copies bundled agents without creating config", async ()=>{
200
- await (0, init_cjs_namespaceObject.executeInitCommand)({
201
- subcommand: "",
202
- args: [],
203
- verbosity: "silent",
204
- outputMode: "json",
205
- options: {
206
- mode: "sync",
207
- only: "agents",
208
- force: true
209
- },
210
- agent: "wingman"
211
- }, {
212
- workspace
213
- });
214
- const configPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "wingman.config.json");
215
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(configPath)).toBe(false);
216
- const codingAgentPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "coding", "agent.md");
217
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(codingAgentPath)).toBe(true);
218
- const starterAgentPath = (0, external_node_path_namespaceObject.join)(workspace, ".wingman", "agents", "wingman", "agent.json");
219
- (0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(starterAgentPath)).toBe(false);
220
- });
221
- });
222
- for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
223
- Object.defineProperty(exports, '__esModule', {
224
- value: true
225
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,219 +0,0 @@
1
- import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
- import { executeInitCommand } from "../cli/commands/init.js";
6
- describe("CLI init", ()=>{
7
- let workspace;
8
- beforeEach(()=>{
9
- workspace = mkdtempSync(join(tmpdir(), "wingman-init-"));
10
- });
11
- afterEach(()=>{
12
- if (existsSync(workspace)) rmSync(workspace, {
13
- recursive: true,
14
- force: true
15
- });
16
- });
17
- it("creates config and agent with defaults", async ()=>{
18
- await executeInitCommand({
19
- subcommand: "",
20
- args: [],
21
- verbosity: "silent",
22
- outputMode: "json",
23
- options: {
24
- yes: true,
25
- only: "config,agents"
26
- },
27
- agent: "wingman"
28
- }, {
29
- workspace
30
- });
31
- const configPath = join(workspace, ".wingman", "wingman.config.json");
32
- expect(existsSync(configPath)).toBe(true);
33
- const config = JSON.parse(readFileSync(configPath, "utf-8"));
34
- expect(config.defaultAgent).toBe("wingman");
35
- expect(config.gateway.fsRoots).toContain(".");
36
- expect(config.browser?.defaultProfile).toBe("default");
37
- expect(config.browser?.profiles?.default).toBe(".wingman/browser-profiles/default");
38
- expect(config.browser?.extensions?.wingman).toBe(".wingman/browser-extensions/wingman");
39
- expect(config.browser?.defaultExtensions).toContain("wingman");
40
- expect(existsSync(join(workspace, ".wingman", "browser-profiles", "default"))).toBe(true);
41
- expect(existsSync(join(workspace, ".wingman", "browser-extensions", "wingman", "manifest.json"))).toBe(true);
42
- const agentPath = join(workspace, ".wingman", "agents", "wingman", "agent.json");
43
- expect(existsSync(agentPath)).toBe(true);
44
- const agent = JSON.parse(readFileSync(agentPath, "utf-8"));
45
- expect(agent.name).toBe("wingman");
46
- expect(agent.tools).toContain("browser_control");
47
- const codingAgentPath = join(workspace, ".wingman", "agents", "coding", "agent.md");
48
- expect(existsSync(codingAgentPath)).toBe(true);
49
- const codingPrompt = readFileSync(codingAgentPath, "utf-8");
50
- expect(codingPrompt).toContain("write_todos");
51
- expect(codingPrompt).toContain("read_todos");
52
- expect(codingPrompt).not.toContain("update_plan");
53
- expect(codingPrompt).not.toContain("subAgents:");
54
- expect(codingPrompt).toContain("Do not delegate coding work to subagents");
55
- const codingV2AgentPath = join(workspace, ".wingman", "agents", "coding-v2", "agent.md");
56
- expect(existsSync(codingV2AgentPath)).toBe(true);
57
- const codingV2Prompt = readFileSync(codingV2AgentPath, "utf-8");
58
- expect(codingV2Prompt).toContain("name: coding-v2");
59
- expect(codingV2Prompt).toContain("subAgents:");
60
- expect(codingV2Prompt).toContain("name: coding-worker");
61
- expect(codingV2Prompt).toContain("promptFile: ./implementor.md");
62
- expect(codingV2Prompt).toContain("`task` tool");
63
- expect(codingV2Prompt).toContain("write_todos");
64
- expect(codingV2Prompt).toContain("read_todos");
65
- const codingV2ImplementorPath = join(workspace, ".wingman", "agents", "coding-v2", "implementor.md");
66
- const codingV2PlannerPath = join(workspace, ".wingman", "agents", "coding-v2", "planner.md");
67
- const codingV2ReviewerPath = join(workspace, ".wingman", "agents", "coding-v2", "reviewer.md");
68
- const codingV2ResearcherPath = join(workspace, ".wingman", "agents", "coding-v2", "researcher.md");
69
- expect(existsSync(codingV2ImplementorPath)).toBe(true);
70
- expect(existsSync(codingV2PlannerPath)).toBe(false);
71
- expect(existsSync(codingV2ReviewerPath)).toBe(false);
72
- expect(existsSync(codingV2ResearcherPath)).toBe(false);
73
- const gameDevAgentPath = join(workspace, ".wingman", "agents", "game-dev", "agent.md");
74
- expect(existsSync(gameDevAgentPath)).toBe(true);
75
- const gameDevPrompt = readFileSync(gameDevAgentPath, "utf-8");
76
- expect(gameDevPrompt).toContain("name: game-dev");
77
- expect(gameDevPrompt).toContain("subAgents:");
78
- expect(gameDevPrompt).toContain("name: art-director");
79
- expect(gameDevPrompt).toContain("promptFile: ./art-director.md");
80
- expect(gameDevPrompt).toContain("name: scene-engineer");
81
- expect(gameDevPrompt).toContain("promptFile: ./scene-engineer.md");
82
- expect(gameDevPrompt).toContain("name: game-designer");
83
- expect(gameDevPrompt).toContain("promptFile: ./game-designer.md");
84
- expect(gameDevPrompt).toContain("write_todos");
85
- expect(gameDevPrompt).toContain("read_todos");
86
- expect(gameDevPrompt).toContain("Delegation routing");
87
- expect(gameDevPrompt).toContain("MeshStandardMaterial");
88
- expect(gameDevPrompt).toContain("three-mesh-bvh");
89
- const gameDevArtDirectorPath = join(workspace, ".wingman", "agents", "game-dev", "art-director.md");
90
- const gameDevSceneEngineerPath = join(workspace, ".wingman", "agents", "game-dev", "scene-engineer.md");
91
- const gameDevDesignerPath = join(workspace, ".wingman", "agents", "game-dev", "game-designer.md");
92
- expect(existsSync(gameDevArtDirectorPath)).toBe(true);
93
- expect(existsSync(gameDevSceneEngineerPath)).toBe(true);
94
- expect(existsSync(gameDevDesignerPath)).toBe(true);
95
- const gameDevArtDirectorPrompt = readFileSync(gameDevArtDirectorPath, "utf-8");
96
- expect(gameDevArtDirectorPrompt).toContain("You are `art-director`");
97
- expect(gameDevArtDirectorPrompt).toContain("Texture-to-geometry mapping: mesh, material slot, UV set");
98
- expect(gameDevArtDirectorPrompt).toContain("flipY = false");
99
- expect(gameDevArtDirectorPrompt).toContain("RepeatWrapping");
100
- const gameDevSceneEngineerPrompt = readFileSync(gameDevSceneEngineerPath, "utf-8");
101
- expect(gameDevSceneEngineerPrompt).toContain("You are `scene-engineer`");
102
- expect(gameDevSceneEngineerPrompt).toContain("Rapier is the default physics engine");
103
- expect(gameDevSceneEngineerPrompt).toContain("Prefer `postprocessing` over Three.js built-in `EffectComposer`");
104
- const gameDevDesignerPrompt = readFileSync(gameDevDesignerPath, "utf-8");
105
- expect(gameDevDesignerPrompt).toContain("You are `game-designer`");
106
- expect(gameDevDesignerPrompt).toContain("Always present 2-3 mechanic variants with tradeoffs");
107
- expect(gameDevDesignerPrompt).toContain("UI Conventions");
108
- const mainAgentTemplatePath = join(workspace, ".wingman", "agents", "main", "agent.md");
109
- expect(existsSync(mainAgentTemplatePath)).toBe(true);
110
- const mainAgentTemplatePrompt = readFileSync(mainAgentTemplatePath, "utf-8");
111
- expect(mainAgentTemplatePrompt).toContain("name: main");
112
- expect(mainAgentTemplatePrompt).toContain("Primary Wingman agent");
113
- });
114
- it("merges existing config when --merge is set", async ()=>{
115
- const configDir = join(workspace, ".wingman");
116
- mkdirSync(configDir, {
117
- recursive: true
118
- });
119
- const configPath = join(configDir, "wingman.config.json");
120
- writeFileSync(configPath, JSON.stringify({
121
- logLevel: "debug",
122
- gateway: {
123
- fsRoots: [
124
- "./existing"
125
- ]
126
- }
127
- }, null, 2));
128
- await executeInitCommand({
129
- subcommand: "",
130
- args: [],
131
- verbosity: "silent",
132
- outputMode: "json",
133
- options: {
134
- merge: true,
135
- only: "config"
136
- },
137
- agent: "wingman"
138
- }, {
139
- workspace
140
- });
141
- const updated = JSON.parse(readFileSync(configPath, "utf-8"));
142
- expect(updated.logLevel).toBe("debug");
143
- expect(updated.defaultAgent).toBe("wingman");
144
- expect(updated.gateway.fsRoots).toEqual(expect.arrayContaining([
145
- "./existing",
146
- "."
147
- ]));
148
- expect(updated.browser?.defaultProfile).toBe("default");
149
- expect(updated.browser?.profiles?.default).toBe(".wingman/browser-profiles/default");
150
- expect(updated.browser?.extensions?.wingman).toBe(".wingman/browser-extensions/wingman");
151
- expect(updated.browser?.defaultExtensions).toContain("wingman");
152
- });
153
- it("merges config without overriding existing browser profile defaults", async ()=>{
154
- const configDir = join(workspace, ".wingman");
155
- const configPath = join(configDir, "wingman.config.json");
156
- mkdirSync(configDir, {
157
- recursive: true
158
- });
159
- writeFileSync(configPath, JSON.stringify({
160
- defaultAgent: "wingman",
161
- browser: {
162
- defaultProfile: "trading",
163
- profiles: {
164
- trading: ".wingman/browser-profiles/trading"
165
- },
166
- extensions: {
167
- relay: ".wingman/browser-extensions/relay"
168
- },
169
- defaultExtensions: [
170
- "relay"
171
- ]
172
- }
173
- }, null, 2));
174
- await executeInitCommand({
175
- subcommand: "",
176
- args: [],
177
- verbosity: "silent",
178
- outputMode: "json",
179
- options: {
180
- merge: true,
181
- only: "config"
182
- },
183
- agent: "wingman"
184
- }, {
185
- workspace
186
- });
187
- const updated = JSON.parse(readFileSync(configPath, "utf-8"));
188
- expect(updated.browser?.defaultProfile).toBe("trading");
189
- expect(updated.browser?.profiles?.trading).toBe(".wingman/browser-profiles/trading");
190
- expect(updated.browser?.defaultExtensions).toEqual(expect.arrayContaining([
191
- "relay",
192
- "wingman"
193
- ]));
194
- expect(updated.browser?.extensions?.relay).toBe(".wingman/browser-extensions/relay");
195
- expect(updated.browser?.extensions?.wingman).toBe(".wingman/browser-extensions/wingman");
196
- });
197
- it("sync mode copies bundled agents without creating config", async ()=>{
198
- await executeInitCommand({
199
- subcommand: "",
200
- args: [],
201
- verbosity: "silent",
202
- outputMode: "json",
203
- options: {
204
- mode: "sync",
205
- only: "agents",
206
- force: true
207
- },
208
- agent: "wingman"
209
- }, {
210
- workspace
211
- });
212
- const configPath = join(workspace, ".wingman", "wingman.config.json");
213
- expect(existsSync(configPath)).toBe(false);
214
- const codingAgentPath = join(workspace, ".wingman", "agents", "coding", "agent.md");
215
- expect(existsSync(codingAgentPath)).toBe(true);
216
- const starterAgentPath = join(workspace, ".wingman", "agents", "wingman", "agent.json");
217
- expect(existsSync(starterAgentPath)).toBe(false);
218
- });
219
- });
@@ -1,114 +0,0 @@
1
- "use strict";
2
- var __webpack_exports__ = {};
3
- const external_node_fs_namespaceObject = require("node:fs");
4
- const external_node_os_namespaceObject = require("node:os");
5
- const external_node_path_namespaceObject = require("node:path");
6
- const external_vitest_namespaceObject = require("vitest");
7
- const workspace_cjs_namespaceObject = require("../cli/core/workspace.cjs");
8
- (0, external_vitest_namespaceObject.describe)("resolveWorkspaceRoot", ()=>{
9
- let sandbox;
10
- (0, external_vitest_namespaceObject.beforeEach)(()=>{
11
- sandbox = (0, external_node_path_namespaceObject.join)((0, external_node_os_namespaceObject.tmpdir)(), `wingman-workspace-${Date.now()}-${Math.random()}`);
12
- (0, external_node_fs_namespaceObject.mkdirSync)(sandbox, {
13
- recursive: true
14
- });
15
- });
16
- (0, external_vitest_namespaceObject.afterEach)(()=>{
17
- if ((0, external_node_fs_namespaceObject.existsSync)(sandbox)) (0, external_node_fs_namespaceObject.rmSync)(sandbox, {
18
- recursive: true,
19
- force: true
20
- });
21
- });
22
- (0, external_vitest_namespaceObject.it)("uses explicit workspace override when provided", ()=>{
23
- const startDir = (0, external_node_path_namespaceObject.join)(sandbox, "repo", "apps", "wingman");
24
- (0, external_node_fs_namespaceObject.mkdirSync)(startDir, {
25
- recursive: true
26
- });
27
- const resolved = (0, workspace_cjs_namespaceObject.resolveWorkspaceRoot)(startDir, "../..");
28
- (0, external_vitest_namespaceObject.expect)(resolved).toBe((0, external_node_path_namespaceObject.resolve)(startDir, "../.."));
29
- });
30
- (0, external_vitest_namespaceObject.it)("finds nearest ancestor with .wingman/wingman.config.json", ()=>{
31
- const workspaceRoot = (0, external_node_path_namespaceObject.join)(sandbox, "repo");
32
- const nestedDir = (0, external_node_path_namespaceObject.join)(workspaceRoot, "apps", "wingman", "src");
33
- (0, external_node_fs_namespaceObject.mkdirSync)((0, external_node_path_namespaceObject.join)(workspaceRoot, ".wingman"), {
34
- recursive: true
35
- });
36
- (0, external_node_fs_namespaceObject.mkdirSync)(nestedDir, {
37
- recursive: true
38
- });
39
- (0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(workspaceRoot, ".wingman", "wingman.config.json"), JSON.stringify({
40
- logLevel: "info"
41
- }));
42
- const resolved = (0, workspace_cjs_namespaceObject.resolveWorkspaceRoot)(nestedDir);
43
- (0, external_vitest_namespaceObject.expect)(resolved).toBe(workspaceRoot);
44
- });
45
- (0, external_vitest_namespaceObject.it)("finds nearest ancestor with .wingman/agents marker", ()=>{
46
- const workspaceRoot = (0, external_node_path_namespaceObject.join)(sandbox, "repo");
47
- const nestedDir = (0, external_node_path_namespaceObject.join)(workspaceRoot, "packages", "cli");
48
- (0, external_node_fs_namespaceObject.mkdirSync)((0, external_node_path_namespaceObject.join)(workspaceRoot, ".wingman", "agents"), {
49
- recursive: true
50
- });
51
- (0, external_node_fs_namespaceObject.mkdirSync)(nestedDir, {
52
- recursive: true
53
- });
54
- const resolved = (0, workspace_cjs_namespaceObject.resolveWorkspaceRoot)(nestedDir);
55
- (0, external_vitest_namespaceObject.expect)(resolved).toBe(workspaceRoot);
56
- });
57
- (0, external_vitest_namespaceObject.it)("does not search above git root when workspace markers are missing", ()=>{
58
- const parentRoot = (0, external_node_path_namespaceObject.join)(sandbox, "parent");
59
- const gitRoot = (0, external_node_path_namespaceObject.join)(parentRoot, "repo");
60
- const nestedDir = (0, external_node_path_namespaceObject.join)(gitRoot, "apps", "wingman");
61
- (0, external_node_fs_namespaceObject.mkdirSync)((0, external_node_path_namespaceObject.join)(parentRoot, ".wingman"), {
62
- recursive: true
63
- });
64
- (0, external_node_fs_namespaceObject.mkdirSync)((0, external_node_path_namespaceObject.join)(gitRoot, ".git"), {
65
- recursive: true
66
- });
67
- (0, external_node_fs_namespaceObject.mkdirSync)(nestedDir, {
68
- recursive: true
69
- });
70
- (0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(parentRoot, ".wingman", "wingman.config.json"), JSON.stringify({
71
- logLevel: "info"
72
- }));
73
- const resolved = (0, workspace_cjs_namespaceObject.resolveWorkspaceRoot)(nestedDir);
74
- (0, external_vitest_namespaceObject.expect)(resolved).toBe(nestedDir);
75
- });
76
- (0, external_vitest_namespaceObject.it)("falls back to nested apps/wingman workspace from repo root", ()=>{
77
- const repoRoot = (0, external_node_path_namespaceObject.join)(sandbox, "repo");
78
- const nestedWorkspace = (0, external_node_path_namespaceObject.join)(repoRoot, "apps", "wingman");
79
- (0, external_node_fs_namespaceObject.mkdirSync)((0, external_node_path_namespaceObject.join)(repoRoot, ".git"), {
80
- recursive: true
81
- });
82
- (0, external_node_fs_namespaceObject.mkdirSync)((0, external_node_path_namespaceObject.join)(nestedWorkspace, ".wingman"), {
83
- recursive: true
84
- });
85
- (0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(nestedWorkspace, ".wingman", "wingman.config.json"), JSON.stringify({
86
- logLevel: "info"
87
- }));
88
- const resolved = (0, workspace_cjs_namespaceObject.resolveWorkspaceRoot)(repoRoot);
89
- (0, external_vitest_namespaceObject.expect)(resolved).toBe(nestedWorkspace);
90
- });
91
- (0, external_vitest_namespaceObject.it)("falls back to nested apps/wingman workspace from sibling app directory", ()=>{
92
- const repoRoot = (0, external_node_path_namespaceObject.join)(sandbox, "repo");
93
- const startDir = (0, external_node_path_namespaceObject.join)(repoRoot, "apps", "docs-website");
94
- const nestedWorkspace = (0, external_node_path_namespaceObject.join)(repoRoot, "apps", "wingman");
95
- (0, external_node_fs_namespaceObject.mkdirSync)((0, external_node_path_namespaceObject.join)(repoRoot, ".git"), {
96
- recursive: true
97
- });
98
- (0, external_node_fs_namespaceObject.mkdirSync)(startDir, {
99
- recursive: true
100
- });
101
- (0, external_node_fs_namespaceObject.mkdirSync)((0, external_node_path_namespaceObject.join)(nestedWorkspace, ".wingman"), {
102
- recursive: true
103
- });
104
- (0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(nestedWorkspace, ".wingman", "wingman.config.json"), JSON.stringify({
105
- logLevel: "info"
106
- }));
107
- const resolved = (0, workspace_cjs_namespaceObject.resolveWorkspaceRoot)(startDir);
108
- (0, external_vitest_namespaceObject.expect)(resolved).toBe(nestedWorkspace);
109
- });
110
- });
111
- for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
112
- Object.defineProperty(exports, '__esModule', {
113
- value: true
114
- });