@rebon/cli-darwin-arm64 1.8.7 → 1.9.1

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 (43) hide show
  1. package/bin/compose-runtime/payload/compose/shims/dsh-environment.js +34 -0
  2. package/bin/compose-runtime/src/commands-runtime.mjs +72 -0
  3. package/bin/compose-runtime/src/loader.mjs +7 -0
  4. package/bin/compose-runtime/src/probe.mjs +77 -0
  5. package/bin/compose-runtime/src/provided-modules.json +38 -0
  6. package/bin/compose-runtime/src/realm.mjs +5 -3
  7. package/bin/compose-runtime/src/registry.mjs +15 -2
  8. package/bin/compose-runtime/src/resolve.mjs +3 -33
  9. package/bin/marketplace/.claude-plugin/marketplace.json +258 -0
  10. package/bin/marketplace/plugins/dsh-llm-deepseek/LICENSE +21 -0
  11. package/bin/marketplace/plugins/dsh-llm-deepseek/llm-deepseek.js +672 -0
  12. package/bin/marketplace/plugins/dsh-llm-deepseek/rebon-plugin.json +27 -0
  13. package/bin/marketplace/plugins/dsh-tool-todo/LICENSE +21 -0
  14. package/bin/marketplace/plugins/dsh-tool-todo/rebon-plugin.json +27 -0
  15. package/bin/marketplace/plugins/dsh-tool-todo/tool-todo.js +143 -0
  16. package/bin/marketplace/plugins/dsh-tool-web/LICENSE +21 -0
  17. package/bin/marketplace/plugins/dsh-tool-web/rebon-plugin.json +27 -0
  18. package/bin/marketplace/plugins/dsh-tool-web/tool-web.js +1527 -0
  19. package/bin/marketplace/plugins/dsh-web-search-exa/LICENSE +21 -0
  20. package/bin/marketplace/plugins/dsh-web-search-exa/rebon-plugin.json +27 -0
  21. package/bin/marketplace/plugins/dsh-web-search-exa/web-search-exa.js +122 -0
  22. package/bin/mods-runtime/package.json +13 -0
  23. package/bin/mods-runtime/src/chain.mjs +188 -0
  24. package/bin/mods-runtime/src/classic.mjs +217 -0
  25. package/bin/mods-runtime/src/claude-code.mjs +101 -0
  26. package/bin/mods-runtime/src/client.mjs +316 -0
  27. package/bin/mods-runtime/src/engine.mjs +196 -0
  28. package/bin/mods-runtime/src/index.mjs +58 -0
  29. package/bin/mods-runtime/src/jsx-transform.mjs +324 -0
  30. package/bin/mods-runtime/src/mod.mjs +370 -0
  31. package/bin/mods-runtime/src/render.mjs +122 -0
  32. package/bin/mods-runtime/src/transpile.mjs +167 -0
  33. package/bin/plugin-host/src/cli.mjs +13 -0
  34. package/bin/plugin-host/src/host.mjs +11 -1
  35. package/bin/plugin-host/src/methods.mjs +4 -1
  36. package/bin/plugin-host/src/protocol.mjs +38 -4
  37. package/bin/rebon +2 -2
  38. package/bin/rebon-boa-helper +0 -0
  39. package/bin/rebon-browser-mcp +0 -0
  40. package/bin/rebon-computer-use +0 -0
  41. package/bin/rebon-lsp-mcp +0 -0
  42. package/bin/sandbox-win +0 -0
  43. package/package.json +1 -1
@@ -322,7 +322,17 @@ export class PluginHost {
322
322
  });
323
323
  }
324
324
  this.#cancelled.delete(envelope.call_id);
325
- await this.#sendTerminal(envelope, 'success', payload);
325
+ try {
326
+ await this.#sendTerminal(envelope, 'success', payload);
327
+ } catch (error) {
328
+ if (error instanceof FramingError || !(error instanceof ProtocolError)) throw error;
329
+ // The answer itself could not be written. The call still ends, as the
330
+ // failure it is, rather than leaving rebon to wait out its bound.
331
+ return this.#sendTerminal(envelope, 'error', {
332
+ code: '[INVALID_ANSWER]',
333
+ message: `the handler answered a value that is not JSON: ${error.message}`.slice(0, 256),
334
+ });
335
+ }
326
336
  if (plan.finalize) await plan.finalize();
327
337
  }
328
338
  #plan(value) {
@@ -156,8 +156,11 @@ export function pluginCommandDefinition(input) {
156
156
  shape(kind, ['type', 'dialog'], [], 'command kind');
157
157
  validateName('dialog', string(kind.dialog, 'kind dialog'));
158
158
  break;
159
+ case 'output':
160
+ shape(kind, ['type'], [], 'command kind');
161
+ break;
159
162
  default:
160
- throw new ProtocolError('[WRONG_SHAPE]', 'command kind must be prompt, explain or panel');
163
+ throw new ProtocolError('[WRONG_SHAPE]', 'command kind must be prompt, explain, panel or output');
161
164
  }
