@coralai/sps-cli 0.55.12 → 0.56.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 (431) 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 +121 -0
  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/memory.d.ts.map +1 -1
  102. package/dist/core/memory.js +9 -12
  103. package/dist/core/memory.js.map +1 -1
  104. package/dist/core/memoryIngest.d.ts +18 -0
  105. package/dist/core/memoryIngest.d.ts.map +1 -0
  106. package/dist/core/memoryIngest.js +56 -0
  107. package/dist/core/memoryIngest.js.map +1 -0
  108. package/dist/core/memoryProvider.d.ts +63 -0
  109. package/dist/core/memoryProvider.d.ts.map +1 -0
  110. package/dist/core/memoryProvider.js +205 -0
  111. package/dist/core/memoryProvider.js.map +1 -0
  112. package/dist/core/skillStore.d.ts.map +1 -1
  113. package/dist/core/skillStore.js +2 -1
  114. package/dist/core/skillStore.js.map +1 -1
  115. package/dist/core/skills/SkillsManager.d.ts +38 -0
  116. package/dist/core/skills/SkillsManager.d.ts.map +1 -0
  117. package/dist/core/skills/SkillsManager.js +231 -0
  118. package/dist/core/skills/SkillsManager.js.map +1 -0
  119. package/dist/core/skills/distribution.d.ts +64 -0
  120. package/dist/core/skills/distribution.d.ts.map +1 -0
  121. package/dist/core/skills/distribution.js +269 -0
  122. package/dist/core/skills/distribution.js.map +1 -0
  123. package/dist/core/skills/index.d.ts +13 -0
  124. package/dist/core/skills/index.d.ts.map +1 -0
  125. package/dist/core/skills/index.js +13 -0
  126. package/dist/core/skills/index.js.map +1 -0
  127. package/dist/core/skills/types.d.ts +44 -0
  128. package/dist/core/skills/types.d.ts.map +1 -0
  129. package/dist/core/skills/types.js +9 -0
  130. package/dist/core/skills/types.js.map +1 -0
  131. package/dist/core/taskPrompts.d.ts +0 -12
  132. package/dist/core/taskPrompts.d.ts.map +1 -1
  133. package/dist/core/taskPrompts.js +0 -14
  134. package/dist/core/taskPrompts.js.map +1 -1
  135. package/dist/core/transcriptIngest.d.ts +37 -0
  136. package/dist/core/transcriptIngest.d.ts.map +1 -0
  137. package/dist/core/transcriptIngest.js +137 -0
  138. package/dist/core/transcriptIngest.js.map +1 -0
  139. package/dist/core/wiki/types.d.ts +282 -745
  140. package/dist/core/wiki/types.d.ts.map +1 -1
  141. package/dist/core/wiki/types.js +1 -1
  142. package/dist/core/wiki/types.js.map +1 -1
  143. package/dist/engines/SmartArrangeEngine.d.ts +75 -0
  144. package/dist/engines/SmartArrangeEngine.d.ts.map +1 -0
  145. package/dist/engines/SmartArrangeEngine.js +112 -0
  146. package/dist/engines/SmartArrangeEngine.js.map +1 -0
  147. package/dist/engines/StageEngine.d.ts +3 -17
  148. package/dist/engines/StageEngine.d.ts.map +1 -1
  149. package/dist/engines/StageEngine.js +13 -91
  150. package/dist/engines/StageEngine.js.map +1 -1
  151. package/dist/engines/smartarrange/AcpWorkerExec.d.ts +35 -0
  152. package/dist/engines/smartarrange/AcpWorkerExec.d.ts.map +1 -0
  153. package/dist/engines/smartarrange/AcpWorkerExec.js +71 -0
  154. package/dist/engines/smartarrange/AcpWorkerExec.js.map +1 -0
  155. package/dist/engines/smartarrange/cardSink.d.ts +29 -0
  156. package/dist/engines/smartarrange/cardSink.d.ts.map +1 -0
  157. package/dist/engines/smartarrange/cardSink.js +43 -0
  158. package/dist/engines/smartarrange/cardSink.js.map +1 -0
  159. package/dist/engines/smartarrange/runner.d.ts +24 -0
  160. package/dist/engines/smartarrange/runner.d.ts.map +1 -0
  161. package/dist/engines/smartarrange/runner.js +116 -0
  162. package/dist/engines/smartarrange/runner.js.map +1 -0
  163. package/dist/engines/smartarrange/screenshot.d.ts +5 -0
  164. package/dist/engines/smartarrange/screenshot.d.ts.map +1 -0
  165. package/dist/engines/smartarrange/screenshot.js +117 -0
  166. package/dist/engines/smartarrange/screenshot.js.map +1 -0
  167. package/dist/main.js +127 -92
  168. package/dist/main.js.map +1 -1
  169. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  170. package/dist/manager/worker-manager-impl.js +7 -0
  171. package/dist/manager/worker-manager-impl.js.map +1 -1
  172. package/dist/providers/LLMClient.d.ts +32 -0
  173. package/dist/providers/LLMClient.d.ts.map +1 -0
  174. package/dist/providers/LLMClient.js +108 -0
  175. package/dist/providers/LLMClient.js.map +1 -0
  176. package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
  177. package/dist/providers/MarkdownTaskBackend.js +3 -2
  178. package/dist/providers/MarkdownTaskBackend.js.map +1 -1
  179. package/dist/providers/llm/chatTools.d.ts +11 -0
  180. package/dist/providers/llm/chatTools.d.ts.map +1 -0
  181. package/dist/providers/llm/chatTools.js +57 -0
  182. package/dist/providers/llm/chatTools.js.map +1 -0
  183. package/dist/providers/llm/codexAuth.d.ts +8 -0
  184. package/dist/providers/llm/codexAuth.d.ts.map +1 -0
  185. package/dist/providers/llm/codexAuth.js +57 -0
  186. package/dist/providers/llm/codexAuth.js.map +1 -0
  187. package/dist/providers/llm/codexModel.d.ts +14 -0
  188. package/dist/providers/llm/codexModel.d.ts.map +1 -0
  189. package/dist/providers/llm/codexModel.js +96 -0
  190. package/dist/providers/llm/codexModel.js.map +1 -0
  191. package/dist/providers/llm/localSubscription.d.ts +15 -0
  192. package/dist/providers/llm/localSubscription.d.ts.map +1 -0
  193. package/dist/providers/llm/localSubscription.js +66 -0
  194. package/dist/providers/llm/localSubscription.js.map +1 -0
  195. package/dist/providers/llm/modelFactory.d.ts +14 -0
  196. package/dist/providers/llm/modelFactory.d.ts.map +1 -0
  197. package/dist/providers/llm/modelFactory.js +22 -0
  198. package/dist/providers/llm/modelFactory.js.map +1 -0
  199. package/dist/providers/llm/monitorSkills.d.ts +6 -0
  200. package/dist/providers/llm/monitorSkills.d.ts.map +1 -0
  201. package/dist/providers/llm/monitorSkills.js +37 -0
  202. package/dist/providers/llm/monitorSkills.js.map +1 -0
  203. package/dist/providers/llm/probeTools.d.ts +7 -0
  204. package/dist/providers/llm/probeTools.d.ts.map +1 -0
  205. package/dist/providers/llm/probeTools.js +84 -0
  206. package/dist/providers/llm/probeTools.js.map +1 -0
  207. package/dist/providers/llm/providers.d.ts +26 -0
  208. package/dist/providers/llm/providers.d.ts.map +1 -0
  209. package/dist/providers/llm/providers.js +68 -0
  210. package/dist/providers/llm/providers.js.map +1 -0
  211. package/dist/providers/llm/skillTools.d.ts +4 -0
  212. package/dist/providers/llm/skillTools.d.ts.map +1 -0
  213. package/dist/providers/llm/skillTools.js +42 -0
  214. package/dist/providers/llm/skillTools.js.map +1 -0
  215. package/dist/providers/llm/workerTools.d.ts +9 -0
  216. package/dist/providers/llm/workerTools.d.ts.map +1 -0
  217. package/dist/providers/llm/workerTools.js +111 -0
  218. package/dist/providers/llm/workerTools.js.map +1 -0
  219. package/dist/providers/mcp/spsMcpServer.d.ts +15 -0
  220. package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -0
  221. package/dist/providers/mcp/spsMcpServer.js +67 -0
  222. package/dist/providers/mcp/spsMcpServer.js.map +1 -0
  223. package/dist/providers/mcp/spsMcpStdio.d.ts +2 -0
  224. package/dist/providers/mcp/spsMcpStdio.d.ts.map +1 -0
  225. package/dist/providers/mcp/spsMcpStdio.js +32 -0
  226. package/dist/providers/mcp/spsMcpStdio.js.map +1 -0
  227. package/dist/providers/mcp/spsMcpStdioConfig.d.ts +11 -0
  228. package/dist/providers/mcp/spsMcpStdioConfig.d.ts.map +1 -0
  229. package/dist/providers/mcp/spsMcpStdioConfig.js +19 -0
  230. package/dist/providers/mcp/spsMcpStdioConfig.js.map +1 -0
  231. package/dist/server.d.ts +23 -0
  232. package/dist/server.d.ts.map +1 -1
  233. package/dist/server.js +23 -0
  234. package/dist/server.js.map +1 -1
  235. package/dist/services/ChatService.d.ts +8 -0
  236. package/dist/services/ChatService.d.ts.map +1 -1
  237. package/dist/services/ChatService.js +2 -0
  238. package/dist/services/ChatService.js.map +1 -1
  239. package/dist/services/LogService.d.ts +1 -1
  240. package/dist/services/LogService.d.ts.map +1 -1
  241. package/dist/services/LogService.js +3 -2
  242. package/dist/services/LogService.js.map +1 -1
  243. package/dist/services/ProjectService.d.ts +12 -2
  244. package/dist/services/ProjectService.d.ts.map +1 -1
  245. package/dist/services/ProjectService.js +1 -0
  246. package/dist/services/ProjectService.js.map +1 -1
  247. package/dist/services/SkillService.js +11 -13
  248. package/dist/services/SkillService.js.map +1 -1
  249. package/dist/services/SmartArrangeService.d.ts +12 -0
  250. package/dist/services/SmartArrangeService.d.ts.map +1 -0
  251. package/dist/services/SmartArrangeService.js +37 -0
  252. package/dist/services/SmartArrangeService.js.map +1 -0
  253. package/dist/services/SystemService.d.ts +20 -0
  254. package/dist/services/SystemService.d.ts.map +1 -1
  255. package/dist/services/SystemService.js +93 -0
  256. package/dist/services/SystemService.js.map +1 -1
  257. package/dist/services/WorkerService.d.ts +8 -0
  258. package/dist/services/WorkerService.d.ts.map +1 -1
  259. package/dist/services/WorkerService.js +73 -3
  260. package/dist/services/WorkerService.js.map +1 -1
  261. package/dist/services/container.d.ts +2 -0
  262. package/dist/services/container.d.ts.map +1 -1
  263. package/dist/services/container.js +2 -0
  264. package/dist/services/container.js.map +1 -1
  265. package/dist/shared/localTime.d.ts +8 -0
  266. package/dist/shared/localTime.d.ts.map +1 -0
  267. package/dist/shared/localTime.js +11 -0
  268. package/dist/shared/localTime.js.map +1 -0
  269. package/dist/shared/runtimePaths.d.ts +1 -1
  270. package/dist/shared/runtimePaths.d.ts.map +1 -1
  271. package/dist/shared/runtimePaths.js +2 -2
  272. package/dist/shared/runtimePaths.js.map +1 -1
  273. package/dist/shared/runtimeSchemas.d.ts +74 -245
  274. package/dist/shared/runtimeSchemas.d.ts.map +1 -1
  275. package/dist/shared/runtimeSchemas.js +2 -2
  276. package/dist/shared/runtimeSchemas.js.map +1 -1
  277. package/monitor-skills/probe-playbook/SKILL.md +32 -0
  278. package/monitor-skills/visual-rubric/SKILL.md +34 -0
  279. package/package.json +8 -8
  280. package/project-template/.claude/hooks/stop.sh +3 -1
  281. package/dist/console-assets/assets/index-BvWWj69G.js +0 -557
  282. package/dist/console-assets/assets/index-Eo4PuNPl.css +0 -10
  283. package/dist/interfaces/ACPClient.d.ts +0 -107
  284. package/dist/interfaces/ACPClient.d.ts.map +0 -1
  285. package/dist/interfaces/ACPClient.js +0 -17
  286. package/dist/interfaces/ACPClient.js.map +0 -1
  287. package/dist/interfaces/AgentRuntime.d.ts +0 -40
  288. package/dist/interfaces/AgentRuntime.d.ts.map +0 -1
  289. package/dist/interfaces/AgentRuntime.js +0 -17
  290. package/dist/interfaces/AgentRuntime.js.map +0 -1
  291. package/dist/manager/agentmemory.d.ts +0 -6
  292. package/dist/manager/agentmemory.d.ts.map +0 -1
  293. package/dist/manager/agentmemory.js +0 -73
  294. package/dist/manager/agentmemory.js.map +0 -1
  295. package/dist/models/acp.d.ts +0 -64
  296. package/dist/models/acp.d.ts.map +0 -1
  297. package/dist/models/acp.js +0 -17
  298. package/dist/models/acp.js.map +0 -1
  299. package/dist/providers/LocalACPClient.d.ts +0 -27
  300. package/dist/providers/LocalACPClient.d.ts.map +0 -1
  301. package/dist/providers/LocalACPClient.js +0 -26
  302. package/dist/providers/LocalACPClient.js.map +0 -1
  303. package/dist/providers/adapters/AcpSdkAdapter.d.ts +0 -24
  304. package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +0 -1
  305. package/dist/providers/adapters/AcpSdkAdapter.js +0 -439
  306. package/dist/providers/adapters/AcpSdkAdapter.js.map +0 -1
  307. package/dist/providers/adapters/acp-fs-handlers.d.ts +0 -26
  308. package/dist/providers/adapters/acp-fs-handlers.d.ts.map +0 -1
  309. package/dist/providers/adapters/acp-fs-handlers.js +0 -61
  310. package/dist/providers/adapters/acp-fs-handlers.js.map +0 -1
  311. package/dist/providers/adapters/acp-permissions.d.ts +0 -42
  312. package/dist/providers/adapters/acp-permissions.d.ts.map +0 -1
  313. package/dist/providers/adapters/acp-permissions.js +0 -76
  314. package/dist/providers/adapters/acp-permissions.js.map +0 -1
  315. package/dist/providers/adapters/acp-session-accumulator.d.ts +0 -55
  316. package/dist/providers/adapters/acp-session-accumulator.d.ts.map +0 -1
  317. package/dist/providers/adapters/acp-session-accumulator.js +0 -133
  318. package/dist/providers/adapters/acp-session-accumulator.js.map +0 -1
  319. package/dist/providers/adapters/acp-terminal-manager.d.ts +0 -56
  320. package/dist/providers/adapters/acp-terminal-manager.d.ts.map +0 -1
  321. package/dist/providers/adapters/acp-terminal-manager.js +0 -127
  322. package/dist/providers/adapters/acp-terminal-manager.js.map +0 -1
  323. package/project-template/logs/.gitkeep +0 -0
  324. package/skills/architecture-decision-records/SKILL.md +0 -207
  325. package/skills/backend/SKILL.md +0 -62
  326. package/skills/backend/references/api-design.md +0 -168
  327. package/skills/backend/references/caching.md +0 -181
  328. package/skills/backend/references/data-access.md +0 -173
  329. package/skills/backend/references/layering.md +0 -181
  330. package/skills/backend/references/observability.md +0 -190
  331. package/skills/backend/references/resilience.md +0 -201
  332. package/skills/backend/references/security.md +0 -186
  333. package/skills/backend-architect/SKILL.md +0 -119
  334. package/skills/code-reviewer/SKILL.md +0 -143
  335. package/skills/coding-standards/SKILL.md +0 -60
  336. package/skills/coding-standards/references/clean-code.md +0 -258
  337. package/skills/coding-standards/references/code-review.md +0 -192
  338. package/skills/coding-standards/references/commits-and-prs.md +0 -226
  339. package/skills/coding-standards/references/error-strategy.md +0 -193
  340. package/skills/coding-standards/references/naming.md +0 -185
  341. package/skills/coding-standards/references/tdd.md +0 -171
  342. package/skills/database/SKILL.md +0 -53
  343. package/skills/database/references/indexing.md +0 -190
  344. package/skills/database/references/migrations.md +0 -199
  345. package/skills/database/references/nosql.md +0 -185
  346. package/skills/database/references/queries.md +0 -295
  347. package/skills/database/references/scaling.md +0 -203
  348. package/skills/database/references/schema.md +0 -191
  349. package/skills/database-optimizer/SKILL.md +0 -168
  350. package/skills/debugging-workflow/SKILL.md +0 -244
  351. package/skills/dev-worker/SKILL.md +0 -40
  352. package/skills/dev-worker/references/architect.md +0 -139
  353. package/skills/dev-worker/references/backend.md +0 -163
  354. package/skills/dev-worker/references/frontend.md +0 -122
  355. package/skills/dev-worker/references/fullstack.md +0 -179
  356. package/skills/dev-worker/references/optimizer.md +0 -151
  357. package/skills/dev-worker/references/phaser.md +0 -109
  358. package/skills/dev-worker/references/prototyper.md +0 -171
  359. package/skills/dev-worker/references/reviewer.md +0 -122
  360. package/skills/dev-worker/references/security.md +0 -154
  361. package/skills/dev-worker/references/senior.md +0 -155
  362. package/skills/dev-worker/references/typescript.md +0 -65
  363. package/skills/dev-worker/references/writer.md +0 -201
  364. package/skills/devops/SKILL.md +0 -55
  365. package/skills/devops/references/ci-cd.md +0 -204
  366. package/skills/devops/references/containers.md +0 -272
  367. package/skills/devops/references/deploy.md +0 -201
  368. package/skills/devops/references/iac.md +0 -252
  369. package/skills/devops/references/observability.md +0 -228
  370. package/skills/devops/references/secrets.md +0 -178
  371. package/skills/devops-automator/SKILL.md +0 -164
  372. package/skills/frontend/SKILL.md +0 -52
  373. package/skills/frontend/references/accessibility.md +0 -222
  374. package/skills/frontend/references/components.md +0 -206
  375. package/skills/frontend/references/performance.md +0 -219
  376. package/skills/frontend/references/routing.md +0 -209
  377. package/skills/frontend/references/state.md +0 -190
  378. package/skills/frontend/references/testing.md +0 -216
  379. package/skills/frontend-developer/SKILL.md +0 -115
  380. package/skills/git-workflow/SKILL.md +0 -355
  381. package/skills/golang/SKILL.md +0 -49
  382. package/skills/golang/references/concurrency.md +0 -284
  383. package/skills/golang/references/errors.md +0 -241
  384. package/skills/golang/references/idioms.md +0 -285
  385. package/skills/golang/references/testing.md +0 -238
  386. package/skills/java/SKILL.md +0 -50
  387. package/skills/java/references/concurrency.md +0 -194
  388. package/skills/java/references/idioms.md +0 -283
  389. package/skills/java/references/testing.md +0 -228
  390. package/skills/kotlin/SKILL.md +0 -47
  391. package/skills/kotlin/references/coroutines.md +0 -240
  392. package/skills/kotlin/references/idioms.md +0 -268
  393. package/skills/kotlin/references/testing.md +0 -219
  394. package/skills/mobile/SKILL.md +0 -50
  395. package/skills/mobile/references/architecture.md +0 -204
  396. package/skills/mobile/references/navigation.md +0 -158
  397. package/skills/mobile/references/performance.md +0 -152
  398. package/skills/mobile/references/platform.md +0 -166
  399. package/skills/mobile/references/state-and-data.md +0 -174
  400. package/skills/python/SKILL.md +0 -51
  401. package/skills/python/THIRD_PARTY.md +0 -14
  402. package/skills/python/references/async.md +0 -218
  403. package/skills/python/references/error-handling.md +0 -254
  404. package/skills/python/references/idioms.md +0 -279
  405. package/skills/python/references/packaging.md +0 -233
  406. package/skills/python/references/testing.md +0 -269
  407. package/skills/python/references/typing.md +0 -292
  408. package/skills/qa-tester/SKILL.md +0 -186
  409. package/skills/rust/SKILL.md +0 -50
  410. package/skills/rust/references/async.md +0 -224
  411. package/skills/rust/references/errors.md +0 -240
  412. package/skills/rust/references/ownership.md +0 -263
  413. package/skills/rust/references/testing.md +0 -274
  414. package/skills/rust/references/traits.md +0 -250
  415. package/skills/security-engineer/SKILL.md +0 -157
  416. package/skills/sps-memory/SKILL.md +0 -213
  417. package/skills/sps-pipeline/SKILL.md +0 -476
  418. package/skills/swift/SKILL.md +0 -48
  419. package/skills/swift/references/concurrency.md +0 -280
  420. package/skills/swift/references/idioms.md +0 -334
  421. package/skills/swift/references/testing.md +0 -229
  422. package/skills/tax-worker/SKILL.md +0 -150
  423. package/skills/tax-worker/references/account-codes.md +0 -165
  424. package/skills/typescript/SKILL.md +0 -51
  425. package/skills/typescript/references/async.md +0 -241
  426. package/skills/typescript/references/errors.md +0 -208
  427. package/skills/typescript/references/idioms.md +0 -246
  428. package/skills/typescript/references/testing.md +0 -225
  429. package/skills/typescript/references/tooling.md +0 -208
  430. package/skills/typescript/references/types.md +0 -259
  431. package/skills/wiki-update/SKILL.md +0 -300
