@bevel-software/platform-core-backend 0.25.2 → 0.27.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 (733) hide show
  1. package/agent-guide/access-control.md +251 -0
  2. package/agent-guide/conventions.md +35 -0
  3. package/agent-guide/directory-structure.md +145 -0
  4. package/agent-guide/finding-things.md +7 -0
  5. package/agent-guide/html-views.md +83 -0
  6. package/agent-guide/introduction.md +27 -0
  7. package/agent-guide/new-knowledge-base.md +24 -0
  8. package/agent-guide/skills.md +47 -0
  9. package/agent-guide/tool-manuals.md +227 -0
  10. package/agent-guide/where-a-new-file-goes.md +36 -0
  11. package/dist/assets.d.ts +26 -0
  12. package/dist/assets.d.ts.map +1 -1
  13. package/dist/assets.js +35 -2
  14. package/dist/assets.js.map +1 -1
  15. package/dist/core/catalog-revision.d.ts +19 -1
  16. package/dist/core/catalog-revision.d.ts.map +1 -1
  17. package/dist/core/catalog-revision.js +14 -3
  18. package/dist/core/catalog-revision.js.map +1 -1
  19. package/dist/core/core-ports.d.ts +11 -0
  20. package/dist/core/core-ports.d.ts.map +1 -1
  21. package/dist/core/core-ports.js.map +1 -1
  22. package/dist/core/create-core-server.d.ts +5 -0
  23. package/dist/core/create-core-server.d.ts.map +1 -1
  24. package/dist/core/create-core-server.js +65 -3
  25. package/dist/core/create-core-server.js.map +1 -1
  26. package/dist/core/create-core-services.d.ts +35 -0
  27. package/dist/core/create-core-services.d.ts.map +1 -1
  28. package/dist/core/create-core-services.js +114 -12
  29. package/dist/core/create-core-services.js.map +1 -1
  30. package/dist/core/lifecycle.d.ts +16 -1
  31. package/dist/core/lifecycle.d.ts.map +1 -1
  32. package/dist/core/lifecycle.js +18 -1
  33. package/dist/core/lifecycle.js.map +1 -1
  34. package/dist/core-config.d.ts +21 -0
  35. package/dist/core-config.d.ts.map +1 -1
  36. package/dist/core-config.js +22 -1
  37. package/dist/core-config.js.map +1 -1
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +2 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/modules/access/access-control.interface.d.ts +17 -0
  43. package/dist/modules/access/access-control.interface.d.ts.map +1 -1
  44. package/dist/modules/access/access-control.service.d.ts +2 -0
  45. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  46. package/dist/modules/access/access-control.service.js +27 -0
  47. package/dist/modules/access/access-control.service.js.map +1 -1
  48. package/dist/modules/access/directory-sync-bot.js +1 -1
  49. package/dist/modules/access/directory-sync-bot.js.map +1 -1
  50. package/dist/modules/agent-guide/agent-guide.d.ts +145 -0
  51. package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -0
  52. package/dist/modules/agent-guide/agent-guide.js +199 -0
  53. package/dist/modules/agent-guide/agent-guide.js.map +1 -0
  54. package/dist/modules/agent-guide/agent-guide.tools.d.ts +24 -0
  55. package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -0
  56. package/dist/modules/agent-guide/agent-guide.tools.js +100 -0
  57. package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -0
  58. package/dist/modules/agent-guide/index.d.ts +4 -0
  59. package/dist/modules/agent-guide/index.d.ts.map +1 -0
  60. package/dist/modules/agent-guide/index.js +4 -0
  61. package/dist/modules/agent-guide/index.js.map +1 -0
  62. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +3 -2
  63. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
  64. package/dist/modules/agent-instructions/agent-instructions.routes.js +3 -2
  65. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
  66. package/dist/modules/agent-instructions/compose.d.ts +14 -6
  67. package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
  68. package/dist/modules/agent-instructions/compose.js +28 -8
  69. package/dist/modules/agent-instructions/compose.js.map +1 -1
  70. package/dist/modules/agent-instructions/index.d.ts +1 -1
  71. package/dist/modules/agent-instructions/index.d.ts.map +1 -1
  72. package/dist/modules/agent-instructions/index.js +1 -1
  73. package/dist/modules/agent-instructions/index.js.map +1 -1
  74. package/dist/modules/agent-instructions/shared-file-rules.d.ts +10 -50
  75. package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
  76. package/dist/modules/agent-instructions/shared-file-rules.js +51 -104
  77. package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
  78. package/dist/modules/audit/agent-audit.service.d.ts +21 -2
  79. package/dist/modules/audit/agent-audit.service.d.ts.map +1 -1
  80. package/dist/modules/audit/agent-audit.service.js +43 -2
  81. package/dist/modules/audit/agent-audit.service.js.map +1 -1
  82. package/dist/modules/audit/agent-connection.routes.d.ts +34 -0
  83. package/dist/modules/audit/agent-connection.routes.d.ts.map +1 -0
  84. package/dist/modules/audit/agent-connection.routes.js +38 -0
  85. package/dist/modules/audit/agent-connection.routes.js.map +1 -0
  86. package/dist/modules/audit/audit.contract.d.ts +24 -0
  87. package/dist/modules/audit/audit.contract.d.ts.map +1 -1
  88. package/dist/modules/audit/audit.contract.js.map +1 -1
  89. package/dist/modules/audit/index.d.ts +1 -0
  90. package/dist/modules/audit/index.d.ts.map +1 -1
  91. package/dist/modules/audit/index.js +1 -0
  92. package/dist/modules/audit/index.js.map +1 -1
  93. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  94. package/dist/modules/auth/account.routes.js +10 -3
  95. package/dist/modules/auth/account.routes.js.map +1 -1
  96. package/dist/modules/auth/auth.middleware.d.ts +7 -0
  97. package/dist/modules/auth/auth.middleware.d.ts.map +1 -1
  98. package/dist/modules/auth/auth.middleware.js +1 -1
  99. package/dist/modules/auth/auth.middleware.js.map +1 -1
  100. package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
  101. package/dist/modules/code-mode/code-mode.tool.js +11 -3
  102. package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
  103. package/dist/modules/database/core-schema.d.ts +96 -0
  104. package/dist/modules/database/core-schema.d.ts.map +1 -1
  105. package/dist/modules/database/core-schema.js +32 -3
  106. package/dist/modules/database/core-schema.js.map +1 -1
  107. package/dist/modules/embed/account-link.service.d.ts +42 -0
  108. package/dist/modules/embed/account-link.service.d.ts.map +1 -0
  109. package/dist/modules/embed/account-link.service.js +50 -0
  110. package/dist/modules/embed/account-link.service.js.map +1 -0
  111. package/dist/modules/embed/embed-link.d.ts +58 -0
  112. package/dist/modules/embed/embed-link.d.ts.map +1 -0
  113. package/dist/modules/embed/embed-link.js +160 -0
  114. package/dist/modules/embed/embed-link.js.map +1 -0
  115. package/dist/modules/embed/embed.errors.d.ts +30 -0
  116. package/dist/modules/embed/embed.errors.d.ts.map +1 -0
  117. package/dist/modules/embed/embed.errors.js +42 -0
  118. package/dist/modules/embed/embed.errors.js.map +1 -0
  119. package/dist/modules/embed/embed.interface.d.ts +204 -0
  120. package/dist/modules/embed/embed.interface.d.ts.map +1 -0
  121. package/dist/modules/embed/embed.interface.js +2 -0
  122. package/dist/modules/embed/embed.interface.js.map +1 -0
  123. package/dist/modules/embed/embed.routes.d.ts +59 -0
  124. package/dist/modules/embed/embed.routes.d.ts.map +1 -0
  125. package/dist/modules/embed/embed.routes.js +343 -0
  126. package/dist/modules/embed/embed.routes.js.map +1 -0
  127. package/dist/modules/embed/embed.service.d.ts +169 -0
  128. package/dist/modules/embed/embed.service.d.ts.map +1 -0
  129. package/dist/modules/embed/embed.service.js +627 -0
  130. package/dist/modules/embed/embed.service.js.map +1 -0
  131. package/dist/modules/embed/embed.tools.d.ts +51 -0
  132. package/dist/modules/embed/embed.tools.d.ts.map +1 -0
  133. package/dist/modules/embed/embed.tools.js +170 -0
  134. package/dist/modules/embed/embed.tools.js.map +1 -0
  135. package/dist/modules/embed/mcp-app.d.ts +64 -0
  136. package/dist/modules/embed/mcp-app.d.ts.map +1 -0
  137. package/dist/modules/embed/mcp-app.js +147 -0
  138. package/dist/modules/embed/mcp-app.js.map +1 -0
  139. package/dist/modules/embed/mcp-app.routes.d.ts +21 -0
  140. package/dist/modules/embed/mcp-app.routes.d.ts.map +1 -0
  141. package/dist/modules/embed/mcp-app.routes.js +36 -0
  142. package/dist/modules/embed/mcp-app.routes.js.map +1 -0
  143. package/dist/modules/github-app/github-app.connection.d.ts +15 -0
  144. package/dist/modules/github-app/github-app.connection.d.ts.map +1 -1
  145. package/dist/modules/github-app/github-app.connection.js +34 -3
  146. package/dist/modules/github-app/github-app.connection.js.map +1 -1
  147. package/dist/modules/kb-fs/locking-filesystem.d.ts +65 -0
  148. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  149. package/dist/modules/kb-fs/locking-filesystem.js +300 -0
  150. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  151. package/dist/modules/kb-sync/kb-sync.interface.d.ts +5 -0
  152. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  153. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  154. package/dist/modules/kb-sync/kb-sync.service.js +6 -0
  155. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  156. package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
  157. package/dist/modules/mcp/mcp-auth.middleware.js +2 -1
  158. package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
  159. package/dist/modules/mcp/mcp.service.d.ts +57 -3
  160. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  161. package/dist/modules/mcp/mcp.service.js +177 -24
  162. package/dist/modules/mcp/mcp.service.js.map +1 -1
  163. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +24 -0
  164. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
  165. package/dist/modules/mcp/oauth/bevel-oauth-provider.js +32 -4
  166. package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
  167. package/dist/modules/mcp/tool-schema-guard.d.ts +105 -0
  168. package/dist/modules/mcp/tool-schema-guard.d.ts.map +1 -0
  169. package/dist/modules/mcp/tool-schema-guard.js +171 -0
  170. package/dist/modules/mcp/tool-schema-guard.js.map +1 -0
  171. package/dist/modules/onboarding/onboarding.contract.d.ts +80 -0
  172. package/dist/modules/onboarding/onboarding.contract.d.ts.map +1 -0
  173. package/dist/modules/onboarding/onboarding.contract.js +7 -0
  174. package/dist/modules/onboarding/onboarding.contract.js.map +1 -0
  175. package/dist/modules/onboarding/onboarding.routes.d.ts +18 -0
  176. package/dist/modules/onboarding/onboarding.routes.d.ts.map +1 -0
  177. package/dist/modules/onboarding/onboarding.routes.js +81 -0
  178. package/dist/modules/onboarding/onboarding.routes.js.map +1 -0
  179. package/dist/modules/onboarding/starter-pack.service.d.ts +213 -0
  180. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -0
  181. package/dist/modules/onboarding/starter-pack.service.js +492 -0
  182. package/dist/modules/onboarding/starter-pack.service.js.map +1 -0
  183. package/dist/modules/onboarding/starter-packs.d.ts +78 -0
  184. package/dist/modules/onboarding/starter-packs.d.ts.map +1 -0
  185. package/dist/modules/onboarding/starter-packs.js +156 -0
  186. package/dist/modules/onboarding/starter-packs.js.map +1 -0
  187. package/dist/modules/plugins/index.d.ts +1 -1
  188. package/dist/modules/plugins/index.d.ts.map +1 -1
  189. package/dist/modules/plugins/index.js +1 -1
  190. package/dist/modules/plugins/index.js.map +1 -1
  191. package/dist/modules/plugins/plugin-provision.service.d.ts +19 -0
  192. package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
  193. package/dist/modules/plugins/plugin-provision.service.js +18 -1
  194. package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
  195. package/dist/modules/plugins/plugins.routes.d.ts +0 -36
  196. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  197. package/dist/modules/plugins/plugins.routes.js +31 -0
  198. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  199. package/dist/modules/plugins/plugins.tools.d.ts +36 -2
  200. package/dist/modules/plugins/plugins.tools.d.ts.map +1 -1
  201. package/dist/modules/plugins/plugins.tools.js +71 -14
  202. package/dist/modules/plugins/plugins.tools.js.map +1 -1
  203. package/dist/modules/settings/deployment-settings.service.d.ts +34 -7
  204. package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
  205. package/dist/modules/settings/deployment-settings.service.js +148 -54
  206. package/dist/modules/settings/deployment-settings.service.js.map +1 -1
  207. package/dist/modules/settings/repository-source.d.ts +1 -0
  208. package/dist/modules/settings/repository-source.d.ts.map +1 -1
  209. package/dist/modules/settings/repository-source.js +3 -3
  210. package/dist/modules/settings/repository-source.js.map +1 -1
  211. package/dist/modules/settings/setup.routes.d.ts.map +1 -1
  212. package/dist/modules/settings/setup.routes.js +3 -6
  213. package/dist/modules/settings/setup.routes.js.map +1 -1
  214. package/dist/modules/skills/skills.tools.d.ts.map +1 -1
  215. package/dist/modules/skills/skills.tools.js +103 -43
  216. package/dist/modules/skills/skills.tools.js.map +1 -1
  217. package/dist/modules/tool-auth/connection-key-rejection.d.ts +10 -1
  218. package/dist/modules/tool-auth/connection-key-rejection.d.ts.map +1 -1
  219. package/dist/modules/tool-auth/connection-key-rejection.js +11 -3
  220. package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -1
  221. package/dist/modules/tool-auth/external-api-key.interface.d.ts +8 -0
  222. package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
  223. package/dist/modules/tool-auth/external-api-key.service.d.ts +24 -2
  224. package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
  225. package/dist/modules/tool-auth/external-api-key.service.js +59 -2
  226. package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
  227. package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
  228. package/dist/modules/tool-auth/tool-auth.middleware.js +9 -4
  229. package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
  230. package/dist/modules/tool-helpers/index.d.ts +28 -1
  231. package/dist/modules/tool-helpers/index.d.ts.map +1 -1
  232. package/dist/modules/tool-helpers/index.js +28 -1
  233. package/dist/modules/tool-helpers/index.js.map +1 -1
  234. package/dist/modules/tool-helpers/route-argument-check.d.ts +10 -0
  235. package/dist/modules/tool-helpers/route-argument-check.d.ts.map +1 -0
  236. package/dist/modules/tool-helpers/route-argument-check.js +132 -0
  237. package/dist/modules/tool-helpers/route-argument-check.js.map +1 -0
  238. package/dist/modules/tool-helpers/route-tool-schemas.d.ts +89 -0
  239. package/dist/modules/tool-helpers/route-tool-schemas.d.ts.map +1 -0
  240. package/dist/modules/tool-helpers/route-tool-schemas.js +113 -0
  241. package/dist/modules/tool-helpers/route-tool-schemas.js.map +1 -0
  242. package/dist/modules/tool-helpers/tool-def.d.ts +71 -0
  243. package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -1
  244. package/dist/modules/tool-helpers/tool-def.js +70 -6
  245. package/dist/modules/tool-helpers/tool-def.js.map +1 -1
  246. package/dist/modules/tool-helpers/tool-handler.d.ts +46 -6
  247. package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
  248. package/dist/modules/tool-helpers/tool-handler.js +157 -8
  249. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  250. package/dist/modules/tool-helpers/tool.contract.d.ts +9 -0
  251. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  252. package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
  253. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +23 -4
  254. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  255. package/dist/modules/tool-manuals/tool-manuals.contract.js.map +1 -1
  256. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +4 -0
  257. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  258. package/dist/modules/tool-manuals/tool-manuals.service.js +14 -0
  259. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  260. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +7 -0
  261. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  262. package/dist/modules/tool-manuals/tool-manuals.tools.js +77 -38
  263. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  264. package/dist/modules/tool-registry/description-length.d.ts +20 -16
  265. package/dist/modules/tool-registry/description-length.d.ts.map +1 -1
  266. package/dist/modules/tool-registry/description-length.js +50 -30
  267. package/dist/modules/tool-registry/description-length.js.map +1 -1
  268. package/dist/modules/tool-registry/guide-first.d.ts +27 -0
  269. package/dist/modules/tool-registry/guide-first.d.ts.map +1 -0
  270. package/dist/modules/tool-registry/guide-first.js +40 -0
  271. package/dist/modules/tool-registry/guide-first.js.map +1 -0
  272. package/dist/modules/tool-registry/tool-registry.d.ts +6 -0
  273. package/dist/modules/tool-registry/tool-registry.d.ts.map +1 -1
  274. package/dist/modules/tool-registry/tool-registry.js +9 -2
  275. package/dist/modules/tool-registry/tool-registry.js.map +1 -1
  276. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts +449 -0
  277. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +1 -0
  278. package/dist/modules/workflow/agent-tools/change-request-read-shape.js +481 -0
  279. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +1 -0
  280. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +126 -0
  281. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -0
  282. package/dist/modules/workflow/agent-tools/change-request-read.tools.js +611 -0
  283. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +1 -0
  284. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +12 -1
  285. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -1
  286. package/dist/modules/workflow/agent-tools/change-request-summary.js +5 -1
  287. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -1
  288. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +8 -1
  289. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
  290. package/dist/modules/workflow/agent-tools/workflow.tools.js +133 -37
  291. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
  292. package/dist/modules/workflow/file-lock.service.d.ts +29 -5
  293. package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
  294. package/dist/modules/workflow/file-lock.service.js +62 -5
  295. package/dist/modules/workflow/file-lock.service.js.map +1 -1
  296. package/dist/modules/workflow/git/git.service.d.ts +282 -14
  297. package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
  298. package/dist/modules/workflow/git/git.service.js +627 -126
  299. package/dist/modules/workflow/git/git.service.js.map +1 -1
  300. package/dist/modules/workflow/git/merge-commit.d.ts +73 -0
  301. package/dist/modules/workflow/git/merge-commit.d.ts.map +1 -0
  302. package/dist/modules/workflow/git/merge-commit.js +89 -0
  303. package/dist/modules/workflow/git/merge-commit.js.map +1 -0
  304. package/dist/modules/workflow/git/node-git-runner.d.ts +15 -0
  305. package/dist/modules/workflow/git/node-git-runner.d.ts.map +1 -1
  306. package/dist/modules/workflow/git/node-git-runner.js +78 -6
  307. package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
  308. package/dist/modules/workflow/git/pull-request.service.d.ts +94 -1
  309. package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
  310. package/dist/modules/workflow/git/pull-request.service.js +332 -37
  311. package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
  312. package/dist/modules/workflow/pending-commits.service.d.ts +15 -0
  313. package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
  314. package/dist/modules/workflow/pending-commits.service.js +25 -1
  315. package/dist/modules/workflow/pending-commits.service.js.map +1 -1
  316. package/dist/modules/workflow/pending-commits.worker.d.ts +6 -1
  317. package/dist/modules/workflow/pending-commits.worker.d.ts.map +1 -1
  318. package/dist/modules/workflow/pending-commits.worker.js +23 -6
  319. package/dist/modules/workflow/pending-commits.worker.js.map +1 -1
  320. package/dist/modules/workflow/recovery-bot.js +1 -1
  321. package/dist/modules/workflow/recovery-bot.js.map +1 -1
  322. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +35 -0
  323. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
  324. package/dist/modules/workflow/review-workflow/review-workflow.service.js +180 -13
  325. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
  326. package/dist/modules/workflow/sanitize-error.d.ts +16 -0
  327. package/dist/modules/workflow/sanitize-error.d.ts.map +1 -1
  328. package/dist/modules/workflow/sanitize-error.js +45 -0
  329. package/dist/modules/workflow/sanitize-error.js.map +1 -1
  330. package/dist/modules/workflow/workflow.routes.d.ts +6 -2
  331. package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
  332. package/dist/modules/workflow/workflow.routes.js +7 -2
  333. package/dist/modules/workflow/workflow.routes.js.map +1 -1
  334. package/dist/modules/workflow/workflow.service.d.ts +187 -15
  335. package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
  336. package/dist/modules/workflow/workflow.service.js +808 -106
  337. package/dist/modules/workflow/workflow.service.js.map +1 -1
  338. package/dist/modules/workspace/agent-download.builder.d.ts +105 -0
  339. package/dist/modules/workspace/agent-download.builder.d.ts.map +1 -0
  340. package/dist/modules/workspace/agent-download.builder.js +238 -0
  341. package/dist/modules/workspace/agent-download.builder.js.map +1 -0
  342. package/dist/modules/workspace/agent-download.routes.d.ts +77 -0
  343. package/dist/modules/workspace/agent-download.routes.d.ts.map +1 -0
  344. package/dist/modules/workspace/agent-download.routes.js +156 -0
  345. package/dist/modules/workspace/agent-download.routes.js.map +1 -0
  346. package/dist/modules/workspace/agent-download.store.d.ts +225 -0
  347. package/dist/modules/workspace/agent-download.store.d.ts.map +1 -0
  348. package/dist/modules/workspace/agent-download.store.js +423 -0
  349. package/dist/modules/workspace/agent-download.store.js.map +1 -0
  350. package/dist/modules/workspace/agent-upload.store.d.ts +10 -1
  351. package/dist/modules/workspace/agent-upload.store.d.ts.map +1 -1
  352. package/dist/modules/workspace/agent-upload.store.js +16 -6
  353. package/dist/modules/workspace/agent-upload.store.js.map +1 -1
  354. package/dist/modules/workspace/file-readers/raw-mime.d.ts +6 -0
  355. package/dist/modules/workspace/file-readers/raw-mime.d.ts.map +1 -0
  356. package/dist/modules/workspace/file-readers/raw-mime.js +38 -0
  357. package/dist/modules/workspace/file-readers/raw-mime.js.map +1 -0
  358. package/dist/modules/workspace/file-readers/text-reader.d.ts +5 -5
  359. package/dist/modules/workspace/file-readers/text-reader.d.ts.map +1 -1
  360. package/dist/modules/workspace/file-readers/text-reader.js +5 -8
  361. package/dist/modules/workspace/file-readers/text-reader.js.map +1 -1
  362. package/dist/modules/workspace/first-run.d.ts +111 -0
  363. package/dist/modules/workspace/first-run.d.ts.map +1 -0
  364. package/dist/modules/workspace/first-run.js +181 -0
  365. package/dist/modules/workspace/first-run.js.map +1 -0
  366. package/dist/modules/workspace/move-links.d.ts +92 -0
  367. package/dist/modules/workspace/move-links.d.ts.map +1 -0
  368. package/dist/modules/workspace/move-links.js +173 -0
  369. package/dist/modules/workspace/move-links.js.map +1 -0
  370. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  371. package/dist/modules/workspace/startup/steps/seed-tree.js +24 -39
  372. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  373. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +58 -52
  374. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  375. package/dist/modules/workspace/startup/steps/template-files.step.js +209 -223
  376. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  377. package/dist/modules/workspace/startup/steps/template-source.d.ts +5 -3
  378. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  379. package/dist/modules/workspace/startup/steps/template-source.js +5 -3
  380. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  381. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  382. package/dist/modules/workspace/workspace.routes.js +63 -22
  383. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  384. package/dist/modules/workspace/workspace.service.d.ts +75 -2
  385. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  386. package/dist/modules/workspace/workspace.service.js +197 -24
  387. package/dist/modules/workspace/workspace.service.js.map +1 -1
  388. package/dist/modules/workspace/workspace.tools.d.ts +68 -1
  389. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  390. package/dist/modules/workspace/workspace.tools.js +642 -71
  391. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  392. package/dist/modules/write-access/write-access.d.ts.map +1 -1
  393. package/dist/modules/write-access/write-access.js +9 -0
  394. package/dist/modules/write-access/write-access.js.map +1 -1
  395. package/dist/shared/domain-errors.d.ts +84 -1
  396. package/dist/shared/domain-errors.d.ts.map +1 -1
  397. package/dist/shared/domain-errors.js +100 -12
  398. package/dist/shared/domain-errors.js.map +1 -1
  399. package/dist/shared/git.contract.d.ts +10 -1
  400. package/dist/shared/git.contract.d.ts.map +1 -1
  401. package/dist/shared/git.contract.js.map +1 -1
  402. package/dist/shared/hidden-tools.d.ts +44 -0
  403. package/dist/shared/hidden-tools.d.ts.map +1 -0
  404. package/dist/shared/hidden-tools.js +13 -0
  405. package/dist/shared/hidden-tools.js.map +1 -0
  406. package/dist/shared/utf8-text.d.ts +15 -0
  407. package/dist/shared/utf8-text.d.ts.map +1 -0
  408. package/dist/shared/utf8-text.js +20 -0
  409. package/dist/shared/utf8-text.js.map +1 -0
  410. package/dist/tenancy/static-tenant-source.d.ts +2 -1
  411. package/dist/tenancy/static-tenant-source.d.ts.map +1 -1
  412. package/dist/tenancy/static-tenant-source.js +9 -2
  413. package/dist/tenancy/static-tenant-source.js.map +1 -1
  414. package/kb-template/.bevelignore +0 -5
  415. package/mcp-app/page.html +349 -0
  416. package/migrations/0017_atlassian_account_links.sql +37 -0
  417. package/migrations/meta/0017_snapshot.json +2396 -0
  418. package/migrations/meta/_journal.json +8 -1
  419. package/package.json +6 -3
  420. package/src/__tests__/kb-layout-config.test.ts +10 -100
  421. package/src/__tests__/packaged-assets-ship.test.ts +66 -0
  422. package/src/assets.ts +38 -2
  423. package/src/core/__tests__/catalog-revision.test.ts +40 -0
  424. package/src/core/__tests__/gated-boot.test.ts +1 -0
  425. package/src/core/__tests__/lifecycle.test.ts +14 -0
  426. package/src/core/catalog-revision.ts +15 -2
  427. package/src/core/core-ports.ts +11 -0
  428. package/src/core/create-core-server.ts +78 -3
  429. package/src/core/create-core-services.ts +168 -10
  430. package/src/core/lifecycle.ts +28 -2
  431. package/src/core-config.ts +24 -1
  432. package/src/index.ts +2 -2
  433. package/src/modules/access/__tests__/access-control.atref-batch.test.ts +58 -0
  434. package/src/modules/access/__tests__/access-control.platform-restore.test.ts +8 -7
  435. package/src/modules/access/__tests__/access-control.service.test.ts +19 -0
  436. package/src/modules/access/__tests__/access-personal-plugin.test.ts +1 -18
  437. package/src/modules/access/access-control.interface.ts +28 -0
  438. package/src/modules/access/access-control.service.ts +37 -0
  439. package/src/modules/access/directory-sync-bot.ts +1 -1
  440. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +386 -0
  441. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +207 -0
  442. package/src/modules/agent-guide/agent-guide.tools.ts +122 -0
  443. package/src/modules/agent-guide/agent-guide.ts +300 -0
  444. package/src/modules/agent-guide/index.ts +22 -0
  445. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +39 -118
  446. package/src/modules/agent-instructions/agent-instructions.routes.ts +3 -2
  447. package/src/modules/agent-instructions/compose.ts +26 -8
  448. package/src/modules/agent-instructions/index.ts +0 -3
  449. package/src/modules/agent-instructions/shared-file-rules.ts +50 -112
  450. package/src/modules/audit/__tests__/agent-audit.service.test.ts +64 -4
  451. package/src/modules/audit/__tests__/agent-connection.routes.test.ts +102 -0
  452. package/src/modules/audit/agent-audit.service.ts +58 -3
  453. package/src/modules/audit/agent-connection.routes.ts +56 -0
  454. package/src/modules/audit/audit.contract.ts +26 -0
  455. package/src/modules/audit/index.ts +1 -0
  456. package/src/modules/auth/__tests__/account.routes.test.ts +5 -3
  457. package/src/modules/auth/account.routes.ts +10 -3
  458. package/src/modules/auth/auth.middleware.ts +1 -1
  459. package/src/modules/code-mode/__tests__/code-mode.tool.test.ts +18 -2
  460. package/src/modules/code-mode/code-mode.tool.ts +13 -2
  461. package/src/modules/database/core-schema.ts +33 -3
  462. package/src/modules/embed/__tests__/account-links.migration.test.ts +98 -0
  463. package/src/modules/embed/__tests__/embed-link.test.ts +122 -0
  464. package/src/modules/embed/__tests__/embed.routes.test.ts +362 -0
  465. package/src/modules/embed/__tests__/embed.service.lock.test.ts +193 -0
  466. package/src/modules/embed/__tests__/embed.service.test.ts +805 -0
  467. package/src/modules/embed/__tests__/embed.tools.test.ts +304 -0
  468. package/src/modules/embed/__tests__/mcp-app.test.ts +207 -0
  469. package/src/modules/embed/account-link.service.ts +76 -0
  470. package/src/modules/embed/embed-link.ts +180 -0
  471. package/src/modules/embed/embed.errors.ts +43 -0
  472. package/src/modules/embed/embed.interface.ts +203 -0
  473. package/src/modules/embed/embed.routes.ts +363 -0
  474. package/src/modules/embed/embed.service.ts +705 -0
  475. package/src/modules/embed/embed.tools.ts +206 -0
  476. package/src/modules/embed/mcp-app.routes.ts +41 -0
  477. package/src/modules/embed/mcp-app.ts +173 -0
  478. package/src/modules/github-app/__tests__/github-app.test.ts +76 -0
  479. package/src/modules/github-app/github-app.connection.ts +38 -4
  480. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +304 -0
  481. package/src/modules/kb-fs/locking-filesystem.ts +287 -0
  482. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +35 -0
  483. package/src/modules/kb-sync/kb-sync.interface.ts +2 -0
  484. package/src/modules/kb-sync/kb-sync.service.ts +6 -0
  485. package/src/modules/mcp/__tests__/bevel-oauth-provider.test.ts +68 -11
  486. package/src/modules/mcp/__tests__/fake-downstream-mcp-server.ts +14 -3
  487. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +37 -2
  488. package/src/modules/mcp/__tests__/mcp.app.e2e.test.ts +200 -0
  489. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +252 -0
  490. package/src/modules/mcp/__tests__/mcp.service.test.ts +42 -24
  491. package/src/modules/mcp/__tests__/tool-call-interface.e2e.test.ts +499 -0
  492. package/src/modules/mcp/__tests__/tool-schema-guard.test.ts +266 -0
  493. package/src/modules/mcp/mcp-auth.middleware.ts +2 -1
  494. package/src/modules/mcp/mcp.service.ts +218 -31
  495. package/src/modules/mcp/oauth/bevel-oauth-provider.ts +42 -4
  496. package/src/modules/mcp/tool-schema-guard.ts +196 -0
  497. package/src/modules/onboarding/__tests__/onboarding.routes.test.ts +163 -0
  498. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +635 -0
  499. package/src/modules/onboarding/__tests__/starter-packs.test.ts +169 -0
  500. package/src/modules/onboarding/onboarding.contract.ts +85 -0
  501. package/src/modules/onboarding/onboarding.routes.ts +85 -0
  502. package/src/modules/onboarding/starter-pack.service.ts +580 -0
  503. package/src/modules/onboarding/starter-packs.ts +182 -0
  504. package/src/modules/plugins/__tests__/plugins.tools.test.ts +177 -4
  505. package/src/modules/plugins/index.ts +1 -0
  506. package/src/modules/plugins/plugin-provision.service.ts +22 -1
  507. package/src/modules/plugins/plugins.routes.ts +29 -0
  508. package/src/modules/plugins/plugins.tools.ts +75 -15
  509. package/src/modules/settings/__tests__/deployment-settings.service.test.ts +176 -56
  510. package/src/modules/settings/__tests__/repository-source.test.ts +9 -0
  511. package/src/modules/settings/deployment-settings.service.ts +144 -55
  512. package/src/modules/settings/repository-source.ts +4 -4
  513. package/src/modules/settings/setup.routes.ts +3 -6
  514. package/src/modules/skills/__tests__/skills.tools.description.test.ts +95 -0
  515. package/src/modules/skills/skills.tools.ts +112 -46
  516. package/src/modules/tool-auth/__tests__/connection-key-rejection.test.ts +32 -0
  517. package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +65 -0
  518. package/src/modules/tool-auth/connection-key-rejection.ts +13 -3
  519. package/src/modules/tool-auth/external-api-key.interface.ts +9 -0
  520. package/src/modules/tool-auth/external-api-key.service.ts +61 -4
  521. package/src/modules/tool-auth/tool-auth.middleware.ts +13 -4
  522. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +502 -0
  523. package/src/modules/tool-helpers/__tests__/route-argument-check.test.ts +337 -0
  524. package/src/modules/tool-helpers/index.ts +34 -1
  525. package/src/modules/tool-helpers/route-argument-check.ts +149 -0
  526. package/src/modules/tool-helpers/route-tool-schemas.ts +171 -0
  527. package/src/modules/tool-helpers/tool-def.ts +132 -7
  528. package/src/modules/tool-helpers/tool-handler.ts +196 -8
  529. package/src/modules/tool-helpers/tool.contract.ts +9 -0
  530. package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +57 -0
  531. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +73 -4
  532. package/src/modules/tool-manuals/tool-manuals.contract.ts +24 -4
  533. package/src/modules/tool-manuals/tool-manuals.service.ts +17 -0
  534. package/src/modules/tool-manuals/tool-manuals.tools.ts +86 -38
  535. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +173 -0
  536. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +81 -66
  537. package/src/modules/tool-registry/description-length.ts +57 -32
  538. package/src/modules/tool-registry/guide-first.ts +41 -0
  539. package/src/modules/tool-registry/tool-registry.ts +9 -2
  540. package/src/modules/workflow/__tests__/apply-failure.test.ts +6 -1
  541. package/src/modules/workflow/__tests__/file-lock.service.deletion-gate.test.ts +104 -0
  542. package/src/modules/workflow/__tests__/pending-commits.repository-replaced.test.ts +66 -0
  543. package/src/modules/workflow/__tests__/pending-commits.worker.test.ts +31 -2
  544. package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +110 -6
  545. package/src/modules/workflow/__tests__/sanitize-error.test.ts +89 -1
  546. package/src/modules/workflow/__tests__/workflow.routes.push-refused.test.ts +202 -0
  547. package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +6 -6
  548. package/src/modules/workflow/__tests__/workflow.service.delete-branch.test.ts +1026 -0
  549. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +468 -10
  550. package/src/modules/workflow/__tests__/workflow.service.folder-proposals.test.ts +4 -0
  551. package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +5 -4
  552. package/src/modules/workflow/__tests__/workflow.service.update-from-target.test.ts +54 -2
  553. package/src/modules/workflow/agent-tools/__tests__/change-request-read-shape.test.ts +705 -0
  554. package/src/modules/workflow/agent-tools/__tests__/change-request-read.tools.test.ts +1554 -0
  555. package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +150 -4
  556. package/src/modules/workflow/agent-tools/change-request-read-shape.ts +712 -0
  557. package/src/modules/workflow/agent-tools/change-request-read.tools.ts +759 -0
  558. package/src/modules/workflow/agent-tools/change-request-summary.ts +5 -1
  559. package/src/modules/workflow/agent-tools/workflow.tools.ts +137 -35
  560. package/src/modules/workflow/file-lock.service.ts +67 -5
  561. package/src/modules/workflow/git/__tests__/git.service.appliedChange.test.ts +285 -0
  562. package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +124 -0
  563. package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +164 -0
  564. package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +334 -0
  565. package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +48 -1
  566. package/src/modules/workflow/git/__tests__/node-git-runner.test.ts +231 -2
  567. package/src/modules/workflow/git/__tests__/pull-request.service.list-fetch.test.ts +72 -2
  568. package/src/modules/workflow/git/__tests__/pull-request.service.placeholder.test.ts +24 -2
  569. package/src/modules/workflow/git/__tests__/pull-request.service.test.ts +620 -1
  570. package/src/modules/workflow/git/git.service.ts +714 -133
  571. package/src/modules/workflow/git/merge-commit.ts +88 -0
  572. package/src/modules/workflow/git/node-git-runner.ts +82 -7
  573. package/src/modules/workflow/git/pull-request.service.ts +380 -54
  574. package/src/modules/workflow/pending-commits.service.ts +29 -1
  575. package/src/modules/workflow/pending-commits.worker.ts +24 -6
  576. package/src/modules/workflow/recovery-bot.ts +1 -1
  577. package/src/modules/workflow/review-workflow/__tests__/approval-states.test.ts +7 -1
  578. package/src/modules/workflow/review-workflow/__tests__/merge-records-own-commit.test.ts +407 -0
  579. package/src/modules/workflow/review-workflow/review-workflow.service.ts +191 -12
  580. package/src/modules/workflow/sanitize-error.ts +50 -0
  581. package/src/modules/workflow/workflow.routes.ts +7 -2
  582. package/src/modules/workflow/workflow.service.ts +886 -112
  583. package/src/modules/workspace/__tests__/agent-downloads.test.ts +823 -0
  584. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +4 -3
  585. package/src/modules/workspace/__tests__/first-run.test.ts +234 -0
  586. package/src/modules/workspace/__tests__/git-internals.security.test.ts +5 -2
  587. package/src/modules/workspace/__tests__/md-links.test.ts +353 -0
  588. package/src/modules/workspace/__tests__/move-links.test.ts +261 -0
  589. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +219 -0
  590. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -0
  591. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +102 -0
  592. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +52 -5
  593. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +190 -0
  594. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +21 -10
  595. package/src/modules/workspace/__tests__/workspace.service.forget-clone-races.test.ts +8 -4
  596. package/src/modules/workspace/__tests__/workspace.service.test.ts +50 -8
  597. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +33 -55
  598. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +44 -1
  599. package/src/modules/workspace/__tests__/workspace.tools.test.ts +664 -34
  600. package/src/modules/workspace/agent-download.builder.ts +308 -0
  601. package/src/modules/workspace/agent-download.routes.ts +183 -0
  602. package/src/modules/workspace/agent-download.store.ts +533 -0
  603. package/src/modules/workspace/agent-upload.store.ts +23 -7
  604. package/src/modules/workspace/file-readers/raw-mime.ts +40 -0
  605. package/src/modules/workspace/file-readers/text-reader.ts +5 -8
  606. package/src/modules/workspace/first-run.ts +222 -0
  607. package/src/modules/workspace/move-links.ts +237 -0
  608. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +191 -489
  609. package/src/modules/workspace/startup/steps/seed-tree.ts +23 -38
  610. package/src/modules/workspace/startup/steps/template-files.step.ts +217 -249
  611. package/src/modules/workspace/startup/steps/template-source.ts +5 -3
  612. package/src/modules/workspace/workspace.routes.ts +64 -22
  613. package/src/modules/workspace/workspace.service.ts +202 -25
  614. package/src/modules/workspace/workspace.tools.ts +707 -68
  615. package/src/modules/write-access/__tests__/write-access.test.ts +13 -0
  616. package/src/modules/write-access/write-access.ts +9 -0
  617. package/src/shared/domain-errors.ts +123 -11
  618. package/src/shared/git.contract.ts +8 -1
  619. package/src/shared/hidden-tools.ts +45 -0
  620. package/src/shared/utf8-text.ts +21 -0
  621. package/src/tenancy/__tests__/static-tenant-source.test.ts +1 -0
  622. package/src/tenancy/static-tenant-source.ts +10 -2
  623. package/starter-packs/README.md +103 -0
  624. package/starter-packs/engineering/KnowledgeBase/About us.md +9 -0
  625. package/starter-packs/engineering/KnowledgeBase/Architecture.md +9 -0
  626. package/starter-packs/engineering/KnowledgeBase/Glossary.md +9 -0
  627. package/starter-packs/engineering/KnowledgeBase/How we ship.md +9 -0
  628. package/starter-packs/engineering/Plugins/engineering-starter/LICENSE +21 -0
  629. package/starter-packs/engineering/Plugins/engineering-starter/SOURCE.md +20 -0
  630. package/starter-packs/engineering/Plugins/engineering-starter/access.md +19 -0
  631. package/starter-packs/engineering/Plugins/engineering-starter/plugin.json +10 -0
  632. package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/SKILL.md +171 -0
  633. package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/sections/phase-2a-startup-diagnostic.md +157 -0
  634. package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/sections/phase-2b-builder-brainstorm.md +39 -0
  635. package/starter-packs/engineering/Plugins/engineering-starter/skills/plan-ceo-review/SKILL.md +144 -0
  636. package/starter-packs/engineering/Plugins/engineering-starter/skills/plan-eng-review/SKILL.md +144 -0
  637. package/starter-packs/engineering/Plugins/engineering-starter/skills/review/SKILL.md +80 -0
  638. package/starter-packs/engineering/Plugins/engineering-starter/skills/review/checklist.md +184 -0
  639. package/starter-packs/engineering/pack.yaml +11 -0
  640. package/starter-packs/general/KnowledgeBase/About us.md +9 -0
  641. package/starter-packs/general/KnowledgeBase/Glossary.md +9 -0
  642. package/starter-packs/general/KnowledgeBase/How we work.md +9 -0
  643. package/starter-packs/general/Plugins/general-starter/LICENSE +202 -0
  644. package/starter-packs/general/Plugins/general-starter/SOURCE.md +10 -0
  645. package/starter-packs/general/Plugins/general-starter/access.md +19 -0
  646. package/starter-packs/general/Plugins/general-starter/plugin.json +10 -0
  647. package/starter-packs/general/Plugins/general-starter/skills/memory-management/SKILL.md +332 -0
  648. package/starter-packs/general/Plugins/general-starter/skills/productivity-start/SKILL.md +163 -0
  649. package/starter-packs/general/Plugins/general-starter/skills/productivity-update/SKILL.md +167 -0
  650. package/starter-packs/general/Plugins/general-starter/skills/task-management/SKILL.md +83 -0
  651. package/starter-packs/general/pack.yaml +10 -0
  652. package/starter-packs/operations/KnowledgeBase/Glossary.md +9 -0
  653. package/starter-packs/operations/KnowledgeBase/How we work.md +9 -0
  654. package/starter-packs/operations/KnowledgeBase/Processes.md +9 -0
  655. package/starter-packs/operations/KnowledgeBase/Tools we use.md +9 -0
  656. package/starter-packs/operations/KnowledgeBase/Vendors.md +9 -0
  657. package/starter-packs/operations/Plugins/operations-starter/LICENSE +202 -0
  658. package/starter-packs/operations/Plugins/operations-starter/SOURCE.md +10 -0
  659. package/starter-packs/operations/Plugins/operations-starter/access.md +19 -0
  660. package/starter-packs/operations/Plugins/operations-starter/plugin.json +10 -0
  661. package/starter-packs/operations/Plugins/operations-starter/skills/capacity-plan/SKILL.md +111 -0
  662. package/starter-packs/operations/Plugins/operations-starter/skills/change-request/SKILL.md +119 -0
  663. package/starter-packs/operations/Plugins/operations-starter/skills/compliance-tracking/SKILL.md +44 -0
  664. package/starter-packs/operations/Plugins/operations-starter/skills/process-doc/SKILL.md +80 -0
  665. package/starter-packs/operations/Plugins/operations-starter/skills/process-optimization/SKILL.md +39 -0
  666. package/starter-packs/operations/Plugins/operations-starter/skills/risk-assessment/SKILL.md +40 -0
  667. package/starter-packs/operations/Plugins/operations-starter/skills/runbook/SKILL.md +85 -0
  668. package/starter-packs/operations/Plugins/operations-starter/skills/status-report/SKILL.md +75 -0
  669. package/starter-packs/operations/Plugins/operations-starter/skills/vendor-review/SKILL.md +102 -0
  670. package/starter-packs/operations/pack.yaml +12 -0
  671. package/starter-packs/sales/KnowledgeBase/About us.md +9 -0
  672. package/starter-packs/sales/KnowledgeBase/Customers.md +9 -0
  673. package/starter-packs/sales/KnowledgeBase/Glossary.md +9 -0
  674. package/starter-packs/sales/KnowledgeBase/How we sell.md +9 -0
  675. package/starter-packs/sales/KnowledgeBase/Objections.md +9 -0
  676. package/starter-packs/sales/KnowledgeBase/Pricing.md +9 -0
  677. package/starter-packs/sales/Plugins/sales-starter/LICENSE +202 -0
  678. package/starter-packs/sales/Plugins/sales-starter/SOURCE.md +10 -0
  679. package/starter-packs/sales/Plugins/sales-starter/access.md +19 -0
  680. package/starter-packs/sales/Plugins/sales-starter/plugin.json +10 -0
  681. package/starter-packs/sales/Plugins/sales-starter/skills/account-context/SKILL.md +94 -0
  682. package/starter-packs/sales/Plugins/sales-starter/skills/account-plan/SKILL.md +95 -0
  683. package/starter-packs/sales/Plugins/sales-starter/skills/account-research/SKILL.md +99 -0
  684. package/starter-packs/sales/Plugins/sales-starter/skills/account-tiering/SKILL.md +101 -0
  685. package/starter-packs/sales/Plugins/sales-starter/skills/call-prep/SKILL.md +111 -0
  686. package/starter-packs/sales/Plugins/sales-starter/skills/call-summary/SKILL.md +111 -0
  687. package/starter-packs/sales/Plugins/sales-starter/skills/close-plan/SKILL.md +106 -0
  688. package/starter-packs/sales/Plugins/sales-starter/skills/competitive-intelligence/SKILL.md +102 -0
  689. package/starter-packs/sales/Plugins/sales-starter/skills/create-an-asset/SKILL.md +105 -0
  690. package/starter-packs/sales/Plugins/sales-starter/skills/crm-hygiene-check/SKILL.md +103 -0
  691. package/starter-packs/sales/Plugins/sales-starter/skills/customer-health/SKILL.md +108 -0
  692. package/starter-packs/sales/Plugins/sales-starter/skills/customer-voice/SKILL.md +94 -0
  693. package/starter-packs/sales/Plugins/sales-starter/skills/daily-briefing/SKILL.md +61 -0
  694. package/starter-packs/sales/Plugins/sales-starter/skills/deal-advance-gap/SKILL.md +102 -0
  695. package/starter-packs/sales/Plugins/sales-starter/skills/deal-review/SKILL.md +105 -0
  696. package/starter-packs/sales/Plugins/sales-starter/skills/deal-signals/SKILL.md +96 -0
  697. package/starter-packs/sales/Plugins/sales-starter/skills/deal-slip-scenario/SKILL.md +104 -0
  698. package/starter-packs/sales/Plugins/sales-starter/skills/draft-outreach/SKILL.md +116 -0
  699. package/starter-packs/sales/Plugins/sales-starter/skills/end-of-day/SKILL.md +114 -0
  700. package/starter-packs/sales/Plugins/sales-starter/skills/expansion-whitespace/SKILL.md +97 -0
  701. package/starter-packs/sales/Plugins/sales-starter/skills/forecast/SKILL.md +100 -0
  702. package/starter-packs/sales/Plugins/sales-starter/skills/handle-objection/SKILL.md +93 -0
  703. package/starter-packs/sales/Plugins/sales-starter/skills/inbox-sweep/SKILL.md +114 -0
  704. package/starter-packs/sales/Plugins/sales-starter/skills/lead-triage/SKILL.md +106 -0
  705. package/starter-packs/sales/Plugins/sales-starter/skills/log-activity/SKILL.md +111 -0
  706. package/starter-packs/sales/Plugins/sales-starter/skills/pipeline-review/SKILL.md +97 -0
  707. package/starter-packs/sales/Plugins/sales-starter/skills/renewal-radar/SKILL.md +95 -0
  708. package/starter-packs/sales/Plugins/sales-starter/skills/rep-context/SKILL.md +90 -0
  709. package/starter-packs/sales/Plugins/sales-starter/skills/route-lead/SKILL.md +111 -0
  710. package/starter-packs/sales/Plugins/sales-starter/skills/sales-setup/SKILL.md +200 -0
  711. package/starter-packs/sales/Plugins/sales-starter/skills/schedule-meeting/SKILL.md +99 -0
  712. package/starter-packs/sales/Plugins/sales-starter/skills/stakeholder-map/SKILL.md +107 -0
  713. package/starter-packs/sales/Plugins/sales-starter/skills/team-pipeline/SKILL.md +105 -0
  714. package/starter-packs/sales/Plugins/sales-starter/skills/update-opportunity/SKILL.md +112 -0
  715. package/starter-packs/sales/Plugins/sales-starter/skills/weekly-wrap/SKILL.md +90 -0
  716. package/starter-packs/sales/Plugins/sales-starter/skills/win-loss-review/SKILL.md +88 -0
  717. package/starter-packs/sales/pack.yaml +13 -0
  718. package/starter-packs/support/KnowledgeBase/Escalations.md +9 -0
  719. package/starter-packs/support/KnowledgeBase/Glossary.md +9 -0
  720. package/starter-packs/support/KnowledgeBase/Known issues.md +9 -0
  721. package/starter-packs/support/KnowledgeBase/Products.md +9 -0
  722. package/starter-packs/support/KnowledgeBase/Tone of voice.md +9 -0
  723. package/starter-packs/support/Plugins/support-starter/LICENSE +202 -0
  724. package/starter-packs/support/Plugins/support-starter/SOURCE.md +10 -0
  725. package/starter-packs/support/Plugins/support-starter/access.md +19 -0
  726. package/starter-packs/support/Plugins/support-starter/plugin.json +10 -0
  727. package/starter-packs/support/Plugins/support-starter/skills/customer-escalation/SKILL.md +246 -0
  728. package/starter-packs/support/Plugins/support-starter/skills/customer-research/SKILL.md +250 -0
  729. package/starter-packs/support/Plugins/support-starter/skills/draft-response/SKILL.md +416 -0
  730. package/starter-packs/support/Plugins/support-starter/skills/kb-article/SKILL.md +350 -0
  731. package/starter-packs/support/Plugins/support-starter/skills/ticket-triage/SKILL.md +273 -0
  732. package/starter-packs/support/pack.yaml +12 -0
  733. package/kb-template/AGENTS.md +0 -730
