@decibelsystems/tools 2.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 (478) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +342 -0
  3. package/dist/agentic/compiler.d.ts +21 -0
  4. package/dist/agentic/compiler.d.ts.map +1 -0
  5. package/dist/agentic/compiler.js +267 -0
  6. package/dist/agentic/compiler.js.map +1 -0
  7. package/dist/agentic/golden.d.ts +25 -0
  8. package/dist/agentic/golden.d.ts.map +1 -0
  9. package/dist/agentic/golden.js +255 -0
  10. package/dist/agentic/golden.js.map +1 -0
  11. package/dist/agentic/index.d.ts +17 -0
  12. package/dist/agentic/index.d.ts.map +1 -0
  13. package/dist/agentic/index.js +153 -0
  14. package/dist/agentic/index.js.map +1 -0
  15. package/dist/agentic/linter.d.ts +20 -0
  16. package/dist/agentic/linter.d.ts.map +1 -0
  17. package/dist/agentic/linter.js +340 -0
  18. package/dist/agentic/linter.js.map +1 -0
  19. package/dist/agentic/renderer.d.ts +17 -0
  20. package/dist/agentic/renderer.d.ts.map +1 -0
  21. package/dist/agentic/renderer.js +277 -0
  22. package/dist/agentic/renderer.js.map +1 -0
  23. package/dist/agentic/types.d.ts +199 -0
  24. package/dist/agentic/types.d.ts.map +1 -0
  25. package/dist/agentic/types.js +8 -0
  26. package/dist/agentic/types.js.map +1 -0
  27. package/dist/architectAdrs.d.ts +32 -0
  28. package/dist/architectAdrs.d.ts.map +1 -0
  29. package/dist/architectAdrs.js +162 -0
  30. package/dist/architectAdrs.js.map +1 -0
  31. package/dist/client/facade-client.d.ts +41 -0
  32. package/dist/client/facade-client.d.ts.map +1 -0
  33. package/dist/client/facade-client.js +243 -0
  34. package/dist/client/facade-client.js.map +1 -0
  35. package/dist/client/index.d.ts +4 -0
  36. package/dist/client/index.d.ts.map +1 -0
  37. package/dist/client/index.js +18 -0
  38. package/dist/client/index.js.map +1 -0
  39. package/dist/client/transports.d.ts +78 -0
  40. package/dist/client/transports.d.ts.map +1 -0
  41. package/dist/client/transports.js +258 -0
  42. package/dist/client/transports.js.map +1 -0
  43. package/dist/client/types.d.ts +49 -0
  44. package/dist/client/types.d.ts.map +1 -0
  45. package/dist/client/types.js +8 -0
  46. package/dist/client/types.js.map +1 -0
  47. package/dist/config.d.ts +8 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +19 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/daemon.d.ts +77 -0
  52. package/dist/daemon.d.ts.map +1 -0
  53. package/dist/daemon.js +374 -0
  54. package/dist/daemon.js.map +1 -0
  55. package/dist/daemonConfig.d.ts +43 -0
  56. package/dist/daemonConfig.d.ts.map +1 -0
  57. package/dist/daemonConfig.js +113 -0
  58. package/dist/daemonConfig.js.map +1 -0
  59. package/dist/dataRoot.d.ts +5 -0
  60. package/dist/dataRoot.d.ts.map +1 -0
  61. package/dist/dataRoot.js +23 -0
  62. package/dist/dataRoot.js.map +1 -0
  63. package/dist/decibelPaths.d.ts +42 -0
  64. package/dist/decibelPaths.d.ts.map +1 -0
  65. package/dist/decibelPaths.js +150 -0
  66. package/dist/decibelPaths.js.map +1 -0
  67. package/dist/facades/definitions.d.ts +6 -0
  68. package/dist/facades/definitions.d.ts.map +1 -0
  69. package/dist/facades/definitions.js +450 -0
  70. package/dist/facades/definitions.js.map +1 -0
  71. package/dist/facades/index.d.ts +27 -0
  72. package/dist/facades/index.d.ts.map +1 -0
  73. package/dist/facades/index.js +124 -0
  74. package/dist/facades/index.js.map +1 -0
  75. package/dist/facades/types.d.ts +38 -0
  76. package/dist/facades/types.d.ts.map +1 -0
  77. package/dist/facades/types.js +8 -0
  78. package/dist/facades/types.js.map +1 -0
  79. package/dist/httpServer.d.ts +66 -0
  80. package/dist/httpServer.d.ts.map +1 -0
  81. package/dist/httpServer.js +1723 -0
  82. package/dist/httpServer.js.map +1 -0
  83. package/dist/kernel.d.ts +87 -0
  84. package/dist/kernel.d.ts.map +1 -0
  85. package/dist/kernel.js +256 -0
  86. package/dist/kernel.js.map +1 -0
  87. package/dist/lib/agent-services/assumptions.d.ts +16 -0
  88. package/dist/lib/agent-services/assumptions.d.ts.map +1 -0
  89. package/dist/lib/agent-services/assumptions.js +284 -0
  90. package/dist/lib/agent-services/assumptions.js.map +1 -0
  91. package/dist/lib/agent-services/context-pack.d.ts +6 -0
  92. package/dist/lib/agent-services/context-pack.d.ts.map +1 -0
  93. package/dist/lib/agent-services/context-pack.js +354 -0
  94. package/dist/lib/agent-services/context-pack.js.map +1 -0
  95. package/dist/lib/agent-services/drift-guard.d.ts +14 -0
  96. package/dist/lib/agent-services/drift-guard.d.ts.map +1 -0
  97. package/dist/lib/agent-services/drift-guard.js +355 -0
  98. package/dist/lib/agent-services/drift-guard.js.map +1 -0
  99. package/dist/lib/agent-services/index.d.ts +5 -0
  100. package/dist/lib/agent-services/index.d.ts.map +1 -0
  101. package/dist/lib/agent-services/index.js +10 -0
  102. package/dist/lib/agent-services/index.js.map +1 -0
  103. package/dist/lib/benchmark.d.ts +110 -0
  104. package/dist/lib/benchmark.d.ts.map +1 -0
  105. package/dist/lib/benchmark.js +338 -0
  106. package/dist/lib/benchmark.js.map +1 -0
  107. package/dist/lib/supabase.d.ts +123 -0
  108. package/dist/lib/supabase.d.ts.map +1 -0
  109. package/dist/lib/supabase.js +91 -0
  110. package/dist/lib/supabase.js.map +1 -0
  111. package/dist/license.d.ts +30 -0
  112. package/dist/license.d.ts.map +1 -0
  113. package/dist/license.js +131 -0
  114. package/dist/license.js.map +1 -0
  115. package/dist/projectPaths.d.ts +27 -0
  116. package/dist/projectPaths.d.ts.map +1 -0
  117. package/dist/projectPaths.js +86 -0
  118. package/dist/projectPaths.js.map +1 -0
  119. package/dist/projectRegistry.d.ts +97 -0
  120. package/dist/projectRegistry.d.ts.map +1 -0
  121. package/dist/projectRegistry.js +374 -0
  122. package/dist/projectRegistry.js.map +1 -0
  123. package/dist/sentinelIssues.d.ts +65 -0
  124. package/dist/sentinelIssues.d.ts.map +1 -0
  125. package/dist/sentinelIssues.js +297 -0
  126. package/dist/sentinelIssues.js.map +1 -0
  127. package/dist/server.d.ts +3 -0
  128. package/dist/server.d.ts.map +1 -0
  129. package/dist/server.js +195 -0
  130. package/dist/server.js.map +1 -0
  131. package/dist/test.d.ts +7 -0
  132. package/dist/test.d.ts.map +1 -0
  133. package/dist/test.js +77 -0
  134. package/dist/test.js.map +1 -0
  135. package/dist/tools/agentic/index.d.ts +7 -0
  136. package/dist/tools/agentic/index.d.ts.map +1 -0
  137. package/dist/tools/agentic/index.js +203 -0
  138. package/dist/tools/agentic/index.js.map +1 -0
  139. package/dist/tools/architect/index.d.ts +11 -0
  140. package/dist/tools/architect/index.d.ts.map +1 -0
  141. package/dist/tools/architect/index.js +506 -0
  142. package/dist/tools/architect/index.js.map +1 -0
  143. package/dist/tools/architect.d.ts +19 -0
  144. package/dist/tools/architect.d.ts.map +1 -0
  145. package/dist/tools/architect.js +88 -0
  146. package/dist/tools/architect.js.map +1 -0
  147. package/dist/tools/auditor/index.d.ts +10 -0
  148. package/dist/tools/auditor/index.d.ts.map +1 -0
  149. package/dist/tools/auditor/index.js +310 -0
  150. package/dist/tools/auditor/index.js.map +1 -0
  151. package/dist/tools/auditor.d.ts +149 -0
  152. package/dist/tools/auditor.d.ts.map +1 -0
  153. package/dist/tools/auditor.js +775 -0
  154. package/dist/tools/auditor.js.map +1 -0
  155. package/dist/tools/bench/index.d.ts +3 -0
  156. package/dist/tools/bench/index.d.ts.map +1 -0
  157. package/dist/tools/bench/index.js +220 -0
  158. package/dist/tools/bench/index.js.map +1 -0
  159. package/dist/tools/bench.d.ts +89 -0
  160. package/dist/tools/bench.d.ts.map +1 -0
  161. package/dist/tools/bench.js +826 -0
  162. package/dist/tools/bench.js.map +1 -0
  163. package/dist/tools/context/index.d.ts +11 -0
  164. package/dist/tools/context/index.d.ts.map +1 -0
  165. package/dist/tools/context/index.js +482 -0
  166. package/dist/tools/context/index.js.map +1 -0
  167. package/dist/tools/context.d.ts +146 -0
  168. package/dist/tools/context.d.ts.map +1 -0
  169. package/dist/tools/context.js +481 -0
  170. package/dist/tools/context.js.map +1 -0
  171. package/dist/tools/coordinator/coordinator.d.ts +168 -0
  172. package/dist/tools/coordinator/coordinator.d.ts.map +1 -0
  173. package/dist/tools/coordinator/coordinator.js +535 -0
  174. package/dist/tools/coordinator/coordinator.js.map +1 -0
  175. package/dist/tools/coordinator/index.d.ts +12 -0
  176. package/dist/tools/coordinator/index.d.ts.map +1 -0
  177. package/dist/tools/coordinator/index.js +381 -0
  178. package/dist/tools/coordinator/index.js.map +1 -0
  179. package/dist/tools/corpus/index.d.ts +5 -0
  180. package/dist/tools/corpus/index.d.ts.map +1 -0
  181. package/dist/tools/corpus/index.js +105 -0
  182. package/dist/tools/corpus/index.js.map +1 -0
  183. package/dist/tools/corpus.d.ts +33 -0
  184. package/dist/tools/corpus.d.ts.map +1 -0
  185. package/dist/tools/corpus.js +180 -0
  186. package/dist/tools/corpus.js.map +1 -0
  187. package/dist/tools/crit.d.ts +63 -0
  188. package/dist/tools/crit.d.ts.map +1 -0
  189. package/dist/tools/crit.js +159 -0
  190. package/dist/tools/crit.js.map +1 -0
  191. package/dist/tools/data-inspector.d.ts +189 -0
  192. package/dist/tools/data-inspector.d.ts.map +1 -0
  193. package/dist/tools/data-inspector.js +669 -0
  194. package/dist/tools/data-inspector.js.map +1 -0
  195. package/dist/tools/deck.d.ts +11 -0
  196. package/dist/tools/deck.d.ts.map +1 -0
  197. package/dist/tools/deck.js +188 -0
  198. package/dist/tools/deck.js.map +1 -0
  199. package/dist/tools/designer/index.d.ts +11 -0
  200. package/dist/tools/designer/index.d.ts.map +1 -0
  201. package/dist/tools/designer/index.js +442 -0
  202. package/dist/tools/designer/index.js.map +1 -0
  203. package/dist/tools/designer/lateral-tools.d.ts +6 -0
  204. package/dist/tools/designer/lateral-tools.d.ts.map +1 -0
  205. package/dist/tools/designer/lateral-tools.js +190 -0
  206. package/dist/tools/designer/lateral-tools.js.map +1 -0
  207. package/dist/tools/designer.d.ts +122 -0
  208. package/dist/tools/designer.d.ts.map +1 -0
  209. package/dist/tools/designer.js +495 -0
  210. package/dist/tools/designer.js.map +1 -0
  211. package/dist/tools/dojo/index.d.ts +13 -0
  212. package/dist/tools/dojo/index.d.ts.map +1 -0
  213. package/dist/tools/dojo/index.js +613 -0
  214. package/dist/tools/dojo/index.js.map +1 -0
  215. package/dist/tools/dojo.d.ts +254 -0
  216. package/dist/tools/dojo.d.ts.map +1 -0
  217. package/dist/tools/dojo.js +933 -0
  218. package/dist/tools/dojo.js.map +1 -0
  219. package/dist/tools/dojoBench.d.ts +49 -0
  220. package/dist/tools/dojoBench.d.ts.map +1 -0
  221. package/dist/tools/dojoBench.js +205 -0
  222. package/dist/tools/dojoBench.js.map +1 -0
  223. package/dist/tools/dojoGraduated.d.ts +50 -0
  224. package/dist/tools/dojoGraduated.d.ts.map +1 -0
  225. package/dist/tools/dojoGraduated.js +174 -0
  226. package/dist/tools/dojoGraduated.js.map +1 -0
  227. package/dist/tools/dojoPolicy.d.ts +65 -0
  228. package/dist/tools/dojoPolicy.d.ts.map +1 -0
  229. package/dist/tools/dojoPolicy.js +263 -0
  230. package/dist/tools/dojoPolicy.js.map +1 -0
  231. package/dist/tools/feedback/index.d.ts +5 -0
  232. package/dist/tools/feedback/index.d.ts.map +1 -0
  233. package/dist/tools/feedback/index.js +153 -0
  234. package/dist/tools/feedback/index.js.map +1 -0
  235. package/dist/tools/feedback.d.ts +61 -0
  236. package/dist/tools/feedback.d.ts.map +1 -0
  237. package/dist/tools/feedback.js +209 -0
  238. package/dist/tools/feedback.js.map +1 -0
  239. package/dist/tools/forecast/index.d.ts +8 -0
  240. package/dist/tools/forecast/index.d.ts.map +1 -0
  241. package/dist/tools/forecast/index.js +283 -0
  242. package/dist/tools/forecast/index.js.map +1 -0
  243. package/dist/tools/forecast.d.ts +147 -0
  244. package/dist/tools/forecast.d.ts.map +1 -0
  245. package/dist/tools/forecast.js +417 -0
  246. package/dist/tools/forecast.js.map +1 -0
  247. package/dist/tools/friction/index.d.ts +7 -0
  248. package/dist/tools/friction/index.d.ts.map +1 -0
  249. package/dist/tools/friction/index.js +265 -0
  250. package/dist/tools/friction/index.js.map +1 -0
  251. package/dist/tools/friction.d.ts +82 -0
  252. package/dist/tools/friction.d.ts.map +1 -0
  253. package/dist/tools/friction.js +331 -0
  254. package/dist/tools/friction.js.map +1 -0
  255. package/dist/tools/git/index.d.ts +9 -0
  256. package/dist/tools/git/index.d.ts.map +1 -0
  257. package/dist/tools/git/index.js +237 -0
  258. package/dist/tools/git/index.js.map +1 -0
  259. package/dist/tools/git-sentinel/index.d.ts +7 -0
  260. package/dist/tools/git-sentinel/index.d.ts.map +1 -0
  261. package/dist/tools/git-sentinel/index.js +178 -0
  262. package/dist/tools/git-sentinel/index.js.map +1 -0
  263. package/dist/tools/git-sentinel.d.ts +78 -0
  264. package/dist/tools/git-sentinel.d.ts.map +1 -0
  265. package/dist/tools/git-sentinel.js +391 -0
  266. package/dist/tools/git-sentinel.js.map +1 -0
  267. package/dist/tools/git.d.ts +134 -0
  268. package/dist/tools/git.d.ts.map +1 -0
  269. package/dist/tools/git.js +374 -0
  270. package/dist/tools/git.js.map +1 -0
  271. package/dist/tools/guardian/index.d.ts +8 -0
  272. package/dist/tools/guardian/index.d.ts.map +1 -0
  273. package/dist/tools/guardian/index.js +171 -0
  274. package/dist/tools/guardian/index.js.map +1 -0
  275. package/dist/tools/guardian.d.ts +62 -0
  276. package/dist/tools/guardian.d.ts.map +1 -0
  277. package/dist/tools/guardian.js +332 -0
  278. package/dist/tools/guardian.js.map +1 -0
  279. package/dist/tools/hygiene/codebase-scanner.d.ts +38 -0
  280. package/dist/tools/hygiene/codebase-scanner.d.ts.map +1 -0
  281. package/dist/tools/hygiene/codebase-scanner.js +411 -0
  282. package/dist/tools/hygiene/codebase-scanner.js.map +1 -0
  283. package/dist/tools/hygiene/config-scanner.d.ts +33 -0
  284. package/dist/tools/hygiene/config-scanner.d.ts.map +1 -0
  285. package/dist/tools/hygiene/config-scanner.js +482 -0
  286. package/dist/tools/hygiene/config-scanner.js.map +1 -0
  287. package/dist/tools/hygiene/coverage-scanner.d.ts +41 -0
  288. package/dist/tools/hygiene/coverage-scanner.d.ts.map +1 -0
  289. package/dist/tools/hygiene/coverage-scanner.js +331 -0
  290. package/dist/tools/hygiene/coverage-scanner.js.map +1 -0
  291. package/dist/tools/hygiene/index.d.ts +7 -0
  292. package/dist/tools/hygiene/index.d.ts.map +1 -0
  293. package/dist/tools/hygiene/index.js +291 -0
  294. package/dist/tools/hygiene/index.js.map +1 -0
  295. package/dist/tools/hygiene/oracle-hygiene.d.ts +68 -0
  296. package/dist/tools/hygiene/oracle-hygiene.d.ts.map +1 -0
  297. package/dist/tools/hygiene/oracle-hygiene.js +324 -0
  298. package/dist/tools/hygiene/oracle-hygiene.js.map +1 -0
  299. package/dist/tools/index.d.ts +6 -0
  300. package/dist/tools/index.d.ts.map +1 -0
  301. package/dist/tools/index.js +130 -0
  302. package/dist/tools/index.js.map +1 -0
  303. package/dist/tools/lateral.d.ts +114 -0
  304. package/dist/tools/lateral.d.ts.map +1 -0
  305. package/dist/tools/lateral.js +536 -0
  306. package/dist/tools/lateral.js.map +1 -0
  307. package/dist/tools/learnings/index.d.ts +5 -0
  308. package/dist/tools/learnings/index.d.ts.map +1 -0
  309. package/dist/tools/learnings/index.js +138 -0
  310. package/dist/tools/learnings/index.js.map +1 -0
  311. package/dist/tools/learnings.d.ts +41 -0
  312. package/dist/tools/learnings.d.ts.map +1 -0
  313. package/dist/tools/learnings.js +149 -0
  314. package/dist/tools/learnings.js.map +1 -0
  315. package/dist/tools/oracle/index.d.ts +6 -0
  316. package/dist/tools/oracle/index.d.ts.map +1 -0
  317. package/dist/tools/oracle/index.js +217 -0
  318. package/dist/tools/oracle/index.js.map +1 -0
  319. package/dist/tools/oracle.d.ts +90 -0
  320. package/dist/tools/oracle.d.ts.map +1 -0
  321. package/dist/tools/oracle.js +529 -0
  322. package/dist/tools/oracle.js.map +1 -0
  323. package/dist/tools/policy.d.ts +119 -0
  324. package/dist/tools/policy.d.ts.map +1 -0
  325. package/dist/tools/policy.js +406 -0
  326. package/dist/tools/policy.js.map +1 -0
  327. package/dist/tools/provenance/index.d.ts +4 -0
  328. package/dist/tools/provenance/index.d.ts.map +1 -0
  329. package/dist/tools/provenance/index.js +63 -0
  330. package/dist/tools/provenance/index.js.map +1 -0
  331. package/dist/tools/provenance.d.ts +75 -0
  332. package/dist/tools/provenance.d.ts.map +1 -0
  333. package/dist/tools/provenance.js +224 -0
  334. package/dist/tools/provenance.js.map +1 -0
  335. package/dist/tools/rateLimiter.d.ts +45 -0
  336. package/dist/tools/rateLimiter.d.ts.map +1 -0
  337. package/dist/tools/rateLimiter.js +91 -0
  338. package/dist/tools/rateLimiter.js.map +1 -0
  339. package/dist/tools/registry/index.d.ts +10 -0
  340. package/dist/tools/registry/index.d.ts.map +1 -0
  341. package/dist/tools/registry/index.js +506 -0
  342. package/dist/tools/registry/index.js.map +1 -0
  343. package/dist/tools/registry.d.ts +3 -0
  344. package/dist/tools/registry.d.ts.map +1 -0
  345. package/dist/tools/registry.js +189 -0
  346. package/dist/tools/registry.js.map +1 -0
  347. package/dist/tools/roadmap/index.d.ts +11 -0
  348. package/dist/tools/roadmap/index.d.ts.map +1 -0
  349. package/dist/tools/roadmap/index.js +364 -0
  350. package/dist/tools/roadmap/index.js.map +1 -0
  351. package/dist/tools/roadmap.d.ts +103 -0
  352. package/dist/tools/roadmap.d.ts.map +1 -0
  353. package/dist/tools/roadmap.js +407 -0
  354. package/dist/tools/roadmap.js.map +1 -0
  355. package/dist/tools/senken.d.ts +11 -0
  356. package/dist/tools/senken.d.ts.map +1 -0
  357. package/dist/tools/senken.js +482 -0
  358. package/dist/tools/senken.js.map +1 -0
  359. package/dist/tools/sentinel/index.d.ts +21 -0
  360. package/dist/tools/sentinel/index.d.ts.map +1 -0
  361. package/dist/tools/sentinel/index.js +1067 -0
  362. package/dist/tools/sentinel/index.js.map +1 -0
  363. package/dist/tools/sentinel-scan-data.d.ts +90 -0
  364. package/dist/tools/sentinel-scan-data.d.ts.map +1 -0
  365. package/dist/tools/sentinel-scan-data.js +122 -0
  366. package/dist/tools/sentinel-scan-data.js.map +1 -0
  367. package/dist/tools/sentinel.d.ts +156 -0
  368. package/dist/tools/sentinel.d.ts.map +1 -0
  369. package/dist/tools/sentinel.js +603 -0
  370. package/dist/tools/sentinel.js.map +1 -0
  371. package/dist/tools/shared/index.d.ts +5 -0
  372. package/dist/tools/shared/index.d.ts.map +1 -0
  373. package/dist/tools/shared/index.js +8 -0
  374. package/dist/tools/shared/index.js.map +1 -0
  375. package/dist/tools/shared/project.d.ts +17 -0
  376. package/dist/tools/shared/project.d.ts.map +1 -0
  377. package/dist/tools/shared/project.js +36 -0
  378. package/dist/tools/shared/project.js.map +1 -0
  379. package/dist/tools/shared/response.d.ts +15 -0
  380. package/dist/tools/shared/response.d.ts.map +1 -0
  381. package/dist/tools/shared/response.js +77 -0
  382. package/dist/tools/shared/response.js.map +1 -0
  383. package/dist/tools/shared/runTracker.d.ts +87 -0
  384. package/dist/tools/shared/runTracker.d.ts.map +1 -0
  385. package/dist/tools/shared/runTracker.js +225 -0
  386. package/dist/tools/shared/runTracker.js.map +1 -0
  387. package/dist/tools/shared/validation.d.ts +10 -0
  388. package/dist/tools/shared/validation.d.ts.map +1 -0
  389. package/dist/tools/shared/validation.js +26 -0
  390. package/dist/tools/shared/validation.js.map +1 -0
  391. package/dist/tools/studio/cloud-spine.d.ts +27 -0
  392. package/dist/tools/studio/cloud-spine.d.ts.map +1 -0
  393. package/dist/tools/studio/cloud-spine.js +845 -0
  394. package/dist/tools/studio/cloud-spine.js.map +1 -0
  395. package/dist/tools/studio/index.d.ts +154 -0
  396. package/dist/tools/studio/index.d.ts.map +1 -0
  397. package/dist/tools/studio/index.js +541 -0
  398. package/dist/tools/studio/index.js.map +1 -0
  399. package/dist/tools/testSpec.d.ts +122 -0
  400. package/dist/tools/testSpec.d.ts.map +1 -0
  401. package/dist/tools/testSpec.js +525 -0
  402. package/dist/tools/testSpec.js.map +1 -0
  403. package/dist/tools/toolsIndex.d.ts +5 -0
  404. package/dist/tools/toolsIndex.d.ts.map +1 -0
  405. package/dist/tools/toolsIndex.js +37 -0
  406. package/dist/tools/toolsIndex.js.map +1 -0
  407. package/dist/tools/types.d.ts +47 -0
  408. package/dist/tools/types.d.ts.map +1 -0
  409. package/dist/tools/types.js +7 -0
  410. package/dist/tools/types.js.map +1 -0
  411. package/dist/tools/vector/index.d.ts +13 -0
  412. package/dist/tools/vector/index.d.ts.map +1 -0
  413. package/dist/tools/vector/index.js +592 -0
  414. package/dist/tools/vector/index.js.map +1 -0
  415. package/dist/tools/vector.d.ts +189 -0
  416. package/dist/tools/vector.d.ts.map +1 -0
  417. package/dist/tools/vector.js +570 -0
  418. package/dist/tools/vector.js.map +1 -0
  419. package/dist/tools/velocity/index.d.ts +9 -0
  420. package/dist/tools/velocity/index.d.ts.map +1 -0
  421. package/dist/tools/velocity/index.js +306 -0
  422. package/dist/tools/velocity/index.js.map +1 -0
  423. package/dist/tools/velocity.d.ts +143 -0
  424. package/dist/tools/velocity.d.ts.map +1 -0
  425. package/dist/tools/velocity.js +628 -0
  426. package/dist/tools/velocity.js.map +1 -0
  427. package/dist/tools/voice/index.d.ts +8 -0
  428. package/dist/tools/voice/index.d.ts.map +1 -0
  429. package/dist/tools/voice/index.js +203 -0
  430. package/dist/tools/voice/index.js.map +1 -0
  431. package/dist/tools/voice.d.ts +291 -0
  432. package/dist/tools/voice.d.ts.map +1 -0
  433. package/dist/tools/voice.js +734 -0
  434. package/dist/tools/voice.js.map +1 -0
  435. package/dist/tools/workflow/index.d.ts +8 -0
  436. package/dist/tools/workflow/index.d.ts.map +1 -0
  437. package/dist/tools/workflow/index.js +199 -0
  438. package/dist/tools/workflow/index.js.map +1 -0
  439. package/dist/tools/workflow.d.ts +123 -0
  440. package/dist/tools/workflow.d.ts.map +1 -0
  441. package/dist/tools/workflow.js +647 -0
  442. package/dist/tools/workflow.js.map +1 -0
  443. package/dist/transports/bridge.d.ts +22 -0
  444. package/dist/transports/bridge.d.ts.map +1 -0
  445. package/dist/transports/bridge.js +177 -0
  446. package/dist/transports/bridge.js.map +1 -0
  447. package/dist/transports/http.d.ts +9 -0
  448. package/dist/transports/http.d.ts.map +1 -0
  449. package/dist/transports/http.js +35 -0
  450. package/dist/transports/http.js.map +1 -0
  451. package/dist/transports/index.d.ts +6 -0
  452. package/dist/transports/index.d.ts.map +1 -0
  453. package/dist/transports/index.js +8 -0
  454. package/dist/transports/index.js.map +1 -0
  455. package/dist/transports/mcp.d.ts +9 -0
  456. package/dist/transports/mcp.d.ts.map +1 -0
  457. package/dist/transports/mcp.js +51 -0
  458. package/dist/transports/mcp.js.map +1 -0
  459. package/dist/transports/stdio.d.ts +9 -0
  460. package/dist/transports/stdio.d.ts.map +1 -0
  461. package/dist/transports/stdio.js +26 -0
  462. package/dist/transports/stdio.js.map +1 -0
  463. package/dist/transports/types.d.ts +27 -0
  464. package/dist/transports/types.d.ts.map +1 -0
  465. package/dist/transports/types.js +8 -0
  466. package/dist/transports/types.js.map +1 -0
  467. package/dist/types/agent-services.d.ts +193 -0
  468. package/dist/types/agent-services.d.ts.map +1 -0
  469. package/dist/types/agent-services.js +8 -0
  470. package/dist/types/agent-services.js.map +1 -0
  471. package/dist/types/index.d.ts +2 -0
  472. package/dist/types/index.d.ts.map +1 -0
  473. package/dist/types/index.js +7 -0
  474. package/dist/types/index.js.map +1 -0
  475. package/package.json +72 -0
  476. package/templates/AGENT.md +87 -0
  477. package/templates/com.decibel.daemon.plist +47 -0
  478. package/templates/sentinel/ISSUE_TEMPLATE.md +20 -0
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Configuration for FacadeClient.
3
+ * Provide either stdio (command) or HTTP (daemonUrl) or both (bridge).
4
+ */
5
+ export interface FacadeClientConfig {
6
+ /** Stdio: command to spawn MCP server (e.g. 'node') */
7
+ command?: string;
8
+ /** Stdio: args for the command (e.g. ['dist/server.js']) */
9
+ args?: string[];
10
+ /** Stdio: extra env vars for the child process */
11
+ env?: Record<string, string>;
12
+ /** Stdio: working directory for the child process */
13
+ cwd?: string;
14
+ /** HTTP: daemon URL (e.g. 'http://localhost:4888') */
15
+ daemonUrl?: string;
16
+ /** Auto-injected into every call as agentId */
17
+ agentId?: string;
18
+ /** Auto-injected into every call as project_id */
19
+ projectId?: string;
20
+ /** Restrict dispatch to these facades only */
21
+ allowedFacades?: string[];
22
+ /** Timeout in ms for individual calls (default: 30000) */
23
+ timeoutMs?: number;
24
+ /** Logger (defaults to no-op) */
25
+ logger?: (msg: string) => void;
26
+ }
27
+ export interface CallResult<T = unknown> {
28
+ data: T;
29
+ isError: false;
30
+ }
31
+ export interface CallError {
32
+ error: string;
33
+ code?: string;
34
+ isError: true;
35
+ }
36
+ export type FacadeResponse<T = unknown> = CallResult<T> | CallError;
37
+ export interface BatchCall {
38
+ facade: string;
39
+ action: string;
40
+ params?: Record<string, unknown>;
41
+ }
42
+ export interface BatchResult {
43
+ facade: string;
44
+ action: string;
45
+ data?: unknown;
46
+ error?: string;
47
+ duration_ms: number;
48
+ }
49
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,iCAAiC;IACjC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,8 @@
1
+ // ============================================================================
2
+ // FacadeClient Types
3
+ // ============================================================================
4
+ // Shared types for the agent-facing facade client SDK.
5
+ // Consumed by decibel-agent's McpToolRouter and any headless agent.
6
+ // ============================================================================
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAC/E,uDAAuD;AACvD,oEAAoE;AACpE,+EAA+E"}
@@ -0,0 +1,8 @@
1
+ export interface Config {
2
+ env: string;
3
+ org: string;
4
+ rootDir: string;
5
+ }
6
+ export declare function getConfig(): Config;
7
+ export declare function log(message: string, ...args: unknown[]): void;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,SAAS,IAAI,MAAM,CAQlC;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAK7D"}
package/dist/config.js ADDED
@@ -0,0 +1,19 @@
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ const __filename = fileURLToPath(import.meta.url);
4
+ const __dirname = path.dirname(__filename);
5
+ export function getConfig() {
6
+ const projectRoot = path.resolve(__dirname, '..');
7
+ return {
8
+ env: process.env.DECIBEL_ENV || 'dev',
9
+ org: process.env.DECIBEL_ORG || 'default',
10
+ rootDir: process.env.DECIBEL_MCP_ROOT || path.join(projectRoot, 'data'),
11
+ };
12
+ }
13
+ export function log(message, ...args) {
14
+ const config = getConfig();
15
+ if (config.env === 'dev') {
16
+ console.error(`[decibel-mcp] ${message}`, ...args);
17
+ }
18
+ }
19
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAQ3C,MAAM,UAAU,SAAS;IACvB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAElD,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,KAAK;QACrC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,GAAG,IAAe;IACrD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Read PID from file. Returns null if file doesn't exist or is invalid.
3
+ */
4
+ export declare function readPid(): number | null;
5
+ /**
6
+ * Write current process PID to file.
7
+ */
8
+ export declare function writePid(): void;
9
+ /**
10
+ * Remove PID file.
11
+ */
12
+ export declare function removePid(): void;
13
+ /**
14
+ * Check if another daemon is already running.
15
+ * Returns the PID if running, null if not.
16
+ */
17
+ export declare function checkRunning(): number | null;
18
+ export declare function getLogPath(): string;
19
+ /**
20
+ * Rotate a log file if it exceeds maxSizeBytes.
21
+ * Rotation: file → file.1 → file.2 → ... → file.{maxFiles} (deleted)
22
+ * Returns true if rotation occurred.
23
+ */
24
+ export declare function rotateLog(filePath: string, maxSizeBytes?: number, maxFiles?: number): boolean;
25
+ /**
26
+ * Check for crash loop. Returns true if safe to start, false if should exit.
27
+ * Exits process with code 0 if crash loop detected (tells launchd to stop).
28
+ */
29
+ export declare function checkCrashLoop(): boolean;
30
+ /**
31
+ * Reset crash count after healthy running period.
32
+ * Call once after successful startup.
33
+ */
34
+ export declare function scheduleHealthReset(): void;
35
+ /**
36
+ * Clear crash counter (for --reset-crashes CLI flag).
37
+ */
38
+ export declare function resetCrashes(): void;
39
+ /**
40
+ * Install signal handlers for graceful shutdown.
41
+ * Returns a promise that resolves when shutdown is requested.
42
+ */
43
+ export declare function installShutdownHandlers(cleanup: () => Promise<void>): void;
44
+ /**
45
+ * Install the launchd plist so the daemon auto-starts on login.
46
+ */
47
+ export declare function installLaunchd(options?: {
48
+ port?: number;
49
+ }): {
50
+ installed: boolean;
51
+ path: string;
52
+ message: string;
53
+ };
54
+ /**
55
+ * Uninstall the launchd plist and stop the daemon.
56
+ */
57
+ export declare function uninstallLaunchd(): {
58
+ uninstalled: boolean;
59
+ message: string;
60
+ };
61
+ /**
62
+ * Get daemon status.
63
+ */
64
+ export declare function daemonStatus(): {
65
+ running: boolean;
66
+ pid: number | null;
67
+ pidFile: string;
68
+ logFile: string;
69
+ launchd: boolean;
70
+ port: number | null;
71
+ };
72
+ /**
73
+ * Handle daemon subcommands: install, uninstall, status.
74
+ * Returns true if a subcommand was handled (and process should exit).
75
+ */
76
+ export declare function handleDaemonSubcommand(args: string[]): boolean;
77
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAgDA;;GAEG;AACH,wBAAgB,OAAO,IAAI,MAAM,GAAG,IAAI,CAQvC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAI/B;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAOhC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAQ5C;AAMD,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AASD;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,MAA8B,EAC5C,QAAQ,GAAE,MAA8B,GACvC,OAAO,CA0BT;AA6BD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAyBxC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAQ1C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAQD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC3B,IAAI,CA8BN;AAYD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAgDjH;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAkB5E;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,CAUA;AAMD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAmC9D"}
package/dist/daemon.js ADDED
@@ -0,0 +1,374 @@
1
+ // ============================================================================
2
+ // Daemon Lifecycle Manager
3
+ // ============================================================================
4
+ // Handles PID files, process locking, log rotation, and macOS launchd
5
+ // integration for long-running daemon mode.
6
+ // ============================================================================
7
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, statSync, renameSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ import { homedir } from 'os';
10
+ import { execSync } from 'child_process';
11
+ import { fileURLToPath } from 'url';
12
+ import { log } from './config.js';
13
+ // ============================================================================
14
+ // Paths
15
+ // ============================================================================
16
+ const DECIBEL_HOME = join(homedir(), '.decibel');
17
+ const PID_PATH = join(DECIBEL_HOME, 'daemon.pid');
18
+ const LOG_DIR = join(DECIBEL_HOME, 'logs');
19
+ const LOG_PATH = join(LOG_DIR, 'daemon.log');
20
+ const PLIST_NAME = 'com.decibel.daemon.plist';
21
+ const LAUNCH_AGENTS_DIR = join(homedir(), 'Library', 'LaunchAgents');
22
+ const PLIST_DEST = join(LAUNCH_AGENTS_DIR, PLIST_NAME);
23
+ function ensureDir(dir) {
24
+ if (!existsSync(dir)) {
25
+ mkdirSync(dir, { recursive: true });
26
+ }
27
+ }
28
+ // ============================================================================
29
+ // PID Management
30
+ // ============================================================================
31
+ /**
32
+ * Check if a process with the given PID is alive.
33
+ */
34
+ function isProcessAlive(pid) {
35
+ try {
36
+ process.kill(pid, 0); // Signal 0 = check existence, don't kill
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ /**
44
+ * Read PID from file. Returns null if file doesn't exist or is invalid.
45
+ */
46
+ export function readPid() {
47
+ try {
48
+ const content = readFileSync(PID_PATH, 'utf-8').trim();
49
+ const pid = parseInt(content, 10);
50
+ return isNaN(pid) ? null : pid;
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ /**
57
+ * Write current process PID to file.
58
+ */
59
+ export function writePid() {
60
+ ensureDir(DECIBEL_HOME);
61
+ writeFileSync(PID_PATH, String(process.pid), 'utf-8');
62
+ log(`Daemon: PID ${process.pid} written to ${PID_PATH}`);
63
+ }
64
+ /**
65
+ * Remove PID file.
66
+ */
67
+ export function removePid() {
68
+ try {
69
+ unlinkSync(PID_PATH);
70
+ log(`Daemon: PID file removed`);
71
+ }
72
+ catch {
73
+ // File may not exist — that's fine
74
+ }
75
+ }
76
+ /**
77
+ * Check if another daemon is already running.
78
+ * Returns the PID if running, null if not.
79
+ */
80
+ export function checkRunning() {
81
+ const pid = readPid();
82
+ if (pid === null)
83
+ return null;
84
+ if (isProcessAlive(pid))
85
+ return pid;
86
+ // Stale PID file — clean it up
87
+ log(`Daemon: Stale PID file (process ${pid} not running), cleaning up`);
88
+ removePid();
89
+ return null;
90
+ }
91
+ // ============================================================================
92
+ // Logging
93
+ // ============================================================================
94
+ export function getLogPath() {
95
+ ensureDir(LOG_DIR);
96
+ return LOG_PATH;
97
+ }
98
+ // ============================================================================
99
+ // Log Rotation
100
+ // ============================================================================
101
+ const DEFAULT_MAX_LOG_BYTES = 10 * 1024 * 1024; // 10MB
102
+ const DEFAULT_MAX_LOG_FILES = 3;
103
+ /**
104
+ * Rotate a log file if it exceeds maxSizeBytes.
105
+ * Rotation: file → file.1 → file.2 → ... → file.{maxFiles} (deleted)
106
+ * Returns true if rotation occurred.
107
+ */
108
+ export function rotateLog(filePath, maxSizeBytes = DEFAULT_MAX_LOG_BYTES, maxFiles = DEFAULT_MAX_LOG_FILES) {
109
+ try {
110
+ if (!existsSync(filePath))
111
+ return false;
112
+ const stat = statSync(filePath);
113
+ if (stat.size < maxSizeBytes)
114
+ return false;
115
+ // Shift existing rotated files: .3 → delete, .2 → .3, .1 → .2
116
+ for (let i = maxFiles; i >= 1; i--) {
117
+ const src = i === 1 ? filePath : `${filePath}.${i - 1}`;
118
+ const dst = `${filePath}.${i}`;
119
+ if (i === maxFiles && existsSync(dst)) {
120
+ unlinkSync(dst);
121
+ }
122
+ if (existsSync(src)) {
123
+ renameSync(src, dst);
124
+ }
125
+ }
126
+ // Create empty file in place of the original (which was renamed to .1)
127
+ writeFileSync(filePath, '', 'utf-8');
128
+ log(`Daemon: Rotated log ${filePath} (was ${(stat.size / 1024 / 1024).toFixed(1)}MB)`);
129
+ return true;
130
+ }
131
+ catch (err) {
132
+ log(`Daemon: Log rotation failed for ${filePath}: ${err}`);
133
+ return false;
134
+ }
135
+ }
136
+ // ============================================================================
137
+ // Crash Loop Protection
138
+ // ============================================================================
139
+ const META_PATH = join(DECIBEL_HOME, 'daemon.meta');
140
+ const MAX_CRASH_COUNT = 5;
141
+ const CRASH_WINDOW_MS = 60_000; // 60 seconds
142
+ const HEALTH_RESET_MS = 5 * 60_000; // 5 minutes
143
+ function readMeta() {
144
+ try {
145
+ return JSON.parse(readFileSync(META_PATH, 'utf-8'));
146
+ }
147
+ catch {
148
+ return null;
149
+ }
150
+ }
151
+ function writeMeta(meta) {
152
+ ensureDir(DECIBEL_HOME);
153
+ writeFileSync(META_PATH, JSON.stringify(meta), 'utf-8');
154
+ }
155
+ /**
156
+ * Check for crash loop. Returns true if safe to start, false if should exit.
157
+ * Exits process with code 0 if crash loop detected (tells launchd to stop).
158
+ */
159
+ export function checkCrashLoop() {
160
+ const now = Date.now();
161
+ const meta = readMeta();
162
+ let crashCount = 0;
163
+ if (meta) {
164
+ const lastStart = new Date(meta.started_at).getTime();
165
+ if (now - lastStart < CRASH_WINDOW_MS) {
166
+ crashCount = meta.crash_count + 1;
167
+ }
168
+ // else: enough time has passed, reset
169
+ }
170
+ if (crashCount >= MAX_CRASH_COUNT) {
171
+ console.error(`Daemon: Crash loop detected (${crashCount} crashes in <60s). Exiting.`);
172
+ console.error('Daemon: Run with --reset-crashes to clear the counter.');
173
+ writeMeta({ started_at: new Date().toISOString(), crash_count: crashCount });
174
+ return false;
175
+ }
176
+ writeMeta({ started_at: new Date().toISOString(), crash_count: crashCount });
177
+ if (crashCount > 0) {
178
+ log(`Daemon: Crash count: ${crashCount}/${MAX_CRASH_COUNT}`);
179
+ }
180
+ return true;
181
+ }
182
+ /**
183
+ * Reset crash count after healthy running period.
184
+ * Call once after successful startup.
185
+ */
186
+ export function scheduleHealthReset() {
187
+ setTimeout(() => {
188
+ const meta = readMeta();
189
+ if (meta && meta.crash_count > 0) {
190
+ writeMeta({ started_at: meta.started_at, crash_count: 0 });
191
+ log('Daemon: Crash counter reset after healthy running');
192
+ }
193
+ }, HEALTH_RESET_MS);
194
+ }
195
+ /**
196
+ * Clear crash counter (for --reset-crashes CLI flag).
197
+ */
198
+ export function resetCrashes() {
199
+ writeMeta({ started_at: new Date().toISOString(), crash_count: 0 });
200
+ console.log('Daemon: Crash counter reset.');
201
+ }
202
+ // ============================================================================
203
+ // Graceful Shutdown
204
+ // ============================================================================
205
+ const DRAIN_TIMEOUT_MS = 30_000;
206
+ /**
207
+ * Install signal handlers for graceful shutdown.
208
+ * Returns a promise that resolves when shutdown is requested.
209
+ */
210
+ export function installShutdownHandlers(cleanup) {
211
+ let shuttingDown = false;
212
+ async function shutdown(signal) {
213
+ if (shuttingDown)
214
+ return;
215
+ shuttingDown = true;
216
+ log(`Daemon: ${signal} received, shutting down gracefully...`);
217
+ // Race: cleanup vs timeout
218
+ const timer = setTimeout(() => {
219
+ log(`Daemon: Drain timeout (${DRAIN_TIMEOUT_MS}ms) exceeded, forcing exit`);
220
+ removePid();
221
+ process.exit(1);
222
+ }, DRAIN_TIMEOUT_MS);
223
+ try {
224
+ await cleanup();
225
+ log('Daemon: Clean shutdown complete');
226
+ }
227
+ catch (err) {
228
+ log(`Daemon: Error during shutdown: ${err}`);
229
+ }
230
+ finally {
231
+ clearTimeout(timer);
232
+ removePid();
233
+ process.exit(0);
234
+ }
235
+ }
236
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
237
+ process.on('SIGINT', () => shutdown('SIGINT'));
238
+ }
239
+ // ============================================================================
240
+ // launchd Integration (macOS)
241
+ // ============================================================================
242
+ function getTemplateDir() {
243
+ const __filename = fileURLToPath(import.meta.url);
244
+ const __dirname = dirname(__filename);
245
+ return join(__dirname, '..', 'templates');
246
+ }
247
+ /**
248
+ * Install the launchd plist so the daemon auto-starts on login.
249
+ */
250
+ export function installLaunchd(options) {
251
+ const templatePath = join(getTemplateDir(), PLIST_NAME);
252
+ if (!existsSync(templatePath)) {
253
+ return {
254
+ installed: false,
255
+ path: PLIST_DEST,
256
+ message: `Template not found: ${templatePath}`,
257
+ };
258
+ }
259
+ // Read template and substitute variables
260
+ let plist = readFileSync(templatePath, 'utf-8');
261
+ const serverPath = join(dirname(fileURLToPath(import.meta.url)), '..', 'dist', 'server.js');
262
+ const port = options?.port || 4888;
263
+ plist = plist.replace('{{NODE_PATH}}', process.execPath);
264
+ plist = plist.replace('{{SERVER_PATH}}', serverPath);
265
+ plist = plist.replace('{{PORT}}', String(port));
266
+ plist = plist.replace('{{LOG_PATH}}', LOG_PATH);
267
+ plist = plist.replace('{{ERROR_LOG_PATH}}', join(LOG_DIR, 'daemon-error.log'));
268
+ // Write to LaunchAgents
269
+ ensureDir(LAUNCH_AGENTS_DIR);
270
+ writeFileSync(PLIST_DEST, plist, 'utf-8');
271
+ // Load the agent
272
+ try {
273
+ execSync(`launchctl load ${PLIST_DEST}`, { stdio: 'pipe' });
274
+ }
275
+ catch {
276
+ // May already be loaded — try unload then load
277
+ try {
278
+ execSync(`launchctl unload ${PLIST_DEST}`, { stdio: 'pipe' });
279
+ execSync(`launchctl load ${PLIST_DEST}`, { stdio: 'pipe' });
280
+ }
281
+ catch (e) {
282
+ return {
283
+ installed: true,
284
+ path: PLIST_DEST,
285
+ message: `Plist written but launchctl load failed: ${e}`,
286
+ };
287
+ }
288
+ }
289
+ return {
290
+ installed: true,
291
+ path: PLIST_DEST,
292
+ message: `Installed and loaded. Daemon will auto-start on login (port ${port}).`,
293
+ };
294
+ }
295
+ /**
296
+ * Uninstall the launchd plist and stop the daemon.
297
+ */
298
+ export function uninstallLaunchd() {
299
+ if (!existsSync(PLIST_DEST)) {
300
+ return { uninstalled: false, message: 'Plist not found — daemon not installed.' };
301
+ }
302
+ try {
303
+ execSync(`launchctl unload ${PLIST_DEST}`, { stdio: 'pipe' });
304
+ }
305
+ catch {
306
+ // May not be loaded
307
+ }
308
+ try {
309
+ unlinkSync(PLIST_DEST);
310
+ }
311
+ catch {
312
+ return { uninstalled: false, message: 'Failed to remove plist file.' };
313
+ }
314
+ return { uninstalled: true, message: 'Daemon uninstalled. Will no longer auto-start.' };
315
+ }
316
+ /**
317
+ * Get daemon status.
318
+ */
319
+ export function daemonStatus() {
320
+ const pid = checkRunning();
321
+ return {
322
+ running: pid !== null,
323
+ pid,
324
+ pidFile: PID_PATH,
325
+ logFile: LOG_PATH,
326
+ launchd: existsSync(PLIST_DEST),
327
+ port: null, // Would need to read from config or PID metadata
328
+ };
329
+ }
330
+ // ============================================================================
331
+ // CLI Subcommands (called from server.ts)
332
+ // ============================================================================
333
+ /**
334
+ * Handle daemon subcommands: install, uninstall, status.
335
+ * Returns true if a subcommand was handled (and process should exit).
336
+ */
337
+ export function handleDaemonSubcommand(args) {
338
+ const subcommand = args.find(a => ['install', 'uninstall', 'status'].includes(a));
339
+ if (!subcommand)
340
+ return false;
341
+ switch (subcommand) {
342
+ case 'install': {
343
+ const portIdx = args.indexOf('--port');
344
+ const port = portIdx !== -1 ? parseInt(args[portIdx + 1], 10) : undefined;
345
+ const result = installLaunchd({ port });
346
+ console.log(result.message);
347
+ console.log(` Plist: ${result.path}`);
348
+ process.exit(result.installed ? 0 : 1);
349
+ return true;
350
+ }
351
+ case 'uninstall': {
352
+ const result = uninstallLaunchd();
353
+ console.log(result.message);
354
+ process.exit(result.uninstalled ? 0 : 1);
355
+ return true;
356
+ }
357
+ case 'status': {
358
+ const status = daemonStatus();
359
+ if (status.running) {
360
+ console.log(`Daemon is running (PID ${status.pid})`);
361
+ }
362
+ else {
363
+ console.log('Daemon is not running');
364
+ }
365
+ console.log(` PID file: ${status.pidFile}`);
366
+ console.log(` Log file: ${status.logFile}`);
367
+ console.log(` launchd: ${status.launchd ? 'installed' : 'not installed'}`);
368
+ process.exit(0);
369
+ return true;
370
+ }
371
+ }
372
+ return false;
373
+ }
374
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export interface DaemonConfig {
2
+ daemon: {
3
+ port: number;
4
+ host: string;
5
+ auth_token?: string;
6
+ log_max_size_mb: number;
7
+ log_max_files: number;
8
+ rate_limit_rpm: number;
9
+ };
10
+ license?: {
11
+ key?: string;
12
+ };
13
+ }
14
+ /**
15
+ * Load config from ~/.decibel/config.yaml, merged with defaults.
16
+ * Returns defaults if file doesn't exist or is invalid.
17
+ */
18
+ export declare function loadConfig(): DaemonConfig;
19
+ /**
20
+ * Get the config file path (for display purposes).
21
+ */
22
+ export declare function getConfigPath(): string;
23
+ /**
24
+ * Merge CLI flags over config file values. CLI takes precedence.
25
+ */
26
+ export declare function mergeCliOverrides(config: DaemonConfig, overrides: {
27
+ port?: number;
28
+ host?: string;
29
+ authToken?: string;
30
+ logMaxSizeMb?: number;
31
+ logMaxFiles?: number;
32
+ rateLimitRpm?: number;
33
+ }): DaemonConfig;
34
+ /**
35
+ * Reload config and return hot-reloadable fields that changed.
36
+ * Port and host changes are detected but require a restart.
37
+ */
38
+ export declare function reloadConfig(current: DaemonConfig): {
39
+ config: DaemonConfig;
40
+ changes: string[];
41
+ requiresRestart: boolean;
42
+ };
43
+ //# sourceMappingURL=daemonConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemonConfig.d.ts","sourceRoot":"","sources":["../src/daemonConfig.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAsBD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,YAAY,CA4BzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,YAAY,CAad;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,GACpB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CA2BvE"}