@hivehub/rulebook 1.2.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 (379) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +539 -0
  3. package/dist/agents/claude-code.d.ts +69 -0
  4. package/dist/agents/claude-code.d.ts.map +1 -0
  5. package/dist/agents/claude-code.js +180 -0
  6. package/dist/agents/claude-code.js.map +1 -0
  7. package/dist/agents/cursor-agent.d.ts +184 -0
  8. package/dist/agents/cursor-agent.d.ts.map +1 -0
  9. package/dist/agents/cursor-agent.js +299 -0
  10. package/dist/agents/cursor-agent.js.map +1 -0
  11. package/dist/agents/gemini-cli.d.ts +69 -0
  12. package/dist/agents/gemini-cli.d.ts.map +1 -0
  13. package/dist/agents/gemini-cli.js +180 -0
  14. package/dist/agents/gemini-cli.js.map +1 -0
  15. package/dist/cli/commands.d.ts +57 -0
  16. package/dist/cli/commands.d.ts.map +1 -0
  17. package/dist/cli/commands.js +1370 -0
  18. package/dist/cli/commands.js.map +1 -0
  19. package/dist/cli/docs-prompts.d.ts +3 -0
  20. package/dist/cli/docs-prompts.d.ts.map +1 -0
  21. package/dist/cli/docs-prompts.js +45 -0
  22. package/dist/cli/docs-prompts.js.map +1 -0
  23. package/dist/cli/prompts.d.ts +6 -0
  24. package/dist/cli/prompts.d.ts.map +1 -0
  25. package/dist/cli/prompts.js +376 -0
  26. package/dist/cli/prompts.js.map +1 -0
  27. package/dist/core/agent-manager.d.ts +89 -0
  28. package/dist/core/agent-manager.d.ts.map +1 -0
  29. package/dist/core/agent-manager.js +546 -0
  30. package/dist/core/agent-manager.js.map +1 -0
  31. package/dist/core/auto-fixer.d.ts +14 -0
  32. package/dist/core/auto-fixer.d.ts.map +1 -0
  33. package/dist/core/auto-fixer.js +207 -0
  34. package/dist/core/auto-fixer.js.map +1 -0
  35. package/dist/core/changelog-generator.d.ts +44 -0
  36. package/dist/core/changelog-generator.d.ts.map +1 -0
  37. package/dist/core/changelog-generator.js +222 -0
  38. package/dist/core/changelog-generator.js.map +1 -0
  39. package/dist/core/cli-bridge.d.ts +113 -0
  40. package/dist/core/cli-bridge.d.ts.map +1 -0
  41. package/dist/core/cli-bridge.js +1094 -0
  42. package/dist/core/cli-bridge.js.map +1 -0
  43. package/dist/core/config-manager.d.ts +65 -0
  44. package/dist/core/config-manager.d.ts.map +1 -0
  45. package/dist/core/config-manager.js +266 -0
  46. package/dist/core/config-manager.js.map +1 -0
  47. package/dist/core/coverage-checker.d.ts +14 -0
  48. package/dist/core/coverage-checker.d.ts.map +1 -0
  49. package/dist/core/coverage-checker.js +176 -0
  50. package/dist/core/coverage-checker.js.map +1 -0
  51. package/dist/core/custom-templates.d.ts +27 -0
  52. package/dist/core/custom-templates.d.ts.map +1 -0
  53. package/dist/core/custom-templates.js +122 -0
  54. package/dist/core/custom-templates.js.map +1 -0
  55. package/dist/core/dependency-checker.d.ts +21 -0
  56. package/dist/core/dependency-checker.d.ts.map +1 -0
  57. package/dist/core/dependency-checker.js +247 -0
  58. package/dist/core/dependency-checker.js.map +1 -0
  59. package/dist/core/detector.d.ts +3 -0
  60. package/dist/core/detector.d.ts.map +1 -0
  61. package/dist/core/detector.js +1443 -0
  62. package/dist/core/detector.js.map +1 -0
  63. package/dist/core/docs-generator.d.ts +9 -0
  64. package/dist/core/docs-generator.d.ts.map +1 -0
  65. package/dist/core/docs-generator.js +531 -0
  66. package/dist/core/docs-generator.js.map +1 -0
  67. package/dist/core/generator.d.ts +16 -0
  68. package/dist/core/generator.d.ts.map +1 -0
  69. package/dist/core/generator.js +561 -0
  70. package/dist/core/generator.js.map +1 -0
  71. package/dist/core/gitignore-generator.d.ts +13 -0
  72. package/dist/core/gitignore-generator.d.ts.map +1 -0
  73. package/dist/core/gitignore-generator.js +307 -0
  74. package/dist/core/gitignore-generator.js.map +1 -0
  75. package/dist/core/health-scorer.d.ts +22 -0
  76. package/dist/core/health-scorer.d.ts.map +1 -0
  77. package/dist/core/health-scorer.js +395 -0
  78. package/dist/core/health-scorer.js.map +1 -0
  79. package/dist/core/logger.d.ts +116 -0
  80. package/dist/core/logger.d.ts.map +1 -0
  81. package/dist/core/logger.js +289 -0
  82. package/dist/core/logger.js.map +1 -0
  83. package/dist/core/merger.d.ts +6 -0
  84. package/dist/core/merger.d.ts.map +1 -0
  85. package/dist/core/merger.js +131 -0
  86. package/dist/core/merger.js.map +1 -0
  87. package/dist/core/migrator.d.ts +19 -0
  88. package/dist/core/migrator.d.ts.map +1 -0
  89. package/dist/core/migrator.js +102 -0
  90. package/dist/core/migrator.js.map +1 -0
  91. package/dist/core/minimal-scaffolder.d.ts +8 -0
  92. package/dist/core/minimal-scaffolder.d.ts.map +1 -0
  93. package/dist/core/minimal-scaffolder.js +51 -0
  94. package/dist/core/minimal-scaffolder.js.map +1 -0
  95. package/dist/core/modern-console-new.d.ts +81 -0
  96. package/dist/core/modern-console-new.d.ts.map +1 -0
  97. package/dist/core/modern-console-new.js +340 -0
  98. package/dist/core/modern-console-new.js.map +1 -0
  99. package/dist/core/modern-console.d.ts +99 -0
  100. package/dist/core/modern-console.d.ts.map +1 -0
  101. package/dist/core/modern-console.js +568 -0
  102. package/dist/core/modern-console.js.map +1 -0
  103. package/dist/core/openspec-manager.d.ts +133 -0
  104. package/dist/core/openspec-manager.d.ts.map +1 -0
  105. package/dist/core/openspec-manager.js +605 -0
  106. package/dist/core/openspec-manager.js.map +1 -0
  107. package/dist/core/openspec-migrator.d.ts +27 -0
  108. package/dist/core/openspec-migrator.d.ts.map +1 -0
  109. package/dist/core/openspec-migrator.js +255 -0
  110. package/dist/core/openspec-migrator.js.map +1 -0
  111. package/dist/core/task-manager.d.ts +65 -0
  112. package/dist/core/task-manager.d.ts.map +1 -0
  113. package/dist/core/task-manager.js +318 -0
  114. package/dist/core/task-manager.js.map +1 -0
  115. package/dist/core/test-task-manager.d.ts +49 -0
  116. package/dist/core/test-task-manager.d.ts.map +1 -0
  117. package/dist/core/test-task-manager.js +121 -0
  118. package/dist/core/test-task-manager.js.map +1 -0
  119. package/dist/core/validator.d.ts +21 -0
  120. package/dist/core/validator.d.ts.map +1 -0
  121. package/dist/core/validator.js +177 -0
  122. package/dist/core/validator.js.map +1 -0
  123. package/dist/core/version-bumper.d.ts +19 -0
  124. package/dist/core/version-bumper.d.ts.map +1 -0
  125. package/dist/core/version-bumper.js +180 -0
  126. package/dist/core/version-bumper.js.map +1 -0
  127. package/dist/core/watcher.d.ts +9 -0
  128. package/dist/core/watcher.d.ts.map +1 -0
  129. package/dist/core/watcher.js +22 -0
  130. package/dist/core/watcher.js.map +1 -0
  131. package/dist/core/workflow-generator.d.ts +10 -0
  132. package/dist/core/workflow-generator.d.ts.map +1 -0
  133. package/dist/core/workflow-generator.js +279 -0
  134. package/dist/core/workflow-generator.js.map +1 -0
  135. package/dist/index.d.ts +3 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +159 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/mcp/handlers/archive-task.d.ts +17 -0
  140. package/dist/mcp/handlers/archive-task.d.ts.map +1 -0
  141. package/dist/mcp/handlers/archive-task.js +36 -0
  142. package/dist/mcp/handlers/archive-task.js.map +1 -0
  143. package/dist/mcp/handlers/create-task.d.ts +17 -0
  144. package/dist/mcp/handlers/create-task.d.ts.map +1 -0
  145. package/dist/mcp/handlers/create-task.js +56 -0
  146. package/dist/mcp/handlers/create-task.js.map +1 -0
  147. package/dist/mcp/handlers/list-tasks.d.ts +22 -0
  148. package/dist/mcp/handlers/list-tasks.d.ts.map +1 -0
  149. package/dist/mcp/handlers/list-tasks.js +42 -0
  150. package/dist/mcp/handlers/list-tasks.js.map +1 -0
  151. package/dist/mcp/handlers/show-task.d.ts +25 -0
  152. package/dist/mcp/handlers/show-task.d.ts.map +1 -0
  153. package/dist/mcp/handlers/show-task.js +43 -0
  154. package/dist/mcp/handlers/show-task.js.map +1 -0
  155. package/dist/mcp/handlers/update-task.d.ts +17 -0
  156. package/dist/mcp/handlers/update-task.d.ts.map +1 -0
  157. package/dist/mcp/handlers/update-task.js +35 -0
  158. package/dist/mcp/handlers/update-task.js.map +1 -0
  159. package/dist/mcp/handlers/validate-task.d.ts +15 -0
  160. package/dist/mcp/handlers/validate-task.d.ts.map +1 -0
  161. package/dist/mcp/handlers/validate-task.js +27 -0
  162. package/dist/mcp/handlers/validate-task.js.map +1 -0
  163. package/dist/mcp/rulebook-config.d.ts +22 -0
  164. package/dist/mcp/rulebook-config.d.ts.map +1 -0
  165. package/dist/mcp/rulebook-config.js +65 -0
  166. package/dist/mcp/rulebook-config.js.map +1 -0
  167. package/dist/mcp/rulebook-server.d.ts +4 -0
  168. package/dist/mcp/rulebook-server.d.ts.map +1 -0
  169. package/dist/mcp/rulebook-server.js +246 -0
  170. package/dist/mcp/rulebook-server.js.map +1 -0
  171. package/dist/types.d.ts +190 -0
  172. package/dist/types.d.ts.map +1 -0
  173. package/dist/types.js +2 -0
  174. package/dist/types.js.map +1 -0
  175. package/dist/utils/file-system.d.ts +9 -0
  176. package/dist/utils/file-system.d.ts.map +1 -0
  177. package/dist/utils/file-system.js +51 -0
  178. package/dist/utils/file-system.js.map +1 -0
  179. package/dist/utils/git-hooks.d.ts +8 -0
  180. package/dist/utils/git-hooks.d.ts.map +1 -0
  181. package/dist/utils/git-hooks.js +440 -0
  182. package/dist/utils/git-hooks.js.map +1 -0
  183. package/dist/utils/rulesignore.d.ts +9 -0
  184. package/dist/utils/rulesignore.d.ts.map +1 -0
  185. package/dist/utils/rulesignore.js +42 -0
  186. package/dist/utils/rulesignore.js.map +1 -0
  187. package/package.json +106 -0
  188. package/templates/cli/AIDER.md +49 -0
  189. package/templates/cli/AMAZON_Q.md +25 -0
  190. package/templates/cli/AUGGIE.md +32 -0
  191. package/templates/cli/CLAUDE.md +32 -0
  192. package/templates/cli/CLAUDE_CODE.md +35 -0
  193. package/templates/cli/CLINE.md +32 -0
  194. package/templates/cli/CODEBUDDY.md +20 -0
  195. package/templates/cli/CODEIUM.md +20 -0
  196. package/templates/cli/CODEX.md +21 -0
  197. package/templates/cli/CONTINUE.md +34 -0
  198. package/templates/cli/CURSOR_CLI.md +28 -0
  199. package/templates/cli/FACTORY.md +18 -0
  200. package/templates/cli/GEMINI.md +35 -0
  201. package/templates/cli/KILOCODE.md +18 -0
  202. package/templates/cli/OPENCODE.md +18 -0
  203. package/templates/cli/_GENERIC_TEMPLATE.md +29 -0
  204. package/templates/commands/rulebook-task-apply.md +67 -0
  205. package/templates/commands/rulebook-task-archive.md +70 -0
  206. package/templates/commands/rulebook-task-create.md +93 -0
  207. package/templates/commands/rulebook-task-list.md +42 -0
  208. package/templates/commands/rulebook-task-show.md +52 -0
  209. package/templates/commands/rulebook-task-validate.md +53 -0
  210. package/templates/core/AGENT_AUTOMATION.md +184 -0
  211. package/templates/core/DAG.md +304 -0
  212. package/templates/core/DOCUMENTATION_RULES.md +37 -0
  213. package/templates/core/QUALITY_ENFORCEMENT.md +68 -0
  214. package/templates/core/RULEBOOK.md +1874 -0
  215. package/templates/frameworks/ANGULAR.md +36 -0
  216. package/templates/frameworks/DJANGO.md +83 -0
  217. package/templates/frameworks/ELECTRON.md +147 -0
  218. package/templates/frameworks/FLASK.md +38 -0
  219. package/templates/frameworks/FLUTTER.md +55 -0
  220. package/templates/frameworks/JQUERY.md +32 -0
  221. package/templates/frameworks/LARAVEL.md +38 -0
  222. package/templates/frameworks/NESTJS.md +43 -0
  223. package/templates/frameworks/NEXTJS.md +127 -0
  224. package/templates/frameworks/NUXT.md +40 -0
  225. package/templates/frameworks/RAILS.md +66 -0
  226. package/templates/frameworks/REACT.md +38 -0
  227. package/templates/frameworks/REACT_NATIVE.md +47 -0
  228. package/templates/frameworks/SPRING.md +39 -0
  229. package/templates/frameworks/SYMFONY.md +36 -0
  230. package/templates/frameworks/VUE.md +36 -0
  231. package/templates/frameworks/ZEND.md +35 -0
  232. package/templates/git/CI_CD_PATTERNS.md +661 -0
  233. package/templates/git/GITHUB_ACTIONS.md +728 -0
  234. package/templates/git/GITLAB_CI.md +730 -0
  235. package/templates/git/GIT_WORKFLOW.md +1157 -0
  236. package/templates/git/SECRETS_MANAGEMENT.md +585 -0
  237. package/templates/hooks/COMMIT_MSG.md +530 -0
  238. package/templates/hooks/POST_CHECKOUT.md +546 -0
  239. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -0
  240. package/templates/hooks/PRE_COMMIT.md +414 -0
  241. package/templates/hooks/PRE_PUSH.md +601 -0
  242. package/templates/hooks/csharp-pre-commit.sh +23 -0
  243. package/templates/hooks/csharp-pre-push.sh +23 -0
  244. package/templates/hooks/dart-pre-commit.sh +30 -0
  245. package/templates/hooks/dart-pre-push.sh +25 -0
  246. package/templates/hooks/elixir-pre-commit.sh +32 -0
  247. package/templates/hooks/elixir-pre-push.sh +31 -0
  248. package/templates/hooks/erlang-pre-commit.sh +30 -0
  249. package/templates/hooks/erlang-pre-push.sh +37 -0
  250. package/templates/hooks/go-pre-commit.sh +40 -0
  251. package/templates/hooks/go-pre-push.sh +31 -0
  252. package/templates/hooks/haskell-pre-commit.sh +41 -0
  253. package/templates/hooks/haskell-pre-push.sh +37 -0
  254. package/templates/hooks/java-pre-commit.sh +34 -0
  255. package/templates/hooks/java-pre-push.sh +24 -0
  256. package/templates/hooks/kotlin-pre-commit.sh +32 -0
  257. package/templates/hooks/kotlin-pre-push.sh +16 -0
  258. package/templates/hooks/php-pre-commit.sh +36 -0
  259. package/templates/hooks/php-pre-push.sh +26 -0
  260. package/templates/hooks/python-pre-commit.sh +51 -0
  261. package/templates/hooks/python-pre-push.sh +25 -0
  262. package/templates/hooks/ruby-pre-commit.sh +33 -0
  263. package/templates/hooks/ruby-pre-push.sh +32 -0
  264. package/templates/hooks/rust-pre-commit.sh +30 -0
  265. package/templates/hooks/rust-pre-push.sh +30 -0
  266. package/templates/hooks/scala-pre-commit.sh +32 -0
  267. package/templates/hooks/scala-pre-push.sh +24 -0
  268. package/templates/hooks/swift-pre-commit.sh +25 -0
  269. package/templates/hooks/swift-pre-push.sh +23 -0
  270. package/templates/hooks/typescript-pre-commit.sh +37 -0
  271. package/templates/hooks/typescript-pre-push.sh +36 -0
  272. package/templates/ides/COPILOT.md +37 -0
  273. package/templates/ides/CURSOR.md +43 -0
  274. package/templates/ides/JETBRAINS_AI.md +35 -0
  275. package/templates/ides/REPLIT.md +36 -0
  276. package/templates/ides/TABNINE.md +29 -0
  277. package/templates/ides/VSCODE.md +40 -0
  278. package/templates/ides/WINDSURF.md +36 -0
  279. package/templates/ides/ZED.md +32 -0
  280. package/templates/languages/ADA.md +58 -0
  281. package/templates/languages/C.md +333 -0
  282. package/templates/languages/CPP.md +743 -0
  283. package/templates/languages/CSHARP.md +417 -0
  284. package/templates/languages/DART.md +332 -0
  285. package/templates/languages/ELIXIR.md +454 -0
  286. package/templates/languages/ERLANG.md +361 -0
  287. package/templates/languages/GO.md +645 -0
  288. package/templates/languages/HASKELL.md +177 -0
  289. package/templates/languages/JAVA.md +607 -0
  290. package/templates/languages/JAVASCRIPT.md +631 -0
  291. package/templates/languages/JULIA.md +97 -0
  292. package/templates/languages/KOTLIN.md +511 -0
  293. package/templates/languages/LISP.md +100 -0
  294. package/templates/languages/LUA.md +74 -0
  295. package/templates/languages/OBJECTIVEC.md +90 -0
  296. package/templates/languages/PHP.md +416 -0
  297. package/templates/languages/PYTHON.md +682 -0
  298. package/templates/languages/R.md +350 -0
  299. package/templates/languages/RUBY.md +421 -0
  300. package/templates/languages/RUST.md +477 -0
  301. package/templates/languages/SAS.md +73 -0
  302. package/templates/languages/SCALA.md +348 -0
  303. package/templates/languages/SOLIDITY.md +580 -0
  304. package/templates/languages/SQL.md +137 -0
  305. package/templates/languages/SWIFT.md +466 -0
  306. package/templates/languages/TYPESCRIPT.md +591 -0
  307. package/templates/languages/ZIG.md +265 -0
  308. package/templates/modules/ATLASSIAN.md +255 -0
  309. package/templates/modules/CONTEXT7.md +54 -0
  310. package/templates/modules/FIGMA.md +267 -0
  311. package/templates/modules/GITHUB_MCP.md +64 -0
  312. package/templates/modules/GRAFANA.md +328 -0
  313. package/templates/modules/NOTION.md +247 -0
  314. package/templates/modules/PLAYWRIGHT.md +90 -0
  315. package/templates/modules/RULEBOOK_MCP.md +156 -0
  316. package/templates/modules/SERENA.md +337 -0
  317. package/templates/modules/SUPABASE.md +223 -0
  318. package/templates/modules/SYNAP.md +69 -0
  319. package/templates/modules/VECTORIZER.md +63 -0
  320. package/templates/services/AZURE_BLOB.md +184 -0
  321. package/templates/services/CASSANDRA.md +239 -0
  322. package/templates/services/DYNAMODB.md +308 -0
  323. package/templates/services/ELASTICSEARCH.md +347 -0
  324. package/templates/services/GCS.md +178 -0
  325. package/templates/services/INFLUXDB.md +265 -0
  326. package/templates/services/KAFKA.md +341 -0
  327. package/templates/services/MARIADB.md +183 -0
  328. package/templates/services/MEMCACHED.md +242 -0
  329. package/templates/services/MINIO.md +201 -0
  330. package/templates/services/MONGODB.md +268 -0
  331. package/templates/services/MYSQL.md +358 -0
  332. package/templates/services/NEO4J.md +247 -0
  333. package/templates/services/ORACLE.md +290 -0
  334. package/templates/services/POSTGRESQL.md +326 -0
  335. package/templates/services/RABBITMQ.md +286 -0
  336. package/templates/services/REDIS.md +292 -0
  337. package/templates/services/S3.md +298 -0
  338. package/templates/services/SQLITE.md +294 -0
  339. package/templates/services/SQLSERVER.md +294 -0
  340. package/templates/workflows/codespell.yml +31 -0
  341. package/templates/workflows/cpp-lint.yml +47 -0
  342. package/templates/workflows/cpp-publish.yml +119 -0
  343. package/templates/workflows/cpp-test.yml +77 -0
  344. package/templates/workflows/dotnet-lint.yml +29 -0
  345. package/templates/workflows/dotnet-publish.yml +40 -0
  346. package/templates/workflows/dotnet-test.yml +41 -0
  347. package/templates/workflows/elixir-lint.yml +45 -0
  348. package/templates/workflows/elixir-publish.yml +49 -0
  349. package/templates/workflows/elixir-test.yml +54 -0
  350. package/templates/workflows/erlang-lint.yml +47 -0
  351. package/templates/workflows/erlang-test.yml +62 -0
  352. package/templates/workflows/go-lint.yml +39 -0
  353. package/templates/workflows/go-publish.yml +95 -0
  354. package/templates/workflows/go-test.yml +59 -0
  355. package/templates/workflows/java-lint.yml +60 -0
  356. package/templates/workflows/java-publish.yml +120 -0
  357. package/templates/workflows/java-test.yml +85 -0
  358. package/templates/workflows/kotlin-lint.yml +34 -0
  359. package/templates/workflows/kotlin-publish.yml +56 -0
  360. package/templates/workflows/kotlin-test.yml +48 -0
  361. package/templates/workflows/php-lint.yml +39 -0
  362. package/templates/workflows/php-publish.yml +50 -0
  363. package/templates/workflows/php-test.yml +54 -0
  364. package/templates/workflows/python-lint.yml +47 -0
  365. package/templates/workflows/python-publish.yml +91 -0
  366. package/templates/workflows/python-test.yml +59 -0
  367. package/templates/workflows/rust-lint.yml +54 -0
  368. package/templates/workflows/rust-publish.yml +66 -0
  369. package/templates/workflows/rust-test.yml +75 -0
  370. package/templates/workflows/solidity-lint.yml +41 -0
  371. package/templates/workflows/solidity-test.yml +47 -0
  372. package/templates/workflows/swift-lint.yml +32 -0
  373. package/templates/workflows/swift-publish.yml +58 -0
  374. package/templates/workflows/swift-test.yml +44 -0
  375. package/templates/workflows/typescript-lint.yml +61 -0
  376. package/templates/workflows/typescript-publish.yml +60 -0
  377. package/templates/workflows/typescript-test.yml +73 -0
  378. package/templates/workflows/zig-lint.yml +27 -0
  379. package/templates/workflows/zig-test.yml +40 -0
