@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.
Files changed (42) hide show
  1. package/LICENSE +21 -0
  2. package/dist/check-opencode-foundation.d.ts +2 -0
  3. package/dist/check-opencode-foundation.d.ts.map +1 -0
  4. package/dist/check-opencode-foundation.js +245 -0
  5. package/dist/check-opencode-foundation.js.map +1 -0
  6. package/dist/check-opencode-plugin.d.ts +2 -0
  7. package/dist/check-opencode-plugin.d.ts.map +1 -0
  8. package/dist/check-opencode-plugin.js +107 -0
  9. package/dist/check-opencode-plugin.js.map +1 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +7 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/opencode-config.d.ts +44 -0
  15. package/dist/opencode-config.d.ts.map +1 -0
  16. package/dist/opencode-config.js +213 -0
  17. package/dist/opencode-config.js.map +1 -0
  18. package/dist/opencode-global-setup.d.ts +42 -0
  19. package/dist/opencode-global-setup.d.ts.map +1 -0
  20. package/dist/opencode-global-setup.js +378 -0
  21. package/dist/opencode-global-setup.js.map +1 -0
  22. package/dist/opencode-plugin-runtime.d.ts +38 -0
  23. package/dist/opencode-plugin-runtime.d.ts.map +1 -0
  24. package/dist/opencode-plugin-runtime.js +213 -0
  25. package/dist/opencode-plugin-runtime.js.map +1 -0
  26. package/dist/opencode-previews.d.ts +25 -0
  27. package/dist/opencode-previews.d.ts.map +1 -0
  28. package/dist/opencode-previews.js +37 -0
  29. package/dist/opencode-previews.js.map +1 -0
  30. package/dist/opencode-project-setup.d.ts +27 -0
  31. package/dist/opencode-project-setup.d.ts.map +1 -0
  32. package/dist/opencode-project-setup.js +180 -0
  33. package/dist/opencode-project-setup.js.map +1 -0
  34. package/dist/opencode-status.d.ts +14 -0
  35. package/dist/opencode-status.d.ts.map +1 -0
  36. package/dist/opencode-status.js +145 -0
  37. package/dist/opencode-status.js.map +1 -0
  38. package/dist/plugin.d.ts +8 -0
  39. package/dist/plugin.d.ts.map +1 -0
  40. package/dist/plugin.js +8 -0
  41. package/dist/plugin.js.map +1 -0
  42. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check-opencode-foundation.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check-opencode-plugin.d.ts.map
@@ -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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"}
@@ -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"}