decibel-tools-mcp 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 (255) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +335 -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 +19 -0
  28. package/dist/architectAdrs.d.ts.map +1 -0
  29. package/dist/architectAdrs.js +123 -0
  30. package/dist/architectAdrs.js.map +1 -0
  31. package/dist/config.d.ts +8 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +19 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/dataRoot.d.ts +45 -0
  36. package/dist/dataRoot.d.ts.map +1 -0
  37. package/dist/dataRoot.js +201 -0
  38. package/dist/dataRoot.js.map +1 -0
  39. package/dist/decibelPaths.d.ts +42 -0
  40. package/dist/decibelPaths.d.ts.map +1 -0
  41. package/dist/decibelPaths.js +150 -0
  42. package/dist/decibelPaths.js.map +1 -0
  43. package/dist/httpServer.d.ts +49 -0
  44. package/dist/httpServer.d.ts.map +1 -0
  45. package/dist/httpServer.js +1472 -0
  46. package/dist/httpServer.js.map +1 -0
  47. package/dist/lib/benchmark.d.ts +110 -0
  48. package/dist/lib/benchmark.d.ts.map +1 -0
  49. package/dist/lib/benchmark.js +338 -0
  50. package/dist/lib/benchmark.js.map +1 -0
  51. package/dist/lib/supabase.d.ts +123 -0
  52. package/dist/lib/supabase.d.ts.map +1 -0
  53. package/dist/lib/supabase.js +91 -0
  54. package/dist/lib/supabase.js.map +1 -0
  55. package/dist/projectPaths.d.ts +27 -0
  56. package/dist/projectPaths.d.ts.map +1 -0
  57. package/dist/projectPaths.js +86 -0
  58. package/dist/projectPaths.js.map +1 -0
  59. package/dist/projectRegistry.d.ts +97 -0
  60. package/dist/projectRegistry.d.ts.map +1 -0
  61. package/dist/projectRegistry.js +362 -0
  62. package/dist/projectRegistry.js.map +1 -0
  63. package/dist/sentinelIssues.d.ts +44 -0
  64. package/dist/sentinelIssues.d.ts.map +1 -0
  65. package/dist/sentinelIssues.js +213 -0
  66. package/dist/sentinelIssues.js.map +1 -0
  67. package/dist/server.d.ts +3 -0
  68. package/dist/server.d.ts.map +1 -0
  69. package/dist/server.js +93 -0
  70. package/dist/server.js.map +1 -0
  71. package/dist/test.d.ts +7 -0
  72. package/dist/test.d.ts.map +1 -0
  73. package/dist/test.js +77 -0
  74. package/dist/test.js.map +1 -0
  75. package/dist/tools/agentic/index.d.ts +7 -0
  76. package/dist/tools/agentic/index.d.ts.map +1 -0
  77. package/dist/tools/agentic/index.js +180 -0
  78. package/dist/tools/agentic/index.js.map +1 -0
  79. package/dist/tools/architect/index.d.ts +9 -0
  80. package/dist/tools/architect/index.d.ts.map +1 -0
  81. package/dist/tools/architect/index.js +383 -0
  82. package/dist/tools/architect/index.js.map +1 -0
  83. package/dist/tools/architect.d.ts +19 -0
  84. package/dist/tools/architect.d.ts.map +1 -0
  85. package/dist/tools/architect.js +88 -0
  86. package/dist/tools/architect.js.map +1 -0
  87. package/dist/tools/bench.d.ts +89 -0
  88. package/dist/tools/bench.d.ts.map +1 -0
  89. package/dist/tools/bench.js +826 -0
  90. package/dist/tools/bench.js.map +1 -0
  91. package/dist/tools/context/index.d.ts +11 -0
  92. package/dist/tools/context/index.d.ts.map +1 -0
  93. package/dist/tools/context/index.js +439 -0
  94. package/dist/tools/context/index.js.map +1 -0
  95. package/dist/tools/context.d.ts +146 -0
  96. package/dist/tools/context.d.ts.map +1 -0
  97. package/dist/tools/context.js +481 -0
  98. package/dist/tools/context.js.map +1 -0
  99. package/dist/tools/crit.d.ts +63 -0
  100. package/dist/tools/crit.d.ts.map +1 -0
  101. package/dist/tools/crit.js +159 -0
  102. package/dist/tools/crit.js.map +1 -0
  103. package/dist/tools/data-inspector.d.ts +188 -0
  104. package/dist/tools/data-inspector.d.ts.map +1 -0
  105. package/dist/tools/data-inspector.js +650 -0
  106. package/dist/tools/data-inspector.js.map +1 -0
  107. package/dist/tools/deck.d.ts +11 -0
  108. package/dist/tools/deck.d.ts.map +1 -0
  109. package/dist/tools/deck.js +170 -0
  110. package/dist/tools/deck.js.map +1 -0
  111. package/dist/tools/designer/index.d.ts +6 -0
  112. package/dist/tools/designer/index.d.ts.map +1 -0
  113. package/dist/tools/designer/index.js +177 -0
  114. package/dist/tools/designer/index.js.map +1 -0
  115. package/dist/tools/designer.d.ts +20 -0
  116. package/dist/tools/designer.d.ts.map +1 -0
  117. package/dist/tools/designer.js +75 -0
  118. package/dist/tools/designer.js.map +1 -0
  119. package/dist/tools/dojo/index.d.ts +13 -0
  120. package/dist/tools/dojo/index.d.ts.map +1 -0
  121. package/dist/tools/dojo/index.js +547 -0
  122. package/dist/tools/dojo/index.js.map +1 -0
  123. package/dist/tools/dojo.d.ts +254 -0
  124. package/dist/tools/dojo.d.ts.map +1 -0
  125. package/dist/tools/dojo.js +933 -0
  126. package/dist/tools/dojo.js.map +1 -0
  127. package/dist/tools/dojoBench.d.ts +49 -0
  128. package/dist/tools/dojoBench.d.ts.map +1 -0
  129. package/dist/tools/dojoBench.js +205 -0
  130. package/dist/tools/dojoBench.js.map +1 -0
  131. package/dist/tools/dojoGraduated.d.ts +50 -0
  132. package/dist/tools/dojoGraduated.d.ts.map +1 -0
  133. package/dist/tools/dojoGraduated.js +174 -0
  134. package/dist/tools/dojoGraduated.js.map +1 -0
  135. package/dist/tools/dojoPolicy.d.ts +65 -0
  136. package/dist/tools/dojoPolicy.d.ts.map +1 -0
  137. package/dist/tools/dojoPolicy.js +263 -0
  138. package/dist/tools/dojoPolicy.js.map +1 -0
  139. package/dist/tools/friction/index.d.ts +7 -0
  140. package/dist/tools/friction/index.d.ts.map +1 -0
  141. package/dist/tools/friction/index.js +239 -0
  142. package/dist/tools/friction/index.js.map +1 -0
  143. package/dist/tools/friction.d.ts +82 -0
  144. package/dist/tools/friction.d.ts.map +1 -0
  145. package/dist/tools/friction.js +331 -0
  146. package/dist/tools/friction.js.map +1 -0
  147. package/dist/tools/index.d.ts +5 -0
  148. package/dist/tools/index.d.ts.map +1 -0
  149. package/dist/tools/index.js +52 -0
  150. package/dist/tools/index.js.map +1 -0
  151. package/dist/tools/learnings/index.d.ts +5 -0
  152. package/dist/tools/learnings/index.d.ts.map +1 -0
  153. package/dist/tools/learnings/index.js +123 -0
  154. package/dist/tools/learnings/index.js.map +1 -0
  155. package/dist/tools/learnings.d.ts +41 -0
  156. package/dist/tools/learnings.d.ts.map +1 -0
  157. package/dist/tools/learnings.js +149 -0
  158. package/dist/tools/learnings.js.map +1 -0
  159. package/dist/tools/oracle/index.d.ts +5 -0
  160. package/dist/tools/oracle/index.d.ts.map +1 -0
  161. package/dist/tools/oracle/index.js +97 -0
  162. package/dist/tools/oracle/index.js.map +1 -0
  163. package/dist/tools/oracle.d.ts +90 -0
  164. package/dist/tools/oracle.d.ts.map +1 -0
  165. package/dist/tools/oracle.js +529 -0
  166. package/dist/tools/oracle.js.map +1 -0
  167. package/dist/tools/policy.d.ts +119 -0
  168. package/dist/tools/policy.d.ts.map +1 -0
  169. package/dist/tools/policy.js +406 -0
  170. package/dist/tools/policy.js.map +1 -0
  171. package/dist/tools/provenance/index.d.ts +4 -0
  172. package/dist/tools/provenance/index.d.ts.map +1 -0
  173. package/dist/tools/provenance/index.js +58 -0
  174. package/dist/tools/provenance/index.js.map +1 -0
  175. package/dist/tools/provenance.d.ts +75 -0
  176. package/dist/tools/provenance.d.ts.map +1 -0
  177. package/dist/tools/provenance.js +197 -0
  178. package/dist/tools/provenance.js.map +1 -0
  179. package/dist/tools/rateLimiter.d.ts +45 -0
  180. package/dist/tools/rateLimiter.d.ts.map +1 -0
  181. package/dist/tools/rateLimiter.js +91 -0
  182. package/dist/tools/rateLimiter.js.map +1 -0
  183. package/dist/tools/registry/index.d.ts +10 -0
  184. package/dist/tools/registry/index.d.ts.map +1 -0
  185. package/dist/tools/registry/index.js +467 -0
  186. package/dist/tools/registry/index.js.map +1 -0
  187. package/dist/tools/registry.d.ts +3 -0
  188. package/dist/tools/registry.d.ts.map +1 -0
  189. package/dist/tools/registry.js +189 -0
  190. package/dist/tools/registry.js.map +1 -0
  191. package/dist/tools/roadmap/index.d.ts +9 -0
  192. package/dist/tools/roadmap/index.d.ts.map +1 -0
  193. package/dist/tools/roadmap/index.js +250 -0
  194. package/dist/tools/roadmap/index.js.map +1 -0
  195. package/dist/tools/roadmap.d.ts +88 -0
  196. package/dist/tools/roadmap.d.ts.map +1 -0
  197. package/dist/tools/roadmap.js +365 -0
  198. package/dist/tools/roadmap.js.map +1 -0
  199. package/dist/tools/sentinel/index.d.ts +19 -0
  200. package/dist/tools/sentinel/index.d.ts.map +1 -0
  201. package/dist/tools/sentinel/index.js +832 -0
  202. package/dist/tools/sentinel/index.js.map +1 -0
  203. package/dist/tools/sentinel-scan-data.d.ts +90 -0
  204. package/dist/tools/sentinel-scan-data.d.ts.map +1 -0
  205. package/dist/tools/sentinel-scan-data.js +122 -0
  206. package/dist/tools/sentinel-scan-data.js.map +1 -0
  207. package/dist/tools/sentinel.d.ts +156 -0
  208. package/dist/tools/sentinel.d.ts.map +1 -0
  209. package/dist/tools/sentinel.js +603 -0
  210. package/dist/tools/sentinel.js.map +1 -0
  211. package/dist/tools/shared/index.d.ts +4 -0
  212. package/dist/tools/shared/index.d.ts.map +1 -0
  213. package/dist/tools/shared/index.js +7 -0
  214. package/dist/tools/shared/index.js.map +1 -0
  215. package/dist/tools/shared/project.d.ts +17 -0
  216. package/dist/tools/shared/project.d.ts.map +1 -0
  217. package/dist/tools/shared/project.js +36 -0
  218. package/dist/tools/shared/project.js.map +1 -0
  219. package/dist/tools/shared/response.d.ts +10 -0
  220. package/dist/tools/shared/response.d.ts.map +1 -0
  221. package/dist/tools/shared/response.js +36 -0
  222. package/dist/tools/shared/response.js.map +1 -0
  223. package/dist/tools/shared/validation.d.ts +10 -0
  224. package/dist/tools/shared/validation.d.ts.map +1 -0
  225. package/dist/tools/shared/validation.js +26 -0
  226. package/dist/tools/shared/validation.js.map +1 -0
  227. package/dist/tools/studio/cloud-spine.d.ts +27 -0
  228. package/dist/tools/studio/cloud-spine.d.ts.map +1 -0
  229. package/dist/tools/studio/cloud-spine.js +773 -0
  230. package/dist/tools/studio/cloud-spine.js.map +1 -0
  231. package/dist/tools/studio/index.d.ts +154 -0
  232. package/dist/tools/studio/index.d.ts.map +1 -0
  233. package/dist/tools/studio/index.js +525 -0
  234. package/dist/tools/studio/index.js.map +1 -0
  235. package/dist/tools/testSpec.d.ts +122 -0
  236. package/dist/tools/testSpec.d.ts.map +1 -0
  237. package/dist/tools/testSpec.js +525 -0
  238. package/dist/tools/testSpec.js.map +1 -0
  239. package/dist/tools/toolsIndex.d.ts +5 -0
  240. package/dist/tools/toolsIndex.d.ts.map +1 -0
  241. package/dist/tools/toolsIndex.js +37 -0
  242. package/dist/tools/toolsIndex.js.map +1 -0
  243. package/dist/tools/types.d.ts +30 -0
  244. package/dist/tools/types.d.ts.map +1 -0
  245. package/dist/tools/types.js +7 -0
  246. package/dist/tools/types.js.map +1 -0
  247. package/dist/tools/voice/index.d.ts +8 -0
  248. package/dist/tools/voice/index.d.ts.map +1 -0
  249. package/dist/tools/voice/index.js +176 -0
  250. package/dist/tools/voice/index.js.map +1 -0
  251. package/dist/tools/voice.d.ts +291 -0
  252. package/dist/tools/voice.d.ts.map +1 -0
  253. package/dist/tools/voice.js +734 -0
  254. package/dist/tools/voice.js.map +1 -0
  255. package/package.json +54 -0
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Agentic Pack Engine - Type Definitions
3
+ *
4
+ * Core invariant: Canonical payload is the truth. Renderers are only views.
5
+ * Renderers NEVER change meaning. They change compression, typography, and stance.
6
+ */
7
+ export type AgentRole = 'Sensor' | 'Analyst' | 'Overmind' | 'Specialist';
8
+ export type AgentStatus = 'OK' | 'DEGRADED' | 'BLOCKED' | 'ALERT';
9
+ export type LoadLevel = 'GREEN' | 'YELLOW' | 'RED';
10
+ export interface Evidence {
11
+ source: string;
12
+ value: unknown;
13
+ confidence?: number;
14
+ timestamp?: string;
15
+ }
16
+ export interface MissingData {
17
+ field: string;
18
+ reason: string;
19
+ severity: 'blocking' | 'degraded' | 'informational';
20
+ }
21
+ export interface Guardrail {
22
+ id: string;
23
+ description: string;
24
+ status: 'active' | 'triggered' | 'disabled';
25
+ }
26
+ export interface DissentSummary {
27
+ agent_id: string;
28
+ position: string;
29
+ confidence: number;
30
+ }
31
+ export interface PayloadMetadata {
32
+ pack_id: string;
33
+ pack_hash: string;
34
+ renderer_id?: string;
35
+ specialist_id?: string;
36
+ created_at: string;
37
+ }
38
+ export interface CanonicalPayload {
39
+ role: AgentRole;
40
+ status: AgentStatus;
41
+ load: LoadLevel;
42
+ summary: string;
43
+ evidence: Evidence[];
44
+ missing_data: MissingData[];
45
+ decision?: string;
46
+ guardrails?: Guardrail[];
47
+ dissent_summary?: DissentSummary[];
48
+ specialist_id?: string;
49
+ specialist_name?: string;
50
+ metadata: PayloadMetadata;
51
+ }
52
+ export type RenderTarget = 'plain' | 'markdown' | 'ansi';
53
+ export interface RendererConstraints {
54
+ max_emoji_count?: number;
55
+ emoji_position?: 'header-only' | 'none' | 'anywhere';
56
+ max_lines?: number;
57
+ max_section_lines?: number;
58
+ required_sections?: string[];
59
+ banned_punctuation?: string[];
60
+ banned_words?: string[];
61
+ }
62
+ export interface RendererConfig {
63
+ id: string;
64
+ name: string;
65
+ description?: string;
66
+ template: string;
67
+ constraints: RendererConstraints;
68
+ ansi_styles?: Record<string, string>;
69
+ }
70
+ export interface RenderOutput {
71
+ rendered: string;
72
+ renderer_id: string;
73
+ target: RenderTarget;
74
+ warnings: string[];
75
+ metadata: {
76
+ line_count: number;
77
+ char_count: number;
78
+ emoji_count: number;
79
+ };
80
+ }
81
+ export type LintSeverity = 'error' | 'warning' | 'info';
82
+ export interface LintViolation {
83
+ rule: string;
84
+ severity: LintSeverity;
85
+ message: string;
86
+ line?: number;
87
+ column?: number;
88
+ suggestion?: string;
89
+ }
90
+ export interface LintResult {
91
+ valid: boolean;
92
+ violations: LintViolation[];
93
+ renderer_id: string;
94
+ checked_at: string;
95
+ }
96
+ export interface AvatarConfig {
97
+ id: string;
98
+ name: string;
99
+ emoji?: string;
100
+ role: AgentRole;
101
+ description?: string;
102
+ }
103
+ export interface TaxonomyConfig {
104
+ roles: Record<AgentRole, {
105
+ emoji: string;
106
+ description: string;
107
+ }>;
108
+ statuses: Record<AgentStatus, {
109
+ emoji: string;
110
+ color: string;
111
+ }>;
112
+ loads: Record<LoadLevel, {
113
+ emoji: string;
114
+ color: string;
115
+ }>;
116
+ }
117
+ export interface ConsensusConfig {
118
+ quorum_threshold: number;
119
+ dissent_highlight_threshold: number;
120
+ max_pending_decisions: number;
121
+ }
122
+ export interface CompiledPack {
123
+ taxonomy: TaxonomyConfig;
124
+ renderers: Record<string, RendererConfig>;
125
+ consensus?: ConsensusConfig;
126
+ avatars: Record<string, AvatarConfig>;
127
+ ansi_styles?: Record<string, string>;
128
+ }
129
+ export interface CompileResult {
130
+ pack_id: string;
131
+ pack_hash: string;
132
+ compiled_at: string;
133
+ content: CompiledPack;
134
+ source_files: string[];
135
+ }
136
+ export interface GoldenCase {
137
+ name: string;
138
+ payload_file: string;
139
+ expected_outputs: Record<string, string>;
140
+ }
141
+ export interface GoldenTestResult {
142
+ case_name: string;
143
+ renderer_id: string;
144
+ passed: boolean;
145
+ expected_file: string;
146
+ actual?: string;
147
+ expected?: string;
148
+ diff?: string[];
149
+ lint_result?: LintResult;
150
+ }
151
+ export interface GoldenResult {
152
+ passed: boolean;
153
+ total_cases: number;
154
+ passed_cases: number;
155
+ failed_cases: number;
156
+ results: GoldenTestResult[];
157
+ run_at: string;
158
+ }
159
+ export interface CompilePackInput {
160
+ projectId?: string;
161
+ }
162
+ export interface CompilePackOutput {
163
+ status: 'compiled' | 'error';
164
+ result?: CompileResult;
165
+ error?: string;
166
+ }
167
+ export interface RenderInput {
168
+ projectId?: string;
169
+ payload: CanonicalPayload;
170
+ renderer_id: string;
171
+ target?: RenderTarget;
172
+ }
173
+ export interface RenderOutputResult {
174
+ status: 'rendered' | 'error';
175
+ result?: RenderOutput;
176
+ error?: string;
177
+ }
178
+ export interface LintInput {
179
+ projectId?: string;
180
+ rendered: string;
181
+ renderer_id: string;
182
+ payload?: CanonicalPayload;
183
+ }
184
+ export interface LintOutputResult {
185
+ status: 'linted' | 'error';
186
+ result?: LintResult;
187
+ error?: string;
188
+ }
189
+ export interface GoldenInput {
190
+ projectId?: string;
191
+ case_name?: string;
192
+ strict?: boolean;
193
+ }
194
+ export interface GoldenOutputResult {
195
+ status: 'executed' | 'error';
196
+ result?: GoldenResult;
197
+ error?: string;
198
+ }
199
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agentic/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Agentic Pack Engine - Type Definitions
3
+ *
4
+ * Core invariant: Canonical payload is the truth. Renderers are only views.
5
+ * Renderers NEVER change meaning. They change compression, typography, and stance.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agentic/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,19 @@
1
+ export type AdrStatus = 'proposed' | 'accepted' | 'superseded' | 'deprecated';
2
+ export interface AdrInput {
3
+ projectId: string;
4
+ title: string;
5
+ context: string;
6
+ decision: string;
7
+ consequences: string;
8
+ relatedIssues?: string[];
9
+ relatedEpics?: string[];
10
+ }
11
+ export interface AdrOutput {
12
+ id: string;
13
+ path: string;
14
+ }
15
+ /**
16
+ * Create a new project-level ADR
17
+ */
18
+ export declare function createProjectAdr(input: AdrInput): Promise<AdrOutput>;
19
+ //# sourceMappingURL=architectAdrs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architectAdrs.d.ts","sourceRoot":"","sources":["../src/architectAdrs.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;AAE9E,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAiFD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CA2D1E"}
@@ -0,0 +1,123 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { stringify as stringifyYaml } from 'yaml';
4
+ import { log } from './config.js';
5
+ import { getWritePath, getAllReadPaths } from './decibelPaths.js';
6
+ // ============================================================================
7
+ // Constants
8
+ // ============================================================================
9
+ const ADRS_SUBPATH = 'architect/adrs';
10
+ // ============================================================================
11
+ // Helpers
12
+ // ============================================================================
13
+ /**
14
+ * Slugify a title for use in filename
15
+ */
16
+ function slugify(text) {
17
+ return text
18
+ .toLowerCase()
19
+ .replace(/[^a-z0-9]+/g, '-')
20
+ .replace(/^-|-$/g, '')
21
+ .substring(0, 50);
22
+ }
23
+ /**
24
+ * Extract numeric suffix from ADR ID (e.g., "ADR-0007" -> 7)
25
+ */
26
+ function extractAdrNumber(id) {
27
+ const match = id.match(/^ADR-(\d+)$/i);
28
+ return match ? parseInt(match[1], 10) : 0;
29
+ }
30
+ /**
31
+ * Format ADR ID with zero-padding
32
+ */
33
+ function formatAdrId(num) {
34
+ return `ADR-${num.toString().padStart(4, '0')}`;
35
+ }
36
+ /**
37
+ * Ensure directory exists
38
+ */
39
+ async function ensureDir(dirPath) {
40
+ try {
41
+ await fs.mkdir(dirPath, { recursive: true });
42
+ }
43
+ catch {
44
+ // Directory already exists or other error
45
+ }
46
+ }
47
+ /**
48
+ * Get the next ADR number by scanning existing files in both paths
49
+ */
50
+ async function getNextAdrNumber(projectId) {
51
+ let maxNum = 0;
52
+ // Check both .decibel/ and decibel/ paths
53
+ const readPaths = await getAllReadPaths(projectId, ADRS_SUBPATH);
54
+ for (const adrsDir of readPaths) {
55
+ try {
56
+ const files = await fs.readdir(adrsDir);
57
+ for (const file of files) {
58
+ if (!file.endsWith('.yml') && !file.endsWith('.yaml'))
59
+ continue;
60
+ const match = file.match(/^ADR-(\d+)/i);
61
+ if (match) {
62
+ const num = parseInt(match[1], 10);
63
+ if (num > maxNum)
64
+ maxNum = num;
65
+ }
66
+ }
67
+ }
68
+ catch {
69
+ // Directory doesn't exist, continue
70
+ }
71
+ }
72
+ return maxNum + 1;
73
+ }
74
+ // ============================================================================
75
+ // Public API
76
+ // ============================================================================
77
+ /**
78
+ * Create a new project-level ADR
79
+ */
80
+ export async function createProjectAdr(input) {
81
+ const { projectId, title, context, decision, consequences, relatedIssues, relatedEpics, } = input;
82
+ // Always write to .decibel/ (primary path)
83
+ const adrsDir = await getWritePath(projectId, ADRS_SUBPATH);
84
+ await ensureDir(adrsDir);
85
+ // Get next ADR number (checks both paths to avoid ID conflicts)
86
+ const nextNum = await getNextAdrNumber(projectId);
87
+ const id = formatAdrId(nextNum);
88
+ // Build filename
89
+ const slug = slugify(title);
90
+ const filename = `${id}-${slug}.yml`;
91
+ const filePath = path.join(adrsDir, filename);
92
+ // Build YAML content
93
+ const now = new Date().toISOString();
94
+ const yamlObj = {
95
+ id,
96
+ scope: 'project',
97
+ project: projectId,
98
+ title,
99
+ status: 'accepted',
100
+ created_at: now,
101
+ updated_at: now,
102
+ context,
103
+ decision,
104
+ consequences,
105
+ };
106
+ if (relatedIssues && relatedIssues.length > 0) {
107
+ yamlObj.related_issues = relatedIssues;
108
+ }
109
+ if (relatedEpics && relatedEpics.length > 0) {
110
+ yamlObj.related_epics = relatedEpics;
111
+ }
112
+ const yamlContent = stringifyYaml(yamlObj, {
113
+ lineWidth: 0, // Don't wrap lines
114
+ });
115
+ // Write file
116
+ await fs.writeFile(filePath, yamlContent, 'utf-8');
117
+ log(`architectAdrs: Created ADR at ${filePath}`);
118
+ return {
119
+ id,
120
+ path: filePath,
121
+ };
122
+ }
123
+ //# sourceMappingURL=architectAdrs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architectAdrs.js","sourceRoot":"","sources":["../src/architectAdrs.ts"],"names":[],"mappings":"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"}
@@ -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 || 'mediareason',
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,aAAa;QAC7C,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,45 @@
1
+ export type DataDomain = 'sentinel-issues' | 'sentinel-epics' | 'architect-project' | 'architect-global' | 'designer-project' | 'designer-global' | 'friction-global' | 'learnings-project' | 'learnings-global';
2
+ export interface ResolvePathOptions {
3
+ /**
4
+ * If true (default), throws an error when a project-local domain
5
+ * cannot resolve to a .decibel/ folder. Set to false to allow
6
+ * fallback to global paths (legacy behavior).
7
+ */
8
+ requireProject?: boolean;
9
+ }
10
+ /**
11
+ * Resolve the appropriate data path for a given domain.
12
+ *
13
+ * Project-local domains (use .decibel/ if available):
14
+ * - sentinel-issues, sentinel-epics
15
+ * - architect-project, designer-project, learnings-project
16
+ *
17
+ * Global domains (always use DECIBEL_MCP_ROOT or ~/.decibel):
18
+ * - architect-global, designer-global, learnings-global
19
+ * - friction-global
20
+ *
21
+ * @param domain - The data domain to resolve
22
+ * @param projectHint - Optional project path hint
23
+ * @param options - Resolution options
24
+ * @param options.requireProject - If true (default), throws error when project-local
25
+ * domain cannot be resolved to a .decibel/ folder. Set to false for legacy fallback.
26
+ */
27
+ export declare function resolvePath(domain: DataDomain, projectHint?: string, options?: ResolvePathOptions): string;
28
+ /**
29
+ * Check if project-local .decibel/ exists
30
+ */
31
+ export declare function hasProjectLocal(projectHint?: string): boolean;
32
+ /**
33
+ * Get current project name (from .decibel/ location or env)
34
+ * Returns undefined if no project can be resolved
35
+ */
36
+ export declare function getProjectName(projectHint?: string): string | undefined;
37
+ /**
38
+ * Initialize .decibel/ structure in a project directory
39
+ */
40
+ export declare function initProjectDecibel(projectRoot: string): void;
41
+ /**
42
+ * Ensure a directory exists before writing
43
+ */
44
+ export declare function ensureDir(dirPath: string): void;
45
+ //# sourceMappingURL=dataRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataRoot.d.ts","sourceRoot":"","sources":["../src/dataRoot.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,UAAU,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,kBAAkB,CAAC;AAiBvB,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA6ED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,UAAU,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,CAmER;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA2B5D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C"}
@@ -0,0 +1,201 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { log } from './config.js';
5
+ /** Domains that require a project-local .decibel/ folder */
6
+ const PROJECT_LOCAL_DOMAINS = [
7
+ 'sentinel-issues',
8
+ 'sentinel-epics',
9
+ 'architect-project',
10
+ 'designer-project',
11
+ 'learnings-project',
12
+ ];
13
+ // ============================================================================
14
+ // Path Resolution
15
+ // ============================================================================
16
+ /**
17
+ * Walk up directory tree looking for a .decibel folder
18
+ */
19
+ function findUpDir(start, target) {
20
+ let current = path.resolve(start);
21
+ while (true) {
22
+ const candidate = path.join(current, target);
23
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
24
+ return candidate;
25
+ }
26
+ const parent = path.dirname(current);
27
+ if (parent === current)
28
+ break;
29
+ current = parent;
30
+ }
31
+ return undefined;
32
+ }
33
+ /**
34
+ * Infer project name from the directory containing .decibel/
35
+ */
36
+ function inferProjectName(decibelRoot) {
37
+ // .decibel/ is inside project root, so go up one level
38
+ const projectDir = path.dirname(decibelRoot);
39
+ return path.basename(projectDir);
40
+ }
41
+ /**
42
+ * Get both project-local and global roots
43
+ */
44
+ function getRoots(projectHint) {
45
+ const projectRoot = projectHint ||
46
+ process.env.DECIBEL_PROJECT_ROOT ||
47
+ process.cwd();
48
+ const projectDecibelRoot = findUpDir(projectRoot, '.decibel');
49
+ const globalRoot = process.env.DECIBEL_MCP_ROOT ||
50
+ path.join(os.homedir(), '.decibel');
51
+ // Ensure global root exists
52
+ if (!fs.existsSync(globalRoot)) {
53
+ fs.mkdirSync(globalRoot, { recursive: true });
54
+ log(`DataRoot: Created global root at ${globalRoot}`);
55
+ }
56
+ // Only set projectName if we have a valid source
57
+ const projectName = projectDecibelRoot
58
+ ? inferProjectName(projectDecibelRoot)
59
+ : process.env.DECIBEL_PROJECT_ID; // No fallback to 'unknown_project'
60
+ return { projectDecibelRoot, projectName, globalRoot };
61
+ }
62
+ // ============================================================================
63
+ // Public API
64
+ // ============================================================================
65
+ /**
66
+ * Helper to throw a consistent project resolution error
67
+ */
68
+ function throwProjectResolutionError(domain, projectHint) {
69
+ const hintInfo = projectHint ? ` (hint: ${projectHint})` : '';
70
+ throw new Error(`Cannot resolve project path for domain "${domain}"${hintInfo}. ` +
71
+ `No .decibel/ folder found. Either run from a project directory, ` +
72
+ `set DECIBEL_PROJECT_ROOT environment variable, or use resolveProject() ` +
73
+ `from projectRegistry.ts first.`);
74
+ }
75
+ /**
76
+ * Resolve the appropriate data path for a given domain.
77
+ *
78
+ * Project-local domains (use .decibel/ if available):
79
+ * - sentinel-issues, sentinel-epics
80
+ * - architect-project, designer-project, learnings-project
81
+ *
82
+ * Global domains (always use DECIBEL_MCP_ROOT or ~/.decibel):
83
+ * - architect-global, designer-global, learnings-global
84
+ * - friction-global
85
+ *
86
+ * @param domain - The data domain to resolve
87
+ * @param projectHint - Optional project path hint
88
+ * @param options - Resolution options
89
+ * @param options.requireProject - If true (default), throws error when project-local
90
+ * domain cannot be resolved to a .decibel/ folder. Set to false for legacy fallback.
91
+ */
92
+ export function resolvePath(domain, projectHint, options) {
93
+ const { projectDecibelRoot, projectName, globalRoot } = getRoots(projectHint);
94
+ const requireProject = options?.requireProject !== false; // Default true
95
+ switch (domain) {
96
+ // ========== Sentinel (project-local required) ==========
97
+ case 'sentinel-issues':
98
+ if (projectDecibelRoot) {
99
+ return path.join(projectDecibelRoot, 'sentinel', 'issues');
100
+ }
101
+ if (requireProject) {
102
+ throwProjectResolutionError(domain, projectHint);
103
+ }
104
+ return path.join(globalRoot, 'sentinel', projectName || 'unknown_project', 'issues');
105
+ case 'sentinel-epics':
106
+ if (projectDecibelRoot) {
107
+ return path.join(projectDecibelRoot, 'sentinel', 'epics');
108
+ }
109
+ if (requireProject) {
110
+ throwProjectResolutionError(domain, projectHint);
111
+ }
112
+ return path.join(globalRoot, 'sentinel', projectName || 'unknown_project', 'epics');
113
+ // ========== Architect ==========
114
+ case 'architect-project':
115
+ if (projectDecibelRoot) {
116
+ return path.join(projectDecibelRoot, 'architect', 'adrs');
117
+ }
118
+ if (requireProject) {
119
+ throwProjectResolutionError(domain, projectHint);
120
+ }
121
+ return path.join(globalRoot, 'architect', projectName || 'unknown_project');
122
+ case 'architect-global':
123
+ return path.join(globalRoot, 'architect', 'adrs');
124
+ // ========== Designer ==========
125
+ case 'designer-project':
126
+ if (projectDecibelRoot) {
127
+ return path.join(projectDecibelRoot, 'designer');
128
+ }
129
+ if (requireProject) {
130
+ throwProjectResolutionError(domain, projectHint);
131
+ }
132
+ return path.join(globalRoot, 'designer', projectName || 'unknown_project');
133
+ case 'designer-global':
134
+ return path.join(globalRoot, 'designer', 'global');
135
+ // ========== Learnings ==========
136
+ case 'learnings-project':
137
+ if (projectDecibelRoot) {
138
+ return path.join(projectDecibelRoot, 'learnings');
139
+ }
140
+ if (requireProject) {
141
+ throwProjectResolutionError(domain, projectHint);
142
+ }
143
+ return path.join(globalRoot, 'learnings', projectName || 'unknown_project');
144
+ case 'learnings-global':
145
+ return path.join(globalRoot, 'learnings', 'global');
146
+ // ========== Friction (always global) ==========
147
+ case 'friction-global':
148
+ return path.join(globalRoot, 'friction');
149
+ }
150
+ }
151
+ /**
152
+ * Check if project-local .decibel/ exists
153
+ */
154
+ export function hasProjectLocal(projectHint) {
155
+ const { projectDecibelRoot } = getRoots(projectHint);
156
+ return !!projectDecibelRoot;
157
+ }
158
+ /**
159
+ * Get current project name (from .decibel/ location or env)
160
+ * Returns undefined if no project can be resolved
161
+ */
162
+ export function getProjectName(projectHint) {
163
+ const { projectName } = getRoots(projectHint);
164
+ return projectName;
165
+ }
166
+ /**
167
+ * Initialize .decibel/ structure in a project directory
168
+ */
169
+ export function initProjectDecibel(projectRoot) {
170
+ const decibelRoot = path.join(projectRoot, '.decibel');
171
+ const dirs = [
172
+ path.join(decibelRoot, 'sentinel', 'issues'),
173
+ path.join(decibelRoot, 'sentinel', 'epics'),
174
+ path.join(decibelRoot, 'architect', 'adrs'),
175
+ path.join(decibelRoot, 'designer'),
176
+ path.join(decibelRoot, 'learnings'),
177
+ ];
178
+ for (const dir of dirs) {
179
+ if (!fs.existsSync(dir)) {
180
+ fs.mkdirSync(dir, { recursive: true });
181
+ log(`DataRoot: Created ${dir}`);
182
+ }
183
+ }
184
+ // Create a .gitkeep in each to ensure empty dirs are tracked
185
+ for (const dir of dirs) {
186
+ const gitkeep = path.join(dir, '.gitkeep');
187
+ if (!fs.existsSync(gitkeep)) {
188
+ fs.writeFileSync(gitkeep, '');
189
+ }
190
+ }
191
+ log(`DataRoot: Initialized .decibel/ in ${projectRoot}`);
192
+ }
193
+ /**
194
+ * Ensure a directory exists before writing
195
+ */
196
+ export function ensureDir(dirPath) {
197
+ if (!fs.existsSync(dirPath)) {
198
+ fs.mkdirSync(dirPath, { recursive: true });
199
+ }
200
+ }
201
+ //# sourceMappingURL=dataRoot.js.map