@@ -0,0 +1,605 @@
1
+ import { readFile, writeFile, existsSync, mkdirSync, readdirSync } from 'fs';
2
+ import { promisify } from 'util';
3
+ import { join } from 'path';
4
+ import { randomUUID } from 'crypto';
5
+ const readFileAsync = promisify(readFile);
6
+ const writeFileAsync = promisify(writeFile);
7
+ const OPENSPEC_DIR = 'openspec';
8
+ const CHANGES_DIR = 'changes';
9
+ const SPECS_DIR = 'specs';
10
+ const TASKS_FILE = 'tasks.md';
11
+ export class OpenSpecManager {
12
+ openspecPath;
13
+ changesPath;
14
+ specsPath;
15
+ data = null;
16
+ onLog;
17
+ constructor(projectRoot) {
18
+ this.openspecPath = join(projectRoot, OPENSPEC_DIR);
19
+ this.changesPath = join(this.openspecPath, CHANGES_DIR);
20
+ this.specsPath = join(this.openspecPath, SPECS_DIR);
21
+ }
22
+ /**
23
+ * Set callback for logging (used by watcher UI)
24
+ */
25
+ setLogCallback(callback) {
26
+ this.onLog = callback;
27
+ }
28
+ /**
29
+ * Initialize OpenSpec directory structure
30
+ */
31
+ async initialize() {
32
+ if (!existsSync(this.openspecPath)) {
33
+ mkdirSync(this.openspecPath, { recursive: true });
34
+ }
35
+ if (!existsSync(this.changesPath)) {
36
+ mkdirSync(this.changesPath, { recursive: true });
37
+ }
38
+ if (!existsSync(this.specsPath)) {
39
+ mkdirSync(this.specsPath, { recursive: true });
40
+ }
41
+ }
42
+ /**
43
+ * Load OpenSpec data from changes directory
44
+ */
45
+ async loadOpenSpec() {
46
+ if (this.data) {
47
+ return this.data;
48
+ }
49
+ await this.initialize();
50
+ try {
51
+ // Load tasks from all changes
52
+ const tasks = await this.loadTasksFromChanges();
53
+ // Load current task from metadata
54
+ let currentTask;
55
+ // Load history from completed tasks
56
+ const history = tasks.filter((t) => t.status === 'completed');
57
+ this.data = {
58
+ tasks: tasks.filter((t) => t.status !== 'completed'),
59
+ currentTask,
60
+ history,
61
+ metadata: {
62
+ version: '1.0.0',
63
+ createdAt: new Date().toISOString(),
64
+ updatedAt: new Date().toISOString(),
65
+ totalTasks: tasks.length,
66
+ completedTasks: history.length,
67
+ },
68
+ };
69
+ return this.data;
70
+ }
71
+ catch (error) {
72
+ throw new Error(`Failed to load OpenSpec data: ${error}`);
73
+ }
74
+ }
75
+ /**
76
+ * Save OpenSpec data (tasks are managed in changes, so this is mostly for metadata)
77
+ */
78
+ async saveOpenSpec() {
79
+ if (!this.data) {
80
+ throw new Error('No data to save');
81
+ }
82
+ try {
83
+ await this.initialize();
84
+ // Update metadata
85
+ this.data.metadata.updatedAt = new Date().toISOString();
86
+ this.data.metadata.totalTasks = this.data.tasks.length + this.data.history.length;
87
+ this.data.metadata.completedTasks = this.data.history.length;
88
+ // Tasks are managed in individual change files, not in a central file
89
+ }
90
+ catch (error) {
91
+ throw new Error(`Failed to save OpenSpec data: ${error}`);
92
+ }
93
+ }
94
+ /**
95
+ * Sync task status on agent start
96
+ * Loads all tasks and ensures the data is fresh
97
+ */
98
+ async syncTaskStatus() {
99
+ // Clear cached data to force reload
100
+ this.data = null;
101
+ // Reload all tasks
102
+ const data = await this.loadOpenSpec();
103
+ // Log task summary
104
+ const totalTasks = data.tasks.length + data.history.length;
105
+ const pendingTasks = data.tasks.filter((t) => t.status === 'pending').length;
106
+ const inProgressTasks = data.tasks.filter((t) => t.status === 'in-progress').length;
107
+ const completedTasks = data.history.length;
108
+ const msg = ` Tasks: ${totalTasks} total | ${pendingTasks} pending | ${inProgressTasks} in progress | ${completedTasks} completed`;
109
+ // Use callback if available (watcher mode), otherwise console.log (CLI mode)
110
+ if (this.onLog) {
111
+ this.onLog('info', msg);
112
+ }
113
+ else {
114
+ console.log(msg);
115
+ }
116
+ }
117
+ /**
118
+ * Load tasks from all changes directories
119
+ */
120
+ async loadTasksFromChanges() {
121
+ const allTasks = [];
122
+ if (!existsSync(this.changesPath)) {
123
+ return allTasks;
124
+ }
125
+ try {
126
+ const changeDirs = readdirSync(this.changesPath, { withFileTypes: true })
127
+ .filter((dirent) => dirent.isDirectory())
128
+ .map((dirent) => dirent.name);
129
+ for (const changeDir of changeDirs) {
130
+ const tasksPath = join(this.changesPath, changeDir, TASKS_FILE);
131
+ if (existsSync(tasksPath)) {
132
+ const tasksContent = await readFileAsync(tasksPath, 'utf-8');
133
+ const tasks = this.parseTasksFromMarkdown(tasksContent);
134
+ allTasks.push(...tasks);
135
+ }
136
+ }
137
+ }
138
+ catch (error) {
139
+ const msg = `Warning: Could not load tasks from changes: ${error}`;
140
+ if (this.onLog) {
141
+ this.onLog('warning', msg);
142
+ }
143
+ else {
144
+ console.warn(msg);
145
+ }
146
+ }
147
+ return allTasks;
148
+ }
149
+ /**
150
+ * Parse tasks from markdown content
151
+ */
152
+ parseTasksFromMarkdown(content) {
153
+ const tasks = [];
154
+ const lines = content.split('\n');
155
+ for (let i = 0; i < lines.length; i++) {
156
+ const line = lines[i].trim();
157
+ // Check for task list items
158
+ if (line.startsWith('- [') && line.includes(']')) {
159
+ const statusMatch = line.match(/^- \[([x ])\] (.+)$/);
160
+ if (statusMatch) {
161
+ const isCompleted = statusMatch[1] === 'x';
162
+ const taskTitle = statusMatch[2];
163
+ // Extract task ID from title - handle both formats:
164
+ // 1. **TASK-ID**: Description (current format)
165
+ // 2. Description (id: TASK-ID) (legacy format)
166
+ let id;
167
+ let title;
168
+ const boldIdMatch = taskTitle.match(/^\*\*(.+?)\*\*: (.+)$/);
169
+ if (boldIdMatch) {
170
+ id = boldIdMatch[1];
171
+ title = boldIdMatch[2];
172
+ }
173
+ else {
174
+ const idMatch = taskTitle.match(/^(.+) \(id: (.+)\)$/);
175
+ if (idMatch) {
176
+ title = idMatch[1];
177
+ id = idMatch[2];
178
+ }
179
+ else {
180
+ id = randomUUID();
181
+ title = taskTitle;
182
+ }
183
+ }
184
+ // Extract priority from task ID if it follows pattern like INIT-001, REFACTOR-002, etc.
185
+ let priority = 1;
186
+ const priorityMatch = id.match(/^([A-Z]+)-(\d+)$/);
187
+ if (priorityMatch) {
188
+ const phase = priorityMatch[1];
189
+ const phaseNumber = parseInt(priorityMatch[2]);
190
+ // Map phase names to priority numbers
191
+ const phasePriority = {
192
+ INIT: 0,
193
+ TEST: 1,
194
+ REFACTOR: 2,
195
+ IMPLEMENT: 3,
196
+ INTEGRATE: 4,
197
+ STYLE: 5,
198
+ OPTIMIZE: 6,
199
+ DOCS: 7,
200
+ QA: 8,
201
+ };
202
+ priority = (phasePriority[phase] || 9) * 1000 + phaseNumber;
203
+ }
204
+ // Extract dependencies from subsequent lines
205
+ const dependencies = [];
206
+ let j = i + 1;
207
+ while (j < lines.length && lines[j].startsWith(' -')) {
208
+ const depMatch = lines[j].match(/^- (.+) \(id: (.+)\)$/);
209
+ if (depMatch) {
210
+ dependencies.push(depMatch[2]);
211
+ }
212
+ j++;
213
+ }
214
+ const task = {
215
+ id,
216
+ title,
217
+ description: title,
218
+ priority,
219
+ status: isCompleted ? 'completed' : 'pending',
220
+ dependencies,
221
+ estimatedTime: 1800, // Default 30 minutes
222
+ createdAt: new Date().toISOString(),
223
+ updatedAt: new Date().toISOString(),
224
+ attempts: 0,
225
+ tags: [],
226
+ };
227
+ tasks.push(task);
228
+ }
229
+ }
230
+ }
231
+ return tasks;
232
+ }
233
+ /**
234
+ * Get tasks ordered by priority
235
+ */
236
+ async getTasksByPriority() {
237
+ const data = await this.loadOpenSpec();
238
+ return data.tasks
239
+ .filter((task) => task.status === 'pending')
240
+ .sort((a, b) => a.priority - b.priority);
241
+ }
242
+ /**
243
+ * Get current active task
244
+ */
245
+ async getCurrentTask() {
246
+ const data = await this.loadOpenSpec();
247
+ if (!data.currentTask) {
248
+ return null;
249
+ }
250
+ return data.tasks.find((task) => task.id === data.currentTask) || null;
251
+ }
252
+ /**
253
+ * Set current task
254
+ */
255
+ async setCurrentTask(taskId) {
256
+ const data = await this.loadOpenSpec();
257
+ const task = data.tasks.find((t) => t.id === taskId);
258
+ if (!task) {
259
+ throw new Error(`Task ${taskId} not found`);
260
+ }
261
+ data.currentTask = taskId;
262
+ this.data = data;
263
+ await this.saveOpenSpec();
264
+ }
265
+ /**
266
+ * Update task status
267
+ */
268
+ async updateTaskStatus(taskId, status) {
269
+ const data = await this.loadOpenSpec();
270
+ const taskIndex = data.tasks.findIndex((t) => t.id === taskId);
271
+ if (taskIndex === -1) {
272
+ throw new Error(`Task ${taskId} not found`);
273
+ }
274
+ const task = data.tasks[taskIndex];
275
+ task.status = status;
276
+ task.updatedAt = new Date().toISOString();
277
+ if (status === 'completed') {
278
+ task.completedAt = new Date().toISOString();
279
+ // Move to history
280
+ data.history.push(task);
281
+ data.tasks.splice(taskIndex, 1);
282
+ // Clear current task if it was completed
283
+ if (data.currentTask === taskId) {
284
+ data.currentTask = undefined;
285
+ }
286
+ }
287
+ else if (status === 'in-progress') {
288
+ data.currentTask = taskId;
289
+ }
290
+ this.data = data;
291
+ await this.saveOpenSpec();
292
+ // Update markdown files for all status changes (only for relevant statuses)
293
+ if (status === 'completed' || status === 'in-progress' || status === 'failed') {
294
+ await this.updateMarkdownTaskStatus(taskId, status);
295
+ }
296
+ }
297
+ /**
298
+ * Mark task as complete
299
+ */
300
+ async markTaskComplete(taskId) {
301
+ await this.updateTaskStatus(taskId, 'completed');
302
+ // Automatically update OpenSpec markdown files
303
+ await this.updateMarkdownTaskStatus(taskId, 'completed');
304
+ }
305
+ /**
306
+ * Update task status in markdown files
307
+ */
308
+ async updateMarkdownTaskStatus(taskId, status) {
309
+ try {
310
+ // Find all tasks.md files in the changes directory
311
+ const changesDirs = readdirSync(this.changesPath, { withFileTypes: true })
312
+ .filter((dirent) => dirent.isDirectory())
313
+ .map((dirent) => dirent.name);
314
+ for (const dir of changesDirs) {
315
+ const tasksFilePath = join(this.changesPath, dir, TASKS_FILE);
316
+ if (existsSync(tasksFilePath)) {
317
+ const content = await readFileAsync(tasksFilePath, 'utf8');
318
+ // Update task status in markdown
319
+ const updatedContent = this.updateTaskInMarkdown(content, taskId, status);
320
+ if (updatedContent !== content) {
321
+ await writeFileAsync(tasksFilePath, updatedContent, 'utf8');
322
+ if (this.onLog) {
323
+ this.onLog('success', `Updated task status in ${join(dir, TASKS_FILE)}`);
324
+ }
325
+ }
326
+ }
327
+ }
328
+ }
329
+ catch (error) {
330
+ if (this.onLog) {
331
+ this.onLog('warning', `Failed to update markdown files: ${error}`);
332
+ }
333
+ }
334
+ }
335
+ /**
336
+ * Update task status in markdown content
337
+ */
338
+ updateTaskInMarkdown(content, taskId, status) {
339
+ // Create regex pattern to match task lines with the specific task ID
340
+ const taskPattern = new RegExp(`(- \\[ \\] \\*\\*${taskId}\\*\\*.*?)(?=\\n|$)`, 'g');
341
+ let updatedContent = content;
342
+ let hasChanges = false;
343
+ // Replace pending tasks with completed/in-progress/failed
344
+ updatedContent = updatedContent.replace(taskPattern, (match) => {
345
+ hasChanges = true;
346
+ if (status === 'completed') {
347
+ return match.replace('- [ ]', '- [x]');
348
+ }
349
+ else if (status === 'in-progress') {
350
+ return match.replace('- [ ]', '- [~]'); // Using ~ for in-progress
351
+ }
352
+ else if (status === 'failed') {
353
+ return match.replace('- [ ]', '- [!]'); // Using ! for failed
354
+ }
355
+ return match;
356
+ });
357
+ return hasChanges ? updatedContent : content;
358
+ }
359
+ /**
360
+ * Add new task
361
+ */
362
+ async addTask(task) {
363
+ const data = await this.loadOpenSpec();
364
+ const newTask = {
365
+ ...task,
366
+ id: randomUUID(),
367
+ createdAt: new Date().toISOString(),
368
+ updatedAt: new Date().toISOString(),
369
+ attempts: 0,
370
+ };
371
+ data.tasks.push(newTask);
372
+ this.data = data;
373
+ await this.saveOpenSpec();
374
+ return newTask.id;
375
+ }
376
+ /**
377
+ * Get task by ID
378
+ */
379
+ async getTask(taskId) {
380
+ const data = await this.loadOpenSpec();
381
+ return data.tasks.find((t) => t.id === taskId) || null;
382
+ }
383
+ /**
384
+ * Get task dependencies
385
+ */
386
+ async getTaskDependencies(taskId) {
387
+ const data = await this.loadOpenSpec();
388
+ const task = data.tasks.find((t) => t.id === taskId);
389
+ if (!task) {
390
+ return [];
391
+ }
392
+ return data.tasks.filter((t) => task.dependencies.includes(t.id));
393
+ }
394
+ /**
395
+ * Check if task dependencies are satisfied
396
+ */
397
+ async areDependenciesSatisfied(taskId) {
398
+ const dependencies = await this.getTaskDependencies(taskId);
399
+ return dependencies.every((dep) => dep.status === 'completed');
400
+ }
401
+ /**
402
+ * Get next available task
403
+ */
404
+ async getNextTask() {
405
+ const pendingTasks = await this.getTasksByPriority();
406
+ for (const task of pendingTasks) {
407
+ if (await this.areDependenciesSatisfied(task.id)) {
408
+ return task;
409
+ }
410
+ }
411
+ return null;
412
+ }
413
+ /**
414
+ * Increment task attempts
415
+ */
416
+ async incrementTaskAttempts(taskId) {
417
+ const data = await this.loadOpenSpec();
418
+ const task = data.tasks.find((t) => t.id === taskId);
419
+ if (task) {
420
+ task.attempts++;
421
+ task.updatedAt = new Date().toISOString();
422
+ this.data = data;
423
+ await this.saveOpenSpec();
424
+ }
425
+ }
426
+ /**
427
+ * Get task statistics
428
+ */
429
+ async getTaskStats() {
430
+ const data = await this.loadOpenSpec();
431
+ const stats = {
432
+ total: data.tasks.length + data.history.length,
433
+ pending: 0,
434
+ inProgress: 0,
435
+ completed: data.history.length,
436
+ failed: 0,
437
+ skipped: 0,
438
+ };
439
+ for (const task of data.tasks) {
440
+ if (task.status === 'in-progress') {
441
+ stats.inProgress++;
442
+ }
443
+ else {
444
+ stats[task.status]++;
445
+ }
446
+ }
447
+ return stats;
448
+ }
449
+ /**
450
+ * Generate ASCII dependency tree
451
+ */
452
+ async generateDependencyTree() {
453
+ const data = await this.loadOpenSpec();
454
+ const lines = [];
455
+ lines.push('Task Dependency Tree:');
456
+ lines.push('');
457
+ const visited = new Set();
458
+ const processing = new Set();
459
+ const buildTree = (taskId, depth = 0) => {
460
+ if (processing.has(taskId)) {
461
+ lines.push(`${' '.repeat(depth)}└─ ${taskId} (circular dependency)`);
462
+ return;
463
+ }
464
+ if (visited.has(taskId)) {
465
+ return;
466
+ }
467
+ processing.add(taskId);
468
+ visited.add(taskId);
469
+ const task = [...data.tasks, ...data.history].find((t) => t.id === taskId);
470
+ if (!task) {
471
+ processing.delete(taskId);
472
+ return;
473
+ }
474
+ const prefix = depth === 0 ? '├─' : '└─';
475
+ const status = task.status === 'completed'
476
+ ? '✓'
477
+ : task.status === 'in-progress'
478
+ ? '⚙'
479
+ : task.status === 'failed'
480
+ ? '✗'
481
+ : '○';
482
+ lines.push(`${' '.repeat(depth)}${prefix} ${status} ${task.title} (${task.status})`);
483
+ for (const depId of task.dependencies) {
484
+ buildTree(depId, depth + 1);
485
+ }
486
+ processing.delete(taskId);
487
+ };
488
+ // Start with tasks that have no dependencies
489
+ const allTasks = [...data.tasks, ...data.history];
490
+ const rootTasks = allTasks.filter((task) => task.dependencies.length === 0);
491
+ for (const task of rootTasks) {
492
+ buildTree(task.id);
493
+ }
494
+ return lines.join('\n');
495
+ }
496
+ /**
497
+ * Validate dependency graph for cycles
498
+ */
499
+ async validateDependencyGraph() {
500
+ const data = await this.loadOpenSpec();
501
+ const visited = new Set();
502
+ const processing = new Set();
503
+ const cycles = [];
504
+ const dfs = (taskId, path) => {
505
+ if (processing.has(taskId)) {
506
+ // Found a cycle
507
+ const cycleStart = path.indexOf(taskId);
508
+ cycles.push(path.slice(cycleStart));
509
+ return;
510
+ }
511
+ if (visited.has(taskId)) {
512
+ return;
513
+ }
514
+ visited.add(taskId);
515
+ processing.add(taskId);
516
+ const allTasks = [...data.tasks, ...data.history];
517
+ const task = allTasks.find((t) => t.id === taskId);
518
+ if (task) {
519
+ for (const depId of task.dependencies) {
520
+ dfs(depId, [...path, taskId]);
521
+ }
522
+ }
523
+ processing.delete(taskId);
524
+ };
525
+ // Check all tasks
526
+ const allTasks = [...data.tasks, ...data.history];
527
+ for (const task of allTasks) {
528
+ if (!visited.has(task.id)) {
529
+ dfs(task.id, []);
530
+ }
531
+ }
532
+ return {
533
+ valid: cycles.length === 0,
534
+ cycles,
535
+ };
536
+ }
537
+ /**
538
+ * Get tasks that can be executed in parallel
539
+ */
540
+ async getParallelExecutableTasks() {
541
+ const data = await this.loadOpenSpec();
542
+ const levels = [];
543
+ const processed = new Set();
544
+ const getLevel = (tasks, level = 0) => {
545
+ if (tasks.length === 0)
546
+ return;
547
+ if (!levels[level]) {
548
+ levels[level] = [];
549
+ }
550
+ const currentLevelTasks = [];
551
+ for (const task of tasks) {
552
+ if (processed.has(task.id))
553
+ continue;
554
+ const dependencies = data.tasks.filter((t) => task.dependencies.includes(t.id));
555
+ const allDependenciesProcessed = dependencies.every((dep) => processed.has(dep.id));
556
+ if (allDependenciesProcessed) {
557
+ currentLevelTasks.push(task);
558
+ processed.add(task.id);
559
+ }
560
+ }
561
+ if (currentLevelTasks.length > 0) {
562
+ levels[level] = currentLevelTasks;
563
+ getLevel(data.tasks.filter((t) => !processed.has(t.id)), level + 1);
564
+ }
565
+ };
566
+ getLevel(data.tasks.filter((t) => t.status === 'pending'));
567
+ return levels.filter((level) => level.length > 0);
568
+ }
569
+ /**
570
+ * Get execution order respecting dependencies
571
+ */
572
+ async getExecutionOrder() {
573
+ const parallelLevels = await this.getParallelExecutableTasks();
574
+ const executionOrder = [];
575
+ for (const level of parallelLevels) {
576
+ executionOrder.push(...level);
577
+ }
578
+ return executionOrder;
579
+ }
580
+ /**
581
+ * Check if task can be started (dependencies satisfied)
582
+ */
583
+ async canStartTask(taskId) {
584
+ const dependencies = await this.getTaskDependencies(taskId);
585
+ return dependencies.every((dep) => dep.status === 'completed');
586
+ }
587
+ /**
588
+ * Get blocking tasks (tasks that block the given task)
589
+ */
590
+ async getBlockingTasks(taskId) {
591
+ const data = await this.loadOpenSpec();
592
+ const task = data.tasks.find((t) => t.id === taskId);
593
+ if (!task) {
594
+ return [];
595
+ }
596
+ return data.tasks.filter((t) => task.dependencies.includes(t.id) && t.status !== 'completed');
597
+ }
598
+ }
599
+ /**
600
+ * Create a new OpenSpecManager instance
601
+ */
602
+ export function createOpenSpecManager(projectRoot) {
603
+ return new OpenSpecManager(projectRoot);
604
+ }
605
+ //# sourceMappingURL=openspec-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openspec-manager.js","sourceRoot":"","sources":["../../src/core/openspec-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface MigrationResult {
2
+ migrated: number;
3
+ skipped: number;
4
+ errors: string[];
5
+ migratedTasks: string[];
6
+ }
7
+ /**
8
+ * Migrate OpenSpec tasks to Rulebook format
9
+ */
10
+ export declare function migrateOpenSpecToRulebook(projectRoot: string, rulebookDir?: string): Promise<MigrationResult>;
11
+ /**
12
+ * Migrate OpenSpec archived tasks to Rulebook format
13
+ */
14
+ export declare function migrateOpenSpecArchives(projectRoot: string, rulebookDir?: string): Promise<MigrationResult>;
15
+ /**
16
+ * Remove /rulebook/OPENSPEC.md if it exists
17
+ */
18
+ export declare function removeOpenSpecRulebookFile(projectRoot: string, rulebookDir?: string): Promise<boolean>;
19
+ /**
20
+ * Remove OpenSpec commands from .cursor/commands/
21
+ */
22
+ export declare function removeOpenSpecCommands(projectRoot: string): Promise<number>;
23
+ /**
24
+ * Archive OpenSpec directory (move to archive)
25
+ */
26
+ export declare function archiveOpenSpecDirectory(projectRoot: string): Promise<boolean>;
27
+ //# sourceMappingURL=openspec-migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openspec-migrator.d.ts","sourceRoot":"","sources":["../../src/core/openspec-migrator.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAmB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAoG1B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAmB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAqG1B;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAmB,GAC/B,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBjF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBpF"}