162
165
  return Object.freeze({ ...input });
163
166
  }
@@ -120,10 +120,44 @@ export function identityOf(envelope) {
120
120
  return Object.freeze({ host_epoch: envelope.host_epoch, plugin_id: envelope.plugin_id, scope_id: envelope.scope_id,
121
121
  scope_generation: envelope.scope_generation, call_id: envelope.call_id });
122
122
  }
123
+ /// A value a plugin produced, as `JSON.stringify` would write it.
124
+ ///
125
+ /// What a handler returns or a plugin sends is ordinary JavaScript, and
126
+ /// ordinary JavaScript leaves `undefined` in objects (`{ text, context }` with
127
+ /// no context), carries a `Date`, or builds its result with a class. The wire
128
+ /// takes plain JSON only, and refusing such a value used to mean the call was
129
+ /// never answered at all. This is the normalisation every JS author already
130
+ /// expects: `toJSON` is honoured; an `undefined`, function or symbol property
131
+ /// is left out, and in an array becomes `null`; a class instance is written as
132
+ /// its own enumerable fields. A non-finite number becomes `null`. What still
133
+ /// cannot be written — a cycle, a `BigInt` — is refused with a reason.
134
+ export function toWireJson(value, seen = new Set(), inArray = false) {
135
+ if (value instanceof RawJsonNumber) return value;
136
+ if (value !== null && typeof value === 'object' && typeof value.toJSON === 'function') value = value.toJSON();
137
+ if (value === undefined || typeof value === 'function' || typeof value === 'symbol') return inArray ? null : undefined;
138
+ if (value === null || typeof value === 'string' || typeof value === 'boolean') return value;
139
+ if (typeof value === 'number') return Number.isFinite(value) ? value : null;
140
+ if (typeof value === 'bigint') throw new ProtocolError('invalid_payload', 'a BigInt cannot be written as JSON; convert it to a number or a string');
141
+ if (seen.has(value)) throw new ProtocolError('invalid_payload', 'payload must not be cyclic');
142
+ seen.add(value);
143
+ let copy;
144
+ if (Array.isArray(value)) copy = value.map((item) => toWireJson(item, seen, true));
145
+ else {
146
+ copy = {};
147
+ for (const key of Object.keys(value)) {
148
+ const item = toWireJson(value[key], seen, false);
149
+ if (item !== undefined) copy[key] = item;
150
+ }
151
+ }
152
+ seen.delete(value);
153
+ return copy;
154
+ }
155
+ const wire = (payload) => (payload === undefined ? null : toWireJson(payload));
156
+
123
157
  export function envelope(identity, message) { return validateEnvelope({ protocol_version: PROTOCOL_VERSION, ...identity, message }); }
124
- export function terminal(identity, status, payload) { return envelope(identity, { type: 'terminal', status, payload }); }
125
- export function request(identity, method, payload) { return envelope(identity, { type: 'request', method, payload }); }
126
- export function notification(identity, method, payload) { return envelope(identity, { type: 'notification', method, payload }); }
127
- export function chunk(identity, payload) { return envelope(identity, { type: 'chunk', payload }); }
158
+ export function terminal(identity, status, payload) { return envelope(identity, { type: 'terminal', status, payload: wire(payload) }); }
159
+ export function request(identity, method, payload) { return envelope(identity, { type: 'request', method, payload: wire(payload) }); }
160
+ export function notification(identity, method, payload) { return envelope(identity, { type: 'notification', method, payload: wire(payload) }); }
161
+ export function chunk(identity, payload) { return envelope(identity, { type: 'chunk', payload: wire(payload) }); }
128
162
  export function cancel(target) { return notification(target, CALL_CANCEL_METHOD, null); }
129
163
  export function isPlatformControl(value) { return value.plugin_id === PLATFORM_PLUGIN_ID && value.scope_id === PLATFORM_CONTROL_SCOPE_ID && value.scope_generation === 0; }
package/bin/rebon CHANGED
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: package/bin/rebon
3
- size: 53689616 bytes
4
- sha256: a22821b7a79a5445d11b8bc1cd1056dd8e24df4622f4129c3a03f44836d9be8a
3
+ size: 55819024 bytes
4
+ sha256: 65dacb976347fb2495540a0d1fb76e44aec3322026076db94529445f4e88516b
Binary file
Binary file
Binary file
package/bin/rebon-lsp-mcp CHANGED
Binary file
package/bin/sandbox-win CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rebon/cli-darwin-arm64",
3
- "version": "1.8.7",
3
+ "version": "1.9.1",
4
4
  "description": "Agent cli for coding and more.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {