@mainwp/control 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +583 -0
- package/bin/_exit.js +12 -0
- package/bin/dev.js +7 -0
- package/bin/run.js +7 -0
- package/dist/chat/chat-engine.d.ts +213 -0
- package/dist/chat/chat-engine.d.ts.map +1 -0
- package/dist/chat/chat-engine.js +636 -0
- package/dist/chat/chat-engine.js.map +1 -0
- package/dist/chat/index.d.ts +10 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +14 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/providers/anthropic.d.ts +52 -0
- package/dist/chat/providers/anthropic.d.ts.map +1 -0
- package/dist/chat/providers/anthropic.js +292 -0
- package/dist/chat/providers/anthropic.js.map +1 -0
- package/dist/chat/providers/gemini.d.ts +52 -0
- package/dist/chat/providers/gemini.d.ts.map +1 -0
- package/dist/chat/providers/gemini.js +284 -0
- package/dist/chat/providers/gemini.js.map +1 -0
- package/dist/chat/providers/index.d.ts +19 -0
- package/dist/chat/providers/index.d.ts.map +1 -0
- package/dist/chat/providers/index.js +23 -0
- package/dist/chat/providers/index.js.map +1 -0
- package/dist/chat/providers/local.d.ts +37 -0
- package/dist/chat/providers/local.d.ts.map +1 -0
- package/dist/chat/providers/local.js +130 -0
- package/dist/chat/providers/local.js.map +1 -0
- package/dist/chat/providers/openai-compatible.d.ts +155 -0
- package/dist/chat/providers/openai-compatible.d.ts.map +1 -0
- package/dist/chat/providers/openai-compatible.js +264 -0
- package/dist/chat/providers/openai-compatible.js.map +1 -0
- package/dist/chat/providers/openai.d.ts +24 -0
- package/dist/chat/providers/openai.d.ts.map +1 -0
- package/dist/chat/providers/openai.js +62 -0
- package/dist/chat/providers/openai.js.map +1 -0
- package/dist/chat/providers/openrouter.d.ts +26 -0
- package/dist/chat/providers/openrouter.d.ts.map +1 -0
- package/dist/chat/providers/openrouter.js +65 -0
- package/dist/chat/providers/openrouter.js.map +1 -0
- package/dist/chat/providers/provider-fetch.d.ts +15 -0
- package/dist/chat/providers/provider-fetch.d.ts.map +1 -0
- package/dist/chat/providers/provider-fetch.js +35 -0
- package/dist/chat/providers/provider-fetch.js.map +1 -0
- package/dist/chat/providers/provider.d.ts +214 -0
- package/dist/chat/providers/provider.d.ts.map +1 -0
- package/dist/chat/providers/provider.js +166 -0
- package/dist/chat/providers/provider.js.map +1 -0
- package/dist/chat/providers/sse-reader.d.ts +21 -0
- package/dist/chat/providers/sse-reader.d.ts.map +1 -0
- package/dist/chat/providers/sse-reader.js +48 -0
- package/dist/chat/providers/sse-reader.js.map +1 -0
- package/dist/chat/system-prompt.d.ts +33 -0
- package/dist/chat/system-prompt.d.ts.map +1 -0
- package/dist/chat/system-prompt.js +166 -0
- package/dist/chat/system-prompt.js.map +1 -0
- package/dist/chat/tool-envelope.d.ts +72 -0
- package/dist/chat/tool-envelope.d.ts.map +1 -0
- package/dist/chat/tool-envelope.js +263 -0
- package/dist/chat/tool-envelope.js.map +1 -0
- package/dist/commands/abilities/info.d.ts +21 -0
- package/dist/commands/abilities/info.d.ts.map +1 -0
- package/dist/commands/abilities/info.js +80 -0
- package/dist/commands/abilities/info.js.map +1 -0
- package/dist/commands/abilities/list.d.ts +19 -0
- package/dist/commands/abilities/list.d.ts.map +1 -0
- package/dist/commands/abilities/list.js +98 -0
- package/dist/commands/abilities/list.js.map +1 -0
- package/dist/commands/abilities/run.d.ts +75 -0
- package/dist/commands/abilities/run.d.ts.map +1 -0
- package/dist/commands/abilities/run.js +468 -0
- package/dist/commands/abilities/run.js.map +1 -0
- package/dist/commands/chat.d.ts +54 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +384 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/config/show.d.ts +54 -0
- package/dist/commands/config/show.d.ts.map +1 -0
- package/dist/commands/config/show.js +324 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/doctor.d.ts +77 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +412 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/jobs/watch.d.ts +50 -0
- package/dist/commands/jobs/watch.d.ts.map +1 -0
- package/dist/commands/jobs/watch.js +269 -0
- package/dist/commands/jobs/watch.js.map +1 -0
- package/dist/commands/login.d.ts +25 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +165 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/profile/delete.d.ts +22 -0
- package/dist/commands/profile/delete.d.ts.map +1 -0
- package/dist/commands/profile/delete.js +57 -0
- package/dist/commands/profile/delete.js.map +1 -0
- package/dist/commands/profile/list.d.ts +19 -0
- package/dist/commands/profile/list.d.ts.map +1 -0
- package/dist/commands/profile/list.js +53 -0
- package/dist/commands/profile/list.js.map +1 -0
- package/dist/commands/profile/use.d.ts +22 -0
- package/dist/commands/profile/use.d.ts.map +1 -0
- package/dist/commands/profile/use.js +46 -0
- package/dist/commands/profile/use.js.map +1 -0
- package/dist/config/fs-utils.d.ts +14 -0
- package/dist/config/fs-utils.d.ts.map +1 -0
- package/dist/config/fs-utils.js +31 -0
- package/dist/config/fs-utils.js.map +1 -0
- package/dist/config/keychain.d.ts +53 -0
- package/dist/config/keychain.d.ts.map +1 -0
- package/dist/config/keychain.js +175 -0
- package/dist/config/keychain.js.map +1 -0
- package/dist/config/profile-store.d.ts +85 -0
- package/dist/config/profile-store.d.ts.map +1 -0
- package/dist/config/profile-store.js +228 -0
- package/dist/config/profile-store.js.map +1 -0
- package/dist/config/settings.d.ts +71 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +151 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/core/abilities-executor.d.ts +126 -0
- package/dist/core/abilities-executor.d.ts.map +1 -0
- package/dist/core/abilities-executor.js +264 -0
- package/dist/core/abilities-executor.js.map +1 -0
- package/dist/core/batch-manager.d.ts +113 -0
- package/dist/core/batch-manager.d.ts.map +1 -0
- package/dist/core/batch-manager.js +244 -0
- package/dist/core/batch-manager.js.map +1 -0
- package/dist/core/http-client.d.ts +111 -0
- package/dist/core/http-client.d.ts.map +1 -0
- package/dist/core/http-client.js +329 -0
- package/dist/core/http-client.js.map +1 -0
- package/dist/core/safety-controller.d.ts +114 -0
- package/dist/core/safety-controller.d.ts.map +1 -0
- package/dist/core/safety-controller.js +229 -0
- package/dist/core/safety-controller.js.map +1 -0
- package/dist/hooks/command-not-found.d.ts +12 -0
- package/dist/hooks/command-not-found.d.ts.map +1 -0
- package/dist/hooks/command-not-found.js +58 -0
- package/dist/hooks/command-not-found.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/base-command.d.ts +123 -0
- package/dist/lib/base-command.d.ts.map +1 -0
- package/dist/lib/base-command.js +285 -0
- package/dist/lib/base-command.js.map +1 -0
- package/dist/output/formatter.d.ts +48 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +138 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/json-envelope.d.ts +43 -0
- package/dist/output/json-envelope.d.ts.map +1 -0
- package/dist/output/json-envelope.js +73 -0
- package/dist/output/json-envelope.js.map +1 -0
- package/dist/utils/audit-logger.d.ts +97 -0
- package/dist/utils/audit-logger.d.ts.map +1 -0
- package/dist/utils/audit-logger.js +169 -0
- package/dist/utils/audit-logger.js.map +1 -0
- package/dist/utils/colors.d.ts +29 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +36 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/errors.d.ts +107 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +149 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/exit-codes.d.ts +21 -0
- package/dist/utils/exit-codes.d.ts.map +1 -0
- package/dist/utils/exit-codes.js +20 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/format.d.ts +64 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +69 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/prompt.d.ts +34 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +132 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/retry.d.ts +59 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +96 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/terminal-sanitizer.d.ts +60 -0
- package/dist/utils/terminal-sanitizer.d.ts.map +1 -0
- package/dist/utils/terminal-sanitizer.js +166 -0
- package/dist/utils/terminal-sanitizer.js.map +1 -0
- package/dist/validation/input-sanitizer.d.ts +76 -0
- package/dist/validation/input-sanitizer.d.ts.map +1 -0
- package/dist/validation/input-sanitizer.js +199 -0
- package/dist/validation/input-sanitizer.js.map +1 -0
- package/dist/validation/schema-validator.d.ts +75 -0
- package/dist/validation/schema-validator.d.ts.map +1 -0
- package/dist/validation/schema-validator.js +147 -0
- package/dist/validation/schema-validator.js.map +1 -0
- package/oclif.manifest.json +857 -0
- package/package.json +101 -0
- package/scripts/completions/README.md +221 -0
- package/scripts/completions/mainwpcontrol.bash +193 -0
- package/scripts/completions/mainwpcontrol.zsh +267 -0
- package/scripts/completions/profile-completer.sh +35 -0
- package/scripts/completions/regenerate.sh +78 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Prompt for MainWP Control chat
|
|
3
|
+
*
|
|
4
|
+
* Embeds the runtime AI behavior contract from CHAT_PROMPT.md.
|
|
5
|
+
* This is executable configuration, not documentation.
|
|
6
|
+
*
|
|
7
|
+
* INVARIANT: AI is the primary interaction surface, NOT the execution authority.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Core system prompt content
|
|
11
|
+
* Derived from CHAT_PROMPT.md (authoritative document)
|
|
12
|
+
*/
|
|
13
|
+
const CORE_PROMPT = `You are an AI assistant embedded in MainWP Control (\`mainwpcontrol\`), a command-line tool for MainWP Dashboard management.
|
|
14
|
+
|
|
15
|
+
## Role
|
|
16
|
+
|
|
17
|
+
You are the **primary interaction surface**.
|
|
18
|
+
You are **NOT** an execution authority.
|
|
19
|
+
|
|
20
|
+
## Absolute Prohibitions
|
|
21
|
+
|
|
22
|
+
You must NEVER:
|
|
23
|
+
- Execute actions directly
|
|
24
|
+
- Bypass validation or safety checks
|
|
25
|
+
- Invent abilities or parameters that don't exist
|
|
26
|
+
- Auto-confirm destructive operations
|
|
27
|
+
- Retry execution automatically without user knowledge
|
|
28
|
+
|
|
29
|
+
Only the MainWP Abilities API executes actions. You propose tool calls; the system executes them.
|
|
30
|
+
|
|
31
|
+
## Tool Usage Contract
|
|
32
|
+
|
|
33
|
+
Each turn, you MUST output exactly ONE of:
|
|
34
|
+
- A tool call: \`{ "tool": "<tool_name>", "input": { ... } }\`
|
|
35
|
+
- An answer: \`{ "answer": "<human-readable response>" }\`
|
|
36
|
+
|
|
37
|
+
NEVER output both in the same turn.
|
|
38
|
+
NEVER output anything else.
|
|
39
|
+
|
|
40
|
+
## Destructive Safety Rules
|
|
41
|
+
|
|
42
|
+
If an ability is marked destructive, you MUST follow this flow:
|
|
43
|
+
1. First call with \`dry_run: true\` to preview changes
|
|
44
|
+
2. Present the preview results to the user
|
|
45
|
+
3. Ask for explicit user approval
|
|
46
|
+
4. Only after approval, call with \`confirm: true\`
|
|
47
|
+
|
|
48
|
+
NEVER skip the preview step for destructive actions.
|
|
49
|
+
NEVER inject \`confirm: true\` without explicit user approval.
|
|
50
|
+
|
|
51
|
+
## Error Handling
|
|
52
|
+
|
|
53
|
+
- Missing required inputs → Ask the user to provide them
|
|
54
|
+
- Invalid tool call → System will inform you; reformulate
|
|
55
|
+
- Repeated failures → Explain the situation and suggest next steps
|
|
56
|
+
|
|
57
|
+
Always fail safely and visibly.
|
|
58
|
+
|
|
59
|
+
## Response Format
|
|
60
|
+
|
|
61
|
+
Your response MUST be valid JSON in one of these formats:
|
|
62
|
+
|
|
63
|
+
Tool call format:
|
|
64
|
+
\`\`\`json
|
|
65
|
+
{
|
|
66
|
+
"tool": "ability-name-v1",
|
|
67
|
+
"input": {
|
|
68
|
+
"param1": "value1"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
Answer format:
|
|
74
|
+
\`\`\`json
|
|
75
|
+
{
|
|
76
|
+
"answer": "Your response to the user"
|
|
77
|
+
}
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
## Key Principle
|
|
81
|
+
|
|
82
|
+
AI is the primary interaction surface, NOT the execution authority.
|
|
83
|
+
You interpret intent, explain consequences, and summarize results.
|
|
84
|
+
The system handles all actual execution through the Abilities API.`;
|
|
85
|
+
/**
|
|
86
|
+
* Format ability for inclusion in system prompt
|
|
87
|
+
*/
|
|
88
|
+
function formatAbility(ability) {
|
|
89
|
+
const annotations = ability.meta?.annotations;
|
|
90
|
+
const tags = [];
|
|
91
|
+
if (annotations?.readonly)
|
|
92
|
+
tags.push('readonly');
|
|
93
|
+
if (annotations?.destructive)
|
|
94
|
+
tags.push('DESTRUCTIVE');
|
|
95
|
+
if (annotations?.idempotent)
|
|
96
|
+
tags.push('idempotent');
|
|
97
|
+
const tagStr = tags.length > 0 ? ` [${tags.join(', ')}]` : '';
|
|
98
|
+
return `- **${ability.name}**${tagStr}: ${ability.description}`;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Build abilities section for system prompt
|
|
102
|
+
*/
|
|
103
|
+
function buildAbilitiesSection(abilities) {
|
|
104
|
+
if (abilities.length === 0) {
|
|
105
|
+
return '\n## Available Tools\n\nNo abilities available. Please check Dashboard connection.';
|
|
106
|
+
}
|
|
107
|
+
// Group by category
|
|
108
|
+
const byCategory = new Map();
|
|
109
|
+
for (const ability of abilities) {
|
|
110
|
+
const category = ability.category || 'Other';
|
|
111
|
+
const list = byCategory.get(category) ?? [];
|
|
112
|
+
list.push(ability);
|
|
113
|
+
byCategory.set(category, list);
|
|
114
|
+
}
|
|
115
|
+
const sections = ['\n## Available Tools\n'];
|
|
116
|
+
for (const [category, categoryAbilities] of byCategory.entries()) {
|
|
117
|
+
sections.push(`### ${category}\n`);
|
|
118
|
+
for (const ability of categoryAbilities) {
|
|
119
|
+
sections.push(formatAbility(ability));
|
|
120
|
+
}
|
|
121
|
+
sections.push('');
|
|
122
|
+
}
|
|
123
|
+
// Add destructive actions reminder
|
|
124
|
+
const destructive = abilities.filter((a) => a.meta?.annotations?.destructive);
|
|
125
|
+
if (destructive.length > 0) {
|
|
126
|
+
sections.push('\n## Destructive Actions Warning\n');
|
|
127
|
+
sections.push('The following abilities are DESTRUCTIVE and require the preview → approval flow:\n');
|
|
128
|
+
for (const ability of destructive) {
|
|
129
|
+
sections.push(`- ${ability.name}`);
|
|
130
|
+
}
|
|
131
|
+
sections.push('');
|
|
132
|
+
}
|
|
133
|
+
return sections.join('\n');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Build complete system prompt with abilities
|
|
137
|
+
*/
|
|
138
|
+
function buildSystemPrompt(abilities) {
|
|
139
|
+
return CORE_PROMPT + buildAbilitiesSection(abilities);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Default system prompt configuration
|
|
143
|
+
*/
|
|
144
|
+
export const defaultConfig = {
|
|
145
|
+
maxToolCalls: 3,
|
|
146
|
+
maxParseRetries: 2,
|
|
147
|
+
includeSchemas: false,
|
|
148
|
+
maxContextMessages: 20,
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Build system prompt with configuration
|
|
152
|
+
*/
|
|
153
|
+
export function buildConfiguredPrompt(abilities, config = {}) {
|
|
154
|
+
const mergedConfig = { ...defaultConfig, ...config };
|
|
155
|
+
let prompt = buildSystemPrompt(abilities);
|
|
156
|
+
// Add configuration constraints
|
|
157
|
+
prompt += `\n## Constraints\n`;
|
|
158
|
+
prompt += `- Maximum tool calls per turn: ${mergedConfig.maxToolCalls}\n`;
|
|
159
|
+
prompt += `- If you need more tool calls, explain and ask to continue\n`;
|
|
160
|
+
// Add context window constraints (omit if 0/unlimited to avoid misleading text)
|
|
161
|
+
if (mergedConfig.maxContextMessages !== undefined && mergedConfig.maxContextMessages > 0) {
|
|
162
|
+
prompt += `- Context window: ${mergedConfig.maxContextMessages} messages (older messages may be truncated)\n`;
|
|
163
|
+
}
|
|
164
|
+
return prompt;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/chat/system-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Envelope Parser for mainwpcontrol
|
|
3
|
+
*
|
|
4
|
+
* Parses and validates LLM tool call responses.
|
|
5
|
+
* Supports both native function calling (from provider) and JSON in content.
|
|
6
|
+
*
|
|
7
|
+
* Contract (from CHAT_PROMPT.md):
|
|
8
|
+
* - Tool call: { "tool": "<tool_name>", "input": { ... } }
|
|
9
|
+
* - Answer: { "answer": "<human-readable response>" }
|
|
10
|
+
*/
|
|
11
|
+
import type { LLMResponse } from './providers/provider.js';
|
|
12
|
+
import type { Ability } from '../core/abilities-executor.js';
|
|
13
|
+
/**
|
|
14
|
+
* Parsed response types
|
|
15
|
+
*/
|
|
16
|
+
export type ParsedResponse = {
|
|
17
|
+
type: 'tool';
|
|
18
|
+
tool: string;
|
|
19
|
+
input: Record<string, unknown>;
|
|
20
|
+
id?: string;
|
|
21
|
+
} | {
|
|
22
|
+
type: 'answer';
|
|
23
|
+
answer: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'error';
|
|
26
|
+
error: string;
|
|
27
|
+
retryable: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Parse result with metadata
|
|
31
|
+
*/
|
|
32
|
+
export interface ParseResult {
|
|
33
|
+
response: ParsedResponse;
|
|
34
|
+
/** Raw content from LLM */
|
|
35
|
+
rawContent: string;
|
|
36
|
+
/** Whether this came from native function calling */
|
|
37
|
+
nativeFunctionCall: boolean;
|
|
38
|
+
/** Parse attempt count */
|
|
39
|
+
attempts: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Tool envelope parser options
|
|
43
|
+
*/
|
|
44
|
+
export interface ParserOptions {
|
|
45
|
+
/** Known abilities for validation */
|
|
46
|
+
abilities?: Ability[];
|
|
47
|
+
/** Whether to validate tool exists in abilities list */
|
|
48
|
+
validateToolExists?: boolean;
|
|
49
|
+
/** Whether to validate input against schema */
|
|
50
|
+
validateInput?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Parse LLM response to extract tool call or answer
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseResponse(response: LLMResponse, options?: ParserOptions): ParseResult;
|
|
56
|
+
/**
|
|
57
|
+
* Format tool call for display
|
|
58
|
+
*/
|
|
59
|
+
export declare function formatToolCall(tool: string, input: Record<string, unknown>): string;
|
|
60
|
+
/**
|
|
61
|
+
* Format parsed response for display
|
|
62
|
+
*/
|
|
63
|
+
export declare function formatParsedResponse(result: ParseResult): string;
|
|
64
|
+
/**
|
|
65
|
+
* Check if response is retryable
|
|
66
|
+
*/
|
|
67
|
+
export declare function isRetryable(result: ParseResult): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Build retry prompt for invalid JSON
|
|
70
|
+
*/
|
|
71
|
+
export declare function buildRetryPrompt(result: ParseResult): string;
|
|
72
|
+
//# sourceMappingURL=tool-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-envelope.d.ts","sourceRoot":"","sources":["../../src/chat/tool-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAcD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EACrB,OAAO,GAAE,aAAkB,GAC1B,WAAW,CAWb;AAwND;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAWhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAuB5D"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Envelope Parser for mainwpcontrol
|
|
3
|
+
*
|
|
4
|
+
* Parses and validates LLM tool call responses.
|
|
5
|
+
* Supports both native function calling (from provider) and JSON in content.
|
|
6
|
+
*
|
|
7
|
+
* Contract (from CHAT_PROMPT.md):
|
|
8
|
+
* - Tool call: { "tool": "<tool_name>", "input": { ... } }
|
|
9
|
+
* - Answer: { "answer": "<human-readable response>" }
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* JSON extraction patterns
|
|
13
|
+
*/
|
|
14
|
+
const JSON_PATTERNS = [
|
|
15
|
+
// Code block with json
|
|
16
|
+
/```json\s*\n?([\s\S]*?)\n?```/,
|
|
17
|
+
// Code block without language
|
|
18
|
+
/```\s*\n?([\s\S]*?)\n?```/,
|
|
19
|
+
// Raw JSON object
|
|
20
|
+
/(\{[\s\S]*\})/,
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Parse LLM response to extract tool call or answer
|
|
24
|
+
*/
|
|
25
|
+
export function parseResponse(response, options = {}) {
|
|
26
|
+
// First, check for native function calling
|
|
27
|
+
if (response.toolCalls && response.toolCalls.length > 0) {
|
|
28
|
+
const firstToolCall = response.toolCalls[0];
|
|
29
|
+
if (firstToolCall) {
|
|
30
|
+
return parseNativeToolCall(firstToolCall, options);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Otherwise, parse JSON from content
|
|
34
|
+
return parseContentJson(response.content, options);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse native tool call from provider
|
|
38
|
+
*/
|
|
39
|
+
function parseNativeToolCall(toolCall, options) {
|
|
40
|
+
const validation = validateToolCall(toolCall.name, toolCall.arguments, options);
|
|
41
|
+
if (validation) {
|
|
42
|
+
return {
|
|
43
|
+
response: { type: 'error', error: validation, retryable: false },
|
|
44
|
+
rawContent: JSON.stringify(toolCall),
|
|
45
|
+
nativeFunctionCall: true,
|
|
46
|
+
attempts: 1,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
response: {
|
|
51
|
+
type: 'tool',
|
|
52
|
+
tool: toolCall.name,
|
|
53
|
+
input: toolCall.arguments,
|
|
54
|
+
id: toolCall.id,
|
|
55
|
+
},
|
|
56
|
+
rawContent: JSON.stringify(toolCall),
|
|
57
|
+
nativeFunctionCall: true,
|
|
58
|
+
attempts: 1,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Parse JSON from content string
|
|
63
|
+
*/
|
|
64
|
+
function parseContentJson(content, options) {
|
|
65
|
+
const trimmed = content.trim();
|
|
66
|
+
// Try to extract JSON
|
|
67
|
+
let jsonStr = null;
|
|
68
|
+
let attempts = 0;
|
|
69
|
+
for (const pattern of JSON_PATTERNS) {
|
|
70
|
+
attempts++;
|
|
71
|
+
const match = trimmed.match(pattern);
|
|
72
|
+
if (match?.[1]) {
|
|
73
|
+
jsonStr = match[1].trim();
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// If no pattern matched, try the whole content
|
|
78
|
+
if (!jsonStr) {
|
|
79
|
+
jsonStr = trimmed;
|
|
80
|
+
attempts++;
|
|
81
|
+
}
|
|
82
|
+
// Parse JSON
|
|
83
|
+
let parsed;
|
|
84
|
+
try {
|
|
85
|
+
parsed = JSON.parse(jsonStr);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return {
|
|
89
|
+
response: {
|
|
90
|
+
type: 'error',
|
|
91
|
+
error: `Invalid JSON in response: ${jsonStr.slice(0, 100)}...`,
|
|
92
|
+
retryable: true,
|
|
93
|
+
},
|
|
94
|
+
rawContent: content,
|
|
95
|
+
nativeFunctionCall: false,
|
|
96
|
+
attempts,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Validate structure
|
|
100
|
+
if (typeof parsed !== 'object' || parsed === null) {
|
|
101
|
+
return {
|
|
102
|
+
response: {
|
|
103
|
+
type: 'error',
|
|
104
|
+
error: 'Response must be a JSON object',
|
|
105
|
+
retryable: true,
|
|
106
|
+
},
|
|
107
|
+
rawContent: content,
|
|
108
|
+
nativeFunctionCall: false,
|
|
109
|
+
attempts,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const obj = parsed;
|
|
113
|
+
// Check for answer format
|
|
114
|
+
if ('answer' in obj && typeof obj['answer'] === 'string') {
|
|
115
|
+
return {
|
|
116
|
+
response: { type: 'answer', answer: obj['answer'] },
|
|
117
|
+
rawContent: content,
|
|
118
|
+
nativeFunctionCall: false,
|
|
119
|
+
attempts,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// Check for tool format
|
|
123
|
+
if ('tool' in obj && typeof obj['tool'] === 'string') {
|
|
124
|
+
const toolName = obj['tool'];
|
|
125
|
+
const input = typeof obj['input'] === 'object' && obj['input'] !== null
|
|
126
|
+
? obj['input']
|
|
127
|
+
: {};
|
|
128
|
+
const validation = validateToolCall(toolName, input, options);
|
|
129
|
+
if (validation) {
|
|
130
|
+
return {
|
|
131
|
+
response: { type: 'error', error: validation, retryable: false },
|
|
132
|
+
rawContent: content,
|
|
133
|
+
nativeFunctionCall: false,
|
|
134
|
+
attempts,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
response: { type: 'tool', tool: toolName, input },
|
|
139
|
+
rawContent: content,
|
|
140
|
+
nativeFunctionCall: false,
|
|
141
|
+
attempts,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
// Invalid format
|
|
145
|
+
return {
|
|
146
|
+
response: {
|
|
147
|
+
type: 'error',
|
|
148
|
+
error: 'Response must have either "tool" with "input" or "answer" property',
|
|
149
|
+
retryable: true,
|
|
150
|
+
},
|
|
151
|
+
rawContent: content,
|
|
152
|
+
nativeFunctionCall: false,
|
|
153
|
+
attempts,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Validate tool call against known abilities
|
|
158
|
+
*/
|
|
159
|
+
function validateToolCall(toolName, input, options) {
|
|
160
|
+
// Validate tool exists if abilities provided
|
|
161
|
+
if (options.validateToolExists && options.abilities) {
|
|
162
|
+
const ability = findAbility(toolName, options.abilities);
|
|
163
|
+
if (!ability) {
|
|
164
|
+
const availableTools = options.abilities.map((a) => a.name).join(', ');
|
|
165
|
+
return `Unknown tool: "${toolName}". Available tools: ${availableTools}`;
|
|
166
|
+
}
|
|
167
|
+
// Validate required inputs if schema available
|
|
168
|
+
if (options.validateInput && ability.input_schema) {
|
|
169
|
+
const requiredError = validateRequiredInputs(input, ability.input_schema);
|
|
170
|
+
if (requiredError) {
|
|
171
|
+
return requiredError;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Find ability by name (supports short name and full name)
|
|
179
|
+
*/
|
|
180
|
+
function findAbility(name, abilities) {
|
|
181
|
+
// Exact match
|
|
182
|
+
const exact = abilities.find((a) => a.name === name);
|
|
183
|
+
if (exact)
|
|
184
|
+
return exact;
|
|
185
|
+
// Short name match (e.g., "list-sites-v1" matches "mainwp/list-sites-v1")
|
|
186
|
+
const shortMatch = abilities.find((a) => {
|
|
187
|
+
const parts = a.name.split('/');
|
|
188
|
+
return parts[parts.length - 1] === name;
|
|
189
|
+
});
|
|
190
|
+
if (shortMatch)
|
|
191
|
+
return shortMatch;
|
|
192
|
+
// Prefix match (e.g., "mainwp/list-sites-v1" matches "list-sites-v1")
|
|
193
|
+
const prefixMatch = abilities.find((a) => a.name.endsWith(`/${name}`));
|
|
194
|
+
return prefixMatch;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Validate required inputs are present
|
|
198
|
+
*/
|
|
199
|
+
function validateRequiredInputs(input, schema) {
|
|
200
|
+
const required = schema['required'];
|
|
201
|
+
if (!required || required.length === 0) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
const missing = required.filter((key) => !(key in input) || input[key] === undefined);
|
|
205
|
+
if (missing.length > 0) {
|
|
206
|
+
return `Missing required parameters: ${missing.join(', ')}`;
|
|
207
|
+
}
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Format tool call for display
|
|
212
|
+
*/
|
|
213
|
+
export function formatToolCall(tool, input) {
|
|
214
|
+
const inputStr = JSON.stringify(input, null, 2);
|
|
215
|
+
return `Tool: ${tool}\nInput: ${inputStr}`;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Format parsed response for display
|
|
219
|
+
*/
|
|
220
|
+
export function formatParsedResponse(result) {
|
|
221
|
+
const { response } = result;
|
|
222
|
+
switch (response.type) {
|
|
223
|
+
case 'tool':
|
|
224
|
+
return formatToolCall(response.tool, response.input);
|
|
225
|
+
case 'answer':
|
|
226
|
+
return response.answer;
|
|
227
|
+
case 'error':
|
|
228
|
+
return `Error: ${response.error}`;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Check if response is retryable
|
|
233
|
+
*/
|
|
234
|
+
export function isRetryable(result) {
|
|
235
|
+
return result.response.type === 'error' && result.response.retryable;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Build retry prompt for invalid JSON
|
|
239
|
+
*/
|
|
240
|
+
export function buildRetryPrompt(result) {
|
|
241
|
+
if (result.response.type !== 'error') {
|
|
242
|
+
return '';
|
|
243
|
+
}
|
|
244
|
+
return `Your previous response was not valid JSON. Error: ${result.response.error}
|
|
245
|
+
|
|
246
|
+
Please respond with a valid JSON object in one of these formats:
|
|
247
|
+
|
|
248
|
+
Tool call:
|
|
249
|
+
\`\`\`json
|
|
250
|
+
{
|
|
251
|
+
"tool": "ability-name-v1",
|
|
252
|
+
"input": { "param1": "value1" }
|
|
253
|
+
}
|
|
254
|
+
\`\`\`
|
|
255
|
+
|
|
256
|
+
Or answer:
|
|
257
|
+
\`\`\`json
|
|
258
|
+
{
|
|
259
|
+
"answer": "Your response here"
|
|
260
|
+
}
|
|
261
|
+
\`\`\``;
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=tool-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-envelope.js","sourceRoot":"","sources":["../../src/chat/tool-envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abilities info command for mainwpcontrol
|
|
3
|
+
*
|
|
4
|
+
* Shows detailed information about a specific ability.
|
|
5
|
+
*/
|
|
6
|
+
import { BaseCommand } from '../../lib/base-command.js';
|
|
7
|
+
export default class AbilitiesInfo extends BaseCommand {
|
|
8
|
+
static description: string;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static flags: {
|
|
11
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
};
|
|
16
|
+
static args: {
|
|
17
|
+
name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/commands/abilities/info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAe,MAAM,2BAA2B,CAAC;AAIrE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,WAAW,SAA+C;IAEjE,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;MAEV;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkE3B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abilities info command for mainwpcontrol
|
|
3
|
+
*
|
|
4
|
+
* Shows detailed information about a specific ability.
|
|
5
|
+
*/
|
|
6
|
+
import { Args } from '@oclif/core';
|
|
7
|
+
import { BaseCommand, commonFlags } from '../../lib/base-command.js';
|
|
8
|
+
import { formatHeading, formatKeyValue } from '../../output/formatter.js';
|
|
9
|
+
import { InputError } from '../../utils/errors.js';
|
|
10
|
+
export default class AbilitiesInfo extends BaseCommand {
|
|
11
|
+
static description = 'Get detailed information about an ability';
|
|
12
|
+
static examples = [
|
|
13
|
+
'<%= config.bin %> abilities info list-sites-v1',
|
|
14
|
+
'<%= config.bin %> abilities info mainwp/delete-site-v1 --json',
|
|
15
|
+
];
|
|
16
|
+
static flags = {
|
|
17
|
+
...commonFlags,
|
|
18
|
+
};
|
|
19
|
+
static args = {
|
|
20
|
+
name: Args.string({
|
|
21
|
+
description: 'Ability name (e.g., list-sites-v1)',
|
|
22
|
+
required: true,
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
async run() {
|
|
26
|
+
const { args, flags } = await this.parse(AbilitiesInfo);
|
|
27
|
+
await this.initCommon(flags);
|
|
28
|
+
const executor = await this.getExecutor();
|
|
29
|
+
const ability = await executor.getAbility(args.name);
|
|
30
|
+
if (!ability) {
|
|
31
|
+
throw new InputError(`Ability not found: ${args.name}. Run \`mainwpcontrol abilities list\` to see available abilities.`);
|
|
32
|
+
}
|
|
33
|
+
this.output({
|
|
34
|
+
name: ability.name,
|
|
35
|
+
label: ability.label,
|
|
36
|
+
description: ability.description,
|
|
37
|
+
category: ability.category,
|
|
38
|
+
annotations: ability.meta?.annotations ?? {},
|
|
39
|
+
inputSchema: ability.input_schema,
|
|
40
|
+
outputSchema: ability.output_schema,
|
|
41
|
+
}, () => {
|
|
42
|
+
const lines = [
|
|
43
|
+
formatHeading(ability.label || ability.name),
|
|
44
|
+
'',
|
|
45
|
+
ability.description,
|
|
46
|
+
'',
|
|
47
|
+
formatKeyValue('Name', ability.name),
|
|
48
|
+
formatKeyValue('Category', ability.category),
|
|
49
|
+
'',
|
|
50
|
+
formatHeading('Annotations'),
|
|
51
|
+
];
|
|
52
|
+
const annotations = ability.meta?.annotations;
|
|
53
|
+
if (annotations) {
|
|
54
|
+
lines.push(formatKeyValue(' Readonly', annotations.readonly ? 'Yes' : 'No'));
|
|
55
|
+
lines.push(formatKeyValue(' Destructive', annotations.destructive ? 'Yes' : 'No'));
|
|
56
|
+
lines.push(formatKeyValue(' Idempotent', annotations.idempotent ? 'Yes' : 'No'));
|
|
57
|
+
if (annotations.instructions) {
|
|
58
|
+
lines.push('');
|
|
59
|
+
lines.push(formatHeading('Instructions'));
|
|
60
|
+
lines.push(annotations.instructions);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
lines.push(' (no annotations)');
|
|
65
|
+
}
|
|
66
|
+
if (ability.input_schema) {
|
|
67
|
+
lines.push('');
|
|
68
|
+
lines.push(formatHeading('Input Schema'));
|
|
69
|
+
lines.push(JSON.stringify(ability.input_schema, null, 2));
|
|
70
|
+
}
|
|
71
|
+
if (ability.output_schema) {
|
|
72
|
+
lines.push('');
|
|
73
|
+
lines.push(formatHeading('Output Schema'));
|
|
74
|
+
lines.push(JSON.stringify(ability.output_schema, null, 2));
|
|
75
|
+
}
|
|
76
|
+
return lines.join('\n');
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/abilities/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abilities list command for mainwpcontrol
|
|
3
|
+
*
|
|
4
|
+
* Lists all available abilities from the Dashboard.
|
|
5
|
+
*/
|
|
6
|
+
import { BaseCommand } from '../../lib/base-command.js';
|
|
7
|
+
export default class AbilitiesList extends BaseCommand {
|
|
8
|
+
static description: string;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static flags: {
|
|
11
|
+
category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/abilities/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAe,MAAM,2BAA2B,CAAC;AAKrE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;MAMV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0F3B"}
|