@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
@@ -1,218 +0,0 @@
1
- # Python Async / Concurrency
2
-
3
- `asyncio` patterns for I/O-bound concurrency. For CPU-bound work, use processes, not async.
4
-
5
- ## When to use what
6
-
7
- | Workload | Tool | Why |
8
- |---|---|---|
9
- | I/O-bound (network, files, DB) | `asyncio` | One thread, thousands of connections |
10
- | CPU-bound (crunching, crypto) | `multiprocessing` / `concurrent.futures.ProcessPoolExecutor` | GIL blocks threads |
11
- | Blocking library you can't async-ify | `asyncio.to_thread()` | Offload to the default thread pool |
12
- | Parallelizing blocking syscalls | `concurrent.futures.ThreadPoolExecutor` | Simple, no asyncio required |
13
-
14
- `asyncio` without I/O is pointless — a `async def` that only does CPU work gives you no concurrency.
15
-
16
- ## `async def` / `await` basics
17
-
18
- ```python
19
- import asyncio
20
- import httpx
21
-
22
- async def fetch(url: str) -> str:
23
- async with httpx.AsyncClient() as client:
24
- r = await client.get(url)
25
- return r.text
26
-
27
- async def main() -> None:
28
- html = await fetch("https://example.com")
29
- print(len(html))
30
-
31
- asyncio.run(main())
32
- ```
33
-
34
- Rule: never call `asyncio.run()` from inside already-running async code. It's the entry point, not a utility.
35
-
36
- ## Concurrency — run coroutines in parallel
37
-
38
- ### `asyncio.gather` (legacy, still common)
39
-
40
- ```python
41
- async def fetch_all(urls: list[str]) -> list[str]:
42
- return await asyncio.gather(*(fetch(u) for u in urls))
43
-
44
- # With return_exceptions — failures don't cancel siblings
45
- results = await asyncio.gather(*tasks, return_exceptions=True)
46
- for r in results:
47
- if isinstance(r, Exception):
48
- log.warning("one failed: %s", r)
49
- ```
50
-
51
- ### `asyncio.TaskGroup` (Python 3.11+) — preferred
52
-
53
- Structured concurrency: if any task raises, siblings are cancelled and errors are aggregated into an `ExceptionGroup`.
54
-
55
- ```python
56
- async def fetch_all(urls: list[str]) -> list[str]:
57
- async with asyncio.TaskGroup() as tg:
58
- tasks = [tg.create_task(fetch(u)) for u in urls]
59
- return [t.result() for t in tasks]
60
-
61
- # Error handling
62
- try:
63
- await fetch_all(urls)
64
- except* httpx.ConnectError as eg:
65
- log.warning("network failures: %d", len(eg.exceptions))
66
- except* httpx.HTTPStatusError as eg:
67
- log.error("HTTP errors: %s", [e.response.status_code for e in eg.exceptions])
68
- ```
69
-
70
- Prefer `TaskGroup` over `gather` in new code — cancellation is correct by default.
71
-
72
- ## Timeouts
73
-
74
- ### Python 3.11+: `asyncio.timeout`
75
-
76
- ```python
77
- async def with_deadline():
78
- async with asyncio.timeout(5.0):
79
- return await slow_operation()
80
-
81
- # Nested / reschedulable
82
- async with asyncio.timeout(None) as cm:
83
- cm.reschedule(asyncio.get_running_loop().time() + 10)
84
- ...
85
- ```
86
-
87
- ### Older: `asyncio.wait_for`
88
-
89
- ```python
90
- result = await asyncio.wait_for(slow_operation(), timeout=5.0)
91
- ```
92
-
93
- ## Cancellation
94
-
95
- Cancellation is a `CancelledError` injected at the next `await`. Rules:
96
-
97
- - **Never swallow `CancelledError`** except to run cleanup; always re-raise.
98
- - Cleanup in `finally` must itself be fast and cancellation-safe.
99
- - `asyncio.shield()` protects a critical section from outer cancellation.
100
-
101
- ```python
102
- async def worker():
103
- try:
104
- while True:
105
- await do_work()
106
- except asyncio.CancelledError:
107
- await cleanup() # fast, idempotent
108
- raise # REQUIRED — don't swallow
109
-
110
- async def critical_write(path, data):
111
- # Outer cancel won't interrupt the write
112
- await asyncio.shield(write_file(path, data))
113
- ```
114
-
115
- ## Offloading blocking code
116
-
117
- Never call blocking code from an async function — it stalls the event loop for everyone.
118
-
119
- ```python
120
- # Wrong: blocks the event loop
121
- async def handler(req):
122
- data = requests.get(req.url).text # ❌ blocking library in async code
123
- return data
124
-
125
- # Right: offload to thread pool
126
- async def handler(req):
127
- data = await asyncio.to_thread(requests.get, req.url)
128
- return data.text
129
-
130
- # Or use an async-native library
131
- async def handler(req):
132
- async with httpx.AsyncClient() as client:
133
- r = await client.get(req.url)
134
- return r.text
135
- ```
136
-
137
- `time.sleep()` in async code is always a bug — use `await asyncio.sleep()`.
138
-
139
- ## Async iteration & generators
140
-
141
- ```python
142
- # Async iterator
143
- async def stream_lines(url: str) -> AsyncIterator[str]:
144
- async with httpx.AsyncClient() as client:
145
- async with client.stream("GET", url) as resp:
146
- async for line in resp.aiter_lines():
147
- yield line
148
-
149
- async for line in stream_lines(url):
150
- process(line)
151
-
152
- # Async comprehension
153
- urls = [u async for u in stream_urls() if u.startswith("https://")]
154
- ```
155
-
156
- ## Async context managers
157
-
158
- ```python
159
- from contextlib import asynccontextmanager
160
-
161
- @asynccontextmanager
162
- async def db_transaction(conn):
163
- tx = await conn.begin()
164
- try:
165
- yield tx
166
- except Exception:
167
- await tx.rollback()
168
- raise
169
- else:
170
- await tx.commit()
171
-
172
- async with db_transaction(conn) as tx:
173
- await tx.execute(...)
174
- ```
175
-
176
- ## Backpressure with semaphores
177
-
178
- Limit in-flight concurrency when the downstream can't take unlimited load.
179
-
180
- ```python
181
- async def fetch_bounded(urls: list[str], limit: int = 10) -> list[str]:
182
- sem = asyncio.Semaphore(limit)
183
-
184
- async def one(u):
185
- async with sem:
186
- return await fetch(u)
187
-
188
- async with asyncio.TaskGroup() as tg:
189
- tasks = [tg.create_task(one(u)) for u in urls]
190
- return [t.result() for t in tasks]
191
- ```
192
-
193
- ## Anti-patterns
194
-
195
- | Anti-pattern | Fix |
196
- |---|---|
197
- | `asyncio.run()` inside async code | Pass awaitables up; `asyncio.run()` is the entry point only |
198
- | `time.sleep()` in async | `await asyncio.sleep()` |
199
- | `requests` / blocking HTTP in async | Use `httpx.AsyncClient` or `asyncio.to_thread` |
200
- | Swallowing `CancelledError` | Always re-raise after cleanup |
201
- | Fire-and-forget `asyncio.create_task(x)` without keeping a reference | Reference dropped → task can be garbage-collected mid-flight |
202
- | Mixing threads and asyncio naively | Use `asyncio.to_thread` / `loop.run_in_executor`, not raw `threading` |
203
- | Using async just because "it's modern" | Async has real overhead; pure CPU or simple scripts don't need it |
204
-
205
- ## Running background tasks correctly
206
-
207
- ```python
208
- # Wrong: task may be GC'd before it runs
209
- asyncio.create_task(background())
210
-
211
- # Right: keep a reference
212
- _background_tasks: set[asyncio.Task] = set()
213
-
214
- def schedule(coro):
215
- t = asyncio.create_task(coro)
216
- _background_tasks.add(t)
217
- t.add_done_callback(_background_tasks.discard)
218
- ```
@@ -1,254 +0,0 @@
1
- # Python Error Handling
2
-
3
- Exception design and handling patterns.
4
-
5
- ## Specific exceptions only
6
-
7
- Never `except:` (bare). Never `except Exception:` except at the top of a daemon/server loop.
8
-
9
- ```python
10
- # Good: specific exceptions, each with its own response
11
- def load_config(path: str) -> Config:
12
- try:
13
- with open(path) as f:
14
- return Config.from_json(f.read())
15
- except FileNotFoundError as e:
16
- raise ConfigError(f"Config not found: {path}") from e
17
- except json.JSONDecodeError as e:
18
- raise ConfigError(f"Invalid JSON in {path}: {e}") from e
19
- except PermissionError as e:
20
- raise ConfigError(f"No read permission: {path}") from e
21
-
22
- # Bad: silent catch-all
23
- def load_config(path: str) -> Config:
24
- try:
25
- with open(path) as f:
26
- return Config.from_json(f.read())
27
- except:
28
- return None # caller has no idea what went wrong
29
- ```
30
-
31
- ## Exception chaining (`from`)
32
-
33
- Always preserve the original traceback when re-raising.
34
-
35
- ```python
36
- def process(data: str) -> Result:
37
- try:
38
- parsed = json.loads(data)
39
- except json.JSONDecodeError as e:
40
- # `from e` attaches the original exception
41
- raise ValueError(f"Bad data: {data!r}") from e
42
-
43
- # Output traceback shows both:
44
- # ValueError: Bad data: '...'
45
- # The above exception was the direct cause of the following:
46
- # json.JSONDecodeError: ...
47
- ```
48
-
49
- Use `raise ... from None` to **hide** the chain (rare — only when the chain is noise).
50
-
51
- ## Custom exception hierarchy
52
-
53
- One base class per module/service. Subclasses for specific failures.
54
-
55
- ```python
56
- # errors.py
57
- class AppError(Exception):
58
- """Base exception for this application."""
59
-
60
- class ValidationError(AppError):
61
- """Input validation failed."""
62
-
63
- class NotFoundError(AppError):
64
- """Resource not found."""
65
-
66
- class AuthError(AppError):
67
- """Authentication or authorization failed."""
68
-
69
- class ExternalServiceError(AppError):
70
- """Upstream dependency failed."""
71
-
72
- # Usage
73
- def get_user(user_id: str) -> User:
74
- user = db.find_user(user_id)
75
- if not user:
76
- raise NotFoundError(f"User {user_id}")
77
- return user
78
-
79
- # Callers catch at the right level
80
- try:
81
- user = get_user(uid)
82
- except NotFoundError:
83
- return 404
84
- except AppError:
85
- return 500 # any other app error
86
- except Exception:
87
- logger.exception("unexpected")
88
- return 500
89
- ```
90
-
91
- ## Rules
92
-
93
- | Rule | Why |
94
- |---|---|
95
- | Catch only exceptions you can handle | If you can't recover, let it propagate |
96
- | Never catch `BaseException` | That includes `KeyboardInterrupt` and `SystemExit` |
97
- | Log before re-raising | Otherwise the log line says "unexpected" when you actually expected it |
98
- | Specific exception types | Callers can pattern-match; `Exception` forces logs to be the only debugging aid |
99
- | Use `try/except/else` for 2-phase operations | `else` runs only if no exception — clearer than nesting |
100
-
101
- ## `try/except/else/finally`
102
-
103
- ```python
104
- def fetch(url: str) -> Response:
105
- try:
106
- response = http.get(url)
107
- except TimeoutError:
108
- return fallback_response()
109
- except HTTPError as e:
110
- logger.error("http error: %s", e)
111
- raise
112
- else:
113
- # runs only on success — cleaner than putting this in try
114
- cache.set(url, response)
115
- return response
116
- finally:
117
- # always runs
118
- release_connection()
119
- ```
120
-
121
- ## Context manager for error handling
122
-
123
- For repeated try/except patterns, wrap in a context manager.
124
-
125
- ```python
126
- from contextlib import contextmanager
127
-
128
- @contextmanager
129
- def as_domain_error(target_type: type[Exception], msg: str):
130
- """Re-raise any exception as target_type(msg)."""
131
- try:
132
- yield
133
- except Exception as e:
134
- raise target_type(msg) from e
135
-
136
- # Usage
137
- with as_domain_error(ConfigError, "Failed to load config"):
138
- with open('config.json') as f:
139
- return json.load(f)
140
- ```
141
-
142
- ## Validation vs exceptions
143
-
144
- For user-input validation, prefer returning a result object over raising.
145
-
146
- ```python
147
- from dataclasses import dataclass
148
-
149
- @dataclass
150
- class ValidationResult:
151
- valid: bool
152
- errors: list[str]
153
-
154
- def validate_user(data: dict) -> ValidationResult:
155
- errors = []
156
- if not data.get('email'):
157
- errors.append('email required')
158
- if 'age' in data and not 0 <= data['age'] <= 150:
159
- errors.append('age must be 0-150')
160
- return ValidationResult(valid=not errors, errors=errors)
161
-
162
- # Caller
163
- result = validate_user(input)
164
- if not result.valid:
165
- return {"errors": result.errors}, 400
166
- ```
167
-
168
- Raise exceptions for **exceptional** conditions. Validation failure is **expected**.
169
-
170
- ## Exception groups (Python 3.11+)
171
-
172
- For reporting multiple failures at once — concurrent tasks, batch operations, validation aggregates. Use `ExceptionGroup` and `except*`.
173
-
174
- ```python
175
- def import_batch(records: list[dict]) -> None:
176
- errors = []
177
- for r in records:
178
- try:
179
- import_one(r)
180
- except (ValidationError, DBError) as e:
181
- errors.append(e)
182
- if errors:
183
- raise ExceptionGroup("batch import failed", errors)
184
-
185
- # Caller: except* matches by type across the group
186
- try:
187
- import_batch(data)
188
- except* ValidationError as eg:
189
- for e in eg.exceptions:
190
- log.warning("invalid: %s", e)
191
- except* DBError as eg:
192
- for e in eg.exceptions:
193
- log.error("db failure: %s", e)
194
- ```
195
-
196
- `asyncio.TaskGroup` (3.11+) raises `ExceptionGroup` natively when multiple child tasks fail.
197
-
198
- ## Logging exceptions
199
-
200
- Use `logger.exception()` inside an except block — it auto-includes the traceback.
201
-
202
- ```python
203
- import logging
204
- logger = logging.getLogger(__name__)
205
-
206
- try:
207
- risky_operation()
208
- except ExternalServiceError:
209
- # logger.exception is equivalent to logger.error(exc_info=True)
210
- logger.exception("External service failed")
211
- # Re-raise or handle
212
- raise
213
- ```
214
-
215
- **Never** use `print(e)` in production — print goes to stdout, not your log pipeline, and loses the traceback.
216
-
217
- ## Common mistakes
218
-
219
- ```python
220
- # ❌ Mutating `except` clause without `from`
221
- try: ...
222
- except ValueError:
223
- raise TypeError("wrong type") # original traceback lost
224
-
225
- # ✅
226
- try: ...
227
- except ValueError as e:
228
- raise TypeError("wrong type") from e
229
-
230
-
231
- # ❌ Catching to "convert to None"
232
- try:
233
- return lookup(key)
234
- except KeyError:
235
- return None # if this is your pattern, use dict.get(key) — simpler
236
-
237
- # ✅
238
- return mapping.get(key)
239
-
240
-
241
- # ❌ Overcatching hides bugs
242
- try:
243
- data = get_user(uid)
244
- data.name = new_name # if this raises, you misclassify it as "user not found"
245
- except Exception:
246
- return 404
247
-
248
- # ✅
249
- try:
250
- data = get_user(uid)
251
- except NotFoundError:
252
- return 404
253
- data.name = new_name # let real bugs propagate
254
- ```