@blxzer/pactile 0.5.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 (903) hide show
  1. package/CHANGELOG.md +602 -0
  2. package/LICENSE +235 -0
  3. package/README.md +115 -0
  4. package/README.zh-CN.md +115 -0
  5. package/bin/compat-warning.js +11 -0
  6. package/bin/cstl.js +6 -0
  7. package/bin/pactile.js +3 -0
  8. package/bin/smart-search.js +38 -0
  9. package/dist/cli/index.d.ts +3 -0
  10. package/dist/cli/index.d.ts.map +1 -0
  11. package/dist/cli/index.js +362 -0
  12. package/dist/cli/index.js.map +1 -0
  13. package/dist/commands/capability-smoke.d.ts +24 -0
  14. package/dist/commands/capability-smoke.d.ts.map +1 -0
  15. package/dist/commands/capability-smoke.js +83 -0
  16. package/dist/commands/capability-smoke.js.map +1 -0
  17. package/dist/commands/channel/adapters/claude.d.ts +29 -0
  18. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  19. package/dist/commands/channel/adapters/claude.js +203 -0
  20. package/dist/commands/channel/adapters/claude.js.map +1 -0
  21. package/dist/commands/channel/adapters/codex.d.ts +85 -0
  22. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  23. package/dist/commands/channel/adapters/codex.js +505 -0
  24. package/dist/commands/channel/adapters/codex.js.map +1 -0
  25. package/dist/commands/channel/adapters/index.d.ts +84 -0
  26. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  27. package/dist/commands/channel/adapters/index.js +115 -0
  28. package/dist/commands/channel/adapters/index.js.map +1 -0
  29. package/dist/commands/channel/adapters/types.d.ts +33 -0
  30. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  31. package/dist/commands/channel/adapters/types.js +2 -0
  32. package/dist/commands/channel/adapters/types.js.map +1 -0
  33. package/dist/commands/channel/agent-loader.d.ts +32 -0
  34. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  35. package/dist/commands/channel/agent-loader.js +154 -0
  36. package/dist/commands/channel/agent-loader.js.map +1 -0
  37. package/dist/commands/channel/context-loader.d.ts +26 -0
  38. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  39. package/dist/commands/channel/context-loader.js +290 -0
  40. package/dist/commands/channel/context-loader.js.map +1 -0
  41. package/dist/commands/channel/context.d.ts +16 -0
  42. package/dist/commands/channel/context.d.ts.map +1 -0
  43. package/dist/commands/channel/context.js +83 -0
  44. package/dist/commands/channel/context.js.map +1 -0
  45. package/dist/commands/channel/create.d.ts +27 -0
  46. package/dist/commands/channel/create.d.ts.map +1 -0
  47. package/dist/commands/channel/create.js +39 -0
  48. package/dist/commands/channel/create.js.map +1 -0
  49. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  50. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  51. package/dist/commands/channel/dev-parse-trace.js +70 -0
  52. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  53. package/dist/commands/channel/guard.d.ts +150 -0
  54. package/dist/commands/channel/guard.d.ts.map +1 -0
  55. package/dist/commands/channel/guard.js +475 -0
  56. package/dist/commands/channel/guard.js.map +1 -0
  57. package/dist/commands/channel/index.d.ts +3 -0
  58. package/dist/commands/channel/index.d.ts.map +1 -0
  59. package/dist/commands/channel/index.js +531 -0
  60. package/dist/commands/channel/index.js.map +1 -0
  61. package/dist/commands/channel/interrupt.d.ts +10 -0
  62. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  63. package/dist/commands/channel/interrupt.js +22 -0
  64. package/dist/commands/channel/interrupt.js.map +1 -0
  65. package/dist/commands/channel/kill.d.ts +7 -0
  66. package/dist/commands/channel/kill.d.ts.map +1 -0
  67. package/dist/commands/channel/kill.js +121 -0
  68. package/dist/commands/channel/kill.js.map +1 -0
  69. package/dist/commands/channel/list.d.ts +17 -0
  70. package/dist/commands/channel/list.d.ts.map +1 -0
  71. package/dist/commands/channel/list.js +233 -0
  72. package/dist/commands/channel/list.js.map +1 -0
  73. package/dist/commands/channel/messages.d.ts +15 -0
  74. package/dist/commands/channel/messages.d.ts.map +1 -0
  75. package/dist/commands/channel/messages.js +245 -0
  76. package/dist/commands/channel/messages.js.map +1 -0
  77. package/dist/commands/channel/rm.d.ts +27 -0
  78. package/dist/commands/channel/rm.d.ts.map +1 -0
  79. package/dist/commands/channel/rm.js +216 -0
  80. package/dist/commands/channel/rm.js.map +1 -0
  81. package/dist/commands/channel/run.d.ts +30 -0
  82. package/dist/commands/channel/run.d.ts.map +1 -0
  83. package/dist/commands/channel/run.js +130 -0
  84. package/dist/commands/channel/run.js.map +1 -0
  85. package/dist/commands/channel/send.d.ts +11 -0
  86. package/dist/commands/channel/send.d.ts.map +1 -0
  87. package/dist/commands/channel/send.js +24 -0
  88. package/dist/commands/channel/send.js.map +1 -0
  89. package/dist/commands/channel/spawn.d.ts +40 -0
  90. package/dist/commands/channel/spawn.d.ts.map +1 -0
  91. package/dist/commands/channel/spawn.js +242 -0
  92. package/dist/commands/channel/spawn.js.map +1 -0
  93. package/dist/commands/channel/store/events.d.ts +39 -0
  94. package/dist/commands/channel/store/events.d.ts.map +1 -0
  95. package/dist/commands/channel/store/events.js +87 -0
  96. package/dist/commands/channel/store/events.js.map +1 -0
  97. package/dist/commands/channel/store/filter.d.ts +3 -0
  98. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  99. package/dist/commands/channel/store/filter.js +2 -0
  100. package/dist/commands/channel/store/filter.js.map +1 -0
  101. package/dist/commands/channel/store/lock.d.ts +23 -0
  102. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  103. package/dist/commands/channel/store/lock.js +99 -0
  104. package/dist/commands/channel/store/lock.js.map +1 -0
  105. package/dist/commands/channel/store/paths.d.ts +63 -0
  106. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  107. package/dist/commands/channel/store/paths.js +247 -0
  108. package/dist/commands/channel/store/paths.js.map +1 -0
  109. package/dist/commands/channel/store/schema.d.ts +27 -0
  110. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  111. package/dist/commands/channel/store/schema.js +34 -0
  112. package/dist/commands/channel/store/schema.js.map +1 -0
  113. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  114. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  115. package/dist/commands/channel/store/thread-state.js +16 -0
  116. package/dist/commands/channel/store/thread-state.js.map +1 -0
  117. package/dist/commands/channel/store/watch.d.ts +19 -0
  118. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  119. package/dist/commands/channel/store/watch.js +146 -0
  120. package/dist/commands/channel/store/watch.js.map +1 -0
  121. package/dist/commands/channel/supervisor/idle.d.ts +46 -0
  122. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  123. package/dist/commands/channel/supervisor/idle.js +72 -0
  124. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  125. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  126. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  127. package/dist/commands/channel/supervisor/inbox.js +160 -0
  128. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  129. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  130. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  131. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  132. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  133. package/dist/commands/channel/supervisor/stdout.d.ts +51 -0
  134. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  135. package/dist/commands/channel/supervisor/stdout.js +121 -0
  136. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  137. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  138. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  139. package/dist/commands/channel/supervisor/turns.js +45 -0
  140. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  141. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  142. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  143. package/dist/commands/channel/supervisor/warning.js +77 -0
  144. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  145. package/dist/commands/channel/supervisor.d.ts +59 -0
  146. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  147. package/dist/commands/channel/supervisor.js +345 -0
  148. package/dist/commands/channel/supervisor.js.map +1 -0
  149. package/dist/commands/channel/text-body.d.ts +13 -0
  150. package/dist/commands/channel/text-body.d.ts.map +1 -0
  151. package/dist/commands/channel/text-body.js +47 -0
  152. package/dist/commands/channel/text-body.js.map +1 -0
  153. package/dist/commands/channel/threads.d.ts +39 -0
  154. package/dist/commands/channel/threads.d.ts.map +1 -0
  155. package/dist/commands/channel/threads.js +106 -0
  156. package/dist/commands/channel/threads.js.map +1 -0
  157. package/dist/commands/channel/title.d.ts +12 -0
  158. package/dist/commands/channel/title.d.ts.map +1 -0
  159. package/dist/commands/channel/title.js +24 -0
  160. package/dist/commands/channel/title.js.map +1 -0
  161. package/dist/commands/channel/wait.d.ts +17 -0
  162. package/dist/commands/channel/wait.d.ts.map +1 -0
  163. package/dist/commands/channel/wait.js +75 -0
  164. package/dist/commands/channel/wait.js.map +1 -0
  165. package/dist/commands/detach.d.ts +7 -0
  166. package/dist/commands/detach.d.ts.map +1 -0
  167. package/dist/commands/detach.js +31 -0
  168. package/dist/commands/detach.js.map +1 -0
  169. package/dist/commands/init.d.ts +51 -0
  170. package/dist/commands/init.d.ts.map +1 -0
  171. package/dist/commands/init.js +1660 -0
  172. package/dist/commands/init.js.map +1 -0
  173. package/dist/commands/migrate.d.ts +10 -0
  174. package/dist/commands/migrate.d.ts.map +1 -0
  175. package/dist/commands/migrate.js +38 -0
  176. package/dist/commands/migrate.js.map +1 -0
  177. package/dist/commands/purge.d.ts +9 -0
  178. package/dist/commands/purge.d.ts.map +1 -0
  179. package/dist/commands/purge.js +29 -0
  180. package/dist/commands/purge.js.map +1 -0
  181. package/dist/commands/rollback.d.ts +7 -0
  182. package/dist/commands/rollback.d.ts.map +1 -0
  183. package/dist/commands/rollback.js +27 -0
  184. package/dist/commands/rollback.js.map +1 -0
  185. package/dist/commands/rollout.d.ts +34 -0
  186. package/dist/commands/rollout.d.ts.map +1 -0
  187. package/dist/commands/rollout.js +102 -0
  188. package/dist/commands/rollout.js.map +1 -0
  189. package/dist/commands/uninstall.d.ts +23 -0
  190. package/dist/commands/uninstall.d.ts.map +1 -0
  191. package/dist/commands/uninstall.js +68 -0
  192. package/dist/commands/uninstall.js.map +1 -0
  193. package/dist/commands/update.d.ts +139 -0
  194. package/dist/commands/update.d.ts.map +1 -0
  195. package/dist/commands/update.js +2459 -0
  196. package/dist/commands/update.js.map +1 -0
  197. package/dist/commands/upgrade.d.ts +28 -0
  198. package/dist/commands/upgrade.d.ts.map +1 -0
  199. package/dist/commands/upgrade.js +84 -0
  200. package/dist/commands/upgrade.js.map +1 -0
  201. package/dist/commands/validate-rules.d.ts +6 -0
  202. package/dist/commands/validate-rules.d.ts.map +1 -0
  203. package/dist/commands/validate-rules.js +33 -0
  204. package/dist/commands/validate-rules.js.map +1 -0
  205. package/dist/commands/workflow.d.ts +35 -0
  206. package/dist/commands/workflow.d.ts.map +1 -0
  207. package/dist/commands/workflow.js +220 -0
  208. package/dist/commands/workflow.js.map +1 -0
  209. package/dist/configurators/cursor.d.ts +21 -0
  210. package/dist/configurators/cursor.d.ts.map +1 -0
  211. package/dist/configurators/cursor.js +51 -0
  212. package/dist/configurators/cursor.js.map +1 -0
  213. package/dist/configurators/index.d.ts +68 -0
  214. package/dist/configurators/index.d.ts.map +1 -0
  215. package/dist/configurators/index.js +170 -0
  216. package/dist/configurators/index.js.map +1 -0
  217. package/dist/configurators/shared.d.ts +200 -0
  218. package/dist/configurators/shared.d.ts.map +1 -0
  219. package/dist/configurators/shared.js +602 -0
  220. package/dist/configurators/shared.js.map +1 -0
  221. package/dist/configurators/workflow.d.ts +45 -0
  222. package/dist/configurators/workflow.d.ts.map +1 -0
  223. package/dist/configurators/workflow.js +256 -0
  224. package/dist/configurators/workflow.js.map +1 -0
  225. package/dist/constants/paths.d.ts +93 -0
  226. package/dist/constants/paths.d.ts.map +1 -0
  227. package/dist/constants/paths.js +106 -0
  228. package/dist/constants/paths.js.map +1 -0
  229. package/dist/constants/version.d.ts +9 -0
  230. package/dist/constants/version.d.ts.map +1 -0
  231. package/dist/constants/version.js +15 -0
  232. package/dist/constants/version.js.map +1 -0
  233. package/dist/index.d.ts +10 -0
  234. package/dist/index.d.ts.map +1 -0
  235. package/dist/index.js +10 -0
  236. package/dist/index.js.map +1 -0
  237. package/dist/migrations/index.d.ts +62 -0
  238. package/dist/migrations/index.d.ts.map +1 -0
  239. package/dist/migrations/index.js +187 -0
  240. package/dist/migrations/index.js.map +1 -0
  241. package/dist/migrations/manifests/0.1.0.json +9 -0
  242. package/dist/migrations/manifests/0.1.1.json +9 -0
  243. package/dist/migrations/manifests/0.1.2.json +9 -0
  244. package/dist/migrations/manifests/0.1.3.json +9 -0
  245. package/dist/migrations/manifests/0.1.4.json +9 -0
  246. package/dist/migrations/manifests/0.2.1.json +9 -0
  247. package/dist/migrations/manifests/0.2.10.json +374 -0
  248. package/dist/migrations/manifests/0.2.2.json +9 -0
  249. package/dist/migrations/manifests/0.2.3.json +9 -0
  250. package/dist/migrations/manifests/0.2.4.json +9 -0
  251. package/dist/migrations/manifests/0.2.5.json +9 -0
  252. package/dist/migrations/manifests/0.2.6.json +9 -0
  253. package/dist/migrations/manifests/0.2.7.json +9 -0
  254. package/dist/migrations/manifests/0.2.8.json +9 -0
  255. package/dist/migrations/manifests/0.2.9.json +9 -0
  256. package/dist/migrations/manifests/0.3.0.json +89 -0
  257. package/dist/migrations/manifests/0.3.1.json +32 -0
  258. package/dist/migrations/manifests/0.3.2.json +16 -0
  259. package/dist/migrations/manifests/0.3.3.json +9 -0
  260. package/dist/migrations/manifests/0.3.4.json +9 -0
  261. package/dist/migrations/manifests/0.3.5.json +9 -0
  262. package/dist/migrations/manifests/0.3.6.json +9 -0
  263. package/dist/migrations/manifests/0.4.0.json +9 -0
  264. package/dist/migrations/manifests/0.4.1.json +9 -0
  265. package/dist/migrations/manifests/0.4.2.json +9 -0
  266. package/dist/migrations/manifests/0.4.3.json +9 -0
  267. package/dist/migrations/manifests/0.5.0-beta.0.json +9 -0
  268. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
  269. package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
  270. package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
  271. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
  272. package/dist/migrations/manifests/0.5.0-beta.5.json +9 -0
  273. package/dist/pactile/adapters/codex/index.d.ts +75 -0
  274. package/dist/pactile/adapters/codex/index.d.ts.map +1 -0
  275. package/dist/pactile/adapters/codex/index.js +269 -0
  276. package/dist/pactile/adapters/codex/index.js.map +1 -0
  277. package/dist/pactile/adapters/cursor/index.d.ts +60 -0
  278. package/dist/pactile/adapters/cursor/index.d.ts.map +1 -0
  279. package/dist/pactile/adapters/cursor/index.js +186 -0
  280. package/dist/pactile/adapters/cursor/index.js.map +1 -0
  281. package/dist/pactile/adapters/index.d.ts +4 -0
  282. package/dist/pactile/adapters/index.d.ts.map +1 -0
  283. package/dist/pactile/adapters/index.js +4 -0
  284. package/dist/pactile/adapters/index.js.map +1 -0
  285. package/dist/pactile/adoption/bindings.d.ts +20 -0
  286. package/dist/pactile/adoption/bindings.d.ts.map +1 -0
  287. package/dist/pactile/adoption/bindings.js +99 -0
  288. package/dist/pactile/adoption/bindings.js.map +1 -0
  289. package/dist/pactile/adoption/discovery.d.ts +8 -0
  290. package/dist/pactile/adoption/discovery.d.ts.map +1 -0
  291. package/dist/pactile/adoption/discovery.js +159 -0
  292. package/dist/pactile/adoption/discovery.js.map +1 -0
  293. package/dist/pactile/adoption/inventory.d.ts +28 -0
  294. package/dist/pactile/adoption/inventory.d.ts.map +1 -0
  295. package/dist/pactile/adoption/inventory.js +261 -0
  296. package/dist/pactile/adoption/inventory.js.map +1 -0
  297. package/dist/pactile/adoption/safety.d.ts +19 -0
  298. package/dist/pactile/adoption/safety.d.ts.map +1 -0
  299. package/dist/pactile/adoption/safety.js +88 -0
  300. package/dist/pactile/adoption/safety.js.map +1 -0
  301. package/dist/pactile/adoption/workflow.d.ts +31 -0
  302. package/dist/pactile/adoption/workflow.d.ts.map +1 -0
  303. package/dist/pactile/adoption/workflow.js +259 -0
  304. package/dist/pactile/adoption/workflow.js.map +1 -0
  305. package/dist/pactile/compat/cli-options.d.ts +9 -0
  306. package/dist/pactile/compat/cli-options.d.ts.map +1 -0
  307. package/dist/pactile/compat/cli-options.js +9 -0
  308. package/dist/pactile/compat/cli-options.js.map +1 -0
  309. package/dist/pactile/compat/init-context.d.ts +16 -0
  310. package/dist/pactile/compat/init-context.d.ts.map +1 -0
  311. package/dist/pactile/compat/init-context.js +87 -0
  312. package/dist/pactile/compat/init-context.js.map +1 -0
  313. package/dist/pactile/compat/legacy-migrations.d.ts +8 -0
  314. package/dist/pactile/compat/legacy-migrations.d.ts.map +1 -0
  315. package/dist/pactile/compat/legacy-migrations.js +17 -0
  316. package/dist/pactile/compat/legacy-migrations.js.map +1 -0
  317. package/dist/pactile/compat/retired-alternate-client.d.ts +42 -0
  318. package/dist/pactile/compat/retired-alternate-client.d.ts.map +1 -0
  319. package/dist/pactile/compat/retired-alternate-client.js +153 -0
  320. package/dist/pactile/compat/retired-alternate-client.js.map +1 -0
  321. package/dist/pactile/compat/update-residue.d.ts +4 -0
  322. package/dist/pactile/compat/update-residue.d.ts.map +1 -0
  323. package/dist/pactile/compat/update-residue.js +55 -0
  324. package/dist/pactile/compat/update-residue.js.map +1 -0
  325. package/dist/pactile/exit/index.d.ts +3 -0
  326. package/dist/pactile/exit/index.d.ts.map +1 -0
  327. package/dist/pactile/exit/index.js +3 -0
  328. package/dist/pactile/exit/index.js.map +1 -0
  329. package/dist/pactile/exit/receipt.d.ts +23 -0
  330. package/dist/pactile/exit/receipt.d.ts.map +1 -0
  331. package/dist/pactile/exit/receipt.js +64 -0
  332. package/dist/pactile/exit/receipt.js.map +1 -0
  333. package/dist/pactile/exit/service.d.ts +107 -0
  334. package/dist/pactile/exit/service.d.ts.map +1 -0
  335. package/dist/pactile/exit/service.js +774 -0
  336. package/dist/pactile/exit/service.js.map +1 -0
  337. package/dist/pactile/index.d.ts +26 -0
  338. package/dist/pactile/index.d.ts.map +1 -0
  339. package/dist/pactile/index.js +22 -0
  340. package/dist/pactile/index.js.map +1 -0
  341. package/dist/pactile/lifecycle/command-runner.d.ts +26 -0
  342. package/dist/pactile/lifecycle/command-runner.d.ts.map +1 -0
  343. package/dist/pactile/lifecycle/command-runner.js +129 -0
  344. package/dist/pactile/lifecycle/command-runner.js.map +1 -0
  345. package/dist/pactile/lifecycle/default-adapters.d.ts +5 -0
  346. package/dist/pactile/lifecycle/default-adapters.d.ts.map +1 -0
  347. package/dist/pactile/lifecycle/default-adapters.js +136 -0
  348. package/dist/pactile/lifecycle/default-adapters.js.map +1 -0
  349. package/dist/pactile/lifecycle/index.d.ts +6 -0
  350. package/dist/pactile/lifecycle/index.d.ts.map +1 -0
  351. package/dist/pactile/lifecycle/index.js +6 -0
  352. package/dist/pactile/lifecycle/index.js.map +1 -0
  353. package/dist/pactile/lifecycle/legacy-import.d.ts +16 -0
  354. package/dist/pactile/lifecycle/legacy-import.d.ts.map +1 -0
  355. package/dist/pactile/lifecycle/legacy-import.js +228 -0
  356. package/dist/pactile/lifecycle/legacy-import.js.map +1 -0
  357. package/dist/pactile/lifecycle/orchestrator.d.ts +109 -0
  358. package/dist/pactile/lifecycle/orchestrator.d.ts.map +1 -0
  359. package/dist/pactile/lifecycle/orchestrator.js +1030 -0
  360. package/dist/pactile/lifecycle/orchestrator.js.map +1 -0
  361. package/dist/pactile/lifecycle/project-files.d.ts +28 -0
  362. package/dist/pactile/lifecycle/project-files.d.ts.map +1 -0
  363. package/dist/pactile/lifecycle/project-files.js +297 -0
  364. package/dist/pactile/lifecycle/project-files.js.map +1 -0
  365. package/dist/pactile/middleware/index.d.ts +3 -0
  366. package/dist/pactile/middleware/index.d.ts.map +1 -0
  367. package/dist/pactile/middleware/index.js +2 -0
  368. package/dist/pactile/middleware/index.js.map +1 -0
  369. package/dist/pactile/middleware/manifest-loader.d.ts +22 -0
  370. package/dist/pactile/middleware/manifest-loader.d.ts.map +1 -0
  371. package/dist/pactile/middleware/manifest-loader.js +228 -0
  372. package/dist/pactile/middleware/manifest-loader.js.map +1 -0
  373. package/dist/pactile/migration/index.d.ts +2 -0
  374. package/dist/pactile/migration/index.d.ts.map +1 -0
  375. package/dist/pactile/migration/index.js +2 -0
  376. package/dist/pactile/migration/index.js.map +1 -0
  377. package/dist/pactile/migration/transaction.d.ts +54 -0
  378. package/dist/pactile/migration/transaction.d.ts.map +1 -0
  379. package/dist/pactile/migration/transaction.js +445 -0
  380. package/dist/pactile/migration/transaction.js.map +1 -0
  381. package/dist/pactile/projection/managed-block.d.ts +32 -0
  382. package/dist/pactile/projection/managed-block.d.ts.map +1 -0
  383. package/dist/pactile/projection/managed-block.js +78 -0
  384. package/dist/pactile/projection/managed-block.js.map +1 -0
  385. package/dist/pactile/projection/planner.d.ts +65 -0
  386. package/dist/pactile/projection/planner.d.ts.map +1 -0
  387. package/dist/pactile/projection/planner.js +349 -0
  388. package/dist/pactile/projection/planner.js.map +1 -0
  389. package/dist/pactile/projection/shared/index.d.ts +38 -0
  390. package/dist/pactile/projection/shared/index.d.ts.map +1 -0
  391. package/dist/pactile/projection/shared/index.js +186 -0
  392. package/dist/pactile/projection/shared/index.js.map +1 -0
  393. package/dist/pactile/projection/store.d.ts +72 -0
  394. package/dist/pactile/projection/store.d.ts.map +1 -0
  395. package/dist/pactile/projection/store.js +669 -0
  396. package/dist/pactile/projection/store.js.map +1 -0
  397. package/dist/pactile/projection/structured-merge.d.ts +11 -0
  398. package/dist/pactile/projection/structured-merge.d.ts.map +1 -0
  399. package/dist/pactile/projection/structured-merge.js +347 -0
  400. package/dist/pactile/projection/structured-merge.js.map +1 -0
  401. package/dist/pactile/providers/index.d.ts +3 -0
  402. package/dist/pactile/providers/index.d.ts.map +1 -0
  403. package/dist/pactile/providers/index.js +3 -0
  404. package/dist/pactile/providers/index.js.map +1 -0
  405. package/dist/pactile/providers/probes.d.ts +55 -0
  406. package/dist/pactile/providers/probes.d.ts.map +1 -0
  407. package/dist/pactile/providers/probes.js +164 -0
  408. package/dist/pactile/providers/probes.js.map +1 -0
  409. package/dist/pactile/registry.d.ts +64 -0
  410. package/dist/pactile/registry.d.ts.map +1 -0
  411. package/dist/pactile/registry.js +196 -0
  412. package/dist/pactile/registry.js.map +1 -0
  413. package/dist/pactile/retrieval/boundary.d.ts +18 -0
  414. package/dist/pactile/retrieval/boundary.d.ts.map +1 -0
  415. package/dist/pactile/retrieval/boundary.js +113 -0
  416. package/dist/pactile/retrieval/boundary.js.map +1 -0
  417. package/dist/pactile/retrieval/evidence.d.ts +9 -0
  418. package/dist/pactile/retrieval/evidence.d.ts.map +1 -0
  419. package/dist/pactile/retrieval/evidence.js +327 -0
  420. package/dist/pactile/retrieval/evidence.js.map +1 -0
  421. package/dist/pactile/retrieval/index.d.ts +4 -0
  422. package/dist/pactile/retrieval/index.d.ts.map +1 -0
  423. package/dist/pactile/retrieval/index.js +4 -0
  424. package/dist/pactile/retrieval/index.js.map +1 -0
  425. package/dist/pactile/retrieval/planner.d.ts +23 -0
  426. package/dist/pactile/retrieval/planner.d.ts.map +1 -0
  427. package/dist/pactile/retrieval/planner.js +702 -0
  428. package/dist/pactile/retrieval/planner.js.map +1 -0
  429. package/dist/pactile/retrieval/types.d.ts +108 -0
  430. package/dist/pactile/retrieval/types.d.ts.map +1 -0
  431. package/dist/pactile/retrieval/types.js +36 -0
  432. package/dist/pactile/retrieval/types.js.map +1 -0
  433. package/dist/pactile/runtime/case-fold.d.ts +2 -0
  434. package/dist/pactile/runtime/case-fold.d.ts.map +1 -0
  435. package/dist/pactile/runtime/case-fold.js +31 -0
  436. package/dist/pactile/runtime/case-fold.js.map +1 -0
  437. package/dist/pactile/runtime/index.d.ts +8 -0
  438. package/dist/pactile/runtime/index.d.ts.map +1 -0
  439. package/dist/pactile/runtime/index.js +5 -0
  440. package/dist/pactile/runtime/index.js.map +1 -0
  441. package/dist/pactile/runtime/json-api.d.ts +15 -0
  442. package/dist/pactile/runtime/json-api.d.ts.map +1 -0
  443. package/dist/pactile/runtime/json-api.js +68 -0
  444. package/dist/pactile/runtime/json-api.js.map +1 -0
  445. package/dist/pactile/runtime/paths.d.ts +59 -0
  446. package/dist/pactile/runtime/paths.d.ts.map +1 -0
  447. package/dist/pactile/runtime/paths.js +201 -0
  448. package/dist/pactile/runtime/paths.js.map +1 -0
  449. package/dist/pactile/runtime/stores.d.ts +54 -0
  450. package/dist/pactile/runtime/stores.d.ts.map +1 -0
  451. package/dist/pactile/runtime/stores.js +375 -0
  452. package/dist/pactile/runtime/stores.js.map +1 -0
  453. package/dist/pactile/runtime/unicode-nfc-data.d.ts +12 -0
  454. package/dist/pactile/runtime/unicode-nfc-data.d.ts.map +1 -0
  455. package/dist/pactile/runtime/unicode-nfc-data.js +8 -0
  456. package/dist/pactile/runtime/unicode-nfc-data.js.map +1 -0
  457. package/dist/pactile/runtime/unicode-nfc.d.ts +3 -0
  458. package/dist/pactile/runtime/unicode-nfc.d.ts.map +1 -0
  459. package/dist/pactile/runtime/unicode-nfc.js +77 -0
  460. package/dist/pactile/runtime/unicode-nfc.js.map +1 -0
  461. package/dist/pactile/tiles/catalog.d.ts +35 -0
  462. package/dist/pactile/tiles/catalog.d.ts.map +1 -0
  463. package/dist/pactile/tiles/catalog.js +235 -0
  464. package/dist/pactile/tiles/catalog.js.map +1 -0
  465. package/dist/pactile/tiles/compiler.d.ts +54 -0
  466. package/dist/pactile/tiles/compiler.d.ts.map +1 -0
  467. package/dist/pactile/tiles/compiler.js +270 -0
  468. package/dist/pactile/tiles/compiler.js.map +1 -0
  469. package/dist/pactile/tiles/content/baseline/index.d.ts +5 -0
  470. package/dist/pactile/tiles/content/baseline/index.d.ts.map +1 -0
  471. package/dist/pactile/tiles/content/baseline/index.js +115 -0
  472. package/dist/pactile/tiles/content/baseline/index.js.map +1 -0
  473. package/dist/pactile/tiles/content/index.d.ts +4 -0
  474. package/dist/pactile/tiles/content/index.d.ts.map +1 -0
  475. package/dist/pactile/tiles/content/index.js +4 -0
  476. package/dist/pactile/tiles/content/index.js.map +1 -0
  477. package/dist/pactile/tiles/content/ondemand/index.d.ts +5 -0
  478. package/dist/pactile/tiles/content/ondemand/index.d.ts.map +1 -0
  479. package/dist/pactile/tiles/content/ondemand/index.js +184 -0
  480. package/dist/pactile/tiles/content/ondemand/index.js.map +1 -0
  481. package/dist/pactile/tiles/content/source.d.ts +29 -0
  482. package/dist/pactile/tiles/content/source.d.ts.map +1 -0
  483. package/dist/pactile/tiles/content/source.js +86 -0
  484. package/dist/pactile/tiles/content/source.js.map +1 -0
  485. package/dist/pactile/tiles/loader.d.ts +31 -0
  486. package/dist/pactile/tiles/loader.d.ts.map +1 -0
  487. package/dist/pactile/tiles/loader.js +139 -0
  488. package/dist/pactile/tiles/loader.js.map +1 -0
  489. package/dist/pactile/tiles/safe-yaml.d.ts +11 -0
  490. package/dist/pactile/tiles/safe-yaml.d.ts.map +1 -0
  491. package/dist/pactile/tiles/safe-yaml.js +212 -0
  492. package/dist/pactile/tiles/safe-yaml.js.map +1 -0
  493. package/dist/templates/common/bundled-skills/pactile-check/SKILL.md +161 -0
  494. package/dist/templates/common/bundled-skills/pactile-check/references/fowler-12-smells.md +28 -0
  495. package/dist/templates/common/bundled-skills/pactile-handoff/SKILL.md +117 -0
  496. package/dist/templates/common/bundled-skills/pactile-meta/SKILL.md +75 -0
  497. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/add-project-local-conventions.md +83 -0
  498. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-agents.md +47 -0
  499. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-context-loading.md +84 -0
  500. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-hooks.md +57 -0
  501. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-skills-or-commands.md +77 -0
  502. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-spec-structure.md +83 -0
  503. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-task-lifecycle.md +88 -0
  504. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-workflow.md +65 -0
  505. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/overview.md +55 -0
  506. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/context-injection.md +68 -0
  507. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/generated-files.md +83 -0
  508. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/overview.md +51 -0
  509. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/spec-system.md +102 -0
  510. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/task-system.md +133 -0
  511. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/workflow.md +75 -0
  512. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/workspace-memory.md +71 -0
  513. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/agents.md +69 -0
  514. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/hooks-and-settings.md +59 -0
  515. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/overview.md +45 -0
  516. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/platform-map.md +45 -0
  517. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/skills-and-commands.md +108 -0
  518. package/dist/templates/common/bundled-skills/pactile-micro-grill/SKILL.md +68 -0
  519. package/dist/templates/common/bundled-skills/pactile-skill-creator/SKILL.md +47 -0
  520. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/authoring-rules.md +171 -0
  521. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/general-authoring.md +189 -0
  522. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/pactile-skill-locations.md +52 -0
  523. package/dist/templates/common/bundled-skills/pactile-skill-creator/references/review-checklist.md +52 -0
  524. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/SKILL.md +41 -0
  525. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/mcp-setup.md +90 -0
  526. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/repository-analysis.md +59 -0
  527. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/spec-task-planning.md +61 -0
  528. package/dist/templates/common/bundled-skills/pactile-spec-bootstrap/references/spec-writing.md +70 -0
  529. package/dist/templates/common/bundled-skills/smart-search-cli/SKILL.md +393 -0
  530. package/dist/templates/common/bundled-skills/smart-search-cli/agents/openai.yaml +3 -0
  531. package/dist/templates/common/bundled-skills/smart-search-cli/examples/batch-search.md +98 -0
  532. package/dist/templates/common/bundled-skills/smart-search-cli/examples/evidence-gathering.md +89 -0
  533. package/dist/templates/common/bundled-skills/smart-search-cli/references/cli-contract.md +323 -0
  534. package/dist/templates/common/commands/continue.md +62 -0
  535. package/dist/templates/common/commands/finish-work.md +82 -0
  536. package/dist/templates/common/commands/start.md +66 -0
  537. package/dist/templates/common/index.d.ts +68 -0
  538. package/dist/templates/common/index.d.ts.map +1 -0
  539. package/dist/templates/common/index.js +123 -0
  540. package/dist/templates/common/index.js.map +1 -0
  541. package/dist/templates/common/optional-skills/chrome-cdp/SKILL.md +179 -0
  542. package/dist/templates/common/optional-skills/chrome-cdp/examples/fetch-hook-api-capture.md +149 -0
  543. package/dist/templates/common/optional-skills/chrome-cdp/scripts/cdp.mjs +904 -0
  544. package/dist/templates/common/skills/before-dev.md +35 -0
  545. package/dist/templates/common/skills/brainstorm.md +204 -0
  546. package/dist/templates/common/skills/break-loop.md +125 -0
  547. package/dist/templates/common/skills/update-spec.md +364 -0
  548. package/dist/templates/cursor/agents/pactile-check.md +58 -0
  549. package/dist/templates/cursor/agents/pactile-implement.md +56 -0
  550. package/dist/templates/cursor/agents/pactile-research.md +51 -0
  551. package/dist/templates/cursor/commands/handoff.md +101 -0
  552. package/dist/templates/cursor/fixtures/expected-rules.d.ts +14 -0
  553. package/dist/templates/cursor/fixtures/expected-rules.d.ts.map +1 -0
  554. package/dist/templates/cursor/fixtures/expected-rules.js +20 -0
  555. package/dist/templates/cursor/fixtures/expected-rules.js.map +1 -0
  556. package/dist/templates/cursor/hooks.json +52 -0
  557. package/dist/templates/cursor/index.d.ts +19 -0
  558. package/dist/templates/cursor/index.d.ts.map +1 -0
  559. package/dist/templates/cursor/index.js +19 -0
  560. package/dist/templates/cursor/index.js.map +1 -0
  561. package/dist/templates/cursor/rules/pactile-bootstrap.mdc +18 -0
  562. package/dist/templates/cursor/worktrees.json +11 -0
  563. package/dist/templates/extract.d.ts +38 -0
  564. package/dist/templates/extract.d.ts.map +1 -0
  565. package/dist/templates/extract.js +120 -0
  566. package/dist/templates/extract.js.map +1 -0
  567. package/dist/templates/markdown/agents.md +14 -0
  568. package/dist/templates/markdown/framework/artifact-locale-guide.md.txt +93 -0
  569. package/dist/templates/markdown/framework/cursor-context-injection-guide.md.txt +85 -0
  570. package/dist/templates/markdown/framework/cursor-native-modes-guide.md.txt +239 -0
  571. package/dist/templates/markdown/framework/cursor-semantic-compliance.md.txt +41 -0
  572. package/dist/templates/markdown/framework/cursor-subagent-policy.md.txt +90 -0
  573. package/dist/templates/markdown/framework/dogfood-only-surfaces.md.txt +28 -0
  574. package/dist/templates/markdown/framework/execution-strategy.md.txt +45 -0
  575. package/dist/templates/markdown/framework/index.md.txt +31 -0
  576. package/dist/templates/markdown/framework/injection-budget-guide.md.txt +111 -0
  577. package/dist/templates/markdown/framework/internal-skills-cursor-reachability.md.txt +45 -0
  578. package/dist/templates/markdown/framework/middleware-protocol.md.txt +238 -0
  579. package/dist/templates/markdown/framework/parallel-first-execution.md.txt +116 -0
  580. package/dist/templates/markdown/framework/prd-grill-frontier.md.txt +105 -0
  581. package/dist/templates/markdown/framework/release-boundary.md.txt +30 -0
  582. package/dist/templates/markdown/framework/retrieval-daily-guide.md.txt +199 -0
  583. package/dist/templates/markdown/framework/upgrade.md.txt +15 -0
  584. package/dist/templates/markdown/framework/verification-strength-guide.md.txt +185 -0
  585. package/dist/templates/markdown/gitignore.txt +15 -0
  586. package/dist/templates/markdown/index.d.ts +59 -0
  587. package/dist/templates/markdown/index.d.ts.map +1 -0
  588. package/dist/templates/markdown/index.js +144 -0
  589. package/dist/templates/markdown/index.js.map +1 -0
  590. package/dist/templates/markdown/prompts/run-semantic-slice-12.md.txt +25 -0
  591. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  592. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  593. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  594. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  595. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  596. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  597. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  598. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  599. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  600. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  601. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  602. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  603. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  604. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +174 -0
  605. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +162 -0
  606. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +634 -0
  607. package/dist/templates/markdown/spec/guides/debug-loop-guide.md.txt +227 -0
  608. package/dist/templates/markdown/spec/guides/durable-learning-decision-guide.md.txt +76 -0
  609. package/dist/templates/markdown/spec/guides/e2e-walkthrough-guide.md.txt +93 -0
  610. package/dist/templates/markdown/spec/guides/index.md.txt +131 -0
  611. package/dist/templates/markdown/spec/guides/prototype-guide.md.txt +139 -0
  612. package/dist/templates/markdown/spec/guides/test-discipline-guide.md.txt +179 -0
  613. package/dist/templates/markdown/workspace-index.md +125 -0
  614. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  615. package/dist/templates/pactile/CONTEXT.md +113 -0
  616. package/dist/templates/pactile/config/execution-strategy-rules.json +31 -0
  617. package/dist/templates/pactile/config.yaml +130 -0
  618. package/dist/templates/pactile/docs/adr/README.md +21 -0
  619. package/dist/templates/pactile/gitignore.txt +35 -0
  620. package/dist/templates/pactile/index.d.ts +134 -0
  621. package/dist/templates/pactile/index.d.ts.map +1 -0
  622. package/dist/templates/pactile/index.js +316 -0
  623. package/dist/templates/pactile/index.js.map +1 -0
  624. package/dist/templates/pactile/modules/approval-personal/contract.md +43 -0
  625. package/dist/templates/pactile/modules/candidate-pool/contract.md +37 -0
  626. package/dist/templates/pactile/modules/catalog.d.ts +32 -0
  627. package/dist/templates/pactile/modules/catalog.d.ts.map +1 -0
  628. package/dist/templates/pactile/modules/catalog.js +46 -0
  629. package/dist/templates/pactile/modules/catalog.js.map +1 -0
  630. package/dist/templates/pactile/modules/close-basic/contract.md +38 -0
  631. package/dist/templates/pactile/modules/context-progressive/contract.md +44 -0
  632. package/dist/templates/pactile/modules/debug-recovery/contract.md +44 -0
  633. package/dist/templates/pactile/modules/define-basic/contract.md +39 -0
  634. package/dist/templates/pactile/modules/define-extended/contract.md +45 -0
  635. package/dist/templates/pactile/modules/execute-agent/contract.md +38 -0
  636. package/dist/templates/pactile/modules/independent-check/contract.md +35 -0
  637. package/dist/templates/pactile/modules/index.json +133 -0
  638. package/dist/templates/pactile/modules/intake-basic/contract.md +34 -0
  639. package/dist/templates/pactile/modules/observability-local/contract.md +31 -0
  640. package/dist/templates/pactile/modules/parent-child/contract.md +45 -0
  641. package/dist/templates/pactile/modules/personal-memory/contract.md +56 -0
  642. package/dist/templates/pactile/modules/retention-storage/contract.md +43 -0
  643. package/dist/templates/pactile/modules/retrieval-extended/contract.md +77 -0
  644. package/dist/templates/pactile/modules/session-transfer/contract.md +41 -0
  645. package/dist/templates/pactile/modules/spec-learning/contract.md +50 -0
  646. package/dist/templates/pactile/modules/vcs-integration/contract.md +46 -0
  647. package/dist/templates/pactile/modules/verify-basic/contract.md +38 -0
  648. package/dist/templates/pactile/modules/worker-orchestration/contract.md +47 -0
  649. package/dist/templates/pactile/pool/README.md +149 -0
  650. package/dist/templates/pactile/pool/items/.gitkeep +0 -0
  651. package/dist/templates/pactile/pool/plan.md +50 -0
  652. package/dist/templates/pactile/scripts/__init__.py +5 -0
  653. package/dist/templates/pactile/scripts/add_session.py +547 -0
  654. package/dist/templates/pactile/scripts/build_context_pack.py +17 -0
  655. package/dist/templates/pactile/scripts/build_retrieval_pack.py +376 -0
  656. package/dist/templates/pactile/scripts/codegraph_session_smoke.py +76 -0
  657. package/dist/templates/pactile/scripts/common/__init__.py +103 -0
  658. package/dist/templates/pactile/scripts/common/active_task.py +576 -0
  659. package/dist/templates/pactile/scripts/common/adapter_middleware.py +1373 -0
  660. package/dist/templates/pactile/scripts/common/artifact_locale.py +303 -0
  661. package/dist/templates/pactile/scripts/common/artifact_search.py +587 -0
  662. package/dist/templates/pactile/scripts/common/cli_adapter.py +135 -0
  663. package/dist/templates/pactile/scripts/common/cli_environment.py +155 -0
  664. package/dist/templates/pactile/scripts/common/codebase_retrieval_router.py +1339 -0
  665. package/dist/templates/pactile/scripts/common/config.py +497 -0
  666. package/dist/templates/pactile/scripts/common/context_pack.py +371 -0
  667. package/dist/templates/pactile/scripts/common/cursor_retrieval_env.py +31 -0
  668. package/dist/templates/pactile/scripts/common/developer.py +190 -0
  669. package/dist/templates/pactile/scripts/common/execution_strategy.py +268 -0
  670. package/dist/templates/pactile/scripts/common/full_quality.py +237 -0
  671. package/dist/templates/pactile/scripts/common/git.py +37 -0
  672. package/dist/templates/pactile/scripts/common/git_context.py +198 -0
  673. package/dist/templates/pactile/scripts/common/injection_budget.py +317 -0
  674. package/dist/templates/pactile/scripts/common/io.py +37 -0
  675. package/dist/templates/pactile/scripts/common/kernel_command.py +369 -0
  676. package/dist/templates/pactile/scripts/common/lite_context.py +280 -0
  677. package/dist/templates/pactile/scripts/common/log.py +45 -0
  678. package/dist/templates/pactile/scripts/common/ondemand_topology.py +419 -0
  679. package/dist/templates/pactile/scripts/common/packages_context.py +239 -0
  680. package/dist/templates/pactile/scripts/common/pactile_config.py +131 -0
  681. package/dist/templates/pactile/scripts/common/parallel_declaration.py +369 -0
  682. package/dist/templates/pactile/scripts/common/parent_orchestration.py +1198 -0
  683. package/dist/templates/pactile/scripts/common/paths.py +756 -0
  684. package/dist/templates/pactile/scripts/common/pool_refs.py +119 -0
  685. package/dist/templates/pactile/scripts/common/pool_slice.py +269 -0
  686. package/dist/templates/pactile/scripts/common/pool_store.py +766 -0
  687. package/dist/templates/pactile/scripts/common/project_file_stats.py +91 -0
  688. package/dist/templates/pactile/scripts/common/retrieval_adapter_metadata.py +943 -0
  689. package/dist/templates/pactile/scripts/common/retrieval_agent_instructions.py +123 -0
  690. package/dist/templates/pactile/scripts/common/retrieval_evidence.py +915 -0
  691. package/dist/templates/pactile/scripts/common/retrieval_pack.py +422 -0
  692. package/dist/templates/pactile/scripts/common/retrieval_pack_context.py +122 -0
  693. package/dist/templates/pactile/scripts/common/retrieval_plan_gate.py +61 -0
  694. package/dist/templates/pactile/scripts/common/retrieval_result_ranking.py +104 -0
  695. package/dist/templates/pactile/scripts/common/retrieval_tool_classification.py +166 -0
  696. package/dist/templates/pactile/scripts/common/safe_commit.py +285 -0
  697. package/dist/templates/pactile/scripts/common/semantic_plan_gate.py +53 -0
  698. package/dist/templates/pactile/scripts/common/session_context.py +1213 -0
  699. package/dist/templates/pactile/scripts/common/session_memory.py +386 -0
  700. package/dist/templates/pactile/scripts/common/session_pack.py +886 -0
  701. package/dist/templates/pactile/scripts/common/smart_search_evidence.py +514 -0
  702. package/dist/templates/pactile/scripts/common/smart_search_resolve.py +150 -0
  703. package/dist/templates/pactile/scripts/common/subagent_dispatch.py +592 -0
  704. package/dist/templates/pactile/scripts/common/task_context.py +241 -0
  705. package/dist/templates/pactile/scripts/common/task_dashboard.py +286 -0
  706. package/dist/templates/pactile/scripts/common/task_dependencies.py +648 -0
  707. package/dist/templates/pactile/scripts/common/task_gates.py +2478 -0
  708. package/dist/templates/pactile/scripts/common/task_map.py +703 -0
  709. package/dist/templates/pactile/scripts/common/task_queue.py +188 -0
  710. package/dist/templates/pactile/scripts/common/task_store.py +2252 -0
  711. package/dist/templates/pactile/scripts/common/task_utils.py +274 -0
  712. package/dist/templates/pactile/scripts/common/tasks.py +231 -0
  713. package/dist/templates/pactile/scripts/common/test_adapter_middleware.py +199 -0
  714. package/dist/templates/pactile/scripts/common/test_depends_mode_block.py +509 -0
  715. package/dist/templates/pactile/scripts/common/test_full_quality.py +197 -0
  716. package/dist/templates/pactile/scripts/common/test_kernel_command.py +336 -0
  717. package/dist/templates/pactile/scripts/common/test_lite_path.py +190 -0
  718. package/dist/templates/pactile/scripts/common/test_observable_defaults.py +141 -0
  719. package/dist/templates/pactile/scripts/common/test_ondemand_topology.py +237 -0
  720. package/dist/templates/pactile/scripts/common/test_parallel_declaration.py +264 -0
  721. package/dist/templates/pactile/scripts/common/test_pool_slice.py +198 -0
  722. package/dist/templates/pactile/scripts/common/test_pool_store.py +452 -0
  723. package/dist/templates/pactile/scripts/common/test_retrieval_arbitration.py +331 -0
  724. package/dist/templates/pactile/scripts/common/test_task_dashboard.py +155 -0
  725. package/dist/templates/pactile/scripts/common/test_task_dependencies.py +329 -0
  726. package/dist/templates/pactile/scripts/common/test_task_store_kernel_patch.py +163 -0
  727. package/dist/templates/pactile/scripts/common/types.py +110 -0
  728. package/dist/templates/pactile/scripts/common/workflow_phase.py +194 -0
  729. package/dist/templates/pactile/scripts/compile_session_pack.py +15 -0
  730. package/dist/templates/pactile/scripts/cursor_retrieval_probe.py +64 -0
  731. package/dist/templates/pactile/scripts/cursor_retrieval_probe_prompt.md +33 -0
  732. package/dist/templates/pactile/scripts/generate_dispatch_prompt.py +182 -0
  733. package/dist/templates/pactile/scripts/get_context.py +19 -0
  734. package/dist/templates/pactile/scripts/get_developer.py +26 -0
  735. package/dist/templates/pactile/scripts/hooks/linear_sync.py +243 -0
  736. package/dist/templates/pactile/scripts/init_developer.py +51 -0
  737. package/dist/templates/pactile/scripts/injection_budget_probe.py +69 -0
  738. package/dist/templates/pactile/scripts/pool.py +237 -0
  739. package/dist/templates/pactile/scripts/rank_retrieval_candidates.py +98 -0
  740. package/dist/templates/pactile/scripts/retrieval_probe_matrix_template.json +43 -0
  741. package/dist/templates/pactile/scripts/route_codebase_retrieval.py +72 -0
  742. package/dist/templates/pactile/scripts/run_smart_search.py +12 -0
  743. package/dist/templates/pactile/scripts/score_evidence.py +131 -0
  744. package/dist/templates/pactile/scripts/search_artifacts.py +13 -0
  745. package/dist/templates/pactile/scripts/search_memory.py +12 -0
  746. package/dist/templates/pactile/scripts/spec_health_outcomes.py +160 -0
  747. package/dist/templates/pactile/scripts/task.py +1118 -0
  748. package/dist/templates/pactile/scripts/verify_evidence_probe.py +138 -0
  749. package/dist/templates/pactile/tasks/.gitkeep +0 -0
  750. package/dist/templates/pactile/tasks/locale/en/default-prd.md +27 -0
  751. package/dist/templates/pactile/tasks/locale/zh/default-prd.md +27 -0
  752. package/dist/templates/pactile/tasks/templates/release-execution/design.md +61 -0
  753. package/dist/templates/pactile/tasks/templates/release-execution/handoff-template.md +29 -0
  754. package/dist/templates/pactile/tasks/templates/release-execution/implement.md +29 -0
  755. package/dist/templates/pactile/tasks/templates/release-execution/prd.md +31 -0
  756. package/dist/templates/pactile/tasks/templates/release-readiness/design.md +50 -0
  757. package/dist/templates/pactile/tasks/templates/release-readiness/handoff-template.md +39 -0
  758. package/dist/templates/pactile/tasks/templates/release-readiness/implement.md +29 -0
  759. package/dist/templates/pactile/tasks/templates/release-readiness/prd.md +31 -0
  760. package/dist/templates/pactile/workflow.md +64 -0
  761. package/dist/templates/shared-hooks/event-bridge.py +121 -0
  762. package/dist/templates/shared-hooks/index.d.ts +50 -0
  763. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  764. package/dist/templates/shared-hooks/index.js +96 -0
  765. package/dist/templates/shared-hooks/index.js.map +1 -0
  766. package/dist/templates/shared-hooks/inject-retrieval-plan.py +217 -0
  767. package/dist/templates/shared-hooks/inject-shell-session-context.py +183 -0
  768. package/dist/templates/shared-hooks/inject-subagent-context.py +267 -0
  769. package/dist/templates/shared-hooks/inject-workflow-state.py +106 -0
  770. package/dist/templates/shared-hooks/rename-session-for-task.py +231 -0
  771. package/dist/templates/shared-hooks/research-end-retrieval-pack.py +345 -0
  772. package/dist/templates/shared-hooks/session-start.py +355 -0
  773. package/dist/templates/shared-hooks/spec-write-audit.py +173 -0
  774. package/dist/templates/template-utils.d.ts +28 -0
  775. package/dist/templates/template-utils.d.ts.map +1 -0
  776. package/dist/templates/template-utils.js +83 -0
  777. package/dist/templates/template-utils.js.map +1 -0
  778. package/dist/types/ai-tools.d.ts +102 -0
  779. package/dist/types/ai-tools.d.ts.map +1 -0
  780. package/dist/types/ai-tools.js +60 -0
  781. package/dist/types/ai-tools.js.map +1 -0
  782. package/dist/types/migration.d.ts +125 -0
  783. package/dist/types/migration.d.ts.map +1 -0
  784. package/dist/types/migration.js +8 -0
  785. package/dist/types/migration.js.map +1 -0
  786. package/dist/utils/agents-md.d.ts +27 -0
  787. package/dist/utils/agents-md.d.ts.map +1 -0
  788. package/dist/utils/agents-md.js +70 -0
  789. package/dist/utils/agents-md.js.map +1 -0
  790. package/dist/utils/codebase-retrieval-router.d.ts +31 -0
  791. package/dist/utils/codebase-retrieval-router.d.ts.map +1 -0
  792. package/dist/utils/codebase-retrieval-router.js +88 -0
  793. package/dist/utils/codebase-retrieval-router.js.map +1 -0
  794. package/dist/utils/compare-versions.d.ts +12 -0
  795. package/dist/utils/compare-versions.d.ts.map +1 -0
  796. package/dist/utils/compare-versions.js +86 -0
  797. package/dist/utils/compare-versions.js.map +1 -0
  798. package/dist/utils/cursor-retrieval-env.d.ts +17 -0
  799. package/dist/utils/cursor-retrieval-env.d.ts.map +1 -0
  800. package/dist/utils/cursor-retrieval-env.js +19 -0
  801. package/dist/utils/cursor-retrieval-env.js.map +1 -0
  802. package/dist/utils/cwd-guard.d.ts +38 -0
  803. package/dist/utils/cwd-guard.d.ts.map +1 -0
  804. package/dist/utils/cwd-guard.js +63 -0
  805. package/dist/utils/cwd-guard.js.map +1 -0
  806. package/dist/utils/file-writer.d.ts +36 -0
  807. package/dist/utils/file-writer.d.ts.map +1 -0
  808. package/dist/utils/file-writer.js +203 -0
  809. package/dist/utils/file-writer.js.map +1 -0
  810. package/dist/utils/manifest-prune.d.ts +59 -0
  811. package/dist/utils/manifest-prune.d.ts.map +1 -0
  812. package/dist/utils/manifest-prune.js +176 -0
  813. package/dist/utils/manifest-prune.js.map +1 -0
  814. package/dist/utils/mirror-check.d.ts +22 -0
  815. package/dist/utils/mirror-check.d.ts.map +1 -0
  816. package/dist/utils/mirror-check.js +90 -0
  817. package/dist/utils/mirror-check.js.map +1 -0
  818. package/dist/utils/normalize-text.d.ts +7 -0
  819. package/dist/utils/normalize-text.d.ts.map +1 -0
  820. package/dist/utils/normalize-text.js +16 -0
  821. package/dist/utils/normalize-text.js.map +1 -0
  822. package/dist/utils/p36-upgrade.d.ts +62 -0
  823. package/dist/utils/p36-upgrade.d.ts.map +1 -0
  824. package/dist/utils/p36-upgrade.js +165 -0
  825. package/dist/utils/p36-upgrade.js.map +1 -0
  826. package/dist/utils/posix.d.ts +13 -0
  827. package/dist/utils/posix.d.ts.map +1 -0
  828. package/dist/utils/posix.js +15 -0
  829. package/dist/utils/posix.js.map +1 -0
  830. package/dist/utils/post-update-smoke.d.ts +7 -0
  831. package/dist/utils/post-update-smoke.d.ts.map +1 -0
  832. package/dist/utils/post-update-smoke.js +40 -0
  833. package/dist/utils/post-update-smoke.js.map +1 -0
  834. package/dist/utils/project-capabilities.d.ts +82 -0
  835. package/dist/utils/project-capabilities.d.ts.map +1 -0
  836. package/dist/utils/project-capabilities.js +691 -0
  837. package/dist/utils/project-capabilities.js.map +1 -0
  838. package/dist/utils/project-detector.d.ts +46 -0
  839. package/dist/utils/project-detector.d.ts.map +1 -0
  840. package/dist/utils/project-detector.js +666 -0
  841. package/dist/utils/project-detector.js.map +1 -0
  842. package/dist/utils/proxy.d.ts +25 -0
  843. package/dist/utils/proxy.d.ts.map +1 -0
  844. package/dist/utils/proxy.js +60 -0
  845. package/dist/utils/proxy.js.map +1 -0
  846. package/dist/utils/readiness.d.ts +40 -0
  847. package/dist/utils/readiness.d.ts.map +1 -0
  848. package/dist/utils/readiness.js +491 -0
  849. package/dist/utils/readiness.js.map +1 -0
  850. package/dist/utils/retrieval-agent-instructions.d.ts +10 -0
  851. package/dist/utils/retrieval-agent-instructions.d.ts.map +1 -0
  852. package/dist/utils/retrieval-agent-instructions.js +97 -0
  853. package/dist/utils/retrieval-agent-instructions.js.map +1 -0
  854. package/dist/utils/retrieval-execution-telemetry.d.ts +53 -0
  855. package/dist/utils/retrieval-execution-telemetry.d.ts.map +1 -0
  856. package/dist/utils/retrieval-execution-telemetry.js +116 -0
  857. package/dist/utils/retrieval-execution-telemetry.js.map +1 -0
  858. package/dist/utils/retrieval-result-ranking.d.ts +34 -0
  859. package/dist/utils/retrieval-result-ranking.d.ts.map +1 -0
  860. package/dist/utils/retrieval-result-ranking.js +71 -0
  861. package/dist/utils/retrieval-result-ranking.js.map +1 -0
  862. package/dist/utils/retrieval-tool-classification.d.ts +18 -0
  863. package/dist/utils/retrieval-tool-classification.d.ts.map +1 -0
  864. package/dist/utils/retrieval-tool-classification.js +118 -0
  865. package/dist/utils/retrieval-tool-classification.js.map +1 -0
  866. package/dist/utils/semantic-plan-gate.d.ts +8 -0
  867. package/dist/utils/semantic-plan-gate.d.ts.map +1 -0
  868. package/dist/utils/semantic-plan-gate.js +24 -0
  869. package/dist/utils/semantic-plan-gate.js.map +1 -0
  870. package/dist/utils/task-json.d.ts +13 -0
  871. package/dist/utils/task-json.d.ts.map +1 -0
  872. package/dist/utils/task-json.js +12 -0
  873. package/dist/utils/task-json.js.map +1 -0
  874. package/dist/utils/template-fetcher.d.ts +150 -0
  875. package/dist/utils/template-fetcher.d.ts.map +1 -0
  876. package/dist/utils/template-fetcher.js +907 -0
  877. package/dist/utils/template-fetcher.js.map +1 -0
  878. package/dist/utils/template-hash.d.ts +123 -0
  879. package/dist/utils/template-hash.d.ts.map +1 -0
  880. package/dist/utils/template-hash.js +375 -0
  881. package/dist/utils/template-hash.js.map +1 -0
  882. package/dist/utils/uninstall-scrubbers.d.ts +30 -0
  883. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
  884. package/dist/utils/uninstall-scrubbers.js +196 -0
  885. package/dist/utils/uninstall-scrubbers.js.map +1 -0
  886. package/dist/utils/update-rollout-report.d.ts +171 -0
  887. package/dist/utils/update-rollout-report.d.ts.map +1 -0
  888. package/dist/utils/update-rollout-report.js +126 -0
  889. package/dist/utils/update-rollout-report.js.map +1 -0
  890. package/dist/utils/validate-rules.d.ts +21 -0
  891. package/dist/utils/validate-rules.d.ts.map +1 -0
  892. package/dist/utils/validate-rules.js +88 -0
  893. package/dist/utils/validate-rules.js.map +1 -0
  894. package/dist/utils/workflow-dir.d.ts +15 -0
  895. package/dist/utils/workflow-dir.d.ts.map +1 -0
  896. package/dist/utils/workflow-dir.js +33 -0
  897. package/dist/utils/workflow-dir.js.map +1 -0
  898. package/dist/utils/workflow-resolver.d.ts +86 -0
  899. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  900. package/dist/utils/workflow-resolver.js +265 -0
  901. package/dist/utils/workflow-resolver.js.map +1 -0
  902. package/package.json +117 -0
  903. package/scripts/postinstall.js +6 -0
