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.
- package/LICENSE +21 -0
- package/README.md +335 -0
- package/dist/agentic/compiler.d.ts +21 -0
- package/dist/agentic/compiler.d.ts.map +1 -0
- package/dist/agentic/compiler.js +267 -0
- package/dist/agentic/compiler.js.map +1 -0
- package/dist/agentic/golden.d.ts +25 -0
- package/dist/agentic/golden.d.ts.map +1 -0
- package/dist/agentic/golden.js +255 -0
- package/dist/agentic/golden.js.map +1 -0
- package/dist/agentic/index.d.ts +17 -0
- package/dist/agentic/index.d.ts.map +1 -0
- package/dist/agentic/index.js +153 -0
- package/dist/agentic/index.js.map +1 -0
- package/dist/agentic/linter.d.ts +20 -0
- package/dist/agentic/linter.d.ts.map +1 -0
- package/dist/agentic/linter.js +340 -0
- package/dist/agentic/linter.js.map +1 -0
- package/dist/agentic/renderer.d.ts +17 -0
- package/dist/agentic/renderer.d.ts.map +1 -0
- package/dist/agentic/renderer.js +277 -0
- package/dist/agentic/renderer.js.map +1 -0
- package/dist/agentic/types.d.ts +199 -0
- package/dist/agentic/types.d.ts.map +1 -0
- package/dist/agentic/types.js +8 -0
- package/dist/agentic/types.js.map +1 -0
- package/dist/architectAdrs.d.ts +19 -0
- package/dist/architectAdrs.d.ts.map +1 -0
- package/dist/architectAdrs.js +123 -0
- package/dist/architectAdrs.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -0
- package/dist/dataRoot.d.ts +45 -0
- package/dist/dataRoot.d.ts.map +1 -0
- package/dist/dataRoot.js +201 -0
- package/dist/dataRoot.js.map +1 -0
- package/dist/decibelPaths.d.ts +42 -0
- package/dist/decibelPaths.d.ts.map +1 -0
- package/dist/decibelPaths.js +150 -0
- package/dist/decibelPaths.js.map +1 -0
- package/dist/httpServer.d.ts +49 -0
- package/dist/httpServer.d.ts.map +1 -0
- package/dist/httpServer.js +1472 -0
- package/dist/httpServer.js.map +1 -0
- package/dist/lib/benchmark.d.ts +110 -0
- package/dist/lib/benchmark.d.ts.map +1 -0
- package/dist/lib/benchmark.js +338 -0
- package/dist/lib/benchmark.js.map +1 -0
- package/dist/lib/supabase.d.ts +123 -0
- package/dist/lib/supabase.d.ts.map +1 -0
- package/dist/lib/supabase.js +91 -0
- package/dist/lib/supabase.js.map +1 -0
- package/dist/projectPaths.d.ts +27 -0
- package/dist/projectPaths.d.ts.map +1 -0
- package/dist/projectPaths.js +86 -0
- package/dist/projectPaths.js.map +1 -0
- package/dist/projectRegistry.d.ts +97 -0
- package/dist/projectRegistry.d.ts.map +1 -0
- package/dist/projectRegistry.js +362 -0
- package/dist/projectRegistry.js.map +1 -0
- package/dist/sentinelIssues.d.ts +44 -0
- package/dist/sentinelIssues.d.ts.map +1 -0
- package/dist/sentinelIssues.js +213 -0
- package/dist/sentinelIssues.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +93 -0
- package/dist/server.js.map +1 -0
- package/dist/test.d.ts +7 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +77 -0
- package/dist/test.js.map +1 -0
- package/dist/tools/agentic/index.d.ts +7 -0
- package/dist/tools/agentic/index.d.ts.map +1 -0
- package/dist/tools/agentic/index.js +180 -0
- package/dist/tools/agentic/index.js.map +1 -0
- package/dist/tools/architect/index.d.ts +9 -0
- package/dist/tools/architect/index.d.ts.map +1 -0
- package/dist/tools/architect/index.js +383 -0
- package/dist/tools/architect/index.js.map +1 -0
- package/dist/tools/architect.d.ts +19 -0
- package/dist/tools/architect.d.ts.map +1 -0
- package/dist/tools/architect.js +88 -0
- package/dist/tools/architect.js.map +1 -0
- package/dist/tools/bench.d.ts +89 -0
- package/dist/tools/bench.d.ts.map +1 -0
- package/dist/tools/bench.js +826 -0
- package/dist/tools/bench.js.map +1 -0
- package/dist/tools/context/index.d.ts +11 -0
- package/dist/tools/context/index.d.ts.map +1 -0
- package/dist/tools/context/index.js +439 -0
- package/dist/tools/context/index.js.map +1 -0
- package/dist/tools/context.d.ts +146 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +481 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/crit.d.ts +63 -0
- package/dist/tools/crit.d.ts.map +1 -0
- package/dist/tools/crit.js +159 -0
- package/dist/tools/crit.js.map +1 -0
- package/dist/tools/data-inspector.d.ts +188 -0
- package/dist/tools/data-inspector.d.ts.map +1 -0
- package/dist/tools/data-inspector.js +650 -0
- package/dist/tools/data-inspector.js.map +1 -0
- package/dist/tools/deck.d.ts +11 -0
- package/dist/tools/deck.d.ts.map +1 -0
- package/dist/tools/deck.js +170 -0
- package/dist/tools/deck.js.map +1 -0
- package/dist/tools/designer/index.d.ts +6 -0
- package/dist/tools/designer/index.d.ts.map +1 -0
- package/dist/tools/designer/index.js +177 -0
- package/dist/tools/designer/index.js.map +1 -0
- package/dist/tools/designer.d.ts +20 -0
- package/dist/tools/designer.d.ts.map +1 -0
- package/dist/tools/designer.js +75 -0
- package/dist/tools/designer.js.map +1 -0
- package/dist/tools/dojo/index.d.ts +13 -0
- package/dist/tools/dojo/index.d.ts.map +1 -0
- package/dist/tools/dojo/index.js +547 -0
- package/dist/tools/dojo/index.js.map +1 -0
- package/dist/tools/dojo.d.ts +254 -0
- package/dist/tools/dojo.d.ts.map +1 -0
- package/dist/tools/dojo.js +933 -0
- package/dist/tools/dojo.js.map +1 -0
- package/dist/tools/dojoBench.d.ts +49 -0
- package/dist/tools/dojoBench.d.ts.map +1 -0
- package/dist/tools/dojoBench.js +205 -0
- package/dist/tools/dojoBench.js.map +1 -0
- package/dist/tools/dojoGraduated.d.ts +50 -0
- package/dist/tools/dojoGraduated.d.ts.map +1 -0
- package/dist/tools/dojoGraduated.js +174 -0
- package/dist/tools/dojoGraduated.js.map +1 -0
- package/dist/tools/dojoPolicy.d.ts +65 -0
- package/dist/tools/dojoPolicy.d.ts.map +1 -0
- package/dist/tools/dojoPolicy.js +263 -0
- package/dist/tools/dojoPolicy.js.map +1 -0
- package/dist/tools/friction/index.d.ts +7 -0
- package/dist/tools/friction/index.d.ts.map +1 -0
- package/dist/tools/friction/index.js +239 -0
- package/dist/tools/friction/index.js.map +1 -0
- package/dist/tools/friction.d.ts +82 -0
- package/dist/tools/friction.d.ts.map +1 -0
- package/dist/tools/friction.js +331 -0
- package/dist/tools/friction.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/learnings/index.d.ts +5 -0
- package/dist/tools/learnings/index.d.ts.map +1 -0
- package/dist/tools/learnings/index.js +123 -0
- package/dist/tools/learnings/index.js.map +1 -0
- package/dist/tools/learnings.d.ts +41 -0
- package/dist/tools/learnings.d.ts.map +1 -0
- package/dist/tools/learnings.js +149 -0
- package/dist/tools/learnings.js.map +1 -0
- package/dist/tools/oracle/index.d.ts +5 -0
- package/dist/tools/oracle/index.d.ts.map +1 -0
- package/dist/tools/oracle/index.js +97 -0
- package/dist/tools/oracle/index.js.map +1 -0
- package/dist/tools/oracle.d.ts +90 -0
- package/dist/tools/oracle.d.ts.map +1 -0
- package/dist/tools/oracle.js +529 -0
- package/dist/tools/oracle.js.map +1 -0
- package/dist/tools/policy.d.ts +119 -0
- package/dist/tools/policy.d.ts.map +1 -0
- package/dist/tools/policy.js +406 -0
- package/dist/tools/policy.js.map +1 -0
- package/dist/tools/provenance/index.d.ts +4 -0
- package/dist/tools/provenance/index.d.ts.map +1 -0
- package/dist/tools/provenance/index.js +58 -0
- package/dist/tools/provenance/index.js.map +1 -0
- package/dist/tools/provenance.d.ts +75 -0
- package/dist/tools/provenance.d.ts.map +1 -0
- package/dist/tools/provenance.js +197 -0
- package/dist/tools/provenance.js.map +1 -0
- package/dist/tools/rateLimiter.d.ts +45 -0
- package/dist/tools/rateLimiter.d.ts.map +1 -0
- package/dist/tools/rateLimiter.js +91 -0
- package/dist/tools/rateLimiter.js.map +1 -0
- package/dist/tools/registry/index.d.ts +10 -0
- package/dist/tools/registry/index.d.ts.map +1 -0
- package/dist/tools/registry/index.js +467 -0
- package/dist/tools/registry/index.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +189 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/roadmap/index.d.ts +9 -0
- package/dist/tools/roadmap/index.d.ts.map +1 -0
- package/dist/tools/roadmap/index.js +250 -0
- package/dist/tools/roadmap/index.js.map +1 -0
- package/dist/tools/roadmap.d.ts +88 -0
- package/dist/tools/roadmap.d.ts.map +1 -0
- package/dist/tools/roadmap.js +365 -0
- package/dist/tools/roadmap.js.map +1 -0
- package/dist/tools/sentinel/index.d.ts +19 -0
- package/dist/tools/sentinel/index.d.ts.map +1 -0
- package/dist/tools/sentinel/index.js +832 -0
- package/dist/tools/sentinel/index.js.map +1 -0
- package/dist/tools/sentinel-scan-data.d.ts +90 -0
- package/dist/tools/sentinel-scan-data.d.ts.map +1 -0
- package/dist/tools/sentinel-scan-data.js +122 -0
- package/dist/tools/sentinel-scan-data.js.map +1 -0
- package/dist/tools/sentinel.d.ts +156 -0
- package/dist/tools/sentinel.d.ts.map +1 -0
- package/dist/tools/sentinel.js +603 -0
- package/dist/tools/sentinel.js.map +1 -0
- package/dist/tools/shared/index.d.ts +4 -0
- package/dist/tools/shared/index.d.ts.map +1 -0
- package/dist/tools/shared/index.js +7 -0
- package/dist/tools/shared/index.js.map +1 -0
- package/dist/tools/shared/project.d.ts +17 -0
- package/dist/tools/shared/project.d.ts.map +1 -0
- package/dist/tools/shared/project.js +36 -0
- package/dist/tools/shared/project.js.map +1 -0
- package/dist/tools/shared/response.d.ts +10 -0
- package/dist/tools/shared/response.d.ts.map +1 -0
- package/dist/tools/shared/response.js +36 -0
- package/dist/tools/shared/response.js.map +1 -0
- package/dist/tools/shared/validation.d.ts +10 -0
- package/dist/tools/shared/validation.d.ts.map +1 -0
- package/dist/tools/shared/validation.js +26 -0
- package/dist/tools/shared/validation.js.map +1 -0
- package/dist/tools/studio/cloud-spine.d.ts +27 -0
- package/dist/tools/studio/cloud-spine.d.ts.map +1 -0
- package/dist/tools/studio/cloud-spine.js +773 -0
- package/dist/tools/studio/cloud-spine.js.map +1 -0
- package/dist/tools/studio/index.d.ts +154 -0
- package/dist/tools/studio/index.d.ts.map +1 -0
- package/dist/tools/studio/index.js +525 -0
- package/dist/tools/studio/index.js.map +1 -0
- package/dist/tools/testSpec.d.ts +122 -0
- package/dist/tools/testSpec.d.ts.map +1 -0
- package/dist/tools/testSpec.js +525 -0
- package/dist/tools/testSpec.js.map +1 -0
- package/dist/tools/toolsIndex.d.ts +5 -0
- package/dist/tools/toolsIndex.d.ts.map +1 -0
- package/dist/tools/toolsIndex.js +37 -0
- package/dist/tools/toolsIndex.js.map +1 -0
- package/dist/tools/types.d.ts +30 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +7 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/voice/index.d.ts +8 -0
- package/dist/tools/voice/index.d.ts.map +1 -0
- package/dist/tools/voice/index.js +176 -0
- package/dist/tools/voice/index.js.map +1 -0
- package/dist/tools/voice.d.ts +291 -0
- package/dist/tools/voice.d.ts.map +1 -0
- package/dist/tools/voice.js +734 -0
- package/dist/tools/voice.js.map +1 -0
- 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":"AAAA;;;;;GAKG;AAMH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAClE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAMnD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,eAAe,CAAC;CACrD;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,YAAY,EAAE,WAAW,EAAE,CAAC;IAE5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IAEnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAMD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAMD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B,EAAE,MAAM,CAAC;IACpC,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAMD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|
package/dist/dataRoot.js
ADDED
|
@@ -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
|