@gitgov/core 1.0.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 (469) hide show
  1. package/README.md +303 -0
  2. package/dist/scripts/compile-json-to-types.d.ts +11 -0
  3. package/dist/scripts/compile-json-to-types.d.ts.map +1 -0
  4. package/dist/scripts/compile-json-to-types.js +129 -0
  5. package/dist/scripts/compile-json-to-types.js.map +1 -0
  6. package/dist/scripts/diagnose-duplicates.d.ts +7 -0
  7. package/dist/scripts/diagnose-duplicates.d.ts.map +1 -0
  8. package/dist/scripts/diagnose-duplicates.js +72 -0
  9. package/dist/scripts/diagnose-duplicates.js.map +1 -0
  10. package/dist/scripts/generate-indexes.d.ts +22 -0
  11. package/dist/scripts/generate-indexes.d.ts.map +1 -0
  12. package/dist/scripts/generate-indexes.js +168 -0
  13. package/dist/scripts/generate-indexes.js.map +1 -0
  14. package/dist/scripts/sync-schemas.d.ts +10 -0
  15. package/dist/scripts/sync-schemas.d.ts.map +1 -0
  16. package/dist/scripts/sync-schemas.js +84 -0
  17. package/dist/scripts/sync-schemas.js.map +1 -0
  18. package/dist/scripts/sync-workflow-configs.d.ts +11 -0
  19. package/dist/scripts/sync-workflow-configs.d.ts.map +1 -0
  20. package/dist/scripts/sync-workflow-configs.js +61 -0
  21. package/dist/scripts/sync-workflow-configs.js.map +1 -0
  22. package/dist/scripts/update-diagram.d.ts +7 -0
  23. package/dist/scripts/update-diagram.d.ts.map +1 -0
  24. package/dist/scripts/update-diagram.js +47 -0
  25. package/dist/scripts/update-diagram.js.map +1 -0
  26. package/dist/scripts/validate-schemas.d.ts +18 -0
  27. package/dist/scripts/validate-schemas.d.ts.map +1 -0
  28. package/dist/scripts/validate-schemas.js +313 -0
  29. package/dist/scripts/validate-schemas.js.map +1 -0
  30. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts +2 -0
  31. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts.map +1 -0
  32. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js +507 -0
  33. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js.map +1 -0
  34. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts +2 -0
  35. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts.map +1 -0
  36. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js +1282 -0
  37. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js.map +1 -0
  38. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts +10 -0
  39. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts.map +1 -0
  40. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js +144 -0
  41. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js.map +1 -0
  42. package/dist/src/adapters/backlog_adapter/index.d.ts +213 -0
  43. package/dist/src/adapters/backlog_adapter/index.d.ts.map +1 -0
  44. package/dist/src/adapters/backlog_adapter/index.js +924 -0
  45. package/dist/src/adapters/backlog_adapter/index.js.map +1 -0
  46. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts +2 -0
  47. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts.map +1 -0
  48. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js +505 -0
  49. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js.map +1 -0
  50. package/dist/src/adapters/changelog_adapter/index.d.ts +101 -0
  51. package/dist/src/adapters/changelog_adapter/index.d.ts.map +1 -0
  52. package/dist/src/adapters/changelog_adapter/index.js +197 -0
  53. package/dist/src/adapters/changelog_adapter/index.js.map +1 -0
  54. package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts +2 -0
  55. package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts.map +1 -0
  56. package/dist/src/adapters/execution_adapter/execution_adapter.test.js +266 -0
  57. package/dist/src/adapters/execution_adapter/execution_adapter.test.js.map +1 -0
  58. package/dist/src/adapters/execution_adapter/index.d.ts +90 -0
  59. package/dist/src/adapters/execution_adapter/index.d.ts.map +1 -0
  60. package/dist/src/adapters/execution_adapter/index.js +150 -0
  61. package/dist/src/adapters/execution_adapter/index.js.map +1 -0
  62. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts +2 -0
  63. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts.map +1 -0
  64. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js +256 -0
  65. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js.map +1 -0
  66. package/dist/src/adapters/feedback_adapter/index.d.ts +95 -0
  67. package/dist/src/adapters/feedback_adapter/index.d.ts.map +1 -0
  68. package/dist/src/adapters/feedback_adapter/index.js +192 -0
  69. package/dist/src/adapters/feedback_adapter/index.js.map +1 -0
  70. package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts +2 -0
  71. package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts.map +1 -0
  72. package/dist/src/adapters/identity_adapter/identity_adapter.test.js +624 -0
  73. package/dist/src/adapters/identity_adapter/identity_adapter.test.js.map +1 -0
  74. package/dist/src/adapters/identity_adapter/index.d.ts +82 -0
  75. package/dist/src/adapters/identity_adapter/index.d.ts.map +1 -0
  76. package/dist/src/adapters/identity_adapter/index.js +336 -0
  77. package/dist/src/adapters/identity_adapter/index.js.map +1 -0
  78. package/dist/src/adapters/index.d.ts +10 -0
  79. package/dist/src/adapters/index.d.ts.map +1 -0
  80. package/dist/src/adapters/index.js +10 -0
  81. package/dist/src/adapters/index.js.map +1 -0
  82. package/dist/src/adapters/indexer_adapter/index.d.ts +214 -0
  83. package/dist/src/adapters/indexer_adapter/index.d.ts.map +1 -0
  84. package/dist/src/adapters/indexer_adapter/index.js +643 -0
  85. package/dist/src/adapters/indexer_adapter/index.js.map +1 -0
  86. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts +2 -0
  87. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts.map +1 -0
  88. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js +409 -0
  89. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js.map +1 -0
  90. package/dist/src/adapters/metrics_adapter/index.d.ts +189 -0
  91. package/dist/src/adapters/metrics_adapter/index.d.ts.map +1 -0
  92. package/dist/src/adapters/metrics_adapter/index.js +592 -0
  93. package/dist/src/adapters/metrics_adapter/index.js.map +1 -0
  94. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts +2 -0
  95. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts.map +1 -0
  96. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js +558 -0
  97. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js.map +1 -0
  98. package/dist/src/adapters/project_adapter/index.d.ts +164 -0
  99. package/dist/src/adapters/project_adapter/index.d.ts.map +1 -0
  100. package/dist/src/adapters/project_adapter/index.js +445 -0
  101. package/dist/src/adapters/project_adapter/index.js.map +1 -0
  102. package/dist/src/adapters/project_adapter/project_adapter.test.d.ts +2 -0
  103. package/dist/src/adapters/project_adapter/project_adapter.test.d.ts.map +1 -0
  104. package/dist/src/adapters/project_adapter/project_adapter.test.js +627 -0
  105. package/dist/src/adapters/project_adapter/project_adapter.test.js.map +1 -0
  106. package/dist/src/adapters/workflow_methodology_adapter/index.d.ts +75 -0
  107. package/dist/src/adapters/workflow_methodology_adapter/index.d.ts.map +1 -0
  108. package/dist/src/adapters/workflow_methodology_adapter/index.js +205 -0
  109. package/dist/src/adapters/workflow_methodology_adapter/index.js.map +1 -0
  110. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts +2 -0
  111. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts.map +1 -0
  112. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js +463 -0
  113. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js.map +1 -0
  114. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts +2 -0
  115. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts.map +1 -0
  116. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js +287 -0
  117. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js.map +1 -0
  118. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts +2 -0
  119. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts.map +1 -0
  120. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js +278 -0
  121. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js.map +1 -0
  122. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_default.json +188 -0
  123. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_scrum.json +284 -0
  124. package/dist/src/config_manager/config_manager.test.d.ts +2 -0
  125. package/dist/src/config_manager/config_manager.test.d.ts.map +1 -0
  126. package/dist/src/config_manager/config_manager.test.js +321 -0
  127. package/dist/src/config_manager/config_manager.test.js.map +1 -0
  128. package/dist/src/config_manager/index.d.ts +107 -0
  129. package/dist/src/config_manager/index.d.ts.map +1 -0
  130. package/dist/src/config_manager/index.js +192 -0
  131. package/dist/src/config_manager/index.js.map +1 -0
  132. package/dist/src/crypto/checksum.d.ts +6 -0
  133. package/dist/src/crypto/checksum.d.ts.map +1 -0
  134. package/dist/src/crypto/checksum.js +38 -0
  135. package/dist/src/crypto/checksum.js.map +1 -0
  136. package/dist/src/crypto/checksum.test.d.ts +2 -0
  137. package/dist/src/crypto/checksum.test.d.ts.map +1 -0
  138. package/dist/src/crypto/checksum.test.js +167 -0
  139. package/dist/src/crypto/checksum.test.js.map +1 -0
  140. package/dist/src/crypto/index.d.ts +3 -0
  141. package/dist/src/crypto/index.d.ts.map +1 -0
  142. package/dist/src/crypto/index.js +3 -0
  143. package/dist/src/crypto/index.js.map +1 -0
  144. package/dist/src/crypto/signatures.d.ts +24 -0
  145. package/dist/src/crypto/signatures.d.ts.map +1 -0
  146. package/dist/src/crypto/signatures.js +67 -0
  147. package/dist/src/crypto/signatures.js.map +1 -0
  148. package/dist/src/crypto/signatures.test.d.ts +2 -0
  149. package/dist/src/crypto/signatures.test.d.ts.map +1 -0
  150. package/dist/src/crypto/signatures.test.js +378 -0
  151. package/dist/src/crypto/signatures.test.js.map +1 -0
  152. package/dist/src/diagram_generator/diagram_generator.d.ts +76 -0
  153. package/dist/src/diagram_generator/diagram_generator.d.ts.map +1 -0
  154. package/dist/src/diagram_generator/diagram_generator.js +233 -0
  155. package/dist/src/diagram_generator/diagram_generator.js.map +1 -0
  156. package/dist/src/diagram_generator/graph_validator.d.ts +19 -0
  157. package/dist/src/diagram_generator/graph_validator.d.ts.map +1 -0
  158. package/dist/src/diagram_generator/graph_validator.js +98 -0
  159. package/dist/src/diagram_generator/graph_validator.js.map +1 -0
  160. package/dist/src/diagram_generator/index.d.ts +4 -0
  161. package/dist/src/diagram_generator/index.d.ts.map +1 -0
  162. package/dist/src/diagram_generator/index.js +4 -0
  163. package/dist/src/diagram_generator/index.js.map +1 -0
  164. package/dist/src/diagram_generator/mermaid_renderer.d.ts +82 -0
  165. package/dist/src/diagram_generator/mermaid_renderer.d.ts.map +1 -0
  166. package/dist/src/diagram_generator/mermaid_renderer.js +306 -0
  167. package/dist/src/diagram_generator/mermaid_renderer.js.map +1 -0
  168. package/dist/src/diagram_generator/relationship_analyzer.d.ts +116 -0
  169. package/dist/src/diagram_generator/relationship_analyzer.d.ts.map +1 -0
  170. package/dist/src/diagram_generator/relationship_analyzer.js +381 -0
  171. package/dist/src/diagram_generator/relationship_analyzer.js.map +1 -0
  172. package/dist/src/event_bus/event_bus.d.ts +110 -0
  173. package/dist/src/event_bus/event_bus.d.ts.map +1 -0
  174. package/dist/src/event_bus/event_bus.js +161 -0
  175. package/dist/src/event_bus/event_bus.js.map +1 -0
  176. package/dist/src/event_bus/event_bus.test.d.ts +2 -0
  177. package/dist/src/event_bus/event_bus.test.d.ts.map +1 -0
  178. package/dist/src/event_bus/event_bus.test.js +332 -0
  179. package/dist/src/event_bus/event_bus.test.js.map +1 -0
  180. package/dist/src/event_bus/event_bus_integration.test.d.ts +2 -0
  181. package/dist/src/event_bus/event_bus_integration.test.d.ts.map +1 -0
  182. package/dist/src/event_bus/event_bus_integration.test.js +474 -0
  183. package/dist/src/event_bus/event_bus_integration.test.js.map +1 -0
  184. package/dist/src/event_bus/index.d.ts +3 -0
  185. package/dist/src/event_bus/index.d.ts.map +1 -0
  186. package/dist/src/event_bus/index.js +3 -0
  187. package/dist/src/event_bus/index.js.map +1 -0
  188. package/dist/src/event_bus/types.d.ts +203 -0
  189. package/dist/src/event_bus/types.d.ts.map +1 -0
  190. package/dist/src/event_bus/types.js +5 -0
  191. package/dist/src/event_bus/types.js.map +1 -0
  192. package/dist/src/factories/actor_factory.d.ts +6 -0
  193. package/dist/src/factories/actor_factory.d.ts.map +1 -0
  194. package/dist/src/factories/actor_factory.js +25 -0
  195. package/dist/src/factories/actor_factory.js.map +1 -0
  196. package/dist/src/factories/actor_factory.test.d.ts +2 -0
  197. package/dist/src/factories/actor_factory.test.d.ts.map +1 -0
  198. package/dist/src/factories/actor_factory.test.js +169 -0
  199. package/dist/src/factories/actor_factory.test.js.map +1 -0
  200. package/dist/src/factories/agent_factory.d.ts +6 -0
  201. package/dist/src/factories/agent_factory.d.ts.map +1 -0
  202. package/dist/src/factories/agent_factory.js +25 -0
  203. package/dist/src/factories/agent_factory.js.map +1 -0
  204. package/dist/src/factories/agent_factory.test.d.ts +2 -0
  205. package/dist/src/factories/agent_factory.test.d.ts.map +1 -0
  206. package/dist/src/factories/agent_factory.test.js +199 -0
  207. package/dist/src/factories/agent_factory.test.js.map +1 -0
  208. package/dist/src/factories/changelog_factory.d.ts +9 -0
  209. package/dist/src/factories/changelog_factory.d.ts.map +1 -0
  210. package/dist/src/factories/changelog_factory.js +46 -0
  211. package/dist/src/factories/changelog_factory.js.map +1 -0
  212. package/dist/src/factories/changelog_factory.test.d.ts +2 -0
  213. package/dist/src/factories/changelog_factory.test.d.ts.map +1 -0
  214. package/dist/src/factories/changelog_factory.test.js +368 -0
  215. package/dist/src/factories/changelog_factory.test.js.map +1 -0
  216. package/dist/src/factories/cycle_factory.d.ts +6 -0
  217. package/dist/src/factories/cycle_factory.d.ts.map +1 -0
  218. package/dist/src/factories/cycle_factory.js +28 -0
  219. package/dist/src/factories/cycle_factory.js.map +1 -0
  220. package/dist/src/factories/cycle_factory.test.d.ts +2 -0
  221. package/dist/src/factories/cycle_factory.test.d.ts.map +1 -0
  222. package/dist/src/factories/cycle_factory.test.js +175 -0
  223. package/dist/src/factories/cycle_factory.test.js.map +1 -0
  224. package/dist/src/factories/execution_factory.d.ts +9 -0
  225. package/dist/src/factories/execution_factory.d.ts.map +1 -0
  226. package/dist/src/factories/execution_factory.js +29 -0
  227. package/dist/src/factories/execution_factory.js.map +1 -0
  228. package/dist/src/factories/execution_factory.test.d.ts +2 -0
  229. package/dist/src/factories/execution_factory.test.d.ts.map +1 -0
  230. package/dist/src/factories/execution_factory.test.js +207 -0
  231. package/dist/src/factories/execution_factory.test.js.map +1 -0
  232. package/dist/src/factories/feedback_factory.d.ts +9 -0
  233. package/dist/src/factories/feedback_factory.d.ts.map +1 -0
  234. package/dist/src/factories/feedback_factory.js +30 -0
  235. package/dist/src/factories/feedback_factory.js.map +1 -0
  236. package/dist/src/factories/feedback_factory.test.d.ts +2 -0
  237. package/dist/src/factories/feedback_factory.test.d.ts.map +1 -0
  238. package/dist/src/factories/feedback_factory.test.js +256 -0
  239. package/dist/src/factories/feedback_factory.test.js.map +1 -0
  240. package/dist/src/factories/index.d.ts +9 -0
  241. package/dist/src/factories/index.d.ts.map +1 -0
  242. package/dist/src/factories/index.js +9 -0
  243. package/dist/src/factories/index.js.map +1 -0
  244. package/dist/src/factories/task_factory.d.ts +6 -0
  245. package/dist/src/factories/task_factory.d.ts.map +1 -0
  246. package/dist/src/factories/task_factory.js +30 -0
  247. package/dist/src/factories/task_factory.js.map +1 -0
  248. package/dist/src/factories/task_factory.test.d.ts +2 -0
  249. package/dist/src/factories/task_factory.test.d.ts.map +1 -0
  250. package/dist/src/factories/task_factory.test.js +197 -0
  251. package/dist/src/factories/task_factory.test.js.map +1 -0
  252. package/dist/src/factories/workflow_methodology_factory.d.ts +11 -0
  253. package/dist/src/factories/workflow_methodology_factory.d.ts.map +1 -0
  254. package/dist/src/factories/workflow_methodology_factory.js +173 -0
  255. package/dist/src/factories/workflow_methodology_factory.js.map +1 -0
  256. package/dist/src/factories/workflow_methodology_factory.test.d.ts +2 -0
  257. package/dist/src/factories/workflow_methodology_factory.test.d.ts.map +1 -0
  258. package/dist/src/factories/workflow_methodology_factory.test.js +244 -0
  259. package/dist/src/factories/workflow_methodology_factory.test.js.map +1 -0
  260. package/dist/src/index.d.ts +21 -0
  261. package/dist/src/index.d.ts.map +1 -0
  262. package/dist/src/index.js +23 -0
  263. package/dist/src/index.js.map +1 -0
  264. package/dist/src/integration/cycles_tasks_integration.test.d.ts +2 -0
  265. package/dist/src/integration/cycles_tasks_integration.test.d.ts.map +1 -0
  266. package/dist/src/integration/cycles_tasks_integration.test.js +258 -0
  267. package/dist/src/integration/cycles_tasks_integration.test.js.map +1 -0
  268. package/dist/src/integration/schema_integration.test.d.ts +8 -0
  269. package/dist/src/integration/schema_integration.test.d.ts.map +1 -0
  270. package/dist/src/integration/schema_integration.test.js +279 -0
  271. package/dist/src/integration/schema_integration.test.js.map +1 -0
  272. package/dist/src/logger/index.d.ts +2 -0
  273. package/dist/src/logger/index.d.ts.map +1 -0
  274. package/dist/src/logger/index.js +2 -0
  275. package/dist/src/logger/index.js.map +1 -0
  276. package/dist/src/logger/logger.d.ts +10 -0
  277. package/dist/src/logger/logger.d.ts.map +1 -0
  278. package/dist/src/logger/logger.js +48 -0
  279. package/dist/src/logger/logger.js.map +1 -0
  280. package/dist/src/schemas/errors.d.ts +28 -0
  281. package/dist/src/schemas/errors.d.ts.map +1 -0
  282. package/dist/src/schemas/errors.js +31 -0
  283. package/dist/src/schemas/errors.js.map +1 -0
  284. package/dist/src/schemas/generated/actor_record_schema.json +91 -0
  285. package/dist/src/schemas/generated/agent_record_schema.json +142 -0
  286. package/dist/src/schemas/generated/changelog_record_schema.json +227 -0
  287. package/dist/src/schemas/generated/cycle_record_schema.json +80 -0
  288. package/dist/src/schemas/generated/embedded_metadata_schema.json +318 -0
  289. package/dist/src/schemas/generated/execution_record_schema.json +89 -0
  290. package/dist/src/schemas/generated/feedback_record_schema.json +83 -0
  291. package/dist/src/schemas/generated/index.d.ts +2221 -0
  292. package/dist/src/schemas/generated/index.d.ts.map +1 -0
  293. package/dist/src/schemas/generated/index.js +48 -0
  294. package/dist/src/schemas/generated/index.js.map +1 -0
  295. package/dist/src/schemas/generated/task_record_schema.json +103 -0
  296. package/dist/src/schemas/generated/workflow_methodology_record_schema.json +393 -0
  297. package/dist/src/schemas/index.d.ts +4 -0
  298. package/dist/src/schemas/index.d.ts.map +1 -0
  299. package/dist/src/schemas/index.js +4 -0
  300. package/dist/src/schemas/index.js.map +1 -0
  301. package/dist/src/schemas/schema_cache.d.ts +39 -0
  302. package/dist/src/schemas/schema_cache.d.ts.map +1 -0
  303. package/dist/src/schemas/schema_cache.js +109 -0
  304. package/dist/src/schemas/schema_cache.js.map +1 -0
  305. package/dist/src/schemas/schema_cache.test.d.ts +2 -0
  306. package/dist/src/schemas/schema_cache.test.d.ts.map +1 -0
  307. package/dist/src/schemas/schema_cache.test.js +163 -0
  308. package/dist/src/schemas/schema_cache.test.js.map +1 -0
  309. package/dist/src/store/index.d.ts +2 -0
  310. package/dist/src/store/index.d.ts.map +1 -0
  311. package/dist/src/store/index.js +2 -0
  312. package/dist/src/store/index.js.map +1 -0
  313. package/dist/src/store/record_store.d.ts +30 -0
  314. package/dist/src/store/record_store.d.ts.map +1 -0
  315. package/dist/src/store/record_store.js +83 -0
  316. package/dist/src/store/record_store.js.map +1 -0
  317. package/dist/src/store/record_store.test.d.ts +2 -0
  318. package/dist/src/store/record_store.test.d.ts.map +1 -0
  319. package/dist/src/store/record_store.test.js +646 -0
  320. package/dist/src/store/record_store.test.js.map +1 -0
  321. package/dist/src/types/common.types.d.ts +43 -0
  322. package/dist/src/types/common.types.d.ts.map +1 -0
  323. package/dist/src/types/common.types.js +13 -0
  324. package/dist/src/types/common.types.js.map +1 -0
  325. package/dist/src/types/embedded.types.d.ts +17 -0
  326. package/dist/src/types/embedded.types.d.ts.map +1 -0
  327. package/dist/src/types/embedded.types.js +2 -0
  328. package/dist/src/types/embedded.types.js.map +1 -0
  329. package/dist/src/types/generated/actor_record.d.ts +45 -0
  330. package/dist/src/types/generated/actor_record.d.ts.map +1 -0
  331. package/dist/src/types/generated/actor_record.js +7 -0
  332. package/dist/src/types/generated/actor_record.js.map +1 -0
  333. package/dist/src/types/generated/agent_record.d.ts +40 -0
  334. package/dist/src/types/generated/agent_record.d.ts.map +1 -0
  335. package/dist/src/types/generated/agent_record.js +7 -0
  336. package/dist/src/types/generated/agent_record.js.map +1 -0
  337. package/dist/src/types/generated/changelog_record.d.ts +100 -0
  338. package/dist/src/types/generated/changelog_record.d.ts.map +1 -0
  339. package/dist/src/types/generated/changelog_record.js +7 -0
  340. package/dist/src/types/generated/changelog_record.js.map +1 -0
  341. package/dist/src/types/generated/cycle_record.d.ts +36 -0
  342. package/dist/src/types/generated/cycle_record.d.ts.map +1 -0
  343. package/dist/src/types/generated/cycle_record.js +7 -0
  344. package/dist/src/types/generated/cycle_record.js.map +1 -0
  345. package/dist/src/types/generated/embedded_metadata.d.ts +94 -0
  346. package/dist/src/types/generated/embedded_metadata.d.ts.map +1 -0
  347. package/dist/src/types/generated/embedded_metadata.js +7 -0
  348. package/dist/src/types/generated/embedded_metadata.js.map +1 -0
  349. package/dist/src/types/generated/execution_record.d.ts +39 -0
  350. package/dist/src/types/generated/execution_record.d.ts.map +1 -0
  351. package/dist/src/types/generated/execution_record.js +7 -0
  352. package/dist/src/types/generated/execution_record.js.map +1 -0
  353. package/dist/src/types/generated/feedback_record.d.ts +43 -0
  354. package/dist/src/types/generated/feedback_record.d.ts.map +1 -0
  355. package/dist/src/types/generated/feedback_record.js +7 -0
  356. package/dist/src/types/generated/feedback_record.js.map +1 -0
  357. package/dist/src/types/generated/index.d.ts +15 -0
  358. package/dist/src/types/generated/index.d.ts.map +1 -0
  359. package/dist/src/types/generated/index.js +15 -0
  360. package/dist/src/types/generated/index.js.map +1 -0
  361. package/dist/src/types/generated/task_record.d.ts +47 -0
  362. package/dist/src/types/generated/task_record.d.ts.map +1 -0
  363. package/dist/src/types/generated/task_record.js +7 -0
  364. package/dist/src/types/generated/task_record.js.map +1 -0
  365. package/dist/src/types/generated/workflow_methodology_record.d.ts +211 -0
  366. package/dist/src/types/generated/workflow_methodology_record.d.ts.map +1 -0
  367. package/dist/src/types/generated/workflow_methodology_record.js +7 -0
  368. package/dist/src/types/generated/workflow_methodology_record.js.map +1 -0
  369. package/dist/src/types/index.d.ts +4 -0
  370. package/dist/src/types/index.d.ts.map +1 -0
  371. package/dist/src/types/index.js +4 -0
  372. package/dist/src/types/index.js.map +1 -0
  373. package/dist/src/utils/id_generator.d.ts +44 -0
  374. package/dist/src/utils/id_generator.d.ts.map +1 -0
  375. package/dist/src/utils/id_generator.js +107 -0
  376. package/dist/src/utils/id_generator.js.map +1 -0
  377. package/dist/src/utils/id_generator.test.d.ts +2 -0
  378. package/dist/src/utils/id_generator.test.d.ts.map +1 -0
  379. package/dist/src/utils/id_generator.test.js +100 -0
  380. package/dist/src/utils/id_generator.test.js.map +1 -0
  381. package/dist/src/utils/index.d.ts +2 -0
  382. package/dist/src/utils/index.d.ts.map +1 -0
  383. package/dist/src/utils/index.js +3 -0
  384. package/dist/src/utils/index.js.map +1 -0
  385. package/dist/src/validation/actor_validator.d.ts +21 -0
  386. package/dist/src/validation/actor_validator.d.ts.map +1 -0
  387. package/dist/src/validation/actor_validator.js +48 -0
  388. package/dist/src/validation/actor_validator.js.map +1 -0
  389. package/dist/src/validation/actor_validator.test.d.ts +2 -0
  390. package/dist/src/validation/actor_validator.test.d.ts.map +1 -0
  391. package/dist/src/validation/actor_validator.test.js +83 -0
  392. package/dist/src/validation/actor_validator.test.js.map +1 -0
  393. package/dist/src/validation/agent_validator.d.ts +30 -0
  394. package/dist/src/validation/agent_validator.d.ts.map +1 -0
  395. package/dist/src/validation/agent_validator.js +66 -0
  396. package/dist/src/validation/agent_validator.js.map +1 -0
  397. package/dist/src/validation/agent_validator.test.d.ts +2 -0
  398. package/dist/src/validation/agent_validator.test.d.ts.map +1 -0
  399. package/dist/src/validation/agent_validator.test.js +73 -0
  400. package/dist/src/validation/agent_validator.test.js.map +1 -0
  401. package/dist/src/validation/changelog_validator.d.ts +23 -0
  402. package/dist/src/validation/changelog_validator.d.ts.map +1 -0
  403. package/dist/src/validation/changelog_validator.js +58 -0
  404. package/dist/src/validation/changelog_validator.js.map +1 -0
  405. package/dist/src/validation/changelog_validator.test.d.ts +2 -0
  406. package/dist/src/validation/changelog_validator.test.d.ts.map +1 -0
  407. package/dist/src/validation/changelog_validator.test.js +401 -0
  408. package/dist/src/validation/changelog_validator.test.js.map +1 -0
  409. package/dist/src/validation/common.d.ts +10 -0
  410. package/dist/src/validation/common.d.ts.map +1 -0
  411. package/dist/src/validation/common.js +12 -0
  412. package/dist/src/validation/common.js.map +1 -0
  413. package/dist/src/validation/cycle_validator.d.ts +24 -0
  414. package/dist/src/validation/cycle_validator.d.ts.map +1 -0
  415. package/dist/src/validation/cycle_validator.js +51 -0
  416. package/dist/src/validation/cycle_validator.js.map +1 -0
  417. package/dist/src/validation/cycle_validator.test.d.ts +2 -0
  418. package/dist/src/validation/cycle_validator.test.d.ts.map +1 -0
  419. package/dist/src/validation/cycle_validator.test.js +182 -0
  420. package/dist/src/validation/cycle_validator.test.js.map +1 -0
  421. package/dist/src/validation/embedded_metadata_validator.d.ts +26 -0
  422. package/dist/src/validation/embedded_metadata_validator.d.ts.map +1 -0
  423. package/dist/src/validation/embedded_metadata_validator.js +122 -0
  424. package/dist/src/validation/embedded_metadata_validator.js.map +1 -0
  425. package/dist/src/validation/embedded_metadata_validator.test.d.ts +2 -0
  426. package/dist/src/validation/embedded_metadata_validator.test.d.ts.map +1 -0
  427. package/dist/src/validation/embedded_metadata_validator.test.js +316 -0
  428. package/dist/src/validation/embedded_metadata_validator.test.js.map +1 -0
  429. package/dist/src/validation/errors.d.ts +67 -0
  430. package/dist/src/validation/errors.d.ts.map +1 -0
  431. package/dist/src/validation/errors.js +83 -0
  432. package/dist/src/validation/errors.js.map +1 -0
  433. package/dist/src/validation/execution_validator.d.ts +23 -0
  434. package/dist/src/validation/execution_validator.d.ts.map +1 -0
  435. package/dist/src/validation/execution_validator.js +58 -0
  436. package/dist/src/validation/execution_validator.js.map +1 -0
  437. package/dist/src/validation/execution_validator.test.d.ts +2 -0
  438. package/dist/src/validation/execution_validator.test.d.ts.map +1 -0
  439. package/dist/src/validation/execution_validator.test.js +167 -0
  440. package/dist/src/validation/execution_validator.test.js.map +1 -0
  441. package/dist/src/validation/feedback_validator.d.ts +23 -0
  442. package/dist/src/validation/feedback_validator.d.ts.map +1 -0
  443. package/dist/src/validation/feedback_validator.js +58 -0
  444. package/dist/src/validation/feedback_validator.js.map +1 -0
  445. package/dist/src/validation/feedback_validator.test.d.ts +2 -0
  446. package/dist/src/validation/feedback_validator.test.d.ts.map +1 -0
  447. package/dist/src/validation/feedback_validator.test.js +131 -0
  448. package/dist/src/validation/feedback_validator.test.js.map +1 -0
  449. package/dist/src/validation/index.d.ts +11 -0
  450. package/dist/src/validation/index.d.ts.map +1 -0
  451. package/dist/src/validation/index.js +10 -0
  452. package/dist/src/validation/index.js.map +1 -0
  453. package/dist/src/validation/task_validator.d.ts +24 -0
  454. package/dist/src/validation/task_validator.d.ts.map +1 -0
  455. package/dist/src/validation/task_validator.js +50 -0
  456. package/dist/src/validation/task_validator.js.map +1 -0
  457. package/dist/src/validation/task_validator.test.d.ts +2 -0
  458. package/dist/src/validation/task_validator.test.d.ts.map +1 -0
  459. package/dist/src/validation/task_validator.test.js +185 -0
  460. package/dist/src/validation/task_validator.test.js.map +1 -0
  461. package/dist/src/validation/workflow_methodology_validator.d.ts +32 -0
  462. package/dist/src/validation/workflow_methodology_validator.d.ts.map +1 -0
  463. package/dist/src/validation/workflow_methodology_validator.js +91 -0
  464. package/dist/src/validation/workflow_methodology_validator.js.map +1 -0
  465. package/dist/src/validation/workflow_methodology_validator.test.d.ts +2 -0
  466. package/dist/src/validation/workflow_methodology_validator.test.d.ts.map +1 -0
  467. package/dist/src/validation/workflow_methodology_validator.test.js +229 -0
  468. package/dist/src/validation/workflow_methodology_validator.test.js.map +1 -0
  469. package/package.json +63 -0
