@autonav/core 1.6.0 → 1.7.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 +2 -2
- package/dist/adapter/index.d.ts +3 -3
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +3 -3
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/navigator-adapter.d.ts +196 -0
- package/dist/adapter/navigator-adapter.d.ts.map +1 -0
- package/dist/adapter/navigator-adapter.js +579 -0
- package/dist/adapter/navigator-adapter.js.map +1 -0
- package/dist/cli/autonav.d.ts +2 -6
- package/dist/cli/autonav.d.ts.map +1 -1
- package/dist/cli/autonav.js +32 -53
- package/dist/cli/autonav.js.map +1 -1
- package/dist/cli/nav-chat.d.ts +2 -1
- package/dist/cli/nav-chat.d.ts.map +1 -1
- package/dist/cli/nav-chat.js +32 -3
- package/dist/cli/nav-chat.js.map +1 -1
- package/dist/cli/nav-init.d.ts +2 -1
- package/dist/cli/nav-init.d.ts.map +1 -1
- package/dist/cli/nav-init.js +12 -4
- package/dist/cli/nav-init.js.map +1 -1
- package/dist/cli/nav-install.d.ts +2 -1
- package/dist/cli/nav-install.d.ts.map +1 -1
- package/dist/cli/nav-install.js +4 -2
- package/dist/cli/nav-install.js.map +1 -1
- package/dist/cli/nav-memento.d.ts +3 -2
- package/dist/cli/nav-memento.d.ts.map +1 -1
- package/dist/cli/nav-memento.js +12 -6
- package/dist/cli/nav-memento.js.map +1 -1
- package/dist/cli/nav-mend.d.ts +2 -1
- package/dist/cli/nav-mend.d.ts.map +1 -1
- package/dist/cli/nav-mend.js +4 -1
- package/dist/cli/nav-mend.js.map +1 -1
- package/dist/cli/nav-migrate.d.ts +2 -1
- package/dist/cli/nav-migrate.d.ts.map +1 -1
- package/dist/cli/nav-migrate.js +2 -6
- package/dist/cli/nav-migrate.js.map +1 -1
- package/dist/cli/nav-query.d.ts +2 -1
- package/dist/cli/nav-query.d.ts.map +1 -1
- package/dist/cli/nav-query.js +12 -6
- package/dist/cli/nav-query.js.map +1 -1
- package/dist/cli/nav-standup.d.ts +18 -0
- package/dist/cli/nav-standup.d.ts.map +1 -0
- package/dist/cli/nav-standup.js +151 -0
- package/dist/cli/nav-standup.js.map +1 -0
- package/dist/cli/nav-uninstall.d.ts +2 -1
- package/dist/cli/nav-uninstall.d.ts.map +1 -1
- package/dist/cli/nav-uninstall.js +4 -2
- package/dist/cli/nav-uninstall.js.map +1 -1
- package/dist/cli/nav-update.d.ts +2 -1
- package/dist/cli/nav-update.d.ts.map +1 -1
- package/dist/cli/nav-update.js +11 -6
- package/dist/cli/nav-update.js.map +1 -1
- package/dist/conversation/App.d.ts +9 -2
- package/dist/conversation/App.d.ts.map +1 -1
- package/dist/conversation/App.js +304 -111
- package/dist/conversation/App.js.map +1 -1
- package/dist/conversation/index.d.ts +5 -0
- package/dist/conversation/index.d.ts.map +1 -1
- package/dist/conversation/index.js +17 -2
- package/dist/conversation/index.js.map +1 -1
- package/dist/harness/chibi-harness.d.ts +36 -0
- package/dist/harness/chibi-harness.d.ts.map +1 -0
- package/dist/harness/chibi-harness.js +383 -0
- package/dist/harness/chibi-harness.js.map +1 -0
- package/dist/harness/chibi-plugins/get_plugin_config +64 -0
- package/dist/harness/chibi-plugins/query_navigator +114 -0
- package/dist/harness/chibi-plugins/submit_answer +38 -0
- package/dist/harness/chibi-plugins/update_plugin_config +91 -0
- package/dist/harness/claude-code-harness.d.ts +24 -0
- package/dist/harness/claude-code-harness.d.ts.map +1 -0
- package/dist/harness/claude-code-harness.js +242 -0
- package/dist/harness/claude-code-harness.js.map +1 -0
- package/dist/harness/ephemeral-home.d.ts +34 -0
- package/dist/harness/ephemeral-home.d.ts.map +1 -0
- package/dist/harness/ephemeral-home.js +56 -0
- package/dist/harness/ephemeral-home.js.map +1 -0
- package/dist/harness/factory.d.ts +47 -0
- package/dist/harness/factory.d.ts.map +1 -0
- package/dist/harness/factory.js +84 -0
- package/dist/harness/factory.js.map +1 -0
- package/dist/harness/helpers.d.ts +58 -0
- package/dist/harness/helpers.d.ts.map +1 -0
- package/dist/harness/helpers.js +78 -0
- package/dist/harness/helpers.js.map +1 -0
- package/dist/harness/index.d.ts +14 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +13 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/opencode-harness.d.ts +79 -0
- package/dist/harness/opencode-harness.d.ts.map +1 -0
- package/dist/harness/opencode-harness.js +537 -0
- package/dist/harness/opencode-harness.js.map +1 -0
- package/dist/harness/opencode-tools/get_plugin_config.ts +72 -0
- package/dist/harness/opencode-tools/query_navigator.ts +126 -0
- package/dist/harness/opencode-tools/submit_answer.ts +40 -0
- package/dist/harness/opencode-tools/update_plugin_config.ts +105 -0
- package/dist/harness/sandbox.d.ts +59 -0
- package/dist/harness/sandbox.d.ts.map +1 -0
- package/dist/harness/sandbox.js +152 -0
- package/dist/harness/sandbox.js.map +1 -0
- package/dist/harness/tool-server.d.ts +50 -0
- package/dist/harness/tool-server.d.ts.map +1 -0
- package/dist/harness/tool-server.js +27 -0
- package/dist/harness/tool-server.js.map +1 -0
- package/dist/harness/types.d.ts +168 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +12 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/interview/App.d.ts +4 -2
- package/dist/interview/App.d.ts.map +1 -1
- package/dist/interview/App.js +36 -56
- package/dist/interview/App.js.map +1 -1
- package/dist/interview/index.d.ts +3 -0
- package/dist/interview/index.d.ts.map +1 -1
- package/dist/interview/index.js +1 -0
- package/dist/interview/index.js.map +1 -1
- package/dist/interview/prompts.d.ts +3 -1
- package/dist/interview/prompts.d.ts.map +1 -1
- package/dist/interview/prompts.js +5 -1
- package/dist/interview/prompts.js.map +1 -1
- package/dist/interview/ui/ChatBanner.d.ts +17 -0
- package/dist/interview/ui/ChatBanner.d.ts.map +1 -0
- package/dist/interview/ui/ChatBanner.js +30 -0
- package/dist/interview/ui/ChatBanner.js.map +1 -0
- package/dist/interview/ui/ChatInput.d.ts +36 -0
- package/dist/interview/ui/ChatInput.d.ts.map +1 -0
- package/dist/interview/ui/ChatInput.js +304 -0
- package/dist/interview/ui/ChatInput.js.map +1 -0
- package/dist/interview/ui/MarkdownText.d.ts +13 -0
- package/dist/interview/ui/MarkdownText.d.ts.map +1 -0
- package/dist/interview/ui/MarkdownText.js +107 -0
- package/dist/interview/ui/MarkdownText.js.map +1 -0
- package/dist/interview/ui/index.d.ts +3 -0
- package/dist/interview/ui/index.d.ts.map +1 -1
- package/dist/interview/ui/index.js +3 -0
- package/dist/interview/ui/index.js.map +1 -1
- package/dist/memento/implementer-agent.d.ts +31 -0
- package/dist/memento/implementer-agent.d.ts.map +1 -0
- package/dist/memento/implementer-agent.js +95 -0
- package/dist/memento/implementer-agent.js.map +1 -0
- package/dist/memento/index.d.ts +6 -5
- package/dist/memento/index.d.ts.map +1 -1
- package/dist/memento/index.js +7 -5
- package/dist/memento/index.js.map +1 -1
- package/dist/memento/loop.d.ts +6 -5
- package/dist/memento/loop.d.ts.map +1 -1
- package/dist/memento/loop.js +872 -180
- package/dist/memento/loop.js.map +1 -1
- package/dist/memento/matrix-animation.d.ts +26 -0
- package/dist/memento/matrix-animation.d.ts.map +1 -1
- package/dist/memento/matrix-animation.js +93 -18
- package/dist/memento/matrix-animation.js.map +1 -1
- package/dist/memento/nav-protocol.d.ts +2 -2
- package/dist/memento/nav-protocol.d.ts.map +1 -1
- package/dist/memento/nav-protocol.js +39 -43
- package/dist/memento/nav-protocol.js.map +1 -1
- package/dist/memento/prompts.d.ts +21 -8
- package/dist/memento/prompts.d.ts.map +1 -1
- package/dist/memento/prompts.js +79 -39
- package/dist/memento/prompts.js.map +1 -1
- package/dist/memento/rate-limit.d.ts +85 -0
- package/dist/memento/rate-limit.d.ts.map +1 -0
- package/dist/memento/rate-limit.js +221 -0
- package/dist/memento/rate-limit.js.map +1 -0
- package/dist/memento/types.d.ts +6 -6
- package/dist/memento/types.d.ts.map +1 -1
- package/dist/memento/types.js +3 -3
- package/dist/memento/worker-agent.d.ts +4 -1
- package/dist/memento/worker-agent.d.ts.map +1 -1
- package/dist/memento/worker-agent.js +38 -54
- package/dist/memento/worker-agent.js.map +1 -1
- package/dist/registry.d.ts +35 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +87 -0
- package/dist/registry.js.map +1 -0
- package/dist/repo-analyzer/index.d.ts +2 -1
- package/dist/repo-analyzer/index.d.ts.map +1 -1
- package/dist/repo-analyzer/index.js +6 -17
- package/dist/repo-analyzer/index.js.map +1 -1
- package/dist/skill-generator/index.d.ts +142 -0
- package/dist/skill-generator/index.d.ts.map +1 -0
- package/dist/skill-generator/index.js +510 -0
- package/dist/skill-generator/index.js.map +1 -0
- package/dist/standup/config.d.ts +19 -0
- package/dist/standup/config.d.ts.map +1 -0
- package/dist/standup/config.js +42 -0
- package/dist/standup/config.js.map +1 -0
- package/dist/standup/index.d.ts +24 -0
- package/dist/standup/index.d.ts.map +1 -0
- package/dist/standup/index.js +29 -0
- package/dist/standup/index.js.map +1 -0
- package/dist/standup/loop.d.ts +36 -0
- package/dist/standup/loop.d.ts.map +1 -0
- package/dist/standup/loop.js +508 -0
- package/dist/standup/loop.js.map +1 -0
- package/dist/standup/prompts.d.ts +62 -0
- package/dist/standup/prompts.d.ts.map +1 -0
- package/dist/standup/prompts.js +211 -0
- package/dist/standup/prompts.js.map +1 -0
- package/dist/standup/standup-protocol.d.ts +33 -0
- package/dist/standup/standup-protocol.d.ts.map +1 -0
- package/dist/standup/standup-protocol.js +189 -0
- package/dist/standup/standup-protocol.js.map +1 -0
- package/dist/standup/types.d.ts +185 -0
- package/dist/standup/types.d.ts.map +1 -0
- package/dist/standup/types.js +67 -0
- package/dist/standup/types.js.map +1 -0
- package/dist/templates/.gitignore.template +26 -0
- package/dist/templates/CLAUDE-pack.md.template +114 -0
- package/dist/templates/CLAUDE.md.template +153 -0
- package/dist/templates/README.md.template +174 -0
- package/dist/templates/config-pack.json.template +16 -0
- package/dist/templates/config.json.template +11 -0
- package/dist/templates/index.d.ts +22 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +32 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/plugins.json.template +33 -0
- package/dist/templates/system-configuration.md.template +70 -0
- package/dist/tools/cross-nav.d.ts +21 -0
- package/dist/tools/cross-nav.d.ts.map +1 -0
- package/dist/tools/cross-nav.js +93 -0
- package/dist/tools/cross-nav.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/related-navs-config.d.ts +15 -0
- package/dist/tools/related-navs-config.d.ts.map +1 -0
- package/dist/tools/related-navs-config.js +132 -0
- package/dist/tools/related-navs-config.js.map +1 -0
- package/dist/tools/related-navs.d.ts +23 -0
- package/dist/tools/related-navs.d.ts.map +1 -0
- package/dist/tools/related-navs.js +107 -0
- package/dist/tools/related-navs.js.map +1 -0
- package/dist/tools/response.d.ts +3 -2
- package/dist/tools/response.d.ts.map +1 -1
- package/dist/tools/response.js +7 -11
- package/dist/tools/response.js.map +1 -1
- package/dist/tools/self-config.d.ts +2 -1
- package/dist/tools/self-config.d.ts.map +1 -1
- package/dist/tools/self-config.js +5 -9
- package/dist/tools/self-config.js.map +1 -1
- package/package.json +4 -1
- package/dist/memento/state.d.ts +0 -56
- package/dist/memento/state.d.ts.map +0 -1
- package/dist/memento/state.js +0 -156
- package/dist/memento/state.js.map +0 -1
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.d.ts +0 -18
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.d.ts.map +0 -1
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.js +0 -207
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Worker Agent for Memento Loop
|
|
3
3
|
*
|
|
4
|
-
* Executes implementation plans
|
|
4
|
+
* Executes implementation plans via the harness adapter.
|
|
5
5
|
*/
|
|
6
|
-
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
7
6
|
import { buildWorkerPrompt, buildWorkerSystemPrompt } from "./prompts.js";
|
|
7
|
+
import { ClaudeCodeHarness } from "../harness/index.js";
|
|
8
8
|
/**
|
|
9
9
|
* Run the worker agent to implement a plan
|
|
10
10
|
*/
|
|
11
11
|
export async function runWorkerAgent(context, plan, options = {}) {
|
|
12
12
|
const startTime = Date.now();
|
|
13
|
-
const { verbose = false, model = "claude-sonnet-4-5", maxTurns = 50, } = options;
|
|
13
|
+
const { verbose = false, model = "claude-sonnet-4-5", maxTurns = 50, harness = new ClaudeCodeHarness(), } = options;
|
|
14
14
|
const prompt = buildWorkerPrompt(context.codeDirectory, plan);
|
|
15
15
|
const systemPrompt = buildWorkerSystemPrompt(context.codeDirectory);
|
|
16
16
|
if (verbose) {
|
|
@@ -20,66 +20,50 @@ export async function runWorkerAgent(context, plan, options = {}) {
|
|
|
20
20
|
}
|
|
21
21
|
const filesModified = [];
|
|
22
22
|
let lastAssistantText = "";
|
|
23
|
-
let resultMessage;
|
|
24
23
|
try {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
for await (const
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
block.name === "str_replace_based_edit_tool") {
|
|
48
|
-
const input = block.input;
|
|
49
|
-
const filePath = input.file_path || input.path;
|
|
50
|
-
if (typeof filePath === "string" && !filesModified.includes(filePath)) {
|
|
51
|
-
filesModified.push(filePath);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else if (block.type === "text") {
|
|
56
|
-
lastAssistantText = block.text;
|
|
24
|
+
const session = harness.run({
|
|
25
|
+
model,
|
|
26
|
+
maxTurns,
|
|
27
|
+
systemPrompt,
|
|
28
|
+
cwd: context.codeDirectory,
|
|
29
|
+
permissionMode: "bypassPermissions",
|
|
30
|
+
}, prompt);
|
|
31
|
+
let success = false;
|
|
32
|
+
let resultText = "";
|
|
33
|
+
let errorText = "";
|
|
34
|
+
for await (const event of session) {
|
|
35
|
+
if (event.type === "tool_use") {
|
|
36
|
+
if (verbose) {
|
|
37
|
+
console.log(`[Worker] Tool: ${event.name}`);
|
|
38
|
+
}
|
|
39
|
+
// Extract file paths from common tools
|
|
40
|
+
if (event.name === "Write" ||
|
|
41
|
+
event.name === "Edit" ||
|
|
42
|
+
event.name === "str_replace_based_edit_tool") {
|
|
43
|
+
const filePath = event.input.file_path || event.input.path;
|
|
44
|
+
if (typeof filePath === "string" && !filesModified.includes(filePath)) {
|
|
45
|
+
filesModified.push(filePath);
|
|
57
46
|
}
|
|
58
47
|
}
|
|
59
48
|
}
|
|
60
|
-
if (
|
|
61
|
-
|
|
49
|
+
else if (event.type === "text") {
|
|
50
|
+
lastAssistantText = event.text;
|
|
51
|
+
}
|
|
52
|
+
else if (event.type === "result") {
|
|
53
|
+
success = event.success;
|
|
54
|
+
resultText = event.text || "";
|
|
55
|
+
if (!event.success) {
|
|
56
|
+
errorText = event.text || "Unknown error";
|
|
57
|
+
}
|
|
62
58
|
}
|
|
63
59
|
}
|
|
64
60
|
const durationMs = Date.now() - startTime;
|
|
65
|
-
if (!
|
|
66
|
-
return {
|
|
67
|
-
success: false,
|
|
68
|
-
summary: "No result message received from worker agent",
|
|
69
|
-
filesModified,
|
|
70
|
-
errors: ["No result message received"],
|
|
71
|
-
durationMs,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
if (resultMessage.subtype !== "success") {
|
|
75
|
-
const errorDetails = "errors" in resultMessage
|
|
76
|
-
? resultMessage.errors.join(", ")
|
|
77
|
-
: "Unknown error";
|
|
61
|
+
if (!success) {
|
|
78
62
|
return {
|
|
79
63
|
success: false,
|
|
80
|
-
summary:
|
|
64
|
+
summary: errorText || "Worker failed",
|
|
81
65
|
filesModified,
|
|
82
|
-
errors: [
|
|
66
|
+
errors: [errorText || "Unknown error"],
|
|
83
67
|
durationMs,
|
|
84
68
|
};
|
|
85
69
|
}
|
|
@@ -89,7 +73,7 @@ export async function runWorkerAgent(context, plan, options = {}) {
|
|
|
89
73
|
}
|
|
90
74
|
return {
|
|
91
75
|
success: true,
|
|
92
|
-
summary:
|
|
76
|
+
summary: resultText || lastAssistantText || "Implementation completed",
|
|
93
77
|
filesModified,
|
|
94
78
|
durationMs,
|
|
95
79
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-agent.js","sourceRoot":"","sources":["../../src/memento/worker-agent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"worker-agent.js","sourceRoot":"","sources":["../../src/memento/worker-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Navigator Registry
|
|
3
|
+
*
|
|
4
|
+
* Maps navigator names to filesystem paths. Stored at
|
|
5
|
+
* ~/.config/autonav/navigators.json (or AUTONAV_CONFIG_DIR).
|
|
6
|
+
*
|
|
7
|
+
* Resolution priority for a navigator name:
|
|
8
|
+
* 1. AUTONAV_NAV_PATH_<NAME> env var (uppercased, hyphens → underscores)
|
|
9
|
+
* 2. Global registry file
|
|
10
|
+
*/
|
|
11
|
+
type Registry = Record<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* Register a navigator in the global registry.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerNavigator(name: string, navPath: string, configDir?: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Remove a navigator from the global registry.
|
|
18
|
+
*/
|
|
19
|
+
export declare function unregisterNavigator(name: string, configDir?: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Resolve a navigator name to a filesystem path.
|
|
22
|
+
*
|
|
23
|
+
* Priority:
|
|
24
|
+
* 1. AUTONAV_NAV_PATH_<NAME> env var
|
|
25
|
+
* 2. Global registry
|
|
26
|
+
*
|
|
27
|
+
* @returns The resolved path, or null if not found
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveNavigatorPath(name: string, configDir?: string): string | null;
|
|
30
|
+
/**
|
|
31
|
+
* List all registered navigators.
|
|
32
|
+
*/
|
|
33
|
+
export declare function listNavigators(configDir?: string): Registry;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA+BvC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAIzF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAI1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBpF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,CAE3D"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Navigator Registry
|
|
3
|
+
*
|
|
4
|
+
* Maps navigator names to filesystem paths. Stored at
|
|
5
|
+
* ~/.config/autonav/navigators.json (or AUTONAV_CONFIG_DIR).
|
|
6
|
+
*
|
|
7
|
+
* Resolution priority for a navigator name:
|
|
8
|
+
* 1. AUTONAV_NAV_PATH_<NAME> env var (uppercased, hyphens → underscores)
|
|
9
|
+
* 2. Global registry file
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from "node:fs";
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
import { resolveConfigDir } from "./standup/config.js";
|
|
14
|
+
const REGISTRY_FILE = "navigators.json";
|
|
15
|
+
/**
|
|
16
|
+
* Read the global navigator registry.
|
|
17
|
+
*/
|
|
18
|
+
function readRegistry(configDir) {
|
|
19
|
+
const dir = resolveConfigDir(configDir);
|
|
20
|
+
const filePath = path.join(dir, REGISTRY_FILE);
|
|
21
|
+
if (!fs.existsSync(filePath)) {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
26
|
+
return JSON.parse(content);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Write the global navigator registry.
|
|
34
|
+
*/
|
|
35
|
+
function writeRegistry(registry, configDir) {
|
|
36
|
+
const dir = resolveConfigDir(configDir);
|
|
37
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
38
|
+
const filePath = path.join(dir, REGISTRY_FILE);
|
|
39
|
+
fs.writeFileSync(filePath, JSON.stringify(registry, null, 2) + "\n");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Register a navigator in the global registry.
|
|
43
|
+
*/
|
|
44
|
+
export function registerNavigator(name, navPath, configDir) {
|
|
45
|
+
const registry = readRegistry(configDir);
|
|
46
|
+
registry[name] = path.resolve(navPath);
|
|
47
|
+
writeRegistry(registry, configDir);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Remove a navigator from the global registry.
|
|
51
|
+
*/
|
|
52
|
+
export function unregisterNavigator(name, configDir) {
|
|
53
|
+
const registry = readRegistry(configDir);
|
|
54
|
+
delete registry[name];
|
|
55
|
+
writeRegistry(registry, configDir);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a navigator name to a filesystem path.
|
|
59
|
+
*
|
|
60
|
+
* Priority:
|
|
61
|
+
* 1. AUTONAV_NAV_PATH_<NAME> env var
|
|
62
|
+
* 2. Global registry
|
|
63
|
+
*
|
|
64
|
+
* @returns The resolved path, or null if not found
|
|
65
|
+
*/
|
|
66
|
+
export function resolveNavigatorPath(name, configDir) {
|
|
67
|
+
// 1. Check env var (e.g. AUTONAV_NAV_PATH_THUFIR for "thufir")
|
|
68
|
+
const envKey = `AUTONAV_NAV_PATH_${name.toUpperCase().replace(/-/g, "_")}`;
|
|
69
|
+
const envPath = process.env[envKey];
|
|
70
|
+
if (envPath) {
|
|
71
|
+
return path.resolve(envPath);
|
|
72
|
+
}
|
|
73
|
+
// 2. Check global registry
|
|
74
|
+
const registry = readRegistry(configDir);
|
|
75
|
+
const registryPath = registry[name];
|
|
76
|
+
if (registryPath) {
|
|
77
|
+
return registryPath;
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* List all registered navigators.
|
|
83
|
+
*/
|
|
84
|
+
export function listNavigators(configDir) {
|
|
85
|
+
return readRegistry(configDir);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAIxC;;GAEG;AACH,SAAS,YAAY,CAAC,SAAkB;IACtC,MAAM,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,QAAkB,EAAE,SAAkB;IAC3D,MAAM,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACxC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC/C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAE,SAAkB;IACjF,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,SAAkB;IAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,SAAkB;IACnE,+DAA+D;IAC/D,MAAM,MAAM,GAAG,oBAAoB,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAkB;IAC/C,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ScanResult } from "../repo-scanner/index.js";
|
|
2
|
+
import { type Harness } from "../harness/index.js";
|
|
2
3
|
export interface AnalysisResult {
|
|
3
4
|
purpose: string;
|
|
4
5
|
scope: string;
|
|
@@ -14,5 +15,5 @@ export declare function validateAnalysisResult(result: AnalysisResult, fallbackN
|
|
|
14
15
|
/**
|
|
15
16
|
* Analyze a scanned repository using Claude
|
|
16
17
|
*/
|
|
17
|
-
export declare function analyzeRepository(scanResult: ScanResult): Promise<AnalysisResult>;
|
|
18
|
+
export declare function analyzeRepository(scanResult: ScanResult, harness: Harness): Promise<AnalysisResult>;
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repo-analyzer/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repo-analyzer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,KAAK,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAWhE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAkGD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,MAAM,GACnB,cAAc,CAuBhB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,CAAC,CAsDzB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { collectText } from "../harness/index.js";
|
|
2
2
|
/**
|
|
3
3
|
* Repository Analyzer
|
|
4
4
|
*
|
|
@@ -118,24 +118,13 @@ export function validateAnalysisResult(result, fallbackName) {
|
|
|
118
118
|
/**
|
|
119
119
|
* Analyze a scanned repository using Claude
|
|
120
120
|
*/
|
|
121
|
-
export async function analyzeRepository(scanResult) {
|
|
121
|
+
export async function analyzeRepository(scanResult, harness) {
|
|
122
122
|
const prompt = buildAnalysisPrompt(scanResult);
|
|
123
123
|
try {
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
permissionMode: "bypassPermissions",
|
|
129
|
-
},
|
|
130
|
-
});
|
|
131
|
-
let responseText = "";
|
|
132
|
-
for await (const message of queryInstance) {
|
|
133
|
-
if (message.type === "assistant") {
|
|
134
|
-
const content = message.message.content;
|
|
135
|
-
const textBlocks = content.filter((b) => b.type === "text");
|
|
136
|
-
responseText = textBlocks.map((b) => b.text).join("\n");
|
|
137
|
-
}
|
|
138
|
-
}
|
|
124
|
+
const responseText = await collectText(harness.run({
|
|
125
|
+
model: ANALYSIS_MODEL,
|
|
126
|
+
permissionMode: "bypassPermissions",
|
|
127
|
+
}, prompt));
|
|
139
128
|
const result = parseAnalysisResponse(responseText);
|
|
140
129
|
const fallbackName = scanResult.projectMetadata.name || "project";
|
|
141
130
|
if (!result) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repo-analyzer/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repo-analyzer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates Claude Code skills for navigators, enabling
|
|
5
|
+
* inter-navigator communication via the "ask <navname>" pattern.
|
|
6
|
+
*
|
|
7
|
+
* Skills are stored locally in the navigator directory (.autonav/skills/)
|
|
8
|
+
* and symlinked to the global skills directory (~/.claude/skills/) for
|
|
9
|
+
* discovery by Claude Code.
|
|
10
|
+
*/
|
|
11
|
+
export interface SkillConfig {
|
|
12
|
+
/** Navigator name (used for skill name: ask-<navname>) */
|
|
13
|
+
navigatorName: string;
|
|
14
|
+
/** Absolute path to the navigator directory */
|
|
15
|
+
navigatorPath: string;
|
|
16
|
+
/** Navigator description/purpose */
|
|
17
|
+
description: string;
|
|
18
|
+
/** Topics the navigator covers */
|
|
19
|
+
scope?: string;
|
|
20
|
+
/** Who uses this navigator */
|
|
21
|
+
audience?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the global skills directory path (~/.claude/skills/)
|
|
25
|
+
*/
|
|
26
|
+
export declare function getGlobalSkillsDir(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Get the local skills directory path for a navigator (.autonav/skills/)
|
|
29
|
+
*/
|
|
30
|
+
export declare function getLocalSkillsDir(navigatorPath: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Get the full path to a local skill directory
|
|
33
|
+
*/
|
|
34
|
+
export declare function getLocalSkillPath(navigatorPath: string, skillName: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a skill already exists globally
|
|
37
|
+
*/
|
|
38
|
+
export declare function skillExists(skillName: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Check if a skill exists locally in a navigator
|
|
41
|
+
*/
|
|
42
|
+
export declare function localSkillExists(navigatorPath: string, skillName: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Check if a global skill is a symlink
|
|
45
|
+
*/
|
|
46
|
+
export declare function isSkillSymlink(skillName: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Get the target of a global skill symlink
|
|
49
|
+
*/
|
|
50
|
+
export declare function getSkillSymlinkTarget(skillName: string): string | null;
|
|
51
|
+
/**
|
|
52
|
+
* Generate the skill name from navigator name
|
|
53
|
+
*/
|
|
54
|
+
export declare function getSkillName(navigatorName: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Generate the update skill name from navigator name
|
|
57
|
+
*/
|
|
58
|
+
export declare function getUpdateSkillName(navigatorName: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Generate the SKILL.md content for a navigator
|
|
61
|
+
*/
|
|
62
|
+
export declare function generateSkillContent(config: SkillConfig): string;
|
|
63
|
+
/**
|
|
64
|
+
* Generate the update skill content for a navigator (with write permissions)
|
|
65
|
+
*/
|
|
66
|
+
export declare function generateUpdateSkillContent(config: SkillConfig): string;
|
|
67
|
+
/**
|
|
68
|
+
* Create a global skill for a navigator
|
|
69
|
+
*
|
|
70
|
+
* @param config - Skill configuration
|
|
71
|
+
* @param options - Options for skill creation
|
|
72
|
+
* @returns Path to the created skill directory, or null if skipped
|
|
73
|
+
*/
|
|
74
|
+
export declare function createNavigatorSkill(config: SkillConfig, options?: {
|
|
75
|
+
force?: boolean;
|
|
76
|
+
quiet?: boolean;
|
|
77
|
+
}): Promise<string | null>;
|
|
78
|
+
/**
|
|
79
|
+
* Remove a navigator skill (both ask and update skills, global only)
|
|
80
|
+
*/
|
|
81
|
+
export declare function removeNavigatorSkill(navigatorName: string, options?: {
|
|
82
|
+
quiet?: boolean;
|
|
83
|
+
}): boolean;
|
|
84
|
+
export interface SymlinkResult {
|
|
85
|
+
success: boolean;
|
|
86
|
+
action: "created" | "already_linked" | "conflict" | "error";
|
|
87
|
+
message: string;
|
|
88
|
+
skillName: string;
|
|
89
|
+
localPath?: string;
|
|
90
|
+
globalPath?: string;
|
|
91
|
+
conflictTarget?: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create both ask and update skills locally in the navigator's .autonav/skills/ directory
|
|
95
|
+
*/
|
|
96
|
+
export declare function createLocalSkill(navigatorPath: string, config: SkillConfig, options?: {
|
|
97
|
+
force?: boolean;
|
|
98
|
+
quiet?: boolean;
|
|
99
|
+
}): Promise<{
|
|
100
|
+
askSkillPath: string | null;
|
|
101
|
+
updateSkillPath: string | null;
|
|
102
|
+
}>;
|
|
103
|
+
/**
|
|
104
|
+
* Create a symlink from global skills directory to local skill
|
|
105
|
+
*
|
|
106
|
+
* @returns SymlinkResult with status and details
|
|
107
|
+
*/
|
|
108
|
+
export declare function symlinkSkillToGlobal(localSkillPath: string, skillName: string, options?: {
|
|
109
|
+
force?: boolean;
|
|
110
|
+
quiet?: boolean;
|
|
111
|
+
}): SymlinkResult;
|
|
112
|
+
/**
|
|
113
|
+
* Remove the global symlink for a skill (preserves local skill)
|
|
114
|
+
*/
|
|
115
|
+
export declare function removeSkillSymlink(skillName: string, options?: {
|
|
116
|
+
quiet?: boolean;
|
|
117
|
+
}): {
|
|
118
|
+
success: boolean;
|
|
119
|
+
wasSymlink: boolean;
|
|
120
|
+
message: string;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Create both skills locally AND symlink them globally (recommended for new navigators)
|
|
124
|
+
*
|
|
125
|
+
* This is the preferred method for creating skills as it:
|
|
126
|
+
* 1. Stores both ask and update skills in the navigator's .autonav/skills/ (version-controlled)
|
|
127
|
+
* 2. Symlinks both to ~/.claude/skills/ for global discovery
|
|
128
|
+
*/
|
|
129
|
+
export declare function createAndSymlinkSkill(navigatorPath: string, config: SkillConfig, options?: {
|
|
130
|
+
force?: boolean;
|
|
131
|
+
quiet?: boolean;
|
|
132
|
+
}): Promise<{
|
|
133
|
+
askSkillPath: string | null;
|
|
134
|
+
updateSkillPath: string | null;
|
|
135
|
+
askSymlinkResult: SymlinkResult | null;
|
|
136
|
+
updateSymlinkResult: SymlinkResult | null;
|
|
137
|
+
}>;
|
|
138
|
+
/**
|
|
139
|
+
* Discover all local skills in a navigator (both ask and update skills)
|
|
140
|
+
*/
|
|
141
|
+
export declare function discoverLocalSkills(navigatorPath: string): string[];
|
|
142
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-generator/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAElF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAGlF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA+ChE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAuDtE;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuCxB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAgCT;AAMD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,gBAAgB,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAoD1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,aAAa,CAgGf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA8C5D;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,OAAO,CAAC;IACT,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,mBAAmB,EAAE,aAAa,GAAG,IAAI,CAAC;CAC3C,CAAC,CAgCD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAcnE"}
|