@alisio/plugin-opencode-go 0.1.0-alpha.5 → 0.1.0-alpha.7

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/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { definePlugin } from "@alisio/sdk";
2
2
  import { OpenCodeGoProvider } from "./provider.js";
3
+ import { loadVersion } from "./version.js";
3
4
  const profileString = (request, key) => typeof request.profile[key] === "string" ? String(request.profile[key]) : "";
4
5
  export function createOpenCodeGoPlugin() {
5
6
  return definePlugin({
@@ -7,7 +8,7 @@ export function createOpenCodeGoPlugin() {
7
8
  name: "OpenCode Go",
8
9
  description: "OpenCode Go multi-protocol model gateway",
9
10
  categories: ["model-provider"],
10
- version: "0.1.0-alpha.1",
11
+ version: loadVersion(import.meta.url),
11
12
  apiVersion: 1,
12
13
  setup(api) {
13
14
  api.providers.register({
package/dist/provider.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { loadVersion } from "./version.js";
1
2
  const protocolMap = (groups) => new Map(Object.entries(groups).flatMap(([protocol, models]) => (models ?? []).map((model) => [model, protocol])));
2
3
  const GO_MODELS = protocolMap({
3
4
  responses: [
@@ -48,6 +49,8 @@ export function classifyOpenCodeGoModel(id) {
48
49
  }
49
50
  const dataUrl = (a) => `data:${a.mimeType};base64,${a.data}`;
50
51
  const modelId = (id) => id.replace(/^opencode(?:-go)?\//, "");
52
+ /** Default user agent derives from the package manifest at runtime; never a hardcoded version. */
53
+ const DEFAULT_USER_AGENT = `alisio/${loadVersion(import.meta.url)}`;
51
54
  async function* sse(response) {
52
55
  if (!response.ok)
53
56
  throw new Error(`OpenCode request failed: HTTP ${response.status}`);
@@ -134,7 +137,7 @@ export class OpenCodeGatewayProvider {
134
137
  this.displayName = "OpenCode Go";
135
138
  this.classify = config.classify;
136
139
  this.baseURL = config.baseURL.replace(/\/$/, "");
137
- this.userAgent = config.userAgent ?? "alisio/0.1.0-alpha.1";
140
+ this.userAgent = config.userAgent ?? DEFAULT_USER_AGENT;
138
141
  const url = new URL(this.baseURL);
139
142
  if (url.protocol !== "https:" && url.hostname !== "127.0.0.1" && url.hostname !== "localhost")
140
143
  throw new Error("OpenCode base URL must use HTTPS");
@@ -262,7 +265,7 @@ export class OpenCodeGatewayProvider {
262
265
  if (completed.some((call) => !call.id || !call.name))
263
266
  throw new Error("Incomplete tool call");
264
267
  if (finish === "length" && !text.trim())
265
- throw new Error("OpenCode chat response cut off by max output tokens before any usable content; raise limits.maxOutputTokens");
268
+ throw new Error("OpenCode chat response cut off by max output tokens before any usable content; raise limits.maxOutputTokens (/settings → Agent max output tokens)");
266
269
  yield {
267
270
  type: "completed",
268
271
  message: {
@@ -338,7 +341,7 @@ export class OpenCodeGatewayProvider {
338
341
  .map((item) => item.text)
339
342
  .join("");
340
343
  if (!text.trim())
341
- throw new Error("OpenCode Responses response cut off by max output tokens before any usable content; raise limits.maxOutputTokens");
344
+ throw new Error("OpenCode Responses response cut off by max output tokens before any usable content; raise limits.maxOutputTokens (/settings → Agent max output tokens)");
342
345
  if (calls.some((call) => !call.id || !call.name))
343
346
  throw new Error("Incomplete tool call");
344
347
  const u = event.response.usage;
@@ -519,7 +522,7 @@ export class OpenCodeGatewayProvider {
519
522
  }
520
523
  if (truncated) {
521
524
  if (!text.trim())
522
- throw new Error("OpenCode Messages response cut off by max output tokens before any usable content; raise limits.maxOutputTokens");
525
+ throw new Error("OpenCode Messages response cut off by max output tokens before any usable content; raise limits.maxOutputTokens (/settings → Agent max output tokens)");
523
526
  yield {
524
527
  type: "completed",
525
528
  message: { role: "assistant", text, calls, providerData: blocks, truncated: true },
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Reads this plugin package's version at runtime so plugin metadata, user-agent defaults and CLI
3
+ * reports stay in sync with the published package without a build-time constant to update.
4
+ * The manifest is resolved relative to the module (`src/version.ts` → `../package.json` in the
5
+ * source tree; `dist/version.js` → `../package.json` of the installed package). Standalone
6
+ * binaries inject the version at build time via ALISIO_PACKAGE_VERSION (scripts/binary-build.ts).
7
+ */
8
+ export declare function loadVersion(fromHere: string): string;
@@ -0,0 +1,28 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ /**
5
+ * Fallback used when neither the build-time injection nor the package manifest is readable
6
+ * (e.g. an unpackaged embed). Keep it a development marker, never a publish literal, so it
7
+ * cannot silently desync from the published package.
8
+ */
9
+ const FALLBACK = "dev";
10
+ /**
11
+ * Reads this plugin package's version at runtime so plugin metadata, user-agent defaults and CLI
12
+ * reports stay in sync with the published package without a build-time constant to update.
13
+ * The manifest is resolved relative to the module (`src/version.ts` → `../package.json` in the
14
+ * source tree; `dist/version.js` → `../package.json` of the installed package). Standalone
15
+ * binaries inject the version at build time via ALISIO_PACKAGE_VERSION (scripts/binary-build.ts).
16
+ */
17
+ export function loadVersion(fromHere) {
18
+ if (process.env.ALISIO_PACKAGE_VERSION)
19
+ return process.env.ALISIO_PACKAGE_VERSION;
20
+ try {
21
+ const manifest = join(dirname(fileURLToPath(fromHere)), "..", "package.json");
22
+ const parsed = JSON.parse(readFileSync(manifest, "utf8"));
23
+ return typeof parsed.version === "string" && parsed.version ? parsed.version : FALLBACK;
24
+ }
25
+ catch {
26
+ return FALLBACK;
27
+ }
28
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alisio/plugin-opencode-go",
3
- "version": "0.1.0-alpha.5",
3
+ "version": "0.1.0-alpha.7",
4
4
  "description": "Built-in OpenCode Go model provider for Alisio.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -21,10 +21,10 @@
21
21
  "node": ">=22.16"
22
22
  },
23
23
  "peerDependencies": {
24
- "@alisio/sdk": "^0.1.0-alpha.5"
24
+ "@alisio/sdk": "^0.1.0-alpha.6"
25
25
  },
26
26
  "devDependencies": {
27
- "@alisio/sdk": "0.1.0-alpha.5"
27
+ "@alisio/sdk": "0.1.0-alpha.6"
28
28
  },
29
29
  "publishConfig": {
30
30
  "access": "public",