@@ -0,0 +1,321 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as path from 'path';
3
+ import { ConfigManager } from './index';
4
+ // Mock filesystem operations
5
+ jest.mock('fs', () => ({
6
+ promises: {
7
+ readFile: jest.fn(),
8
+ writeFile: jest.fn(),
9
+ },
10
+ existsSync: jest.fn(),
11
+ }));
12
+ const mockedFs = jest.mocked(fs);
13
+ const mockedExistsSync = jest.mocked(require('fs').existsSync);
14
+ describe('ConfigManager', () => {
15
+ let configManager;
16
+ let tempDir;
17
+ beforeEach(() => {
18
+ jest.clearAllMocks();
19
+ tempDir = '/test/project';
20
+ configManager = new ConfigManager(tempDir);
21
+ // Reset project root cache
22
+ global.projectRoot = null;
23
+ });
24
+ // --- Configuration Methods (EARS-1 to EARS-6) ---
25
+ describe('loadConfig', () => {
26
+ it('[EARS-1] WHEN loadConfig is invoked with valid config.json file, THE SYSTEM SHALL return complete GitGovConfig object', async () => {
27
+ const mockConfig = {
28
+ protocolVersion: '1.0',
29
+ projectId: 'test-project-123',
30
+ projectName: 'Test Project',
31
+ rootCycle: 'root-cycle-456',
32
+ blueprints: { root: './blueprints' },
33
+ state: { branch: 'gitgov-state' },
34
+ cloud: { projectId: 'cloud-123', providerMappings: { github: 'repo-456' } }
35
+ };
36
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(mockConfig));
37
+ const result = await configManager.loadConfig();
38
+ expect(result).toEqual(mockConfig);
39
+ expect(mockedFs.readFile).toHaveBeenCalledWith(path.join(tempDir, '.gitgov', 'config.json'), 'utf-8');
40
+ });
41
+ it('[EARS-2] WHEN loadConfig is invoked with non-existent config.json file, THE SYSTEM SHALL return null without throwing error', async () => {
42
+ mockedFs.readFile.mockRejectedValue(new Error('ENOENT: no such file or directory'));
43
+ const result = await configManager.loadConfig();
44
+ expect(result).toBeNull();
45
+ });
46
+ it('[EARS-3] WHEN loadConfig is invoked with invalid JSON in config.json, THE SYSTEM SHALL return null without throwing error', async () => {
47
+ mockedFs.readFile.mockResolvedValue('{ invalid json }');
48
+ const result = await configManager.loadConfig();
49
+ expect(result).toBeNull();
50
+ });
51
+ });
52
+ describe('getRootCycle', () => {
53
+ it('[EARS-4] WHEN getRootCycle is invoked with configuration that has rootCycle defined, THE SYSTEM SHALL return the root cycle ID', async () => {
54
+ const mockConfig = {
55
+ protocolVersion: '1.0',
56
+ projectId: 'test-project',
57
+ projectName: 'Test',
58
+ rootCycle: 'root-cycle-123'
59
+ };
60
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(mockConfig));
61
+ const result = await configManager.getRootCycle();
62
+ expect(result).toBe('root-cycle-123');
63
+ });
64
+ it('[EARS-5] WHEN getRootCycle is invoked with configuration without rootCycle defined, THE SYSTEM SHALL return null', async () => {
65
+ // Note: This test simulates an invalid/incomplete config.json file
66
+ // In practice, rootCycle is obligatory and created during 'gitgov init'
67
+ const incompleteConfig = {
68
+ protocolVersion: '1.0',
69
+ projectId: 'test-project',
70
+ projectName: 'Test'
71
+ // Missing rootCycle - invalid config
72
+ };
73
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(incompleteConfig));
74
+ const result = await configManager.getRootCycle();
75
+ expect(result).toBeNull();
76
+ });
77
+ });
78
+ describe('getProjectInfo', () => {
79
+ it('[EARS-6] WHEN getProjectInfo is invoked with valid configuration, THE SYSTEM SHALL return object with projectId and projectName', async () => {
80
+ const mockConfig = {
81
+ protocolVersion: '1.0',
82
+ projectId: 'project-456',
83
+ projectName: 'My Project',
84
+ rootCycle: 'root-cycle-789'
85
+ };
86
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(mockConfig));
87
+ const result = await configManager.getProjectInfo();
88
+ expect(result).toEqual({
89
+ id: 'project-456',
90
+ name: 'My Project'
91
+ });
92
+ });
93
+ });
94
+ // --- Session Methods (EARS-7 to EARS-14) ---
95
+ describe('loadSession', () => {
96
+ it('[EARS-7] WHEN loadSession is invoked with valid .session.json file, THE SYSTEM SHALL return complete GitGovSession object', async () => {
97
+ const mockSession = {
98
+ cloud: { sessionToken: 'jwt-token-123' },
99
+ lastSession: { actorId: 'human:camilo', timestamp: '2025-01-09T10:00:00Z' },
100
+ actorState: {
101
+ 'human:camilo': { activeTaskId: 'task-123', activeCycleId: 'cycle-456', lastSync: '2025-01-09T09:30:00Z' }
102
+ }
103
+ };
104
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(mockSession));
105
+ const result = await configManager.loadSession();
106
+ expect(result).toEqual(mockSession);
107
+ expect(mockedFs.readFile).toHaveBeenCalledWith(path.join(tempDir, '.gitgov', '.session.json'), 'utf-8');
108
+ });
109
+ it('[EARS-8] WHEN loadSession is invoked with non-existent .session.json file, THE SYSTEM SHALL return null without throwing error', async () => {
110
+ mockedFs.readFile.mockRejectedValue(new Error('ENOENT: no such file or directory'));
111
+ const result = await configManager.loadSession();
112
+ expect(result).toBeNull();
113
+ });
114
+ });
115
+ describe('getActorState', () => {
116
+ it('[EARS-9] WHEN getActorState is invoked with actorId existing in session, THE SYSTEM SHALL return actor state', async () => {
117
+ const mockSession = {
118
+ actorState: {
119
+ 'human:camilo': { activeTaskId: 'task-789', activeCycleId: 'cycle-101', lastSync: '2025-01-09T10:15:00Z' }
120
+ }
121
+ };
122
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(mockSession));
123
+ const result = await configManager.getActorState('human:camilo');
124
+ expect(result).toEqual({
125
+ activeTaskId: 'task-789',
126
+ activeCycleId: 'cycle-101',
127
+ lastSync: '2025-01-09T10:15:00Z'
128
+ });
129
+ });
130
+ it('[EARS-10] WHEN getActorState is invoked with non-existent actorId, THE SYSTEM SHALL return null', async () => {
131
+ const mockSession = {
132
+ actorState: {
133
+ 'human:alice': { activeTaskId: 'task-999' }
134
+ }
135
+ };
136
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(mockSession));
137
+ const result = await configManager.getActorState('human:bob');
138
+ expect(result).toBeNull();
139
+ });
140
+ });
141
+ describe('updateActorState', () => {
142
+ it('[EARS-11] WHEN updateActorState is invoked, THE SYSTEM SHALL merge partial state with existing state and persist', async () => {
143
+ const existingSession = {
144
+ actorState: {
145
+ 'human:camilo': { activeTaskId: 'task-old', activeCycleId: 'cycle-old', lastSync: '2025-01-08T10:00:00Z' }
146
+ }
147
+ };
148
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(existingSession));
149
+ mockedFs.writeFile.mockResolvedValue();
150
+ const partialState = { activeTaskId: 'task-new' };
151
+ await configManager.updateActorState('human:camilo', partialState);
152
+ expect(mockedFs.writeFile).toHaveBeenCalledWith(path.join(tempDir, '.gitgov', '.session.json'), expect.stringContaining('task-new'), 'utf-8');
153
+ expect(mockedFs.writeFile).toHaveBeenCalledWith(path.join(tempDir, '.gitgov', '.session.json'), expect.stringContaining('cycle-old'), 'utf-8');
154
+ });
155
+ it('[EARS-12] WHEN updateActorState is invoked with non-existent session, THE SYSTEM SHALL create new session with provided state', async () => {
156
+ mockedFs.readFile.mockRejectedValue(new Error('ENOENT'));
157
+ mockedFs.writeFile.mockResolvedValue();
158
+ const newState = { activeTaskId: 'task-first', activeCycleId: 'cycle-first' };
159
+ await configManager.updateActorState('human:new-user', newState);
160
+ expect(mockedFs.writeFile).toHaveBeenCalledWith(path.join(tempDir, '.gitgov', '.session.json'), expect.stringContaining('human:new-user'), 'utf-8');
161
+ expect(mockedFs.writeFile).toHaveBeenCalledWith(path.join(tempDir, '.gitgov', '.session.json'), expect.stringContaining('task-first'), 'utf-8');
162
+ });
163
+ });
164
+ describe('getCloudSessionToken', () => {
165
+ it('[EARS-13] WHEN getCloudSessionToken is invoked with token configured, THE SYSTEM SHALL return the session token', async () => {
166
+ const mockSession = {
167
+ cloud: { sessionToken: 'jwt-token-xyz' }
168
+ };
169
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(mockSession));
170
+ const result = await configManager.getCloudSessionToken();
171
+ expect(result).toBe('jwt-token-xyz');
172
+ });
173
+ it('[EARS-14] WHEN getCloudSessionToken is invoked without token configured, THE SYSTEM SHALL return null', async () => {
174
+ const mockSession = {
175
+ lastSession: { actorId: 'human:test', timestamp: '2025-01-09T10:00:00Z' }
176
+ // No cloud.sessionToken
177
+ };
178
+ mockedFs.readFile.mockResolvedValue(JSON.stringify(mockSession));
179
+ const result = await configManager.getCloudSessionToken();
180
+ expect(result).toBeNull();
181
+ });
182
+ });
183
+ // --- Static Utility Methods (EARS-15 to EARS-20) ---
184
+ describe('findProjectRoot', () => {
185
+ beforeEach(() => {
186
+ // Reset project root cache before each test
187
+ global.projectRoot = null;
188
+ });
189
+ it('[EARS-15] WHEN findProjectRoot is invoked from directory within Git project, THE SYSTEM SHALL return absolute path to root directory', () => {
190
+ const startPath = '/test/project/src/components';
191
+ const rootPath = '/test/project';
192
+ mockedExistsSync.mockImplementation((checkPath) => {
193
+ return checkPath === path.join(rootPath, '.git');
194
+ });
195
+ const result = ConfigManager.findProjectRoot(startPath);
196
+ expect(result).toBe(rootPath);
197
+ });
198
+ it('[EARS-16] WHEN findProjectRoot is invoked from directory outside Git project, THE SYSTEM SHALL return null', () => {
199
+ mockedExistsSync.mockReturnValue(false);
200
+ // Reset cache for this specific test
201
+ global.projectRoot = null;
202
+ const result = ConfigManager.findProjectRoot('/some/random/path');
203
+ expect(result).toBeNull();
204
+ });
205
+ });
206
+ describe('findGitgovRoot - Critical for CLI Directory Search', () => {
207
+ it('[CRITICAL-BUG-PREVENTION] should find .gitgov when executing from subdirectory', () => {
208
+ // This test ensures CLI commands work from any subdirectory
209
+ const rootPath = '/Users/camilo/solo-hub';
210
+ const subPath = '/Users/camilo/solo-hub/packages/cli';
211
+ // Mock existsSync to return true for .gitgov at root
212
+ mockedExistsSync.mockImplementation((path) => {
213
+ return path === '/Users/camilo/solo-hub/.gitgov';
214
+ });
215
+ const result = ConfigManager.findGitgovRoot(subPath);
216
+ expect(result).toBe(rootPath);
217
+ });
218
+ it('[CRITICAL-BUG-PREVENTION] should NOT find parent .gitgov when doing init', () => {
219
+ // This test ensures init doesn't accidentally find parent .gitgov
220
+ // When user wants to create NEW project in subdirectory
221
+ const currentPath = '/Users/camilo/new-project';
222
+ // Mock: parent has .gitgov but current doesn't
223
+ mockedExistsSync.mockImplementation((path) => {
224
+ if (path === '/Users/camilo/solo-hub/.gitgov') {
225
+ return true; // Parent has .gitgov
226
+ }
227
+ if (path === '/Users/camilo/new-project/.gitgov') {
228
+ return false; // Current doesn't have .gitgov
229
+ }
230
+ if (path === '/Users/camilo/new-project/.git') {
231
+ return true; // Current has .git (valid for init)
232
+ }
233
+ return false;
234
+ });
235
+ const result = ConfigManager.findGitgovRoot(currentPath);
236
+ // Should find .git in current directory, NOT .gitgov in parent
237
+ expect(result).toBe(currentPath);
238
+ });
239
+ });
240
+ describe('findGitgovRoot', () => {
241
+ beforeEach(() => {
242
+ // Reset project root cache before each test
243
+ global.projectRoot = null;
244
+ });
245
+ it('should find .gitgov directory when searching upward', () => {
246
+ const rootPath = '/test/project';
247
+ const subPath = '/test/project/packages/cli';
248
+ // Mock existsSync to return true for .gitgov at root
249
+ mockedExistsSync.mockImplementation((path) => {
250
+ return path === '/test/project/.gitgov';
251
+ });
252
+ const result = ConfigManager.findGitgovRoot(subPath);
253
+ expect(result).toBe(rootPath);
254
+ });
255
+ it('should find .git directory when no .gitgov exists (for init)', () => {
256
+ const rootPath = '/test/project';
257
+ const subPath = '/test/project/packages/cli';
258
+ // Mock existsSync to return true for .git at root
259
+ mockedExistsSync.mockImplementation((path) => {
260
+ return path === '/test/project/.git';
261
+ });
262
+ const result = ConfigManager.findGitgovRoot(subPath);
263
+ expect(result).toBe(rootPath);
264
+ });
265
+ it('should prefer .gitgov over .git when both exist', () => {
266
+ const rootPath = '/test/project';
267
+ const subPath = '/test/project/packages/cli';
268
+ // Mock existsSync to return true for both
269
+ mockedExistsSync.mockImplementation((path) => {
270
+ return path === '/test/project/.gitgov' || path === '/test/project/.git';
271
+ });
272
+ const result = ConfigManager.findGitgovRoot(subPath);
273
+ expect(result).toBe(rootPath);
274
+ });
275
+ it('should return null when neither .gitgov nor .git found', () => {
276
+ const subPath = '/test/project/packages/cli';
277
+ // Mock existsSync to always return false
278
+ mockedExistsSync.mockReturnValue(false);
279
+ const result = ConfigManager.findGitgovRoot(subPath);
280
+ expect(result).toBeNull();
281
+ });
282
+ });
283
+ describe('getGitgovPath', () => {
284
+ beforeEach(() => {
285
+ // Reset project root cache before each test
286
+ global.projectRoot = null;
287
+ });
288
+ it('[EARS-17] WHEN getGitgovPath is invoked from GitGovernance project, THE SYSTEM SHALL return absolute path to .gitgov directory', () => {
289
+ const rootPath = '/test/project';
290
+ // Mock findGitgovRoot to return a specific path
291
+ jest.spyOn(ConfigManager, 'findGitgovRoot').mockReturnValue(rootPath);
292
+ const result = ConfigManager.getGitgovPath();
293
+ expect(result).toBe(path.join(rootPath, '.gitgov'));
294
+ });
295
+ it('[EARS-18] WHEN getGitgovPath is invoked outside GitGovernance project, THE SYSTEM SHALL throw descriptive Error', () => {
296
+ // Mock findGitgovRoot to return null
297
+ jest.spyOn(ConfigManager, 'findGitgovRoot').mockReturnValue(null);
298
+ expect(() => ConfigManager.getGitgovPath()).toThrow('Could not find project root. Make sure you are inside a GitGovernance repository.');
299
+ });
300
+ });
301
+ describe('isGitgovProject', () => {
302
+ beforeEach(() => {
303
+ // Reset project root cache before each test
304
+ global.projectRoot = null;
305
+ });
306
+ it('[EARS-19] WHEN isGitgovProject is invoked from GitGovernance project, THE SYSTEM SHALL return true', () => {
307
+ const rootPath = '/test/project';
308
+ // Mock getGitgovPath to return a valid path and existsSync to return true
309
+ jest.spyOn(ConfigManager, 'getGitgovPath').mockReturnValue(path.join(rootPath, '.gitgov'));
310
+ mockedExistsSync.mockReturnValue(true);
311
+ const result = ConfigManager.isGitgovProject();
312
+ expect(result).toBe(true);
313
+ });
314
+ it('[EARS-20] WHEN isGitgovProject is invoked outside GitGovernance project, THE SYSTEM SHALL return false', () => {
315
+ mockedExistsSync.mockReturnValue(false);
316
+ const result = ConfigManager.isGitgovProject();
317
+ expect(result).toBe(false);
318
+ });
319
+ });
320
+ });
321
+ //# sourceMappingURL=config_manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config_manager.test.js","sourceRoot":"","sources":["../../../src/config_manager/config_manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * GitGovernance Configuration Types
3
+ * Based on config_file.md blueprint
4
+ */
5
+ export interface GitGovConfig {
6
+ protocolVersion: string;
7
+ projectId: string;
8
+ projectName: string;
9
+ rootCycle: string;
10
+ blueprints?: {
11
+ root?: string;
12
+ };
13
+ state?: {
14
+ branch?: string;
15
+ };
16
+ cloud?: {
17
+ projectId?: string;
18
+ providerMappings?: Record<string, string>;
19
+ };
20
+ }
21
+ /**
22
+ * GitGovernance Session State Types
23
+ * Based on session_state.md blueprint
24
+ */
25
+ export interface ActorState {
26
+ activeTaskId?: string;
27
+ activeCycleId?: string;
28
+ lastSync?: string;
29
+ [key: string]: any;
30
+ }
31
+ export interface GitGovSession {
32
+ cloud?: {
33
+ sessionToken?: string;
34
+ };
35
+ lastSession?: {
36
+ actorId: string;
37
+ timestamp: string;
38
+ };
39
+ actorState?: Record<string, ActorState>;
40
+ }
41
+ /**
42
+ * Configuration Manager Class
43
+ * Provides typed access to GitGovernance configuration and session state
44
+ */
45
+ export declare class ConfigManager {
46
+ private configPath;
47
+ private sessionPath;
48
+ constructor(projectRootPath?: string);
49
+ /**
50
+ * Load GitGovernance configuration
51
+ */
52
+ loadConfig(): Promise<GitGovConfig | null>;
53
+ /**
54
+ * Load GitGovernance session state
55
+ */
56
+ loadSession(): Promise<GitGovSession | null>;
57
+ /**
58
+ * Get root cycle from configuration
59
+ */
60
+ getRootCycle(): Promise<string | null>;
61
+ /**
62
+ * Get project information from configuration
63
+ */
64
+ getProjectInfo(): Promise<{
65
+ id: string;
66
+ name: string;
67
+ } | null>;
68
+ /**
69
+ * Get actor state for a specific actor
70
+ */
71
+ getActorState(actorId: string): Promise<ActorState | null>;
72
+ /**
73
+ * Update actor state for a specific actor
74
+ */
75
+ updateActorState(actorId: string, state: Partial<ActorState>): Promise<void>;
76
+ /**
77
+ * Get cloud session token
78
+ */
79
+ getCloudSessionToken(): Promise<string | null>;
80
+ /**
81
+ * Finds the project root by searching upwards for a .git directory.
82
+ * Caches the result for subsequent calls.
83
+ * @param startPath The path to start searching from. Defaults to the current working directory.
84
+ * @returns The absolute path to the project root, or null if not found.
85
+ */
86
+ static findProjectRoot(startPath?: string): string | null;
87
+ /**
88
+ * Finds the appropriate project root by searching upwards.
89
+ * First looks for .gitgov (initialized project), then .git (for init).
90
+ * @param startPath The path to start searching from. Defaults to the current working directory.
91
+ * @returns The absolute path to the project root, or null if not found.
92
+ */
93
+ static findGitgovRoot(startPath?: string): string | null;
94
+ /**
95
+ * Gets the .gitgov directory path from project root
96
+ */
97
+ static getGitgovPath(): string;
98
+ /**
99
+ * Checks if current directory is a GitGovernance project
100
+ */
101
+ static isGitgovProject(): boolean;
102
+ }
103
+ /**
104
+ * Create a ConfigManager instance for the current project
105
+ */
106
+ export declare function createConfigManager(projectRoot?: string): ConfigManager;
107
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config_manager/index.ts"],"names":[],"mappings":"AAQA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC3C,CAAC;CACH;AAED;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,eAAe,GAAE,MAAyD;IAKtF;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAUhD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAUlD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK5C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAUpE;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAKhE;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAalF;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOpD;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,SAAS,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI;IAuCxE;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,SAAS,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI;IAiCvE;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,MAAM;IAQ9B;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,OAAO;CAQlC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,CAEvE"}
@@ -0,0 +1,192 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as path from 'path';
3
+ import { existsSync } from 'fs';
4
+ // Project root cache for performance
5
+ let projectRoot = null;
6
+ let lastSearchPath = null;
7
+ /**
8
+ * Configuration Manager Class
9
+ * Provides typed access to GitGovernance configuration and session state
10
+ */
11
+ export class ConfigManager {
12
+ configPath;
13
+ sessionPath;
14
+ constructor(projectRootPath = ConfigManager.findProjectRoot() || process.cwd()) {
15
+ this.configPath = path.join(projectRootPath, '.gitgov', 'config.json');
16
+ this.sessionPath = path.join(projectRootPath, '.gitgov', '.session.json');
17
+ }
18
+ /**
19
+ * Load GitGovernance configuration
20
+ */
21
+ async loadConfig() {
22
+ try {
23
+ const configContent = await fs.readFile(this.configPath, 'utf-8');
24
+ return JSON.parse(configContent);
25
+ }
26
+ catch (error) {
27
+ // Config file doesn't exist or is invalid
28
+ return null;
29
+ }
30
+ }
31
+ /**
32
+ * Load GitGovernance session state
33
+ */
34
+ async loadSession() {
35
+ try {
36
+ const sessionContent = await fs.readFile(this.sessionPath, 'utf-8');
37
+ return JSON.parse(sessionContent);
38
+ }
39
+ catch (error) {
40
+ // Session file doesn't exist or is invalid
41
+ return null;
42
+ }
43
+ }
44
+ /**
45
+ * Get root cycle from configuration
46
+ */
47
+ async getRootCycle() {
48
+ const config = await this.loadConfig();
49
+ return config?.rootCycle || null;
50
+ }
51
+ /**
52
+ * Get project information from configuration
53
+ */
54
+ async getProjectInfo() {
55
+ const config = await this.loadConfig();
56
+ if (!config)
57
+ return null;
58
+ return {
59
+ id: config.projectId,
60
+ name: config.projectName
61
+ };
62
+ }
63
+ /**
64
+ * Get actor state for a specific actor
65
+ */
66
+ async getActorState(actorId) {
67
+ const session = await this.loadSession();
68
+ return session?.actorState?.[actorId] || null;
69
+ }
70
+ /**
71
+ * Update actor state for a specific actor
72
+ */
73
+ async updateActorState(actorId, state) {
74
+ const session = await this.loadSession() || {};
75
+ if (!session.actorState)
76
+ session.actorState = {};
77
+ session.actorState[actorId] = {
78
+ ...session.actorState[actorId],
79
+ ...state,
80
+ lastSync: new Date().toISOString()
81
+ };
82
+ await fs.writeFile(this.sessionPath, JSON.stringify(session, null, 2), 'utf-8');
83
+ }
84
+ /**
85
+ * Get cloud session token
86
+ */
87
+ async getCloudSessionToken() {
88
+ const session = await this.loadSession();
89
+ return session?.cloud?.sessionToken || null;
90
+ }
91
+ // --- Static Utility Methods (consolidated from project-utils) ---
92
+ /**
93
+ * Finds the project root by searching upwards for a .git directory.
94
+ * Caches the result for subsequent calls.
95
+ * @param startPath The path to start searching from. Defaults to the current working directory.
96
+ * @returns The absolute path to the project root, or null if not found.
97
+ */
98
+ static findProjectRoot(startPath = process.cwd()) {
99
+ // In test environment, allow cache reset via global
100
+ if (typeof global.projectRoot !== 'undefined' && global.projectRoot === null) {
101
+ projectRoot = null;
102
+ lastSearchPath = null;
103
+ }
104
+ // Reset cache if we're searching from a different directory
105
+ if (lastSearchPath && lastSearchPath !== startPath) {
106
+ projectRoot = null;
107
+ lastSearchPath = null;
108
+ }
109
+ if (projectRoot && lastSearchPath === startPath) {
110
+ return projectRoot;
111
+ }
112
+ // Update last search path
113
+ lastSearchPath = startPath;
114
+ let currentPath = startPath;
115
+ // Prevent infinite loop by stopping at the filesystem root
116
+ while (currentPath !== path.parse(currentPath).root) {
117
+ if (existsSync(path.join(currentPath, '.git'))) {
118
+ projectRoot = currentPath;
119
+ return projectRoot;
120
+ }
121
+ currentPath = path.dirname(currentPath);
122
+ }
123
+ // Final check at the root directory
124
+ if (existsSync(path.join(currentPath, '.git'))) {
125
+ projectRoot = currentPath;
126
+ return projectRoot;
127
+ }
128
+ return null;
129
+ }
130
+ /**
131
+ * Finds the appropriate project root by searching upwards.
132
+ * First looks for .gitgov (initialized project), then .git (for init).
133
+ * @param startPath The path to start searching from. Defaults to the current working directory.
134
+ * @returns The absolute path to the project root, or null if not found.
135
+ */
136
+ static findGitgovRoot(startPath = process.cwd()) {
137
+ let currentPath = startPath;
138
+ // First pass: Look for .gitgov (initialized GitGovernance project)
139
+ while (currentPath !== path.parse(currentPath).root) {
140
+ if (existsSync(path.join(currentPath, '.gitgov'))) {
141
+ return currentPath;
142
+ }
143
+ currentPath = path.dirname(currentPath);
144
+ }
145
+ // Final check at root for .gitgov
146
+ if (existsSync(path.join(currentPath, '.gitgov'))) {
147
+ return currentPath;
148
+ }
149
+ // Second pass: Look for .git (for init command)
150
+ currentPath = startPath;
151
+ while (currentPath !== path.parse(currentPath).root) {
152
+ if (existsSync(path.join(currentPath, '.git'))) {
153
+ return currentPath;
154
+ }
155
+ currentPath = path.dirname(currentPath);
156
+ }
157
+ // Final check at root for .git
158
+ if (existsSync(path.join(currentPath, '.git'))) {
159
+ return currentPath;
160
+ }
161
+ return null;
162
+ }
163
+ /**
164
+ * Gets the .gitgov directory path from project root
165
+ */
166
+ static getGitgovPath() {
167
+ const root = ConfigManager.findGitgovRoot();
168
+ if (!root) {
169
+ throw new Error("Could not find project root. Make sure you are inside a GitGovernance repository.");
170
+ }
171
+ return path.join(root, '.gitgov');
172
+ }
173
+ /**
174
+ * Checks if current directory is a GitGovernance project
175
+ */
176
+ static isGitgovProject() {
177
+ try {
178
+ const gitgovPath = ConfigManager.getGitgovPath();
179
+ return existsSync(gitgovPath);
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ }
185
+ }
186
+ /**
187
+ * Create a ConfigManager instance for the current project
188
+ */
189
+ export function createConfigManager(projectRoot) {
190
+ return new ConfigManager(projectRoot);
191
+ }
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config_manager/index.ts"],"names":[],"mappings":"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"}