coaiajs 0.1.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 (162) hide show
  1. package/CLAUDE.md +56 -0
  2. package/KINSHIP.md +63 -0
  3. package/README.md +148 -0
  4. package/articles/academic/creative-orientation-vs-problem-solving.md +177 -0
  5. package/articles/academic/jsonl-knowledge-graphs-agent-memory.md +142 -0
  6. package/articles/academic/langfuse-observability-llm-pipelines.md +144 -0
  7. package/articles/academic/medicine-wheel-software-architecture.md +163 -0
  8. package/articles/academic/mmot-autonomous-agents.md +156 -0
  9. package/articles/academic/model-context-protocol-interagent.md +161 -0
  10. package/articles/academic/pde-prompt-decomposition.md +186 -0
  11. package/articles/academic/structural-tension-in-ai-agents.md +134 -0
  12. package/articles/reviews/mcp-protocol-design-review.md +170 -0
  13. package/articles/reviews/observability-ai-systems-review.md +176 -0
  14. package/articles/reviews/prompt-engineering-decomposition-review.md +184 -0
  15. package/articles/surveys/agent-orchestration-survey.md +186 -0
  16. package/articles/surveys/knowledge-graph-storage-survey.md +204 -0
  17. package/articles/surveys/structural-tension-methodology-survey.md +154 -0
  18. package/articles/technical/aws-sdk-v3-polly.md +270 -0
  19. package/articles/technical/commander-cli-framework.md +262 -0
  20. package/articles/technical/dotenv-config-patterns.md +360 -0
  21. package/articles/technical/ioredis-vs-redis.md +142 -0
  22. package/articles/technical/langfuse-js-sdk-vs-rest.md +191 -0
  23. package/articles/technical/mcp-sdk-typescript.md +291 -0
  24. package/articles/technical/octokit-github-api.md +293 -0
  25. package/articles/technical/openai-sdk-modern.md +231 -0
  26. package/articles/technical/yaml-parsing-node.md +266 -0
  27. package/articles/technical/zod-runtime-validation.md +212 -0
  28. package/dist/mcp/config.d.ts +14 -0
  29. package/dist/mcp/config.js +185 -0
  30. package/dist/mcp/server.d.ts +3 -0
  31. package/dist/mcp/server.js +324 -0
  32. package/dist/mcp/tools/coaiapy-tools.d.ts +8 -0
  33. package/dist/mcp/tools/coaiapy-tools.js +326 -0
  34. package/dist/mcp/tools/index.d.ts +3 -0
  35. package/dist/mcp/tools/index.js +3 -0
  36. package/dist/src/audio.d.ts +12 -0
  37. package/dist/src/audio.js +57 -0
  38. package/dist/src/cli-helpers.d.ts +9 -0
  39. package/dist/src/cli-helpers.js +78 -0
  40. package/dist/src/cli.d.ts +3 -0
  41. package/dist/src/cli.js +1086 -0
  42. package/dist/src/config.d.ts +15 -0
  43. package/dist/src/config.js +145 -0
  44. package/dist/src/environment.d.ts +44 -0
  45. package/dist/src/environment.js +146 -0
  46. package/dist/src/github.d.ts +47 -0
  47. package/dist/src/github.js +79 -0
  48. package/dist/src/langfuse/client.d.ts +30 -0
  49. package/dist/src/langfuse/client.js +75 -0
  50. package/dist/src/langfuse/comments.d.ts +16 -0
  51. package/dist/src/langfuse/comments.js +36 -0
  52. package/dist/src/langfuse/datasets.d.ts +19 -0
  53. package/dist/src/langfuse/datasets.js +140 -0
  54. package/dist/src/langfuse/index.d.ts +13 -0
  55. package/dist/src/langfuse/index.js +10 -0
  56. package/dist/src/langfuse/media.d.ts +11 -0
  57. package/dist/src/langfuse/media.js +167 -0
  58. package/dist/src/langfuse/observations.d.ts +18 -0
  59. package/dist/src/langfuse/observations.js +113 -0
  60. package/dist/src/langfuse/prompts.d.ts +14 -0
  61. package/dist/src/langfuse/prompts.js +127 -0
  62. package/dist/src/langfuse/scores.d.ts +54 -0
  63. package/dist/src/langfuse/scores.js +366 -0
  64. package/dist/src/langfuse/traces.d.ts +29 -0
  65. package/dist/src/langfuse/traces.js +225 -0
  66. package/dist/src/llm.d.ts +23 -0
  67. package/dist/src/llm.js +76 -0
  68. package/dist/src/narrative/graph-manager.d.ts +106 -0
  69. package/dist/src/narrative/graph-manager.js +915 -0
  70. package/dist/src/narrative/index.d.ts +9 -0
  71. package/dist/src/narrative/index.js +7 -0
  72. package/dist/src/narrative/markdown-export.d.ts +21 -0
  73. package/dist/src/narrative/markdown-export.js +383 -0
  74. package/dist/src/narrative/tool-definitions.d.ts +21 -0
  75. package/dist/src/narrative/tool-definitions.js +588 -0
  76. package/dist/src/narrative/tool-handlers.d.ts +11 -0
  77. package/dist/src/narrative/tool-handlers.js +462 -0
  78. package/dist/src/narrative/types.d.ts +2 -0
  79. package/dist/src/narrative/types.js +2 -0
  80. package/dist/src/narrative/validation.d.ts +29 -0
  81. package/dist/src/narrative/validation.js +144 -0
  82. package/dist/src/pde/index.d.ts +8 -0
  83. package/dist/src/pde/index.js +8 -0
  84. package/dist/src/pde/mcp-handlers.d.ts +7 -0
  85. package/dist/src/pde/mcp-handlers.js +300 -0
  86. package/dist/src/pde/mcp-tools.d.ts +15 -0
  87. package/dist/src/pde/mcp-tools.js +191 -0
  88. package/dist/src/pde/session-manager.d.ts +32 -0
  89. package/dist/src/pde/session-manager.js +205 -0
  90. package/dist/src/pde/stc-mapper.d.ts +26 -0
  91. package/dist/src/pde/stc-mapper.js +234 -0
  92. package/dist/src/pipeline/index.d.ts +2 -0
  93. package/dist/src/pipeline/index.js +3 -0
  94. package/dist/src/pipeline/template-engine.d.ts +20 -0
  95. package/dist/src/pipeline/template-engine.js +361 -0
  96. package/dist/src/planning/index.d.ts +7 -0
  97. package/dist/src/planning/index.js +7 -0
  98. package/dist/src/planning/mcp-handlers.d.ts +7 -0
  99. package/dist/src/planning/mcp-handlers.js +310 -0
  100. package/dist/src/planning/mcp-tools.d.ts +15 -0
  101. package/dist/src/planning/mcp-tools.js +145 -0
  102. package/dist/src/planning/plan-parser.d.ts +35 -0
  103. package/dist/src/planning/plan-parser.js +506 -0
  104. package/dist/src/redis.d.ts +21 -0
  105. package/dist/src/redis.js +78 -0
  106. package/dist/src/types.d.ts +244 -0
  107. package/dist/src/types.js +8 -0
  108. package/mcp/config.ts +196 -0
  109. package/mcp/server.ts +402 -0
  110. package/mcp/tools/coaiapy-tools.ts +364 -0
  111. package/mcp/tools/index.ts +4 -0
  112. package/package.json +52 -0
  113. package/rispecs/00-coaiajs-platform.spec.md +102 -0
  114. package/rispecs/01-core-config.spec.md +89 -0
  115. package/rispecs/02-redis-module.spec.md +62 -0
  116. package/rispecs/03-langfuse-module.spec.md +101 -0
  117. package/rispecs/04-narrative-engine.spec.md +185 -0
  118. package/rispecs/05-pde-engine.spec.md +112 -0
  119. package/rispecs/06-planning-engine.spec.md +128 -0
  120. package/rispecs/07-pipeline-templates.spec.md +97 -0
  121. package/rispecs/08-cli-interface.spec.md +134 -0
  122. package/rispecs/09-mcp-server.spec.md +140 -0
  123. package/rispecs/10-audio-module.spec.md +63 -0
  124. package/rispecs/KINSHIP.md +56 -0
  125. package/rispecs/README.md +100 -0
  126. package/src/audio.ts +76 -0
  127. package/src/cli-helpers.ts +86 -0
  128. package/src/cli.ts +1223 -0
  129. package/src/config.ts +172 -0
  130. package/src/environment.ts +171 -0
  131. package/src/github.ts +143 -0
  132. package/src/langfuse/client.ts +105 -0
  133. package/src/langfuse/comments.ts +52 -0
  134. package/src/langfuse/datasets.ts +178 -0
  135. package/src/langfuse/index.ts +33 -0
  136. package/src/langfuse/media.ts +193 -0
  137. package/src/langfuse/observations.ts +131 -0
  138. package/src/langfuse/prompts.ts +157 -0
  139. package/src/langfuse/scores.ts +456 -0
  140. package/src/langfuse/traces.ts +276 -0
  141. package/src/llm.ts +106 -0
  142. package/src/narrative/graph-manager.ts +1358 -0
  143. package/src/narrative/index.ts +32 -0
  144. package/src/narrative/markdown-export.ts +535 -0
  145. package/src/narrative/tool-definitions.ts +635 -0
  146. package/src/narrative/tool-handlers.ts +528 -0
  147. package/src/narrative/types.ts +9 -0
  148. package/src/narrative/validation.ts +179 -0
  149. package/src/pde/index.ts +8 -0
  150. package/src/pde/mcp-handlers.ts +359 -0
  151. package/src/pde/mcp-tools.ts +201 -0
  152. package/src/pde/session-manager.ts +248 -0
  153. package/src/pde/stc-mapper.ts +298 -0
  154. package/src/pipeline/index.ts +7 -0
  155. package/src/pipeline/template-engine.ts +398 -0
  156. package/src/planning/index.ts +13 -0
  157. package/src/planning/mcp-handlers.ts +369 -0
  158. package/src/planning/mcp-tools.ts +155 -0
  159. package/src/planning/plan-parser.ts +587 -0
  160. package/src/redis.ts +97 -0
  161. package/src/types.ts +280 -0
  162. package/tsconfig.json +26 -0
