@opencode/ai 2.0.26 → 2.0.28

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 (108) hide show
  1. package/README.md +8 -2
  2. package/dist/cache-policy.js +20 -11
  3. package/dist/experimental/system-one.js +1 -1
  4. package/dist/media.d.ts +1 -1
  5. package/dist/media.js +7 -6
  6. package/dist/protocols/alibaba-chat.d.ts +2 -2
  7. package/dist/protocols/alibaba-messages.d.ts +1 -1
  8. package/dist/protocols/anthropic-messages.js +1 -1
  9. package/dist/protocols/bedrock-converse.js +4 -3
  10. package/dist/protocols/bedrock-event-stream.js +4 -3
  11. package/dist/protocols/gemini.d.ts +73 -9
  12. package/dist/protocols/gemini.js +111 -17
  13. package/dist/protocols/meta-responses.js +3 -2
  14. package/dist/protocols/mistral-chat.d.ts +1 -1
  15. package/dist/protocols/mistral-chat.js +4 -2
  16. package/dist/protocols/open-responses-channel.d.ts +1 -1
  17. package/dist/protocols/open-responses-channel.js +7 -2
  18. package/dist/protocols/openai-chat.js +6 -2
  19. package/dist/protocols/openai-responses.d.ts +5 -5
  20. package/dist/protocols/openai-responses.js +4 -3
  21. package/dist/protocols/shared.d.ts +6 -2
  22. package/dist/protocols/shared.js +29 -3
  23. package/dist/protocols/utils/bedrock-auth.js +1 -1
  24. package/dist/protocols/utils/bedrock-media.js +4 -3
  25. package/dist/protocols/utils/fal-queue.d.ts +1 -1
  26. package/dist/protocols/utils/media-input.js +4 -3
  27. package/dist/protocols/utils/responses-compaction.js +6 -1
  28. package/dist/protocols/utils/tool-schema.js +8 -2
  29. package/dist/providers/alibaba.d.ts +5 -5
  30. package/dist/providers/amazon-bedrock-mantle.js +2 -2
  31. package/dist/providers/anthropic-compatible.js +2 -2
  32. package/dist/providers/anthropic.js +2 -2
  33. package/dist/providers/azure.d.ts +2 -2
  34. package/dist/providers/azure.js +3 -3
  35. package/dist/providers/baseten.js +2 -2
  36. package/dist/providers/cerebras.js +2 -2
  37. package/dist/providers/cloudflare-ai-gateway.d.ts +2 -2
  38. package/dist/providers/cloudflare-ai-gateway.js +2 -2
  39. package/dist/providers/cloudflare-workers-ai.js +2 -2
  40. package/dist/providers/cohere/chat.js +1 -1
  41. package/dist/providers/cohere.js +1 -1
  42. package/dist/providers/deepinfra.js +2 -2
  43. package/dist/providers/deepseek.js +2 -2
  44. package/dist/providers/fireworks.js +2 -2
  45. package/dist/providers/google/interactions.js +2 -2
  46. package/dist/providers/google-vertex/interactions.d.ts +2 -0
  47. package/dist/providers/google-vertex/interactions.js +1 -0
  48. package/dist/providers/google-vertex/mistral.d.ts +2 -0
  49. package/dist/providers/google-vertex/mistral.js +1 -0
  50. package/dist/providers/google-vertex-chat.js +3 -3
  51. package/dist/providers/google-vertex-interactions.d.ts +112 -0
  52. package/dist/providers/google-vertex-interactions.js +64 -0
  53. package/dist/providers/google-vertex-messages.js +3 -3
  54. package/dist/providers/google-vertex-mistral.d.ts +124 -0
  55. package/dist/providers/google-vertex-mistral.js +69 -0
  56. package/dist/providers/google-vertex-responses.js +3 -3
  57. package/dist/providers/google-vertex-shared.d.ts +3 -1
  58. package/dist/providers/google-vertex-shared.js +29 -3
  59. package/dist/providers/google-vertex.d.ts +2 -1
  60. package/dist/providers/google-vertex.js +4 -5
  61. package/dist/providers/google.d.ts +2 -1
  62. package/dist/providers/google.js +2 -2
  63. package/dist/providers/groq.js +2 -2
  64. package/dist/providers/index.d.ts +3 -1
  65. package/dist/providers/index.js +3 -1
  66. package/dist/providers/meta.js +1 -1
  67. package/dist/providers/minimax/chat.js +1 -1
  68. package/dist/providers/minimax/responses.js +1 -1
  69. package/dist/providers/minimax.js +1 -1
  70. package/dist/providers/mistral.js +2 -2
  71. package/dist/providers/moonshot/messages.js +1 -1
  72. package/dist/providers/moonshot/responses.js +1 -1
  73. package/dist/providers/moonshot.js +1 -1
  74. package/dist/providers/openai-compatible-responses.js +2 -2
  75. package/dist/providers/openai-compatible.js +2 -2
  76. package/dist/providers/openai.d.ts +1 -1
  77. package/dist/providers/openai.js +2 -2
  78. package/dist/providers/{opencode-zen.d.ts → opencode.d.ts} +1 -1
  79. package/dist/providers/{opencode-zen.js → opencode.js} +2 -2
  80. package/dist/providers/openrouter.js +1 -1
  81. package/dist/providers/togetherai.js +2 -2
  82. package/dist/providers/venice.js +1 -1
  83. package/dist/providers/vercel-ai-gateway.js +2 -2
  84. package/dist/providers/xai.js +1 -1
  85. package/dist/providers/zai-coding-plan/messages.js +1 -1
  86. package/dist/providers/zai-coding-plan/responses.js +1 -1
  87. package/dist/providers/zai-coding-plan.js +1 -1
  88. package/dist/providers/zai.js +1 -1
  89. package/dist/route/auth.d.ts +1 -1
  90. package/dist/route/auth.js +2 -2
  91. package/dist/route/executor-service.d.ts +1 -1
  92. package/dist/route/executor.d.ts +1 -1
  93. package/dist/route/executor.js +1 -1
  94. package/dist/route/framing.js +1 -1
  95. package/dist/route/media-protocol.d.ts +1 -1
  96. package/dist/route/media-protocol.js +1 -1
  97. package/dist/route/media.js +1 -1
  98. package/dist/route/transport/http.d.ts +1 -1
  99. package/dist/route/transport/http.js +5 -4
  100. package/dist/route/transport/websocket-channel.d.ts +1 -1
  101. package/dist/route/transport/websocket.d.ts +4 -4
  102. package/dist/route/transport/websocket.js +4 -9
  103. package/dist/schema/messages.js +9 -8
  104. package/dist/schema/options.d.ts +15 -1
  105. package/dist/schema/options.js +25 -5
  106. package/dist/tool.d.ts +10 -0
  107. package/dist/tool.js +21 -2
  108. package/package.json +5 -5
