@frankzhang2026/opencode-android-orchestrator 0.1.0 → 0.2.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 (124) hide show
  1. package/CHANGELOG.md +75 -2
  2. package/LICENSE +21 -0
  3. package/README.md +391 -6
  4. package/THIRD_PARTY_NOTICES.md +119 -0
  5. package/dist/cli.js +243 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/compatibility/hooks.d.ts +23 -0
  8. package/dist/compatibility/hooks.d.ts.map +1 -0
  9. package/dist/compatibility/hooks.js +44 -0
  10. package/dist/compatibility/hooks.js.map +1 -0
  11. package/dist/compatibility/versions.d.ts +19 -0
  12. package/dist/compatibility/versions.d.ts.map +1 -1
  13. package/dist/compatibility/versions.js +116 -0
  14. package/dist/compatibility/versions.js.map +1 -1
  15. package/dist/doctor/index.d.ts +36 -0
  16. package/dist/doctor/index.d.ts.map +1 -0
  17. package/dist/doctor/index.js +289 -0
  18. package/dist/doctor/index.js.map +1 -0
  19. package/dist/doctor/installation.d.ts +4 -0
  20. package/dist/doctor/installation.d.ts.map +1 -0
  21. package/dist/doctor/installation.js +472 -0
  22. package/dist/doctor/installation.js.map +1 -0
  23. package/dist/index.d.ts +13 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +13 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/installer/adaptive-templates.d.ts +56 -0
  28. package/dist/installer/adaptive-templates.d.ts.map +1 -0
  29. package/dist/installer/adaptive-templates.js +167 -0
  30. package/dist/installer/adaptive-templates.js.map +1 -0
  31. package/dist/installer/agents-config.d.ts +19 -0
  32. package/dist/installer/agents-config.d.ts.map +1 -0
  33. package/dist/installer/agents-config.js +147 -0
  34. package/dist/installer/agents-config.js.map +1 -0
  35. package/dist/installer/android-project.d.ts +36 -0
  36. package/dist/installer/android-project.d.ts.map +1 -0
  37. package/dist/installer/android-project.js +418 -0
  38. package/dist/installer/android-project.js.map +1 -0
  39. package/dist/installer/index.d.ts +8 -0
  40. package/dist/installer/index.d.ts.map +1 -1
  41. package/dist/installer/index.js +8 -1
  42. package/dist/installer/index.js.map +1 -1
  43. package/dist/installer/init.d.ts +67 -0
  44. package/dist/installer/init.d.ts.map +1 -0
  45. package/dist/installer/init.js +389 -0
  46. package/dist/installer/init.js.map +1 -0
  47. package/dist/installer/install-manifest.d.ts +132 -0
  48. package/dist/installer/install-manifest.d.ts.map +1 -0
  49. package/dist/installer/install-manifest.js +1047 -0
  50. package/dist/installer/install-manifest.js.map +1 -0
  51. package/dist/installer/opencode-config.d.ts +31 -0
  52. package/dist/installer/opencode-config.d.ts.map +1 -0
  53. package/dist/installer/opencode-config.js +296 -0
  54. package/dist/installer/opencode-config.js.map +1 -0
  55. package/dist/installer/uninstall.d.ts +70 -0
  56. package/dist/installer/uninstall.d.ts.map +1 -0
  57. package/dist/installer/uninstall.js +770 -0
  58. package/dist/installer/uninstall.js.map +1 -0
  59. package/dist/installer/upgrade.d.ts +96 -0
  60. package/dist/installer/upgrade.d.ts.map +1 -0
  61. package/dist/installer/upgrade.js +1106 -0
  62. package/dist/installer/upgrade.js.map +1 -0
  63. package/dist/opencode-plugin.d.ts +2 -0
  64. package/dist/opencode-plugin.d.ts.map +1 -0
  65. package/dist/opencode-plugin.js +4 -0
  66. package/dist/opencode-plugin.js.map +1 -0
  67. package/dist/plugin/index.d.ts +7 -2
  68. package/dist/plugin/index.d.ts.map +1 -1
  69. package/dist/plugin/index.js +23 -6
  70. package/dist/plugin/index.js.map +1 -1
  71. package/dist/tools/index.d.ts +35 -1
  72. package/dist/tools/index.d.ts.map +1 -1
  73. package/dist/tools/index.js +197 -1
  74. package/dist/tools/index.js.map +1 -1
  75. package/docs/MIGRATION.md +173 -0
  76. package/docs/SECURITY.md +212 -0
  77. package/docs/TROUBLESHOOTING.md +172 -0
  78. package/package.json +23 -5
  79. package/templates/.opencode/agents/scheduled-coder.md +115 -0
  80. package/templates/.opencode/agents/scheduled-planner.md +166 -0
  81. package/templates/.opencode/agents/scheduled-reviewer.md +88 -0
  82. package/templates/.opencode/commands/abort-task.md +20 -0
  83. package/templates/.opencode/commands/acceptance.md +20 -0
  84. package/templates/.opencode/commands/change.md +23 -0
  85. package/templates/.opencode/commands/resume-review.md +19 -0
  86. package/templates/.opencode/skills/scheduled-quality-coder/SKILL.md +93 -0
  87. package/templates/.opencode/skills/scheduled-quality-orchestrator/SKILL.md +216 -0
  88. package/templates/.opencode/skills/scheduled-quality-reviewer/SKILL.md +68 -0
  89. package/templates/AGENTS.md.fragment +19 -0
  90. package/templates/README.md +52 -9
  91. package/templates/automation/config.json +50 -0
  92. package/templates/automation/config.schema.json +163 -0
  93. package/templates/automation/task-contract.schema.json +71 -0
  94. package/templates/automation/tasks/TASK-TEMPLATE.json.example +53 -0
  95. package/templates/docs/plans/README.md +26 -0
  96. package/templates/installation-manifest.schema.json +201 -0
  97. package/templates/scripts/automation/abort-task.sh +171 -0
  98. package/templates/scripts/automation/accept-and-integrate.sh +263 -0
  99. package/templates/scripts/automation/acceptance-report.sh +132 -0
  100. package/templates/scripts/automation/approve-and-run.sh +175 -0
  101. package/templates/scripts/automation/begin-review.sh +18 -0
  102. package/templates/scripts/automation/block-task.sh +26 -0
  103. package/templates/scripts/automation/claim-task.sh +74 -0
  104. package/templates/scripts/automation/integration-scope-gate.sh +103 -0
  105. package/templates/scripts/automation/lib.sh +697 -0
  106. package/templates/scripts/automation/orchestrate-task.sh +119 -0
  107. package/templates/scripts/automation/preflight.sh +206 -0
  108. package/templates/scripts/automation/prepare-contract-review.sh +101 -0
  109. package/templates/scripts/automation/quality-gate.sh +72 -0
  110. package/templates/scripts/automation/queue-task.sh +35 -0
  111. package/templates/scripts/automation/record-red.sh +57 -0
  112. package/templates/scripts/automation/resume-review-fix.sh +32 -0
  113. package/templates/scripts/automation/resume-review.sh +120 -0
  114. package/templates/scripts/automation/scope-gate.sh +110 -0
  115. package/templates/scripts/automation/select-task.sh +34 -0
  116. package/templates/scripts/automation/shadow-run.sh +24 -0
  117. package/templates/scripts/automation/show-acceptance-review.sh +111 -0
  118. package/templates/scripts/automation/status.sh +125 -0
  119. package/templates/scripts/automation/submit-review.sh +73 -0
  120. package/templates/scripts/automation/tests/run-tests.sh +699 -0
  121. package/templates/scripts/automation/transition-state.sh +21 -0
  122. package/templates/scripts/automation/validate-contract.sh +87 -0
  123. package/templates/scripts/automation/verify-integration.sh +37 -0
  124. package/templates/scripts/automation/verify-task.sh +54 -0
