activo 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +203 -1
- package/data/2026-03-04_20-54.json +181 -0
- package/data/2026-03-04_20-56.json +181 -0
- package/data/apex-rulesets/egov.yaml +469 -0
- package/data/apex-rulesets/modernize.yaml +687 -0
- package/data/apex-rulesets/quality.yaml +1677 -0
- package/data/apex-rulesets/rule-schema.yaml +587 -0
- package/data/apex-rulesets/secure.yaml +1688 -0
- package/data/apex-rulesets/spring.yaml +455 -0
- package/data/apex-rulesets/sql-format.yaml +99 -0
- package/data/apex-rulesets/sql-oracle.yaml +281 -0
- package/data/apex-rulesets/sql.yaml +1660 -0
- package/dist/cli/headless.d.ts.map +1 -1
- package/dist/cli/headless.js +32 -10
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/index.js +31 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/core/agent.d.ts +3 -3
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +255 -17
- package/dist/core/agent.js.map +1 -1
- package/dist/core/commands.d.ts +2 -1
- package/dist/core/commands.d.ts.map +1 -1
- package/dist/core/commands.js +61 -9
- package/dist/core/commands.js.map +1 -1
- package/dist/core/config.d.ts +14 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +41 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/conversation.d.ts +2 -2
- package/dist/core/conversation.d.ts.map +1 -1
- package/dist/core/conversation.js.map +1 -1
- package/dist/core/intentRouter.d.ts +43 -0
- package/dist/core/intentRouter.d.ts.map +1 -0
- package/dist/core/intentRouter.js +804 -0
- package/dist/core/intentRouter.js.map +1 -0
- package/dist/core/llm/anthropic.d.ts +24 -0
- package/dist/core/llm/anthropic.d.ts.map +1 -0
- package/dist/core/llm/anthropic.js +226 -0
- package/dist/core/llm/anthropic.js.map +1 -0
- package/dist/core/llm/ollama.d.ts +5 -14
- package/dist/core/llm/ollama.d.ts.map +1 -1
- package/dist/core/llm/ollama.js +3 -0
- package/dist/core/llm/ollama.js.map +1 -1
- package/dist/core/llm/types.d.ts +22 -0
- package/dist/core/llm/types.d.ts.map +1 -0
- package/dist/core/llm/types.js +2 -0
- package/dist/core/llm/types.js.map +1 -0
- package/dist/core/mcp/client.d.ts +6 -0
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/client.js +16 -0
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/init.d.ts +12 -0
- package/dist/core/mcp/init.d.ts.map +1 -0
- package/dist/core/mcp/init.js +55 -0
- package/dist/core/mcp/init.js.map +1 -0
- package/dist/core/mcp/logger.d.ts +14 -0
- package/dist/core/mcp/logger.d.ts.map +1 -0
- package/dist/core/mcp/logger.js +50 -0
- package/dist/core/mcp/logger.js.map +1 -0
- package/dist/core/tools/analyzeAll.d.ts.map +1 -1
- package/dist/core/tools/analyzeAll.js +16 -28
- package/dist/core/tools/analyzeAll.js.map +1 -1
- package/dist/core/tools/analyzePatterns.d.ts +3 -0
- package/dist/core/tools/analyzePatterns.d.ts.map +1 -0
- package/dist/core/tools/analyzePatterns.js +293 -0
- package/dist/core/tools/analyzePatterns.js.map +1 -0
- package/dist/core/tools/apexPaths.d.ts +14 -0
- package/dist/core/tools/apexPaths.d.ts.map +1 -0
- package/dist/core/tools/apexPaths.js +54 -0
- package/dist/core/tools/apexPaths.js.map +1 -0
- package/dist/core/tools/apexUtils.d.ts +36 -0
- package/dist/core/tools/apexUtils.d.ts.map +1 -0
- package/dist/core/tools/apexUtils.js +83 -0
- package/dist/core/tools/apexUtils.js.map +1 -0
- package/dist/core/tools/explainIssue.d.ts +3 -0
- package/dist/core/tools/explainIssue.d.ts.map +1 -0
- package/dist/core/tools/explainIssue.js +181 -0
- package/dist/core/tools/explainIssue.js.map +1 -0
- package/dist/core/tools/fixGen.d.ts +3 -0
- package/dist/core/tools/fixGen.d.ts.map +1 -0
- package/dist/core/tools/fixGen.js +338 -0
- package/dist/core/tools/fixGen.js.map +1 -0
- package/dist/core/tools/generateImprovements.d.ts +21 -0
- package/dist/core/tools/generateImprovements.d.ts.map +1 -0
- package/dist/core/tools/generateImprovements.js +602 -0
- package/dist/core/tools/generateImprovements.js.map +1 -0
- package/dist/core/tools/generateReport.d.ts +3 -0
- package/dist/core/tools/generateReport.d.ts.map +1 -0
- package/dist/core/tools/generateReport.js +315 -0
- package/dist/core/tools/generateReport.js.map +1 -0
- package/dist/core/tools/index.d.ts +7 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +62 -23
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/javaAst.d.ts.map +1 -1
- package/dist/core/tools/javaAst.js +191 -0
- package/dist/core/tools/javaAst.js.map +1 -1
- package/dist/core/tools/recommendProfile.d.ts +3 -0
- package/dist/core/tools/recommendProfile.d.ts.map +1 -0
- package/dist/core/tools/recommendProfile.js +334 -0
- package/dist/core/tools/recommendProfile.js.map +1 -0
- package/dist/core/tools/ruleGen.d.ts +3 -0
- package/dist/core/tools/ruleGen.d.ts.map +1 -0
- package/dist/core/tools/ruleGen.js +1103 -0
- package/dist/core/tools/ruleGen.js.map +1 -0
- package/dist/core/tools/standards.d.ts.map +1 -1
- package/dist/core/tools/standards.js +7 -3
- package/dist/core/tools/standards.js.map +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +86 -35
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/InputBox.d.ts +1 -3
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +146 -5
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/MessageList.d.ts +3 -1
- package/dist/ui/components/MessageList.d.ts.map +1 -1
- package/dist/ui/components/MessageList.js +13 -7
- package/dist/ui/components/MessageList.js.map +1 -1
- package/dist/ui/components/StatusBar.d.ts +1 -1
- package/dist/ui/components/StatusBar.d.ts.map +1 -1
- package/dist/ui/components/StatusBar.js +3 -2
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/ToolStatus.d.ts +3 -1
- package/dist/ui/components/ToolStatus.d.ts.map +1 -1
- package/dist/ui/components/ToolStatus.js +19 -4
- package/dist/ui/components/ToolStatus.js.map +1 -1
- package/package.json +7 -1
- package/demo.gif +0 -0
- package/demo.tape +0 -53
- package/screenshot.png +0 -0
- package/src/cli/banner.ts +0 -38
- package/src/cli/headless.ts +0 -63
- package/src/cli/index.ts +0 -57
- package/src/core/agent.ts +0 -237
- package/src/core/commands.ts +0 -118
- package/src/core/config.ts +0 -98
- package/src/core/conversation.ts +0 -235
- package/src/core/llm/ollama.ts +0 -351
- package/src/core/mcp/client.ts +0 -143
- package/src/core/tools/analyzeAll.ts +0 -494
- package/src/core/tools/ast.ts +0 -826
- package/src/core/tools/builtIn.ts +0 -221
- package/src/core/tools/cache.ts +0 -570
- package/src/core/tools/cssAnalysis.ts +0 -324
- package/src/core/tools/dependencyAnalysis.ts +0 -363
- package/src/core/tools/embeddings.ts +0 -746
- package/src/core/tools/frontendAst.ts +0 -802
- package/src/core/tools/htmlAnalysis.ts +0 -466
- package/src/core/tools/index.ts +0 -160
- package/src/core/tools/javaAst.ts +0 -812
- package/src/core/tools/memory.ts +0 -655
- package/src/core/tools/mybatisAnalysis.ts +0 -322
- package/src/core/tools/openapiAnalysis.ts +0 -431
- package/src/core/tools/pythonAnalysis.ts +0 -477
- package/src/core/tools/sqlAnalysis.ts +0 -298
- package/src/core/tools/standards.test.ts +0 -186
- package/src/core/tools/standards.ts +0 -889
- package/src/core/tools/types.ts +0 -38
- package/src/ui/App.tsx +0 -334
- package/src/ui/components/InputBox.tsx +0 -37
- package/src/ui/components/MessageList.tsx +0 -80
- package/src/ui/components/StatusBar.tsx +0 -36
- package/src/ui/components/ToolStatus.tsx +0 -38
- package/tsconfig.json +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../../src/cli/headless.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../../src/cli/headless.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAiB3C,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE3F"}
|
package/dist/cli/headless.js
CHANGED
|
@@ -1,29 +1,47 @@
|
|
|
1
1
|
import { OllamaClient } from "../core/llm/ollama.js";
|
|
2
|
+
import { AnthropicClient } from "../core/llm/anthropic.js";
|
|
2
3
|
import { processMessage } from "../core/agent.js";
|
|
4
|
+
import { initMCPServers, shutdownMCPServers } from "../core/mcp/init.js";
|
|
3
5
|
import chalk from "chalk";
|
|
4
6
|
import { createSession, saveSession, getSessionContext, cleanOldSessions, } from "../core/conversation.js";
|
|
7
|
+
function createClient(config) {
|
|
8
|
+
if (config.provider === "anthropic") {
|
|
9
|
+
return new AnthropicClient(config.anthropic);
|
|
10
|
+
}
|
|
11
|
+
return new OllamaClient(config.ollama);
|
|
12
|
+
}
|
|
5
13
|
export async function runHeadless(prompt, config) {
|
|
6
14
|
if (!prompt) {
|
|
7
15
|
console.error(chalk.red("Error: Prompt is required in headless mode"));
|
|
8
16
|
console.error(chalk.yellow("Usage: activo -p \"your prompt here\""));
|
|
9
17
|
process.exit(1);
|
|
10
18
|
}
|
|
11
|
-
const client =
|
|
19
|
+
const client = createClient(config);
|
|
20
|
+
// Initialize MCP servers (non-fatal)
|
|
21
|
+
await initMCPServers(config);
|
|
12
22
|
// Check connection
|
|
13
23
|
const isConnected = await client.isConnected();
|
|
14
24
|
if (!isConnected) {
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
if (config.provider === "anthropic") {
|
|
26
|
+
console.error(chalk.red("Error: Cannot connect to Anthropic API"));
|
|
27
|
+
console.error(chalk.yellow("Check ANTHROPIC_API_KEY environment variable or config.json"));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.error(chalk.red("Error: Cannot connect to Ollama"));
|
|
31
|
+
console.error(chalk.yellow(`Make sure Ollama is running at ${config.ollama.baseUrl}`));
|
|
32
|
+
}
|
|
17
33
|
process.exit(1);
|
|
18
34
|
}
|
|
19
|
-
// Load previous context
|
|
35
|
+
// Load previous context (only for Ollama — Anthropic doesn't support embed for context summarization)
|
|
20
36
|
let contextSummary = "";
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
37
|
+
if (config.provider === "ollama") {
|
|
38
|
+
try {
|
|
39
|
+
const { summary } = await getSessionContext(client, 5);
|
|
40
|
+
contextSummary = summary;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Ignore context loading errors
|
|
44
|
+
}
|
|
27
45
|
}
|
|
28
46
|
// Create new session
|
|
29
47
|
const session = createSession();
|
|
@@ -46,7 +64,11 @@ export async function runHeadless(prompt, config) {
|
|
|
46
64
|
}
|
|
47
65
|
catch (error) {
|
|
48
66
|
console.error(chalk.red(`Error: ${error}`));
|
|
67
|
+
await shutdownMCPServers();
|
|
49
68
|
process.exit(1);
|
|
50
69
|
}
|
|
70
|
+
finally {
|
|
71
|
+
await shutdownMCPServers();
|
|
72
|
+
}
|
|
51
73
|
}
|
|
52
74
|
//# sourceMappingURL=headless.js.map
|
package/dist/cli/headless.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/cli/headless.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAA0B,EAAE,MAAc;IAC1E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/cli/headless.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -17,15 +17,40 @@ program
|
|
|
17
17
|
.option("-p, --print", "Non-interactive mode (print and exit)")
|
|
18
18
|
.option("--headless", "Headless mode for CI/CD")
|
|
19
19
|
.option("--resume", "Resume from last session")
|
|
20
|
-
.option("--model <model>", "Specify
|
|
20
|
+
.option("--model <model>", "Specify model (e.g., qwen2.5:7b, anthropic:claude-sonnet-4-20250514)")
|
|
21
|
+
.option("--provider <provider>", "LLM provider: ollama or anthropic")
|
|
21
22
|
.argument("[prompt]", "Initial prompt")
|
|
22
23
|
.action(async (prompt, options) => {
|
|
23
24
|
// Show ASCII banner
|
|
24
25
|
showBanner();
|
|
25
26
|
// Load config
|
|
26
27
|
const config = loadConfig();
|
|
28
|
+
// --provider flag
|
|
29
|
+
if (options.provider) {
|
|
30
|
+
if (options.provider === "ollama" || options.provider === "anthropic") {
|
|
31
|
+
config.provider = options.provider;
|
|
32
|
+
// Propagate to tool handlers via env (they call loadConfig() independently)
|
|
33
|
+
process.env.ACTIVO_PROVIDER = options.provider;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// --model flag with provider:model parsing
|
|
27
37
|
if (options.model) {
|
|
28
|
-
|
|
38
|
+
const modelInput = options.model;
|
|
39
|
+
if (modelInput.startsWith("anthropic:")) {
|
|
40
|
+
config.provider = "anthropic";
|
|
41
|
+
config.anthropic.model = modelInput.slice("anthropic:".length);
|
|
42
|
+
}
|
|
43
|
+
else if (modelInput.startsWith("ollama:")) {
|
|
44
|
+
config.provider = "ollama";
|
|
45
|
+
config.ollama.model = modelInput.slice("ollama:".length);
|
|
46
|
+
}
|
|
47
|
+
else if (modelInput.startsWith("claude-") || modelInput.startsWith("claude3")) {
|
|
48
|
+
config.provider = "anthropic";
|
|
49
|
+
config.anthropic.model = modelInput;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
config.ollama.model = modelInput;
|
|
53
|
+
}
|
|
29
54
|
}
|
|
30
55
|
// Headless/print mode
|
|
31
56
|
if (options.print || options.headless) {
|
|
@@ -38,7 +63,10 @@ program
|
|
|
38
63
|
initialPrompt: prompt,
|
|
39
64
|
config,
|
|
40
65
|
resume: options.resume,
|
|
41
|
-
})
|
|
66
|
+
}), {
|
|
67
|
+
exitOnCtrlC: false,
|
|
68
|
+
incrementalRendering: true,
|
|
69
|
+
});
|
|
42
70
|
await waitUntilExit();
|
|
43
71
|
});
|
|
44
72
|
program.parse();
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE1C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC,CAAC;AAEnE,OAAO;KACJ,MAAM,CAAC,aAAa,EAAE,uCAAuC,CAAC;KAC9D,MAAM,CAAC,YAAY,EAAE,yBAAyB,CAAC;KAC/C,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;KAC9C,MAAM,CAAC,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/agent.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { LLMClient, ChatMessage } from "./llm/types.js";
|
|
2
2
|
import { Config } from "./config.js";
|
|
3
3
|
import { ToolResult } from "./tools/index.js";
|
|
4
4
|
export interface AgentEvent {
|
|
@@ -18,6 +18,6 @@ export interface AgentResult {
|
|
|
18
18
|
result: ToolResult;
|
|
19
19
|
}>;
|
|
20
20
|
}
|
|
21
|
-
export declare function processMessage(userMessage: string, history: ChatMessage[], client:
|
|
22
|
-
export declare function streamProcessMessage(userMessage: string, history: ChatMessage[], client:
|
|
21
|
+
export declare function processMessage(userMessage: string, history: ChatMessage[], client: LLMClient, config: Config, onEvent?: (event: AgentEvent) => void, contextSummary?: string): Promise<AgentResult>;
|
|
22
|
+
export declare function streamProcessMessage(userMessage: string, history: ChatMessage[], client: LLMClient, config: Config, abortSignal?: AbortSignal, contextSummary?: string): AsyncGenerator<AgentEvent>;
|
|
23
23
|
//# sourceMappingURL=agent.d.ts.map
|
package/dist/core/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAsC,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AAGxF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,EAAE,UAAU,CAAC;KACpB,CAAC,CAAC;CACJ;AAoDD,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACrC,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,WAAW,CAAC,CAmKtB;AAED,wBAAuB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,EACzB,cAAc,CAAC,EAAE,MAAM,GACtB,cAAc,CAAC,UAAU,CAAC,CA+O5B"}
|
package/dist/core/agent.js
CHANGED
|
@@ -1,11 +1,34 @@
|
|
|
1
1
|
import { selectTools, executeTool } from "./tools/index.js";
|
|
2
|
+
import { detectAndExecuteIntent, compressAnalysisResult } from "./intentRouter.js";
|
|
3
|
+
// Extract a unique signature from a tool call for loop detection
|
|
4
|
+
function toolSignature(tc) {
|
|
5
|
+
// 모든 인자를 포함하여 false positive 방지
|
|
6
|
+
// (같은 도구를 다른 profile/pattern/args으로 호출하는 것은 반복이 아님)
|
|
7
|
+
const sortedArgs = Object.keys(tc.arguments)
|
|
8
|
+
.sort()
|
|
9
|
+
.map((key) => `${key}=${String(tc.arguments[key])}`)
|
|
10
|
+
.join(",");
|
|
11
|
+
return `${tc.name}:${sortedArgs}`;
|
|
12
|
+
}
|
|
2
13
|
const BASE_SYSTEM_PROMPT = `You are ACTIVO, a code quality analyzer. You MUST call tools to perform tasks.
|
|
3
14
|
|
|
4
15
|
## RULES
|
|
5
16
|
1. Call tool IMMEDIATELY when user requests an action
|
|
6
17
|
2. NEVER fabricate results - only report actual tool output
|
|
7
18
|
3. After tool returns, summarize in user's language (Korean if user speaks Korean)
|
|
8
|
-
4. Use analyze_all for broad code analysis
|
|
19
|
+
4. Use analyze_all for broad code analysis
|
|
20
|
+
5. When all tools have completed, STOP calling tools and provide a final summary
|
|
21
|
+
|
|
22
|
+
## WORKFLOWS
|
|
23
|
+
- PDF→규칙: import_pdf_standards → generate_apex_rules (do NOT read_file individually)
|
|
24
|
+
- 코드분석: recommend_profile → mcp_apex_analyze_code → analyze_patterns
|
|
25
|
+
- 리포트: mcp_apex_analyze_code → generate_report (Excel 자동 포함)
|
|
26
|
+
- 엑셀출력: mcp_apex_analyze_code → mcp_apex_export_excel (analyze_code 후 즉시 엑셀 생성 가능)
|
|
27
|
+
- 전체보고서: mcp_apex_analyze_code → generate_report → generate_improvement_report`;
|
|
28
|
+
// System prompt for summary-only mode (no tool calling)
|
|
29
|
+
const SUMMARY_SYSTEM_PROMPT = `You are ACTIVO, a code quality analyzer.
|
|
30
|
+
You are summarizing tool results. Do NOT call any tools. Do NOT output XML or tool_use tags.
|
|
31
|
+
Just provide a clear, helpful summary in the user's language (Korean if user speaks Korean).`;
|
|
9
32
|
// Build system prompt with optional context
|
|
10
33
|
function buildSystemPrompt(contextSummary) {
|
|
11
34
|
if (!contextSummary) {
|
|
@@ -20,7 +43,28 @@ ${contextSummary}
|
|
|
20
43
|
---
|
|
21
44
|
위 내용은 이전 세션에서의 대화 요약입니다. 필요시 참고하세요.`;
|
|
22
45
|
}
|
|
46
|
+
// ─── Main processing functions ───
|
|
23
47
|
export async function processMessage(userMessage, history, client, config, onEvent, contextSummary) {
|
|
48
|
+
// Try intent router first
|
|
49
|
+
const intent = await detectAndExecuteIntent(userMessage, onEvent);
|
|
50
|
+
if (intent.handled && intent.summaryPrompt) {
|
|
51
|
+
// Tool already executed → ask LLM to summarize only (no tools = VRAM savings)
|
|
52
|
+
onEvent?.({ type: "thinking" });
|
|
53
|
+
const summaryMessages = [
|
|
54
|
+
{ role: "system", content: SUMMARY_SYSTEM_PROMPT },
|
|
55
|
+
{ role: "user", content: intent.summaryPrompt },
|
|
56
|
+
];
|
|
57
|
+
const response = await client.chat(summaryMessages); // No tools!
|
|
58
|
+
onEvent?.({ type: "content", content: response.content });
|
|
59
|
+
onEvent?.({ type: "done" });
|
|
60
|
+
return {
|
|
61
|
+
content: response.content,
|
|
62
|
+
toolCalls: intent.toolResult
|
|
63
|
+
? [{ tool: intent.toolName, args: intent.toolArgs, result: intent.toolResult }]
|
|
64
|
+
: [],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Fallback: existing LLM-driven tool selection
|
|
24
68
|
const tools = selectTools(userMessage);
|
|
25
69
|
const systemPrompt = buildSystemPrompt(contextSummary);
|
|
26
70
|
const messages = [
|
|
@@ -31,17 +75,51 @@ export async function processMessage(userMessage, history, client, config, onEve
|
|
|
31
75
|
const toolCallResults = [];
|
|
32
76
|
let finalContent = "";
|
|
33
77
|
let iterations = 0;
|
|
34
|
-
const maxIterations =
|
|
78
|
+
const maxIterations = 30;
|
|
79
|
+
const recentSignatures = [];
|
|
35
80
|
while (iterations < maxIterations) {
|
|
36
81
|
iterations++;
|
|
37
82
|
onEvent?.({ type: "thinking" });
|
|
38
83
|
const response = await client.chat(messages, tools);
|
|
39
84
|
messages.push(response);
|
|
40
|
-
// If no tool calls, we're done
|
|
85
|
+
// If no tool calls, we're done — but check if final answer is empty
|
|
41
86
|
if (!response.toolCalls?.length) {
|
|
42
87
|
finalContent = response.content;
|
|
88
|
+
// 도구를 실행했는데 최종 응답이 비어있으면 → LLM에게 요약 강제 요청
|
|
89
|
+
if (!finalContent && toolCallResults.length > 0) {
|
|
90
|
+
messages.push({
|
|
91
|
+
role: "user",
|
|
92
|
+
content: "도구 실행이 완료되었습니다. 결과를 요약하고, 생성된 파일이 있다면 경로를 알려주세요.",
|
|
93
|
+
});
|
|
94
|
+
try {
|
|
95
|
+
const summaryResponse = await client.chat(messages); // No tools
|
|
96
|
+
finalContent = summaryResponse.content;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
finalContent = toolCallResults
|
|
100
|
+
.map((tc) => `- ${tc.tool}(${Object.values(tc.args)[0] || ""}): ${tc.result.success ? "✓" : "✗"}`)
|
|
101
|
+
.join("\n");
|
|
102
|
+
finalContent = `수행된 작업:\n${finalContent}`;
|
|
103
|
+
}
|
|
104
|
+
onEvent?.({ type: "content", content: finalContent });
|
|
105
|
+
}
|
|
43
106
|
break;
|
|
44
107
|
}
|
|
108
|
+
// Detect true loops: same tool + same args 3+ times consecutively
|
|
109
|
+
for (const tc of response.toolCalls) {
|
|
110
|
+
recentSignatures.push(toolSignature(tc));
|
|
111
|
+
}
|
|
112
|
+
if (recentSignatures.length >= 3) {
|
|
113
|
+
const last3 = recentSignatures.slice(-3);
|
|
114
|
+
if (last3.every((s) => s === last3[0])) {
|
|
115
|
+
const toolSummary = toolCallResults
|
|
116
|
+
.map((tc) => `- ${tc.tool}(${Object.values(tc.args)[0] || ""}): ${tc.result.success ? "✓" : "✗"}`)
|
|
117
|
+
.join("\n");
|
|
118
|
+
finalContent = `동일한 작업이 반복되어 중단합니다.\n\n수행된 작업:\n${toolSummary}`;
|
|
119
|
+
onEvent?.({ type: "content", content: finalContent });
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
45
123
|
// Process tool calls
|
|
46
124
|
for (const toolCall of response.toolCalls) {
|
|
47
125
|
onEvent?.({
|
|
@@ -62,18 +140,45 @@ export async function processMessage(userMessage, history, client, config, onEve
|
|
|
62
140
|
args: toolCall.arguments,
|
|
63
141
|
result,
|
|
64
142
|
});
|
|
65
|
-
// Add tool result to messages
|
|
143
|
+
// Add tool result to messages (compressed to avoid context overflow)
|
|
144
|
+
const toolContent = result.success
|
|
145
|
+
? compressAnalysisResult(result.content, 8000)
|
|
146
|
+
: `Error: ${result.error}`;
|
|
66
147
|
messages.push({
|
|
67
148
|
role: "tool",
|
|
68
|
-
content:
|
|
149
|
+
content: toolContent,
|
|
69
150
|
toolCallId: toolCall.id,
|
|
70
151
|
});
|
|
71
152
|
}
|
|
72
153
|
// Continue the conversation with tool results
|
|
73
154
|
onEvent?.({ type: "content", content: response.content });
|
|
74
155
|
}
|
|
156
|
+
// 도구는 실행됐지만 최종 content가 비어있는 경우 → 요약 표시
|
|
157
|
+
if (!finalContent && toolCallResults.length > 0 && iterations < maxIterations) {
|
|
158
|
+
finalContent = toolCallResults
|
|
159
|
+
.map((tc) => `- ${tc.tool}(${Object.values(tc.args)[0] || ""}): ${tc.result.success ? "✓" : "✗"}`)
|
|
160
|
+
.join("\n");
|
|
161
|
+
finalContent = `수행된 작업:\n${finalContent}`;
|
|
162
|
+
onEvent?.({ type: "content", content: finalContent });
|
|
163
|
+
}
|
|
75
164
|
if (iterations >= maxIterations) {
|
|
76
|
-
|
|
165
|
+
// Force LLM to generate final answer without tools
|
|
166
|
+
messages.push({
|
|
167
|
+
role: "user",
|
|
168
|
+
content: "지금까지 수행된 작업 결과를 바탕으로 최종 답변을 작성해주세요. 더 이상 도구를 호출하지 마세요.",
|
|
169
|
+
});
|
|
170
|
+
try {
|
|
171
|
+
const finalResponse = await client.chat(messages); // No tools!
|
|
172
|
+
finalContent = finalResponse.content;
|
|
173
|
+
onEvent?.({ type: "content", content: finalContent });
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
const toolSummary = toolCallResults
|
|
177
|
+
.map((tc) => `- ${tc.tool}(${Object.values(tc.args)[0] || ""}): ${tc.result.success ? "✓" : "✗"}`)
|
|
178
|
+
.join("\n");
|
|
179
|
+
finalContent = `작업이 최대 반복 횟수에 도달했습니다.\n\n수행된 작업:\n${toolSummary}`;
|
|
180
|
+
onEvent?.({ type: "content", content: finalContent });
|
|
181
|
+
}
|
|
77
182
|
}
|
|
78
183
|
onEvent?.({ type: "done" });
|
|
79
184
|
return {
|
|
@@ -82,6 +187,45 @@ export async function processMessage(userMessage, history, client, config, onEve
|
|
|
82
187
|
};
|
|
83
188
|
}
|
|
84
189
|
export async function* streamProcessMessage(userMessage, history, client, config, abortSignal, contextSummary) {
|
|
190
|
+
// Try intent router first — collect events from pipeline for later emission
|
|
191
|
+
const collectedEvents = [];
|
|
192
|
+
const intent = await detectAndExecuteIntent(userMessage, (event) => {
|
|
193
|
+
collectedEvents.push(event);
|
|
194
|
+
});
|
|
195
|
+
if (intent.handled) {
|
|
196
|
+
// Emit all events that happened during intent detection (pipeline steps)
|
|
197
|
+
for (const event of collectedEvents) {
|
|
198
|
+
yield event;
|
|
199
|
+
}
|
|
200
|
+
if (intent.summaryPrompt) {
|
|
201
|
+
if (abortSignal?.aborted) {
|
|
202
|
+
yield { type: "error", error: "Operation cancelled" };
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
yield { type: "thinking" };
|
|
206
|
+
// Stream the LLM summary (no tools = streaming mode in ollama client)
|
|
207
|
+
const summaryMessages = [
|
|
208
|
+
{ role: "system", content: SUMMARY_SYSTEM_PROMPT },
|
|
209
|
+
{ role: "user", content: intent.summaryPrompt },
|
|
210
|
+
];
|
|
211
|
+
for await (const event of client.streamChat(summaryMessages, undefined, abortSignal)) {
|
|
212
|
+
if (abortSignal?.aborted) {
|
|
213
|
+
yield { type: "error", error: "Operation cancelled" };
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (event.type === "content" && event.content) {
|
|
217
|
+
yield { type: "content", content: event.content };
|
|
218
|
+
}
|
|
219
|
+
else if (event.type === "error") {
|
|
220
|
+
yield { type: "error", error: event.error };
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
yield { type: "done" };
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
// Fallback: existing LLM-driven tool selection
|
|
85
229
|
const tools = selectTools(userMessage);
|
|
86
230
|
const systemPrompt = buildSystemPrompt(contextSummary);
|
|
87
231
|
const messages = [
|
|
@@ -90,7 +234,10 @@ export async function* streamProcessMessage(userMessage, history, client, config
|
|
|
90
234
|
{ role: "user", content: userMessage },
|
|
91
235
|
];
|
|
92
236
|
let iterations = 0;
|
|
93
|
-
const maxIterations =
|
|
237
|
+
const maxIterations = 30;
|
|
238
|
+
const recentSignatures = [];
|
|
239
|
+
const completedToolCalls = [];
|
|
240
|
+
let contentYielded = false;
|
|
94
241
|
while (iterations < maxIterations) {
|
|
95
242
|
// Check if aborted
|
|
96
243
|
if (abortSignal?.aborted) {
|
|
@@ -109,7 +256,6 @@ export async function* streamProcessMessage(userMessage, history, client, config
|
|
|
109
256
|
}
|
|
110
257
|
if (event.type === "content" && event.content) {
|
|
111
258
|
fullContent += event.content;
|
|
112
|
-
// Don't yield content yet - wait to see if there are tool calls
|
|
113
259
|
}
|
|
114
260
|
else if (event.type === "tool_call" && event.toolCall) {
|
|
115
261
|
pendingToolCalls.push(event.toolCall);
|
|
@@ -119,19 +265,67 @@ export async function* streamProcessMessage(userMessage, history, client, config
|
|
|
119
265
|
return;
|
|
120
266
|
}
|
|
121
267
|
}
|
|
122
|
-
//
|
|
123
|
-
if (
|
|
268
|
+
// content가 있으면 항상 yield (tool call 유무 무관)
|
|
269
|
+
if (fullContent) {
|
|
124
270
|
yield { type: "content", content: fullContent };
|
|
271
|
+
contentYielded = true;
|
|
125
272
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
273
|
+
// message history에 content 항상 보존
|
|
274
|
+
messages.push({
|
|
275
|
+
role: "assistant",
|
|
276
|
+
content: fullContent,
|
|
277
|
+
toolCalls: pendingToolCalls.length > 0 ? pendingToolCalls : undefined,
|
|
278
|
+
});
|
|
279
|
+
// If no tool calls, we're done — but check if final answer is empty
|
|
132
280
|
if (pendingToolCalls.length === 0) {
|
|
281
|
+
// 도구를 실행했는데 최종 응답이 비어있으면 → LLM에게 요약 강제 요청
|
|
282
|
+
if (!fullContent && completedToolCalls.length > 0) {
|
|
283
|
+
let summaryYielded = false;
|
|
284
|
+
messages.push({
|
|
285
|
+
role: "user",
|
|
286
|
+
content: "도구 실행이 완료되었습니다. 결과를 요약하고, 생성된 파일이 있다면 경로를 알려주세요.",
|
|
287
|
+
});
|
|
288
|
+
try {
|
|
289
|
+
for await (const event of client.streamChat(messages, undefined, abortSignal)) {
|
|
290
|
+
if (abortSignal?.aborted)
|
|
291
|
+
break;
|
|
292
|
+
if (event.type === "content" && event.content) {
|
|
293
|
+
yield { type: "content", content: event.content };
|
|
294
|
+
summaryYielded = true;
|
|
295
|
+
contentYielded = true;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
// API 에러 시 fallback
|
|
301
|
+
}
|
|
302
|
+
if (!summaryYielded) {
|
|
303
|
+
const toolSummary = completedToolCalls
|
|
304
|
+
.map((tc) => `- ${tc.tool}(${Object.values(tc.args)[0] || ""}): ${tc.success ? "✓" : "✗"}`)
|
|
305
|
+
.join("\n");
|
|
306
|
+
yield { type: "content", content: `수행된 작업:\n${toolSummary}` };
|
|
307
|
+
contentYielded = true;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
133
310
|
break;
|
|
134
311
|
}
|
|
312
|
+
// Detect true loops: same tool + same args 3+ times consecutively
|
|
313
|
+
for (const tc of pendingToolCalls) {
|
|
314
|
+
recentSignatures.push(toolSignature(tc));
|
|
315
|
+
}
|
|
316
|
+
if (recentSignatures.length >= 3) {
|
|
317
|
+
const last3 = recentSignatures.slice(-3);
|
|
318
|
+
if (last3.every((s) => s === last3[0])) {
|
|
319
|
+
const toolSummary = completedToolCalls
|
|
320
|
+
.map((tc) => `- ${tc.tool}(${Object.values(tc.args)[0] || ""}): ${tc.success ? "✓" : "✗"}`)
|
|
321
|
+
.join("\n");
|
|
322
|
+
yield {
|
|
323
|
+
type: "content",
|
|
324
|
+
content: `\n\n동일한 작업이 반복되어 중단합니다.\n\n수행된 작업:\n${toolSummary}`,
|
|
325
|
+
};
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
135
329
|
// Process tool calls
|
|
136
330
|
for (const toolCall of pendingToolCalls) {
|
|
137
331
|
// Check if aborted before each tool call
|
|
@@ -157,13 +351,57 @@ export async function* streamProcessMessage(userMessage, history, client, config
|
|
|
157
351
|
status: result.success ? "complete" : "error",
|
|
158
352
|
result,
|
|
159
353
|
};
|
|
354
|
+
completedToolCalls.push({
|
|
355
|
+
tool: toolCall.name,
|
|
356
|
+
args: toolCall.arguments,
|
|
357
|
+
success: result.success,
|
|
358
|
+
});
|
|
359
|
+
// Compress tool result to avoid context overflow (especially for Anthropic 200k limit)
|
|
360
|
+
const toolContent = result.success
|
|
361
|
+
? compressAnalysisResult(result.content, 8000)
|
|
362
|
+
: `Error: ${result.error}`;
|
|
160
363
|
messages.push({
|
|
161
364
|
role: "tool",
|
|
162
|
-
content:
|
|
365
|
+
content: toolContent,
|
|
163
366
|
toolCallId: toolCall.id,
|
|
164
367
|
});
|
|
165
368
|
}
|
|
166
369
|
}
|
|
370
|
+
// 도구는 실행됐지만 content가 한 번도 yield 안 된 경우 → 요약 표시
|
|
371
|
+
if (!contentYielded && completedToolCalls.length > 0 && iterations < maxIterations) {
|
|
372
|
+
const toolSummary = completedToolCalls
|
|
373
|
+
.map((tc) => `- ${tc.tool}(${Object.values(tc.args)[0] || ""}): ${tc.success ? "✓" : "✗"}`)
|
|
374
|
+
.join("\n");
|
|
375
|
+
yield { type: "content", content: `수행된 작업:\n${toolSummary}` };
|
|
376
|
+
}
|
|
377
|
+
// If maxIterations reached, force LLM to generate final answer
|
|
378
|
+
if (iterations >= maxIterations) {
|
|
379
|
+
// Add a nudge message asking LLM to summarize
|
|
380
|
+
messages.push({
|
|
381
|
+
role: "user",
|
|
382
|
+
content: "지금까지 수행된 작업 결과를 바탕으로 최종 답변을 작성해주세요. 더 이상 도구를 호출하지 마세요.",
|
|
383
|
+
});
|
|
384
|
+
try {
|
|
385
|
+
// One final LLM call WITHOUT tools to force a text response
|
|
386
|
+
for await (const event of client.streamChat(messages, undefined, abortSignal)) {
|
|
387
|
+
if (abortSignal?.aborted)
|
|
388
|
+
break;
|
|
389
|
+
if (event.type === "content" && event.content) {
|
|
390
|
+
yield { type: "content", content: event.content };
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
// Fallback: show tool summary if final LLM call fails
|
|
396
|
+
const toolSummary = completedToolCalls
|
|
397
|
+
.map((tc) => `- ${tc.tool}(${Object.values(tc.args)[0] || ""}): ${tc.success ? "✓" : "✗"}`)
|
|
398
|
+
.join("\n");
|
|
399
|
+
yield {
|
|
400
|
+
type: "content",
|
|
401
|
+
content: `\n\n작업이 최대 반복 횟수에 도달했습니다.\n\n수행된 작업:\n${toolSummary}`,
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
}
|
|
167
405
|
yield { type: "done" };
|
|
168
406
|
}
|
|
169
407
|
//# sourceMappingURL=agent.js.map
|
package/dist/core/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/core/commands.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Config } from "./config.js";
|
|
1
|
+
import { Config, Provider } from "./config.js";
|
|
2
2
|
export interface SlashCommandResult {
|
|
3
3
|
output?: string;
|
|
4
4
|
exit?: boolean;
|
|
5
5
|
clear?: boolean;
|
|
6
6
|
changeModel?: string;
|
|
7
|
+
changeProvider?: Provider;
|
|
7
8
|
showHelp?: boolean;
|
|
8
9
|
}
|
|
9
10
|
export declare function handleSlashCommand(input: string, config: Config): SlashCommandResult | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/core/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA0B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/core/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA0B,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAsID,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,kBAAkB,GAAG,IAAI,CAoB3B;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C"}
|