@@ -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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @module providers/llm/skillTools
3
+ * @description 进程内(@openai/agents `tool()`)的 skill 三工具:list/search/load,经 SkillsManager
4
+ * 读 HQ(~/.coral/skills + <cwd>/.sps/skills)。供 chat 等进程内 agent 用——
5
+ * 与 spsMcpServer 暴露给 worker 的同名 MCP 工具同源(都委托 SkillsManager)。
6
+ * @layer provider
7
+ * @boundedContext skills
8
+ */
9
+ import { tool } from '@openai/agents';
10
+ import { z } from 'zod';
11
+ import { SkillsManager } from '../../core/skills/index.js';
12
+ /** cwd = 会话/项目工作目录(决定项目级 .sps/skills);无 cwd → 只读全局 HQ(~/.coral/skills)。 */
13
+ export function skillTools(cwd) {
14
+ const skills = new SkillsManager({ cwd: cwd ?? '/__sps_no_project__' });
15
+ return [
16
+ tool({
17
+ name: 'list_skills',
18
+ description: '列出可用 skill 的名字与用途(name: description);据此再 load_skill 拉正文。',
19
+ parameters: z.object({}),
20
+ async execute() {
21
+ return skills.catalog(skills.discover()) || '(无可用 skill)';
22
+ },
23
+ }),
24
+ tool({
25
+ name: 'search_skills',
26
+ description: '按关键词查找相关 skill(返回 name: description 候选),供挑选后 load_skill。',
27
+ parameters: z.object({ query: z.string().describe('关键词,如「血条 HUD」') }),
28
+ async execute({ query }) {
29
+ return skills.catalog(skills.search(query, skills.discover())) || `(无匹配 skill: ${query})`;
30
+ },
31
+ }),
32
+ tool({
33
+ name: 'load_skill',
34
+ description: '按名字加载一个 skill 的 SOP 正文(读 HQ:.sps/skills 盖 ~/.coral/skills)。',
35
+ parameters: z.object({ name: z.string() }),
36
+ async execute({ name }) {
37
+ return skills.load(name) ?? `(无此 skill: ${name})`;
38
+ },
39
+ }),
40
+ ];
41
+ }
42
+ //# sourceMappingURL=skillTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillTools.js","sourceRoot":"","sources":["../../../src/providers/llm/skillTools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,qBAAqB,EAAE,CAAC,CAAC;IACxE,OAAO;QACL,IAAI,CAAC;YACH,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,0DAA0D;YACvE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,OAAO;gBACX,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,aAAa,CAAC;YAC5D,CAAC;SACF,CAAC;QACF,IAAI,CAAC;YACH,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,0DAA0D;YACvE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACrE,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;gBACrB,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,eAAe,KAAK,GAAG,CAAC;YAC5F,CAAC;SACF,CAAC;QACF,IAAI,CAAC;YACH,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,6DAA6D;YAC1E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;gBACpB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,IAAI,GAAG,CAAC;YACpD,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ export declare function workerTools(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> | import("@openai/agents").FunctionTool<unknown, z.ZodObject<{
7
+ command: z.ZodString;
8
+ }, z.core.$strip>, string>)[];
9
+ //# sourceMappingURL=workerTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerTools.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/workerTools.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM;;;;;;8BAsFtC"}