@coralai/sps-cli 0.55.13 → 0.56.1

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 (437) hide show
  1. package/dist/commands/cardMarkComplete.d.ts.map +1 -1
  2. package/dist/commands/cardMarkComplete.js +6 -3
  3. package/dist/commands/cardMarkComplete.js.map +1 -1
  4. package/dist/commands/projectInit.d.ts +18 -16
  5. package/dist/commands/projectInit.d.ts.map +1 -1
  6. package/dist/commands/projectInit.js +59 -186
  7. package/dist/commands/projectInit.js.map +1 -1
  8. package/dist/commands/skillCommand.js +7 -4
  9. package/dist/commands/skillCommand.js.map +1 -1
  10. package/dist/commands/tick.d.ts +2 -20
  11. package/dist/commands/tick.d.ts.map +1 -1
  12. package/dist/commands/tick.js +58 -1
  13. package/dist/commands/tick.js.map +1 -1
  14. package/dist/console/index.d.ts.map +1 -1
  15. package/dist/console/index.js +4 -0
  16. package/dist/console/index.js.map +1 -1
  17. package/dist/console/routes/chat.d.ts.map +1 -1
  18. package/dist/console/routes/chat.js +211 -6
  19. package/dist/console/routes/chat.js.map +1 -1
  20. package/dist/console/routes/projects.d.ts +0 -6
  21. package/dist/console/routes/projects.d.ts.map +1 -1
  22. package/dist/console/routes/projects.js +11 -2
  23. package/dist/console/routes/projects.js.map +1 -1
  24. package/dist/console/routes/providers.d.ts +10 -0
  25. package/dist/console/routes/providers.d.ts.map +1 -0
  26. package/dist/console/routes/providers.js +63 -0
  27. package/dist/console/routes/providers.js.map +1 -0
  28. package/dist/console/routes/smartarrange.d.ts +4 -0
  29. package/dist/console/routes/smartarrange.d.ts.map +1 -0
  30. package/dist/console/routes/smartarrange.js +107 -0
  31. package/dist/console/routes/smartarrange.js.map +1 -0
  32. package/dist/console/routes/system.d.ts.map +1 -1
  33. package/dist/console/routes/system.js +28 -0
  34. package/dist/console/routes/system.js.map +1 -1
  35. package/dist/console/routes/workers.d.ts.map +1 -1
  36. package/dist/console/routes/workers.js +36 -4
  37. package/dist/console/routes/workers.js.map +1 -1
  38. package/dist/console-assets/assets/index-CWkYVI5d.js +600 -0
  39. package/dist/console-assets/assets/index-CnUBHNsN.css +10 -0
  40. package/dist/console-assets/index.html +2 -2
  41. package/dist/core/agents/AcpBackend.d.ts +24 -0
  42. package/dist/core/agents/AcpBackend.d.ts.map +1 -0
  43. package/dist/core/agents/AcpBackend.js +86 -0
  44. package/dist/core/agents/AcpBackend.js.map +1 -0
  45. package/dist/core/agents/AgentBackend.d.ts +53 -0
  46. package/dist/core/agents/AgentBackend.d.ts.map +1 -0
  47. package/dist/core/agents/AgentBackend.js +18 -0
  48. package/dist/core/agents/AgentBackend.js.map +1 -0
  49. package/dist/core/agents/ClaudeAcpBackend.d.ts +13 -0
  50. package/dist/core/agents/ClaudeAcpBackend.d.ts.map +1 -0
  51. package/dist/core/agents/ClaudeAcpBackend.js +14 -0
  52. package/dist/core/agents/ClaudeAcpBackend.js.map +1 -0
  53. package/dist/core/agents/ClaudeSdkBackend.d.ts +26 -0
  54. package/dist/core/agents/ClaudeSdkBackend.d.ts.map +1 -0
  55. package/dist/core/agents/ClaudeSdkBackend.js +102 -0
  56. package/dist/core/agents/ClaudeSdkBackend.js.map +1 -0
  57. package/dist/core/agents/CodexAppServerBackend.d.ts +33 -0
  58. package/dist/core/agents/CodexAppServerBackend.d.ts.map +1 -0
  59. package/dist/core/agents/CodexAppServerBackend.js +168 -0
  60. package/dist/core/agents/CodexAppServerBackend.js.map +1 -0
  61. package/dist/core/agents/OpenAiAgentBackend.d.ts +39 -0
  62. package/dist/core/agents/OpenAiAgentBackend.d.ts.map +1 -0
  63. package/dist/core/agents/OpenAiAgentBackend.js +132 -0
  64. package/dist/core/agents/OpenAiAgentBackend.js.map +1 -0
  65. package/dist/core/agents/agentsMd.d.ts +2 -0
  66. package/dist/core/agents/agentsMd.d.ts.map +1 -0
  67. package/dist/core/agents/agentsMd.js +22 -0
  68. package/dist/core/agents/agentsMd.js.map +1 -0
  69. package/dist/core/agents/localTracing.d.ts +3 -0
  70. package/dist/core/agents/localTracing.d.ts.map +1 -0
  71. package/dist/core/agents/localTracing.js +42 -0
  72. package/dist/core/agents/localTracing.js.map +1 -0
  73. package/dist/core/agents/resolveBackend.d.ts +26 -0
  74. package/dist/core/agents/resolveBackend.d.ts.map +1 -0
  75. package/dist/core/agents/resolveBackend.js +27 -0
  76. package/dist/core/agents/resolveBackend.js.map +1 -0
  77. package/dist/core/agents/workerOutputSink.d.ts +4 -0
  78. package/dist/core/agents/workerOutputSink.d.ts.map +1 -0
  79. package/dist/core/agents/workerOutputSink.js +39 -0
  80. package/dist/core/agents/workerOutputSink.js.map +1 -0
  81. package/dist/core/config.d.ts +6 -0
  82. package/dist/core/config.d.ts.map +1 -1
  83. package/dist/core/config.js +4 -0
  84. package/dist/core/config.js.map +1 -1
  85. package/dist/core/intel/RuntimeSession.d.ts +16 -0
  86. package/dist/core/intel/RuntimeSession.d.ts.map +1 -0
  87. package/dist/core/intel/RuntimeSession.js +89 -0
  88. package/dist/core/intel/RuntimeSession.js.map +1 -0
  89. package/dist/core/intel/agentsConfig.d.ts +20 -0
  90. package/dist/core/intel/agentsConfig.d.ts.map +1 -0
  91. package/dist/core/intel/agentsConfig.js +68 -0
  92. package/dist/core/intel/agentsConfig.js.map +1 -0
  93. package/dist/core/intel/planStore.d.ts +23 -0
  94. package/dist/core/intel/planStore.d.ts.map +1 -0
  95. package/dist/core/intel/planStore.js +67 -0
  96. package/dist/core/intel/planStore.js.map +1 -0
  97. package/dist/core/intel/types.d.ts +86 -0
  98. package/dist/core/intel/types.d.ts.map +1 -0
  99. package/dist/core/intel/types.js +8 -0
  100. package/dist/core/intel/types.js.map +1 -0
  101. package/dist/core/memoryIngest.d.ts +18 -0
  102. package/dist/core/memoryIngest.d.ts.map +1 -0
  103. package/dist/core/memoryIngest.js +56 -0
  104. package/dist/core/memoryIngest.js.map +1 -0
  105. package/dist/core/memoryProvider.d.ts +63 -0
  106. package/dist/core/memoryProvider.d.ts.map +1 -0
  107. package/dist/core/memoryProvider.js +205 -0
  108. package/dist/core/memoryProvider.js.map +1 -0
  109. package/dist/core/skillStore.d.ts.map +1 -1
  110. package/dist/core/skillStore.js +2 -1
  111. package/dist/core/skillStore.js.map +1 -1
  112. package/dist/core/skills/SkillsManager.d.ts +38 -0
  113. package/dist/core/skills/SkillsManager.d.ts.map +1 -0
  114. package/dist/core/skills/SkillsManager.js +231 -0
  115. package/dist/core/skills/SkillsManager.js.map +1 -0
  116. package/dist/core/skills/distribution.d.ts +64 -0
  117. package/dist/core/skills/distribution.d.ts.map +1 -0
  118. package/dist/core/skills/distribution.js +269 -0
  119. package/dist/core/skills/distribution.js.map +1 -0
  120. package/dist/core/skills/index.d.ts +13 -0
  121. package/dist/core/skills/index.d.ts.map +1 -0
  122. package/dist/core/skills/index.js +13 -0
  123. package/dist/core/skills/index.js.map +1 -0
  124. package/dist/core/skills/types.d.ts +44 -0
  125. package/dist/core/skills/types.d.ts.map +1 -0
  126. package/dist/core/skills/types.js +9 -0
  127. package/dist/core/skills/types.js.map +1 -0
  128. package/dist/core/taskPrompts.d.ts +0 -12
  129. package/dist/core/taskPrompts.d.ts.map +1 -1
  130. package/dist/core/taskPrompts.js +0 -14
  131. package/dist/core/taskPrompts.js.map +1 -1
  132. package/dist/core/transcriptIngest.d.ts +37 -0
  133. package/dist/core/transcriptIngest.d.ts.map +1 -0
  134. package/dist/core/transcriptIngest.js +137 -0
  135. package/dist/core/transcriptIngest.js.map +1 -0
  136. package/dist/core/wiki/types.d.ts +282 -745
  137. package/dist/core/wiki/types.d.ts.map +1 -1
  138. package/dist/core/wiki/types.js +1 -1
  139. package/dist/core/wiki/types.js.map +1 -1
  140. package/dist/daemon/daemonClient.d.ts +6 -0
  141. package/dist/daemon/daemonClient.d.ts.map +1 -1
  142. package/dist/daemon/daemonClient.js.map +1 -1
  143. package/dist/daemon/sessionDaemon.d.ts.map +1 -1
  144. package/dist/daemon/sessionDaemon.js.map +1 -1
  145. package/dist/engines/SmartArrangeEngine.d.ts +75 -0
  146. package/dist/engines/SmartArrangeEngine.d.ts.map +1 -0
  147. package/dist/engines/SmartArrangeEngine.js +112 -0
  148. package/dist/engines/SmartArrangeEngine.js.map +1 -0
  149. package/dist/engines/StageEngine.d.ts +3 -17
  150. package/dist/engines/StageEngine.d.ts.map +1 -1
  151. package/dist/engines/StageEngine.js +13 -91
  152. package/dist/engines/StageEngine.js.map +1 -1
  153. package/dist/engines/smartarrange/AcpWorkerExec.d.ts +35 -0
  154. package/dist/engines/smartarrange/AcpWorkerExec.d.ts.map +1 -0
  155. package/dist/engines/smartarrange/AcpWorkerExec.js +71 -0
  156. package/dist/engines/smartarrange/AcpWorkerExec.js.map +1 -0
  157. package/dist/engines/smartarrange/cardSink.d.ts +29 -0
  158. package/dist/engines/smartarrange/cardSink.d.ts.map +1 -0
  159. package/dist/engines/smartarrange/cardSink.js +43 -0
  160. package/dist/engines/smartarrange/cardSink.js.map +1 -0
  161. package/dist/engines/smartarrange/runner.d.ts +24 -0
  162. package/dist/engines/smartarrange/runner.d.ts.map +1 -0
  163. package/dist/engines/smartarrange/runner.js +116 -0
  164. package/dist/engines/smartarrange/runner.js.map +1 -0
  165. package/dist/engines/smartarrange/screenshot.d.ts +5 -0
  166. package/dist/engines/smartarrange/screenshot.d.ts.map +1 -0
  167. package/dist/engines/smartarrange/screenshot.js +117 -0
  168. package/dist/engines/smartarrange/screenshot.js.map +1 -0
  169. package/dist/main.js +127 -92
  170. package/dist/main.js.map +1 -1
  171. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  172. package/dist/manager/worker-manager-impl.js +7 -0
  173. package/dist/manager/worker-manager-impl.js.map +1 -1
  174. package/dist/providers/ACPWorkerRuntime.d.ts +2 -0
  175. package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
  176. package/dist/providers/ACPWorkerRuntime.js +1 -0
  177. package/dist/providers/ACPWorkerRuntime.js.map +1 -1
  178. package/dist/providers/LLMClient.d.ts +32 -0
  179. package/dist/providers/LLMClient.d.ts.map +1 -0
  180. package/dist/providers/LLMClient.js +108 -0
  181. package/dist/providers/LLMClient.js.map +1 -0
  182. package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
  183. package/dist/providers/MarkdownTaskBackend.js +3 -2
  184. package/dist/providers/MarkdownTaskBackend.js.map +1 -1
  185. package/dist/providers/llm/chatTools.d.ts +11 -0
  186. package/dist/providers/llm/chatTools.d.ts.map +1 -0
  187. package/dist/providers/llm/chatTools.js +57 -0
  188. package/dist/providers/llm/chatTools.js.map +1 -0
  189. package/dist/providers/llm/codexAuth.d.ts +8 -0
  190. package/dist/providers/llm/codexAuth.d.ts.map +1 -0
  191. package/dist/providers/llm/codexAuth.js +57 -0
  192. package/dist/providers/llm/codexAuth.js.map +1 -0
  193. package/dist/providers/llm/codexModel.d.ts +14 -0
  194. package/dist/providers/llm/codexModel.d.ts.map +1 -0
  195. package/dist/providers/llm/codexModel.js +96 -0
  196. package/dist/providers/llm/codexModel.js.map +1 -0
  197. package/dist/providers/llm/localSubscription.d.ts +15 -0
  198. package/dist/providers/llm/localSubscription.d.ts.map +1 -0
  199. package/dist/providers/llm/localSubscription.js +66 -0
  200. package/dist/providers/llm/localSubscription.js.map +1 -0
  201. package/dist/providers/llm/modelFactory.d.ts +14 -0
  202. package/dist/providers/llm/modelFactory.d.ts.map +1 -0
  203. package/dist/providers/llm/modelFactory.js +22 -0
  204. package/dist/providers/llm/modelFactory.js.map +1 -0
  205. package/dist/providers/llm/monitorSkills.d.ts +6 -0
  206. package/dist/providers/llm/monitorSkills.d.ts.map +1 -0
  207. package/dist/providers/llm/monitorSkills.js +37 -0
  208. package/dist/providers/llm/monitorSkills.js.map +1 -0
  209. package/dist/providers/llm/probeTools.d.ts +7 -0
  210. package/dist/providers/llm/probeTools.d.ts.map +1 -0
  211. package/dist/providers/llm/probeTools.js +84 -0
  212. package/dist/providers/llm/probeTools.js.map +1 -0
  213. package/dist/providers/llm/providers.d.ts +26 -0
  214. package/dist/providers/llm/providers.d.ts.map +1 -0
  215. package/dist/providers/llm/providers.js +68 -0
  216. package/dist/providers/llm/providers.js.map +1 -0
  217. package/dist/providers/llm/skillTools.d.ts +4 -0
  218. package/dist/providers/llm/skillTools.d.ts.map +1 -0
  219. package/dist/providers/llm/skillTools.js +42 -0
  220. package/dist/providers/llm/skillTools.js.map +1 -0
  221. package/dist/providers/llm/workerTools.d.ts +9 -0
  222. package/dist/providers/llm/workerTools.d.ts.map +1 -0
  223. package/dist/providers/llm/workerTools.js +111 -0
  224. package/dist/providers/llm/workerTools.js.map +1 -0
  225. package/dist/providers/mcp/spsMcpServer.d.ts +15 -0
  226. package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -0
  227. package/dist/providers/mcp/spsMcpServer.js +67 -0
  228. package/dist/providers/mcp/spsMcpServer.js.map +1 -0
  229. package/dist/providers/mcp/spsMcpStdio.d.ts +2 -0
  230. package/dist/providers/mcp/spsMcpStdio.d.ts.map +1 -0
  231. package/dist/providers/mcp/spsMcpStdio.js +32 -0
  232. package/dist/providers/mcp/spsMcpStdio.js.map +1 -0
  233. package/dist/providers/mcp/spsMcpStdioConfig.d.ts +11 -0
  234. package/dist/providers/mcp/spsMcpStdioConfig.d.ts.map +1 -0
  235. package/dist/providers/mcp/spsMcpStdioConfig.js +19 -0
  236. package/dist/providers/mcp/spsMcpStdioConfig.js.map +1 -0
  237. package/dist/server.d.ts +23 -0
  238. package/dist/server.d.ts.map +1 -1
  239. package/dist/server.js +23 -0
  240. package/dist/server.js.map +1 -1
  241. package/dist/services/ChatService.d.ts +10 -0
  242. package/dist/services/ChatService.d.ts.map +1 -1
  243. package/dist/services/ChatService.js +2 -0
  244. package/dist/services/ChatService.js.map +1 -1
  245. package/dist/services/LogService.d.ts +1 -1
  246. package/dist/services/LogService.d.ts.map +1 -1
  247. package/dist/services/LogService.js +3 -2
  248. package/dist/services/LogService.js.map +1 -1
  249. package/dist/services/ProjectService.d.ts +12 -2
  250. package/dist/services/ProjectService.d.ts.map +1 -1
  251. package/dist/services/ProjectService.js +1 -0
  252. package/dist/services/ProjectService.js.map +1 -1
  253. package/dist/services/SkillService.js +11 -13
  254. package/dist/services/SkillService.js.map +1 -1
  255. package/dist/services/SmartArrangeService.d.ts +12 -0
  256. package/dist/services/SmartArrangeService.d.ts.map +1 -0
  257. package/dist/services/SmartArrangeService.js +37 -0
  258. package/dist/services/SmartArrangeService.js.map +1 -0
  259. package/dist/services/SystemService.d.ts +20 -0
  260. package/dist/services/SystemService.d.ts.map +1 -1
  261. package/dist/services/SystemService.js +93 -0
  262. package/dist/services/SystemService.js.map +1 -1
  263. package/dist/services/WorkerService.d.ts +8 -0
  264. package/dist/services/WorkerService.d.ts.map +1 -1
  265. package/dist/services/WorkerService.js +73 -3
  266. package/dist/services/WorkerService.js.map +1 -1
  267. package/dist/services/container.d.ts +2 -0
  268. package/dist/services/container.d.ts.map +1 -1
  269. package/dist/services/container.js +2 -0
  270. package/dist/services/container.js.map +1 -1
  271. package/dist/shared/localTime.d.ts +8 -0
  272. package/dist/shared/localTime.d.ts.map +1 -0
  273. package/dist/shared/localTime.js +11 -0
  274. package/dist/shared/localTime.js.map +1 -0
  275. package/dist/shared/runtimePaths.d.ts +1 -1
  276. package/dist/shared/runtimePaths.d.ts.map +1 -1
  277. package/dist/shared/runtimePaths.js +2 -2
  278. package/dist/shared/runtimePaths.js.map +1 -1
  279. package/dist/shared/runtimeSchemas.d.ts +74 -245
  280. package/dist/shared/runtimeSchemas.d.ts.map +1 -1
  281. package/dist/shared/runtimeSchemas.js +2 -2
  282. package/dist/shared/runtimeSchemas.js.map +1 -1
  283. package/monitor-skills/probe-playbook/SKILL.md +32 -0
  284. package/monitor-skills/visual-rubric/SKILL.md +34 -0
  285. package/package.json +8 -8
  286. package/project-template/.claude/hooks/stop.sh +3 -1
  287. package/dist/console-assets/assets/index-BvWWj69G.js +0 -557
  288. package/dist/console-assets/assets/index-Eo4PuNPl.css +0 -10
  289. package/dist/interfaces/ACPClient.d.ts +0 -107
  290. package/dist/interfaces/ACPClient.d.ts.map +0 -1
  291. package/dist/interfaces/ACPClient.js +0 -17
  292. package/dist/interfaces/ACPClient.js.map +0 -1
  293. package/dist/interfaces/AgentRuntime.d.ts +0 -40
  294. package/dist/interfaces/AgentRuntime.d.ts.map +0 -1
  295. package/dist/interfaces/AgentRuntime.js +0 -17
  296. package/dist/interfaces/AgentRuntime.js.map +0 -1
  297. package/dist/manager/agentmemory.d.ts +0 -6
  298. package/dist/manager/agentmemory.d.ts.map +0 -1
  299. package/dist/manager/agentmemory.js +0 -73
  300. package/dist/manager/agentmemory.js.map +0 -1
  301. package/dist/models/acp.d.ts +0 -64
  302. package/dist/models/acp.d.ts.map +0 -1
  303. package/dist/models/acp.js +0 -17
  304. package/dist/models/acp.js.map +0 -1
  305. package/dist/providers/LocalACPClient.d.ts +0 -27
  306. package/dist/providers/LocalACPClient.d.ts.map +0 -1
  307. package/dist/providers/LocalACPClient.js +0 -26
  308. package/dist/providers/LocalACPClient.js.map +0 -1
  309. package/dist/providers/adapters/AcpSdkAdapter.d.ts +0 -24
  310. package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +0 -1
  311. package/dist/providers/adapters/AcpSdkAdapter.js +0 -439
  312. package/dist/providers/adapters/AcpSdkAdapter.js.map +0 -1
  313. package/dist/providers/adapters/acp-fs-handlers.d.ts +0 -26
  314. package/dist/providers/adapters/acp-fs-handlers.d.ts.map +0 -1
  315. package/dist/providers/adapters/acp-fs-handlers.js +0 -61
  316. package/dist/providers/adapters/acp-fs-handlers.js.map +0 -1
  317. package/dist/providers/adapters/acp-permissions.d.ts +0 -42
  318. package/dist/providers/adapters/acp-permissions.d.ts.map +0 -1
  319. package/dist/providers/adapters/acp-permissions.js +0 -76
  320. package/dist/providers/adapters/acp-permissions.js.map +0 -1
  321. package/dist/providers/adapters/acp-session-accumulator.d.ts +0 -55
  322. package/dist/providers/adapters/acp-session-accumulator.d.ts.map +0 -1
  323. package/dist/providers/adapters/acp-session-accumulator.js +0 -133
  324. package/dist/providers/adapters/acp-session-accumulator.js.map +0 -1
  325. package/dist/providers/adapters/acp-terminal-manager.d.ts +0 -56
  326. package/dist/providers/adapters/acp-terminal-manager.d.ts.map +0 -1
  327. package/dist/providers/adapters/acp-terminal-manager.js +0 -127
  328. package/dist/providers/adapters/acp-terminal-manager.js.map +0 -1
  329. package/project-template/logs/.gitkeep +0 -0
  330. package/skills/architecture-decision-records/SKILL.md +0 -207
  331. package/skills/backend/SKILL.md +0 -62
  332. package/skills/backend/references/api-design.md +0 -168
  333. package/skills/backend/references/caching.md +0 -181
  334. package/skills/backend/references/data-access.md +0 -173
  335. package/skills/backend/references/layering.md +0 -181
  336. package/skills/backend/references/observability.md +0 -190
  337. package/skills/backend/references/resilience.md +0 -201
  338. package/skills/backend/references/security.md +0 -186
  339. package/skills/backend-architect/SKILL.md +0 -119
  340. package/skills/code-reviewer/SKILL.md +0 -143
  341. package/skills/coding-standards/SKILL.md +0 -60
  342. package/skills/coding-standards/references/clean-code.md +0 -258
  343. package/skills/coding-standards/references/code-review.md +0 -192
  344. package/skills/coding-standards/references/commits-and-prs.md +0 -226
  345. package/skills/coding-standards/references/error-strategy.md +0 -193
  346. package/skills/coding-standards/references/naming.md +0 -185
  347. package/skills/coding-standards/references/tdd.md +0 -171
  348. package/skills/database/SKILL.md +0 -53
  349. package/skills/database/references/indexing.md +0 -190
  350. package/skills/database/references/migrations.md +0 -199
  351. package/skills/database/references/nosql.md +0 -185
  352. package/skills/database/references/queries.md +0 -295
  353. package/skills/database/references/scaling.md +0 -203
  354. package/skills/database/references/schema.md +0 -191
  355. package/skills/database-optimizer/SKILL.md +0 -168
  356. package/skills/debugging-workflow/SKILL.md +0 -244
  357. package/skills/dev-worker/SKILL.md +0 -40
  358. package/skills/dev-worker/references/architect.md +0 -139
  359. package/skills/dev-worker/references/backend.md +0 -163
  360. package/skills/dev-worker/references/frontend.md +0 -122
  361. package/skills/dev-worker/references/fullstack.md +0 -179
  362. package/skills/dev-worker/references/optimizer.md +0 -151
  363. package/skills/dev-worker/references/phaser.md +0 -109
  364. package/skills/dev-worker/references/prototyper.md +0 -171
  365. package/skills/dev-worker/references/reviewer.md +0 -122
  366. package/skills/dev-worker/references/security.md +0 -154
  367. package/skills/dev-worker/references/senior.md +0 -155
  368. package/skills/dev-worker/references/typescript.md +0 -65
  369. package/skills/dev-worker/references/writer.md +0 -201
  370. package/skills/devops/SKILL.md +0 -55
  371. package/skills/devops/references/ci-cd.md +0 -204
  372. package/skills/devops/references/containers.md +0 -272
  373. package/skills/devops/references/deploy.md +0 -201
  374. package/skills/devops/references/iac.md +0 -252
  375. package/skills/devops/references/observability.md +0 -228
  376. package/skills/devops/references/secrets.md +0 -178
  377. package/skills/devops-automator/SKILL.md +0 -164
  378. package/skills/frontend/SKILL.md +0 -52
  379. package/skills/frontend/references/accessibility.md +0 -222
  380. package/skills/frontend/references/components.md +0 -206
  381. package/skills/frontend/references/performance.md +0 -219
  382. package/skills/frontend/references/routing.md +0 -209
  383. package/skills/frontend/references/state.md +0 -190
  384. package/skills/frontend/references/testing.md +0 -216
  385. package/skills/frontend-developer/SKILL.md +0 -115
  386. package/skills/git-workflow/SKILL.md +0 -355
  387. package/skills/golang/SKILL.md +0 -49
  388. package/skills/golang/references/concurrency.md +0 -284
  389. package/skills/golang/references/errors.md +0 -241
  390. package/skills/golang/references/idioms.md +0 -285
  391. package/skills/golang/references/testing.md +0 -238
  392. package/skills/java/SKILL.md +0 -50
  393. package/skills/java/references/concurrency.md +0 -194
  394. package/skills/java/references/idioms.md +0 -283
  395. package/skills/java/references/testing.md +0 -228
  396. package/skills/kotlin/SKILL.md +0 -47
  397. package/skills/kotlin/references/coroutines.md +0 -240
  398. package/skills/kotlin/references/idioms.md +0 -268
  399. package/skills/kotlin/references/testing.md +0 -219
  400. package/skills/mobile/SKILL.md +0 -50
  401. package/skills/mobile/references/architecture.md +0 -204
  402. package/skills/mobile/references/navigation.md +0 -158
  403. package/skills/mobile/references/performance.md +0 -152
  404. package/skills/mobile/references/platform.md +0 -166
  405. package/skills/mobile/references/state-and-data.md +0 -174
  406. package/skills/python/SKILL.md +0 -51
  407. package/skills/python/THIRD_PARTY.md +0 -14
  408. package/skills/python/references/async.md +0 -218
  409. package/skills/python/references/error-handling.md +0 -254
  410. package/skills/python/references/idioms.md +0 -279
  411. package/skills/python/references/packaging.md +0 -233
  412. package/skills/python/references/testing.md +0 -269
  413. package/skills/python/references/typing.md +0 -292
  414. package/skills/qa-tester/SKILL.md +0 -186
  415. package/skills/rust/SKILL.md +0 -50
  416. package/skills/rust/references/async.md +0 -224
  417. package/skills/rust/references/errors.md +0 -240
  418. package/skills/rust/references/ownership.md +0 -263
  419. package/skills/rust/references/testing.md +0 -274
  420. package/skills/rust/references/traits.md +0 -250
  421. package/skills/security-engineer/SKILL.md +0 -157
  422. package/skills/sps-memory/SKILL.md +0 -213
  423. package/skills/sps-pipeline/SKILL.md +0 -476
  424. package/skills/swift/SKILL.md +0 -48
  425. package/skills/swift/references/concurrency.md +0 -280
  426. package/skills/swift/references/idioms.md +0 -334
  427. package/skills/swift/references/testing.md +0 -229
  428. package/skills/tax-worker/SKILL.md +0 -150
  429. package/skills/tax-worker/references/account-codes.md +0 -165
  430. package/skills/typescript/SKILL.md +0 -51
  431. package/skills/typescript/references/async.md +0 -241
  432. package/skills/typescript/references/errors.md +0 -208
  433. package/skills/typescript/references/idioms.md +0 -246
  434. package/skills/typescript/references/testing.md +0 -225
  435. package/skills/typescript/references/tooling.md +0 -208
  436. package/skills/typescript/references/types.md +0 -259
  437. package/skills/wiki-update/SKILL.md +0 -300