package/dist/tool.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Effect, JsonSchema, Schema } from "effect";
2
2
  import { Tool } from "@opencode/schema/tool";
3
3
  import { ToolDefinition, ToolFailure, ToolOutput } from "./schema/index.js";
4
+ import { isRecord } from "./utils/record.js";
4
5
  export function make(config) {
5
6
  if ("jsonSchema" in config) {
6
7
  return {
@@ -36,7 +37,7 @@ export function make(config) {
36
37
  _definition: new ToolDefinition({
37
38
  name: "",
38
39
  description: config.description,
39
- inputSchema: toJsonSchema(config.parameters),
40
+ inputSchema: emptyInputJsonSchema(config.parameters) ?? toJsonSchema(config.parameters),
40
41
  outputSchema: toJsonSchema(config.success),
41
42
  }),
42
43
  };
@@ -55,8 +56,26 @@ export const toDefinitions = (tools) => Object.entries(tools).map(([name, item])
55
56
  inputSchema: item._definition.inputSchema,
56
57
  outputSchema: item._definition.outputSchema,
57
58
  }));
59
+ /**
60
+ * Describes a no-argument Effect tool input as an empty object, or returns
61
+ * `undefined` when the input takes arguments.
62
+ *
63
+ * Effect emits `{ not: { type: "null" } }` only for an encoded struct with no
64
+ * properties or index signatures, but providers require tool parameters to
65
+ * describe an object. Annotations are kept; any other keyword, such as a
66
+ * check's `minProperties`, leaves the schema as Effect emitted it.
67
+ */
68
+ export const emptyInputJsonSchema = (schema) => {
69
+ const { not, ...rest } = Schema.toJsonSchemaDocument(schema, { referencePolicy: () => undefined }).schema;
70
+ if (!isRecord(not) || not.type !== "null" || Object.keys(not).length !== 1)
71
+ return undefined;
72
+ if (!Object.keys(rest).every((key) => annotationKeywords.has(key)))
73
+ return undefined;
74
+ return { ...rest, type: "object", properties: {}, additionalProperties: false };
75
+ };
76
+ const annotationKeywords = new Set(["title", "description", "default", "examples", "readOnly", "writeOnly"]);
58
77
  const toJsonSchema = (schema) => {
59
- const document = Schema.toJsonSchemaDocument(schema);
78
+ const document = Schema.toJsonSchemaDocument(schema, { onExcessProperty: "error" });
60
79
  if (Object.keys(document.definitions).length === 0)
61
80
  return document.schema;
62
81
  return { ...document.schema, $defs: document.definitions };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
- "version": "2.0.26",
3
+ "version": "2.0.28",
4
4
  "name": "@opencode/ai",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -33,8 +33,8 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@clack/prompts": "1.0.0-alpha.1",
36
- "@effect/platform-node": "4.0.0-rc.112",
37
- "@opencode/http-recorder": "2.0.26",
36
+ "@effect/platform-node": "4.0.1",
37
+ "@opencode/http-recorder": "2.0.28",
38
38
  "@tsconfig/bun": "1.0.9",
39
39
  "@types/bun": "1.4.0",
40
40
  "@typescript/native-preview": "7.0.0-dev.20251207.1",
@@ -44,9 +44,9 @@
44
44
  "@aws-sdk/credential-providers": "3.1057.0",
45
45
  "@smithy/eventstream-codec": "4.2.14",
46
46
  "@smithy/util-utf8": "4.2.2",
47
- "@opencode/schema": "2.0.26",
47
+ "@opencode/schema": "2.0.28",
48
48
  "aws4fetch": "1.0.20",
49
- "effect": "4.0.0-rc.112",
49
+ "effect": "4.0.1",
50
50
  "google-auth-library": "10.5.0"
51
51
  }
52
52
  }