@magic-ingredients/tiny-brain-local 0.8.0 → 0.10.2

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 (147) hide show
  1. package/dist/agents/formatters/claude-code-formatter.d.ts +37 -0
  2. package/dist/agents/formatters/claude-code-formatter.d.ts.map +1 -0
  3. package/dist/agents/formatters/claude-code-formatter.js +217 -0
  4. package/dist/agents/formatters/claude-code-formatter.js.map +1 -0
  5. package/dist/agents/formatters/formatter-factory.d.ts +25 -0
  6. package/dist/agents/formatters/formatter-factory.d.ts.map +1 -0
  7. package/dist/agents/formatters/formatter-factory.js +61 -0
  8. package/dist/agents/formatters/formatter-factory.js.map +1 -0
  9. package/dist/agents/types.d.ts +68 -0
  10. package/dist/agents/types.d.ts.map +1 -0
  11. package/dist/agents/types.js +12 -0
  12. package/dist/agents/types.js.map +1 -0
  13. package/dist/analyser/analyzers/script-analyzer.d.ts +10 -0
  14. package/dist/analyser/analyzers/script-analyzer.d.ts.map +1 -0
  15. package/dist/analyser/analyzers/script-analyzer.js +205 -0
  16. package/dist/analyser/analyzers/script-analyzer.js.map +1 -0
  17. package/dist/analyser/detectors/base-detector.d.ts +12 -0
  18. package/dist/analyser/detectors/base-detector.d.ts.map +1 -0
  19. package/dist/analyser/detectors/base-detector.js +50 -0
  20. package/dist/analyser/detectors/base-detector.js.map +1 -0
  21. package/dist/analyser/detectors/javascript-detector.d.ts +19 -0
  22. package/dist/analyser/detectors/javascript-detector.d.ts.map +1 -0
  23. package/dist/analyser/detectors/javascript-detector.js +347 -0
  24. package/dist/analyser/detectors/javascript-detector.js.map +1 -0
  25. package/dist/analyser/index.d.ts +5 -0
  26. package/dist/analyser/index.d.ts.map +1 -0
  27. package/dist/analyser/index.js +315 -0
  28. package/dist/analyser/index.js.map +1 -0
  29. package/dist/analyser/types.d.ts +2 -0
  30. package/dist/analyser/types.d.ts.map +1 -0
  31. package/dist/analyser/types.js +2 -0
  32. package/dist/analyser/types.js.map +1 -0
  33. package/dist/analyser/utils.d.ts +5 -0
  34. package/dist/analyser/utils.d.ts.map +1 -0
  35. package/dist/analyser/utils.js +24 -0
  36. package/dist/analyser/utils.js.map +1 -0
  37. package/dist/cli/cli-factory.d.ts.map +1 -1
  38. package/dist/cli/cli-factory.js +17 -0
  39. package/dist/cli/cli-factory.js.map +1 -1
  40. package/dist/cli/commands/analyse.command.d.ts +7 -0
  41. package/dist/cli/commands/analyse.command.d.ts.map +1 -0
  42. package/dist/cli/commands/analyse.command.js +130 -0
  43. package/dist/cli/commands/analyse.command.js.map +1 -0
  44. package/dist/cli/commands/status.command.d.ts.map +1 -1
  45. package/dist/cli/commands/status.command.js +3 -1
  46. package/dist/cli/commands/status.command.js.map +1 -1
  47. package/dist/core/mcp-server.d.ts +10 -8
  48. package/dist/core/mcp-server.d.ts.map +1 -1
  49. package/dist/core/mcp-server.js +93 -85
  50. package/dist/core/mcp-server.js.map +1 -1
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +33 -8
  54. package/dist/index.js.map +1 -1
  55. package/dist/prompts/persona/persona.prompt.js +8 -8
  56. package/dist/prompts/persona/persona.prompt.js.map +1 -1
  57. package/dist/prompts/planning/planning.prompt.d.ts +0 -8
  58. package/dist/prompts/planning/planning.prompt.d.ts.map +1 -1
  59. package/dist/prompts/planning/planning.prompt.js +0 -175
  60. package/dist/prompts/planning/planning.prompt.js.map +1 -1
  61. package/dist/services/agent-installation-service.d.ts +101 -0
  62. package/dist/services/agent-installation-service.d.ts.map +1 -0
  63. package/dist/services/agent-installation-service.js +328 -0
  64. package/dist/services/agent-installation-service.js.map +1 -0
  65. package/dist/services/agent-manager.d.ts +45 -0
  66. package/dist/services/agent-manager.d.ts.map +1 -0
  67. package/dist/services/agent-manager.js +154 -0
  68. package/dist/services/agent-manager.js.map +1 -0
  69. package/dist/services/agent-service.d.ts +70 -0
  70. package/dist/services/agent-service.d.ts.map +1 -0
  71. package/dist/services/agent-service.js +273 -0
  72. package/dist/services/agent-service.js.map +1 -0
  73. package/dist/services/analyse-service.d.ts +97 -0
  74. package/dist/services/analyse-service.d.ts.map +1 -0
  75. package/dist/services/analyse-service.js +370 -0
  76. package/dist/services/analyse-service.js.map +1 -0
  77. package/dist/services/dashboard-launcher.service.d.ts +20 -0
  78. package/dist/services/dashboard-launcher.service.d.ts.map +1 -0
  79. package/dist/services/dashboard-launcher.service.js +30 -0
  80. package/dist/services/dashboard-launcher.service.js.map +1 -0
  81. package/dist/services/persona-enhancer.d.ts +52 -0
  82. package/dist/services/persona-enhancer.d.ts.map +1 -0
  83. package/dist/services/persona-enhancer.js +252 -0
  84. package/dist/services/persona-enhancer.js.map +1 -0
  85. package/dist/services/persona-grouper.d.ts +29 -0
  86. package/dist/services/persona-grouper.d.ts.map +1 -0
  87. package/dist/services/persona-grouper.js +111 -0
  88. package/dist/services/persona-grouper.js.map +1 -0
  89. package/dist/services/persona-service.d.ts +52 -0
  90. package/dist/services/persona-service.d.ts.map +1 -0
  91. package/dist/services/{enhanced-persona-service.js → persona-service.js} +125 -7
  92. package/dist/services/persona-service.js.map +1 -0
  93. package/dist/services/remote/auth-token-service.d.ts.map +1 -1
  94. package/dist/services/remote/auth-token-service.js +10 -3
  95. package/dist/services/remote/auth-token-service.js.map +1 -1
  96. package/dist/services/remote/system-persona-service.d.ts.map +1 -1
  97. package/dist/services/remote/system-persona-service.js +41 -10
  98. package/dist/services/remote/system-persona-service.js.map +1 -1
  99. package/dist/services/repo-service.d.ts +195 -0
  100. package/dist/services/repo-service.d.ts.map +1 -0
  101. package/dist/services/repo-service.js +1023 -0
  102. package/dist/services/repo-service.js.map +1 -0
  103. package/dist/services/types/persona-types.d.ts +84 -0
  104. package/dist/services/types/persona-types.d.ts.map +1 -0
  105. package/dist/services/types/persona-types.js +5 -0
  106. package/dist/services/types/persona-types.js.map +1 -0
  107. package/dist/services/versioning-service.d.ts +79 -0
  108. package/dist/services/versioning-service.d.ts.map +1 -0
  109. package/dist/services/versioning-service.js +191 -0
  110. package/dist/services/versioning-service.js.map +1 -0
  111. package/dist/storage/local-filesystem-adapter.d.ts +1 -0
  112. package/dist/storage/local-filesystem-adapter.d.ts.map +1 -1
  113. package/dist/storage/local-filesystem-adapter.js +47 -3
  114. package/dist/storage/local-filesystem-adapter.js.map +1 -1
  115. package/dist/storage/platform-config-adapter.d.ts +9 -0
  116. package/dist/storage/platform-config-adapter.d.ts.map +1 -1
  117. package/dist/storage/platform-config-adapter.js +55 -1
  118. package/dist/storage/platform-config-adapter.js.map +1 -1
  119. package/dist/tools/analyse.tool.d.ts +17 -0
  120. package/dist/tools/analyse.tool.d.ts.map +1 -0
  121. package/dist/tools/analyse.tool.js +124 -0
  122. package/dist/tools/analyse.tool.js.map +1 -0
  123. package/dist/tools/persona/as.tool.d.ts +32 -11
  124. package/dist/tools/persona/as.tool.d.ts.map +1 -1
  125. package/dist/tools/persona/as.tool.js +452 -317
  126. package/dist/tools/persona/as.tool.js.map +1 -1
  127. package/dist/tools/persona/persona.tool.js +2 -2
  128. package/dist/tools/persona/persona.tool.js.map +1 -1
  129. package/dist/tools/plan/plan.tool.d.ts +3 -3
  130. package/dist/tools/plan/plan.tool.d.ts.map +1 -1
  131. package/dist/tools/plan/plan.tool.js +78 -55
  132. package/dist/tools/plan/plan.tool.js.map +1 -1
  133. package/dist/tools/tool-registry.d.ts.map +1 -1
  134. package/dist/tools/tool-registry.js +4 -0
  135. package/dist/tools/tool-registry.js.map +1 -1
  136. package/dist/utils/repo-utils.d.ts +10 -0
  137. package/dist/utils/repo-utils.d.ts.map +1 -0
  138. package/dist/utils/repo-utils.js +55 -0
  139. package/dist/utils/repo-utils.js.map +1 -0
  140. package/package.json +6 -2
  141. package/dist/services/enhanced-persona-service.d.ts +0 -22
  142. package/dist/services/enhanced-persona-service.d.ts.map +0 -1
  143. package/dist/services/enhanced-persona-service.js.map +0 -1
  144. package/dist/services/plan-watcher.service.d.ts +0 -141
  145. package/dist/services/plan-watcher.service.d.ts.map +0 -1
  146. package/dist/services/plan-watcher.service.js +0 -1010
  147. package/dist/services/plan-watcher.service.js.map +0 -1
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Agent Service
3
+ *
4
+ * Handles all agent-related operations including formatting and installation.
5
+ * Keeps agent management logic separate from persona and repository concerns.
6
+ */
7
+ import type { RequestContext } from '../types/request-context.js';
8
+ import type { AgentFormatter, FormattedAgent as PlatformFormattedAgent } from '../agents/types.js';
9
+ import type { LibraryPersonaResponse } from '@magic-ingredients/tiny-brain-core';
10
+ export interface AgentInstallOptions {
11
+ overwriteStrategy?: 'always' | 'never' | 'version-check';
12
+ backupExisting?: boolean;
13
+ }
14
+ export interface AgentInstallResult {
15
+ installed: string[];
16
+ skipped: string[];
17
+ updated: string[];
18
+ errors: Array<{
19
+ agent: string;
20
+ error: string;
21
+ }>;
22
+ }
23
+ /**
24
+ * Service for managing agent operations
25
+ */
26
+ export declare class AgentService {
27
+ private context;
28
+ private installationService?;
29
+ constructor(context: RequestContext);
30
+ /**
31
+ * Format agents for the current formatter type
32
+ */
33
+ formatAgents(agents: LibraryPersonaResponse['agents'], formatter?: any): PlatformFormattedAgent[];
34
+ /**
35
+ * Install formatted agents to the filesystem
36
+ */
37
+ installAgents(formattedAgents: PlatformFormattedAgent[], formatter?: AgentFormatter): Promise<void>;
38
+ /**
39
+ * Install agents with version checking and overwrite strategy
40
+ */
41
+ installAgentsWithVersionCheck(agents: LibraryPersonaResponse['agents'], options?: AgentInstallOptions): Promise<AgentInstallResult>;
42
+ /**
43
+ * Remove agents from disk
44
+ */
45
+ removeAgents(agentNames: string[]): Promise<{
46
+ removed: string[];
47
+ errors: string[];
48
+ }>;
49
+ /**
50
+ * Get installed agents from disk
51
+ */
52
+ getInstalledAgents(): Promise<import("./agent-installation-service.js").InstalledAgentInfo[]>;
53
+ /**
54
+ * Extract version from agent content
55
+ */
56
+ private extractVersion;
57
+ /**
58
+ * Format and install agents in one operation
59
+ */
60
+ formatAndInstallAgents(agents: LibraryPersonaResponse['agents'], formatter?: any): Promise<PlatformFormattedAgent[]>;
61
+ /**
62
+ * Get the default formatter
63
+ */
64
+ getDefaultFormatter(): AgentFormatter;
65
+ /**
66
+ * Detect formatter type from environment
67
+ */
68
+ detectFormatterType(): string;
69
+ }
70
+ //# sourceMappingURL=agent-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-service.d.ts","sourceRoot":"","sources":["../../src/services/agent-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAOjF,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,eAAe,CAAC;IACzD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,mBAAmB,CAAC,CAA2B;gBAEnC,OAAO,EAAE,cAAc;IAE3C;;OAEG;IACH,YAAY,CACV,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EACxC,SAAS,CAAC,EAAE,GAAG,GACd,sBAAsB,EAAE;IAmD3B;;OAEG;IACG,aAAa,CAAC,eAAe,EAAE,sBAAsB,EAAE,EAAE,SAAS,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BzG;;OAEG;IACG,6BAA6B,CACjC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EACxC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;IAiF9B;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAyC1F;;OAEG;IACG,kBAAkB;IAsCxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACG,sBAAsB,CAC1B,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EACxC,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAMpC;;OAEG;IACH,mBAAmB,IAAI,cAAc;IAIrC;;OAEG;IACH,mBAAmB,IAAI,MAAM;CAG9B"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Agent Service
3
+ *
4
+ * Handles all agent-related operations including formatting and installation.
5
+ * Keeps agent management logic separate from persona and repository concerns.
6
+ */
7
+ import { FormatterFactory } from '../agents/formatters/formatter-factory.js';
8
+ import { getRepoRoot } from '../utils/repo-utils.js';
9
+ import * as semver from 'semver';
10
+ import { AgentInstallationService } from './agent-installation-service.js';
11
+ /**
12
+ * Service for managing agent operations
13
+ */
14
+ export class AgentService {
15
+ context;
16
+ installationService;
17
+ constructor(context) {
18
+ this.context = context;
19
+ }
20
+ /**
21
+ * Format agents for the current formatter type
22
+ */
23
+ formatAgents(agents, formatter // ClaudeCodeFormatter has formatTbrAgent
24
+ ) {
25
+ try {
26
+ const activeFormatter = formatter || FormatterFactory.getFormatter(FormatterFactory.detectFormat());
27
+ // Debug: Log raw agent data from TBR
28
+ this.context.logger.debug('[AgentService] Raw agents from TBR:', {
29
+ agentCount: agents.length,
30
+ agents: agents.map(agent => ({
31
+ name: agent.name,
32
+ hasDetails: !!agent.details,
33
+ hasMindset: !!agent.mindset,
34
+ hasBoundaries: !!agent.boundaries,
35
+ hasTasks: !!agent.tasks,
36
+ hasFlow: !!agent.flow,
37
+ rawAgent: agent
38
+ }))
39
+ });
40
+ this.context.logger.debug('[AgentService] Using formatter:', {
41
+ formatterType: activeFormatter?.constructor?.name || 'unknown',
42
+ hasFormatTbrAgent: typeof activeFormatter?.formatTbrAgent === 'function',
43
+ formatterKeys: activeFormatter ? Object.keys(activeFormatter) : [],
44
+ formatterPrototype: activeFormatter ? Object.getOwnPropertyNames(Object.getPrototypeOf(activeFormatter)) : []
45
+ });
46
+ if (!activeFormatter.formatTbrAgent || typeof activeFormatter.formatTbrAgent !== 'function') {
47
+ throw new Error(`Formatter ${activeFormatter?.constructor?.name || 'unknown'} does not have formatTbrAgent method`);
48
+ }
49
+ const formattedAgents = agents.map(agent => {
50
+ const formatted = activeFormatter.formatTbrAgent(agent);
51
+ // Debug: Log formatted agent content
52
+ this.context.logger.debug('[AgentService] Formatted agent:', {
53
+ name: agent.name,
54
+ filename: formatted.filename,
55
+ contentLength: formatted.content.length,
56
+ contentPreview: formatted.content.substring(0, 200),
57
+ fullContent: formatted.content
58
+ });
59
+ return formatted;
60
+ });
61
+ return formattedAgents;
62
+ }
63
+ catch (error) {
64
+ this.context.logger.error('[AgentService] Error formatting agents:', error);
65
+ throw error;
66
+ }
67
+ }
68
+ /**
69
+ * Install formatted agents to the filesystem
70
+ */
71
+ async installAgents(formattedAgents, formatter) {
72
+ const fs = await import('fs/promises');
73
+ const path = await import('path');
74
+ const activeFormatter = formatter || FormatterFactory.getFormatter(FormatterFactory.detectFormat());
75
+ // Get platform-specific agent directory at repo root
76
+ const repoRoot = getRepoRoot();
77
+ const agentsPath = path.join(repoRoot, activeFormatter.getAgentInstallPath());
78
+ this.context.logger.debug('[AgentService] Installing agents:', {
79
+ repoRoot,
80
+ agentsPath,
81
+ agentCount: formattedAgents.length
82
+ });
83
+ // Ensure agents directory exists
84
+ await fs.mkdir(agentsPath, { recursive: true });
85
+ // Install each agent
86
+ for (const agent of formattedAgents) {
87
+ const agentPath = path.join(agentsPath, agent.filename);
88
+ await fs.writeFile(agentPath, agent.content, 'utf-8');
89
+ this.context.logger.info(`Agent '${agent.filename}' installed to ${agentPath}`);
90
+ }
91
+ this.context.logger.info(`Installed ${formattedAgents.length} agents to ${agentsPath}`);
92
+ }
93
+ /**
94
+ * Install agents with version checking and overwrite strategy
95
+ */
96
+ async installAgentsWithVersionCheck(agents, options = {}) {
97
+ const fs = await import('fs/promises');
98
+ const path = await import('path');
99
+ const formatter = FormatterFactory.getFormatter(FormatterFactory.detectFormat());
100
+ const formattedAgents = this.formatAgents(agents, formatter);
101
+ const repoRoot = getRepoRoot();
102
+ const agentsPath = path.join(repoRoot, formatter.getAgentInstallPath());
103
+ const result = {
104
+ installed: [],
105
+ skipped: [],
106
+ updated: [],
107
+ errors: []
108
+ };
109
+ // Ensure agents directory exists
110
+ await fs.mkdir(agentsPath, { recursive: true });
111
+ // Get installed agents for version comparison
112
+ const installedAgents = await this.getInstalledAgents();
113
+ const installedMap = new Map(installedAgents.map(a => [a.name, a]));
114
+ for (const agent of formattedAgents) {
115
+ const agentPath = path.join(agentsPath, agent.filename);
116
+ const agentName = agent.filename.replace('.md', '');
117
+ try {
118
+ // Check if file exists
119
+ const fileExists = await fs.access(agentPath).then(() => true).catch(() => false);
120
+ if (!fileExists) {
121
+ // New agent - install it
122
+ await fs.writeFile(agentPath, agent.content, 'utf-8');
123
+ result.installed.push(agentName);
124
+ this.context.logger.info(`Installed new agent: ${agentName}`);
125
+ }
126
+ else {
127
+ // Existing agent - check strategy
128
+ const strategy = options.overwriteStrategy || 'version-check';
129
+ if (strategy === 'never') {
130
+ result.skipped.push(agentName);
131
+ this.context.logger.debug(`Skipped existing agent: ${agentName}`);
132
+ }
133
+ else if (strategy === 'always') {
134
+ if (options.backupExisting) {
135
+ const backupPath = `${agentPath}.backup.${Date.now()}`;
136
+ await fs.copyFile(agentPath, backupPath);
137
+ }
138
+ await fs.writeFile(agentPath, agent.content, 'utf-8');
139
+ result.updated.push(agentName);
140
+ this.context.logger.info(`Updated agent (forced): ${agentName}`);
141
+ }
142
+ else {
143
+ // version-check strategy
144
+ const installed = installedMap.get(agentName);
145
+ const newVersion = this.extractVersion(agent.content);
146
+ const installedVersion = installed?.version || '0.0.0';
147
+ if (semver.gt(newVersion, installedVersion)) {
148
+ if (options.backupExisting) {
149
+ const backupPath = `${agentPath}.backup.${Date.now()}`;
150
+ await fs.copyFile(agentPath, backupPath);
151
+ }
152
+ await fs.writeFile(agentPath, agent.content, 'utf-8');
153
+ result.updated.push(agentName);
154
+ this.context.logger.info(`Updated agent: ${agentName} (${installedVersion} -> ${newVersion})`);
155
+ }
156
+ else {
157
+ result.skipped.push(agentName);
158
+ this.context.logger.debug(`Skipped agent (same or newer version): ${agentName} (current: ${installedVersion})`);
159
+ }
160
+ }
161
+ }
162
+ }
163
+ catch (error) {
164
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
165
+ result.errors.push({ agent: agentName, error: errorMsg });
166
+ this.context.logger.error(`Failed to install agent ${agentName}:`, error);
167
+ }
168
+ }
169
+ return result;
170
+ }
171
+ /**
172
+ * Remove agents from disk
173
+ */
174
+ async removeAgents(agentNames) {
175
+ const result = { removed: [], errors: [] };
176
+ // Use LocalRequestContext for AgentInstallationService if available
177
+ if (!this.installationService && 'platformInfo' in this.context) {
178
+ this.installationService = new AgentInstallationService(this.context);
179
+ }
180
+ const fs = await import('fs/promises');
181
+ const path = await import('path');
182
+ const formatter = FormatterFactory.getFormatter(FormatterFactory.detectFormat());
183
+ const repoRoot = getRepoRoot();
184
+ const agentsPath = path.join(repoRoot, formatter.getAgentInstallPath());
185
+ for (const agentName of agentNames) {
186
+ try {
187
+ const agentFile = path.join(agentsPath, `${agentName}.md`);
188
+ // Check if agent exists
189
+ try {
190
+ await fs.access(agentFile);
191
+ }
192
+ catch {
193
+ result.errors.push(`Agent ${agentName} not found`);
194
+ continue;
195
+ }
196
+ // Remove the agent file
197
+ await fs.unlink(agentFile);
198
+ result.removed.push(agentName);
199
+ this.context.logger.info(`Removed agent: ${agentName}`);
200
+ }
201
+ catch (error) {
202
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
203
+ result.errors.push(`Failed to remove ${agentName}: ${errorMsg}`);
204
+ this.context.logger.error(`Failed to remove agent ${agentName}:`, error);
205
+ }
206
+ }
207
+ return result;
208
+ }
209
+ /**
210
+ * Get installed agents from disk
211
+ */
212
+ async getInstalledAgents() {
213
+ // Use LocalRequestContext for AgentInstallationService if available
214
+ if (!this.installationService && 'platformInfo' in this.context) {
215
+ this.installationService = new AgentInstallationService(this.context);
216
+ }
217
+ if (this.installationService) {
218
+ return await this.installationService.getInstalledAgents();
219
+ }
220
+ // Fallback: read agents directory directly
221
+ const fs = await import('fs/promises');
222
+ const path = await import('path');
223
+ const formatter = FormatterFactory.getFormatter(FormatterFactory.detectFormat());
224
+ const repoRoot = getRepoRoot();
225
+ const agentsPath = path.join(repoRoot, formatter.getAgentInstallPath());
226
+ try {
227
+ const files = await fs.readdir(agentsPath);
228
+ const agentFiles = files.filter(f => f.endsWith('.md'));
229
+ const agents = [];
230
+ for (const file of agentFiles) {
231
+ const content = await fs.readFile(path.join(agentsPath, file), 'utf-8');
232
+ const name = file.replace('.md', '');
233
+ const version = this.extractVersion(content);
234
+ agents.push({ name, version, lastUpdated: new Date().toISOString() });
235
+ }
236
+ return agents;
237
+ }
238
+ catch (error) {
239
+ if (error.code === 'ENOENT') {
240
+ return [];
241
+ }
242
+ throw error;
243
+ }
244
+ }
245
+ /**
246
+ * Extract version from agent content
247
+ */
248
+ extractVersion(content) {
249
+ const versionMatch = content.match(/<!-- Version: (.+?) -->/);
250
+ return versionMatch ? versionMatch[1] : '1.0.0';
251
+ }
252
+ /**
253
+ * Format and install agents in one operation
254
+ */
255
+ async formatAndInstallAgents(agents, formatter) {
256
+ const formattedAgents = this.formatAgents(agents, formatter);
257
+ await this.installAgents(formattedAgents, formatter);
258
+ return formattedAgents;
259
+ }
260
+ /**
261
+ * Get the default formatter
262
+ */
263
+ getDefaultFormatter() {
264
+ return FormatterFactory.getFormatter(FormatterFactory.detectFormat());
265
+ }
266
+ /**
267
+ * Detect formatter type from environment
268
+ */
269
+ detectFormatterType() {
270
+ return FormatterFactory.detectFormat();
271
+ }
272
+ }
273
+ //# sourceMappingURL=agent-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-service.js","sourceRoot":"","sources":["../../src/services/agent-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Repository Analysis Service
3
+ *
4
+ * Handles repository tech stack analysis.
5
+ * Focused solely on analysis - no context file management.
6
+ */
7
+ import type { RequestContext } from '../types/request-context.js';
8
+ import { type RepoAnalysis, type TechStackDiff } from '@magic-ingredients/tiny-brain-core';
9
+ export interface AnalyseOptions {
10
+ dryRun?: boolean;
11
+ contextPath?: string;
12
+ }
13
+ export interface AgentRecommendation {
14
+ name: string;
15
+ version: string;
16
+ description: string;
17
+ }
18
+ export interface AgentUpdateRecommendation {
19
+ name: string;
20
+ from: string;
21
+ to: string;
22
+ description?: string;
23
+ }
24
+ export interface AgentRemovalRecommendation {
25
+ name: string;
26
+ description?: string;
27
+ }
28
+ export interface AgentRecommendations {
29
+ install: AgentRecommendation[];
30
+ update: AgentUpdateRecommendation[];
31
+ remove: AgentRemovalRecommendation[];
32
+ }
33
+ export interface AnalyseResult {
34
+ analysis: RepoAnalysis;
35
+ isFirstAnalysis: boolean;
36
+ dryRun?: boolean;
37
+ contextPath: string;
38
+ currentAgents?: string[];
39
+ recommendations?: AgentRecommendations | null;
40
+ changes?: {
41
+ techStackAdded: string[];
42
+ techStackRemoved: string[];
43
+ agentsSuggestedNew: string[];
44
+ agentsSuggestedRemove: string[];
45
+ };
46
+ }
47
+ export interface AppliedRecommendationsSummary {
48
+ installed: string[];
49
+ updated: string[];
50
+ removed: string[];
51
+ errors: string[];
52
+ }
53
+ export interface UserSelections {
54
+ install: AgentRecommendation[];
55
+ update: AgentUpdateRecommendation[];
56
+ remove: AgentRemovalRecommendation[];
57
+ }
58
+ /**
59
+ * Service for managing repository analysis
60
+ * Handles orchestration for tech stack analysis
61
+ */
62
+ export declare class AnalyseService {
63
+ private context;
64
+ private repoService;
65
+ private libraryClient;
66
+ constructor(context: RequestContext);
67
+ /**
68
+ * Perform repository analysis with unified behavior for initialized/uninitialized repos
69
+ */
70
+ performAnalysis(options?: AnalyseOptions): Promise<AnalyseResult>;
71
+ /**
72
+ * Fetch agent recommendations from TBR based on repo analysis and current agents
73
+ */
74
+ private fetchRecommendationsFromTBR;
75
+ /**
76
+ * Format analysis output for display
77
+ */
78
+ formatAnalysisOutput(result: AnalyseResult): string;
79
+ /**
80
+ * Format recommendations section for output
81
+ */
82
+ private formatRecommendations;
83
+ /**
84
+ * Compare two tech stacks and return differences
85
+ * Handles null previous analysis (first run)
86
+ */
87
+ compareTechStacks(previousAnalysis: RepoAnalysis | null, currentAnalysis: RepoAnalysis): TechStackDiff;
88
+ /**
89
+ * Prompt user for selection of recommendations to apply
90
+ * Always requires user confirmation - defaults to 'all' but user must confirm
91
+ */
92
+ promptForSelection(recommendations: AgentRecommendations, promptFn?: (question: string, options?: {
93
+ default?: string;
94
+ choices?: string[];
95
+ }) => Promise<string>): Promise<UserSelections>;
96
+ }
97
+ //# sourceMappingURL=analyse-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyse-service.d.ts","sourceRoot":"","sources":["../../src/services/analyse-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,aAAa,EAEnB,MAAM,oCAAoC,CAAC;AAM5C,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,MAAM,EAAE,0BAA0B,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE;QACR,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,qBAAqB,EAAE,MAAM,EAAE,CAAC;KACjC,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,MAAM,EAAE,0BAA0B,EAAE,CAAC;CACtC;AAED;;;GAGG;AACH,qBAAa,cAAc;IAIb,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAgB;gBAEjB,OAAO,EAAE,cAAc;IAK3C;;OAEG;IACG,eAAe,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAkF3E;;OAEG;YACW,2BAA2B;IAyDzC;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM;IAgFnD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuC7B;;;OAGG;IACH,iBAAiB,CAAC,gBAAgB,EAAE,YAAY,GAAG,IAAI,EAAE,eAAe,EAAE,YAAY,GAAG,aAAa;IA8BtG;;;OAGG;IACG,kBAAkB,CACtB,eAAe,EAAE,oBAAoB,EACrC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GACnG,OAAO,CAAC,cAAc,CAAC;CAyE3B"}