@@ -1,12 +1,20 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import { LEGACY_AGENTS_FILE, agentsFilePointerSentence, gitignoreLiteral, mentionsAgentsFile, retargetAgentsFilePointer, validateKbRootName, } from '@bevel-software/platform-shared';
3
+ import { LEGACY_AGENTS_FILE, validateKbRootName, } from '@bevel-software/platform-shared';
4
4
  import { IGNORE_FILENAME, isAbsence } from '../../../../shared/fs.contract.js';
5
5
  import { PREAMBLE_FILE } from '../../../agent-instructions/compose.js';
6
+ import { isManagedGuide } from '../../../agent-guide/agent-guide.js';
6
7
  import { TemplateSource } from './template-source.js';
7
8
  import { hasGitInternalsSegment } from '../../../../shared/git-internals.js';
9
+ export { isManagedGuide };
8
10
  /** Root-anchored so a knowledge folder may still contain an ordinary namesake. */
9
11
  const PREAMBLE_IGNORE_PATTERN = `/${PREAMBLE_FILE}`;
12
+ /**
13
+ * The guide's name before it was `AGENTS.md`, back when it was a file. A copy
14
+ * the platform wrote under it is taken out of the repository like one under
15
+ * the current name (see {@link TemplateFilesStep.retireGuideCopies}).
16
+ */
17
+ const PRE_RENAME_AGENTS_FILE = 'CLAUDE.md';
10
18
  /**
11
19
  * The **required scaffolding** — the minimum an operational KB needs. Any of
12
20
  * these missing from a protected branch are added at the startup phase; the
@@ -22,16 +30,14 @@ const PREAMBLE_IGNORE_PATTERN = `/${PREAMBLE_FILE}`;
22
30
  *
23
31
  * `roles.yaml` is in neither, and is not part of the template at all: it is
24
32
  * generated from `ADMIN_EMAIL` (see roles-yaml.step.ts), so a repo can't be
25
- * seeded with a stale hard-coded Admin list.
33
+ * seeded with a stale hard-coded Admin list. The agent guide is in neither
34
+ * either, any more: it is served from code (see modules/agent-guide), and the
35
+ * copies earlier releases wrote are REMOVED here, not refreshed.
26
36
  */
