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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Decibel Systems
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,335 @@
1
+ # decibel-tools-mcp
2
+
3
+ MCP (Model Context Protocol) server exposing Decibel tools (Designer, Architect, Sentinel, Oracle, Learnings) over stdio. Connect from Cursor, Claude, ChatGPT, and other MCP-compatible clients.
4
+
5
+ <a href="cursor://anysphere.cursor-deeplink/mcp/install?name=decibel-tools&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImRlY2liZWwtdG9vbHMtbWNwIl19">
6
+ <img src="https://cursor.com/deeplink/mcp-install-dark.svg" alt="Add Decibel Tools to Cursor" height="32" />
7
+ </a>
8
+
9
+ ## Features
10
+
11
+ - **Designer** - Record design decisions with project tracking
12
+ - **Architect** - Create Architecture Decision Records (ADRs)
13
+ - **Sentinel** - Track issues and epics with severity levels
14
+ - **Oracle** - Get AI-powered next action recommendations
15
+ - **Learnings** - Maintain living technical learnings documents
16
+
17
+ ## Quick Start
18
+
19
+ ### Installation
20
+
21
+ ```bash
22
+ npm install
23
+ ```
24
+
25
+ ### Development
26
+
27
+ Run the server in development mode:
28
+
29
+ ```bash
30
+ npm run dev
31
+ ```
32
+
33
+ ### Production Build
34
+
35
+ ```bash
36
+ npm run build
37
+ npm start
38
+ ```
39
+
40
+ ### Testing
41
+
42
+ Run the test script to verify all tools work:
43
+
44
+ ```bash
45
+ npm test
46
+ ```
47
+
48
+ ## Configuration
49
+
50
+ The server uses environment variables for configuration:
51
+
52
+ | Variable | Default | Description |
53
+ |----------|---------|-------------|
54
+ | `DECIBEL_ENV` | `dev` | Environment (dev, staging, prod) |
55
+ | `DECIBEL_ORG` | `mediareason` | Organization name |
56
+ | `DECIBEL_MCP_ROOT` | `~/.decibel` | Root directory for global data storage |
57
+
58
+ Data is stored in project-local `.decibel/` folders when available, falling back to the global root for cross-project data.
59
+
60
+ Copy `.env.example` to `.env` and configure as needed:
61
+
62
+ ```bash
63
+ cp .env.example .env
64
+ ```
65
+
66
+ ## Connecting to Clients
67
+
68
+ ### Cursor
69
+
70
+ **One-click install:** Click the button at the top of this README, or use the deep link:
71
+ ```
72
+ cursor://anysphere.cursor-deeplink/mcp/install?name=decibel-tools&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImRlY2liZWwtdG9vbHMtbWNwIl19
73
+ ```
74
+
75
+ **Manual setup:** Add to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project-local):
76
+
77
+ ```json
78
+ {
79
+ "mcpServers": {
80
+ "decibel-tools": {
81
+ "command": "npx",
82
+ "args": ["-y", "decibel-tools-mcp"]
83
+ }
84
+ }
85
+ }
86
+ ```
87
+
88
+ See [Cursor platform docs](docs/platforms/cursor.md) for troubleshooting and advanced setup.
89
+
90
+ ### Claude Desktop
91
+
92
+ Add to your Claude configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
93
+
94
+ ```json
95
+ {
96
+ "mcpServers": {
97
+ "decibel-tools": {
98
+ "command": "node",
99
+ "args": ["/path/to/decibel-tools-mcp/dist/server.js"]
100
+ }
101
+ }
102
+ }
103
+ ```
104
+
105
+ The server will automatically discover `.decibel/` folders in your projects. No `DECIBEL_MCP_ROOT` environment variable is needed for typical use.
106
+
107
+ ## Tools Reference
108
+
109
+ ### designer_record_design_decision
110
+
111
+ Record a design decision for a project.
112
+
113
+ **Input:**
114
+ - `project_id` (required): Project identifier
115
+ - `area` (required): Design area (e.g., "UI", "API", "Database")
116
+ - `summary` (required): Brief summary of the decision
117
+ - `details` (optional): Detailed explanation
118
+
119
+ **Output:**
120
+ - `id`: Filename of the created record
121
+ - `timestamp`: ISO timestamp
122
+ - `path`: Full path to the file
123
+
124
+ **File Location:** `{ROOT_DIR}/designer/{project_id}/YYYY-MM-DDTHH-mm-ssZ-{slug}.md`
125
+
126
+ ---
127
+
128
+ ### architect_record_arch_decision
129
+
130
+ Record an Architecture Decision Record (ADR).
131
+
132
+ **Input:**
133
+ - `system_id` (required): System identifier
134
+ - `change` (required): Description of the architectural change
135
+ - `rationale` (required): Reasoning behind the decision
136
+ - `impact` (optional): Expected impact description
137
+
138
+ **Output:**
139
+ - `id`: Filename of the created ADR
140
+ - `timestamp`: ISO timestamp
141
+ - `path`: Full path to the file
142
+
143
+ **File Location:** `{ROOT_DIR}/architect/{system_id}/YYYY-MM-DDTHH-mm-ssZ-{slug}.md`
144
+
145
+ ---
146
+
147
+ ### sentinel_create_issue
148
+
149
+ Create a tracked issue for a repository.
150
+
151
+ **Input:**
152
+ - `repo` (required): Repository name
153
+ - `severity` (required): One of `low`, `med`, `high`, `critical`
154
+ - `title` (required): Issue title
155
+ - `details` (required): Detailed description
156
+ - `epic_id` (optional): Parent epic ID (e.g., "EPIC-0001")
157
+
158
+ **Output:**
159
+ - `id`: Filename of the created issue
160
+ - `timestamp`: ISO timestamp
161
+ - `path`: Full path to the file
162
+ - `status`: Issue status (always "open" for new issues)
163
+
164
+ **File Location:** `{ROOT_DIR}/sentinel/{repo}/issues/YYYY-MM-DDTHH-mm-ssZ-{slug}.md`
165
+
166
+ ---
167
+
168
+ ### sentinel_log_epic
169
+
170
+ Create a new epic (large feature) record.
171
+
172
+ **Input:**
173
+ - `title` (required): Epic title
174
+ - `summary` (required): Brief summary
175
+ - `motivation` (optional): Array of motivation statements
176
+ - `outcomes` (optional): Array of desired outcomes
177
+ - `acceptance_criteria` (optional): Array of acceptance criteria
178
+ - `priority` (optional): One of `low`, `medium`, `high`, `critical`
179
+ - `tags` (optional): Array of tags
180
+ - `owner` (optional): Epic owner
181
+ - `squad` (optional): Team responsible
182
+
183
+ **Output:**
184
+ - `epic_id`: Generated epic ID (e.g., "EPIC-0001")
185
+ - `timestamp`: ISO timestamp
186
+ - `path`: Full path to the file
187
+
188
+ ---
189
+
190
+ ### sentinel_list_epics
191
+
192
+ List all epics with optional filters.
193
+
194
+ **Input:**
195
+ - `status` (optional): Filter by status (`planned`, `in_progress`, `shipped`, `on_hold`, `cancelled`)
196
+ - `priority` (optional): Filter by priority
197
+ - `tags` (optional): Filter by tags (matches any)
198
+
199
+ ---
200
+
201
+ ### sentinel_get_epic
202
+
203
+ Get details of a specific epic.
204
+
205
+ **Input:**
206
+ - `epic_id` (required): Epic ID (e.g., "EPIC-0001")
207
+
208
+ ---
209
+
210
+ ### sentinel_get_epic_issues
211
+
212
+ Get all issues linked to an epic.
213
+
214
+ **Input:**
215
+ - `epic_id` (required): Epic ID
216
+
217
+ ---
218
+
219
+ ### sentinel_resolve_epic
220
+
221
+ Fuzzy search for epics by name or keyword.
222
+
223
+ **Input:**
224
+ - `query` (required): Search query
225
+ - `limit` (optional): Maximum matches to return (default: 5)
226
+
227
+ ---
228
+
229
+ ### oracle_next_actions
230
+
231
+ Get recommended next actions based on recent project activity.
232
+
233
+ **Input:**
234
+ - `project_id` (required): Project to analyze
235
+ - `focus` (optional): Filter by area (e.g., "architect", "sentinel", or keyword)
236
+
237
+ **Output:**
238
+ - `actions`: Array of recommended actions
239
+ - `description`: What to do
240
+ - `source`: File path reference
241
+ - `priority`: One of `low`, `med`, `high`
242
+
243
+ ---
244
+
245
+ ### learnings_append
246
+
247
+ Append a new entry to a project's technical learnings document. Creates a living document that accumulates lessons learned, gotchas, and insights over time.
248
+
249
+ **Input:**
250
+ - `project_id` (required): Project identifier
251
+ - `category` (required): One of `debug`, `integration`, `architecture`, `tooling`, `process`, `other`
252
+ - `title` (required): Brief title for the learning
253
+ - `content` (required): The learning content - what happened, what was learned
254
+ - `tags` (optional): Array of tags for searchability
255
+
256
+ **Output:**
257
+ - `timestamp`: ISO timestamp
258
+ - `path`: Full path to the file
259
+ - `entry_count`: Total number of entries in the document
260
+
261
+ **File Location:** `{ROOT_DIR}/learnings/{project_id}.md`
262
+
263
+ ---
264
+
265
+ ### learnings_list
266
+
267
+ List entries from a project's technical learnings document.
268
+
269
+ **Input:**
270
+ - `project_id` (required): Project identifier
271
+ - `category` (optional): Filter by category
272
+ - `limit` (optional): Maximum entries to return (most recent first)
273
+
274
+ **Output:**
275
+ - `path`: Path to the learnings file
276
+ - `entries`: Array of learning entries
277
+ - `total_count`: Total number of entries
278
+
279
+ ---
280
+
281
+ ## Data Storage
282
+
283
+ Data is stored in project-local `.decibel/` folders as YAML files:
284
+
285
+ ```
286
+ {project_root}/
287
+ └── .decibel/
288
+ ├── sentinel/
289
+ │ ├── issues/
290
+ │ │ └── ISS-{nnnn}.yml
291
+ │ └── epics/
292
+ │ └── EPIC-{nnnn}.yml
293
+ ├── architect/
294
+ │ └── adrs/
295
+ │ └── ADR-{nnnn}.yml
296
+ ├── designer/
297
+ │ └── YYYY-MM-DDTHH-mm-ssZ-{slug}.md
298
+ └── learnings/
299
+ └── {project_id}.md
300
+ ```
301
+
302
+ Global data (friction logs, cross-project learnings) is stored in `~/.decibel/` or the path specified by `DECIBEL_MCP_ROOT`.
303
+
304
+ ## Development
305
+
306
+ ### Project Structure
307
+
308
+ ```
309
+ src/
310
+ ├── server.ts # MCP server entrypoint
311
+ ├── config.ts # Environment configuration
312
+ ├── test.ts # Test script
313
+ └── tools/
314
+ ├── designer.ts # Design decision recording
315
+ ├── architect.ts # Architecture decision recording
316
+ ├── sentinel.ts # Issue and epic tracking
317
+ ├── oracle.ts # Next actions inference
318
+ └── learnings.ts # Living learnings documents
319
+ ```
320
+
321
+ ### Building
322
+
323
+ ```bash
324
+ npm run build # Compile TypeScript to dist/
325
+ ```
326
+
327
+ ### Running in Development
328
+
329
+ ```bash
330
+ npm run dev # Run with tsx (no build required)
331
+ ```
332
+
333
+ ## License
334
+
335
+ MIT
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Agentic Pack Compiler
3
+ *
4
+ * Compiles agentic configuration files into a versioned, hashed pack.
5
+ * Reads from .decibel/architect/agentic/ and outputs compiled_agentic_pack.json
6
+ */
7
+ import { ResolvedProjectPaths } from '../projectRegistry.js';
8
+ import { CompileResult, CompilePackInput, CompilePackOutput } from './types.js';
9
+ /**
10
+ * Compile agentic pack from project configuration
11
+ */
12
+ export declare function compilePack(input: CompilePackInput): Promise<CompilePackOutput>;
13
+ /**
14
+ * Load a previously compiled pack
15
+ */
16
+ export declare function loadCompiledPack(resolved: ResolvedProjectPaths): Promise<CompileResult | null>;
17
+ /**
18
+ * Get or compile pack (compile if not exists or outdated)
19
+ */
20
+ export declare function getOrCompilePack(resolved: ResolvedProjectPaths): Promise<CompileResult>;
21
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/agentic/compiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAuB,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EAEL,aAAa,EAKb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AA0MpB;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2CrF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQpG;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,aAAa,CAAC,CAcxB"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Agentic Pack Compiler
3
+ *
4
+ * Compiles agentic configuration files into a versioned, hashed pack.
5
+ * Reads from .decibel/architect/agentic/ and outputs compiled_agentic_pack.json
6
+ */
7
+ import fs from 'fs/promises';
8
+ import path from 'path';
9
+ import crypto from 'crypto';
10
+ import yaml from 'yaml';
11
+ import { log } from '../config.js';
12
+ import { resolveProjectPaths } from '../projectRegistry.js';
13
+ import { ensureDir } from '../dataRoot.js';
14
+ // ============================================================================
15
+ // Default Configurations
16
+ // ============================================================================
17
+ const DEFAULT_TAXONOMY = {
18
+ roles: {
19
+ Sensor: { emoji: '👁️', description: 'Data collection and observation' },
20
+ Analyst: { emoji: '🧠', description: 'Pattern recognition and analysis' },
21
+ Overmind: { emoji: '🎯', description: 'Decision making and coordination' },
22
+ Specialist: { emoji: '🔧', description: 'Domain-specific expertise' },
23
+ },
24
+ statuses: {
25
+ OK: { emoji: '✓', color: 'green' },
26
+ DEGRADED: { emoji: '⚠️', color: 'yellow' },
27
+ BLOCKED: { emoji: '🛑', color: 'red' },
28
+ ALERT: { emoji: '🚨', color: 'magenta' },
29
+ },
30
+ loads: {
31
+ GREEN: { emoji: '🟢', color: 'green' },
32
+ YELLOW: { emoji: '🟡', color: 'yellow' },
33
+ RED: { emoji: '🔴', color: 'red' },
34
+ },
35
+ };
36
+ const DEFAULT_RENDERER = {
37
+ id: 'default',
38
+ name: 'Default Renderer',
39
+ description: 'Basic text output with minimal formatting',
40
+ template: `{{role_emoji}} {{role}} | {{status}} | Load: {{load}}
41
+
42
+ {{summary}}
43
+
44
+ {{#evidence}}
45
+ Evidence:
46
+ {{#items}}
47
+ - {{source}}: {{value}}
48
+ {{/items}}
49
+ {{/evidence}}
50
+
51
+ {{#missing_data}}
52
+ Missing Data:
53
+ {{#items}}
54
+ - {{field}}: {{reason}}
55
+ {{/items}}
56
+ {{/missing_data}}
57
+
58
+ {{#decision}}
59
+ Decision: {{decision}}
60
+ {{/decision}}`,
61
+ constraints: {
62
+ max_emoji_count: 5,
63
+ emoji_position: 'header-only',
64
+ max_lines: 50,
65
+ banned_words: ['amazing', 'incredible', 'revolutionary', 'game-changing'],
66
+ banned_punctuation: ['!'],
67
+ },
68
+ };
69
+ const DEFAULT_CONSENSUS = {
70
+ quorum_threshold: 0.67,
71
+ dissent_highlight_threshold: 0.3,
72
+ max_pending_decisions: 10,
73
+ };
74
+ // ============================================================================
75
+ // YAML Loading Helpers
76
+ // ============================================================================
77
+ async function loadYamlFile(filePath) {
78
+ try {
79
+ const content = await fs.readFile(filePath, 'utf-8');
80
+ return yaml.parse(content);
81
+ }
82
+ catch (error) {
83
+ if (error.code === 'ENOENT') {
84
+ return null;
85
+ }
86
+ throw error;
87
+ }
88
+ }
89
+ async function loadYamlDir(dirPath) {
90
+ const result = {};
91
+ try {
92
+ const files = await fs.readdir(dirPath);
93
+ for (const file of files) {
94
+ if (file.endsWith('.yaml') || file.endsWith('.yml')) {
95
+ const filePath = path.join(dirPath, file);
96
+ const content = await loadYamlFile(filePath);
97
+ if (content) {
98
+ const id = path.basename(file, path.extname(file));
99
+ result[id] = content;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ catch (error) {
105
+ if (error.code !== 'ENOENT') {
106
+ throw error;
107
+ }
108
+ }
109
+ return result;
110
+ }
111
+ // ============================================================================
112
+ // Pack Compiler
113
+ // ============================================================================
114
+ async function loadPackConfigs(agenticDir) {
115
+ const sourceFiles = [];
116
+ // Load taxonomy
117
+ const taxonomyPath = path.join(agenticDir, 'taxonomy.yaml');
118
+ const taxonomy = (await loadYamlFile(taxonomyPath)) || DEFAULT_TAXONOMY;
119
+ if (await fileExists(taxonomyPath))
120
+ sourceFiles.push(taxonomyPath);
121
+ // Load renderers
122
+ const renderersPath = path.join(agenticDir, 'renderers.yaml');
123
+ let renderers = { default: DEFAULT_RENDERER };
124
+ const loadedRenderers = await loadYamlFile(renderersPath);
125
+ if (loadedRenderers) {
126
+ renderers = { ...renderers, ...loadedRenderers };
127
+ sourceFiles.push(renderersPath);
128
+ }
129
+ // Also load from renderers/ directory
130
+ const renderersDir = path.join(agenticDir, 'renderers');
131
+ const dirRenderers = await loadYamlDir(renderersDir);
132
+ for (const [id, config] of Object.entries(dirRenderers)) {
133
+ renderers[id] = { ...config, id };
134
+ sourceFiles.push(path.join(renderersDir, `${id}.yaml`));
135
+ }
136
+ // Load consensus
137
+ const consensusPath = path.join(agenticDir, 'consensus.yaml');
138
+ const consensus = (await loadYamlFile(consensusPath)) || DEFAULT_CONSENSUS;
139
+ if (await fileExists(consensusPath))
140
+ sourceFiles.push(consensusPath);
141
+ // Load ANSI styles
142
+ const ansiStylesPath = path.join(agenticDir, 'ansi_styles.yaml');
143
+ const ansiStyles = await loadYamlFile(ansiStylesPath);
144
+ if (await fileExists(ansiStylesPath))
145
+ sourceFiles.push(ansiStylesPath);
146
+ // Load avatars
147
+ const avatarsDir = path.join(agenticDir, 'avatars');
148
+ const avatars = await loadYamlDir(avatarsDir);
149
+ for (const file of Object.keys(avatars)) {
150
+ sourceFiles.push(path.join(avatarsDir, `${file}.yaml`));
151
+ }
152
+ // Load pack overrides
153
+ const packsDir = path.join(agenticDir, 'packs');
154
+ const packs = await loadYamlDir(packsDir);
155
+ for (const [packId, packConfig] of Object.entries(packs)) {
156
+ // Merge pack-specific overrides
157
+ if (packConfig.renderers) {
158
+ renderers = { ...renderers, ...packConfig.renderers };
159
+ }
160
+ if (packConfig.avatars) {
161
+ Object.assign(avatars, packConfig.avatars);
162
+ }
163
+ sourceFiles.push(path.join(packsDir, `${packId}.yaml`));
164
+ }
165
+ return {
166
+ pack: {
167
+ taxonomy,
168
+ renderers,
169
+ consensus,
170
+ avatars,
171
+ ansi_styles: ansiStyles || undefined,
172
+ },
173
+ sourceFiles,
174
+ };
175
+ }
176
+ async function fileExists(filePath) {
177
+ try {
178
+ await fs.access(filePath);
179
+ return true;
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ }
185
+ function computePackHash(pack) {
186
+ const content = JSON.stringify(pack, Object.keys(pack).sort());
187
+ return crypto.createHash('sha256').update(content).digest('hex').substring(0, 12);
188
+ }
189
+ function generatePackId() {
190
+ const timestamp = new Date().toISOString().replace(/[-:]/g, '').split('.')[0];
191
+ const random = Math.random().toString(36).substring(2, 6);
192
+ return `pack-${timestamp}-${random}`;
193
+ }
194
+ // ============================================================================
195
+ // Public API
196
+ // ============================================================================
197
+ /**
198
+ * Compile agentic pack from project configuration
199
+ */
200
+ export async function compilePack(input) {
201
+ try {
202
+ const resolved = resolveProjectPaths(input.projectId);
203
+ const agenticDir = resolved.subPath('architect', 'agentic');
204
+ log(`agentic-compiler: Compiling pack from ${agenticDir}`);
205
+ // Load all configs
206
+ const { pack, sourceFiles } = await loadPackConfigs(agenticDir);
207
+ // Generate pack ID and hash
208
+ const packId = generatePackId();
209
+ const packHash = computePackHash(pack);
210
+ const result = {
211
+ pack_id: packId,
212
+ pack_hash: packHash,
213
+ compiled_at: new Date().toISOString(),
214
+ content: pack,
215
+ source_files: sourceFiles,
216
+ };
217
+ // Write compiled pack to output
218
+ const outputDir = resolved.subPath('architect', 'agentic', 'compiled');
219
+ ensureDir(outputDir);
220
+ const outputPath = path.join(outputDir, 'compiled_agentic_pack.json');
221
+ await fs.writeFile(outputPath, JSON.stringify(result, null, 2), 'utf-8');
222
+ log(`agentic-compiler: Pack compiled successfully (${packHash})`);
223
+ log(`agentic-compiler: Output written to ${outputPath}`);
224
+ return {
225
+ status: 'compiled',
226
+ result,
227
+ };
228
+ }
229
+ catch (error) {
230
+ const message = error instanceof Error ? error.message : String(error);
231
+ log(`agentic-compiler: Error compiling pack: ${message}`);
232
+ return {
233
+ status: 'error',
234
+ error: message,
235
+ };
236
+ }
237
+ }
238
+ /**
239
+ * Load a previously compiled pack
240
+ */
241
+ export async function loadCompiledPack(resolved) {
242
+ const outputPath = resolved.subPath('architect', 'agentic', 'compiled', 'compiled_agentic_pack.json');
243
+ try {
244
+ const content = await fs.readFile(outputPath, 'utf-8');
245
+ return JSON.parse(content);
246
+ }
247
+ catch {
248
+ return null;
249
+ }
250
+ }
251
+ /**
252
+ * Get or compile pack (compile if not exists or outdated)
253
+ */
254
+ export async function getOrCompilePack(resolved) {
255
+ // Try to load existing
256
+ const existing = await loadCompiledPack(resolved);
257
+ if (existing) {
258
+ return existing;
259
+ }
260
+ // Compile new
261
+ const result = await compilePack({ projectId: resolved.id });
262
+ if (result.status === 'error' || !result.result) {
263
+ throw new Error(result.error || 'Failed to compile pack');
264
+ }
265
+ return result.result;
266
+ }
267
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/agentic/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Agentic Pack Golden Eval
3
+ *
4
+ * Regression testing harness for semiotic clarity.
5
+ * Compares rendered outputs against known-good golden files.
6
+ */
7
+ import { ResolvedProjectPaths } from '../projectRegistry.js';
8
+ import { GoldenResult, CanonicalPayload, GoldenInput, GoldenOutputResult } from './types.js';
9
+ /**
10
+ * Run all golden eval cases
11
+ */
12
+ export declare function runGoldenEval(resolved: ResolvedProjectPaths, caseName?: string, strict?: boolean): Promise<GoldenResult>;
13
+ /**
14
+ * Update golden files with current output (for updating baselines)
15
+ */
16
+ export declare function updateGoldenFile(resolved: ResolvedProjectPaths, caseName: string, rendererId: string): Promise<void>;
17
+ /**
18
+ * Create a new golden case from a payload
19
+ */
20
+ export declare function createGoldenCase(resolved: ResolvedProjectPaths, caseName: string, payload: CanonicalPayload, rendererIds: string[]): Promise<void>;
21
+ /**
22
+ * MCP tool handler for running golden eval
23
+ */
24
+ export declare function runGolden(input: GoldenInput): Promise<GoldenOutputResult>;
25
+ //# sourceMappingURL=golden.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"golden.d.ts","sourceRoot":"","sources":["../../src/agentic/golden.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAuB,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAEL,YAAY,EAEZ,gBAAgB,EAEhB,WAAW,EACX,kBAAkB,EACnB,MAAM,YAAY,CAAC;AA4KpB;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,YAAY,CAAC,CA4CvB;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAMD;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoB/E"}