monty-autonomous-fullstack-dev-multillm 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 (186) hide show
  1. package/LICENSE +81 -0
  2. package/README.md +608 -0
  3. package/bin/cli.js +448 -0
  4. package/dist/agents/coding.d.ts +15 -0
  5. package/dist/agents/coding.d.ts.map +1 -0
  6. package/dist/agents/coding.js +189 -0
  7. package/dist/agents/coding.js.map +1 -0
  8. package/dist/agents/initializer.d.ts +15 -0
  9. package/dist/agents/initializer.d.ts.map +1 -0
  10. package/dist/agents/initializer.js +87 -0
  11. package/dist/agents/initializer.js.map +1 -0
  12. package/dist/agents/prompts/arbitrator.md +143 -0
  13. package/dist/agents/prompts/coding.md +247 -0
  14. package/dist/agents/prompts/initializer.md +98 -0
  15. package/dist/config/agent-config.d.ts +103 -0
  16. package/dist/config/agent-config.d.ts.map +1 -0
  17. package/dist/config/agent-config.js +138 -0
  18. package/dist/config/agent-config.js.map +1 -0
  19. package/dist/config/auth-config.d.ts +152 -0
  20. package/dist/config/auth-config.d.ts.map +1 -0
  21. package/dist/config/auth-config.js +139 -0
  22. package/dist/config/auth-config.js.map +1 -0
  23. package/dist/config/mcp-config.d.ts +109 -0
  24. package/dist/config/mcp-config.d.ts.map +1 -0
  25. package/dist/config/mcp-config.js +234 -0
  26. package/dist/config/mcp-config.js.map +1 -0
  27. package/dist/config/provider-config.d.ts +139 -0
  28. package/dist/config/provider-config.d.ts.map +1 -0
  29. package/dist/config/provider-config.js +344 -0
  30. package/dist/config/provider-config.js.map +1 -0
  31. package/dist/config/subagents-config.d.ts +85 -0
  32. package/dist/config/subagents-config.d.ts.map +1 -0
  33. package/dist/config/subagents-config.js +430 -0
  34. package/dist/config/subagents-config.js.map +1 -0
  35. package/dist/index.d.ts +14 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +385 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/orchestrator/arbitrator.d.ts +93 -0
  40. package/dist/orchestrator/arbitrator.d.ts.map +1 -0
  41. package/dist/orchestrator/arbitrator.js +330 -0
  42. package/dist/orchestrator/arbitrator.js.map +1 -0
  43. package/dist/orchestrator/index.d.ts +113 -0
  44. package/dist/orchestrator/index.d.ts.map +1 -0
  45. package/dist/orchestrator/index.js +217 -0
  46. package/dist/orchestrator/index.js.map +1 -0
  47. package/dist/orchestrator/review-coordinator.d.ts +143 -0
  48. package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
  49. package/dist/orchestrator/review-coordinator.js +401 -0
  50. package/dist/orchestrator/review-coordinator.js.map +1 -0
  51. package/dist/orchestrator/task-classifier.d.ts +87 -0
  52. package/dist/orchestrator/task-classifier.d.ts.map +1 -0
  53. package/dist/orchestrator/task-classifier.js +250 -0
  54. package/dist/orchestrator/task-classifier.js.map +1 -0
  55. package/dist/providers/anthropic-provider.d.ts +64 -0
  56. package/dist/providers/anthropic-provider.d.ts.map +1 -0
  57. package/dist/providers/anthropic-provider.js +264 -0
  58. package/dist/providers/anthropic-provider.js.map +1 -0
  59. package/dist/providers/base-provider.d.ts +219 -0
  60. package/dist/providers/base-provider.d.ts.map +1 -0
  61. package/dist/providers/base-provider.js +143 -0
  62. package/dist/providers/base-provider.js.map +1 -0
  63. package/dist/providers/cursor-provider.d.ts +82 -0
  64. package/dist/providers/cursor-provider.d.ts.map +1 -0
  65. package/dist/providers/cursor-provider.js +321 -0
  66. package/dist/providers/cursor-provider.js.map +1 -0
  67. package/dist/providers/google-provider.d.ts +75 -0
  68. package/dist/providers/google-provider.d.ts.map +1 -0
  69. package/dist/providers/google-provider.js +274 -0
  70. package/dist/providers/google-provider.js.map +1 -0
  71. package/dist/providers/index.d.ts +92 -0
  72. package/dist/providers/index.d.ts.map +1 -0
  73. package/dist/providers/index.js +233 -0
  74. package/dist/providers/index.js.map +1 -0
  75. package/dist/providers/openai-provider.d.ts +83 -0
  76. package/dist/providers/openai-provider.d.ts.map +1 -0
  77. package/dist/providers/openai-provider.js +295 -0
  78. package/dist/providers/openai-provider.js.map +1 -0
  79. package/dist/templates/feature_list.template.json +66 -0
  80. package/dist/templates/progress.template.txt +51 -0
  81. package/dist/utils/auth-manager.d.ts +121 -0
  82. package/dist/utils/auth-manager.d.ts.map +1 -0
  83. package/dist/utils/auth-manager.js +560 -0
  84. package/dist/utils/auth-manager.js.map +1 -0
  85. package/dist/utils/budget-enforcer.d.ts +181 -0
  86. package/dist/utils/budget-enforcer.d.ts.map +1 -0
  87. package/dist/utils/budget-enforcer.js +386 -0
  88. package/dist/utils/budget-enforcer.js.map +1 -0
  89. package/dist/utils/chatgpt-detector.d.ts +51 -0
  90. package/dist/utils/chatgpt-detector.d.ts.map +1 -0
  91. package/dist/utils/chatgpt-detector.js +274 -0
  92. package/dist/utils/chatgpt-detector.js.map +1 -0
  93. package/dist/utils/claude-code-detector.d.ts +39 -0
  94. package/dist/utils/claude-code-detector.d.ts.map +1 -0
  95. package/dist/utils/claude-code-detector.js +153 -0
  96. package/dist/utils/claude-code-detector.js.map +1 -0
  97. package/dist/utils/code-quality.d.ts +58 -0
  98. package/dist/utils/code-quality.d.ts.map +1 -0
  99. package/dist/utils/code-quality.js +258 -0
  100. package/dist/utils/code-quality.js.map +1 -0
  101. package/dist/utils/context-primer.d.ts +50 -0
  102. package/dist/utils/context-primer.d.ts.map +1 -0
  103. package/dist/utils/context-primer.js +429 -0
  104. package/dist/utils/context-primer.js.map +1 -0
  105. package/dist/utils/dependency-management.d.ts +40 -0
  106. package/dist/utils/dependency-management.d.ts.map +1 -0
  107. package/dist/utils/dependency-management.js +123 -0
  108. package/dist/utils/dependency-management.js.map +1 -0
  109. package/dist/utils/environment-validation.d.ts +33 -0
  110. package/dist/utils/environment-validation.d.ts.map +1 -0
  111. package/dist/utils/environment-validation.js +136 -0
  112. package/dist/utils/environment-validation.js.map +1 -0
  113. package/dist/utils/error-recovery.d.ts +60 -0
  114. package/dist/utils/error-recovery.d.ts.map +1 -0
  115. package/dist/utils/error-recovery.js +183 -0
  116. package/dist/utils/error-recovery.js.map +1 -0
  117. package/dist/utils/feature-list.d.ts +102 -0
  118. package/dist/utils/feature-list.d.ts.map +1 -0
  119. package/dist/utils/feature-list.js +191 -0
  120. package/dist/utils/feature-list.js.map +1 -0
  121. package/dist/utils/gemini-detector.d.ts +65 -0
  122. package/dist/utils/gemini-detector.d.ts.map +1 -0
  123. package/dist/utils/gemini-detector.js +340 -0
  124. package/dist/utils/gemini-detector.js.map +1 -0
  125. package/dist/utils/git-utils.d.ts +48 -0
  126. package/dist/utils/git-utils.d.ts.map +1 -0
  127. package/dist/utils/git-utils.js +110 -0
  128. package/dist/utils/git-utils.js.map +1 -0
  129. package/dist/utils/health-check.d.ts +32 -0
  130. package/dist/utils/health-check.d.ts.map +1 -0
  131. package/dist/utils/health-check.js +152 -0
  132. package/dist/utils/health-check.js.map +1 -0
  133. package/dist/utils/hooks-manager.d.ts +154 -0
  134. package/dist/utils/hooks-manager.d.ts.map +1 -0
  135. package/dist/utils/hooks-manager.js +359 -0
  136. package/dist/utils/hooks-manager.js.map +1 -0
  137. package/dist/utils/multi-auth-manager.d.ts +144 -0
  138. package/dist/utils/multi-auth-manager.d.ts.map +1 -0
  139. package/dist/utils/multi-auth-manager.js +588 -0
  140. package/dist/utils/multi-auth-manager.js.map +1 -0
  141. package/dist/utils/progress.d.ts +49 -0
  142. package/dist/utils/progress.d.ts.map +1 -0
  143. package/dist/utils/progress.js +209 -0
  144. package/dist/utils/progress.js.map +1 -0
  145. package/dist/utils/project-detection.d.ts +40 -0
  146. package/dist/utils/project-detection.d.ts.map +1 -0
  147. package/dist/utils/project-detection.js +230 -0
  148. package/dist/utils/project-detection.js.map +1 -0
  149. package/dist/utils/session-manager.d.ts +119 -0
  150. package/dist/utils/session-manager.d.ts.map +1 -0
  151. package/dist/utils/session-manager.js +389 -0
  152. package/dist/utils/session-manager.js.map +1 -0
  153. package/dist/utils/skills-manager.d.ts +113 -0
  154. package/dist/utils/skills-manager.d.ts.map +1 -0
  155. package/dist/utils/skills-manager.js +332 -0
  156. package/dist/utils/skills-manager.js.map +1 -0
  157. package/dist/utils/structured-output.d.ts +117 -0
  158. package/dist/utils/structured-output.d.ts.map +1 -0
  159. package/dist/utils/structured-output.js +191 -0
  160. package/dist/utils/structured-output.js.map +1 -0
  161. package/dist/utils/subagent-manager.d.ts +143 -0
  162. package/dist/utils/subagent-manager.d.ts.map +1 -0
  163. package/dist/utils/subagent-manager.js +326 -0
  164. package/dist/utils/subagent-manager.js.map +1 -0
  165. package/dist/utils/supabase-setup.d.ts +50 -0
  166. package/dist/utils/supabase-setup.d.ts.map +1 -0
  167. package/dist/utils/supabase-setup.js +151 -0
  168. package/dist/utils/supabase-setup.js.map +1 -0
  169. package/dist/utils/token-refresh.d.ts +21 -0
  170. package/dist/utils/token-refresh.d.ts.map +1 -0
  171. package/dist/utils/token-refresh.js +77 -0
  172. package/dist/utils/token-refresh.js.map +1 -0
  173. package/dist/utils/tos-warning.d.ts +115 -0
  174. package/dist/utils/tos-warning.d.ts.map +1 -0
  175. package/dist/utils/tos-warning.js +304 -0
  176. package/dist/utils/tos-warning.js.map +1 -0
  177. package/dist/utils/usage-monitor.d.ts +156 -0
  178. package/dist/utils/usage-monitor.d.ts.map +1 -0
  179. package/dist/utils/usage-monitor.js +296 -0
  180. package/dist/utils/usage-monitor.js.map +1 -0
  181. package/package.json +105 -0
  182. package/scripts/init.ps1 +73 -0
  183. package/scripts/init.sh +86 -0
  184. package/scripts/test-auth.sh +90 -0
  185. package/templates/feature_list.template.json +66 -0
  186. package/templates/progress.template.txt +51 -0
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Skills Manager
3
+ * Implements skill loading and management for the Claude Agent SDK.
4
+ * Skills are specialized SKILL.md files that extend agent capabilities.
5
+ *
6
+ * Copyright (c) 2025 Dobeu Tech Solutions LLC
7
+ * Licensed under CC BY-NC 4.0
8
+ */
9
+ import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
10
+ import { join, basename, dirname, relative } from 'path';
11
+ import { homedir } from 'os';
12
+ /**
13
+ * Skill search paths
14
+ */
15
+ export const SKILL_SEARCH_PATHS = [
16
+ // Workspace skills (highest priority)
17
+ '.claude/skills',
18
+ '.cursor/skills',
19
+ '.codex/skills',
20
+ // User-level skills
21
+ join(homedir(), '.claude', 'skills'),
22
+ join(homedir(), '.codex', 'skills'),
23
+ // System skills (from package)
24
+ join(dirname(__dirname), 'skills'),
25
+ ];
26
+ /**
27
+ * Parse YAML frontmatter from SKILL.md content
28
+ */
29
+ export function parseSkillFrontmatter(content) {
30
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
31
+ if (!frontmatterMatch) {
32
+ // Return default metadata if no frontmatter
33
+ return {
34
+ name: 'Unnamed Skill',
35
+ description: 'No description provided',
36
+ };
37
+ }
38
+ const frontmatter = frontmatterMatch[1];
39
+ const metadata = {
40
+ name: 'Unnamed Skill',
41
+ description: 'No description provided',
42
+ };
43
+ // Simple YAML-like parsing (for basic key: value pairs)
44
+ if (!frontmatter)
45
+ return metadata;
46
+ const lines = frontmatter.split('\n');
47
+ for (const line of lines) {
48
+ const match = line.match(/^(\w+):\s*(.+)$/);
49
+ if (match) {
50
+ const [, key, value] = match;
51
+ if (!key || !value)
52
+ continue;
53
+ switch (key.toLowerCase()) {
54
+ case 'name':
55
+ metadata.name = value.replace(/^["']|["']$/g, '');
56
+ break;
57
+ case 'description':
58
+ metadata.description = value.replace(/^["']|["']$/g, '');
59
+ break;
60
+ case 'category':
61
+ metadata.category = value.replace(/^["']|["']$/g, '');
62
+ break;
63
+ case 'version':
64
+ metadata.version = value.replace(/^["']|["']$/g, '');
65
+ break;
66
+ case 'author':
67
+ metadata.author = value.replace(/^["']|["']$/g, '');
68
+ break;
69
+ case 'priority':
70
+ const priorityValue = parseInt(value, 10);
71
+ if (!isNaN(priorityValue)) {
72
+ metadata.priority = priorityValue;
73
+ }
74
+ break;
75
+ case 'triggers':
76
+ // Handle array format: triggers: ["trigger1", "trigger2"]
77
+ const triggersMatch = value.match(/\[(.*)\]/);
78
+ if (triggersMatch && triggersMatch[1]) {
79
+ metadata.triggers = triggersMatch[1]
80
+ .split(',')
81
+ .map(t => t.trim().replace(/^["']|["']$/g, ''));
82
+ }
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ return metadata;
88
+ }
89
+ /**
90
+ * Get skill content without frontmatter
91
+ */
92
+ export function getSkillContent(content) {
93
+ return content.replace(/^---\n[\s\S]*?\n---\n*/, '').trim();
94
+ }
95
+ /**
96
+ * Load a single skill from a path
97
+ */
98
+ export function loadSkill(skillPath, baseDir, source) {
99
+ try {
100
+ if (!existsSync(skillPath)) {
101
+ return null;
102
+ }
103
+ const content = readFileSync(skillPath, 'utf-8');
104
+ const metadata = parseSkillFrontmatter(content);
105
+ const skillContent = getSkillContent(content);
106
+ return {
107
+ path: skillPath,
108
+ relativePath: relative(baseDir, skillPath),
109
+ name: metadata.name || basename(dirname(skillPath)),
110
+ content: skillContent,
111
+ metadata,
112
+ source,
113
+ };
114
+ }
115
+ catch (error) {
116
+ console.warn(`Failed to load skill from ${skillPath}:`, error);
117
+ return null;
118
+ }
119
+ }
120
+ /**
121
+ * Recursively find SKILL.md files in a directory
122
+ */
123
+ export function findSkillFiles(directory) {
124
+ const skillFiles = [];
125
+ if (!existsSync(directory)) {
126
+ return skillFiles;
127
+ }
128
+ try {
129
+ const entries = readdirSync(directory);
130
+ for (const entry of entries) {
131
+ const entryPath = join(directory, entry);
132
+ const stat = statSync(entryPath);
133
+ if (stat.isDirectory()) {
134
+ // Check for SKILL.md in subdirectory
135
+ const skillPath = join(entryPath, 'SKILL.md');
136
+ if (existsSync(skillPath)) {
137
+ skillFiles.push(skillPath);
138
+ }
139
+ // Recursively search subdirectories
140
+ skillFiles.push(...findSkillFiles(entryPath));
141
+ }
142
+ else if (entry === 'SKILL.md') {
143
+ skillFiles.push(entryPath);
144
+ }
145
+ }
146
+ }
147
+ catch (error) {
148
+ console.warn(`Failed to search directory ${directory}:`, error);
149
+ }
150
+ return skillFiles;
151
+ }
152
+ /**
153
+ * Load all skills from search paths
154
+ */
155
+ export function loadAllSkills(projectRoot = process.cwd()) {
156
+ const skills = [];
157
+ const loadedPaths = new Set();
158
+ // Helper to determine source type
159
+ const getSource = (path) => {
160
+ if (path.startsWith(projectRoot))
161
+ return 'workspace';
162
+ if (path.startsWith(homedir()))
163
+ return 'user';
164
+ if (path.includes('marketplace'))
165
+ return 'marketplace';
166
+ return 'system';
167
+ };
168
+ // Search all configured paths
169
+ for (const searchPath of SKILL_SEARCH_PATHS) {
170
+ const fullPath = searchPath.startsWith('/') || searchPath.includes(':')
171
+ ? searchPath
172
+ : join(projectRoot, searchPath);
173
+ const skillFiles = findSkillFiles(fullPath);
174
+ for (const skillFile of skillFiles) {
175
+ if (!loadedPaths.has(skillFile)) {
176
+ loadedPaths.add(skillFile);
177
+ const skill = loadSkill(skillFile, projectRoot, getSource(fullPath));
178
+ if (skill) {
179
+ skills.push(skill);
180
+ }
181
+ }
182
+ }
183
+ }
184
+ // Sort by priority (higher priority first) then by name
185
+ skills.sort((a, b) => {
186
+ const priorityDiff = (b.metadata.priority || 0) - (a.metadata.priority || 0);
187
+ if (priorityDiff !== 0)
188
+ return priorityDiff;
189
+ return a.name.localeCompare(b.name);
190
+ });
191
+ return skills;
192
+ }
193
+ /**
194
+ * Find skills that match a query or context
195
+ */
196
+ export function findMatchingSkills(skills, query) {
197
+ const lowerQuery = query.toLowerCase();
198
+ return skills.filter(skill => {
199
+ // Check name
200
+ if (skill.name.toLowerCase().includes(lowerQuery)) {
201
+ return true;
202
+ }
203
+ // Check description
204
+ if (skill.metadata.description.toLowerCase().includes(lowerQuery)) {
205
+ return true;
206
+ }
207
+ // Check triggers
208
+ if (skill.metadata.triggers) {
209
+ for (const trigger of skill.metadata.triggers) {
210
+ if (lowerQuery.includes(trigger.toLowerCase())) {
211
+ return true;
212
+ }
213
+ }
214
+ }
215
+ // Check category
216
+ if (skill.metadata.category?.toLowerCase().includes(lowerQuery)) {
217
+ return true;
218
+ }
219
+ return false;
220
+ });
221
+ }
222
+ /**
223
+ * Format skills for inclusion in agent prompt
224
+ */
225
+ export function formatSkillsForPrompt(skills) {
226
+ if (skills.length === 0) {
227
+ return '';
228
+ }
229
+ const sections = [];
230
+ sections.push('## Available Skills\n');
231
+ sections.push('The following specialized skills are available to assist with specific tasks:\n');
232
+ for (const skill of skills) {
233
+ sections.push(`### ${skill.name}`);
234
+ sections.push(`**Source:** ${skill.source}`);
235
+ if (skill.metadata.category) {
236
+ sections.push(`**Category:** ${skill.metadata.category}`);
237
+ }
238
+ sections.push(`**Description:** ${skill.metadata.description}`);
239
+ if (skill.metadata.triggers && skill.metadata.triggers.length > 0) {
240
+ sections.push(`**Triggers:** ${skill.metadata.triggers.join(', ')}`);
241
+ }
242
+ sections.push('');
243
+ sections.push('```');
244
+ sections.push(skill.content);
245
+ sections.push('```');
246
+ sections.push('');
247
+ }
248
+ return sections.join('\n');
249
+ }
250
+ /**
251
+ * Get skills summary for status display
252
+ */
253
+ export function getSkillsSummary(skills) {
254
+ if (skills.length === 0) {
255
+ return 'No skills loaded';
256
+ }
257
+ const bySource = {};
258
+ for (const skill of skills) {
259
+ bySource[skill.source] = (bySource[skill.source] || 0) + 1;
260
+ }
261
+ const parts = Object.entries(bySource)
262
+ .map(([source, count]) => `${count} ${source}`)
263
+ .join(', ');
264
+ return `${skills.length} skills loaded (${parts})`;
265
+ }
266
+ /**
267
+ * Skills Manager class for stateful skill management
268
+ */
269
+ export class SkillsManager {
270
+ skills = [];
271
+ projectRoot;
272
+ constructor(projectRoot = process.cwd()) {
273
+ this.projectRoot = projectRoot;
274
+ }
275
+ /**
276
+ * Load all available skills
277
+ */
278
+ load() {
279
+ this.skills = loadAllSkills(this.projectRoot);
280
+ return this.skills;
281
+ }
282
+ /**
283
+ * Get all loaded skills
284
+ */
285
+ getAll() {
286
+ return this.skills;
287
+ }
288
+ /**
289
+ * Find skills matching a query
290
+ */
291
+ find(query) {
292
+ return findMatchingSkills(this.skills, query);
293
+ }
294
+ /**
295
+ * Get skills formatted for prompt inclusion
296
+ */
297
+ formatForPrompt() {
298
+ return formatSkillsForPrompt(this.skills);
299
+ }
300
+ /**
301
+ * Get summary for status display
302
+ */
303
+ getSummary() {
304
+ return getSkillsSummary(this.skills);
305
+ }
306
+ /**
307
+ * Get skill by name
308
+ */
309
+ getByName(name) {
310
+ return this.skills.find(s => s.name.toLowerCase() === name.toLowerCase());
311
+ }
312
+ /**
313
+ * Get skills by category
314
+ */
315
+ getByCategory(category) {
316
+ return this.skills.filter(s => s.metadata.category?.toLowerCase() === category.toLowerCase());
317
+ }
318
+ /**
319
+ * Get skills by source
320
+ */
321
+ getBySource(source) {
322
+ return this.skills.filter(s => s.source === source);
323
+ }
324
+ }
325
+ /**
326
+ * Create a skills manager instance
327
+ */
328
+ export function createSkillsManager(projectRoot) {
329
+ return new SkillsManager(projectRoot);
330
+ }
331
+ export default SkillsManager;
332
+ //# sourceMappingURL=skills-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-manager.js","sourceRoot":"","sources":["../../src/utils/skills-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Structured Output Validation (Feature A5)
3
+ * Ensures consistent JSON output format across sessions
4
+ *
5
+ * Copyright (c) 2025 Dobeu Tech Solutions LLC
6
+ * Licensed under CC BY-NC 4.0
7
+ */
8
+ /**
9
+ * Session output schema for consistent reporting
10
+ */
11
+ export interface SessionOutput {
12
+ session_id: string;
13
+ timestamp: string;
14
+ duration_seconds: number;
15
+ status: 'success' | 'partial' | 'failed' | 'interrupted';
16
+ features: {
17
+ total: number;
18
+ completed: number;
19
+ in_progress: string[];
20
+ failed: string[];
21
+ };
22
+ actions: {
23
+ files_created: string[];
24
+ files_modified: string[];
25
+ files_deleted: string[];
26
+ commands_executed: string[];
27
+ tests_run: number;
28
+ tests_passed: number;
29
+ };
30
+ next_session: {
31
+ recommended_feature: string | null;
32
+ blockers: string[];
33
+ notes: string[];
34
+ skip_tools: string[];
35
+ priority_tools: string[];
36
+ };
37
+ metrics: {
38
+ tokens_input: number;
39
+ tokens_output: number;
40
+ api_calls: number;
41
+ estimated_cost_usd: number;
42
+ };
43
+ }
44
+ /**
45
+ * Tool applicability result
46
+ */
47
+ export interface ToolApplicability {
48
+ tool: string;
49
+ applicable: boolean;
50
+ reason: string;
51
+ priority: 'high' | 'medium' | 'low' | 'skip';
52
+ }
53
+ /**
54
+ * Session notation for agent continuity
55
+ */
56
+ export interface SessionNotation {
57
+ session_id: string;
58
+ ended_at: string;
59
+ summary: string;
60
+ features_completed: string[];
61
+ next_steps: string[];
62
+ recommended_feature: string | null;
63
+ tools_used: string[];
64
+ tools_skipped: string[];
65
+ tool_recommendations: ToolApplicability[];
66
+ blockers: string[];
67
+ warnings: string[];
68
+ important_context: string[];
69
+ file_changes: {
70
+ path: string;
71
+ action: 'created' | 'modified' | 'deleted';
72
+ }[];
73
+ }
74
+ /**
75
+ * Create default session output
76
+ */
77
+ export declare function createSessionOutput(sessionId: string): SessionOutput;
78
+ /**
79
+ * Validate session output against schema
80
+ */
81
+ export declare function validateSessionOutput(output: unknown): output is SessionOutput;
82
+ /**
83
+ * Save session output to file
84
+ */
85
+ export declare function saveSessionOutput(agentDir: string, output: SessionOutput): void;
86
+ /**
87
+ * Load last session output
88
+ */
89
+ export declare function loadLastSessionOutput(agentDir: string): SessionOutput | null;
90
+ /**
91
+ * Create session notation for next agent
92
+ */
93
+ export declare function createSessionNotation(sessionId: string, summary: string, toolRecommendations: ToolApplicability[]): SessionNotation;
94
+ /**
95
+ * Save session notation
96
+ */
97
+ export declare function saveSessionNotation(agentDir: string, notation: SessionNotation): void;
98
+ /**
99
+ * Load last session notation
100
+ */
101
+ export declare function loadLastSessionNotation(agentDir: string): SessionNotation | null;
102
+ /**
103
+ * Generate output format schema for SDK
104
+ */
105
+ export declare function getOutputFormatSchema(): object;
106
+ declare const _default: {
107
+ createSessionOutput: typeof createSessionOutput;
108
+ validateSessionOutput: typeof validateSessionOutput;
109
+ saveSessionOutput: typeof saveSessionOutput;
110
+ loadLastSessionOutput: typeof loadLastSessionOutput;
111
+ createSessionNotation: typeof createSessionNotation;
112
+ saveSessionNotation: typeof saveSessionNotation;
113
+ loadLastSessionNotation: typeof loadLastSessionNotation;
114
+ getOutputFormatSchema: typeof getOutputFormatSchema;
115
+ };
116
+ export default _default;
117
+ //# sourceMappingURL=structured-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output.d.ts","sourceRoot":"","sources":["../../src/utils/structured-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Structured Output Validation (Feature A5)
3
+ * Ensures consistent JSON output format across sessions
4
+ *
5
+ * Copyright (c) 2025 Dobeu Tech Solutions LLC
6
+ * Licensed under CC BY-NC 4.0
7
+ */
8
+ import { writeFileSync, readFileSync, existsSync } from 'fs';
9
+ import { join } from 'path';
10
+ /**
11
+ * Create default session output
12
+ */
13
+ export function createSessionOutput(sessionId) {
14
+ return {
15
+ session_id: sessionId,
16
+ timestamp: new Date().toISOString(),
17
+ duration_seconds: 0,
18
+ status: 'success',
19
+ features: {
20
+ total: 0,
21
+ completed: 0,
22
+ in_progress: [],
23
+ failed: [],
24
+ },
25
+ actions: {
26
+ files_created: [],
27
+ files_modified: [],
28
+ files_deleted: [],
29
+ commands_executed: [],
30
+ tests_run: 0,
31
+ tests_passed: 0,
32
+ },
33
+ next_session: {
34
+ recommended_feature: null,
35
+ blockers: [],
36
+ notes: [],
37
+ skip_tools: [],
38
+ priority_tools: [],
39
+ },
40
+ metrics: {
41
+ tokens_input: 0,
42
+ tokens_output: 0,
43
+ api_calls: 0,
44
+ estimated_cost_usd: 0,
45
+ },
46
+ };
47
+ }
48
+ /**
49
+ * Validate session output against schema
50
+ */
51
+ export function validateSessionOutput(output) {
52
+ if (typeof output !== 'object' || output === null)
53
+ return false;
54
+ const o = output;
55
+ return (typeof o.session_id === 'string' &&
56
+ typeof o.timestamp === 'string' &&
57
+ typeof o.duration_seconds === 'number' &&
58
+ ['success', 'partial', 'failed', 'interrupted'].includes(o.status) &&
59
+ typeof o.features === 'object' &&
60
+ typeof o.actions === 'object' &&
61
+ typeof o.next_session === 'object' &&
62
+ typeof o.metrics === 'object');
63
+ }
64
+ /**
65
+ * Save session output to file
66
+ */
67
+ export function saveSessionOutput(agentDir, output) {
68
+ const outputPath = join(agentDir, 'session_output.json');
69
+ const historyPath = join(agentDir, 'session_history.json');
70
+ // Save current output
71
+ writeFileSync(outputPath, JSON.stringify(output, null, 2));
72
+ // Append to history
73
+ let history = [];
74
+ if (existsSync(historyPath)) {
75
+ try {
76
+ history = JSON.parse(readFileSync(historyPath, 'utf-8'));
77
+ }
78
+ catch {
79
+ history = [];
80
+ }
81
+ }
82
+ // Keep last 50 sessions
83
+ history.push(output);
84
+ if (history.length > 50) {
85
+ history = history.slice(-50);
86
+ }
87
+ writeFileSync(historyPath, JSON.stringify(history, null, 2));
88
+ }
89
+ /**
90
+ * Load last session output
91
+ */
92
+ export function loadLastSessionOutput(agentDir) {
93
+ const outputPath = join(agentDir, 'session_output.json');
94
+ if (!existsSync(outputPath))
95
+ return null;
96
+ try {
97
+ const data = JSON.parse(readFileSync(outputPath, 'utf-8'));
98
+ return validateSessionOutput(data) ? data : null;
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ /**
105
+ * Create session notation for next agent
106
+ */
107
+ export function createSessionNotation(sessionId, summary, toolRecommendations) {
108
+ return {
109
+ session_id: sessionId,
110
+ ended_at: new Date().toISOString(),
111
+ summary,
112
+ features_completed: [],
113
+ next_steps: [],
114
+ recommended_feature: null,
115
+ tools_used: [],
116
+ tools_skipped: [],
117
+ tool_recommendations: toolRecommendations,
118
+ blockers: [],
119
+ warnings: [],
120
+ important_context: [],
121
+ file_changes: [],
122
+ };
123
+ }
124
+ /**
125
+ * Save session notation
126
+ */
127
+ export function saveSessionNotation(agentDir, notation) {
128
+ const notationPath = join(agentDir, 'session_notation.json');
129
+ const historyPath = join(agentDir, 'notation_history.json');
130
+ writeFileSync(notationPath, JSON.stringify(notation, null, 2));
131
+ // Append to history
132
+ let history = [];
133
+ if (existsSync(historyPath)) {
134
+ try {
135
+ history = JSON.parse(readFileSync(historyPath, 'utf-8'));
136
+ }
137
+ catch {
138
+ history = [];
139
+ }
140
+ }
141
+ history.push(notation);
142
+ if (history.length > 20) {
143
+ history = history.slice(-20);
144
+ }
145
+ writeFileSync(historyPath, JSON.stringify(history, null, 2));
146
+ }
147
+ /**
148
+ * Load last session notation
149
+ */
150
+ export function loadLastSessionNotation(agentDir) {
151
+ const notationPath = join(agentDir, 'session_notation.json');
152
+ if (!existsSync(notationPath))
153
+ return null;
154
+ try {
155
+ return JSON.parse(readFileSync(notationPath, 'utf-8'));
156
+ }
157
+ catch {
158
+ return null;
159
+ }
160
+ }
161
+ /**
162
+ * Generate output format schema for SDK
163
+ */
164
+ export function getOutputFormatSchema() {
165
+ return {
166
+ type: 'json_schema',
167
+ schema: {
168
+ type: 'object',
169
+ properties: {
170
+ session_id: { type: 'string' },
171
+ status: { type: 'string', enum: ['success', 'partial', 'failed', 'interrupted'] },
172
+ features_completed: { type: 'array', items: { type: 'string' } },
173
+ next_recommended: { type: 'string' },
174
+ blockers: { type: 'array', items: { type: 'string' } },
175
+ summary: { type: 'string' },
176
+ },
177
+ required: ['session_id', 'status', 'summary'],
178
+ },
179
+ };
180
+ }
181
+ export default {
182
+ createSessionOutput,
183
+ validateSessionOutput,
184
+ saveSessionOutput,
185
+ loadLastSessionOutput,
186
+ createSessionNotation,
187
+ saveSessionNotation,
188
+ loadLastSessionNotation,
189
+ getOutputFormatSchema,
190
+ };
191
+ //# sourceMappingURL=structured-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output.js","sourceRoot":"","sources":["../../src/utils/structured-output.ts"],"names":[],"mappings":"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"}