27
- export function requiredFiles(layout) {
37
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- the list is a function of the layout to its callers, though no name in it is configurable today
38
+ export function requiredFiles(_layout) {
28
39
  return [
29
40
  'access.md',
30
- // The managed agent guide, under whatever this deployment calls it. The
31
- // PACKAGED template still carries it as `AGENTS.md` — one file, one
32
- // spelling in the tarball — so the write target and the template source
33
- // part company here and nowhere else (see {@link templateNameOf}).
34
- layout.agentsFile,
35
41
  '.bevelignore',
36
42
  '.gitignore',
37
43
  // The deployment preamble every connected agent is told at session start
@@ -41,30 +47,6 @@ export function requiredFiles(layout) {
41
47
  PREAMBLE_FILE,
42
48
  ];
43
49
  }
44
- /**
45
- * The template's own name for a required file. The guide is the one file whose
46
- * name on disk is a deployment's choice while its name in the template is
47
- * fixed; everything else is spelled the same on both sides.
48
- */
49
- function templateNameOf(repoRel, agentsFile) {
50
- return repoRel === agentsFile ? LEGACY_AGENTS_FILE : repoRel;
51
- }
52
- /**
53
- * The sentence the managed guide carries about itself, and the ONLY thing that
54
- * makes a root `AGENTS.md` provably the platform's rather than the customer's.
55
- *
56
- * Matched on this one phrase rather than on the whole header: the lines around
57
- * it have changed between releases (they name the configured file now), and a
58
- * knowledge base seeded by any of those releases is still ours to remove. A
59
- * customer file would have to quote the platform's own claim about itself
60
- * verbatim to be mistaken for one, and the consequence of the mistake is a
61
- * deletion — which is why nothing looser will do.
62
- */
63
- const MANAGED_GUIDE_MARKER = '**This file is managed by the platform.**';
64
- /** Whether `text` is a copy of the platform's managed guide, of any vintage. */
65
- export function isManagedGuide(text) {
66
- return text.includes(MANAGED_GUIDE_MARKER);
67
- }
68
50
  /**
69
51
  * Repo-root files the startup phase GENERATES rather than copies — today just
70
52
  * `roles.yaml`, rendered from `ADMIN_EMAIL` (see roles-yaml.step.ts and
@@ -139,13 +121,16 @@ export function reservedRootDirs(extraRootDirs, layout) {
139
121
  }
140
122
  /**
141
123
  * The template top-up as an {@link OnServerStart} step: add any missing base
142
- * scaffolding to every PROTECTED branch, and keep the managed agent guide
143
- * current — under whatever this deployment calls it, and taking its own
144
- * stale `AGENTS.md` with it when that name was handed back to the customer. Drafts are deliberately out of scope — whatever the protected
145
- * branches gain, drafts fork from; a scaffolding addition on a draft would
146
- * surface as noise in its change request's diff. (Unlike the Groups→Plugins
147
- * rename, a missing file diffs as one file, not the whole tree — so the
148
- * uniform-application argument does not bite here.)
124
+ * scaffolding to every PROTECTED branch, and take the agent guide copies
125
+ * earlier releases wrote OUT of them — the guide is served from code now, and
126
+ * a copy left on disk would be read as the organisation's own conventions
127
+ * file, stale and under a header that says the platform owns it. Drafts are
128
+ * deliberately out of scope — whatever the protected branches gain, drafts
129
+ * fork from; a scaffolding addition on a draft would surface as noise in its
130
+ * change request's diff. (Unlike the Groups→Plugins rename, a missing file
131
+ * diffs as one file, not the whole tree — so the uniform-application argument
132
+ * does not bite here. A stale guide copy on a draft is recognised by its
133
+ * header and never served, see `modules/agent-guide`.)
149
134
  *
150
135
  * Everything is DECLARED on the branch handle; reads go against the pre-step
151
136
  * tree via `repoDir()`. Fail-open behavior from the lazy top-up (best-effort,
@@ -157,7 +142,6 @@ export class TemplateFilesStep {
157
142
  disk;
158
143
  kb;
159
144
  extraRootDirs;
160
- agentsFileLink;
161
145
  name = 'template-files';
162
146
  /**
163
147
  * @param extraRootDirs Additional root folders this distribution reserves,
@@ -166,23 +150,16 @@ export class TemplateFilesStep {
166
150
  * claim a root without also shipping a template entry
167
151
  * for it.
168
152
  */
169
- /**
170
- * @param agentsFileLink Whether to keep the platform's pointer sentence in a
171
- * customer-owned root `AGENTS.md` — a GETTER, because
172
- * the setting behind it may be saved by the very
173
- * first-run save that then runs this phase.
174
- */
175
153
  constructor(disk,
176
154
  /**
177
155
  * Read per run, never captured: the save that completes first-run setup
178
156
  * applies the admin's names after this step was built. A snapshot taken
179
157
  * here scaffolded `Skills/` beside the `skills/` they had just chosen.
180
158
  */
181
- kb, extraRootDirs = [], agentsFileLink = () => true) {
159
+ kb, extraRootDirs = []) {
182
160
  this.disk = disk;
183
161
  this.kb = kb;
184
162
  this.extraRootDirs = extraRootDirs;
185
- this.agentsFileLink = agentsFileLink;
186
163
  // Validated NOW, so a bad extra fails at boot beside the rest of the
187
164
  // wiring — but the list itself is NOT kept, for the reason `kb` says.
188
165
  reservedRootDirs(extraRootDirs, kb.layout);
@@ -203,8 +180,6 @@ export class TemplateFilesStep {
203
180
  // Read ONCE per branch: a value re-read between the write and the ignore
204
181
  // rule could disagree with itself.
205
182
  const layout = this.kb.layout;
206
- const agentsFile = layout.agentsFile;
207
- const renamed = agentsFile !== LEGACY_AGENTS_FILE;
208
183
  for (const rel of requiredFiles(layout)) {
209
184
  // `lstat`, not `exists`: a DIRECTORY or SYMLINK squatting a required
210
185
  // file's name would read as "present", and a skip-if-present check
@@ -219,48 +194,35 @@ export class TemplateFilesStep {
219
194
  `(${found.isSymbolicLink() ? 'symlink' : found.isDirectory() ? 'directory' : 'special file'}). ` +
220
195
  'Remove or rename it — the platform requires this name to be a readable file.');
221
196
  }
222
- let content = await templates.read(templateNameOf(rel, agentsFile));
197
+ let content = await templates.read(rel);
223
198
  // The on-disk merge below only runs against an EXISTING ignore file; a
224
- // freshly-declared one was merely assumed to carry the guide's rule —
225
- // true of the packaged template, not necessarily of a distribution's
226
- // custom one. Make it true here, so the managed conventions doc is
227
- // hidden from the file tree from the first boot either way. The same is
228
- // true of the deployment preamble: it is edited through External agent
229
- // access, not as an ordinary knowledge-base document.
230
- // …and a template still shipping the skills rule an earlier release
231
- // had (a distribution's copy, a stale packaged one) must not declare
232
- // it: the on-disk reconciliation below never sees a file that was
233
- // absent, so the declared content is reconciled here instead.
199
+ // freshly-declared one is reconciled here instead, so a distribution's
200
+ // custom template that predates a rule — or still ships one an earlier
201
+ // release had — declares the same file the merge would have produced.
202
+ // The deployment preamble is edited through External agent access, not
203
+ // as an ordinary knowledge-base document, so its rule is guaranteed;
204
+ // the rules that hid the skills root, the plugins root and the guide
205
+ // copies the platform used to write are taken out (see the merge below
206
+ // for why each).
234
207
  if (rel === IGNORE_FILENAME) {
235
208
  // A template still shipping the unanchored preamble rule an earlier
236
209
  // release had is respelled first, so the guarantee below adds nothing
237
210
  // beside it.
238
211
  content = withPlatformIgnorePatternRespelled(content, PREAMBLE_FILE, PREAMBLE_IGNORE_PATTERN);
239
- content = withoutIgnoreLine(withoutPlatformIgnorePattern(withIgnorePattern(withIgnorePattern(content, gitignoreLiteral(agentsFile), agentsFile), PREAMBLE_IGNORE_PATTERN, agentsFile), `${layout.skillsDir}/`), `${layout.pluginsDir}/`);
240
- // …and a template (a distribution's, a stale packaged one) still
241
- // hiding `AGENTS.md` while this deployment's guide is called something
242
- // else would hide the CUSTOMER'S file from the first boot — the exact
243
- // thing the rename exists to prevent.
244
- if (renamed)
245
- content = withoutPlatformAgentsRule(content);
212
+ content = withoutPlatformGuideRules(withoutIgnoreLine(withoutPlatformIgnorePattern(withIgnorePattern(content, PREAMBLE_IGNORE_PATTERN), `${layout.skillsDir}/`), `${layout.pluginsDir}/`), [LEGACY_AGENTS_FILE, PRE_RENAME_AGENTS_FILE]);
246
213
  }
247
214
  branch.write(rel, content);
248
215
  added.push(rel);
249
216
  }
250
- // The guide or mcp-description.md left VISIBLE by a stale `.bevelignore`
251
- // is closed here — and
252
- // UNCONDITIONALLY, not only when the file was just added: a KB whose
253
- // guide predates the CLAUDE.md→AGENTS.md rename has an ignore file
254
- // that lists the old name and knows nothing of the new one, so the
255
- // conventions doc shows up in the file tree and the agent view. A KB
256
- // whose deployment has just RENAMED the guide is the same story one
257
- // rename later: the rule names a file that is now the customer's.
217
+ // mcp-description.md left VISIBLE by a stale `.bevelignore` is closed
218
+ // here — and UNCONDITIONALLY, not only when the file was just added.
258
219
  // Idempotent: an ignore file already carrying the rule — or absent, in
259
220
  // which case the template's copy declared above arrives with the rule in
260
221
  // it — changes nothing and produces no note. Deliberately checked by
261
- // LINE PRESENCE, not effective outcome: a later `!<guide>` negation is
262
- // the operator explicitly choosing to SHOW the file, and hiding it is a
263
- // default this step provides, not a mandate it re-imposes every boot.
222
+ // LINE PRESENCE, not effective outcome: a later `!/mcp-description.md`
223
+ // negation is the operator explicitly choosing to SHOW the file, and
224
+ // hiding it is a default this step provides, not a mandate it re-imposes
225
+ // every boot.
264
226
  //
265
227
  // The shared-skills root goes the OTHER way. An earlier release hid it
266
228
  // like `Plugins/`; the Skills & Tools sidebar now renders it as a file
@@ -277,144 +239,101 @@ export class TemplateFilesStep {
277
239
  // it as a file tree too, so the rule that hid it since the first seed
278
240
  // comes out. That one has no comment to know it by — it was in the
279
241
  // template body from the start — so every line spelling it goes,
280
- // whoever wrote it (see `withoutIgnoreLine`). ONE read-modify-write for
281
- // all the rules: separate passes would each read the on-disk file and
282
- // a later declared write would lose an earlier one's.
242
+ // whoever wrote it (see `withoutIgnoreLine`).
243
+ //
244
+ // And the guide's rules go the same way as the skills root's. Every
245
+ // release that wrote the guide to disk hid it with a rule of its own —
246
+ // under `AGENTS.md`, under the name a deployment gave the guide (any
247
+ // name it ever gave it: the copies found at the root say which), and
248
+ // under `CLAUDE.md` for the copy that predates the rename. The guide is
249
+ // not on disk any more, so a root file under any of those names is the
250
+ // organisation's own conventions page, which they must be able to see
251
+ // and edit in the app. The platform's own lines come out, recognised by
252
+ // the comment or the template slot each release wrote them in (see
253
+ // {@link withoutPlatformGuideRules}); a rule an operator wrote by hand
254
+ // is theirs and stays. ONE read-modify-write for all the rules: separate
255
+ // passes would each read the on-disk file and a later declared write
256
+ // would lose an earlier one's.
257
+ //
258
+ // The copies come out first only so the one commit this step makes can
259
+ // name them in its subject; the rule pass below does not read the names
260
+ // — a guide rule is known by the platform's comment above it, whatever
261
+ // name it spells.
262
+ const retired = await this.retireGuideCopies(repoDir, branch);
263
+ added.push(...retired);
283
264
  added.push(...(await this.reconcileIgnoreRules(repoDir, branch, {
284
265
  // The preamble rule is respelled before it is added: a knowledge base
285
266
  // that booted the release shipping the unanchored spelling carries the
286
267
  // platform's own line, and that line hides a nested namesake too.
287
268
  respell: [[PREAMBLE_FILE, PREAMBLE_IGNORE_PATTERN]],
288
- // As a gitignore PATTERN: a guide name that reads as syntax there is
289
- // escaped, or the rule would hide nothing.
290
- add: [gitignoreLiteral(agentsFile), PREAMBLE_IGNORE_PATTERN],
269
+ add: [PREAMBLE_IGNORE_PATTERN],
291
270
  drop: [`${this.kb.layout.skillsDir}/`],
292
271
  dropEvery: [`${this.kb.layout.pluginsDir}/`],
293
- // The guide's rule FOLLOWS its name. Once the guide is `HEXIS.md`, the
294
- // root's `AGENTS.md` is the customer's own conventions file and they
295
- // must be able to see and edit it in the app — so the platform's own
296
- // line comes out, recognised the way the skills-root line was
297
- // (see {@link withoutPlatformAgentsRule}); a rule an operator wrote by
298
- // hand is theirs and stays.
299
- dropAgentsRule: renamed,
272
+ // The two names the template itself shipped a rule for. A rule under
273
+ // any other name — a retired copy's, or a name no copy is left to
274
+ // tell — is known by the platform's comment above it instead.
275
+ guideNames: [LEGACY_AGENTS_FILE, PRE_RENAME_AGENTS_FILE],
300
276
  })));
301
- // The guide is MANAGED, not merely seeded: the platform owns its content,
302
- // and a stale copy is replaced with the packaged template's every startup
303
- // phase. The file's own header says so, which is what makes overwriting
304
- // edits a stated contract instead of a surprise.
305
- let agentsRefreshed = false;
306
- if (!added.includes(agentsFile) &&
307
- (await templates.differsFrom(repoDir, agentsFile, LEGACY_AGENTS_FILE))) {
308
- branch.write(agentsFile, await templates.read(LEGACY_AGENTS_FILE));
309
- added.push(agentsFile);
310
- agentsRefreshed = true;
311
- }
312
- // What becomes of the `AGENTS.md` the platform used to own, now that the
313
- // guide lives somewhere else. Nothing at all while the name is the default.
314
- if (renamed) {
315
- added.push(...(await this.reconcileLegacyGuide(repoDir, branch, {
316
- agentsFile,
317
- // Only on the boot the rename lands — the boot that first writes the
318
- // guide under its new name. Said every boot after, the "kept" note
319
- // would caption commits about other things forever.
320
- announceKept: added.includes(agentsFile),
321
- })));
322
- }
323
277
  added.push(...this.ensureRequiredDirs(repoDir, branch, await this.missingDirs(repoDir)));
324
278
  if (added.length === 0)
325
279
  return;
326
280
  // One honest line; it becomes the commit subject when this step is the
327
281
  // first to dirty the branch.
328
- branch.note(agentsRefreshed && added.length === 1
329
- ? `Update ${agentsFile} to the current platform template`
282
+ const others = added.filter((rel) => !retired.includes(rel));
283
+ branch.note(retired.length > 0
284
+ ? `Remove the platform-written ${retired.join(' and ')} — the agent guide is served by the platform now` +
285
+ (others.length > 0 ? `; update ${others.join(', ')}` : '')
330
286
  : `Add missing KB scaffolding: ${added.join(', ')}`);
331
287
  }
332
288
  /**
333
- * The root `AGENTS.md` on a deployment whose guide is called something else:
334
- * removed when the platform can PROVE it wrote it, otherwise left alone —
335
- * and, while the admin keeps the link setting on, given the one sentence
336
- * that points at the guide beside it.
337
- *
338
- * Removal is gated on the managed header and nothing else. An admin who
339
- * renames the guide on a knowledge base the platform seeded would otherwise
340
- * be left with stale platform content sitting under the very name they
341
- * wanted for their own file; an admin who renames it on a repository whose
342
- * `AGENTS.md` is their own must find that file byte-for-byte untouched. The
343
- * header is the one fact that tells the two apart, so it is the one thing
344
- * asked.
289
+ * The copies of the guide the platform wrote to the repository root while
290
+ * the guide was a file — under `AGENTS.md`, under `CLAUDE.md` from before
291
+ * the rename, and under every name a deployment ever gave the guide —
292
+ * removed when the platform can PROVE it wrote them, and otherwise left
293
+ * exactly alone.
345
294
  *
346
- * The pointer is bounded by three conditions, all of them the customer's to
347
- * control: the admin keeps the setting on, the file exists (one is NEVER
348
- * created for this), and the guide's name appears nowhere in the text. That
349
- * last one is a plain content search on purpose — a mention in the
350
- * customer's own words, a link, a heading, all count, and the platform stays
351
- * out of a file it does not own.
295
+ * Found by SCANNING the root's markdown files rather than by the names the
296
+ * deployment knows today: a deployment that renamed the guide more than
297
+ * once left a copy under each earlier name, and the current setting
298
+ * remembers only the last. The header is what makes a scan safe, and the
299
+ * one fact that tells a copy of ours from a file of theirs: the
300
+ * organisation's own `AGENTS.md`, a `CLAUDE.md` its people edited, a note
301
+ * of theirs that happens to sit at the root, must all be found byte for
302
+ * byte untouched. A SYMLINK or a directory is left as it is: reading a link
303
+ * follows it, so a link pointing at a copy of the guide — or at any other
304
+ * file carrying the header — would read as ours and the removal would take
305
+ * the organisation's entry. Links are never followed anywhere else in the
306
+ * platform, and they are not followed here.
352
307
  *
353
- * Returns the paths changed, for the note.
308
+ * Returns the names removed, in name order, for the note and for the
309
+ * ignore rules that hid them.
354
310
  */
355
- async reconcileLegacyGuide(repoDir, branch, opts) {
356
- const legacyPath = path.join(repoDir, LEGACY_AGENTS_FILE);
357
- // `lstat` first, and a REGULAR FILE or nothing at all.
358
- //
359
- // Nothing there is the ordinary case: no customer file means nothing to
360
- // remove and nothing to point at the guide — the platform never creates an
361
- // `AGENTS.md` for this.
362
- //
363
- // Anything that is not a plain file is left exactly as it is. A SYMLINK is
364
- // the case that matters: reading one follows it, so a link pointing at a
365
- // knowledge base's managed guide — or at any other file carrying the
366
- // header — would read as "ours" and the removal would take the customer's
367
- // entry; writing one follows it too, and the pointer sentence would land
368
- // in a file at the other end that nobody asked us to edit. Links are never
369
- // followed anywhere else in the platform, and they are not followed here.
370
- // A directory under the name is the same answer for the same reason.
371
- const found = await this.disk.lstatOrNull(legacyPath);
372
- if (found === null || !found.isFile())
373
- return [];
374
- let current;
375
- try {
376
- current = await this.disk.readTextFile(legacyPath);
377
- }
378
- catch (err) {
379
- // Gone between the probe and the read — a concurrent delete reads as the
380
- // absence it is, on the same terms as the probe above.
381
- if (isAbsence(err))
382
- return [];
383
- throw err;
384
- }
385
- if (isManagedGuide(current)) {
386
- branch.remove(LEGACY_AGENTS_FILE);
387
- branch.note(`Remove the platform-written AGENTS.md — the agent guide is now ${opts.agentsFile}`);
388
- return [LEGACY_AGENTS_FILE];
389
- }
390
- if (opts.announceKept) {
391
- branch.note('Keep AGENTS.md — it is not a platform template, so it is the knowledge base\'s own');
392
- }
393
- // The admin's consent gates every write below, this file being theirs.
394
- if (!this.agentsFileLink())
395
- return [];
396
- // A sentence of OURS already in the file is updated rather than joined by
397
- // a second one. The guide's name can be changed again, and after a second
398
- // rename the sentence this step wrote last time points at a file that is
399
- // no longer there — which asking "is the new name mentioned?" cannot see,
400
- // because the old sentence does not mention it.
401
- const retargeted = retargetAgentsFilePointer(current, opts.agentsFile);
402
- if (retargeted !== null) {
403
- if (retargeted === current)
404
- return [];
405
- branch.write(LEGACY_AGENTS_FILE, retargeted);
406
- branch.note(`Point the sentence in AGENTS.md at ${opts.agentsFile}`);
407
- return [LEGACY_AGENTS_FILE];
311
+ async retireGuideCopies(repoDir, branch) {
312
+ const removed = [];
313
+ const entries = await fs.readdir(repoDir, { withFileTypes: true });
314
+ // `isFile` is false for a link, which is the point (see above).
315
+ const candidates = entries
316
+ .filter((entry) => entry.isFile() && entry.name.toLowerCase().endsWith('.md'))
317
+ .map((entry) => entry.name)
318
+ .sort();
319
+ for (const name of candidates) {
320
+ let current;
321
+ try {
322
+ current = await this.disk.readTextFile(path.join(repoDir, name));
323
+ }
324
+ catch (err) {
325
+ // Gone between the listing and the read — a concurrent delete reads
326
+ // as the absence it is.
327
+ if (isAbsence(err))
328
+ continue;
329
+ throw err;
330
+ }
331
+ if (!isManagedGuide(current))
332
+ continue;
333
+ branch.remove(name);
334
+ removed.push(name);
408
335
  }
409
- // Nothing of ours in there, so the question is the customer's own text.
410
- // Asked through the shared reading, not a raw `includes`: the sentence
411
- // spells the name escaped and percent-encoded, so on a punctuated name the
412
- // copy written last boot need not carry the raw name at all.
413
- if (mentionsAgentsFile(current, opts.agentsFile))
414
- return [];
415
- branch.write(LEGACY_AGENTS_FILE, withPointerSentence(current, opts.agentsFile));
416
- branch.note(`Add a pointer to ${opts.agentsFile} at the end of AGENTS.md`);
417
- return [LEGACY_AGENTS_FILE];
336
+ return removed;
418
337
  }
419
338
  /**
420
339
  * Which reserved roots are absent — and which are SQUATTED. `lstat`, not
@@ -488,9 +407,9 @@ export class TemplateFilesStep {
488
407
  return [];
489
408
  }
490
409
  const respelled = (rules.respell ?? []).reduce((text, [from, to]) => withPlatformIgnorePatternRespelled(text, from, to), current);
491
- const added = rules.add.reduce((text, pattern) => withIgnorePattern(text, pattern, this.kb.layout.agentsFile), respelled);
410
+ const added = rules.add.reduce((text, pattern) => withIgnorePattern(text, pattern), respelled);
492
411
  const dropped = (rules.dropEvery ?? []).reduce((text, pattern) => withoutIgnoreLine(text, pattern), rules.drop.reduce((text, pattern) => withoutPlatformIgnorePattern(text, pattern), added));
493
- const merged = rules.dropAgentsRule ? withoutPlatformAgentsRule(dropped) : dropped;
412
+ const merged = withoutPlatformGuideRules(dropped, rules.guideNames);
494
413
  if (merged === current)
495
414
  return [];
496
415
  branch.write(IGNORE_FILENAME, merged);
@@ -565,15 +484,99 @@ function followsTemplateHygieneBlock(kept) {
565
484
  return false;
566
485
  return kept.slice(-block.length).every((line, i) => line.trim() === block[i]);
567
486
  }
487
+ /**
488
+ * `text` without the rules THE PLATFORM WROTE to hide the guide while it was a
489
+ * file. Under WHATEVER name: every rule sitting directly under one of the two
490
+ * comments the platform wrote above the guide's rule
491
+ * ({@link withoutPlatformConventionsRules}) — the name a deployment saved for
492
+ * the guide is not read any more, so the rule for it is known by its comment
493
+ * and by nothing else. Then the two names the template itself shipped a rule
494
+ * for, under each of `names`: the `AGENTS.md` line in the slot at the end of
495
+ * the template's own repo-hygiene block
496
+ * ({@link TEMPLATE_HYGIENE_BLOCK_ABOVE_AGENTS_RULE}) and the `CLAUDE.md` line
497
+ * under the two-line comment the template carried it with. Each goes with
498
+ * its comment.
499
+ *
500
+ * The guide is not on disk any more, which is what makes every one of these
501
+ * lines wrong: it hides a file the platform never writes, which is therefore
502
+ * the organisation's own. A `!AGENTS.md` negation is not the rule and stays,
503
+ * as everywhere else here, and so does a bare rule an operator wrote by hand.
504
+ */
505
+ export function withoutPlatformGuideRules(text, names) {
506
+ let out = withoutPlatformConventionsRules(text);
507
+ for (const name of new Set(names)) {
508
+ if (name === LEGACY_AGENTS_FILE)
509
+ out = withoutPlatformAgentsRule(out);
510
+ else if (name === PRE_RENAME_AGENTS_FILE)
511
+ out = withoutPlatformClaudeRule(out);
512
+ }
513
+ return out;
514
+ }
515
+ /**
516
+ * `text` without every rule line that sits DIRECTLY under one of the two
517
+ * comments the platform wrote above the guide's rule while the guide was a
518
+ * file ({@link PLATFORM_RULE_COMMENT}, {@link AGENTS_RULE_COMMENT}), whatever
519
+ * name the rule spells — `AGENTS.md`, `CLAUDE.md`, or the escaped form of a
520
+ * name a deployment chose — and without that comment, plus the blank line
521
+ * that opened the appended block. Those two comments were written above
522
+ * nothing else, so the comment is the whole provenance: a rule for a name
523
+ * nobody remembers is retired exactly like one for a name still known. A
524
+ * `!negation`, a blank or a further comment under the comment is not a rule
525
+ * and stays, comment included.
526
+ */
527
+ function withoutPlatformConventionsRules(text) {
528
+ const lines = text.split('\n');
529
+ const kept = [];
530
+ for (const line of lines) {
531
+ const above = kept[kept.length - 1]?.trim();
532
+ const rule = line.trim();
533
+ const ours = (above === PLATFORM_RULE_COMMENT || above === AGENTS_RULE_COMMENT) &&
534
+ rule !== '' &&
535
+ !rule.startsWith('#') &&
536
+ !rule.startsWith('!');
537
+ if (!ours) {
538
+ kept.push(line);
539
+ continue;
540
+ }
541
+ kept.pop();
542
+ if (kept.length > 1 && kept[kept.length - 1]?.trim() === '')
543
+ kept.pop();
544
+ }
545
+ return kept.join('\n');
546
+ }
547
+ /** The two comment lines the packaged template carried above its `CLAUDE.md` rule, in order. */
548
+ const TEMPLATE_CLAUDE_RULE_COMMENT = [
549
+ '# The pre-rename name. Listed so a knowledge base carrying both files hides',
550
+ '# both — top-up adds AGENTS.md but never deletes the CLAUDE.md beside it.',
551
+ ];
552
+ /**
553
+ * `text` without the `CLAUDE.md` line the packaged template wrote, and without
554
+ * the two comment lines it wrote above it. Provenance is that comment, as
555
+ * everywhere else here: a bare `CLAUDE.md` an operator wrote is theirs.
556
+ */
557
+ function withoutPlatformClaudeRule(text) {
558
+ const lines = text.split('\n');
559
+ const kept = [];
560
+ for (const line of lines) {
561
+ const [first, second] = TEMPLATE_CLAUDE_RULE_COMMENT;
562
+ const ours = line.trim() === PRE_RENAME_AGENTS_FILE &&
563
+ kept.length >= 2 &&
564
+ kept[kept.length - 1].trim() === second &&
565
+ kept[kept.length - 2].trim() === first;
566
+ if (!ours) {
567
+ kept.push(line);
568
+ continue;
569
+ }
570
+ kept.splice(-2, 2);
571
+ }
572
+ return kept.join('\n');
573
+ }
568
574
  /**
569
575
  * `text` without the `AGENTS.md` line THE PLATFORM WROTE — under its own
570
576
  * comment (either spelling), or in the slot at the end of the template's own
571
577
  * repo-hygiene block ({@link TEMPLATE_HYGIENE_BLOCK_ABOVE_AGENTS_RULE}) — and
572
- * without that comment.
573
- *
574
- * Called only when the guide has been renamed, which is what makes the line
575
- * wrong: it hides a file the platform no longer owns. A `!AGENTS.md` negation
576
- * is not the rule and stays, as everywhere else here.
578
+ * without that comment. A `!AGENTS.md` negation is not the rule and stays, as
579
+ * everywhere else here.
577
580
  */
578
581
  export function withoutPlatformAgentsRule(text) {
579
582
  const lines = text.split('\n');
@@ -601,17 +604,6 @@ export function withoutPlatformAgentsRule(text) {
601
604
  }
602
605
  return kept.join('\n');
603
606
  }
604
- /**
605
- * `text` with the platform's pointer sentence appended as its own paragraph.
606
- *
607
- * One blank line between the customer's last line and ours, whether or not
608
- * their file ended in a newline: a sentence glued onto the end of their last
609
- * paragraph would read as a continuation of something they wrote.
610
- */
611
- export function withPointerSentence(text, agentsFile) {
612
- const body = text.replace(/\n+$/, '');
613
- return `${body}\n\n${agentsFilePointerSentence(agentsFile)}\n`;
614
- }
615
607
  /** The comment written above the preamble rule on an existing knowledge base. */
616
608
  const PREAMBLE_RULE_COMMENT = '# Added by the platform: agent instructions are edited from External agent access.';
617
609
  /**
@@ -719,20 +711,14 @@ function withPlatformIgnorePatternRespelled(text, from, to) {
719
711
  * still standing here is the operator's: it already hides the file, and
720
712
  * appending the anchored rule beside it would say nothing they have not.
721
713
  */
722
- function withIgnorePattern(text, pattern, agentsFile) {
714
+ function withIgnorePattern(text, pattern) {
723
715
  const lines = text.split('\n').map((l) => l.trim());
724
716
  const operatorPreambleRule = pattern === PREAMBLE_IGNORE_PATTERN &&
725
717
  (lines.includes(PREAMBLE_FILE) || lines.includes(`!${PREAMBLE_FILE}`));
726
718
  if (lines.includes(pattern) || lines.includes(`!${pattern}`) || operatorPreambleRule)
727
719
  return text;
728
720
  const separator = text.endsWith('\n') ? '' : '\n';
729
- // The guide's rule arrives as a gitignore literal (escaped where the name
730
- // needs it), so it is recognised in that spelling.
731
- const comment = pattern === PREAMBLE_IGNORE_PATTERN
732
- ? PREAMBLE_RULE_COMMENT
733
- : pattern === gitignoreLiteral(agentsFile)
734
- ? AGENTS_RULE_COMMENT
735
- : PLATFORM_RULE_COMMENT;
721
+ const comment = pattern === PREAMBLE_IGNORE_PATTERN ? PREAMBLE_RULE_COMMENT : PLATFORM_RULE_COMMENT;
736
722
  return `${text}${separator}\n${comment}\n${pattern}\n`;
737
723
  }
738
724
  //# sourceMappingURL=template-files.step.js.map