package/dist/cli.js CHANGED
@@ -1,6 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import process from "node:process";
3
3
  import { INSTALLER_COMMANDS } from "./commands/index.js";
4
+ import { formatDoctorReport, runDoctor } from "./doctor/index.js";
5
+ import { formatProjectInitializationResult, runProjectInitialization, } from "./installer/init.js";
6
+ import { formatProjectUpgradeResult, runProjectUpgrade, } from "./installer/upgrade.js";
7
+ import { formatProjectUninstallResult, runProjectUninstall, } from "./installer/uninstall.js";
4
8
  function printHelp() {
5
9
  process.stdout.write(`OpenCode Android Orchestrator\n\n`);
6
10
  process.stdout.write(`Usage:\n`);
@@ -11,10 +15,248 @@ function printHelp() {
11
15
  process.stdout.write(` upgrade Upgrade unchanged managed resources\n`);
12
16
  process.stdout.write(` uninstall Remove unchanged managed resources\n`);
13
17
  }
14
- const [command] = process.argv.slice(2);
18
+ function printInitHelp() {
19
+ process.stdout.write(`OpenCode Android Orchestrator init\n\n`);
20
+ process.stdout.write(`Usage:\n`);
21
+ process.stdout.write(` opencode-android-orchestrator init [directory] [--primary-module <gradle-path>] [--json]\n`);
22
+ }
23
+ function printDoctorHelp() {
24
+ process.stdout.write(`OpenCode Android Orchestrator doctor\n\n`);
25
+ process.stdout.write(`Usage:\n`);
26
+ process.stdout.write(` opencode-android-orchestrator doctor [directory] [--json]\n`);
27
+ }
28
+ function printUpgradeHelp() {
29
+ process.stdout.write(`OpenCode Android Orchestrator upgrade\n\n`);
30
+ process.stdout.write(`Usage:\n`);
31
+ process.stdout.write(` opencode-android-orchestrator upgrade [directory] [--primary-module <gradle-path>] [--json]\n`);
32
+ }
33
+ function printUninstallHelp() {
34
+ process.stdout.write(`OpenCode Android Orchestrator uninstall\n\n`);
35
+ process.stdout.write(`Usage:\n`);
36
+ process.stdout.write(` opencode-android-orchestrator uninstall [directory] [--json]\n`);
37
+ }
38
+ function errorDetails(error) {
39
+ if (typeof error === "object" &&
40
+ error !== null &&
41
+ "details" in error &&
42
+ Array.isArray(error.details) &&
43
+ error.details.every((detail) => typeof detail === "string")) {
44
+ return error.details;
45
+ }
46
+ return [];
47
+ }
48
+ function printCommandError(error) {
49
+ const code = typeof error === "object" &&
50
+ error !== null &&
51
+ "code" in error &&
52
+ typeof error.code === "string"
53
+ ? ` [${error.code}]`
54
+ : "";
55
+ const message = error instanceof Error ? error.message : String(error);
56
+ process.stderr.write(`Error${code}: ${message}\n`);
57
+ for (const detail of errorDetails(error)) {
58
+ process.stderr.write(` ${detail}\n`);
59
+ }
60
+ }
61
+ const [command, ...commandArguments] = process.argv.slice(2);
15
62
  if (command === undefined || command === "--help" || command === "-h") {
16
63
  printHelp();
17
64
  }
65
+ else if (command === "init") {
66
+ if (commandArguments.includes("--help") || commandArguments.includes("-h")) {
67
+ printInitHelp();
68
+ process.exitCode = 0;
69
+ }
70
+ else {
71
+ let targetDirectory;
72
+ let primaryModule;
73
+ let json = false;
74
+ const unexpected = [];
75
+ for (let index = 0; index < commandArguments.length; index += 1) {
76
+ const argument = commandArguments[index] ?? "";
77
+ if (argument === "--json") {
78
+ json = true;
79
+ }
80
+ else if (argument === "--primary-module") {
81
+ const value = commandArguments[index + 1];
82
+ if (value === undefined || value.startsWith("-")) {
83
+ unexpected.push(argument);
84
+ }
85
+ else {
86
+ primaryModule = value;
87
+ index += 1;
88
+ }
89
+ }
90
+ else if (argument.startsWith("--primary-module=")) {
91
+ const value = argument.slice("--primary-module=".length);
92
+ if (value.length === 0) {
93
+ unexpected.push(argument);
94
+ }
95
+ else {
96
+ primaryModule = value;
97
+ }
98
+ }
99
+ else if (argument.startsWith("-")) {
100
+ unexpected.push(argument);
101
+ }
102
+ else if (targetDirectory === undefined) {
103
+ targetDirectory = argument;
104
+ }
105
+ else {
106
+ unexpected.push(argument);
107
+ }
108
+ }
109
+ if (unexpected.length > 0) {
110
+ process.stderr.write(`Unexpected init argument(s): ${unexpected.join(", ")}\n`);
111
+ process.exitCode = 2;
112
+ }
113
+ else {
114
+ const options = {};
115
+ if (primaryModule !== undefined) {
116
+ options.primaryModule = primaryModule;
117
+ }
118
+ try {
119
+ const result = runProjectInitialization(targetDirectory ?? process.cwd(), options);
120
+ process.stdout.write(json
121
+ ? `${JSON.stringify(result, null, 2)}\n`
122
+ : formatProjectInitializationResult(result));
123
+ process.exitCode = 0;
124
+ }
125
+ catch (error) {
126
+ printCommandError(error);
127
+ process.exitCode = 1;
128
+ }
129
+ }
130
+ }
131
+ }
132
+ else if (command === "upgrade") {
133
+ if (commandArguments.includes("--help") || commandArguments.includes("-h")) {
134
+ printUpgradeHelp();
135
+ process.exitCode = 0;
136
+ }
137
+ else {
138
+ let targetDirectory;
139
+ let primaryModule;
140
+ let json = false;
141
+ const unexpected = [];
142
+ for (let index = 0; index < commandArguments.length; index += 1) {
143
+ const argument = commandArguments[index] ?? "";
144
+ if (argument === "--json") {
145
+ json = true;
146
+ }
147
+ else if (argument === "--primary-module") {
148
+ const value = commandArguments[index + 1];
149
+ if (value === undefined || value.startsWith("-")) {
150
+ unexpected.push(argument);
151
+ }
152
+ else {
153
+ primaryModule = value;
154
+ index += 1;
155
+ }
156
+ }
157
+ else if (argument.startsWith("--primary-module=")) {
158
+ const value = argument.slice("--primary-module=".length);
159
+ if (value.length === 0) {
160
+ unexpected.push(argument);
161
+ }
162
+ else {
163
+ primaryModule = value;
164
+ }
165
+ }
166
+ else if (argument.startsWith("-")) {
167
+ unexpected.push(argument);
168
+ }
169
+ else if (targetDirectory === undefined) {
170
+ targetDirectory = argument;
171
+ }
172
+ else {
173
+ unexpected.push(argument);
174
+ }
175
+ }
176
+ if (unexpected.length > 0) {
177
+ process.stderr.write(`Unexpected upgrade argument(s): ${unexpected.join(", ")}\n`);
178
+ process.exitCode = 2;
179
+ }
180
+ else {
181
+ const options = {};
182
+ if (primaryModule !== undefined) {
183
+ options.primaryModule = primaryModule;
184
+ }
185
+ try {
186
+ const result = runProjectUpgrade(targetDirectory ?? process.cwd(), options);
187
+ process.stdout.write(json
188
+ ? `${JSON.stringify(result, null, 2)}\n`
189
+ : formatProjectUpgradeResult(result));
190
+ process.exitCode = 0;
191
+ }
192
+ catch (error) {
193
+ printCommandError(error);
194
+ process.exitCode = 1;
195
+ }
196
+ }
197
+ }
198
+ }
199
+ else if (command === "uninstall") {
200
+ if (commandArguments.includes("--help") || commandArguments.includes("-h")) {
201
+ printUninstallHelp();
202
+ process.exitCode = 0;
203
+ }
204
+ else {
205
+ const unknownOptions = commandArguments.filter((argument) => argument.startsWith("-") && argument !== "--json");
206
+ const targetDirectories = commandArguments.filter((argument) => !argument.startsWith("-"));
207
+ if (unknownOptions.length > 0 || targetDirectories.length > 1) {
208
+ process.stderr.write(`Unexpected uninstall argument(s): ${[
209
+ ...unknownOptions,
210
+ ...targetDirectories.slice(1),
211
+ ].join(", ")}\n`);
212
+ process.exitCode = 2;
213
+ }
214
+ else {
215
+ try {
216
+ const result = runProjectUninstall(targetDirectories[0] ?? process.cwd());
217
+ process.stdout.write(commandArguments.includes("--json")
218
+ ? `${JSON.stringify(result, null, 2)}\n`
219
+ : formatProjectUninstallResult(result));
220
+ process.exitCode = 0;
221
+ }
222
+ catch (error) {
223
+ printCommandError(error);
224
+ process.exitCode = 1;
225
+ }
226
+ }
227
+ }
228
+ }
229
+ else if (command === "doctor") {
230
+ if (commandArguments.includes("--help") || commandArguments.includes("-h")) {
231
+ printDoctorHelp();
232
+ process.exitCode = 0;
233
+ }
234
+ else {
235
+ const unknownOptions = commandArguments.filter((argument) => argument.startsWith("-") && argument !== "--json");
236
+ const targetDirectories = commandArguments.filter((argument) => !argument.startsWith("-"));
237
+ if (unknownOptions.length > 0 || targetDirectories.length > 1) {
238
+ process.stderr.write(`Unexpected doctor argument(s): ${[
239
+ ...unknownOptions,
240
+ ...targetDirectories.slice(1),
241
+ ].join(", ")}\n`);
242
+ process.exitCode = 2;
243
+ }
244
+ else {
245
+ const report = runDoctor({
246
+ checkDependencies: true,
247
+ checkInstallation: true,
248
+ targetDirectory: targetDirectories[0] ?? process.cwd(),
249
+ });
250
+ if (commandArguments.includes("--json")) {
251
+ process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
252
+ }
253
+ else {
254
+ process.stdout.write(formatDoctorReport(report));
255
+ }
256
+ process.exitCode = report.ok ? 0 : 1;
257
+ }
258
+ }
259
+ }
18
260
  else if (INSTALLER_COMMANDS.includes(command)) {
19
261
  process.stderr.write(`Command "${command}" is scaffolded but not implemented yet.\n`);
20
262
  process.exitCode = 1;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,SAAS,SAAS;IAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAClF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACrF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAExC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IACtE,SAAS,EAAE,CAAC;AACd,CAAC;KAAM,IAAK,kBAAwC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,YAAY,OAAO,4CAA4C,CAChE,CAAC;IACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,MAAM,CAAC,CAAC;IACxD,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Hooks, PluginInput, PluginOptions } from "@opencode-ai/plugin";
2
+ /**
3
+ * Plugin input fields that are present in both certified OpenCode versions.
4
+ * Keeping the runtime implementation behind this narrower view prevents an
5
+ * accidental dependency on version-specific workspace or server APIs.
6
+ */
7
+ export declare const COMMON_PLUGIN_INPUT_KEYS: readonly ["directory", "worktree", "client", "$"];
8
+ export type CommonPluginInputKey = (typeof COMMON_PLUGIN_INPUT_KEYS)[number];
9
+ export type CompatiblePluginInput = Pick<PluginInput, CommonPluginInputKey>;
10
+ /** Hooks verified to exist in both OpenCode 1.14.22 and 1.15.13. */
11
+ export declare const COMMON_HOOK_NAMES: readonly ["config", "tool", "command.execute.before", "permission.ask", "shell.env", "tool.execute.before", "tool.execute.after"];
12
+ export type CommonHookName = (typeof COMMON_HOOK_NAMES)[number];
13
+ export type CompatibleHooks = Pick<Hooks, CommonHookName>;
14
+ export type CompatiblePlugin = (input: CompatiblePluginInput, options?: PluginOptions) => Promise<CompatibleHooks>;
15
+ /**
16
+ * Adds a runtime guard to the compile-time hook allowlist. This catches hooks
17
+ * introduced through object spreading or untyped JavaScript before OpenCode
18
+ * attempts to register them.
19
+ */
20
+ export declare function defineCompatibleHooks(hooks: CompatibleHooks): CompatibleHooks;
21
+ /** Remove all input fields that are not part of the certified common API. */
22
+ export declare function toCompatiblePluginInput(input: PluginInput): CompatiblePluginInput;
23
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/compatibility/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,mDAKc,CAAC;AAEpD,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5C,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AAE5E,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,mIAQe,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,qBAAqB,EAC5B,OAAO,CAAC,EAAE,aAAa,KACpB,OAAO,CAAC,eAAe,CAAC,CAAC;AAI9B;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,GACrB,eAAe,CAYjB;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,WAAW,GACjB,qBAAqB,CAOvB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Plugin input fields that are present in both certified OpenCode versions.
3
+ * Keeping the runtime implementation behind this narrower view prevents an
4
+ * accidental dependency on version-specific workspace or server APIs.
5
+ */
6
+ export const COMMON_PLUGIN_INPUT_KEYS = [
7
+ "directory",
8
+ "worktree",
9
+ "client",
10
+ "$",
11
+ ];
12
+ /** Hooks verified to exist in both OpenCode 1.14.22 and 1.15.13. */
13
+ export const COMMON_HOOK_NAMES = [
14
+ "config",
15
+ "tool",
16
+ "command.execute.before",
17
+ "permission.ask",
18
+ "shell.env",
19
+ "tool.execute.before",
20
+ "tool.execute.after",
21
+ ];
22
+ const commonHookNames = new Set(COMMON_HOOK_NAMES);
23
+ /**
24
+ * Adds a runtime guard to the compile-time hook allowlist. This catches hooks
25
+ * introduced through object spreading or untyped JavaScript before OpenCode
26
+ * attempts to register them.
27
+ */
28
+ export function defineCompatibleHooks(hooks) {
29
+ const unsupportedHooks = Object.keys(hooks).filter((hookName) => !commonHookNames.has(hookName));
30
+ if (unsupportedHooks.length > 0) {
31
+ throw new Error(`Unsupported OpenCode hook(s): ${unsupportedHooks.join(", ")}`);
32
+ }
33
+ return hooks;
34
+ }
35
+ /** Remove all input fields that are not part of the certified common API. */
36
+ export function toCompatiblePluginInput(input) {
37
+ return {
38
+ directory: input.directory,
39
+ worktree: input.worktree,
40
+ client: input.client,
41
+ $: input.$,
42
+ };
43
+ }
44
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/compatibility/hooks.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,WAAW;IACX,UAAU;IACV,QAAQ;IACR,GAAG;CAC8C,CAAC;AAMpD,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ;IACR,MAAM;IACN,wBAAwB;IACxB,gBAAgB;IAChB,WAAW;IACX,qBAAqB;IACrB,oBAAoB;CACuB,CAAC;AAS9C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAS,iBAAiB,CAAC,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAsB;IAEtB,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAChD,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAC7C,CAAC;IAEF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,iCAAiC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,uBAAuB,CACrC,KAAkB;IAElB,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,CAAC,EAAE,KAAK,CAAC,CAAC;KACX,CAAC;AACJ,CAAC"}
@@ -1,4 +1,23 @@
1
1
  export declare const MINIMUM_OPENCODE_VERSION = "1.14.22";
2
2
  export declare const MAXIMUM_OPENCODE_VERSION = "1.16.0";
3
3
  export declare const CERTIFIED_OPENCODE_VERSIONS: readonly ["1.14.22", "1.15.13"];
4
+ export interface ParsedSemanticVersion {
5
+ major: number;
6
+ minor: number;
7
+ patch: number;
8
+ prerelease: readonly string[];
9
+ normalized: string;
10
+ }
11
+ export type OpenCodeVersionSupport = "certified" | "supported-uncertified" | "unsupported" | "invalid";
12
+ export interface OpenCodeVersionCheck {
13
+ input: string;
14
+ installedVersion: string | null;
15
+ support: OpenCodeVersionSupport;
16
+ compatible: boolean;
17
+ certified: boolean;
18
+ message: string;
19
+ }
20
+ export declare function parseOpenCodeVersion(value: string): ParsedSemanticVersion | null;
21
+ export declare function compareSemanticVersions(left: ParsedSemanticVersion, right: ParsedSemanticVersion): number;
22
+ export declare function checkOpenCodeVersion(input: string): OpenCodeVersionCheck;
4
23
  //# sourceMappingURL=versions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/compatibility/versions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,wBAAwB,WAAW,CAAC;AACjD,eAAO,MAAM,2BAA2B,iCAAkC,CAAC"}
1
+ {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/compatibility/versions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,wBAAwB,WAAW,CAAC;AACjD,eAAO,MAAM,2BAA2B,iCAAkC,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,uBAAuB,GACvB,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,sBAAsB,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,GACZ,qBAAqB,GAAG,IAAI,CA0B9B;AAoBD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CA0CR;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAqDxE"}
@@ -1,4 +1,120 @@
1
1
  export const MINIMUM_OPENCODE_VERSION = "1.14.22";
2
2
  export const MAXIMUM_OPENCODE_VERSION = "1.16.0";
3
3
  export const CERTIFIED_OPENCODE_VERSIONS = ["1.14.22", "1.15.13"];
4
+ const semanticVersionPattern = /(?:^|[^0-9])v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?(?=$|[^0-9A-Za-z])/;
5
+ export function parseOpenCodeVersion(value) {
6
+ const match = semanticVersionPattern.exec(value.trim());
7
+ if (match === null) {
8
+ return null;
9
+ }
10
+ const majorText = match[1];
11
+ const minorText = match[2];
12
+ const patchText = match[3];
13
+ if (majorText === undefined ||
14
+ minorText === undefined ||
15
+ patchText === undefined) {
16
+ return null;
17
+ }
18
+ const major = Number.parseInt(majorText, 10);
19
+ const minor = Number.parseInt(minorText, 10);
20
+ const patch = Number.parseInt(patchText, 10);
21
+ const prerelease = match[4]?.split(".") ?? [];
22
+ const normalized = `${major}.${minor}.${patch}${prerelease.length === 0 ? "" : `-${prerelease.join(".")}`}`;
23
+ return { major, minor, patch, prerelease, normalized };
24
+ }
25
+ function comparePrereleaseIdentifiers(left, right) {
26
+ const leftNumber = /^[0-9]+$/.test(left) ? Number.parseInt(left, 10) : null;
27
+ const rightNumber = /^[0-9]+$/.test(right)
28
+ ? Number.parseInt(right, 10)
29
+ : null;
30
+ if (leftNumber !== null && rightNumber !== null) {
31
+ return Math.sign(leftNumber - rightNumber);
32
+ }
33
+ if (leftNumber !== null) {
34
+ return -1;
35
+ }
36
+ if (rightNumber !== null) {
37
+ return 1;
38
+ }
39
+ return left.localeCompare(right);
40
+ }
41
+ export function compareSemanticVersions(left, right) {
42
+ for (const key of ["major", "minor", "patch"]) {
43
+ const difference = left[key] - right[key];
44
+ if (difference !== 0) {
45
+ return Math.sign(difference);
46
+ }
47
+ }
48
+ if (left.prerelease.length === 0 && right.prerelease.length === 0) {
49
+ return 0;
50
+ }
51
+ if (left.prerelease.length === 0) {
52
+ return 1;
53
+ }
54
+ if (right.prerelease.length === 0) {
55
+ return -1;
56
+ }
57
+ const identifierCount = Math.max(left.prerelease.length, right.prerelease.length);
58
+ for (let index = 0; index < identifierCount; index += 1) {
59
+ const leftIdentifier = left.prerelease[index];
60
+ const rightIdentifier = right.prerelease[index];
61
+ if (leftIdentifier === undefined) {
62
+ return -1;
63
+ }
64
+ if (rightIdentifier === undefined) {
65
+ return 1;
66
+ }
67
+ const comparison = comparePrereleaseIdentifiers(leftIdentifier, rightIdentifier);
68
+ if (comparison !== 0) {
69
+ return comparison;
70
+ }
71
+ }
72
+ return 0;
73
+ }
74
+ export function checkOpenCodeVersion(input) {
75
+ const installed = parseOpenCodeVersion(input);
76
+ const minimum = parseOpenCodeVersion(MINIMUM_OPENCODE_VERSION);
77
+ const maximum = parseOpenCodeVersion(MAXIMUM_OPENCODE_VERSION);
78
+ if (installed === null || minimum === null || maximum === null) {
79
+ return {
80
+ input,
81
+ installedVersion: null,
82
+ support: "invalid",
83
+ compatible: false,
84
+ certified: false,
85
+ message: `Unable to parse an OpenCode version from: ${input.trim() || "<empty>"}`,
86
+ };
87
+ }
88
+ const compatible = compareSemanticVersions(installed, minimum) >= 0 &&
89
+ compareSemanticVersions(installed, maximum) < 0;
90
+ const certified = CERTIFIED_OPENCODE_VERSIONS.some((version) => version === installed.normalized);
91
+ if (!compatible) {
92
+ return {
93
+ input,
94
+ installedVersion: installed.normalized,
95
+ support: "unsupported",
96
+ compatible: false,
97
+ certified: false,
98
+ message: `OpenCode ${installed.normalized} is outside the supported range >=${MINIMUM_OPENCODE_VERSION} <${MAXIMUM_OPENCODE_VERSION}.`,
99
+ };
100
+ }
101
+ if (!certified) {
102
+ return {
103
+ input,
104
+ installedVersion: installed.normalized,
105
+ support: "supported-uncertified",
106
+ compatible: true,
107
+ certified: false,
108
+ message: `OpenCode ${installed.normalized} is in the supported range but has not been certified.`,
109
+ };
110
+ }
111
+ return {
112
+ input,
113
+ installedVersion: installed.normalized,
114
+ support: "certified",
115
+ compatible: true,
116
+ certified: true,
117
+ message: `OpenCode ${installed.normalized} is certified.`,
118
+ };
119
+ }
4
120
  //# sourceMappingURL=versions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/compatibility/versions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAS,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC;AACjD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,SAAS,EAAE,SAAS,CAAU,CAAC"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/compatibility/versions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export { EXPECTED_MANAGED_FILE_COUNT, installationDoctorChecks, } from "./installation.js";
2
+ export type DoctorCheckStatus = "pass" | "warn" | "fail";
3
+ export interface DoctorCheck {
4
+ id: string;
5
+ label: string;
6
+ status: DoctorCheckStatus;
7
+ summary: string;
8
+ details: readonly string[];
9
+ }
10
+ export interface DoctorReport {
11
+ ok: boolean;
12
+ checks: readonly DoctorCheck[];
13
+ }
14
+ export interface CommandResult {
15
+ status: number | null;
16
+ stdout: string;
17
+ stderr: string;
18
+ error: string | null;
19
+ }
20
+ export type CommandRunner = (executable: string, args: readonly string[]) => CommandResult;
21
+ export interface DoctorOptions {
22
+ androidSdkDirectory?: string;
23
+ checkDependencies?: boolean;
24
+ checkInstallation?: boolean;
25
+ environment?: Readonly<Record<string, string | undefined>>;
26
+ opencodeExecutable?: string;
27
+ runCommand?: CommandRunner;
28
+ targetDirectory?: string;
29
+ }
30
+ export declare const runCommand: CommandRunner;
31
+ export declare function inspectRequiredCommands(options?: DoctorOptions): readonly DoctorCheck[];
32
+ export declare function inspectAndroidSdk(targetDirectory: string, options?: DoctorOptions): DoctorCheck;
33
+ export declare function inspectOpenCode(options?: DoctorOptions): DoctorCheck;
34
+ export declare function runDoctor(options?: DoctorOptions): DoctorReport;
35
+ export declare function formatDoctorReport(report: DoctorReport): string;
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,KACpB,aAAa,CAAC;AAEnB,MAAM,WAAW,aAAa;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,EAAE,aAaxB,CAAC;AAuBF,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,aAAkB,GAC1B,SAAS,WAAW,EAAE,CAoCxB;AAuED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE,aAAkB,GAC1B,WAAW,CAwCb;AAED,wBAAgB,eAAe,CAC7B,OAAO,GAAE,aAAkB,GAC1B,WAAW,CAuCb;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,YAAY,CA0BnE;AA4ED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAc/D"}