@coralai/sps-cli 0.55.13 → 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 (428) 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/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/engines/SmartArrangeEngine.d.ts +75 -0
  141. package/dist/engines/SmartArrangeEngine.d.ts.map +1 -0
  142. package/dist/engines/SmartArrangeEngine.js +112 -0
  143. package/dist/engines/SmartArrangeEngine.js.map +1 -0
  144. package/dist/engines/StageEngine.d.ts +3 -17
  145. package/dist/engines/StageEngine.d.ts.map +1 -1
  146. package/dist/engines/StageEngine.js +13 -91
  147. package/dist/engines/StageEngine.js.map +1 -1
  148. package/dist/engines/smartarrange/AcpWorkerExec.d.ts +35 -0
  149. package/dist/engines/smartarrange/AcpWorkerExec.d.ts.map +1 -0
  150. package/dist/engines/smartarrange/AcpWorkerExec.js +71 -0
  151. package/dist/engines/smartarrange/AcpWorkerExec.js.map +1 -0
  152. package/dist/engines/smartarrange/cardSink.d.ts +29 -0
  153. package/dist/engines/smartarrange/cardSink.d.ts.map +1 -0
  154. package/dist/engines/smartarrange/cardSink.js +43 -0
  155. package/dist/engines/smartarrange/cardSink.js.map +1 -0
  156. package/dist/engines/smartarrange/runner.d.ts +24 -0
  157. package/dist/engines/smartarrange/runner.d.ts.map +1 -0
  158. package/dist/engines/smartarrange/runner.js +116 -0
  159. package/dist/engines/smartarrange/runner.js.map +1 -0
  160. package/dist/engines/smartarrange/screenshot.d.ts +5 -0
  161. package/dist/engines/smartarrange/screenshot.d.ts.map +1 -0
  162. package/dist/engines/smartarrange/screenshot.js +117 -0
  163. package/dist/engines/smartarrange/screenshot.js.map +1 -0
  164. package/dist/main.js +127 -92
  165. package/dist/main.js.map +1 -1
  166. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  167. package/dist/manager/worker-manager-impl.js +7 -0
  168. package/dist/manager/worker-manager-impl.js.map +1 -1
  169. package/dist/providers/LLMClient.d.ts +32 -0
  170. package/dist/providers/LLMClient.d.ts.map +1 -0
  171. package/dist/providers/LLMClient.js +108 -0
  172. package/dist/providers/LLMClient.js.map +1 -0
  173. package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
  174. package/dist/providers/MarkdownTaskBackend.js +3 -2
  175. package/dist/providers/MarkdownTaskBackend.js.map +1 -1
  176. package/dist/providers/llm/chatTools.d.ts +11 -0
  177. package/dist/providers/llm/chatTools.d.ts.map +1 -0
  178. package/dist/providers/llm/chatTools.js +57 -0
  179. package/dist/providers/llm/chatTools.js.map +1 -0
  180. package/dist/providers/llm/codexAuth.d.ts +8 -0
  181. package/dist/providers/llm/codexAuth.d.ts.map +1 -0
  182. package/dist/providers/llm/codexAuth.js +57 -0
  183. package/dist/providers/llm/codexAuth.js.map +1 -0
  184. package/dist/providers/llm/codexModel.d.ts +14 -0
  185. package/dist/providers/llm/codexModel.d.ts.map +1 -0
  186. package/dist/providers/llm/codexModel.js +96 -0
  187. package/dist/providers/llm/codexModel.js.map +1 -0
  188. package/dist/providers/llm/localSubscription.d.ts +15 -0
  189. package/dist/providers/llm/localSubscription.d.ts.map +1 -0
  190. package/dist/providers/llm/localSubscription.js +66 -0
  191. package/dist/providers/llm/localSubscription.js.map +1 -0
  192. package/dist/providers/llm/modelFactory.d.ts +14 -0
  193. package/dist/providers/llm/modelFactory.d.ts.map +1 -0
  194. package/dist/providers/llm/modelFactory.js +22 -0
  195. package/dist/providers/llm/modelFactory.js.map +1 -0
  196. package/dist/providers/llm/monitorSkills.d.ts +6 -0
  197. package/dist/providers/llm/monitorSkills.d.ts.map +1 -0
  198. package/dist/providers/llm/monitorSkills.js +37 -0
  199. package/dist/providers/llm/monitorSkills.js.map +1 -0
  200. package/dist/providers/llm/probeTools.d.ts +7 -0
  201. package/dist/providers/llm/probeTools.d.ts.map +1 -0
  202. package/dist/providers/llm/probeTools.js +84 -0
  203. package/dist/providers/llm/probeTools.js.map +1 -0
  204. package/dist/providers/llm/providers.d.ts +26 -0
  205. package/dist/providers/llm/providers.d.ts.map +1 -0
  206. package/dist/providers/llm/providers.js +68 -0
  207. package/dist/providers/llm/providers.js.map +1 -0
  208. package/dist/providers/llm/skillTools.d.ts +4 -0
  209. package/dist/providers/llm/skillTools.d.ts.map +1 -0
  210. package/dist/providers/llm/skillTools.js +42 -0
  211. package/dist/providers/llm/skillTools.js.map +1 -0
  212. package/dist/providers/llm/workerTools.d.ts +9 -0
  213. package/dist/providers/llm/workerTools.d.ts.map +1 -0
  214. package/dist/providers/llm/workerTools.js +111 -0
  215. package/dist/providers/llm/workerTools.js.map +1 -0
  216. package/dist/providers/mcp/spsMcpServer.d.ts +15 -0
  217. package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -0
  218. package/dist/providers/mcp/spsMcpServer.js +67 -0
  219. package/dist/providers/mcp/spsMcpServer.js.map +1 -0
  220. package/dist/providers/mcp/spsMcpStdio.d.ts +2 -0
  221. package/dist/providers/mcp/spsMcpStdio.d.ts.map +1 -0
  222. package/dist/providers/mcp/spsMcpStdio.js +32 -0
  223. package/dist/providers/mcp/spsMcpStdio.js.map +1 -0
  224. package/dist/providers/mcp/spsMcpStdioConfig.d.ts +11 -0
  225. package/dist/providers/mcp/spsMcpStdioConfig.d.ts.map +1 -0
  226. package/dist/providers/mcp/spsMcpStdioConfig.js +19 -0
  227. package/dist/providers/mcp/spsMcpStdioConfig.js.map +1 -0
  228. package/dist/server.d.ts +23 -0
  229. package/dist/server.d.ts.map +1 -1
  230. package/dist/server.js +23 -0
  231. package/dist/server.js.map +1 -1
  232. package/dist/services/ChatService.d.ts +8 -0
  233. package/dist/services/ChatService.d.ts.map +1 -1
  234. package/dist/services/ChatService.js +2 -0
  235. package/dist/services/ChatService.js.map +1 -1
  236. package/dist/services/LogService.d.ts +1 -1
  237. package/dist/services/LogService.d.ts.map +1 -1
  238. package/dist/services/LogService.js +3 -2
  239. package/dist/services/LogService.js.map +1 -1
  240. package/dist/services/ProjectService.d.ts +12 -2
  241. package/dist/services/ProjectService.d.ts.map +1 -1
  242. package/dist/services/ProjectService.js +1 -0
  243. package/dist/services/ProjectService.js.map +1 -1
  244. package/dist/services/SkillService.js +11 -13
  245. package/dist/services/SkillService.js.map +1 -1
  246. package/dist/services/SmartArrangeService.d.ts +12 -0
  247. package/dist/services/SmartArrangeService.d.ts.map +1 -0
  248. package/dist/services/SmartArrangeService.js +37 -0
  249. package/dist/services/SmartArrangeService.js.map +1 -0
  250. package/dist/services/SystemService.d.ts +20 -0
  251. package/dist/services/SystemService.d.ts.map +1 -1
  252. package/dist/services/SystemService.js +93 -0
  253. package/dist/services/SystemService.js.map +1 -1
  254. package/dist/services/WorkerService.d.ts +8 -0
  255. package/dist/services/WorkerService.d.ts.map +1 -1
  256. package/dist/services/WorkerService.js +73 -3
  257. package/dist/services/WorkerService.js.map +1 -1
  258. package/dist/services/container.d.ts +2 -0
  259. package/dist/services/container.d.ts.map +1 -1
  260. package/dist/services/container.js +2 -0
  261. package/dist/services/container.js.map +1 -1
  262. package/dist/shared/localTime.d.ts +8 -0
  263. package/dist/shared/localTime.d.ts.map +1 -0
  264. package/dist/shared/localTime.js +11 -0
  265. package/dist/shared/localTime.js.map +1 -0
  266. package/dist/shared/runtimePaths.d.ts +1 -1
  267. package/dist/shared/runtimePaths.d.ts.map +1 -1
  268. package/dist/shared/runtimePaths.js +2 -2
  269. package/dist/shared/runtimePaths.js.map +1 -1
  270. package/dist/shared/runtimeSchemas.d.ts +74 -245
  271. package/dist/shared/runtimeSchemas.d.ts.map +1 -1
  272. package/dist/shared/runtimeSchemas.js +2 -2
  273. package/dist/shared/runtimeSchemas.js.map +1 -1
  274. package/monitor-skills/probe-playbook/SKILL.md +32 -0
  275. package/monitor-skills/visual-rubric/SKILL.md +34 -0
  276. package/package.json +8 -8
  277. package/project-template/.claude/hooks/stop.sh +3 -1
  278. package/dist/console-assets/assets/index-BvWWj69G.js +0 -557
  279. package/dist/console-assets/assets/index-Eo4PuNPl.css +0 -10
  280. package/dist/interfaces/ACPClient.d.ts +0 -107
  281. package/dist/interfaces/ACPClient.d.ts.map +0 -1
  282. package/dist/interfaces/ACPClient.js +0 -17
  283. package/dist/interfaces/ACPClient.js.map +0 -1
  284. package/dist/interfaces/AgentRuntime.d.ts +0 -40
  285. package/dist/interfaces/AgentRuntime.d.ts.map +0 -1
  286. package/dist/interfaces/AgentRuntime.js +0 -17
  287. package/dist/interfaces/AgentRuntime.js.map +0 -1
  288. package/dist/manager/agentmemory.d.ts +0 -6
  289. package/dist/manager/agentmemory.d.ts.map +0 -1
  290. package/dist/manager/agentmemory.js +0 -73
  291. package/dist/manager/agentmemory.js.map +0 -1
  292. package/dist/models/acp.d.ts +0 -64
  293. package/dist/models/acp.d.ts.map +0 -1
  294. package/dist/models/acp.js +0 -17
  295. package/dist/models/acp.js.map +0 -1
  296. package/dist/providers/LocalACPClient.d.ts +0 -27
  297. package/dist/providers/LocalACPClient.d.ts.map +0 -1
  298. package/dist/providers/LocalACPClient.js +0 -26
  299. package/dist/providers/LocalACPClient.js.map +0 -1
  300. package/dist/providers/adapters/AcpSdkAdapter.d.ts +0 -24
  301. package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +0 -1
  302. package/dist/providers/adapters/AcpSdkAdapter.js +0 -439
  303. package/dist/providers/adapters/AcpSdkAdapter.js.map +0 -1
  304. package/dist/providers/adapters/acp-fs-handlers.d.ts +0 -26
  305. package/dist/providers/adapters/acp-fs-handlers.d.ts.map +0 -1
  306. package/dist/providers/adapters/acp-fs-handlers.js +0 -61
  307. package/dist/providers/adapters/acp-fs-handlers.js.map +0 -1
  308. package/dist/providers/adapters/acp-permissions.d.ts +0 -42
  309. package/dist/providers/adapters/acp-permissions.d.ts.map +0 -1
  310. package/dist/providers/adapters/acp-permissions.js +0 -76
  311. package/dist/providers/adapters/acp-permissions.js.map +0 -1
  312. package/dist/providers/adapters/acp-session-accumulator.d.ts +0 -55
  313. package/dist/providers/adapters/acp-session-accumulator.d.ts.map +0 -1
  314. package/dist/providers/adapters/acp-session-accumulator.js +0 -133
  315. package/dist/providers/adapters/acp-session-accumulator.js.map +0 -1
  316. package/dist/providers/adapters/acp-terminal-manager.d.ts +0 -56
  317. package/dist/providers/adapters/acp-terminal-manager.d.ts.map +0 -1
  318. package/dist/providers/adapters/acp-terminal-manager.js +0 -127
  319. package/dist/providers/adapters/acp-terminal-manager.js.map +0 -1
  320. package/project-template/logs/.gitkeep +0 -0
  321. package/skills/architecture-decision-records/SKILL.md +0 -207
  322. package/skills/backend/SKILL.md +0 -62
  323. package/skills/backend/references/api-design.md +0 -168
  324. package/skills/backend/references/caching.md +0 -181
  325. package/skills/backend/references/data-access.md +0 -173
  326. package/skills/backend/references/layering.md +0 -181
  327. package/skills/backend/references/observability.md +0 -190
  328. package/skills/backend/references/resilience.md +0 -201
  329. package/skills/backend/references/security.md +0 -186
  330. package/skills/backend-architect/SKILL.md +0 -119
  331. package/skills/code-reviewer/SKILL.md +0 -143
  332. package/skills/coding-standards/SKILL.md +0 -60
  333. package/skills/coding-standards/references/clean-code.md +0 -258
  334. package/skills/coding-standards/references/code-review.md +0 -192
  335. package/skills/coding-standards/references/commits-and-prs.md +0 -226
  336. package/skills/coding-standards/references/error-strategy.md +0 -193
  337. package/skills/coding-standards/references/naming.md +0 -185
  338. package/skills/coding-standards/references/tdd.md +0 -171
  339. package/skills/database/SKILL.md +0 -53
  340. package/skills/database/references/indexing.md +0 -190
  341. package/skills/database/references/migrations.md +0 -199
  342. package/skills/database/references/nosql.md +0 -185
  343. package/skills/database/references/queries.md +0 -295
  344. package/skills/database/references/scaling.md +0 -203
  345. package/skills/database/references/schema.md +0 -191
  346. package/skills/database-optimizer/SKILL.md +0 -168
  347. package/skills/debugging-workflow/SKILL.md +0 -244
  348. package/skills/dev-worker/SKILL.md +0 -40
  349. package/skills/dev-worker/references/architect.md +0 -139
  350. package/skills/dev-worker/references/backend.md +0 -163
  351. package/skills/dev-worker/references/frontend.md +0 -122
  352. package/skills/dev-worker/references/fullstack.md +0 -179
  353. package/skills/dev-worker/references/optimizer.md +0 -151
  354. package/skills/dev-worker/references/phaser.md +0 -109
  355. package/skills/dev-worker/references/prototyper.md +0 -171
  356. package/skills/dev-worker/references/reviewer.md +0 -122
  357. package/skills/dev-worker/references/security.md +0 -154
  358. package/skills/dev-worker/references/senior.md +0 -155
  359. package/skills/dev-worker/references/typescript.md +0 -65
  360. package/skills/dev-worker/references/writer.md +0 -201
  361. package/skills/devops/SKILL.md +0 -55
  362. package/skills/devops/references/ci-cd.md +0 -204
  363. package/skills/devops/references/containers.md +0 -272
  364. package/skills/devops/references/deploy.md +0 -201
  365. package/skills/devops/references/iac.md +0 -252
  366. package/skills/devops/references/observability.md +0 -228
  367. package/skills/devops/references/secrets.md +0 -178
  368. package/skills/devops-automator/SKILL.md +0 -164
  369. package/skills/frontend/SKILL.md +0 -52
  370. package/skills/frontend/references/accessibility.md +0 -222
  371. package/skills/frontend/references/components.md +0 -206
  372. package/skills/frontend/references/performance.md +0 -219
  373. package/skills/frontend/references/routing.md +0 -209
  374. package/skills/frontend/references/state.md +0 -190
  375. package/skills/frontend/references/testing.md +0 -216
  376. package/skills/frontend-developer/SKILL.md +0 -115
  377. package/skills/git-workflow/SKILL.md +0 -355
  378. package/skills/golang/SKILL.md +0 -49
  379. package/skills/golang/references/concurrency.md +0 -284
  380. package/skills/golang/references/errors.md +0 -241
  381. package/skills/golang/references/idioms.md +0 -285
  382. package/skills/golang/references/testing.md +0 -238
  383. package/skills/java/SKILL.md +0 -50
  384. package/skills/java/references/concurrency.md +0 -194
  385. package/skills/java/references/idioms.md +0 -283
  386. package/skills/java/references/testing.md +0 -228
  387. package/skills/kotlin/SKILL.md +0 -47
  388. package/skills/kotlin/references/coroutines.md +0 -240
  389. package/skills/kotlin/references/idioms.md +0 -268
  390. package/skills/kotlin/references/testing.md +0 -219
  391. package/skills/mobile/SKILL.md +0 -50
  392. package/skills/mobile/references/architecture.md +0 -204
  393. package/skills/mobile/references/navigation.md +0 -158
  394. package/skills/mobile/references/performance.md +0 -152
  395. package/skills/mobile/references/platform.md +0 -166
  396. package/skills/mobile/references/state-and-data.md +0 -174
  397. package/skills/python/SKILL.md +0 -51
  398. package/skills/python/THIRD_PARTY.md +0 -14
  399. package/skills/python/references/async.md +0 -218
  400. package/skills/python/references/error-handling.md +0 -254
  401. package/skills/python/references/idioms.md +0 -279
  402. package/skills/python/references/packaging.md +0 -233
  403. package/skills/python/references/testing.md +0 -269
  404. package/skills/python/references/typing.md +0 -292
  405. package/skills/qa-tester/SKILL.md +0 -186
  406. package/skills/rust/SKILL.md +0 -50
  407. package/skills/rust/references/async.md +0 -224
  408. package/skills/rust/references/errors.md +0 -240
  409. package/skills/rust/references/ownership.md +0 -263
  410. package/skills/rust/references/testing.md +0 -274
  411. package/skills/rust/references/traits.md +0 -250
  412. package/skills/security-engineer/SKILL.md +0 -157
  413. package/skills/sps-memory/SKILL.md +0 -213
  414. package/skills/sps-pipeline/SKILL.md +0 -476
  415. package/skills/swift/SKILL.md +0 -48
  416. package/skills/swift/references/concurrency.md +0 -280
  417. package/skills/swift/references/idioms.md +0 -334
  418. package/skills/swift/references/testing.md +0 -229
  419. package/skills/tax-worker/SKILL.md +0 -150
  420. package/skills/tax-worker/references/account-codes.md +0 -165
  421. package/skills/typescript/SKILL.md +0 -51
  422. package/skills/typescript/references/async.md +0 -241
  423. package/skills/typescript/references/errors.md +0 -208
  424. package/skills/typescript/references/idioms.md +0 -246
  425. package/skills/typescript/references/testing.md +0 -225
  426. package/skills/typescript/references/tooling.md +0 -208
  427. package/skills/typescript/references/types.md +0 -259
  428. 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"}