@hiai-gg/hiai-opencode 0.1.5 → 0.1.6
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/.env.example +14 -8
- package/AGENTS.md +14 -5
- package/LICENSE.md +0 -1
- package/README.md +42 -23
- package/assets/cli/hiai-opencode.mjs +590 -7
- package/assets/mcp/mempalace.mjs +159 -25
- package/config/hiai-opencode.schema.json +13 -2
- package/dist/agents/dynamic-agent-core-sections.d.ts +4 -1
- package/dist/agents/dynamic-agent-prompt-builder.d.ts +1 -1
- package/dist/config/platform-schema.d.ts +2 -6
- package/dist/config/schema/commands.d.ts +1 -0
- package/dist/config/schema/oh-my-opencode-config.d.ts +1 -3
- package/dist/config/types.d.ts +1 -3
- package/dist/features/builtin-commands/templates/doctor.d.ts +1 -0
- package/dist/features/builtin-commands/types.d.ts +1 -1
- package/dist/features/builtin-skills/skills/hiai-opencode-setup.d.ts +2 -0
- package/dist/features/builtin-skills/skills/index.d.ts +1 -0
- package/dist/index.js +348 -1424
- package/dist/shared/mcp-static-export.d.ts +22 -0
- package/dist/tools/ast-grep/constants.d.ts +1 -1
- package/dist/tools/ast-grep/environment-check.d.ts +1 -5
- package/dist/tools/ast-grep/language-support.d.ts +0 -1
- package/dist/tools/ast-grep/types.d.ts +1 -2
- package/hiai-opencode.json +4 -2
- package/package.json +6 -4
- package/src/agents/bob/default.ts +6 -1
- package/src/agents/bob/gpt-pro.ts +1 -0
- package/src/agents/bob.ts +1 -0
- package/src/agents/coder/gpt-codex.ts +1 -0
- package/src/agents/coder/gpt-pro.ts +1 -0
- package/src/agents/coder/gpt.ts +1 -0
- package/src/agents/dynamic-agent-core-sections.ts +36 -0
- package/src/agents/dynamic-agent-prompt-builder.ts +1 -0
- package/src/config/defaults.ts +14 -1
- package/src/config/model-slots-and-export.test.ts +55 -0
- package/src/config/platform-schema.ts +1 -3
- package/src/config/schema/commands.ts +1 -0
- package/src/config/schema/oh-my-opencode-config.ts +0 -3
- package/src/config/types.ts +1 -3
- package/src/features/builtin-commands/commands.ts +7 -0
- package/src/features/builtin-commands/templates/doctor.ts +43 -0
- package/src/features/builtin-commands/types.ts +1 -1
- package/src/features/builtin-skills/skills/hiai-opencode-setup.ts +69 -0
- package/src/features/builtin-skills/skills/index.ts +1 -0
- package/src/features/builtin-skills/skills.ts +10 -1
- package/src/index.ts +3 -75
- package/src/shared/mcp-static-export.ts +121 -0
- package/src/tools/ast-grep/constants.ts +1 -1
- package/src/tools/ast-grep/environment-check.ts +2 -32
- package/src/tools/ast-grep/language-support.ts +0 -3
- package/src/tools/ast-grep/types.ts +1 -2
- package/src/tools/skill-mcp/tools.test.ts +44 -0
- package/dist/ast-grep-napi.win32-x64-msvc-67c0y8nc.node +0 -0
- package/dist/config/loader.test.d.ts +0 -1
- package/dist/config/models.d.ts +0 -13
- package/dist/internals/plugins/websearch-cited/google.d.ts +0 -38
- package/dist/internals/plugins/websearch-cited/index.d.ts +0 -17
- package/dist/internals/plugins/websearch-cited/openai.d.ts +0 -9
- package/dist/internals/plugins/websearch-cited/openrouter.d.ts +0 -2
- package/dist/internals/plugins/websearch-cited/types.d.ts +0 -5
- package/src/internals/plugins/websearch-cited/LICENSE +0 -214
- package/src/internals/plugins/websearch-cited/codex_prompt.txt +0 -79
- package/src/internals/plugins/websearch-cited/google.ts +0 -749
- package/src/internals/plugins/websearch-cited/index.ts +0 -306
- package/src/internals/plugins/websearch-cited/openai.ts +0 -407
- package/src/internals/plugins/websearch-cited/openrouter.ts +0 -190
- package/src/internals/plugins/websearch-cited/types.ts +0 -7
package/assets/mcp/mempalace.mjs
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { mkdirSync } from "node:fs";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { spawn, spawnSync } from "node:child_process";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import { parse as parseJsonc } from "jsonc-parser";
|
|
7
9
|
|
|
8
10
|
function resolveCacheRoot() {
|
|
9
11
|
const xdgCache = process.env.XDG_CACHE_HOME?.trim();
|
|
@@ -27,14 +29,103 @@ function parsePalacePath(argv) {
|
|
|
27
29
|
|| join(resolveCacheRoot(), "hiai-opencode", "mempalace-palace");
|
|
28
30
|
}
|
|
29
31
|
|
|
32
|
+
function resolveEnvTemplate(value) {
|
|
33
|
+
if (typeof value !== "string") return "";
|
|
34
|
+
return value.replace(/\{env:([^}]+)\}/g, (_match, expression) => {
|
|
35
|
+
const [name, fallback] = String(expression).split(":-", 2);
|
|
36
|
+
return process.env[name] || fallback || "";
|
|
37
|
+
}).trim();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function candidateConfigPaths() {
|
|
41
|
+
const cwd = process.cwd();
|
|
42
|
+
const home = homedir();
|
|
43
|
+
const paths = [
|
|
44
|
+
join(cwd, "hiai-opencode.json"),
|
|
45
|
+
join(cwd, "hiai-opencode.jsonc"),
|
|
46
|
+
join(cwd, ".opencode", "hiai-opencode.json"),
|
|
47
|
+
join(cwd, ".opencode", "hiai-opencode.jsonc"),
|
|
48
|
+
join(home, ".config", "opencode", "hiai-opencode.json"),
|
|
49
|
+
join(home, ".config", "opencode", "hiai-opencode.jsonc"),
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
if (process.platform === "win32" && process.env.APPDATA) {
|
|
53
|
+
paths.push(join(process.env.APPDATA, "opencode", "hiai-opencode.json"));
|
|
54
|
+
paths.push(join(process.env.APPDATA, "opencode", "hiai-opencode.jsonc"));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return paths;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function loadUserConfig() {
|
|
61
|
+
for (const path of candidateConfigPaths()) {
|
|
62
|
+
if (!existsSync(path)) continue;
|
|
63
|
+
try {
|
|
64
|
+
return parseJsonc(readFileSync(path, "utf-8")) ?? {};
|
|
65
|
+
} catch {
|
|
66
|
+
return {};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return {};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getConfiguredPythonPath() {
|
|
73
|
+
const config = loadUserConfig();
|
|
74
|
+
const value = config?.mcp?.mempalace?.pythonPath;
|
|
75
|
+
return resolveEnvTemplate(typeof value === "string" ? value : "");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function resolveVenvPythonCandidates(basePath) {
|
|
79
|
+
if (!basePath) return [];
|
|
80
|
+
|
|
81
|
+
if (process.platform === "win32") {
|
|
82
|
+
return [
|
|
83
|
+
join(basePath, ".venv", "Scripts", "python.exe"),
|
|
84
|
+
join(basePath, "venv", "Scripts", "python.exe"),
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return [
|
|
89
|
+
join(basePath, ".venv", "bin", "python"),
|
|
90
|
+
join(basePath, ".venv", "bin", "python3"),
|
|
91
|
+
join(basePath, "venv", "bin", "python"),
|
|
92
|
+
join(basePath, "venv", "bin", "python3"),
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
|
|
30
96
|
function pythonCandidates() {
|
|
97
|
+
const configPython = getConfiguredPythonPath();
|
|
31
98
|
const explicit = process.env.MEMPALACE_PYTHON?.trim();
|
|
99
|
+
const scriptDir = dirname(fileURLToPath(import.meta.url));
|
|
100
|
+
const pluginRoot = join(scriptDir, "..", "..");
|
|
32
101
|
const candidates = [];
|
|
33
102
|
|
|
34
103
|
if (explicit) {
|
|
35
104
|
candidates.push({ command: explicit, args: [] });
|
|
36
105
|
}
|
|
37
106
|
|
|
107
|
+
if (configPython) {
|
|
108
|
+
candidates.push({ command: configPython, args: [] });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
for (const candidate of resolveVenvPythonCandidates(process.cwd())) {
|
|
112
|
+
if (existsSync(candidate)) {
|
|
113
|
+
candidates.push({ command: candidate, args: [] });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
for (const candidate of resolveVenvPythonCandidates(pluginRoot)) {
|
|
118
|
+
if (existsSync(candidate)) {
|
|
119
|
+
candidates.push({ command: candidate, args: [] });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for (const candidate of resolveVenvPythonCandidates(join(homedir(), ".config", "opencode", "plugins", "hiai-opencode"))) {
|
|
124
|
+
if (existsSync(candidate)) {
|
|
125
|
+
candidates.push({ command: candidate, args: [] });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
38
129
|
if (process.platform === "win32") {
|
|
39
130
|
candidates.push({ command: "py", args: ["-3"] });
|
|
40
131
|
}
|
|
@@ -42,7 +133,13 @@ function pythonCandidates() {
|
|
|
42
133
|
candidates.push({ command: "python3", args: [] });
|
|
43
134
|
candidates.push({ command: "python", args: [] });
|
|
44
135
|
|
|
45
|
-
|
|
136
|
+
const seen = new Set();
|
|
137
|
+
return candidates.filter((candidate) => {
|
|
138
|
+
const key = `${candidate.command}\0${candidate.args.join("\0")}`;
|
|
139
|
+
if (seen.has(key)) return false;
|
|
140
|
+
seen.add(key);
|
|
141
|
+
return true;
|
|
142
|
+
});
|
|
46
143
|
}
|
|
47
144
|
|
|
48
145
|
function hasUv() {
|
|
@@ -57,7 +154,7 @@ function hasUv() {
|
|
|
57
154
|
function canRunModule(candidate, moduleName) {
|
|
58
155
|
const probe = spawnSync(
|
|
59
156
|
candidate.command,
|
|
60
|
-
[...candidate.args, "-c", `import importlib
|
|
157
|
+
[...candidate.args, "-c", `import importlib, sys; importlib.import_module("${moduleName}")`],
|
|
61
158
|
{ stdio: "ignore", timeout: 10000 },
|
|
62
159
|
);
|
|
63
160
|
|
|
@@ -105,6 +202,31 @@ function installMempalaceWithPip(candidate) {
|
|
|
105
202
|
return result.status === 0 && canRunModule(candidate, "mempalace.mcp_server");
|
|
106
203
|
}
|
|
107
204
|
|
|
205
|
+
function spawnWithUv(uvBinary, palacePath) {
|
|
206
|
+
return spawn(
|
|
207
|
+
uvBinary,
|
|
208
|
+
[
|
|
209
|
+
"tool",
|
|
210
|
+
"run",
|
|
211
|
+
"--from",
|
|
212
|
+
"mempalace[all]>=3.3.0",
|
|
213
|
+
"python",
|
|
214
|
+
"-m",
|
|
215
|
+
"mempalace.mcp_server",
|
|
216
|
+
"--palace",
|
|
217
|
+
palacePath,
|
|
218
|
+
],
|
|
219
|
+
{
|
|
220
|
+
stdio: "inherit",
|
|
221
|
+
env: {
|
|
222
|
+
...process.env,
|
|
223
|
+
UV_CACHE_DIR: resolveUvCacheRoot(),
|
|
224
|
+
MEMPALACE_PALACE_PATH: palacePath,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
|
|
108
230
|
function resolveUvCacheRoot() {
|
|
109
231
|
return process.env.UV_CACHE_DIR
|
|
110
232
|
|| join(resolveCacheRoot(), "hiai-opencode", "uv");
|
|
@@ -129,30 +251,30 @@ function main() {
|
|
|
129
251
|
const palacePath = parsePalacePath(process.argv.slice(2));
|
|
130
252
|
mkdirSync(palacePath, { recursive: true });
|
|
131
253
|
|
|
254
|
+
const configuredPython =
|
|
255
|
+
process.env.MEMPALACE_PYTHON?.trim() || getConfiguredPythonPath();
|
|
256
|
+
if (configuredPython) {
|
|
257
|
+
const configuredCandidate = { command: configuredPython, args: [] };
|
|
258
|
+
if (canRunModule(configuredCandidate, "mempalace.mcp_server")) {
|
|
259
|
+
const configuredChild = spawn(
|
|
260
|
+
configuredCandidate.command,
|
|
261
|
+
[...configuredCandidate.args, "-m", "mempalace.mcp_server", "--palace", palacePath],
|
|
262
|
+
{
|
|
263
|
+
stdio: "inherit",
|
|
264
|
+
env: {
|
|
265
|
+
...process.env,
|
|
266
|
+
MEMPALACE_PALACE_PATH: palacePath,
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
);
|
|
270
|
+
forwardChildExit(configuredChild, "[hiai-opencode] mempalace launcher failed:");
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
132
275
|
const uvBinary = hasUv();
|
|
133
276
|
if (uvBinary) {
|
|
134
|
-
const child =
|
|
135
|
-
uvBinary,
|
|
136
|
-
[
|
|
137
|
-
"tool",
|
|
138
|
-
"run",
|
|
139
|
-
"--from",
|
|
140
|
-
"mempalace[all]>=3.3.0",
|
|
141
|
-
"python",
|
|
142
|
-
"-m",
|
|
143
|
-
"mempalace.mcp_server",
|
|
144
|
-
"--palace",
|
|
145
|
-
palacePath,
|
|
146
|
-
],
|
|
147
|
-
{
|
|
148
|
-
stdio: "inherit",
|
|
149
|
-
env: {
|
|
150
|
-
...process.env,
|
|
151
|
-
UV_CACHE_DIR: resolveUvCacheRoot(),
|
|
152
|
-
MEMPALACE_PALACE_PATH: palacePath,
|
|
153
|
-
},
|
|
154
|
-
},
|
|
155
|
-
);
|
|
277
|
+
const child = spawnWithUv(uvBinary, palacePath);
|
|
156
278
|
|
|
157
279
|
forwardChildExit(child, "[hiai-opencode] mempalace uv launcher failed:");
|
|
158
280
|
return;
|
|
@@ -167,10 +289,22 @@ function main() {
|
|
|
167
289
|
if (pipPython && installMempalaceWithPip(pipPython)) {
|
|
168
290
|
return pipPython;
|
|
169
291
|
}
|
|
292
|
+
|
|
293
|
+
const fallbackUv = hasUv();
|
|
294
|
+
if (fallbackUv) {
|
|
295
|
+
const uvChild = spawnWithUv(fallbackUv, palacePath);
|
|
296
|
+
forwardChildExit(uvChild, "[hiai-opencode] mempalace uv fallback failed:");
|
|
297
|
+
return "__uv_fallback_started__";
|
|
298
|
+
}
|
|
299
|
+
|
|
170
300
|
return null;
|
|
171
301
|
})()
|
|
172
302
|
: null);
|
|
173
303
|
|
|
304
|
+
if (fallbackPython === "__uv_fallback_started__") {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
|
|
174
308
|
if (!fallbackPython) {
|
|
175
309
|
console.error(
|
|
176
310
|
"[hiai-opencode] mempalace skipped: install uv or Python 3.9+ with `pip install --user mempalace`",
|
|
@@ -37,7 +37,6 @@
|
|
|
37
37
|
"type": "object",
|
|
38
38
|
"additionalProperties": { "type": "string" },
|
|
39
39
|
"properties": {
|
|
40
|
-
"googleSearch": { "type": "string" },
|
|
41
40
|
"stitch": { "type": "string" },
|
|
42
41
|
"firecrawl": { "type": "string" },
|
|
43
42
|
"context7": { "type": "string" }
|
|
@@ -52,7 +51,7 @@
|
|
|
52
51
|
"sequential-thinking": { "$ref": "#/definitions/toggle" },
|
|
53
52
|
"firecrawl": { "$ref": "#/definitions/toggle" },
|
|
54
53
|
"rag": { "$ref": "#/definitions/toggle" },
|
|
55
|
-
"mempalace": { "$ref": "#/definitions/
|
|
54
|
+
"mempalace": { "$ref": "#/definitions/mempalaceToggle" },
|
|
56
55
|
"context7": { "$ref": "#/definitions/toggle" }
|
|
57
56
|
}
|
|
58
57
|
},
|
|
@@ -112,6 +111,18 @@
|
|
|
112
111
|
},
|
|
113
112
|
"required": ["enabled"],
|
|
114
113
|
"additionalProperties": false
|
|
114
|
+
},
|
|
115
|
+
"mempalaceToggle": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"properties": {
|
|
118
|
+
"enabled": { "type": "boolean", "default": true },
|
|
119
|
+
"pythonPath": {
|
|
120
|
+
"type": "string",
|
|
121
|
+
"description": "Optional explicit Python executable for MemPalace (for example: ./.venv/bin/python)."
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"required": ["enabled"],
|
|
125
|
+
"additionalProperties": false
|
|
115
126
|
}
|
|
116
127
|
}
|
|
117
128
|
}
|
|
@@ -8,7 +8,10 @@ import type { AvailableTool } from "./dynamic-agent-prompt-types";
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function buildAgentIdentitySection(agentName: string, roleDescription: string): string;
|
|
10
10
|
export declare function buildKeyTriggersSection(agents: AvailableAgent[], _skills?: AvailableSkill[]): string;
|
|
11
|
-
export declare function buildToolSelectionTable(agents: AvailableAgent[], tools?: AvailableTool[], _skills?: AvailableSkill[]
|
|
11
|
+
export declare function buildToolSelectionTable(agents: AvailableAgent[], tools?: AvailableTool[], _skills?: AvailableSkill[], options?: {
|
|
12
|
+
includeIntegrationPrimer?: boolean;
|
|
13
|
+
}): string;
|
|
14
|
+
export declare function buildHiaiIntegrationPrimerSection(): string;
|
|
12
15
|
export declare function buildResearcherSection(agents: AvailableAgent[]): string;
|
|
13
16
|
export declare function buildDelegationTable(agents: AvailableAgent[]): string;
|
|
14
17
|
export declare function buildStrategistAndCriticSection(agents: AvailableAgent[]): string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { AvailableAgent, AvailableTool, AvailableSkill, AvailableCategory, } from "./dynamic-agent-prompt-types";
|
|
2
2
|
export { categorizeTools } from "./dynamic-agent-tool-categorization";
|
|
3
|
-
export { buildAgentIdentitySection, buildKeyTriggersSection, buildToolSelectionTable, buildResearcherSection, buildDelegationTable, buildStrategistAndCriticSection, buildNonClaudePlannerSection, buildParallelDelegationSection, } from "./dynamic-agent-core-sections";
|
|
3
|
+
export { buildAgentIdentitySection, buildKeyTriggersSection, buildToolSelectionTable, buildResearcherSection, buildDelegationTable, buildHiaiIntegrationPrimerSection, buildStrategistAndCriticSection, buildNonClaudePlannerSection, buildParallelDelegationSection, } from "./dynamic-agent-core-sections";
|
|
4
4
|
export { buildCategorySkillsDelegationGuide } from "./dynamic-agent-category-skills-guide";
|
|
5
5
|
export { buildHardBlocksSection, buildAntiPatternsSection, buildHardRulesSection, buildToolCallFormatSection, buildUltraworkSection, buildAntiDuplicationSection, buildToolUsageRulesSection, } from "./dynamic-agent-policy-sections";
|
|
@@ -219,6 +219,7 @@ export declare const McpServerConfigSchema: z.ZodObject<{
|
|
|
219
219
|
command: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
220
220
|
timeout: z.ZodOptional<z.ZodNumber>;
|
|
221
221
|
environment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
222
|
+
pythonPath: z.ZodOptional<z.ZodString>;
|
|
222
223
|
}, z.core.$strip>;
|
|
223
224
|
export declare const LspServerConfigSchema: z.ZodObject<{
|
|
224
225
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -311,9 +312,6 @@ export declare const PermissionsConfigSchema: z.ZodObject<{
|
|
|
311
312
|
}>>>;
|
|
312
313
|
}, z.core.$strip>;
|
|
313
314
|
export declare const AuthKeysSchema: z.ZodObject<{
|
|
314
|
-
googleSearch: z.ZodOptional<z.ZodString>;
|
|
315
|
-
openai: z.ZodOptional<z.ZodString>;
|
|
316
|
-
openrouter: z.ZodOptional<z.ZodString>;
|
|
317
315
|
stitch: z.ZodOptional<z.ZodString>;
|
|
318
316
|
firecrawl: z.ZodOptional<z.ZodString>;
|
|
319
317
|
context7: z.ZodOptional<z.ZodString>;
|
|
@@ -1304,6 +1302,7 @@ export declare const HiaiOpencodeConfigSchema: z.ZodObject<{
|
|
|
1304
1302
|
command: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1305
1303
|
timeout: z.ZodOptional<z.ZodNumber>;
|
|
1306
1304
|
environment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
1305
|
+
pythonPath: z.ZodOptional<z.ZodString>;
|
|
1307
1306
|
}, z.core.$strip>>>;
|
|
1308
1307
|
lsp: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
1309
1308
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -1396,9 +1395,6 @@ export declare const HiaiOpencodeConfigSchema: z.ZodObject<{
|
|
|
1396
1395
|
}>>>;
|
|
1397
1396
|
}, z.core.$strip>>;
|
|
1398
1397
|
auth: z.ZodOptional<z.ZodObject<{
|
|
1399
|
-
googleSearch: z.ZodOptional<z.ZodString>;
|
|
1400
|
-
openai: z.ZodOptional<z.ZodString>;
|
|
1401
|
-
openrouter: z.ZodOptional<z.ZodString>;
|
|
1402
1398
|
stitch: z.ZodOptional<z.ZodString>;
|
|
1403
1399
|
firecrawl: z.ZodOptional<z.ZodString>;
|
|
1404
1400
|
context7: z.ZodOptional<z.ZodString>;
|
|
@@ -9,5 +9,6 @@ export declare const BuiltinCommandNameSchema: z.ZodEnum<{
|
|
|
9
9
|
"stop-continuation": "stop-continuation";
|
|
10
10
|
"remove-ai-slops": "remove-ai-slops";
|
|
11
11
|
"mcp-status": "mcp-status";
|
|
12
|
+
doctor: "doctor";
|
|
12
13
|
}>;
|
|
13
14
|
export type BuiltinCommandName = z.infer<typeof BuiltinCommandNameSchema>;
|
|
@@ -26,6 +26,7 @@ export declare const HiaiOpenCodeConfigSchema: z.ZodObject<{
|
|
|
26
26
|
"stop-continuation": "stop-continuation";
|
|
27
27
|
"remove-ai-slops": "remove-ai-slops";
|
|
28
28
|
"mcp-status": "mcp-status";
|
|
29
|
+
doctor: "doctor";
|
|
29
30
|
}>>>;
|
|
30
31
|
disabled_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
32
|
mcp_env_allowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -4216,9 +4217,6 @@ export declare const HiaiOpenCodeConfigSchema: z.ZodObject<{
|
|
|
4216
4217
|
timeout_ms: z.ZodDefault<z.ZodNumber>;
|
|
4217
4218
|
}, z.core.$strip>>;
|
|
4218
4219
|
auth: z.ZodOptional<z.ZodObject<{
|
|
4219
|
-
googleSearch: z.ZodOptional<z.ZodString>;
|
|
4220
|
-
openai: z.ZodOptional<z.ZodString>;
|
|
4221
|
-
openrouter: z.ZodOptional<z.ZodString>;
|
|
4222
4220
|
stitch: z.ZodOptional<z.ZodString>;
|
|
4223
4221
|
firecrawl: z.ZodOptional<z.ZodString>;
|
|
4224
4222
|
context7: z.ZodOptional<z.ZodString>;
|
package/dist/config/types.d.ts
CHANGED
|
@@ -72,6 +72,7 @@ export interface McpServerConfig {
|
|
|
72
72
|
command?: string[];
|
|
73
73
|
timeout?: number;
|
|
74
74
|
environment?: Record<string, string>;
|
|
75
|
+
pythonPath?: string;
|
|
75
76
|
}
|
|
76
77
|
export interface LspServerConfig {
|
|
77
78
|
enabled?: boolean;
|
|
@@ -103,9 +104,6 @@ export interface PermissionsConfig {
|
|
|
103
104
|
deny_paths?: string[];
|
|
104
105
|
}
|
|
105
106
|
export interface AuthKeys {
|
|
106
|
-
googleSearch?: string;
|
|
107
|
-
openai?: string;
|
|
108
|
-
openrouter?: string;
|
|
109
107
|
stitch?: string;
|
|
110
108
|
firecrawl?: string;
|
|
111
109
|
context7?: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DOCTOR_TEMPLATE = "# Hiai OpenCode Doctor Command\n\n## Purpose\n\nUse /doctor to run the hiai-opencode install/runtime diagnostic and report actionable setup issues.\n\n## Execute\n\nRun:\n\n```bash\nhiai-opencode doctor\n```\n\nIf the binary is not on PATH, try the package-local fallback:\n\n```bash\nnode ./node_modules/@hiai-gg/hiai-opencode/assets/cli/hiai-opencode.mjs doctor\n```\n\n## Report\n\nSummarize:\n\n- config path\n- enabled and disabled MCP servers\n- missing env vars by name only\n- static `.mcp.json` freshness and whether it is managed by hiai-opencode\n- OpenCode Connect visibility for configured model providers\n- OpenCode plugin registration sanity (including `plugin: [\"list\"]` misconfiguration warning)\n- skill materialization status from skill registry\n- agent count and naming summary\n- LSP runtime availability\n- MemPalace python source and selected interpreter (env/config/auto)\n- MCP tool probes (real connect + tools/list) for stdio and basic endpoint probes for remote MCP\n\nRules:\n\n- Do not print API key values.\n- Do not ask for model provider env vars such as OPENROUTER_API_KEY or OPENAI_API_KEY; normal model auth belongs to OpenCode Connect.\n- If `opencode mcp list` is empty but doctor/mcp-status sees servers, explain the runtime-vs-static config distinction and run `hiai-opencode export-mcp .mcp.json` if the user wants static visibility.\n- Do not run package installs unless the user explicitly asks.\n";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CommandDefinition } from "../claude-code-command-loader";
|
|
2
|
-
export type BuiltinCommandName = "init-deep" | "ralph-loop" | "cancel-ralph" | "ulw-loop" | "refactor" | "start-work" | "stop-continuation" | "handoff" | "remove-ai-slops" | "mcp-status";
|
|
2
|
+
export type BuiltinCommandName = "init-deep" | "ralph-loop" | "cancel-ralph" | "ulw-loop" | "refactor" | "start-work" | "stop-continuation" | "handoff" | "remove-ai-slops" | "mcp-status" | "doctor";
|
|
3
3
|
export interface BuiltinCommandConfig {
|
|
4
4
|
disabled_commands?: BuiltinCommandName[];
|
|
5
5
|
}
|