@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.
- package/dist/agents/formatters/claude-code-formatter.d.ts +37 -0
- package/dist/agents/formatters/claude-code-formatter.d.ts.map +1 -0
- package/dist/agents/formatters/claude-code-formatter.js +217 -0
- package/dist/agents/formatters/claude-code-formatter.js.map +1 -0
- package/dist/agents/formatters/formatter-factory.d.ts +25 -0
- package/dist/agents/formatters/formatter-factory.d.ts.map +1 -0
- package/dist/agents/formatters/formatter-factory.js +61 -0
- package/dist/agents/formatters/formatter-factory.js.map +1 -0
- package/dist/agents/types.d.ts +68 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +12 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/analyser/analyzers/script-analyzer.d.ts +10 -0
- package/dist/analyser/analyzers/script-analyzer.d.ts.map +1 -0
- package/dist/analyser/analyzers/script-analyzer.js +205 -0
- package/dist/analyser/analyzers/script-analyzer.js.map +1 -0
- package/dist/analyser/detectors/base-detector.d.ts +12 -0
- package/dist/analyser/detectors/base-detector.d.ts.map +1 -0
- package/dist/analyser/detectors/base-detector.js +50 -0
- package/dist/analyser/detectors/base-detector.js.map +1 -0
- package/dist/analyser/detectors/javascript-detector.d.ts +19 -0
- package/dist/analyser/detectors/javascript-detector.d.ts.map +1 -0
- package/dist/analyser/detectors/javascript-detector.js +347 -0
- package/dist/analyser/detectors/javascript-detector.js.map +1 -0
- package/dist/analyser/index.d.ts +5 -0
- package/dist/analyser/index.d.ts.map +1 -0
- package/dist/analyser/index.js +315 -0
- package/dist/analyser/index.js.map +1 -0
- package/dist/analyser/types.d.ts +2 -0
- package/dist/analyser/types.d.ts.map +1 -0
- package/dist/analyser/types.js +2 -0
- package/dist/analyser/types.js.map +1 -0
- package/dist/analyser/utils.d.ts +5 -0
- package/dist/analyser/utils.d.ts.map +1 -0
- package/dist/analyser/utils.js +24 -0
- package/dist/analyser/utils.js.map +1 -0
- package/dist/cli/cli-factory.d.ts.map +1 -1
- package/dist/cli/cli-factory.js +17 -0
- package/dist/cli/cli-factory.js.map +1 -1
- package/dist/cli/commands/analyse.command.d.ts +7 -0
- package/dist/cli/commands/analyse.command.d.ts.map +1 -0
- package/dist/cli/commands/analyse.command.js +130 -0
- package/dist/cli/commands/analyse.command.js.map +1 -0
- package/dist/cli/commands/status.command.d.ts.map +1 -1
- package/dist/cli/commands/status.command.js +3 -1
- package/dist/cli/commands/status.command.js.map +1 -1
- package/dist/core/mcp-server.d.ts +10 -8
- package/dist/core/mcp-server.d.ts.map +1 -1
- package/dist/core/mcp-server.js +93 -85
- package/dist/core/mcp-server.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -8
- package/dist/index.js.map +1 -1
- package/dist/prompts/persona/persona.prompt.js +8 -8
- package/dist/prompts/persona/persona.prompt.js.map +1 -1
- package/dist/prompts/planning/planning.prompt.d.ts +0 -8
- package/dist/prompts/planning/planning.prompt.d.ts.map +1 -1
- package/dist/prompts/planning/planning.prompt.js +0 -175
- package/dist/prompts/planning/planning.prompt.js.map +1 -1
- package/dist/services/agent-installation-service.d.ts +101 -0
- package/dist/services/agent-installation-service.d.ts.map +1 -0
- package/dist/services/agent-installation-service.js +328 -0
- package/dist/services/agent-installation-service.js.map +1 -0
- package/dist/services/agent-manager.d.ts +45 -0
- package/dist/services/agent-manager.d.ts.map +1 -0
- package/dist/services/agent-manager.js +154 -0
- package/dist/services/agent-manager.js.map +1 -0
- package/dist/services/agent-service.d.ts +70 -0
- package/dist/services/agent-service.d.ts.map +1 -0
- package/dist/services/agent-service.js +273 -0
- package/dist/services/agent-service.js.map +1 -0
- package/dist/services/analyse-service.d.ts +97 -0
- package/dist/services/analyse-service.d.ts.map +1 -0
- package/dist/services/analyse-service.js +370 -0
- package/dist/services/analyse-service.js.map +1 -0
- package/dist/services/dashboard-launcher.service.d.ts +20 -0
- package/dist/services/dashboard-launcher.service.d.ts.map +1 -0
- package/dist/services/dashboard-launcher.service.js +30 -0
- package/dist/services/dashboard-launcher.service.js.map +1 -0
- package/dist/services/persona-enhancer.d.ts +52 -0
- package/dist/services/persona-enhancer.d.ts.map +1 -0
- package/dist/services/persona-enhancer.js +252 -0
- package/dist/services/persona-enhancer.js.map +1 -0
- package/dist/services/persona-grouper.d.ts +29 -0
- package/dist/services/persona-grouper.d.ts.map +1 -0
- package/dist/services/persona-grouper.js +111 -0
- package/dist/services/persona-grouper.js.map +1 -0
- package/dist/services/persona-service.d.ts +52 -0
- package/dist/services/persona-service.d.ts.map +1 -0
- package/dist/services/{enhanced-persona-service.js → persona-service.js} +125 -7
- package/dist/services/persona-service.js.map +1 -0
- package/dist/services/remote/auth-token-service.d.ts.map +1 -1
- package/dist/services/remote/auth-token-service.js +10 -3
- package/dist/services/remote/auth-token-service.js.map +1 -1
- package/dist/services/remote/system-persona-service.d.ts.map +1 -1
- package/dist/services/remote/system-persona-service.js +41 -10
- package/dist/services/remote/system-persona-service.js.map +1 -1
- package/dist/services/repo-service.d.ts +195 -0
- package/dist/services/repo-service.d.ts.map +1 -0
- package/dist/services/repo-service.js +1023 -0
- package/dist/services/repo-service.js.map +1 -0
- package/dist/services/types/persona-types.d.ts +84 -0
- package/dist/services/types/persona-types.d.ts.map +1 -0
- package/dist/services/types/persona-types.js +5 -0
- package/dist/services/types/persona-types.js.map +1 -0
- package/dist/services/versioning-service.d.ts +79 -0
- package/dist/services/versioning-service.d.ts.map +1 -0
- package/dist/services/versioning-service.js +191 -0
- package/dist/services/versioning-service.js.map +1 -0
- package/dist/storage/local-filesystem-adapter.d.ts +1 -0
- package/dist/storage/local-filesystem-adapter.d.ts.map +1 -1
- package/dist/storage/local-filesystem-adapter.js +47 -3
- package/dist/storage/local-filesystem-adapter.js.map +1 -1
- package/dist/storage/platform-config-adapter.d.ts +9 -0
- package/dist/storage/platform-config-adapter.d.ts.map +1 -1
- package/dist/storage/platform-config-adapter.js +55 -1
- package/dist/storage/platform-config-adapter.js.map +1 -1
- package/dist/tools/analyse.tool.d.ts +17 -0
- package/dist/tools/analyse.tool.d.ts.map +1 -0
- package/dist/tools/analyse.tool.js +124 -0
- package/dist/tools/analyse.tool.js.map +1 -0
- package/dist/tools/persona/as.tool.d.ts +32 -11
- package/dist/tools/persona/as.tool.d.ts.map +1 -1
- package/dist/tools/persona/as.tool.js +452 -317
- package/dist/tools/persona/as.tool.js.map +1 -1
- package/dist/tools/persona/persona.tool.js +2 -2
- package/dist/tools/persona/persona.tool.js.map +1 -1
- package/dist/tools/plan/plan.tool.d.ts +3 -3
- package/dist/tools/plan/plan.tool.d.ts.map +1 -1
- package/dist/tools/plan/plan.tool.js +78 -55
- package/dist/tools/plan/plan.tool.js.map +1 -1
- package/dist/tools/tool-registry.d.ts.map +1 -1
- package/dist/tools/tool-registry.js +4 -0
- package/dist/tools/tool-registry.js.map +1 -1
- package/dist/utils/repo-utils.d.ts +10 -0
- package/dist/utils/repo-utils.d.ts.map +1 -0
- package/dist/utils/repo-utils.js +55 -0
- package/dist/utils/repo-utils.js.map +1 -0
- package/package.json +6 -2
- package/dist/services/enhanced-persona-service.d.ts +0 -22
- package/dist/services/enhanced-persona-service.d.ts.map +0 -1
- package/dist/services/enhanced-persona-service.js.map +0 -1
- package/dist/services/plan-watcher.service.d.ts +0 -141
- package/dist/services/plan-watcher.service.d.ts.map +0 -1
- package/dist/services/plan-watcher.service.js +0 -1010
- 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"}
|