@burmese/opencode 3.1.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 +21 -0
- package/dist/check-opencode-foundation.d.ts +2 -0
- package/dist/check-opencode-foundation.d.ts.map +1 -0
- package/dist/check-opencode-foundation.js +245 -0
- package/dist/check-opencode-foundation.js.map +1 -0
- package/dist/check-opencode-plugin.d.ts +2 -0
- package/dist/check-opencode-plugin.d.ts.map +1 -0
- package/dist/check-opencode-plugin.js +107 -0
- package/dist/check-opencode-plugin.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/opencode-config.d.ts +44 -0
- package/dist/opencode-config.d.ts.map +1 -0
- package/dist/opencode-config.js +213 -0
- package/dist/opencode-config.js.map +1 -0
- package/dist/opencode-global-setup.d.ts +42 -0
- package/dist/opencode-global-setup.d.ts.map +1 -0
- package/dist/opencode-global-setup.js +378 -0
- package/dist/opencode-global-setup.js.map +1 -0
- package/dist/opencode-plugin-runtime.d.ts +38 -0
- package/dist/opencode-plugin-runtime.d.ts.map +1 -0
- package/dist/opencode-plugin-runtime.js +213 -0
- package/dist/opencode-plugin-runtime.js.map +1 -0
- package/dist/opencode-previews.d.ts +25 -0
- package/dist/opencode-previews.d.ts.map +1 -0
- package/dist/opencode-previews.js +37 -0
- package/dist/opencode-previews.js.map +1 -0
- package/dist/opencode-project-setup.d.ts +27 -0
- package/dist/opencode-project-setup.d.ts.map +1 -0
- package/dist/opencode-project-setup.js +180 -0
- package/dist/opencode-project-setup.js.map +1 -0
- package/dist/opencode-status.d.ts +14 -0
- package/dist/opencode-status.d.ts.map +1 -0
- package/dist/opencode-status.js +145 -0
- package/dist/opencode-status.js.map +1 -0
- package/dist/plugin.d.ts +8 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +8 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +44 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenPets
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-opencode-foundation.d.ts","sourceRoot":"","sources":["../src/check-opencode-foundation.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { hookSpeechPools, validateHookSpeech } from "@burmese/agent-events";
|
|
6
|
+
import { createOpenCodeExecutableDetection, executePlannedWrite, getGlobalOpenCodeConfigDir, getGlobalOpenCodeConfigPaths, getProjectOpenCodeConfigPaths, parseOpenCodeConfig, planOpenCodeConfigWrite, selectProjectOpenCodeConfigPath, updateOpenCodeConfigText } from "./opencode-config.js";
|
|
7
|
+
import { buildOpenCodeInstructionPath, buildOpenCodeMcpEntry, buildOpenCodePluginPreview, formatOpenCodeMcpConfig } from "./opencode-previews.js";
|
|
8
|
+
import { doctorOpenCodeGlobalSetup, prepareOpenCodeGlobalRemove, prepareOpenCodeGlobalSetup, writePreparedOpenCodeGlobalRemove, writePreparedOpenCodeGlobalSetup } from "./opencode-global-setup.js";
|
|
9
|
+
import { classifyOpenCodeInstructionsStatus, classifyOpenCodeMcpStatus, classifyOpenCodePluginStatus } from "./opencode-status.js";
|
|
10
|
+
const root = mkdtempSync(join(tmpdir(), "openpets-opencode-"));
|
|
11
|
+
try {
|
|
12
|
+
const project = join(root, "project");
|
|
13
|
+
mkdirSync(project);
|
|
14
|
+
const paths = getProjectOpenCodeConfigPaths(project);
|
|
15
|
+
assert.deepEqual(paths.candidates.map((path) => path.slice(project.length + 1)), ["opencode.json", "opencode.jsonc", ".opencode/opencode.json", ".opencode/opencode.jsonc"]);
|
|
16
|
+
assert.equal(selectProjectOpenCodeConfigPath(project), join(project, ".opencode", "opencode.jsonc"));
|
|
17
|
+
mkdirSync(join(project, ".opencode"));
|
|
18
|
+
writeFileSync(join(project, ".opencode", "opencode.jsonc"), "{}\n");
|
|
19
|
+
assert.equal(selectProjectOpenCodeConfigPath(project), join(project, ".opencode", "opencode.jsonc"));
|
|
20
|
+
writeFileSync(join(project, "opencode.json"), "{}\n");
|
|
21
|
+
assert.equal(selectProjectOpenCodeConfigPath(project), join(project, "opencode.json"));
|
|
22
|
+
assert.equal(getGlobalOpenCodeConfigDir({ OPENCODE_CONFIG_DIR: join(root, "custom") }, root, "linux"), join(root, "custom"));
|
|
23
|
+
assert.equal(getGlobalOpenCodeConfigDir({ XDG_CONFIG_HOME: join(root, "xdg") }, root, "linux"), join(root, "xdg", "opencode"));
|
|
24
|
+
assert.equal(getGlobalOpenCodeConfigDir({ APPDATA: join(root, "appdata") }, root, "win32"), join(root, "appdata", "opencode"));
|
|
25
|
+
assert.deepEqual(getGlobalOpenCodeConfigPaths({ OPENCODE_CONFIG_DIR: join(root, "global") }, root, "linux").candidates.map((path) => path.slice(join(root, "global").length + 1)), ["config.json", "opencode.json", "opencode.jsonc"]);
|
|
26
|
+
assert.deepEqual(createOpenCodeExecutableDetection({ platform: "win32" }).command, "opencode.cmd");
|
|
27
|
+
assert.deepEqual(createOpenCodeExecutableDetection({ platform: "darwin" }).command, "opencode");
|
|
28
|
+
assert.deepEqual(formatOpenCodeMcpConfig({ cliVersion: "0.0.0", petId: "fixer" }), { mcp: { openpets: { type: "local", command: ["npx", "-y", "@burmese/cli@0.0.0", "mcp", "--pet", "fixer"], enabled: true } } });
|
|
29
|
+
assert.deepEqual(buildOpenCodeMcpEntry({ cliVersion: "0.0.0" }), { type: "local", command: ["npx", "-y", "@burmese/cli@0.0.0", "mcp"], enabled: true });
|
|
30
|
+
assert.deepEqual(buildOpenCodeMcpEntry({ cliVersion: "0.0.0", environment: { OPENPETS_DISCOVERY_FILE: "/mnt/c/Users/alvin/AppData/Roaming/OpenPets/runtime/ipc.json" } }), { type: "local", command: ["npx", "-y", "@burmese/cli@0.0.0", "mcp"], enabled: true, environment: { OPENPETS_DISCOVERY_FILE: "/mnt/c/Users/alvin/AppData/Roaming/OpenPets/runtime/ipc.json" } });
|
|
31
|
+
assert.deepEqual(buildOpenCodeMcpEntry({ cliVersion: "0.0.0", commandMode: "local", cliEntryPath: join(root, "cli.js"), petId: "fixer" }), { type: "local", command: ["node", join(root, "cli.js"), "mcp", "--pet", "fixer"], enabled: true });
|
|
32
|
+
assert.throws(() => buildOpenCodeMcpEntry({ cliVersion: "0.0.0", commandMode: "local", cliEntryPath: "relative.js" }));
|
|
33
|
+
assert.throws(() => buildOpenCodeMcpEntry({ cliVersion: "0.0.0", petId: "bad/pet" }));
|
|
34
|
+
assert.equal(buildOpenCodeInstructionPath("project"), ".opencode/openpets.md");
|
|
35
|
+
assert.equal(buildOpenCodeInstructionPath("global", join(root, "global")), join(root, "global", "openpets.md"));
|
|
36
|
+
assert.deepEqual(buildOpenCodePluginPreview("fixer"), ["@burmese/opencode", { pet: "fixer" }]);
|
|
37
|
+
assert.deepEqual(buildOpenCodePluginPreview("fixer", "0.0.0"), ["@burmese/opencode@0.0.0", { pet: "fixer" }]);
|
|
38
|
+
const jsonc = `{
|
|
39
|
+
// keep this comment
|
|
40
|
+
"theme": "dark",
|
|
41
|
+
"mcp": { "other": { "type": "local", "command": ["x"] } },
|
|
42
|
+
}`;
|
|
43
|
+
const parsed = parseOpenCodeConfig(jsonc);
|
|
44
|
+
assert.equal(parsed.ok, true);
|
|
45
|
+
const updated = updateOpenCodeConfigText(jsonc, [{ path: ["mcp", "openpets"], value: buildOpenCodeMcpEntry({ cliVersion: "0.0.0", petId: "fixer" }) }]);
|
|
46
|
+
assert.equal(typeof updated, "string");
|
|
47
|
+
assert.match(String(updated), /keep this comment/);
|
|
48
|
+
assert.match(String(updated), /"openpets"/);
|
|
49
|
+
assert.match(String(updated), /"other"/);
|
|
50
|
+
assert.equal(parseOpenCodeConfig("{").ok, false);
|
|
51
|
+
assert.equal(parseOpenCodeConfig("[]").ok, false);
|
|
52
|
+
assert.equal(parseOpenCodeConfig(JSON.stringify({ mcp: [] })).ok, false);
|
|
53
|
+
assert.equal(parseOpenCodeConfig(JSON.stringify({ instructions: "x" })).ok, false);
|
|
54
|
+
assert.equal(parseOpenCodeConfig(JSON.stringify({ plugin: {} })).ok, false);
|
|
55
|
+
assert.equal(parseOpenCodeConfig(JSON.stringify({ instructions: [1] })).ok, false);
|
|
56
|
+
assert.equal(parseOpenCodeConfig(`{"x":"${"a".repeat(1024 * 1024)}"}`).ok, false);
|
|
57
|
+
const expected = { cliVersion: "0.0.0", petId: "fixer" };
|
|
58
|
+
assert.equal(classifyOpenCodeMcpStatus([], expected).status, "not_installed");
|
|
59
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: buildOpenCodeMcpEntry(expected) } }], expected).status, "installed");
|
|
60
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: { ...buildOpenCodeMcpEntry(expected), environment: { OPENPETS_DISCOVERY_FILE: "/mnt/c/Users/alvin/AppData/Roaming/OpenPets/runtime/ipc.json" } } } }], expected).status, "installed");
|
|
61
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: { command: ["npx", "-y", "@burmese/cli@0.0.0", "mcp", "--pet", "fixer"], enabled: true, type: "local" } } }], expected).status, "installed");
|
|
62
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: buildOpenCodeMcpEntry({ cliVersion: "0.0.0", petId: "helper" }) } }], expected).status, "needs_update");
|
|
63
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: buildOpenCodeMcpEntry({ cliVersion: "0.0.0", commandMode: "local", cliEntryPath: join(root, "cli.js"), petId: "helper" }) } }], { cliVersion: "0.0.0", commandMode: "local", cliEntryPath: join(root, "cli.js"), petId: "fixer" }).status, "needs_update");
|
|
64
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: { type: "local", command: ["npx", "-y", "@burmese/cli@0.0.0", "mcp", "--pet", "fixer"], enabled: false } } }], expected).status, "custom");
|
|
65
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: { type: "remote", command: ["npx", "-y", "@burmese/cli@0.0.0", "mcp", "--pet", "fixer"], enabled: true } } }], expected).status, "custom");
|
|
66
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: { type: "local", command: ["npx", "-y", "@burmese/cli@file:../cli", "mcp", "--pet", "fixer"], enabled: true } } }], expected).status, "custom");
|
|
67
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: { type: "local", command: ["npx", "-y", "@burmese/cli@workspace:*", "mcp", "--pet", "fixer"], enabled: true } } }], expected).status, "custom");
|
|
68
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: { type: "local", command: ["npx", "-y", "@burmese/cli@0.0.0", "mcp", "--pet", "fixer"], enabled: true, timeout: 10 } } }], expected).status, "custom");
|
|
69
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: { type: "local", command: ["my-openpets-wrapper"] } } }], expected).status, "custom");
|
|
70
|
+
assert.equal(classifyOpenCodeMcpStatus([{ mcp: { openpets: buildOpenCodeMcpEntry(expected) } }, { mcp: { openpets: buildOpenCodeMcpEntry({ cliVersion: "0.0.0", petId: "helper" }) } }], expected).status, "conflict");
|
|
71
|
+
assert.equal(classifyOpenCodeInstructionsStatus([{ instructions: [".opencode/openpets.md"] }], "project", undefined, { ".opencode/openpets.md": "<!-- OPENPETS:START -->\nHi\n<!-- OPENPETS:END -->\n" }).status, "installed");
|
|
72
|
+
assert.equal(classifyOpenCodeInstructionsStatus([{ instructions: [".opencode/openpets.md"] }], "project").status, "needs_update");
|
|
73
|
+
assert.equal(classifyOpenCodeInstructionsStatus([{ instructions: [".opencode/openpets.md"] }, { instructions: ["old-openpets.md"] }], "project", undefined, { ".opencode/openpets.md": "<!-- OPENPETS:START -->\nHi\n<!-- OPENPETS:END -->\n" }).status, "conflict");
|
|
74
|
+
assert.equal(classifyOpenCodeInstructionsStatus([{ instructions: ["old-openpets.md"] }], "project").status, "custom");
|
|
75
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: [["@burmese/opencode", { pet: "fixer" }]] }], "fixer").status, "installed");
|
|
76
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: [["@burmese/opencode@0.0.0", { pet: "fixer" }]] }], "fixer", "0.0.0").status, "installed");
|
|
77
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: ["@burmese/opencode"] }], "fixer").status, "needs_update");
|
|
78
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: [["@burmese/opencode@old", { pet: "helper" }], "./openpets-custom-plugin.js"] }], "fixer", "0.0.0").status, "conflict");
|
|
79
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: [["@burmese/opencode@0.0.0"]] }], "fixer", "0.0.0").status, "custom");
|
|
80
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: [["@burmese/opencode@0.0.0", {}]] }], "fixer", "0.0.0").status, "custom");
|
|
81
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: [["@burmese/opencode@0.0.0", { pet: "fixer" }, "extra"]] }], "fixer", "0.0.0").status, "custom");
|
|
82
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: [["@burmese/opencode@0.0.0", { pet: "fixer", extra: true }]] }], "fixer", "0.0.0").status, "custom");
|
|
83
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: ["./openpets-custom-plugin.js"] }], "fixer").status, "custom");
|
|
84
|
+
assert.equal(classifyOpenCodePluginStatus([{ plugin: [["@burmese/opencode", { pet: "fixer" }], "./openpets-custom-plugin.js"] }], "fixer").status, "conflict");
|
|
85
|
+
const writeTarget = join(root, "write", "opencode.jsonc");
|
|
86
|
+
const writePlan = planOpenCodeConfigWrite(root, writeTarget, "{\"mcp\":{}}\n");
|
|
87
|
+
if ("targetPath" in writePlan) {
|
|
88
|
+
executePlannedWrite(writePlan);
|
|
89
|
+
assert.equal(existsSync(writeTarget), true);
|
|
90
|
+
const second = planOpenCodeConfigWrite(root, writeTarget, "{\"mcp\":{}}\n");
|
|
91
|
+
assert.equal("backupPath" in second && Boolean(second.backupPath), true);
|
|
92
|
+
if ("targetPath" in second && second.backupPath) {
|
|
93
|
+
writeFileSync(second.backupPath, "already exists");
|
|
94
|
+
assert.throws(() => executePlannedWrite(second));
|
|
95
|
+
}
|
|
96
|
+
assert.throws(() => executePlannedWrite({ ...writePlan, rootPath: join(root, "missing-root") }));
|
|
97
|
+
assert.throws(() => executePlannedWrite({ ...writePlan, tempPath: join(tmpdir(), "openpets-unsafe.tmp") }));
|
|
98
|
+
assert.throws(() => executePlannedWrite({ ...writePlan, backupPath: join(tmpdir(), "openpets-unsafe.backup") }));
|
|
99
|
+
}
|
|
100
|
+
const outsidePlan = planOpenCodeConfigWrite(root, join(tmpdir(), "outside-opencode.jsonc"), "{}\n");
|
|
101
|
+
assert.equal("ok" in outsidePlan ? outsidePlan.ok : true, false);
|
|
102
|
+
const linkTarget = join(root, "link-target");
|
|
103
|
+
mkdirSync(linkTarget);
|
|
104
|
+
symlinkSync(linkTarget, join(root, "link-parent"));
|
|
105
|
+
const linkParentPlan = planOpenCodeConfigWrite(root, join(root, "link-parent", "opencode.jsonc"), "{}\n");
|
|
106
|
+
assert.equal("ok" in linkParentPlan ? linkParentPlan.ok : true, false);
|
|
107
|
+
const linkedFile = join(root, "linked-file.jsonc");
|
|
108
|
+
writeFileSync(join(root, "real-file.jsonc"), "{}\n");
|
|
109
|
+
symlinkSync(join(root, "real-file.jsonc"), linkedFile);
|
|
110
|
+
const linkedFilePlan = planOpenCodeConfigWrite(root, linkedFile, "{}\n");
|
|
111
|
+
assert.equal("ok" in linkedFilePlan ? linkedFilePlan.ok : true, false);
|
|
112
|
+
symlinkSync(project, join(root, "project-link"));
|
|
113
|
+
assert.throws(() => getProjectOpenCodeConfigPaths(join(root, "project-link")));
|
|
114
|
+
const globalDir = join(root, "global-missing");
|
|
115
|
+
const globalPrepared = prepareOpenCodeGlobalSetup({ configDir: globalDir, petId: "fixer", cliVersion: "0.0.0" });
|
|
116
|
+
writePreparedOpenCodeGlobalSetup(globalPrepared);
|
|
117
|
+
assert.equal(existsSync(join(globalDir, "opencode.jsonc")), true);
|
|
118
|
+
assert.equal(doctorOpenCodeGlobalSetup(globalDir).status, "installed");
|
|
119
|
+
const globalConfig = readFileSync(join(globalDir, "opencode.jsonc"), "utf8");
|
|
120
|
+
assert.match(globalConfig, /@burmese\/opencode@0\.0\.0/);
|
|
121
|
+
assert.match(readFileSync(join(globalDir, "openpets.md"), "utf8"), /OPENPETS:START/);
|
|
122
|
+
const globalRemove = prepareOpenCodeGlobalRemove(globalDir);
|
|
123
|
+
writePreparedOpenCodeGlobalRemove(globalRemove);
|
|
124
|
+
assert.equal(doctorOpenCodeGlobalSetup(globalDir).status, "not_installed");
|
|
125
|
+
const globalLower = join(root, "global-lower");
|
|
126
|
+
mkdirSync(globalLower);
|
|
127
|
+
writeFileSync(join(globalLower, "config.json"), JSON.stringify({ theme: "keep" }), "utf8");
|
|
128
|
+
writeFileSync(join(globalLower, "opencode.jsonc"), JSON.stringify({ plugin: [["@burmese/opencode@old", { pet: "helper" }]] }), "utf8");
|
|
129
|
+
writePreparedOpenCodeGlobalSetup(prepareOpenCodeGlobalSetup({ configDir: globalLower, petId: "fixer", cliVersion: "0.0.0" }));
|
|
130
|
+
assert.equal(readFileSync(join(globalLower, "config.json"), "utf8").includes("@burmese/opencode"), false);
|
|
131
|
+
assert.match(readFileSync(join(globalLower, "opencode.jsonc"), "utf8"), /@burmese\/opencode@0\.0\.0/);
|
|
132
|
+
const globalExistingJson = join(root, "global-existing-json");
|
|
133
|
+
mkdirSync(globalExistingJson);
|
|
134
|
+
writeFileSync(join(globalExistingJson, "opencode.json"), JSON.stringify({ plugin: ["user-plugin"], instructions: ["USER.md"] }, null, 2), "utf8");
|
|
135
|
+
const existingJsonPrepared = prepareOpenCodeGlobalSetup({ configDir: globalExistingJson, petId: "fixer", cliVersion: "0.0.0" });
|
|
136
|
+
assert.equal(existingJsonPrepared.configPath, join(globalExistingJson, "opencode.json"));
|
|
137
|
+
writePreparedOpenCodeGlobalSetup(existingJsonPrepared);
|
|
138
|
+
assert.equal(existsSync(join(globalExistingJson, "opencode.jsonc")), false, "desktop global setup must not create a higher-precedence opencode.jsonc over an existing opencode.json");
|
|
139
|
+
const existingJsonConfig = JSON.parse(readFileSync(join(globalExistingJson, "opencode.json"), "utf8"));
|
|
140
|
+
assert.deepEqual(existingJsonConfig.plugin?.[0], "user-plugin");
|
|
141
|
+
assert.ok(existingJsonConfig.instructions?.includes("USER.md"));
|
|
142
|
+
const globalExistingMultiple = join(root, "global-existing-multiple");
|
|
143
|
+
mkdirSync(globalExistingMultiple);
|
|
144
|
+
writeFileSync(join(globalExistingMultiple, "config.json"), JSON.stringify({ theme: "base" }, null, 2), "utf8");
|
|
145
|
+
writeFileSync(join(globalExistingMultiple, "opencode.json"), JSON.stringify({ plugin: ["user-plugin"] }, null, 2), "utf8");
|
|
146
|
+
const existingMultiplePrepared = prepareOpenCodeGlobalSetup({ configDir: globalExistingMultiple, petId: "fixer", cliVersion: "0.0.0" });
|
|
147
|
+
assert.equal(existingMultiplePrepared.configPath, join(globalExistingMultiple, "opencode.json"));
|
|
148
|
+
assert.equal(readFileSync(join(globalExistingMultiple, "config.json"), "utf8").includes("openpets"), false);
|
|
149
|
+
const globalLowerPluginOwner = join(root, "global-lower-plugin-owner");
|
|
150
|
+
mkdirSync(globalLowerPluginOwner);
|
|
151
|
+
writeFileSync(join(globalLowerPluginOwner, "config.json"), JSON.stringify({ plugin: ["user-plugin"] }, null, 2), "utf8");
|
|
152
|
+
writeFileSync(join(globalLowerPluginOwner, "opencode.json"), JSON.stringify({ theme: "dark" }, null, 2), "utf8");
|
|
153
|
+
const lowerPluginPrepared = prepareOpenCodeGlobalSetup({ configDir: globalLowerPluginOwner, petId: "fixer", cliVersion: "0.0.0" });
|
|
154
|
+
assert.equal(lowerPluginPrepared.configPath, join(globalLowerPluginOwner, "config.json"));
|
|
155
|
+
writePreparedOpenCodeGlobalSetup(lowerPluginPrepared);
|
|
156
|
+
const lowerPluginConfig = JSON.parse(readFileSync(join(globalLowerPluginOwner, "config.json"), "utf8"));
|
|
157
|
+
assert.deepEqual(lowerPluginConfig.plugin?.[0], "user-plugin");
|
|
158
|
+
assert.equal(readFileSync(join(globalLowerPluginOwner, "opencode.json"), "utf8").includes("openpets"), false);
|
|
159
|
+
const globalSplitArrayOwners = join(root, "global-split-array-owners");
|
|
160
|
+
mkdirSync(globalSplitArrayOwners);
|
|
161
|
+
writeFileSync(join(globalSplitArrayOwners, "config.json"), JSON.stringify({ plugin: ["user-plugin"] }, null, 2), "utf8");
|
|
162
|
+
writeFileSync(join(globalSplitArrayOwners, "opencode.json"), JSON.stringify({ instructions: ["USER.md"] }, null, 2), "utf8");
|
|
163
|
+
assert.throws(() => prepareOpenCodeGlobalSetup({ configDir: globalSplitArrayOwners, petId: "fixer", cliVersion: "0.0.0" }), /different config files/);
|
|
164
|
+
const globalEmptyPluginShadow = join(root, "global-empty-plugin-shadow");
|
|
165
|
+
mkdirSync(globalEmptyPluginShadow);
|
|
166
|
+
writeFileSync(join(globalEmptyPluginShadow, "config.json"), JSON.stringify({ plugin: ["user-plugin"] }, null, 2), "utf8");
|
|
167
|
+
writeFileSync(join(globalEmptyPluginShadow, "opencode.json"), JSON.stringify({ plugin: [] }, null, 2), "utf8");
|
|
168
|
+
assert.throws(() => prepareOpenCodeGlobalSetup({ configDir: globalEmptyPluginShadow, petId: "fixer", cliVersion: "0.0.0" }), /higher-precedence config shadows user plugin/);
|
|
169
|
+
const globalEmptyInstructionShadow = join(root, "global-empty-instruction-shadow");
|
|
170
|
+
mkdirSync(globalEmptyInstructionShadow);
|
|
171
|
+
writeFileSync(join(globalEmptyInstructionShadow, "config.json"), JSON.stringify({ instructions: ["USER.md"] }, null, 2), "utf8");
|
|
172
|
+
writeFileSync(join(globalEmptyInstructionShadow, "opencode.json"), JSON.stringify({ instructions: [] }, null, 2), "utf8");
|
|
173
|
+
assert.throws(() => prepareOpenCodeGlobalSetup({ configDir: globalEmptyInstructionShadow, petId: "fixer", cliVersion: "0.0.0" }), /higher-precedence config shadows user instructions/);
|
|
174
|
+
const globalEmptyArrayOwner = join(root, "global-empty-array-owner");
|
|
175
|
+
mkdirSync(globalEmptyArrayOwner);
|
|
176
|
+
writeFileSync(join(globalEmptyArrayOwner, "opencode.json"), JSON.stringify({ plugin: [] }, null, 2), "utf8");
|
|
177
|
+
const emptyArrayOwnerPrepared = prepareOpenCodeGlobalSetup({ configDir: globalEmptyArrayOwner, petId: "fixer", cliVersion: "0.0.0" });
|
|
178
|
+
assert.equal(emptyArrayOwnerPrepared.configPath, join(globalEmptyArrayOwner, "opencode.json"));
|
|
179
|
+
const globalStaleOverlay = join(root, "global-stale-overlay");
|
|
180
|
+
mkdirSync(globalStaleOverlay);
|
|
181
|
+
writeFileSync(join(globalStaleOverlay, "opencode.json"), JSON.stringify({ plugin: ["user-plugin"], instructions: ["USER.md"] }, null, 2), "utf8");
|
|
182
|
+
writeFileSync(join(globalStaleOverlay, "opencode.jsonc"), JSON.stringify({ plugin: [["@burmese/opencode@0.0.0", { pet: "helper" }]], instructions: [buildOpenCodeInstructionPath("global", globalStaleOverlay)] }, null, 2), "utf8");
|
|
183
|
+
const stalePrepared = prepareOpenCodeGlobalSetup({ configDir: globalStaleOverlay, petId: "fixer", cliVersion: "0.0.1" });
|
|
184
|
+
assert.equal(stalePrepared.configPath, join(globalStaleOverlay, "opencode.json"));
|
|
185
|
+
assert.equal(stalePrepared.cleanupConfigWrites.length, 1);
|
|
186
|
+
writePreparedOpenCodeGlobalSetup(stalePrepared);
|
|
187
|
+
const staleOwnerConfig = JSON.parse(readFileSync(join(globalStaleOverlay, "opencode.json"), "utf8"));
|
|
188
|
+
assert.deepEqual(staleOwnerConfig.plugin?.[0], "user-plugin");
|
|
189
|
+
assert.ok(staleOwnerConfig.instructions?.includes("USER.md"));
|
|
190
|
+
const staleOverlayText = readFileSync(join(globalStaleOverlay, "opencode.jsonc"), "utf8");
|
|
191
|
+
assert.doesNotMatch(staleOverlayText, /plugin/);
|
|
192
|
+
assert.doesNotMatch(staleOverlayText, /instructions/);
|
|
193
|
+
const globalStaleRemove = join(root, "global-stale-remove");
|
|
194
|
+
mkdirSync(globalStaleRemove);
|
|
195
|
+
writeFileSync(join(globalStaleRemove, "opencode.json"), JSON.stringify({ plugin: ["user-plugin"] }, null, 2), "utf8");
|
|
196
|
+
writeFileSync(join(globalStaleRemove, "opencode.jsonc"), JSON.stringify({ plugin: [["@burmese/opencode@0.0.0", { pet: "fixer" }]] }, null, 2), "utf8");
|
|
197
|
+
writePreparedOpenCodeGlobalRemove(prepareOpenCodeGlobalRemove(globalStaleRemove));
|
|
198
|
+
assert.doesNotMatch(readFileSync(join(globalStaleRemove, "opencode.jsonc"), "utf8"), /plugin/);
|
|
199
|
+
assert.match(readFileSync(join(globalStaleRemove, "opencode.json"), "utf8"), /user-plugin/);
|
|
200
|
+
const globalPublishedToBundled = join(root, "global-published-to-bundled");
|
|
201
|
+
mkdirSync(globalPublishedToBundled);
|
|
202
|
+
writeFileSync(join(globalPublishedToBundled, "opencode.jsonc"), JSON.stringify({ mcp: { openpets: buildOpenCodeMcpEntry({ cliVersion: "0.0.0", petId: "helper" }) } }), "utf8");
|
|
203
|
+
const bundledCli = join(root, "app.asar.unpacked", "node_modules", "@burmese", "cli", "dist", "index.js");
|
|
204
|
+
const migrated = prepareOpenCodeGlobalSetup({ configDir: globalPublishedToBundled, petId: "fixer", cliVersion: "0.0.1", pluginVersion: "0.0.2", commandMode: "bundled", cliEntryPath: bundledCli });
|
|
205
|
+
assert.equal(migrated.configPath, join(globalPublishedToBundled, "opencode.jsonc"));
|
|
206
|
+
assert.match(migrated.configWrite.content, /app\.asar\.unpacked/);
|
|
207
|
+
assert.doesNotMatch(migrated.configWrite.content, /app\.asar(?!\.unpacked)/);
|
|
208
|
+
assert.match(migrated.configWrite.content, /@burmese\/opencode@0\.0\.2/);
|
|
209
|
+
const globalNoInstructionMarkers = join(root, "global-no-instruction-markers");
|
|
210
|
+
mkdirSync(globalNoInstructionMarkers);
|
|
211
|
+
writeFileSync(join(globalNoInstructionMarkers, "opencode.jsonc"), JSON.stringify({ instructions: [buildOpenCodeInstructionPath("global", globalNoInstructionMarkers)] }), "utf8");
|
|
212
|
+
writeFileSync(join(globalNoInstructionMarkers, "openpets.md"), "user owned\n", "utf8");
|
|
213
|
+
const noMarkerRemove = prepareOpenCodeGlobalRemove(globalNoInstructionMarkers);
|
|
214
|
+
assert.equal(noMarkerRemove.instructionWrite, undefined);
|
|
215
|
+
const globalCustomPluginOptions = join(root, "global-custom-plugin-options");
|
|
216
|
+
mkdirSync(globalCustomPluginOptions);
|
|
217
|
+
writeFileSync(join(globalCustomPluginOptions, "opencode.jsonc"), JSON.stringify({ plugin: [["@burmese/opencode@0.0.0", { pet: "fixer", extra: true }]] }), "utf8");
|
|
218
|
+
assert.throws(() => prepareOpenCodeGlobalSetup({ configDir: globalCustomPluginOptions, petId: "fixer", cliVersion: "0.0.0" }));
|
|
219
|
+
const globalCustom = join(root, "global-custom");
|
|
220
|
+
mkdirSync(globalCustom);
|
|
221
|
+
writeFileSync(join(globalCustom, "opencode.jsonc"), JSON.stringify({ mcp: { openpets: { type: "local", command: ["custom", "mcp"] } } }), "utf8");
|
|
222
|
+
assert.throws(() => prepareOpenCodeGlobalSetup({ configDir: globalCustom, petId: "fixer", cliVersion: "0.0.0" }));
|
|
223
|
+
assert.throws(() => prepareOpenCodeGlobalRemove(globalCustom));
|
|
224
|
+
const globalManagedMcpEnvironment = join(root, "global-managed-mcp-environment");
|
|
225
|
+
mkdirSync(globalManagedMcpEnvironment);
|
|
226
|
+
writeFileSync(join(globalManagedMcpEnvironment, "opencode.jsonc"), JSON.stringify({ mcp: { openpets: { type: "local", command: ["npx", "-y", "@burmese/cli@0.0.0", "mcp", "--pet", "fixer"], enabled: true, environment: { OPENPETS_DEBUG: "1" } } } }), "utf8");
|
|
227
|
+
assert.doesNotThrow(() => prepareOpenCodeGlobalSetup({ configDir: globalManagedMcpEnvironment, petId: "fixer", cliVersion: "0.0.0" }));
|
|
228
|
+
const globalSymlink = join(root, "global-symlink");
|
|
229
|
+
const globalOutside = join(root, "global-outside");
|
|
230
|
+
mkdirSync(globalOutside);
|
|
231
|
+
writeFileSync(join(globalOutside, "opencode.jsonc"), "{}\n", "utf8");
|
|
232
|
+
symlinkSync(globalOutside, globalSymlink);
|
|
233
|
+
assert.equal(doctorOpenCodeGlobalSetup(globalSymlink).status, "error");
|
|
234
|
+
for (const [category, messages] of Object.entries(hookSpeechPools)) {
|
|
235
|
+
for (const message of messages) {
|
|
236
|
+
assert.match(message, /^[A-Z]/, `${category} hook speech must start uppercase`);
|
|
237
|
+
validateHookSpeech(message);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
rmSync(root, { recursive: true, force: true });
|
|
243
|
+
}
|
|
244
|
+
console.error("OpenCode foundation validation passed.");
|
|
245
|
+
//# sourceMappingURL=check-opencode-foundation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-opencode-foundation.js","sourceRoot":"","sources":["../src/check-opencode-foundation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-opencode-plugin.d.ts","sourceRoot":"","sources":["../src/check-opencode-plugin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import plugin, { openPetsOpenCodePluginId } from "./plugin.js";
|
|
6
|
+
import { classifyOpenCodeBusEvent, classifyOpenCodeToolReaction, createOpenPetsOpenCodeHooks, getDefaultOpenCodeThrottlePath, shouldIgnoreOpenPetsTool } from "./opencode-plugin-runtime.js";
|
|
7
|
+
assert.equal(plugin.id, openPetsOpenCodePluginId);
|
|
8
|
+
assert.equal(typeof plugin.server, "function");
|
|
9
|
+
const packagePlugin = await import("@burmese/opencode/server");
|
|
10
|
+
assert.equal(packagePlugin.default.id, openPetsOpenCodePluginId);
|
|
11
|
+
assert.equal(typeof packagePlugin.default.server, "function");
|
|
12
|
+
assert.equal(classifyOpenCodeToolReaction("edit", {}), "editing");
|
|
13
|
+
assert.equal(classifyOpenCodeToolReaction("apply_patch", {}), "editing");
|
|
14
|
+
assert.equal(classifyOpenCodeToolReaction("bash", { command: "pnpm test" }), "testing");
|
|
15
|
+
assert.equal(classifyOpenCodeToolReaction("shell", { command: "ls" }), undefined);
|
|
16
|
+
assert.equal(classifyOpenCodeToolReaction("read", {}), undefined);
|
|
17
|
+
assert.equal(shouldIgnoreOpenPetsTool("openpets_burmese_status"), true);
|
|
18
|
+
assert.equal(shouldIgnoreOpenPetsTool("openpets_burmese_say"), true);
|
|
19
|
+
assert.equal(shouldIgnoreOpenPetsTool("openpets_burmese_react"), true);
|
|
20
|
+
assert.equal(shouldIgnoreOpenPetsTool("burmese_status"), true);
|
|
21
|
+
assert.deepEqual(classifyOpenCodeBusEvent({ type: "permission.asked" }), { reaction: "waiting", speechCategory: "permission" });
|
|
22
|
+
assert.equal(classifyOpenCodeBusEvent({ type: "permission.asked", properties: { permission: "openpets_burmese_say" } }), undefined);
|
|
23
|
+
assert.equal(classifyOpenCodeBusEvent({ payload: { type: "permission.asked", properties: { patterns: ["openpets_burmese_react"] } } }), undefined);
|
|
24
|
+
assert.deepEqual(classifyOpenCodeBusEvent({ type: "session.error" }), { reaction: "error", speechCategory: "error" });
|
|
25
|
+
assert.deepEqual(classifyOpenCodeBusEvent({ type: "session.status", properties: { status: { type: "idle" } } }), { reaction: "success" });
|
|
26
|
+
assert.ok(getDefaultOpenCodeThrottlePath().includes("opencode-hook-throttle.json"));
|
|
27
|
+
assert.throws(() => createOpenPetsOpenCodeHooks({ pet: "bad/pet" }));
|
|
28
|
+
const dir = mkdtempSync(join(tmpdir(), "openpets-opencode-plugin-"));
|
|
29
|
+
try {
|
|
30
|
+
const calls = [];
|
|
31
|
+
let releaseBlockedReact;
|
|
32
|
+
const blocked = new Promise((resolve) => { releaseBlockedReact = resolve; });
|
|
33
|
+
const client = {
|
|
34
|
+
hello: async () => ({}),
|
|
35
|
+
status: async () => ({ ok: true, appRunning: true }),
|
|
36
|
+
listPets: async () => ({ ok: true, pets: [], defaultPetId: "builtin" }),
|
|
37
|
+
installPet: async () => { throw new Error("unused"); },
|
|
38
|
+
acquireLease: async (options) => {
|
|
39
|
+
calls.push({ kind: "lease", value: "acquire", requestedPetId: options?.requestedPetId });
|
|
40
|
+
return { leaseId: "lease-fixer", requestedPetId: options?.requestedPetId, targetKind: "explicit", actualTargetPetId: options?.requestedPetId ?? "builtin", actualTargetPetName: "Fixer", usingDefaultPet: false, expiresAt: Date.now() + 15_000, leaseActive: true };
|
|
41
|
+
},
|
|
42
|
+
heartbeatLease: async () => ({ leaseId: "lease-fixer", expiresAt: Date.now() + 15_000 }),
|
|
43
|
+
releaseLease: async () => ({ released: true }),
|
|
44
|
+
react: async (reaction, options) => {
|
|
45
|
+
calls.push({ kind: "react", value: reaction, leaseId: options?.leaseId, clientLabel: options?.clientLabel });
|
|
46
|
+
await blocked;
|
|
47
|
+
},
|
|
48
|
+
say: async (message, options) => {
|
|
49
|
+
calls.push({ kind: "say", value: message, leaseId: options?.leaseId, clientLabel: options?.clientLabel });
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
const scheduled = [];
|
|
53
|
+
const hooks = createOpenPetsOpenCodeHooks({ pet: "fixer", clientFactory: () => client, schedule: (work) => { scheduled.push(work); }, throttlePath: join(dir, "opencode-hook-throttle.json"), now: () => 100_000, random: () => 0 });
|
|
54
|
+
hooks["chat.message"]({}, { message: { text: "do not use this prompt" } });
|
|
55
|
+
assert.equal(scheduled.length, 1);
|
|
56
|
+
const thinkingWork = scheduled.shift();
|
|
57
|
+
const thinkingPromise = thinkingWork?.();
|
|
58
|
+
await Promise.resolve();
|
|
59
|
+
await Promise.resolve();
|
|
60
|
+
assert.deepEqual(calls[0], { kind: "lease", value: "acquire", requestedPetId: "fixer" });
|
|
61
|
+
assert.deepEqual(calls[1], { kind: "react", value: "thinking", leaseId: "lease-fixer", clientLabel: "OpenCode" });
|
|
62
|
+
releaseBlockedReact?.();
|
|
63
|
+
await thinkingPromise;
|
|
64
|
+
releaseBlockedReact = undefined;
|
|
65
|
+
hooks["tool.execute.before"]({ tool: "bash" }, { args: { command: "pnpm test -- --secret" } });
|
|
66
|
+
assert.equal(scheduled.length, 1);
|
|
67
|
+
const work = scheduled.shift();
|
|
68
|
+
const promise = work?.();
|
|
69
|
+
await Promise.resolve();
|
|
70
|
+
await Promise.resolve();
|
|
71
|
+
assert.deepEqual(calls.at(-1), { kind: "react", value: "testing", leaseId: "lease-fixer", clientLabel: "OpenCode" });
|
|
72
|
+
await promise;
|
|
73
|
+
hooks["tool.execute.before"]({ tool: "shell" }, { args: { command: "ls" } });
|
|
74
|
+
assert.equal(scheduled.length, 0);
|
|
75
|
+
hooks["tool.execute.before"]({ tool: "bash" }, { args: { command: "pnpm test" } });
|
|
76
|
+
assert.equal(scheduled.length, 1);
|
|
77
|
+
const beforeDuplicateTesting = calls.length;
|
|
78
|
+
await scheduled.shift()?.();
|
|
79
|
+
assert.equal(calls.length, beforeDuplicateTesting, "duplicate testing reaction should be throttled without lease/client work");
|
|
80
|
+
const beforeIgnored = scheduled.length;
|
|
81
|
+
hooks["tool.execute.before"]({ tool: "openpets_burmese_say" }, { args: {} });
|
|
82
|
+
assert.equal(scheduled.length, beforeIgnored);
|
|
83
|
+
hooks.event({ event: { type: "permission.asked", properties: { prompt: "never speak this" } } });
|
|
84
|
+
assert.equal(scheduled.length, 1);
|
|
85
|
+
await scheduled.shift()?.();
|
|
86
|
+
assert.deepEqual(calls.at(-1), { kind: "say", value: "Approval needed", leaseId: "lease-fixer", clientLabel: "OpenCode" });
|
|
87
|
+
hooks.event({ event: { type: "session.status", properties: { status: { type: "idle" } } } });
|
|
88
|
+
assert.equal(scheduled.length, 1);
|
|
89
|
+
await scheduled.shift()?.();
|
|
90
|
+
assert.deepEqual(calls.at(-1), { kind: "react", value: "success", leaseId: "lease-fixer", clientLabel: "OpenCode" });
|
|
91
|
+
const errors = [];
|
|
92
|
+
const failingHooks = createOpenPetsOpenCodeHooks({ clientFactory: () => { throw new Error("api_key=secret /tmp/path"); }, schedule: (work) => { void work(); }, debug: true, debugLog: (message) => errors.push(message), throttlePath: join(dir, "fail-throttle.json"), now: () => 200_000 });
|
|
93
|
+
assert.doesNotThrow(() => failingHooks.event({ event: { type: "session.error" } }));
|
|
94
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
95
|
+
assert.match(errors.join("\n"), /<redacted>|<path>/);
|
|
96
|
+
const throwingSchedule = createOpenPetsOpenCodeHooks({ schedule: () => { throw new Error("schedule failed"); }, debug: true, debugLog: (message) => errors.push(message) });
|
|
97
|
+
assert.doesNotThrow(() => throwingSchedule.event({ event: { type: "session.error" } }));
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
rmSync(dir, { recursive: true, force: true });
|
|
101
|
+
}
|
|
102
|
+
const loaded = await plugin.server({}, { pet: "fixer" });
|
|
103
|
+
assert.equal(typeof loaded.event, "function");
|
|
104
|
+
assert.equal(typeof loaded["chat.message"], "function");
|
|
105
|
+
assert.equal(typeof loaded["tool.execute.before"], "function");
|
|
106
|
+
console.error("OpenCode plugin validation passed.");
|
|
107
|
+
//# sourceMappingURL=check-opencode-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-opencode-plugin.js","sourceRoot":"","sources":["../src/check-opencode-plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./opencode-config.js";
|
|
2
|
+
export * from "./opencode-global-setup.js";
|
|
3
|
+
export * from "./opencode-project-setup.js";
|
|
4
|
+
export * from "./opencode-plugin-runtime.js";
|
|
5
|
+
export * from "./opencode-previews.js";
|
|
6
|
+
export * from "./opencode-status.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./opencode-config.js";
|
|
2
|
+
export * from "./opencode-global-setup.js";
|
|
3
|
+
export * from "./opencode-project-setup.js";
|
|
4
|
+
export * from "./opencode-plugin-runtime.js";
|
|
5
|
+
export * from "./opencode-previews.js";
|
|
6
|
+
export * from "./opencode-status.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface OpenCodeConfigPaths {
|
|
2
|
+
readonly candidates: readonly string[];
|
|
3
|
+
readonly defaultCreatePath: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ParsedOpenCodeConfig {
|
|
6
|
+
readonly ok: true;
|
|
7
|
+
readonly value: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface OpenCodeConfigError {
|
|
10
|
+
readonly ok: false;
|
|
11
|
+
readonly message: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PlannedWrite {
|
|
14
|
+
readonly rootPath: string;
|
|
15
|
+
readonly targetPath: string;
|
|
16
|
+
readonly backupPath?: string;
|
|
17
|
+
readonly tempPath: string;
|
|
18
|
+
readonly content: string;
|
|
19
|
+
}
|
|
20
|
+
export interface OpenCodeExecutableDetection {
|
|
21
|
+
readonly command: "opencode" | "opencode.cmd";
|
|
22
|
+
readonly platform: NodeJS.Platform | string;
|
|
23
|
+
readonly available: boolean;
|
|
24
|
+
readonly version?: string;
|
|
25
|
+
readonly error?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare const maxOpenCodeConfigBytes: number;
|
|
28
|
+
export declare function getProjectOpenCodeConfigPaths(projectDir: string): OpenCodeConfigPaths;
|
|
29
|
+
export declare function selectProjectOpenCodeConfigPath(projectDir: string): string;
|
|
30
|
+
export declare function getGlobalOpenCodeConfigDir(env?: NodeJS.ProcessEnv, homeDir?: string, platform?: NodeJS.Platform): string;
|
|
31
|
+
export declare function getGlobalOpenCodeConfigPaths(env?: NodeJS.ProcessEnv, homeDir?: string, platform?: NodeJS.Platform): OpenCodeConfigPaths;
|
|
32
|
+
export declare function createOpenCodeExecutableDetection(input?: Partial<OpenCodeExecutableDetection> & {
|
|
33
|
+
readonly platform?: NodeJS.Platform | string;
|
|
34
|
+
}): OpenCodeExecutableDetection;
|
|
35
|
+
export declare function readOpenCodeConfigFile(path: string): ParsedOpenCodeConfig | OpenCodeConfigError;
|
|
36
|
+
export declare function parseOpenCodeConfig(text: string): ParsedOpenCodeConfig | OpenCodeConfigError;
|
|
37
|
+
export declare function updateOpenCodeConfigText(text: string, updates: readonly {
|
|
38
|
+
readonly path: readonly (string | number)[];
|
|
39
|
+
readonly value: unknown;
|
|
40
|
+
}[]): string | OpenCodeConfigError;
|
|
41
|
+
export declare function planOpenCodeConfigWrite(rootPath: string, targetPath: string, content: string): PlannedWrite | OpenCodeConfigError;
|
|
42
|
+
export declare function executePlannedWrite(plan: PlannedWrite): void;
|
|
43
|
+
export declare function assertSafeProjectRoot(projectDir: string): string;
|
|
44
|
+
//# sourceMappingURL=opencode-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-config.d.ts","sourceRoot":"","sources":["../src/opencode-config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,sBAAsB,QAAc,CAAC;AAElD,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAMrF;AAED,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED,wBAAgB,0BAA0B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,OAAO,SAAY,EAAE,QAAQ,kBAAmB,GAAG,MAAM,CAIzI;AAED,wBAAgB,4BAA4B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,OAAO,SAAY,EAAE,QAAQ,kBAAmB,GAAG,mBAAmB,CAMxJ;AAED,wBAAgB,iCAAiC,CAAC,KAAK,GAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAA;CAAO,GAAG,2BAA2B,CASlL;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,mBAAmB,CAI/F;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,mBAAmB,CAS5F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,MAAM,GAAG,mBAAmB,CASjL;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,mBAAmB,CAmBjI;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAgC5D;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMhE"}
|