@@ -0,0 +1,691 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { ensureDir, writeFile } from "./file-writer.js";
4
+ export { PROVIDER_MANIFEST_LOAD_DIAGNOSTIC_CODES_V1, loadProviderManifestsV1, } from "../pactile/middleware/manifest-loader.js";
5
+ export const PROJECT_CAPABILITY_IDS = [
6
+ "codebase-retrieval",
7
+ "github-mcp",
8
+ "playwright-mcp",
9
+ ];
10
+ export const PROJECT_CAPABILITY_READINESS_STATUSES = [
11
+ "pending",
12
+ "ready",
13
+ "failed",
14
+ ];
15
+ const CAPABILITIES_JSON_PATH = ".pactile/capabilities.json";
16
+ const CAPABILITIES_MD_PATH = ".pactile/capabilities.md";
17
+ const CODEX_CAPABILITIES_START = "# PACTILE:PROJECT-CAPABILITIES:START";
18
+ const CODEX_CAPABILITIES_END = "# PACTILE:PROJECT-CAPABILITIES:END";
19
+ export const PROJECT_CAPABILITIES = [
20
+ {
21
+ id: "codebase-retrieval",
22
+ aliases: [
23
+ "fast-context-mcp",
24
+ "fast-context",
25
+ "fast_context",
26
+ "codegraph",
27
+ "colbymchenry/codegraph",
28
+ "colbymchenry-codegraph",
29
+ ],
30
+ title: "Codebase retrieval",
31
+ description: "Role-based local code retrieval through exact search, optional structural and semantic adapters, and direct verification.",
32
+ routing: "Use for codebase questions by retrieval role: extract exact identifiers, path hints, and policy phrases, run rg first, apply intent-gated policy/document-first routing, then use only explicitly selected and readiness-verified project adapters. Do not use WebSearch for codebase questions. Promote only source/Git/test-backed findings to final claims.",
33
+ readiness: "Required exact search (`rg`) is available. Optional structural or semantic adapters are usable only after project authorization and current readiness/freshness evidence; host identity alone never proves readiness.",
34
+ fallback: [
35
+ "Install or expose `rg` on PATH before claiming codebase retrieval readiness.",
36
+ "Ensure `npx -y fast-context-mcp` and `npx -y @colbymchenry/codegraph serve --mcp` can launch before generated MCP adapter entries are claimed as usable.",
37
+ "If CodeGraph, LSP, or fast-context adapters are unavailable, skipped, stale, or uninvoked, label that adapter evidence as unverified and continue with exact search plus direct file reads.",
38
+ "Record exploratory retrieval chains in task `research/*.md`; record final source/Git/test proof and unresolved adapter gaps in `verify.md`.",
39
+ "Run indexing, host MCP smoke checks, or language-server startup only after explicit user approval.",
40
+ ],
41
+ adapters: {
42
+ exact: {
43
+ provider: "rg",
44
+ required: true,
45
+ purpose: "Find identifiers, literals, paths, protocol constants, error codes, config keys, policy phrases, env prefixes, extension ids, and test names.",
46
+ readiness: "`rg` is available on PATH.",
47
+ evidenceStatus: "Corroborated candidate evidence when current file/range matches are captured; still not final proof without source/Git/test confirmation.",
48
+ },
49
+ ast: {
50
+ provider: "codegraph",
51
+ required: false,
52
+ purpose: "Resolve symbols, definitions, imports, callers, callees, impact, affected files, and structural relationships.",
53
+ readiness: "`npx -y @colbymchenry/codegraph serve --mcp` is available and index freshness is confirmed through status/query smoke or source/Git checks.",
54
+ evidenceStatus: "Structural candidate and impact guidance only; stale or unverified graph output must be confirmed with current source, Git, or tests.",
55
+ mcpServer: "codegraph",
56
+ },
57
+ lsp: {
58
+ provider: "codegraph",
59
+ required: false,
60
+ purpose: "Definition/reference navigation on Cursor Agent via codegraph_node and codegraph_search (GO_TO_DEFINITION not exposed in Agent tool table).",
61
+ readiness: "CodeGraph MCP/index available; corroborate with Read on returned line ranges.",
62
+ evidenceStatus: "Structural navigation candidate until Read verifies file/range; do not claim LSP jump when only codegraph ran.",
63
+ },
64
+ semantic: {
65
+ provider: "resolver-selected",
66
+ required: false,
67
+ purpose: "Conceptual recall through a project-authorized semantic Provider selected by the host-neutral resolver.",
68
+ readiness: "A project manifest, explicit authorization, binding, and current runtime facts resolve successfully for semantic intent.",
69
+ evidenceStatus: "Semantic recall candidate only; convert hits into exact source reads before final claims.",
70
+ mcpServer: "fast-context",
71
+ },
72
+ "platform-semantic-native": {
73
+ provider: "resolver-selected",
74
+ required: false,
75
+ purpose: "Optional host-native semantic capability represented by caller-supplied Provider facts.",
76
+ readiness: "Caller-supplied binding and runtime facts satisfy authorization, readiness, and policy checks.",
77
+ evidenceStatus: "Log actual host tool name for semantic_exec telemetry.",
78
+ },
79
+ verification: {
80
+ provider: "source-git-tests",
81
+ required: true,
82
+ purpose: "Prove final claims with direct source reads, exact search confirmation, Git evidence, and focused validation.",
83
+ readiness: "Repository files are readable and task-appropriate validation commands are available or blockers are recorded.",
84
+ evidenceStatus: "Required proof layer for final technical claims and verification evidence.",
85
+ },
86
+ },
87
+ cliAutomationGuidance: [
88
+ {
89
+ command: "rg <pattern> <path>",
90
+ use: "Start with exact identifiers, literals, path hints, policy phrases, errors, config keys, and test names before broader semantic recall.",
91
+ },
92
+ {
93
+ command: 'rg -i "storage default|sidecar|sqlite only" AGENTS.md "**/AGENTS.md" README.md CONTRIBUTING.md .pactile/spec',
94
+ use: "For architecture, boundary, or storage/persistence policy questions (OpenClaw benchmark C-class, especially storage-policy queries), search project instruction and policy docs before implementation modules such as SQLite or state DB files.",
95
+ },
96
+ {
97
+ command: "Get-Content <file> | Select-Object -First <n>",
98
+ use: "Read current source around candidate file ranges before turning retrieval output into a claim.",
99
+ },
100
+ {
101
+ command: "git diff -- <path>",
102
+ use: "Check current worktree changes before claiming behavior, impact, or test scope.",
103
+ },
104
+ {
105
+ command: "codegraph status <path> --json",
106
+ use: "Check initialization, graph size, languages, backend, and pending changes before relying on graph output.",
107
+ },
108
+ {
109
+ command: "codegraph query <symbol-or-search> --path <path> --json",
110
+ use: "Resolve candidate symbols, kinds, files, and line ranges before running impact or relationship commands.",
111
+ },
112
+ {
113
+ command: "codegraph callers <symbol> --path <path> --json",
114
+ use: "Find upstream callers; raise result limits or paginate with rg when the question asks which modules/files invoke a facade, loader, or helper (do not stop at the helper definition file).",
115
+ },
116
+ {
117
+ command: "rg <env-prefix> scripts test e2e bench",
118
+ use: "For env/config literal questions, search scripts, e2e, benchmark, and test trees before auth or runtime implementation modules under src/.",
119
+ },
120
+ {
121
+ command: "rg <symbol> extensions/",
122
+ use: "For shared extension exports, list every extension hit, then disambiguate by extension id in the query and non-empty export bodies before global semantic explore.",
123
+ },
124
+ {
125
+ command: "codegraph callees <symbol> --path <path> --json",
126
+ use: "Find downstream calls and dependencies that constrain a safe change.",
127
+ },
128
+ {
129
+ command: "codegraph impact <symbol> --path <path> --depth <n> --json",
130
+ use: "Estimate blast radius for a resolved symbol before editing or reviewing a refactor.",
131
+ },
132
+ {
133
+ command: "codegraph affected <changed-files...> --path <path> --json",
134
+ use: "Map changed source files to affected tests when preparing validation scope.",
135
+ },
136
+ ],
137
+ mcpServers: [
138
+ {
139
+ name: "fast-context",
140
+ command: "npx",
141
+ args: ["-y", "fast-context-mcp"],
142
+ },
143
+ {
144
+ name: "codegraph",
145
+ command: "npx",
146
+ args: ["-y", "@colbymchenry/codegraph", "serve", "--mcp"],
147
+ startupTimeoutSec: 120,
148
+ },
149
+ ],
150
+ },
151
+ {
152
+ id: "github-mcp",
153
+ aliases: ["github"],
154
+ title: "GitHub MCP",
155
+ description: "GitHub repository, issue, pull request, and review operations.",
156
+ routing: "Use for explicit GitHub remote work; distinguish read-only inspection from write-capable issue, PR, branch, review, or merge actions.",
157
+ readiness: "Configured GitHub API MCP package is visible and `GITHUB_TOKEN` or `GITHUB_PERSONAL_ACCESS_TOKEN` is present in the agent host environment before remote actions are claimed.",
158
+ fallback: [
159
+ "Expose `GITHUB_TOKEN` or `GITHUB_PERSONAL_ACCESS_TOKEN` to the MCP server environment or configure the agent host explicitly.",
160
+ "Ensure `npx -y @modelcontextprotocol/server-github` can launch before selecting this capability.",
161
+ "Without a verified credential posture, use local Git only and do not claim GitHub remote actions.",
162
+ ],
163
+ mcpServers: [
164
+ {
165
+ name: "github",
166
+ command: "npx",
167
+ args: ["-y", "@modelcontextprotocol/server-github"],
168
+ },
169
+ ],
170
+ },
171
+ {
172
+ id: "playwright-mcp",
173
+ aliases: ["playwright"],
174
+ title: "Playwright MCP",
175
+ description: "Browser automation, frontend behavior checks, screenshots, and UI smoke verification.",
176
+ routing: "Use for browser/UI verification when the task requires rendered behavior evidence; keep browser/session startup explicit.",
177
+ readiness: "Configured server and browser runtime are available without silently starting unrelated browsing sessions.",
178
+ fallback: [
179
+ "Verify the Playwright MCP package and browser runtime in the selected host before claiming rendered UI evidence.",
180
+ "If browser automation is unavailable, record the missing runtime and fall back to static checks or manual user verification.",
181
+ ],
182
+ mcpServers: [
183
+ {
184
+ name: "playwright",
185
+ command: "npx",
186
+ args: ["-y", "@playwright/mcp@latest"],
187
+ startupTimeoutSec: 120,
188
+ },
189
+ ],
190
+ },
191
+ ];
192
+ const CAPABILITY_BY_TOKEN = new Map();
193
+ for (const capability of PROJECT_CAPABILITIES) {
194
+ CAPABILITY_BY_TOKEN.set(capability.id, capability.id);
195
+ for (const alias of capability.aliases) {
196
+ CAPABILITY_BY_TOKEN.set(alias, capability.id);
197
+ }
198
+ }
199
+ function selectedSet(selected) {
200
+ return new Set(selected);
201
+ }
202
+ function tokenizeProjectCapabilityValues(values) {
203
+ return (values ?? [])
204
+ .flatMap((value) => value.split(","))
205
+ .map((value) => value.trim().toLowerCase())
206
+ .filter(Boolean);
207
+ }
208
+ function capabilityById(id) {
209
+ const capability = PROJECT_CAPABILITIES.find((item) => item.id === id);
210
+ if (!capability) {
211
+ throw new Error(`Unknown project capability: ${id}`);
212
+ }
213
+ return capability;
214
+ }
215
+ function uniqueInRegistryOrder(values) {
216
+ const requested = new Set(values);
217
+ return PROJECT_CAPABILITY_IDS.filter((id) => requested.has(id));
218
+ }
219
+ function uniqueMcpServers(selected) {
220
+ const servers = new Map();
221
+ for (const id of uniqueInRegistryOrder(selected)) {
222
+ for (const server of capabilityById(id).mcpServers) {
223
+ if (!servers.has(server.name)) {
224
+ servers.set(server.name, server);
225
+ }
226
+ }
227
+ }
228
+ return [...servers.values()];
229
+ }
230
+ function renderCapabilityAdapters(adapters) {
231
+ if (!adapters) {
232
+ return undefined;
233
+ }
234
+ return Object.fromEntries(Object.entries(adapters).map(([role, adapter]) => [
235
+ role,
236
+ {
237
+ provider: adapter.provider,
238
+ required: adapter.required,
239
+ purpose: adapter.purpose,
240
+ readiness: adapter.readiness,
241
+ evidence_status: adapter.evidenceStatus,
242
+ ...(adapter.mcpServer ? { mcp_server: adapter.mcpServer } : {}),
243
+ },
244
+ ]));
245
+ }
246
+ function parseStoredProjectCapabilities(values) {
247
+ const selected = new Set();
248
+ for (const token of tokenizeProjectCapabilityValues(values)) {
249
+ if (token === "none") {
250
+ continue;
251
+ }
252
+ if (token === "all") {
253
+ for (const id of PROJECT_CAPABILITY_IDS) {
254
+ selected.add(id);
255
+ }
256
+ continue;
257
+ }
258
+ const id = CAPABILITY_BY_TOKEN.get(token);
259
+ if (id) {
260
+ selected.add(id);
261
+ }
262
+ }
263
+ return uniqueInRegistryOrder(selected);
264
+ }
265
+ export function parseProjectCapabilities(values) {
266
+ const selected = new Set();
267
+ for (const token of tokenizeProjectCapabilityValues(values)) {
268
+ if (token === "none") {
269
+ continue;
270
+ }
271
+ if (token === "all") {
272
+ for (const id of PROJECT_CAPABILITY_IDS) {
273
+ selected.add(id);
274
+ }
275
+ continue;
276
+ }
277
+ const id = CAPABILITY_BY_TOKEN.get(token);
278
+ if (!id) {
279
+ throw new Error(`Unknown project capability "${token}". Known values: ${[
280
+ ...PROJECT_CAPABILITY_IDS,
281
+ "all",
282
+ "none",
283
+ ].join(", ")}`);
284
+ }
285
+ selected.add(id);
286
+ }
287
+ return uniqueInRegistryOrder(selected);
288
+ }
289
+ export function getProjectCapabilityChoices() {
290
+ return PROJECT_CAPABILITIES.map((capability) => ({
291
+ id: capability.id,
292
+ name: `${capability.title} - ${capability.description}`,
293
+ }));
294
+ }
295
+ export function renderCapabilitiesJson(selected, states) {
296
+ const selectedIds = uniqueInRegistryOrder(selected);
297
+ const selectedLookup = selectedSet(selectedIds);
298
+ const renderedAt = new Date().toISOString();
299
+ const capabilities = Object.fromEntries(PROJECT_CAPABILITIES.map((capability) => {
300
+ const adapters = renderCapabilityAdapters(capability.adapters);
301
+ const isSelected = selectedLookup.has(capability.id);
302
+ const existingState = states?.[capability.id];
303
+ return [
304
+ capability.id,
305
+ {
306
+ selected: isSelected,
307
+ ...(isSelected
308
+ ? {
309
+ readiness_status: existingState?.readiness_status ??
310
+ "pending",
311
+ readiness_status_updated_at: existingState?.readiness_status_updated_at ?? renderedAt,
312
+ ...(existingState?.readiness_status_detail
313
+ ? {
314
+ readiness_status_detail: existingState.readiness_status_detail,
315
+ }
316
+ : {}),
317
+ }
318
+ : {}),
319
+ mcp_servers: capability.mcpServers.map((server) => ({
320
+ name: server.name,
321
+ command: server.command,
322
+ args: server.args,
323
+ ...(server.startupTimeoutSec
324
+ ? { startup_timeout_sec: server.startupTimeoutSec }
325
+ : {}),
326
+ })),
327
+ routing: capability.routing,
328
+ readiness: capability.readiness,
329
+ fallback: capability.fallback,
330
+ ...(adapters ? { adapters } : {}),
331
+ ...(capability.cliAutomationGuidance
332
+ ? { cli_automation_guidance: capability.cliAutomationGuidance }
333
+ : {}),
334
+ ...(capability.mcpQueryGuidance
335
+ ? { mcp_query_guidance: capability.mcpQueryGuidance }
336
+ : {}),
337
+ },
338
+ ];
339
+ }));
340
+ return `${JSON.stringify({
341
+ schema_version: 3,
342
+ note: "Pactile-managed project capability selection. Credentials and global MCP/client config stay outside repository templates.",
343
+ selected: selectedIds,
344
+ capabilities,
345
+ }, null, 2)}\n`;
346
+ }
347
+ export function getProjectCapability(id) {
348
+ return capabilityById(id);
349
+ }
350
+ function appendPolicyDocumentRetrievalRouting(lines) {
351
+ lines.push("## Policy and Document-First Routing (intent-gated)", "", "Apply this branch when the question is about architecture, responsibility, ownership, boundaries, project or package policy, storage or persistence policy, conventions, or where behavior is allowed, forbidden, or defined in instructions—not when the question names an exact symbol, protocol constant, schema path, platform file, or version literal (those stay symbol/path-first for strong A/G/F/J routes).", "", "Trigger signals include: 规定 / 边界 / 为什么不能 / storage policy / persistence / sidecar / import boundaries / transport-only / project instructions / AGENTS conventions.", "", "Evidence order for policy/document queries:", "", "1. Root and nested `AGENTS.md`, then `.pactile/spec/**`, `README.md`, `CONTRIBUTING.md`, architecture or design docs, and package-level policy or contract instruction files.", "2. Exact `rg` on policy phrases and boundary terms scoped to those paths (for example `Storage default: SQLite only`, `sidecar`, `SQLite only`, transport-only, import boundary).", "3. Read matched policy sections with direct source reads before ranking implementation files as Top-1.", "4. Use AST/CodeGraph or semantic recall only to corroborate policy claims or locate related implementation; do not let SQLite/state/cache modules outrank root policy docs when the question asks what is allowed or forbidden.", "5. Verify with source reads before final claims; optional adapters remain optional.", "", "### Storage and persistence policy (benchmark C03 pattern)", "", "When the question asks how storage is chosen, why sidecar files for cache or queue are forbidden, or SQLite vs JSON/JSONL policy: inspect root `AGENTS.md` (and nested `**/AGENTS.md`) before `src/state/*`, Kysely, or other storage implementation modules. Target Top-1 policy evidence such as `Storage default: SQLite only`, `state/openclaw.sqlite`, and `Kysely` cited from instruction docs, not from implementation adjacency alone. OpenClaw audit acceptance target for this query class: `>= 4/6` when agents follow this route.", "");
352
+ }
353
+ function appendCodebaseRetrievalIntentBranches(lines) {
354
+ lines.push("## Query Intent Branches (intent-gated)", "", "Apply these branches only when the question matches the intent class. Do not reorder the global workflow for F/G protocol queries, platform file paths, or questions with a single named symbol or constant—keep exact `rg` and symbol-scoped CodeGraph first.", "", "### Caller and assembly chain (B-class)", "", "- Use when the question asks who calls, which modules invoke, where behavior is wired, or which facade modules delegate work.", "- Do not treat facade-runtime, loader, barrel, plugin-registry-snapshot, or a single deliver/helper file as sufficient Top-1 evidence when the rubric expects many concrete call sites.", "- After exact hits on the helper or symbol, run `codegraph callers` with a raised limit (or repeat with `rg` references/imports) until concrete callee modules appear; follow assembly nodes (`*-runtime`, `server-runtime-services`, registry entry vs snapshot) with `codegraph callees` or targeted `rg`.", "- Rank concrete call-site files above the file that only defines or loads the helper.", "", "### Cross-cutting / conceptual discovery", "", "- Use when the question has no named symbol, path, or protocol constant but asks how behavior works, spans modules/packages, or uses conceptual phrasing (for example English *how does* / *across packages*, or Chinese 如何 / 机制 / 跨).", "- The deterministic router emits intent `cross-cutting-discovery` and promotes semantic recall to plan order 1–2 (after `policy-docs-rg` when policy intent also matches); follow with exact `rg` on returned keywords and paths.", "- Request semantic intent from the host-neutral resolver; only a project-authorized, bound, ready, fresh, policy-compliant Provider may be used.", "- Host identity and user-global route files are not readiness evidence and do not choose the Provider.", "- If no Provider resolves, continue with exact search and direct source reads while reporting semantic recall as unavailable.", "- When exact-symbol or F/G preserve intents match, keep exact `rg` primary; do not apply this branch.", "", "### Trap demotion and package boundary (E-class)", "", "- Use when similarly named files exist in a different package or layer (for example `src/agents/*` vs `packages/*-core`).", "- Parse path and package hints in the query; demote trap candidates until an export, protocol type, or corroborating call site matches the asked layer.", "- Prefer `packages/<name>/` evidence when the question names a core library; demote spawn/runtime overlay traps that share a prefix but live in agent glue code.", "- Do not promote a trap file to Top-1 without reading exports and at least one confirming reference.", "", "### Extension and shared-symbol disambiguation (A-class)", "", "- Use when one symbol (for example `legacyConfigRules`) appears across many `extensions/` trees.", "- Run exact `rg` across `extensions/` first; filter by extension id or directory named in the question.", "- Prefer the first non-empty export with a real implementation over stub or empty `doctor-contract-api` paths; demote traps listed in eval/query context when present.", "- Run CodeGraph explore only after the extension candidate set is narrowed—not as an unscoped global symbol search.", "", "### Environment and config literals (D-class)", "", "- Use when the question names env vars, `OPENCLAW_*` prefixes, benchmark startup, or e2e script configuration.", "- Run exact `rg` on `scripts/`, `test/`, `e2e/`, and `bench/` (or project equivalents) before `src/` auth, token, or runtime conflict modules.", "- Prefer files that assign or read the literal in scripts over implementation files that only mention the prefix in error handling.", "- Use CodeGraph after literal hits exist; do not let auth/runtime implementation outrank script evidence for env-inventory questions.", "", "### Preserve strong routes (F / G / exact symbol)", "", "- Platform paths (`apps/ios`, `apps/android`, Swift/Kotlin trees), `packages/gateway-protocol`, contract/schema globs, and named constants: exact `rg` plus symbol-scoped `codegraph_search` stay primary.", "- Do not run policy-first, trap demotion, or env-before-`src/` passes ahead of exact symbol discovery for those queries.", "");
355
+ }
356
+ function appendCodebaseRetrievalWorkflow(lines) {
357
+ lines.push("## Codebase Retrieval Workflow", "", "1. Extract exact identifiers, literals, path hints, policy phrases, command names, error text, config keys, env prefixes, extension ids, routes, event names, task names, and test names from the question.", "2. Run exact `rg` search first when exact signals exist and keep file/range candidates tied to source evidence.", "3. Classify intent (policy/document, caller-chain, trap/package, extension spread, env literal, protocol/platform) and apply **Policy and Document-First Routing** or the matching branch from **Query Intent Branches** when it fits; skip branches that do not match.", "4. Use AST/CodeGraph when available and fresh enough to resolve symbols, imports, callers, callees, impact, and affected files.", "5. Use an explicitly selected structural adapter for definition/reference only when its readiness is current; read returned line ranges to verify them.", "6. Use semantic recall for conceptual, poorly named, or cross-cutting areas, then turn returned files/ranges/keywords into exact follow-up checks; deprioritize semantic Top-1 for policy/storage-policy, env-literal, and extension-disambiguation questions until policy docs or `rg` narrow candidates.", "7. Fuse candidates by source proximity, tests, current Git state, and adapter freshness.", "8. Read files, inspect relevant Git evidence, and run task-appropriate validation before making final behavior, impact, or test-coverage claims.", "", "## Codebase Evidence Levels", "", "- Candidate: filenames, semantic recall, initial graph/LSP output, or incomplete exact search. Candidate evidence cannot support final claims.", "- Corroborated candidate: current source reads or exact `rg` hits confirm the candidate exists in this checkout. Use it to plan deeper reads or tests.", "- Verified claim: current source lines plus Git evidence or focused validation support the statement. Use this level for final answers and `verify.md`.", "- Unverified / unavailable: adapter output is stale, skipped, unavailable, hidden from the host, or not invoked. Report it explicitly instead of claiming it.", "", "## Evidence Persistence", "", "- Record exploratory retrieval chains, adapter availability, freshness checks, and competing hypotheses in task `research/*.md`.", "- Record final source/Git/test proof, validation commands, and unresolved adapter gaps in `verify.md`.", "- Prefer reusable research frontmatter when the artifact should be rediscovered later: `doc_type`, `status`, `confidence`, `scope`, and `related_files`.", "", "## Fallback Sequence", "", "- If `rg` is missing, codebase retrieval readiness fails; install or expose `rg` before claiming readiness.", "- If CodeGraph, LSP, or fast-context are unavailable or unverified, continue with exact search, direct source reads, Git evidence, and focused tests.", "- Do not start MCP servers, initialize indexes, start language servers, or install tools without explicit user approval.", "", "## Adapter Roles", "");
358
+ const adapters = capabilityById("codebase-retrieval").adapters ?? {};
359
+ for (const [role, adapter] of Object.entries(adapters)) {
360
+ lines.push(`### ${role}`, "", `- Provider: ${adapter.provider}`, `- Required: ${adapter.required ? "yes" : "no"}`, `- Purpose: ${adapter.purpose}`, `- Readiness: ${adapter.readiness}`, `- Evidence status: ${adapter.evidenceStatus}`, "");
361
+ }
362
+ lines.push("## Semantic recall", "", "Semantic routing consumes only caller-supplied project authorization, binding, readiness, freshness, assurance, and policy facts. It does not read a user-global route file or infer readiness from the current host.", "", "Prefer `retrieval-daily-guide.md` for tool names (no always-on retrieval rule).", "");
363
+ appendCodebaseRetrievalIntentBranches(lines);
364
+ }
365
+ function capabilityStatusLabel(status) {
366
+ switch (status) {
367
+ case "ready":
368
+ return "ready";
369
+ case "failed":
370
+ return "failed";
371
+ default:
372
+ return "pending";
373
+ }
374
+ }
375
+ export function renderCapabilitiesMarkdown(selected, states) {
376
+ const selectedIds = uniqueInRegistryOrder(selected);
377
+ const lines = [
378
+ "# Pactile Project Capabilities",
379
+ "",
380
+ "This file records selected project capabilities for the Pactile workflow. It does not store credentials and does not prove readiness by itself.",
381
+ "",
382
+ "## Selected",
383
+ "",
384
+ ];
385
+ if (selectedIds.length === 0) {
386
+ lines.push("- none");
387
+ }
388
+ else {
389
+ for (const id of selectedIds) {
390
+ const capability = capabilityById(id);
391
+ const state = states?.[id];
392
+ const status = capabilityStatusLabel(state?.readiness_status);
393
+ const detail = state?.readiness_status_detail?.trim()
394
+ ? ` (${state.readiness_status_detail.trim()})`
395
+ : "";
396
+ lines.push(`- ${capability.id} [${status}]: ${capability.description}${detail}`);
397
+ }
398
+ }
399
+ lines.push("", "## Routing Rules", "", "- Unselected, unavailable, skipped, or uninvoked capabilities must not be reported as used.", "- Capability output that affects task decisions must be recorded in task research or verify evidence.", "- `codebase-retrieval` routes by retrieval role, not by tool brand: exact search, intent-gated policy/document-first routing, optional project-authorized structural or semantic resolution, then verification.", "- Policy, architecture, boundary, and storage-policy questions must inspect `AGENTS.md`, `.pactile/spec/**`, and README/contributing/architecture docs before semantic implementation search.", "- Intent-gated branches (policy/document, caller-chain, trap demotion, extension disambiguation, env/config literals) must not override exact-symbol or F/G protocol routes.", "- Exact `rg` search and direct source reads are the baseline for current-code claims.", "- CodeGraph output is structural guidance until index freshness and current source/Git evidence are confirmed.", "- Semantic output is recall-only and must be converted into exact source checks before final claims.", "- Host identity or user-global routing state must not select a Provider or prove readiness.", "- Per-query tool order lives in on-demand retrieval docs, not an always-on rule.", "- GitHub MCP uses the GitHub API server package; remote writes require explicit user intent and the host's credential/tool posture must be clear.", "- Playwright MCP should be used for rendered UI evidence only when browser verification is part of the task.", "");
400
+ if (selectedIds.includes("codebase-retrieval")) {
401
+ appendPolicyDocumentRetrievalRouting(lines);
402
+ appendCodebaseRetrievalWorkflow(lines);
403
+ }
404
+ const selectedWithCliAutomation = selectedIds
405
+ .map(capabilityById)
406
+ .filter((capability) => (capability.cliAutomationGuidance?.length ?? 0) > 0);
407
+ if (selectedWithCliAutomation.length > 0) {
408
+ lines.push("## CLI Automation Guidance", "");
409
+ for (const capability of selectedWithCliAutomation) {
410
+ lines.push(`### ${capability.id}`, "", "- Run these commands only after the capability is selected and readiness/freshness has been verified or explicitly reported as unverified.", "- Treat adapter output as planning guidance until current source, Git, or tests confirm the claim.");
411
+ for (const hint of capability.cliAutomationGuidance ?? []) {
412
+ lines.push(`- \`${hint.command}\`: ${hint.use}`);
413
+ }
414
+ lines.push("");
415
+ }
416
+ }
417
+ const selectedWithQueryGuidance = selectedIds
418
+ .map(capabilityById)
419
+ .filter((capability) => (capability.mcpQueryGuidance?.length ?? 0) > 0);
420
+ if (selectedWithQueryGuidance.length > 0) {
421
+ lines.push("## MCP Query Guidance", "");
422
+ for (const capability of selectedWithQueryGuidance) {
423
+ lines.push(`### ${capability.id}`, "", "- Use these MCP query tools only after the capability is selected and the user explicitly approves any MCP runtime startup.", "- Treat tool output as orientation unless freshness is confirmed; source reads, Git, and tests remain the proof layer for current-code claims.");
424
+ for (const hint of capability.mcpQueryGuidance ?? []) {
425
+ lines.push(`- \`${hint.tool}\`: ${hint.use}`);
426
+ }
427
+ lines.push("");
428
+ }
429
+ }
430
+ lines.push("## Readiness Expectations", "");
431
+ for (const capability of PROJECT_CAPABILITIES) {
432
+ lines.push(`- ${capability.id}: ${capability.readiness}`);
433
+ }
434
+ lines.push("", "## Fallback Guidance", "");
435
+ if (selectedIds.length === 0) {
436
+ lines.push("- none");
437
+ }
438
+ else {
439
+ for (const id of selectedIds) {
440
+ const capability = capabilityById(id);
441
+ lines.push(`### ${capability.id}`, "");
442
+ for (const fallback of capability.fallback) {
443
+ lines.push(`- ${fallback}`);
444
+ }
445
+ lines.push("");
446
+ }
447
+ }
448
+ return `${lines.join("\n")}\n`;
449
+ }
450
+ function tomlString(value) {
451
+ return JSON.stringify(value);
452
+ }
453
+ function tomlArray(values) {
454
+ return `[${values.map(tomlString).join(", ")}]`;
455
+ }
456
+ function renderCodexCapabilityBlock(selected) {
457
+ const selectedIds = uniqueInRegistryOrder(selected);
458
+ if (selectedIds.length === 0) {
459
+ return "";
460
+ }
461
+ const lines = [
462
+ CODEX_CAPABILITIES_START,
463
+ "# Project-local MCP servers selected through Pactile.",
464
+ "# Credentials stay in the agent host environment or user-level config.",
465
+ ];
466
+ for (const server of uniqueMcpServers(selectedIds)) {
467
+ lines.push("", `[mcp_servers.${server.name}]`, `command = ${tomlString(server.command)}`, `args = ${tomlArray(server.args)}`);
468
+ if (server.startupTimeoutSec) {
469
+ lines.push(`startup_timeout_sec = ${server.startupTimeoutSec}`);
470
+ }
471
+ }
472
+ lines.push(CODEX_CAPABILITIES_END);
473
+ return lines.join("\n");
474
+ }
475
+ export function applyCodexCapabilityConfig(baseContent, selected) {
476
+ const escapedStart = CODEX_CAPABILITIES_START.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
477
+ const escapedEnd = CODEX_CAPABILITIES_END.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
478
+ const withoutExistingBlock = baseContent
479
+ .replace(new RegExp(`\\n*${escapedStart}[\\s\\S]*?${escapedEnd}\\n*`), "\n")
480
+ .trimEnd();
481
+ const block = renderCodexCapabilityBlock(selected);
482
+ if (!block) {
483
+ return `${withoutExistingBlock}\n`;
484
+ }
485
+ return `${withoutExistingBlock}\n\n${block}\n`;
486
+ }
487
+ /** MCP server names declared by any registry capability (Pactile-managed keys). */
488
+ export function managedMcpServerNames() {
489
+ const names = new Set();
490
+ for (const capability of PROJECT_CAPABILITIES) {
491
+ for (const server of capability.mcpServers) {
492
+ names.add(server.name);
493
+ }
494
+ }
495
+ return [...names];
496
+ }
497
+ export function loadExistingMcpServers(cwd) {
498
+ const filePath = path.join(cwd, ".cursor", "mcp.json");
499
+ if (!fs.existsSync(filePath)) {
500
+ return {};
501
+ }
502
+ try {
503
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
504
+ if (!parsed.mcpServers ||
505
+ typeof parsed.mcpServers !== "object" ||
506
+ Array.isArray(parsed.mcpServers)) {
507
+ return {};
508
+ }
509
+ const result = {};
510
+ for (const [name, value] of Object.entries(parsed.mcpServers)) {
511
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
512
+ continue;
513
+ }
514
+ const entry = value;
515
+ if (typeof entry.command !== "string") {
516
+ continue;
517
+ }
518
+ const args = Array.isArray(entry.args)
519
+ ? entry.args.filter((item) => typeof item === "string")
520
+ : [];
521
+ result[name] = { ...entry, command: entry.command, args };
522
+ }
523
+ return result;
524
+ }
525
+ catch {
526
+ return {};
527
+ }
528
+ }
529
+ /**
530
+ * Render `.cursor/mcp.json`.
531
+ * When `existing` is provided, upsert Pactile-managed servers from
532
+ * selection, remove managed names not in selection, and preserve foreign keys.
533
+ */
534
+ export function renderMcpJson(selected, existing) {
535
+ const desired = Object.fromEntries(uniqueMcpServers(selected).map((server) => [
536
+ server.name,
537
+ {
538
+ command: server.command,
539
+ args: server.args,
540
+ },
541
+ ]));
542
+ const merged = {
543
+ ...(existing ?? {}),
544
+ };
545
+ const managed = new Set(managedMcpServerNames());
546
+ for (const name of managed) {
547
+ if (!(name in desired)) {
548
+ Reflect.deleteProperty(merged, name);
549
+ }
550
+ }
551
+ for (const [name, server] of Object.entries(desired)) {
552
+ merged[name] = server;
553
+ }
554
+ return `${JSON.stringify({ mcpServers: merged }, null, 2)}\n`;
555
+ }
556
+ export function buildProjectCapabilityTemplates(selected, platforms, states, options) {
557
+ const selectedIds = uniqueInRegistryOrder(selected);
558
+ const files = new Map();
559
+ const platformSet = new Set(platforms);
560
+ if (selectedIds.length > 0) {
561
+ files.set(CAPABILITIES_JSON_PATH, renderCapabilitiesJson(selectedIds, states));
562
+ files.set(CAPABILITIES_MD_PATH, renderCapabilitiesMarkdown(selectedIds, states));
563
+ }
564
+ if (platformSet.has("cursor")) {
565
+ const existing = options?.existingMcpServers !== undefined
566
+ ? options.existingMcpServers
567
+ : options?.cwd
568
+ ? loadExistingMcpServers(options.cwd)
569
+ : null;
570
+ const desiredServers = uniqueMcpServers(selectedIds);
571
+ const existingKeys = Object.keys(existing ?? {});
572
+ const mcpPathExists = typeof options?.cwd === "string" &&
573
+ fs.existsSync(path.join(options.cwd, ".cursor", "mcp.json"));
574
+ // Do not create an empty `.cursor/mcp.json` on fresh Cursor init with no
575
+ // MCP capabilities selected — that leaves a useless file and breaks
576
+ // uninstall "project is clean" expectations.
577
+ if (desiredServers.length > 0 || existingKeys.length > 0 || mcpPathExists) {
578
+ files.set(".cursor/mcp.json", renderMcpJson(selectedIds, existing));
579
+ }
580
+ }
581
+ return files;
582
+ }
583
+ export async function writeProjectCapabilityFiles(cwd, selected, platforms) {
584
+ const files = buildProjectCapabilityTemplates(selected, platforms, loadStoredCapabilityStates(cwd), { cwd });
585
+ if (files.size === 0) {
586
+ return;
587
+ }
588
+ for (const [relativePath, content] of files) {
589
+ const targetPath = path.join(cwd, ...relativePath.split("/"));
590
+ ensureDir(path.dirname(targetPath));
591
+ await writeFile(targetPath, content);
592
+ }
593
+ }
594
+ function parseStoredCapabilityState(value) {
595
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
596
+ return undefined;
597
+ }
598
+ const candidate = value;
599
+ if (typeof candidate.selected !== "boolean") {
600
+ return undefined;
601
+ }
602
+ const state = {
603
+ selected: candidate.selected,
604
+ };
605
+ if (typeof candidate.readiness_status === "string" &&
606
+ PROJECT_CAPABILITY_READINESS_STATUSES.includes(candidate.readiness_status)) {
607
+ state.readiness_status =
608
+ candidate.readiness_status;
609
+ }
610
+ if (typeof candidate.readiness_status_updated_at === "string") {
611
+ state.readiness_status_updated_at = candidate.readiness_status_updated_at;
612
+ }
613
+ if (typeof candidate.readiness_status_detail === "string") {
614
+ state.readiness_status_detail = candidate.readiness_status_detail;
615
+ }
616
+ return state;
617
+ }
618
+ export function loadStoredCapabilityStates(cwd) {
619
+ const filePath = path.join(cwd, ...CAPABILITIES_JSON_PATH.split("/"));
620
+ if (!fs.existsSync(filePath)) {
621
+ return {};
622
+ }
623
+ try {
624
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
625
+ if (!parsed.capabilities ||
626
+ typeof parsed.capabilities !== "object" ||
627
+ Array.isArray(parsed.capabilities)) {
628
+ return {};
629
+ }
630
+ const states = {};
631
+ for (const id of PROJECT_CAPABILITY_IDS) {
632
+ const state = parseStoredCapabilityState(parsed.capabilities[id]);
633
+ if (state) {
634
+ states[id] = state;
635
+ }
636
+ }
637
+ return states;
638
+ }
639
+ catch {
640
+ return {};
641
+ }
642
+ }
643
+ export function loadProjectCapabilities(cwd) {
644
+ const filePath = path.join(cwd, ...CAPABILITIES_JSON_PATH.split("/"));
645
+ if (!fs.existsSync(filePath)) {
646
+ return [];
647
+ }
648
+ try {
649
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
650
+ if (!Array.isArray(parsed.selected)) {
651
+ return [];
652
+ }
653
+ return parseStoredProjectCapabilities(parsed.selected.filter((item) => typeof item === "string"));
654
+ }
655
+ catch {
656
+ return [];
657
+ }
658
+ }
659
+ export function collectProjectCapabilityTemplates(cwd, platforms) {
660
+ return buildProjectCapabilityTemplates(loadProjectCapabilities(cwd), platforms, loadStoredCapabilityStates(cwd));
661
+ }
662
+ export function updateCapabilityReadinessStatus(cwd, capabilityId, status, detail) {
663
+ const filePath = path.join(cwd, ...CAPABILITIES_JSON_PATH.split("/"));
664
+ if (!fs.existsSync(filePath)) {
665
+ throw new Error(`Missing ${CAPABILITIES_JSON_PATH}`);
666
+ }
667
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
668
+ if (!parsed.capabilities || typeof parsed.capabilities !== "object") {
669
+ throw new Error("capabilities.json missing capabilities object");
670
+ }
671
+ const current = parseStoredCapabilityState(parsed.capabilities[capabilityId]);
672
+ if (!current?.selected) {
673
+ throw new Error(`Capability ${capabilityId} is not selected`);
674
+ }
675
+ const next = {
676
+ ...parsed.capabilities[capabilityId],
677
+ readiness_status: status,
678
+ readiness_status_updated_at: new Date().toISOString(),
679
+ ...(detail?.trim()
680
+ ? { readiness_status_detail: detail.trim() }
681
+ : { readiness_status_detail: undefined }),
682
+ };
683
+ parsed.schema_version = 3;
684
+ parsed.capabilities[capabilityId] = next;
685
+ fs.writeFileSync(filePath, `${JSON.stringify(parsed, null, 2)}\n`, "utf-8");
686
+ const markdownPath = path.join(cwd, ...CAPABILITIES_MD_PATH.split("/"));
687
+ const selectedIds = loadProjectCapabilities(cwd);
688
+ const states = loadStoredCapabilityStates(cwd);
689
+ fs.writeFileSync(markdownPath, renderCapabilitiesMarkdown(selectedIds, states), "utf-8");
690
+ }
691
+ //# sourceMappingURL=project-capabilities.js.map