@@ -0,0 +1,244 @@
1
+ export interface Entity {
2
+ name: string;
3
+ entityType: string;
4
+ observations: string[];
5
+ metadata?: EntityMetadata;
6
+ }
7
+ export interface EntityMetadata {
8
+ dueDate?: string;
9
+ chartId?: string;
10
+ phase?: 'germination' | 'assimilation' | 'completion';
11
+ completionStatus?: boolean;
12
+ parentChart?: string;
13
+ parentActionStep?: string;
14
+ level?: number;
15
+ createdAt?: string;
16
+ updatedAt?: string;
17
+ direction?: string;
18
+ confidence?: number;
19
+ implicit?: boolean;
20
+ pdeId?: string;
21
+ act?: number;
22
+ type_dramatic?: string;
23
+ universes?: string[];
24
+ timestamp?: string;
25
+ elementsOfPerformance?: Array<{
26
+ description: string;
27
+ type: 'DESIGN' | 'EXECUTION';
28
+ }>;
29
+ mmotEvaluations?: Array<{
30
+ phase: 'acknowledge' | 'analyze' | 'update' | 'recommit';
31
+ assessment: string;
32
+ direction?: 'South' | 'East' | 'West' | 'North';
33
+ timestamp: string;
34
+ }>;
35
+ relationalAlignment?: {
36
+ assessed: boolean;
37
+ score: number | null;
38
+ principles: string[];
39
+ };
40
+ fourDirections?: {
41
+ north_vision: string | null;
42
+ east_intention: string | null;
43
+ south_emotion: string | null;
44
+ west_introspection: string | null;
45
+ };
46
+ narrative?: {
47
+ description: string;
48
+ prose: string;
49
+ lessons: string[];
50
+ };
51
+ order?: number;
52
+ }
53
+ export interface Relation {
54
+ from: string;
55
+ to: string;
56
+ relationType: string;
57
+ metadata?: RelationMetadata;
58
+ }
59
+ export interface RelationMetadata {
60
+ createdAt?: string;
61
+ strength?: number;
62
+ context?: string;
63
+ description?: string;
64
+ }
65
+ export interface KnowledgeGraph {
66
+ entities: Entity[];
67
+ relations: Relation[];
68
+ }
69
+ export interface McpToolResult {
70
+ content: Array<{
71
+ type: string;
72
+ text: string;
73
+ }>;
74
+ isError?: boolean;
75
+ }
76
+ export type Urgency = 'immediate' | 'session' | 'persistent';
77
+ export type Direction = 'east' | 'south' | 'west' | 'north';
78
+ export interface PrimaryIntent {
79
+ action: string;
80
+ target: string;
81
+ urgency: Urgency;
82
+ confidence: number;
83
+ }
84
+ export interface SecondaryIntent {
85
+ action: string;
86
+ target: string;
87
+ implicit: boolean;
88
+ dependency: string | null;
89
+ confidence: number;
90
+ }
91
+ export interface ContextRequirements {
92
+ files_needed: string[];
93
+ tools_required: string[];
94
+ assumptions: string[];
95
+ }
96
+ export interface ExpectedOutputs {
97
+ artifacts: string[];
98
+ updates: string[];
99
+ communications: string[];
100
+ }
101
+ export interface DirectionItem {
102
+ text: string;
103
+ confidence: number;
104
+ implicit: boolean;
105
+ }
106
+ export type DirectionMap = Record<Direction, DirectionItem[]>;
107
+ export interface ActionItem {
108
+ text: string;
109
+ direction: Direction;
110
+ dependency: string | null;
111
+ completed?: boolean;
112
+ }
113
+ export interface AmbiguityFlag {
114
+ text: string;
115
+ suggestion: string;
116
+ }
117
+ export interface DecompositionResult {
118
+ primary: PrimaryIntent;
119
+ secondary: SecondaryIntent[];
120
+ context: ContextRequirements;
121
+ outputs: ExpectedOutputs;
122
+ directions: DirectionMap;
123
+ actionStack: ActionItem[];
124
+ ambiguities: AmbiguityFlag[];
125
+ }
126
+ export interface StoredDecomposition {
127
+ id: string;
128
+ timestamp: string;
129
+ prompt: string;
130
+ result: DecompositionResult;
131
+ options: DecompositionOptions;
132
+ markdownPath?: string;
133
+ }
134
+ export interface DecompositionOptions {
135
+ extractImplicit: boolean;
136
+ mapDependencies: boolean;
137
+ }
138
+ export interface PdeSession {
139
+ type: 'pde_session';
140
+ sessionId: string;
141
+ originalPrompt: string;
142
+ masterChartId: string;
143
+ pdeDecompositionId?: string;
144
+ createdAt: string;
145
+ updatedAt: string;
146
+ status: 'active' | 'completed' | 'abandoned';
147
+ metadata?: Record<string, unknown>;
148
+ }
149
+ export declare const URGENCY_DAYS: Record<string, number>;
150
+ export interface StructuralElement {
151
+ type: 'desired_outcome' | 'current_reality' | 'action_step' | 'observation';
152
+ content: string;
153
+ confidence: number;
154
+ sourceLines: {
155
+ start: number;
156
+ end: number;
157
+ };
158
+ telescopesInto?: StructuralTensionPlan;
159
+ }
160
+ export interface StructuralTensionPlan {
161
+ title: string;
162
+ filePath: string;
163
+ desiredOutcome: StructuralElement | null;
164
+ currentReality: StructuralElement | null;
165
+ actionSteps: StructuralElement[];
166
+ observations: string[];
167
+ metadata: {
168
+ parsedAt: string;
169
+ telescopeLevel: number;
170
+ parentAction?: string;
171
+ dueDate?: string;
172
+ completionStatus: 'pending' | 'in_progress' | 'completed';
173
+ };
174
+ }
175
+ export interface ScoreCategory {
176
+ label: string;
177
+ value: number;
178
+ }
179
+ export interface ScoreConfig {
180
+ name: string;
181
+ dataType: 'NUMERIC' | 'CATEGORICAL' | 'BOOLEAN';
182
+ description?: string;
183
+ categories?: ScoreCategory[];
184
+ minValue?: number;
185
+ maxValue?: number;
186
+ isArchived?: boolean;
187
+ }
188
+ export interface PipelineVariable {
189
+ name: string;
190
+ type: string;
191
+ required: boolean;
192
+ default?: string;
193
+ description?: string;
194
+ choices?: string[];
195
+ }
196
+ export interface PipelineStep {
197
+ name: string;
198
+ observationType: string;
199
+ description?: string;
200
+ parent?: string;
201
+ variables?: Record<string, string>;
202
+ metadata?: Record<string, unknown>;
203
+ conditional?: string;
204
+ }
205
+ export interface PipelineTemplate {
206
+ name: string;
207
+ version: string;
208
+ description: string;
209
+ author?: string;
210
+ createdAt?: string;
211
+ variables: PipelineVariable[];
212
+ steps: PipelineStep[];
213
+ extends?: string;
214
+ metadata?: Record<string, unknown>;
215
+ }
216
+ export interface CoaiaConfig {
217
+ redis?: {
218
+ url?: string;
219
+ host?: string;
220
+ port?: number;
221
+ password?: string;
222
+ upstashUrl?: string;
223
+ upstashToken?: string;
224
+ };
225
+ langfuse?: {
226
+ publicKey?: string;
227
+ secretKey?: string;
228
+ baseUrl?: string;
229
+ };
230
+ openai?: {
231
+ apiKey?: string;
232
+ model?: string;
233
+ };
234
+ aws?: {
235
+ accessKeyId?: string;
236
+ secretAccessKey?: string;
237
+ region?: string;
238
+ };
239
+ github?: {
240
+ token?: string;
241
+ };
242
+ [key: string]: unknown;
243
+ }
244
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,8 @@
1
+ // coaiajs/src/types.ts — Shared types
2
+ // Union of coaia-narrative + coaia-pde + coaia-planning type systems
3
+ export const URGENCY_DAYS = {
4
+ immediate: 1,
5
+ session: 7,
6
+ persistent: 30,
7
+ };
8
+ //# sourceMappingURL=types.js.map
package/mcp/config.ts ADDED
@@ -0,0 +1,196 @@
1
+ // coaiajs/mcp/config.ts — Feature gating
2
+ // Port of coaiapy-mcp/config.py
3
+
4
+ export type FeatureLevel = 'MINIMAL' | 'STANDARD' | 'OBSERVABILITY' | 'FULL';
5
+
6
+ // All available tool names across all modules
7
+ const ALL_TOOLS = new Set([
8
+ // Redis (coaiapy-mcp)
9
+ 'coaia_tash',
10
+ 'coaia_fetch',
11
+ // Langfuse traces (coaiapy-mcp)
12
+ 'coaia_fuse_trace_create',
13
+ 'coaia_fuse_add_observation',
14
+ 'coaia_fuse_trace_patch_output',
15
+ 'coaia_fuse_trace_get',
16
+ 'coaia_fuse_trace_view',
17
+ 'coaia_fuse_observation_get',
18
+ 'coaia_fuse_traces_list',
19
+ 'coaia_fuse_traces_session_view',
20
+ // Langfuse comments (coaiapy-mcp)
21
+ 'coaia_fuse_comments_list',
22
+ 'coaia_fuse_comments_get',
23
+ 'coaia_fuse_comments_create',
24
+ // Langfuse prompts (coaiapy-mcp)
25
+ 'coaia_fuse_prompts_list',
26
+ 'coaia_fuse_prompts_get',
27
+ // Langfuse datasets (coaiapy-mcp)
28
+ 'coaia_fuse_datasets_list',
29
+ 'coaia_fuse_datasets_get',
30
+ // Score configs (coaiapy-mcp)
31
+ 'coaia_fuse_score_configs_list',
32
+ 'coaia_fuse_score_configs_get',
33
+ 'coaia_fuse_score_apply',
34
+ // Media (coaiapy-mcp, FULL only)
35
+ 'coaia_fuse_media_upload',
36
+ 'coaia_fuse_media_get',
37
+ // Narrative (coaia-narrative, 28 tools)
38
+ 'create_structural_tension_chart',
39
+ 'telescope_action_step',
40
+ 'mark_action_complete',
41
+ 'get_chart_progress',
42
+ 'list_active_charts',
43
+ 'get_chart',
44
+ 'get_action_step',
45
+ 'update_action_progress',
46
+ 'update_current_reality',
47
+ 'manage_action_step',
48
+ 'add_action_step',
49
+ 'remove_action_step',
50
+ 'update_desired_outcome',
51
+ 'perform_mmot_evaluation',
52
+ 'init_llm_guidance',
53
+ 'create_narrative_beat',
54
+ 'telescope_narrative_beat',
55
+ 'list_narrative_beats',
56
+ 'add_observations',
57
+ 'create_entities',
58
+ 'create_relations',
59
+ 'search_nodes',
60
+ 'open_nodes',
61
+ 'read_graph',
62
+ 'delete_entities',
63
+ 'delete_relations',
64
+ 'delete_observations',
65
+ 'merge_entities',
66
+ // PDE (coaia-pde, 10 tools)
67
+ 'pde_decompose',
68
+ 'pde_parse_response',
69
+ 'pde_get',
70
+ 'pde_list',
71
+ 'pde_export_markdown',
72
+ 'import_pde',
73
+ 'create_stc_from_pde',
74
+ 'pde_sessions_list',
75
+ 'pde_sessions_create',
76
+ 'pde_sessions_update',
77
+ // Planning (coaia-planning, 6 tools)
78
+ 'parse_plan',
79
+ 'plan_to_stc',
80
+ 'sync_plans',
81
+ 'trace_plan',
82
+ 'pde_to_plan',
83
+ 'list_plans',
84
+ ]);
85
+
86
+ const MINIMAL_TOOLS = new Set([
87
+ 'coaia_tash',
88
+ 'coaia_fetch',
89
+ 'coaia_fuse_trace_create',
90
+ 'coaia_fuse_add_observation',
91
+ 'coaia_fuse_trace_patch_output',
92
+ 'coaia_fuse_trace_get',
93
+ 'coaia_fuse_trace_view',
94
+ 'coaia_fuse_observation_get',
95
+ 'coaia_fuse_traces_list',
96
+ 'coaia_fuse_traces_session_view',
97
+ 'coaia_fuse_comments_list',
98
+ 'coaia_fuse_comments_get',
99
+ 'coaia_fuse_comments_create',
100
+ 'coaia_fuse_prompts_list',
101
+ 'coaia_fuse_prompts_get',
102
+ 'coaia_fuse_datasets_list',
103
+ 'coaia_fuse_datasets_get',
104
+ 'coaia_fuse_score_configs_list',
105
+ 'coaia_fuse_score_configs_get',
106
+ 'coaia_fuse_score_apply',
107
+ ]);
108
+
109
+ const STANDARD_TOOLS = new Set([
110
+ ...MINIMAL_TOOLS,
111
+ // Narrative STC tools
112
+ 'create_structural_tension_chart',
113
+ 'telescope_action_step',
114
+ 'mark_action_complete',
115
+ 'get_chart_progress',
116
+ 'list_active_charts',
117
+ 'get_chart',
118
+ 'get_action_step',
119
+ 'update_action_progress',
120
+ 'update_current_reality',
121
+ 'manage_action_step',
122
+ 'add_action_step',
123
+ 'remove_action_step',
124
+ 'update_desired_outcome',
125
+ 'perform_mmot_evaluation',
126
+ 'init_llm_guidance',
127
+ 'create_narrative_beat',
128
+ 'telescope_narrative_beat',
129
+ 'list_narrative_beats',
130
+ // KG tools
131
+ 'add_observations',
132
+ 'create_entities',
133
+ 'create_relations',
134
+ 'search_nodes',
135
+ 'open_nodes',
136
+ 'read_graph',
137
+ 'delete_entities',
138
+ 'delete_relations',
139
+ 'delete_observations',
140
+ 'merge_entities',
141
+ // PDE tools
142
+ 'pde_decompose',
143
+ 'pde_parse_response',
144
+ 'pde_get',
145
+ 'pde_list',
146
+ 'pde_export_markdown',
147
+ 'import_pde',
148
+ 'create_stc_from_pde',
149
+ 'pde_sessions_list',
150
+ 'pde_sessions_create',
151
+ 'pde_sessions_update',
152
+ // Planning tools
153
+ 'parse_plan',
154
+ 'plan_to_stc',
155
+ 'sync_plans',
156
+ 'trace_plan',
157
+ 'pde_to_plan',
158
+ 'list_plans',
159
+ ]);
160
+
161
+ const FEATURE_SETS: Record<FeatureLevel, Set<string>> = {
162
+ MINIMAL: MINIMAL_TOOLS,
163
+ STANDARD: STANDARD_TOOLS,
164
+ OBSERVABILITY: STANDARD_TOOLS,
165
+ FULL: ALL_TOOLS,
166
+ };
167
+
168
+ export class FeatureConfig {
169
+ private level: FeatureLevel;
170
+ private enabledTools: Set<string>;
171
+
172
+ constructor(level?: FeatureLevel) {
173
+ const envLevel = (level ?? process.env['COAIAJS_FEATURES'] ?? 'STANDARD').toUpperCase() as FeatureLevel;
174
+ this.level = envLevel in FEATURE_SETS ? envLevel : 'STANDARD';
175
+ this.enabledTools = FEATURE_SETS[this.level];
176
+ }
177
+
178
+ isToolEnabled(toolName: string): boolean {
179
+ return this.enabledTools.has(toolName);
180
+ }
181
+
182
+ getEnabledTools(): Set<string> {
183
+ return new Set(this.enabledTools);
184
+ }
185
+
186
+ getFeatureLevel(): FeatureLevel {
187
+ return this.level;
188
+ }
189
+
190
+ getStats(): { tools: number; level: FeatureLevel } {
191
+ return {
192
+ tools: this.enabledTools.size,
193
+ level: this.level,
194
+ };
195
+ }
196
+ }