@@ -0,0 +1,8 @@
1
+ export declare const CODEX_RESPONSES_BASE = "https://chatgpt.com/backend-api/codex";
2
+ export interface CodexCreds {
3
+ accessToken: string;
4
+ accountId: string;
5
+ }
6
+ /** 取可用的 Codex 凭据;access_token 过期(留 2 分钟余量)则刷新并写回 auth.json。 */
7
+ export declare function getCodexCreds(): Promise<CodexCreds>;
8
+ //# sourceMappingURL=codexAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexAuth.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/codexAuth.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,oBAAoB,0CAA0C,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD,+DAA+D;AAC/D,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAmCzD"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @module providers/llm/codexAuth
3
+ * @description Codex(ChatGPT 订阅)凭据:读 ~/.codex/auth.json,access_token 过期就用
4
+ * refresh_token 自动换新并写回。把订阅当 OpenAI Agents SDK 的模型用。
5
+ * (移植自 gameforge codex-auth,纯 node + fetch,无外部依赖。)
6
+ * @layer provider
7
+ * @boundedContext smartarrange
8
+ */
9
+ import { readFileSync, writeFileSync } from 'node:fs';
10
+ import { homedir } from 'node:os';
11
+ import { join } from 'node:path';
12
+ const AUTH_FILE = process.env.CODEX_AUTH_FILE || join(homedir(), '.codex', 'auth.json');
13
+ const CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';
14
+ const TOKEN_URL = 'https://auth.openai.com/oauth/token';
15
+ export const CODEX_RESPONSES_BASE = 'https://chatgpt.com/backend-api/codex';
16
+ function jwtExpMs(jwt) {
17
+ try {
18
+ const p = JSON.parse(Buffer.from(jwt.split('.')[1], 'base64url').toString());
19
+ return (p.exp || 0) * 1000;
20
+ }
21
+ catch {
22
+ return 0;
23
+ }
24
+ }
25
+ /** 取可用的 Codex 凭据;access_token 过期(留 2 分钟余量)则刷新并写回 auth.json。 */
26
+ export async function getCodexCreds() {
27
+ const raw = JSON.parse(readFileSync(AUTH_FILE, 'utf-8'));
28
+ const access = raw.tokens?.access_token;
29
+ const refresh = raw.tokens?.refresh_token;
30
+ const accountId = raw.tokens?.account_id;
31
+ if (!access || !refresh || !accountId)
32
+ throw new Error('~/.codex/auth.json 缺 token/account_id(请先用 codex 登录)');
33
+ if (Date.now() <= jwtExpMs(access) - 120_000) {
34
+ return { accessToken: access, accountId };
35
+ }
36
+ const res = await fetch(TOKEN_URL, {
37
+ method: 'POST',
38
+ headers: { 'content-type': 'application/json' },
39
+ body: JSON.stringify({ grant_type: 'refresh_token', client_id: CLIENT_ID, refresh_token: refresh }),
40
+ });
41
+ if (!res.ok)
42
+ throw new Error(`Codex token 刷新失败 HTTP ${res.status}: ${(await res.text()).slice(0, 240)}`);
43
+ const j = (await res.json());
44
+ if (!j.access_token)
45
+ throw new Error('Codex 刷新响应缺 access_token');
46
+ raw.tokens = {
47
+ ...raw.tokens,
48
+ access_token: j.access_token,
49
+ refresh_token: j.refresh_token || refresh,
50
+ id_token: j.id_token || raw.tokens?.id_token,
51
+ account_id: accountId,
52
+ };
53
+ raw.last_refresh = new Date().toISOString();
54
+ writeFileSync(AUTH_FILE, JSON.stringify(raw, null, 2));
55
+ return { accessToken: j.access_token, accountId };
56
+ }
57
+ //# sourceMappingURL=codexAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexAuth.js","sourceRoot":"","sources":["../../../src/providers/llm/codexAuth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @module providers/llm/codexModel
3
+ * @description Codex(ChatGPT 订阅)接入 @openai/agents 的 Model 适配器。
4
+ * Codex 私有端点两处特殊:① 必须 store:false;② 流式 response.completed 的 output
5
+ * 是空数组(内容只走 output_item/delta)→ SDK 误判没输出反复重发。
6
+ * 修法:自定义 fetch —— 刷 token + 注鉴权头 + force store:false + 把流式 item 注回 completed.output。
7
+ * (移植自 gameforge codex-model。)
8
+ * @layer provider
9
+ * @boundedContext smartarrange
10
+ */
11
+ import { OpenAIResponsesModel } from '@openai/agents';
12
+ /** 构造一个走 Codex(ChatGPT 订阅)的 Responses Model:每请求刷新 token、注鉴权头、store:false、修 SSE。 */
13
+ export declare function buildCodexModel(model: string): OpenAIResponsesModel;
14
+ //# sourceMappingURL=codexModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexModel.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/codexModel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAqDtD,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAgCnE"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @module providers/llm/codexModel
3
+ * @description Codex(ChatGPT 订阅)接入 @openai/agents 的 Model 适配器。
4
+ * Codex 私有端点两处特殊:① 必须 store:false;② 流式 response.completed 的 output
5
+ * 是空数组(内容只走 output_item/delta)→ SDK 误判没输出反复重发。
6
+ * 修法:自定义 fetch —— 刷 token + 注鉴权头 + force store:false + 把流式 item 注回 completed.output。
7
+ * (移植自 gameforge codex-model。)
8
+ * @layer provider
9
+ * @boundedContext smartarrange
10
+ */
11
+ import { OpenAIResponsesModel } from '@openai/agents';
12
+ import OpenAI from 'openai';
13
+ import { CODEX_RESPONSES_BASE, getCodexCreds } from './codexAuth.js';
14
+ /** 把流式 output_item.done 的 item 注入空的 response.completed.output。 */
15
+ function fixCodexSSE(body) {
16
+ const items = [];
17
+ let buf = '';
18
+ const dec = new TextDecoder();
19
+ const enc = new TextEncoder();
20
+ const tr = new TransformStream({
21
+ transform(chunk, ctrl) {
22
+ buf += dec.decode(chunk, { stream: true });
23
+ let i;
24
+ let out = '';
25
+ while ((i = buf.indexOf('\n')) >= 0) {
26
+ const line = buf.slice(0, i);
27
+ buf = buf.slice(i + 1);
28
+ let ol = line;
29
+ if (line.startsWith('data:')) {
30
+ const p = line.slice(5).trim();
31
+ if (p && p !== '[DONE]') {
32
+ try {
33
+ const e = JSON.parse(p);
34
+ if (e.type === 'response.output_item.done' && e.item)
35
+ items.push(e.item);
36
+ if (e.type === 'response.completed' &&
37
+ e.response &&
38
+ (!e.response.output || !e.response.output.length)) {
39
+ e.response.output = items.slice();
40
+ ol = `data: ${JSON.stringify(e)}`;
41
+ }
42
+ }
43
+ catch {
44
+ /* 非 JSON data 行 → 原样透传 */
45
+ }
46
+ }
47
+ }
48
+ out += `${ol}\n`;
49
+ }
50
+ if (out)
51
+ ctrl.enqueue(enc.encode(out));
52
+ },
53
+ flush(ctrl) {
54
+ if (buf)
55
+ ctrl.enqueue(enc.encode(buf));
56
+ },
57
+ });
58
+ return body.pipeThrough(tr);
59
+ }
60
+ /** 构造一个走 Codex(ChatGPT 订阅)的 Responses Model:每请求刷新 token、注鉴权头、store:false、修 SSE。 */
61
+ export function buildCodexModel(model) {
62
+ const codexFetch = async (url, init) => {
63
+ const creds = await getCodexCreds();
64
+ const headers = new Headers((init?.headers ?? undefined));
65
+ headers.set('authorization', `Bearer ${creds.accessToken}`);
66
+ headers.set('chatgpt-account-id', creds.accountId);
67
+ headers.set('OpenAI-Beta', 'responses=experimental');
68
+ headers.set('originator', 'sps');
69
+ let body = init?.body;
70
+ if (typeof body === 'string') {
71
+ try {
72
+ const b = JSON.parse(body);
73
+ b.store = false;
74
+ body = JSON.stringify(b);
75
+ }
76
+ catch {
77
+ /* keep */
78
+ }
79
+ }
80
+ const res = await fetch(url, { ...init, headers, body });
81
+ if (!res.ok || !res.body)
82
+ return res;
83
+ return new Response(fixCodexSSE(res.body), {
84
+ status: res.status,
85
+ statusText: res.statusText,
86
+ headers: res.headers,
87
+ });
88
+ };
89
+ const client = new OpenAI({
90
+ baseURL: CODEX_RESPONSES_BASE,
91
+ apiKey: 'codex-subscription',
92
+ fetch: codexFetch,
93
+ });
94
+ return new OpenAIResponsesModel(client, model);
95
+ }
96
+ //# sourceMappingURL=codexModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexModel.js","sourceRoot":"","sources":["../../../src/providers/llm/codexModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** 官方 Claude 订阅可用的模型(别名,claude CLI/agent-sdk 认 sonnet/opus/haiku)。 */
2
+ export declare const CLAUDE_SUB_MODELS: string[];
3
+ /** Codex(ChatGPT 订阅)可用的模型。 */
4
+ export declare const CODEX_SUB_MODELS: string[];
5
+ export interface LocalSub {
6
+ available: boolean;
7
+ models: string[];
8
+ /** 订阅类型/模式等说明(展示用);不可用时为原因。 */
9
+ detail: string;
10
+ }
11
+ /** Claude 官方订阅:有 accessToken 且(未过期 或 有 refreshToken 可续)→ 可用。 */
12
+ export declare function detectClaudeSub(): LocalSub;
13
+ /** Codex(ChatGPT 订阅):有 access_token + account_id(过期由 refresh 处理)→ 可用。 */
14
+ export declare function detectCodexSub(): LocalSub;
15
+ //# sourceMappingURL=localSubscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localSubscription.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/localSubscription.ts"],"names":[],"mappings":"AAcA,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,UAA8B,CAAC;AAC7D,8BAA8B;AAC9B,eAAO,MAAM,gBAAgB,UAAgE,CAAC;AAE9F,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD,gEAAgE;AAChE,wBAAgB,eAAe,IAAI,QAAQ,CAe1C;AAED,yEAAyE;AACzE,wBAAgB,cAAc,IAAI,QAAQ,CAiBzC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @module providers/llm/localSubscription
3
+ * @description 读取本机"官方订阅"凭据并验证可用,暴露其可用模型:
4
+ * - Claude 官方订阅:~/.claude/.credentials.json(claudeAiOauth)
5
+ * - Codex(ChatGPT 订阅):~/.codex/auth.json(tokens)
6
+ * "验证可用" = 凭据文件存在 + token 未过期(或有 refresh_token 可续);纯本地、无网络。
7
+ * 只有验证通过才返回 available:true,供控制台/新建项目作为内置可选模型展示。
8
+ * @layer provider
9
+ * @boundedContext smartarrange
10
+ */
11
+ import { existsSync, readFileSync } from 'node:fs';
12
+ import { homedir } from 'node:os';
13
+ import { join } from 'node:path';
14
+ /** 官方 Claude 订阅可用的模型(别名,claude CLI/agent-sdk 认 sonnet/opus/haiku)。 */
15
+ export const CLAUDE_SUB_MODELS = ['sonnet', 'opus', 'haiku'];
16
+ /** Codex(ChatGPT 订阅)可用的模型。 */
17
+ export const CODEX_SUB_MODELS = ['gpt-5.5', 'gpt-5.4', 'gpt-5.3-mini', 'gpt-5.3-codex-spark'];
18
+ function jwtExpMs(jwt) {
19
+ try {
20
+ const p = JSON.parse(Buffer.from(jwt.split('.')[1], 'base64url').toString());
21
+ return (p.exp || 0) * 1000;
22
+ }
23
+ catch {
24
+ return 0;
25
+ }
26
+ }
27
+ /** Claude 官方订阅:有 accessToken 且(未过期 或 有 refreshToken 可续)→ 可用。 */
28
+ export function detectClaudeSub() {
29
+ const file = join(homedir(), '.claude', '.credentials.json');
30
+ if (!existsSync(file))
31
+ return { available: false, models: [], detail: '未登录(无 .credentials.json)' };
32
+ try {
33
+ const raw = JSON.parse(readFileSync(file, 'utf-8'));
34
+ const o = raw.claudeAiOauth;
35
+ if (!o?.accessToken)
36
+ return { available: false, models: [], detail: '未登录(无 accessToken)' };
37
+ const fresh = typeof o.expiresAt === 'number' && o.expiresAt > Date.now();
38
+ if (!fresh && !o.refreshToken)
39
+ return { available: false, models: [], detail: 'token 已过期且无法续期' };
40
+ return { available: true, models: CLAUDE_SUB_MODELS, detail: o.subscriptionType || 'claude.ai' };
41
+ }
42
+ catch {
43
+ return { available: false, models: [], detail: '凭据解析失败' };
44
+ }
45
+ }
46
+ /** Codex(ChatGPT 订阅):有 access_token + account_id(过期由 refresh 处理)→ 可用。 */
47
+ export function detectCodexSub() {
48
+ const file = process.env.CODEX_AUTH_FILE || join(homedir(), '.codex', 'auth.json');
49
+ if (!existsSync(file))
50
+ return { available: false, models: [], detail: '未登录(无 auth.json)' };
51
+ try {
52
+ const raw = JSON.parse(readFileSync(file, 'utf-8'));
53
+ const tok = raw.tokens;
54
+ if (!tok?.access_token || !tok.account_id)
55
+ return { available: false, models: [], detail: '未登录(缺 token/account_id)' };
56
+ // access_token 过期但有 refresh_token → 仍可用(getCodexCreds 会自动续)。
57
+ const fresh = jwtExpMs(tok.access_token) > Date.now();
58
+ if (!fresh && !tok.refresh_token)
59
+ return { available: false, models: [], detail: 'token 已过期且无法续期' };
60
+ return { available: true, models: CODEX_SUB_MODELS, detail: raw.auth_mode || 'chatgpt' };
61
+ }
62
+ catch {
63
+ return { available: false, models: [], detail: '凭据解析失败' };
64
+ }
65
+ }
66
+ //# sourceMappingURL=localSubscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localSubscription.js","sourceRoot":"","sources":["../../../src/providers/llm/localSubscription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @module providers/llm/modelFactory
3
+ * @description reviewer(OpenAI 兼容)model 工厂——同构 gameforge configureLLM 的 provider 分派:
4
+ * providerId==='codex' → codex-auth 层;否则 → 三方 OpenAI 兼容 API。
5
+ * @layer provider
6
+ * @boundedContext smartarrange
7
+ */
8
+ import { OpenAIChatCompletionsModel } from '@openai/agents';
9
+ /** 据 reviewer 配置造一个 SDK Model。 */
10
+ export declare function createReviewerModel(cfg: {
11
+ providerId: string;
12
+ model: string;
13
+ }): import("@openai/agents").OpenAIResponsesModel | OpenAIChatCompletionsModel;
14
+ //# sourceMappingURL=modelFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelFactory.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/modelFactory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAK5D,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,8EAO7E"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @module providers/llm/modelFactory
3
+ * @description reviewer(OpenAI 兼容)model 工厂——同构 gameforge configureLLM 的 provider 分派:
4
+ * providerId==='codex' → codex-auth 层;否则 → 三方 OpenAI 兼容 API。
5
+ * @layer provider
6
+ * @boundedContext smartarrange
7
+ */
8
+ import { OpenAIChatCompletionsModel } from '@openai/agents';
9
+ import OpenAI from 'openai';
10
+ import { buildCodexModel } from './codexModel.js';
11
+ import { getAgentProvider } from './providers.js';
12
+ /** 据 reviewer 配置造一个 SDK Model。 */
13
+ export function createReviewerModel(cfg) {
14
+ if (cfg.providerId === 'codex')
15
+ return buildCodexModel(cfg.model);
16
+ const p = getAgentProvider(cfg.providerId);
17
+ if (!p)
18
+ throw new Error(`未知 reviewer provider: ${cfg.providerId}(检查 ~/.coral/game-platform/agent-providers.json)`);
19
+ const client = new OpenAI({ baseURL: p.baseUrl.replace(/\/+$/, ''), apiKey: p.apiKey });
20
+ return new OpenAIChatCompletionsModel(client, cfg.model);
21
+ }
22
+ //# sourceMappingURL=modelFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelFactory.js","sourceRoot":"","sources":["../../../src/providers/llm/modelFactory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,kCAAkC;AAClC,MAAM,UAAU,mBAAmB,CAAC,GAA0C;IAC5E,IAAI,GAAG,CAAC,UAAU,KAAK,OAAO;QAAE,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAElE,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,UAAU,kDAAkD,CAAC,CAAC;IACnH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,OAAO,IAAI,0BAA0B,CAAC,MAAe,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 加载监工技能池**正文**(高优先级源覆盖同名),拼成一段可塞进指令的文本。
3
+ * 无任何技能 → 返回空串(orchestrator 退化到内建基础指令)。
4
+ */
5
+ export declare function loadMonitorSkills(projectDir?: string): string;
6
+ //# sourceMappingURL=monitorSkills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitorSkills.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/monitorSkills.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAY7D"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @module providers/llm/monitorSkills
3
+ * @description 监工(OpenAI orchestrator)技能池加载器。OpenAI agent 不像 claude 自动发现 SKILL.md,
4
+ * 所以这里把"监工专用 playbook"(探查 SOP / 视觉评分卡)的**正文全量**读出拼进 orchestrator
5
+ * 指令(reviewer 是"推"模型,判据常驻,见 skills-manager-design §3/§5)。
6
+ * 发现/合并复用 `SkillsManager` 的 `monitor-skills` 命名空间:
7
+ * 项目 <cwd>/.sps/monitor-skills > 用户 ~/.coral/agents/monitor-skills > 随包内建。
8
+ * @layer provider
9
+ * @boundedContext smartarrange
10
+ */
11
+ import { dirname, resolve } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+ import { SkillsManager } from '../../core/skills/index.js';
14
+ /** 随包内建目录:dist/providers/llm/monitorSkills.js → 包根/monitor-skills。 */
15
+ function bundledDir() {
16
+ const here = dirname(fileURLToPath(import.meta.url));
17
+ return resolve(here, '..', '..', '..', 'monitor-skills');
18
+ }
19
+ /**
20
+ * 加载监工技能池**正文**(高优先级源覆盖同名),拼成一段可塞进指令的文本。
21
+ * 无任何技能 → 返回空串(orchestrator 退化到内建基础指令)。
22
+ */
23
+ export function loadMonitorSkills(projectDir) {
24
+ // 无 projectDir 时用一个不存在的 cwd,使「项目」根落空(只剩 user + bundled),保持原行为。
25
+ const mgr = new SkillsManager({
26
+ cwd: projectDir ?? '/__sps_no_project__',
27
+ bundledMonitorSkillsDir: bundledDir(),
28
+ });
29
+ const bodies = mgr
30
+ .discover('monitor-skills')
31
+ .map((m) => mgr.load(m.name, 'monitor-skills'))
32
+ .filter((b) => Boolean(b));
33
+ if (!bodies.length)
34
+ return '';
35
+ return ['\n\n=== 监工技能手册(务必遵守)===', ...bodies].join('\n\n');
36
+ }
37
+ //# sourceMappingURL=monitorSkills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitorSkills.js","sourceRoot":"","sources":["../../../src/providers/llm/monitorSkills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,sEAAsE;AACtE,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAmB;IACnD,+DAA+D;IAC/D,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC;QAC5B,GAAG,EAAE,UAAU,IAAI,qBAAqB;QACxC,uBAAuB,EAAE,UAAU,EAAE;KACtC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,GAAG;SACf,QAAQ,CAAC,gBAAgB,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,yBAAyB,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare function probeTools(cwd: string): (import("@openai/agents").FunctionTool<unknown, z.ZodObject<{
3
+ path: z.ZodString;
4
+ }, z.core.$strip>, string> | import("@openai/agents").FunctionTool<unknown, z.ZodObject<{
5
+ path: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>, string>)[];
7
+ //# sourceMappingURL=probeTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probeTools.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/probeTools.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM;;;;8BA8DrC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @module providers/llm/probeTools
3
+ * @description orchestrator 的**只读探查工具**(SDK function tools)——给监工一双"眼睛"自主探查
4
+ * workspace 产物。全部只读、限 PROJECT_DIR 内,绝不写(写=claude 的活,三权分立)。
5
+ * 工具结果(产物)当轮喂模型但不进持久 session(RuntimeSession 过滤)。
6
+ * @layer provider
7
+ * @boundedContext smartarrange
8
+ */
9
+ import { execSync } from 'node:child_process';
10
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
11
+ import { resolve } from 'node:path';
12
+ import { tool } from '@openai/agents';
13
+ import { z } from 'zod';
14
+ const MAX = 16000; // 单次返回上限,防爆上下文(超出用 offset 分段续读)
15
+ export function probeTools(cwd) {
16
+ const root = resolve(cwd);
17
+ const safe = (p) => {
18
+ const abs = resolve(root, p || '.');
19
+ if (abs !== root && !abs.startsWith(root + '/'))
20
+ throw new Error(`越界:${p} 不在项目目录内`);
21
+ return abs;
22
+ };
23
+ return [
24
+ tool({
25
+ name: 'read_file',
26
+ description: '读项目内一个文件的【全部内容】(只读,不截断)。用于核验产物是否真实存在、内容是否达标。',
27
+ parameters: z.object({ path: z.string().describe('相对项目根的文件路径') }),
28
+ async execute({ path }) {
29
+ try {
30
+ const abs = safe(path);
31
+ if (!existsSync(abs))
32
+ return `(文件不存在: ${path})`;
33
+ // 🔴 不截断返回整文件:旧版 .slice(0,8000) 会把"读到 8000 字符"误当成文件结尾 →
34
+ // 监工把完整文件(如 11KB 的 game.js)误判成"没写完/被截断"→ 冤枉返工陷死循环(深海霸主 15 轮)。
35
+ return readFileSync(abs, 'utf-8');
36
+ }
37
+ catch (e) {
38
+ return `读取失败: ${e instanceof Error ? e.message : String(e)}`;
39
+ }
40
+ },
41
+ }),
42
+ tool({
43
+ name: 'list_dir',
44
+ description: '列项目内目录(只读)。用于了解产物结构、确认文件是否生成。',
45
+ parameters: z.object({ path: z.string().optional().describe('相对路径,默认项目根') }),
46
+ async execute({ path }) {
47
+ try {
48
+ const abs = safe(path ?? '.');
49
+ if (!existsSync(abs))
50
+ return `(目录不存在: ${path})`;
51
+ return readdirSync(abs)
52
+ .map((n) => {
53
+ try {
54
+ return statSync(resolve(abs, n)).isDirectory() ? `${n}/` : n;
55
+ }
56
+ catch {
57
+ return n;
58
+ }
59
+ })
60
+ .join('\n')
61
+ .slice(0, MAX);
62
+ }
63
+ catch (e) {
64
+ return `列目录失败: ${e instanceof Error ? e.message : String(e)}`;
65
+ }
66
+ },
67
+ }),
68
+ tool({
69
+ name: 'git_diff',
70
+ description: '看工作区相对上次提交的改动(git diff)。用于审查上一卡到底改了什么。',
71
+ parameters: z.object({}),
72
+ async execute() {
73
+ try {
74
+ const out = execSync('git diff HEAD', { cwd: root, encoding: 'utf-8', maxBuffer: 4 * 1024 * 1024 });
75
+ return out.slice(0, MAX) || '(工作区无改动)';
76
+ }
77
+ catch (e) {
78
+ return `git diff 失败: ${e instanceof Error ? e.message : String(e)}`;
79
+ }
80
+ },
81
+ }),
82
+ ];
83
+ }
84
+ //# sourceMappingURL=probeTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probeTools.js","sourceRoot":"","sources":["../../../src/providers/llm/probeTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface ProviderEntry {
2
+ id: string;
3
+ name: string;
4
+ baseUrl: string;
5
+ apiKey: string;
6
+ models: string[];
7
+ /** gameforge 可能写的额外字段(createdAt 等);保留不丢。 */
8
+ [extra: string]: unknown;
9
+ }
10
+ /** 'anthropic' = worker/claude(providers.json);'openai' = reviewer/openai agent(agent-providers.json)。 */
11
+ export type ProviderKind = 'anthropic' | 'openai';
12
+ /** 列某类全部 provider。 */
13
+ export declare function listProviders(kind: ProviderKind): ProviderEntry[];
14
+ /** 新增或按 id 覆盖一个 provider(写共享 json,与 gameforge 同位置)。 */
15
+ export declare function upsertProvider(kind: ProviderKind, entry: ProviderEntry): void;
16
+ /** 按 id 删除一个 provider。返回是否删到。 */
17
+ export declare function deleteProvider(kind: ProviderKind, id: string): boolean;
18
+ /** OpenAI 兼容 provider(reviewer 用)。 */
19
+ export declare function getAgentProvider(id: string): ProviderEntry | undefined;
20
+ /** Anthropic 兼容 provider(worker 用)。 */
21
+ export declare function getProvider(id: string): ProviderEntry | undefined;
22
+ /** 列全部 OpenAI 兼容 provider(reviewer 候选)。 */
23
+ export declare function listAgentProviders(): ProviderEntry[];
24
+ /** 列全部 Anthropic 兼容 provider(worker 候选)。 */
25
+ export declare function listAnthropicProviders(): ProviderEntry[];
26
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/providers.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4CAA4C;IAC5C,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,0GAA0G;AAC1G,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAelD,sBAAsB;AACtB,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,EAAE,CAEjE;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAS7E;AAED,iCAAiC;AACjC,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAQtE;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEtE;AAED,uCAAuC;AACvC,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEjE;AAED,2CAA2C;AAC3C,wBAAgB,kBAAkB,IAAI,aAAa,EAAE,CAEpD;AAED,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,aAAa,EAAE,CAExD"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @module providers/llm/providers
3
+ * @description 读共享的三方兼容 provider 配置(与 gameforge 同位置,不依赖其代码):
4
+ * - agent-providers.json = OpenAI 兼容(给 reviewer / openai agent)
5
+ * - providers.json = Anthropic 兼容(给 worker / claude)
6
+ * @layer provider
7
+ * @boundedContext smartarrange
8
+ */
9
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
10
+ import { homedir } from 'node:os';
11
+ import { dirname, join } from 'node:path';
12
+ function fileFor(kind) {
13
+ return join(homedir(), '.coral', 'game-platform', kind === 'anthropic' ? 'providers.json' : 'agent-providers.json');
14
+ }
15
+ function readProviders(file) {
16
+ const p = join(homedir(), '.coral', 'game-platform', file);
17
+ try {
18
+ return existsSync(p) ? JSON.parse(readFileSync(p, 'utf-8')) : [];
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ }
24
+ /** 列某类全部 provider。 */
25
+ export function listProviders(kind) {
26
+ return readProviders(kind === 'anthropic' ? 'providers.json' : 'agent-providers.json');
27
+ }
28
+ /** 新增或按 id 覆盖一个 provider(写共享 json,与 gameforge 同位置)。 */
29
+ export function upsertProvider(kind, entry) {
30
+ const list = listProviders(kind);
31
+ const i = list.findIndex((x) => x.id === entry.id);
32
+ // 更新:合并保留既有额外字段(createdAt 等);新增:打 createdAt。
33
+ if (i >= 0)
34
+ list[i] = { ...list[i], ...entry };
35
+ else
36
+ list.push({ createdAt: new Date().toISOString(), ...entry });
37
+ const p = fileFor(kind);
38
+ mkdirSync(dirname(p), { recursive: true });
39
+ writeFileSync(p, JSON.stringify(list, null, 2));
40
+ }
41
+ /** 按 id 删除一个 provider。返回是否删到。 */
42
+ export function deleteProvider(kind, id) {
43
+ const list = listProviders(kind);
44
+ const next = list.filter((x) => x.id !== id);
45
+ if (next.length === list.length)
46
+ return false;
47
+ const p = fileFor(kind);
48
+ mkdirSync(dirname(p), { recursive: true });
49
+ writeFileSync(p, JSON.stringify(next, null, 2));
50
+ return true;
51
+ }
52
+ /** OpenAI 兼容 provider(reviewer 用)。 */
53
+ export function getAgentProvider(id) {
54
+ return readProviders('agent-providers.json').find((x) => x.id === id);
55
+ }
56
+ /** Anthropic 兼容 provider(worker 用)。 */
57
+ export function getProvider(id) {
58
+ return readProviders('providers.json').find((x) => x.id === id);
59
+ }
60
+ /** 列全部 OpenAI 兼容 provider(reviewer 候选)。 */
61
+ export function listAgentProviders() {
62
+ return readProviders('agent-providers.json');
63
+ }
64
+ /** 列全部 Anthropic 兼容 provider(worker 候选)。 */
65
+ export function listAnthropicProviders() {
66
+ return readProviders('providers.json');
67
+ }
68
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/providers/llm/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+ /** cwd = 会话/项目工作目录(决定项目级 .sps/skills);无 cwd → 只读全局 HQ(~/.coral/skills)。 */
3
+ export declare function skillTools(cwd?: string): import("@openai/agents").FunctionTool<unknown, z.ZodObject<{}, z.core.$strip>, string>[];
4
+ //# sourceMappingURL=skillTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillTools.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/skillTools.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,4FA4BtC"}