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,123 @@
1
+ /**
2
+ * Supabase Client
3
+ *
4
+ * Connects to senken.pro Supabase for Decibel Studio Cloud Spine.
5
+ * Uses environment variables for configuration.
6
+ *
7
+ * Environment:
8
+ * SUPABASE_URL - Supabase project URL
9
+ * SUPABASE_ANON_KEY - Supabase anon/public key
10
+ * SUPABASE_SERVICE_KEY - Optional service role key for admin operations
11
+ */
12
+ import { SupabaseClient } from '@supabase/supabase-js';
13
+ export interface Project {
14
+ id: string;
15
+ owner_id: string;
16
+ name: string;
17
+ description: string | null;
18
+ created_at: string;
19
+ updated_at: string;
20
+ deleted_at: string | null;
21
+ }
22
+ export interface Artifact {
23
+ id: string;
24
+ project_id: string;
25
+ schema_version: string;
26
+ type: 'image' | 'video' | '3d' | 'audio' | 'text';
27
+ status: 'generating' | 'partial' | 'complete' | 'failed';
28
+ progress: number | null;
29
+ platform: 'ios' | 'web' | 'claude-code' | 'macos' | 'android';
30
+ app_version: string;
31
+ package_url: string | null;
32
+ package_sha256: string | null;
33
+ prompt: string | null;
34
+ model: string | null;
35
+ provider: string | null;
36
+ parent_artifact_id: string | null;
37
+ workflow_id: string | null;
38
+ workflow_step_id: string | null;
39
+ tags: string[];
40
+ is_pinned: boolean;
41
+ rating: number | null;
42
+ created_at: string;
43
+ updated_at: string;
44
+ deleted_at: string | null;
45
+ }
46
+ export interface ArtifactFile {
47
+ id: string;
48
+ artifact_id: string;
49
+ path: string;
50
+ role: 'preview' | 'render' | 'variant' | 'thumbnail';
51
+ mime_type: string;
52
+ bytes: number;
53
+ sha256: string;
54
+ width: number | null;
55
+ height: number | null;
56
+ storage_url: string | null;
57
+ created_at: string;
58
+ }
59
+ export interface Device {
60
+ id: string;
61
+ user_id: string;
62
+ name: string;
63
+ platform: 'ios' | 'web' | 'claude-code' | 'macos' | 'android';
64
+ capabilities: Record<string, unknown>;
65
+ push_token: string | null;
66
+ last_seen_at: string;
67
+ created_at: string;
68
+ }
69
+ export interface Event {
70
+ seq: number;
71
+ project_id: string;
72
+ type: string;
73
+ payload: Record<string, unknown>;
74
+ device_id: string | null;
75
+ created_at: string;
76
+ }
77
+ export interface Job {
78
+ id: string;
79
+ owner_id: string;
80
+ target_device_id: string | null;
81
+ claimed_by_device_id: string | null;
82
+ workflow_id: string | null;
83
+ project_id: string | null;
84
+ inputs: Record<string, unknown>;
85
+ status: 'pending' | 'claimed' | 'running' | 'complete' | 'failed' | 'cancelled';
86
+ progress: number | null;
87
+ error_message: string | null;
88
+ result_artifact_id: string | null;
89
+ created_at: string;
90
+ updated_at: string;
91
+ claimed_at: string | null;
92
+ completed_at: string | null;
93
+ expires_at: string | null;
94
+ }
95
+ /**
96
+ * Get the Supabase client (anon key - respects RLS)
97
+ */
98
+ export declare function getSupabaseClient(): SupabaseClient<any>;
99
+ /**
100
+ * Get the Supabase service client (service role key - bypasses RLS)
101
+ * Use only for admin operations that require elevated privileges.
102
+ */
103
+ export declare function getSupabaseServiceClient(): SupabaseClient<any>;
104
+ /**
105
+ * Check if Supabase is configured (for service-level operations like voice inbox)
106
+ * Requires URL and SERVICE_KEY for server-side writes
107
+ */
108
+ export declare function isSupabaseConfigured(): boolean;
109
+ /**
110
+ * Set access token for user-scoped requests
111
+ */
112
+ export declare function setAccessToken(token: string): Promise<void>;
113
+ export interface SupabaseError {
114
+ error: string;
115
+ code: string;
116
+ details?: string;
117
+ }
118
+ export declare function isSupabaseError(result: unknown): result is SupabaseError;
119
+ export declare function formatSupabaseError(error: {
120
+ message: string;
121
+ code?: string;
122
+ }): SupabaseError;
123
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/lib/supabase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Supabase Client
3
+ *
4
+ * Connects to senken.pro Supabase for Decibel Studio Cloud Spine.
5
+ * Uses environment variables for configuration.
6
+ *
7
+ * Environment:
8
+ * SUPABASE_URL - Supabase project URL
9
+ * SUPABASE_ANON_KEY - Supabase anon/public key
10
+ * SUPABASE_SERVICE_KEY - Optional service role key for admin operations
11
+ */
12
+ import { createClient } from '@supabase/supabase-js';
13
+ import { log } from '../config.js';
14
+ // ============================================================================
15
+ // Client Singleton
16
+ // ============================================================================
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ let _client = null;
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ let _serviceClient = null;
21
+ /**
22
+ * Get the Supabase client (anon key - respects RLS)
23
+ */
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ export function getSupabaseClient() {
26
+ if (_client)
27
+ return _client;
28
+ const url = process.env.SUPABASE_URL;
29
+ const anonKey = process.env.SUPABASE_ANON_KEY;
30
+ if (!url || !anonKey) {
31
+ throw new Error('Supabase not configured. Set SUPABASE_URL and SUPABASE_ANON_KEY environment variables.');
32
+ }
33
+ log('[Supabase] Initializing client');
34
+ _client = createClient(url, anonKey, {
35
+ auth: {
36
+ persistSession: false,
37
+ autoRefreshToken: false,
38
+ },
39
+ });
40
+ return _client;
41
+ }
42
+ /**
43
+ * Get the Supabase service client (service role key - bypasses RLS)
44
+ * Use only for admin operations that require elevated privileges.
45
+ */
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ export function getSupabaseServiceClient() {
48
+ if (_serviceClient)
49
+ return _serviceClient;
50
+ const url = process.env.SUPABASE_URL;
51
+ const serviceKey = process.env.SUPABASE_SERVICE_KEY;
52
+ if (!url || !serviceKey) {
53
+ throw new Error('Supabase service client not configured. Set SUPABASE_URL and SUPABASE_SERVICE_KEY.');
54
+ }
55
+ log('[Supabase] Initializing service client');
56
+ _serviceClient = createClient(url, serviceKey, {
57
+ auth: {
58
+ persistSession: false,
59
+ autoRefreshToken: false,
60
+ },
61
+ });
62
+ return _serviceClient;
63
+ }
64
+ /**
65
+ * Check if Supabase is configured (for service-level operations like voice inbox)
66
+ * Requires URL and SERVICE_KEY for server-side writes
67
+ */
68
+ export function isSupabaseConfigured() {
69
+ return !!(process.env.SUPABASE_URL && process.env.SUPABASE_SERVICE_KEY);
70
+ }
71
+ /**
72
+ * Set access token for user-scoped requests
73
+ */
74
+ export async function setAccessToken(token) {
75
+ const client = getSupabaseClient();
76
+ await client.auth.setSession({
77
+ access_token: token,
78
+ refresh_token: '',
79
+ });
80
+ }
81
+ export function isSupabaseError(result) {
82
+ return typeof result === 'object' && result !== null && 'error' in result && 'code' in result;
83
+ }
84
+ export function formatSupabaseError(error) {
85
+ return {
86
+ error: error.message,
87
+ code: error.code || 'SUPABASE_ERROR',
88
+ details: JSON.stringify(error),
89
+ };
90
+ }
91
+ //# sourceMappingURL=supabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../src/lib/supabase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AA8FnC,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,8DAA8D;AAC9D,IAAI,OAAO,GAA+B,IAAI,CAAC;AAC/C,8DAA8D;AAC9D,IAAI,cAAc,GAA+B,IAAI,CAAC;AAEtD;;GAEG;AACH,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB;IAC/B,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAE9C,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACtC,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE;QACnC,IAAI,EAAE;YACJ,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;SACxB;KACF,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,8DAA8D;AAC9D,MAAM,UAAU,wBAAwB;IACtC,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAE1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAEpD,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAC9C,cAAc,GAAG,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE;QAC7C,IAAI,EAAE;YACJ,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;SACxB;KACF,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa;IAChD,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3B,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,EAAE;KAClB,CAAC,CAAC;AACL,CAAC;AAYD,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAyC;IAC3E,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,OAAO;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,gBAAgB;QACpC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface ProjectConfig {
2
+ projectId: string;
3
+ projectName?: string;
4
+ root: string;
5
+ }
6
+ /**
7
+ * Resolve project configuration from a project ID.
8
+ *
9
+ * Resolution strategy (via projectRegistry):
10
+ * 1. Check registry for exact ID or alias match
11
+ * 2. Check DECIBEL_PROJECT_ROOT env var
12
+ * 3. Check if projectId is a valid absolute path
13
+ * 4. Walk up from cwd looking for matching project
14
+ *
15
+ * @param projectId - The unique identifier for the project (ID, alias, or path)
16
+ * @returns The project configuration including root path
17
+ * @throws Error if the project cannot be resolved
18
+ */
19
+ export declare function resolveProjectRoot(projectId: string): Promise<ProjectConfig>;
20
+ /**
21
+ * List all known project IDs.
22
+ * Returns projects from the registry plus any discovered from cwd.
23
+ *
24
+ * @returns Array of discovered project IDs
25
+ */
26
+ export declare function listProjectIds(): string[];
27
+ //# sourceMappingURL=projectPaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectPaths.d.ts","sourceRoot":"","sources":["../src/projectPaths.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAkCD;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAezC"}
@@ -0,0 +1,86 @@
1
+ // ============================================================================
2
+ // Project Path Resolution
3
+ // ============================================================================
4
+ // Helps MCP tools resolve project roots from project IDs.
5
+ // Uses registry-based resolution with fallback to dynamic discovery.
6
+ // ============================================================================
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+ import { resolveProject, listProjects } from './projectRegistry.js';
10
+ // ============================================================================
11
+ // Path Resolution Helpers
12
+ // ============================================================================
13
+ /**
14
+ * Walk up directory tree looking for a .decibel folder
15
+ */
16
+ function findDecibelDir(start) {
17
+ let current = path.resolve(start);
18
+ while (true) {
19
+ const candidate = path.join(current, '.decibel');
20
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
21
+ return current; // Return the project root, not the .decibel folder
22
+ }
23
+ const parent = path.dirname(current);
24
+ if (parent === current)
25
+ break;
26
+ current = parent;
27
+ }
28
+ return undefined;
29
+ }
30
+ /**
31
+ * Get the project name from a project root directory
32
+ */
33
+ function getProjectNameFromDir(projectRoot) {
34
+ return path.basename(projectRoot);
35
+ }
36
+ // ============================================================================
37
+ // Public API
38
+ // ============================================================================
39
+ /**
40
+ * Resolve project configuration from a project ID.
41
+ *
42
+ * Resolution strategy (via projectRegistry):
43
+ * 1. Check registry for exact ID or alias match
44
+ * 2. Check DECIBEL_PROJECT_ROOT env var
45
+ * 3. Check if projectId is a valid absolute path
46
+ * 4. Walk up from cwd looking for matching project
47
+ *
48
+ * @param projectId - The unique identifier for the project (ID, alias, or path)
49
+ * @returns The project configuration including root path
50
+ * @throws Error if the project cannot be resolved
51
+ */
52
+ export async function resolveProjectRoot(projectId) {
53
+ try {
54
+ const entry = resolveProject(projectId);
55
+ return {
56
+ projectId: entry.id,
57
+ projectName: entry.name || entry.id,
58
+ root: entry.path,
59
+ };
60
+ }
61
+ catch (err) {
62
+ // Re-throw with the helpful error message from registry
63
+ throw err;
64
+ }
65
+ }
66
+ /**
67
+ * List all known project IDs.
68
+ * Returns projects from the registry plus any discovered from cwd.
69
+ *
70
+ * @returns Array of discovered project IDs
71
+ */
72
+ export function listProjectIds() {
73
+ const registeredProjects = listProjects();
74
+ const ids = registeredProjects.map((p) => p.id);
75
+ // Also check cwd for a local project not in registry
76
+ const currentProjectRoot = process.env.DECIBEL_PROJECT_ROOT || process.cwd();
77
+ const discoveredRoot = findDecibelDir(currentProjectRoot);
78
+ if (discoveredRoot) {
79
+ const localId = getProjectNameFromDir(discoveredRoot);
80
+ if (!ids.includes(localId)) {
81
+ ids.push(localId);
82
+ }
83
+ }
84
+ return ids;
85
+ }
86
+ //# sourceMappingURL=projectPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectPaths.js","sourceRoot":"","sources":["../src/projectPaths.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAC/E,0DAA0D;AAC1D,qEAAqE;AACrE,+EAA+E;AAE/E,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAgB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAYlF,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;GAEG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACrE,OAAO,OAAO,CAAC,CAAC,mDAAmD;QACrE,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM;QAC9B,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,WAAmB;IAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,KAAK,GAAiB,cAAc,CAAC,SAAS,CAAC,CAAC;QACtD,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,EAAE;YACnB,WAAW,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wDAAwD;QACxD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,kBAAkB,GAAG,YAAY,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9D,qDAAqD;IACrD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC7E,MAAM,cAAc,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAC1D,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,97 @@
1
+ export interface ProjectEntry {
2
+ /** Primary ID (usually directory name) */
3
+ id: string;
4
+ /** Human-readable name */
5
+ name?: string;
6
+ /** Absolute path to project root (contains .decibel/) */
7
+ path: string;
8
+ /** Optional aliases (e.g., "senken" -> "senken-trading-agent") */
9
+ aliases?: string[];
10
+ /** If true, this is the default project when none specified */
11
+ default?: boolean;
12
+ }
13
+ export interface ProjectRegistry {
14
+ version: 1;
15
+ projects: ProjectEntry[];
16
+ }
17
+ /**
18
+ * Resolve a project ID or alias to its filesystem path.
19
+ *
20
+ * Resolution order:
21
+ * 1. Check registry for exact ID match
22
+ * 2. Check registry for alias match
23
+ * 3. Check DECIBEL_PROJECT_ROOT env var (if ID matches basename)
24
+ * 4. Check if ID is an absolute path with .decibel
25
+ * 5. Walk up from cwd looking for .decibel (if ID matches discovered project)
26
+ *
27
+ * @param projectId - Project ID, alias, or path
28
+ * @returns Absolute path to the project root
29
+ * @throws Error if project cannot be resolved
30
+ */
31
+ export declare function resolveProject(projectId: string): ProjectEntry;
32
+ /**
33
+ * List all registered projects
34
+ */
35
+ export declare function listProjects(): ProjectEntry[];
36
+ /**
37
+ * Register a new project or update an existing one
38
+ */
39
+ export declare function registerProject(entry: ProjectEntry): void;
40
+ /**
41
+ * Remove a project from the registry
42
+ */
43
+ export declare function unregisterProject(projectId: string): boolean;
44
+ /**
45
+ * Add an alias to an existing project
46
+ */
47
+ export declare function addProjectAlias(projectId: string, alias: string): void;
48
+ /**
49
+ * Get the registry file path (for display/debugging)
50
+ */
51
+ export declare function getRegistryFilePath(): string;
52
+ /**
53
+ * Get the default project.
54
+ * Resolution order:
55
+ * 1. Project explicitly marked as default
56
+ * 2. DECIBEL_DEFAULT_PROJECT env var
57
+ * 3. If only one project registered, use it
58
+ * 4. Discover from cwd
59
+ *
60
+ * @returns The default project entry or undefined if none can be determined
61
+ */
62
+ export declare function getDefaultProject(): ProjectEntry | undefined;
63
+ /**
64
+ * Set a project as the default
65
+ */
66
+ export declare function setDefaultProject(projectId: string): void;
67
+ /**
68
+ * Normalize projectId from various input formats.
69
+ * Handles both camelCase (projectId) and snake_case (project_id).
70
+ * This allows tools to accept inputs from Claude regardless of which format it uses.
71
+ */
72
+ export declare function normalizeProjectId(input: Record<string, unknown>): string | undefined;
73
+ export interface ResolvedProjectPaths {
74
+ /** Project ID */
75
+ id: string;
76
+ /** Absolute path to project root */
77
+ projectPath: string;
78
+ /** Absolute path to .decibel folder */
79
+ decibelPath: string;
80
+ /** Helper to get a subdirectory under .decibel */
81
+ subPath: (...segments: string[]) => string;
82
+ }
83
+ /**
84
+ * Resolve project and return useful paths.
85
+ * This is the primary helper for tools to get project paths.
86
+ *
87
+ * @param projectId - Project ID, alias, or path (optional, uses default if not provided)
88
+ * @returns Resolved project paths
89
+ * @throws Error if project cannot be resolved
90
+ */
91
+ export declare function resolveProjectPaths(projectId?: string): ResolvedProjectPaths;
92
+ /**
93
+ * Validate that a write path is within the project's .decibel folder.
94
+ * Call this before any file write to prevent escaping project boundaries.
95
+ */
96
+ export declare function validateWritePath(targetPath: string, resolved: ResolvedProjectPaths): void;
97
+ //# sourceMappingURL=projectRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectRegistry.d.ts","sourceRoot":"","sources":["../src/projectRegistry.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AA2FD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAyE9D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAG7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CA8BzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAa5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CActE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,GAAG,SAAS,CA8C5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAiBzD;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAErF;AAMD,MAAM,WAAW,oBAAoB;IACnC,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;CAC5C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAwB5E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAQ1F"}