replicas-engine 0.1.695 → 0.1.697
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.
|
@@ -668,6 +668,7 @@ var AGENT_CREDENTIAL_METHODS_IN_ORDER = {
|
|
|
668
668
|
{ method: CREDENTIAL_METHOD.OPENROUTER, credentialType: CREDENTIAL_TYPE.OPENROUTER_API_KEY }
|
|
669
669
|
],
|
|
670
670
|
[AGENT.PI]: [
|
|
671
|
+
{ method: CREDENTIAL_METHOD.OPENCODE_GO, credentialType: CREDENTIAL_TYPE.OPENCODE_GO_API_KEY },
|
|
671
672
|
{ method: CREDENTIAL_METHOD.ASTER, credentialType: CREDENTIAL_TYPE.ASTER_API_KEY },
|
|
672
673
|
{ method: CREDENTIAL_METHOD.OPENROUTER, credentialType: CREDENTIAL_TYPE.OPENROUTER_API_KEY }
|
|
673
674
|
]
|
|
@@ -3842,7 +3843,6 @@ var HOSTED_COMPOSIO_PLUGIN_DEFINITIONS = [
|
|
|
3842
3843
|
["xero", "xero", "OAUTH2", false, "business", "Xero"],
|
|
3843
3844
|
["brex", "brex", "API_KEY", false, "business", "Brex"],
|
|
3844
3845
|
["buffer", "buffer", "OAUTH2", false, "business", "Buffer"],
|
|
3845
|
-
["docusign", "docusign", "OAUTH2", false, "business", "DocuSign"],
|
|
3846
3846
|
["canva", "canva", "OAUTH2", true, "productivity", "Canva"],
|
|
3847
3847
|
["webflow", "webflow", "API_KEY", false, "business", "Webflow"],
|
|
3848
3848
|
["firecrawl", "firecrawl", "API_KEY", false, "data", "Firecrawl"],
|
|
@@ -6765,7 +6765,7 @@ var DEFAULT_CODEX_ARGS = [
|
|
|
6765
6765
|
var MIN_CODEX_CLI_VERSION = "0.144.6";
|
|
6766
6766
|
var CODEX_UPGRADE_TIMEOUT_MS = 12e4;
|
|
6767
6767
|
var codexCliVersionEnsured = null;
|
|
6768
|
-
var ENGINE_PACKAGE_VERSION = "0.1.
|
|
6768
|
+
var ENGINE_PACKAGE_VERSION = "0.1.697";
|
|
6769
6769
|
var INITIALIZE_METHOD = "initialize";
|
|
6770
6770
|
var INITIALIZED_NOTIFICATION = "initialized";
|
|
6771
6771
|
var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
|
package/dist/src/index.js
CHANGED
|
@@ -192,7 +192,7 @@ import {
|
|
|
192
192
|
serializeCanvasContentResponse,
|
|
193
193
|
shellQuotePosix,
|
|
194
194
|
stripAgentDiagnosticErrors
|
|
195
|
-
} from "./chunk-
|
|
195
|
+
} from "./chunk-2YKP6MBQ.js";
|
|
196
196
|
|
|
197
197
|
// src/index.ts
|
|
198
198
|
import { serve } from "@hono/node-server";
|
|
@@ -9278,6 +9278,8 @@ import { z as z4 } from "zod";
|
|
|
9278
9278
|
// ../shared/src/credentials/opencode-go.ts
|
|
9279
9279
|
import { z as z3 } from "zod";
|
|
9280
9280
|
var OPENCODE_GO_PROVIDER = "opencode-go";
|
|
9281
|
+
var OPENCODE_GO_BASE_URL = "https://opencode.ai/zen/go/v1";
|
|
9282
|
+
var OPENCODE_MODELS_DEV_URL = "https://models.dev/api.json";
|
|
9281
9283
|
var DEFAULT_OPENCODE_GO_MODEL = "glm-5.2";
|
|
9282
9284
|
var opencodeGoModelsDevSchema = z3.object({
|
|
9283
9285
|
"opencode-go": z3.object({
|
|
@@ -9289,7 +9291,52 @@ var opencodeGoModelsDevSchema = z3.object({
|
|
|
9289
9291
|
}))
|
|
9290
9292
|
}).optional()
|
|
9291
9293
|
});
|
|
9294
|
+
function parseOpenCodeGoCatalog(value) {
|
|
9295
|
+
const parsed = opencodeGoModelsDevSchema.safeParse(value);
|
|
9296
|
+
const provider = parsed.success ? parsed.data["opencode-go"] : void 0;
|
|
9297
|
+
if (!provider) return null;
|
|
9298
|
+
const models = Object.fromEntries(
|
|
9299
|
+
Object.entries(provider.models).filter(([, definition]) => definition.status !== "deprecated" && definition.status !== "alpha").map(([id, definition]) => [id, {
|
|
9300
|
+
id: definition.id ?? id,
|
|
9301
|
+
name: definition.name,
|
|
9302
|
+
...definition.description ? { description: definition.description } : {},
|
|
9303
|
+
...definition.status ? { status: definition.status } : {}
|
|
9304
|
+
}])
|
|
9305
|
+
);
|
|
9306
|
+
if (Object.keys(models).length === 0) return null;
|
|
9307
|
+
return { models, authoritative: true };
|
|
9308
|
+
}
|
|
9292
9309
|
var OPENCODE_GO_CATALOG_CACHE_MS = 5 * 6e4;
|
|
9310
|
+
var openCodeGoCatalogCache;
|
|
9311
|
+
var openCodeGoCatalogRequest;
|
|
9312
|
+
async function fetchOpenCodeGoCatalog(fallbackModelIds = [DEFAULT_OPENCODE_GO_MODEL]) {
|
|
9313
|
+
if (openCodeGoCatalogCache && openCodeGoCatalogCache.expiresAt > Date.now()) {
|
|
9314
|
+
return openCodeGoCatalogCache.catalog;
|
|
9315
|
+
}
|
|
9316
|
+
openCodeGoCatalogRequest ??= (async () => {
|
|
9317
|
+
const response = await fetch(OPENCODE_MODELS_DEV_URL, { signal: AbortSignal.timeout(5e3) });
|
|
9318
|
+
if (!response.ok) throw new Error(`Failed to load OpenCode Go models (${response.status})`);
|
|
9319
|
+
const catalog = parseOpenCodeGoCatalog(await response.json());
|
|
9320
|
+
if (!catalog) throw new Error("OpenCode Go model catalog is unavailable");
|
|
9321
|
+
return catalog;
|
|
9322
|
+
})();
|
|
9323
|
+
try {
|
|
9324
|
+
const catalog = await openCodeGoCatalogRequest;
|
|
9325
|
+
openCodeGoCatalogCache = { catalog, expiresAt: Date.now() + OPENCODE_GO_CATALOG_CACHE_MS };
|
|
9326
|
+
return catalog;
|
|
9327
|
+
} catch {
|
|
9328
|
+
if (openCodeGoCatalogCache) return openCodeGoCatalogCache.catalog;
|
|
9329
|
+
return {
|
|
9330
|
+
authoritative: false,
|
|
9331
|
+
models: Object.fromEntries(fallbackModelIds.map((id) => [id, {
|
|
9332
|
+
id,
|
|
9333
|
+
name: id === DEFAULT_OPENCODE_GO_MODEL ? "GLM 5.2" : id
|
|
9334
|
+
}]))
|
|
9335
|
+
};
|
|
9336
|
+
} finally {
|
|
9337
|
+
openCodeGoCatalogRequest = void 0;
|
|
9338
|
+
}
|
|
9339
|
+
}
|
|
9293
9340
|
|
|
9294
9341
|
// src/managers/opencode-manager.ts
|
|
9295
9342
|
import {
|
|
@@ -9372,17 +9419,21 @@ async function getDefaultOpencodeModel(provider) {
|
|
|
9372
9419
|
function getOpenCodeGoModel(model) {
|
|
9373
9420
|
return model.replace(/^[^/]+\//, "");
|
|
9374
9421
|
}
|
|
9375
|
-
function opencodeConfig(provider, model) {
|
|
9422
|
+
function opencodeConfig(provider, model, providerModels = [model]) {
|
|
9376
9423
|
let config;
|
|
9377
9424
|
if (provider === OPENCODE_GO_PROVIDER) {
|
|
9378
9425
|
config = {
|
|
9379
9426
|
enabled_providers: [OPENCODE_GO_PROVIDER],
|
|
9380
9427
|
model: `${OPENCODE_GO_PROVIDER}/${model}`,
|
|
9428
|
+
provider: {
|
|
9429
|
+
[OPENCODE_GO_PROVIDER]: {
|
|
9430
|
+
models: Object.fromEntries(providerModels.map((candidate) => [candidate, {}]))
|
|
9431
|
+
}
|
|
9432
|
+
},
|
|
9381
9433
|
permission: OPENCODE_WORKSPACE_PERMISSION,
|
|
9382
9434
|
share: "disabled"
|
|
9383
9435
|
};
|
|
9384
9436
|
} else if (provider === ASTER_PROVIDER) {
|
|
9385
|
-
const models = getConfiguredOpencodeModels(model, provider);
|
|
9386
9437
|
config = {
|
|
9387
9438
|
enabled_providers: [ASTER_PROVIDER],
|
|
9388
9439
|
model: `${ASTER_PROVIDER}/${model}`,
|
|
@@ -9391,20 +9442,19 @@ function opencodeConfig(provider, model) {
|
|
|
9391
9442
|
npm: "@ai-sdk/openai-compatible",
|
|
9392
9443
|
name: "Aster",
|
|
9393
9444
|
options: { baseURL: ASTER_BASE_URL },
|
|
9394
|
-
models: Object.fromEntries(
|
|
9445
|
+
models: Object.fromEntries(providerModels.map((candidate) => [candidate, {}]))
|
|
9395
9446
|
}
|
|
9396
9447
|
},
|
|
9397
9448
|
permission: OPENCODE_WORKSPACE_PERMISSION,
|
|
9398
9449
|
share: "disabled"
|
|
9399
9450
|
};
|
|
9400
9451
|
} else {
|
|
9401
|
-
const models = getConfiguredOpencodeModels(model, provider);
|
|
9402
9452
|
config = {
|
|
9403
9453
|
enabled_providers: ["openrouter"],
|
|
9404
9454
|
model: `openrouter/${model}`,
|
|
9405
9455
|
provider: {
|
|
9406
9456
|
openrouter: {
|
|
9407
|
-
models: Object.fromEntries(
|
|
9457
|
+
models: Object.fromEntries(providerModels.map((candidate) => [candidate, {}]))
|
|
9408
9458
|
}
|
|
9409
9459
|
},
|
|
9410
9460
|
permission: OPENCODE_WORKSPACE_PERMISSION,
|
|
@@ -9413,9 +9463,6 @@ function opencodeConfig(provider, model) {
|
|
|
9413
9463
|
}
|
|
9414
9464
|
return config;
|
|
9415
9465
|
}
|
|
9416
|
-
function getConfiguredOpencodeModels(model, provider) {
|
|
9417
|
-
return [.../* @__PURE__ */ new Set([model, ...provider === ASTER_PROVIDER ? ASTER_MODELS : []])];
|
|
9418
|
-
}
|
|
9419
9466
|
function opencodeCommandToSlashCommand(command) {
|
|
9420
9467
|
return createProviderSlashCommand("opencode", command.name, command.description);
|
|
9421
9468
|
}
|
|
@@ -9545,6 +9592,7 @@ var OpencodeManager = class extends CodingAgentManager {
|
|
|
9545
9592
|
historyFile;
|
|
9546
9593
|
activeAbortController = null;
|
|
9547
9594
|
configuredModels = /* @__PURE__ */ new Set();
|
|
9595
|
+
clientUpdate = Promise.resolve();
|
|
9548
9596
|
providerId = "openrouter";
|
|
9549
9597
|
eventAbortController = null;
|
|
9550
9598
|
eventSubscriptionReady = Promise.resolve();
|
|
@@ -9609,7 +9657,7 @@ var OpencodeManager = class extends CodingAgentManager {
|
|
|
9609
9657
|
this.slashCommandsRequest ??= (async () => {
|
|
9610
9658
|
try {
|
|
9611
9659
|
const provider = await getOpencodeProvider();
|
|
9612
|
-
const client2 = await this.ensureClient(await getDefaultOpencodeModel(provider), provider);
|
|
9660
|
+
const client2 = await this.ensureClient(await getDefaultOpencodeModel(provider), provider, true);
|
|
9613
9661
|
const directories = [this.workingDirectory, ...await getAgentAdditionalDirectories()];
|
|
9614
9662
|
const perDirectory = await Promise.all(directories.map(async (directory) => {
|
|
9615
9663
|
try {
|
|
@@ -9639,68 +9687,80 @@ var OpencodeManager = class extends CodingAgentManager {
|
|
|
9639
9687
|
})();
|
|
9640
9688
|
return this.slashCommandsRequest;
|
|
9641
9689
|
}
|
|
9642
|
-
async ensureClient(model, providerId) {
|
|
9643
|
-
|
|
9690
|
+
async ensureClient(model, providerId, reuseExisting = false) {
|
|
9691
|
+
const previousUpdate = this.clientUpdate;
|
|
9692
|
+
let finishUpdate = () => {
|
|
9693
|
+
};
|
|
9694
|
+
this.clientUpdate = new Promise((resolve5) => {
|
|
9695
|
+
finishUpdate = resolve5;
|
|
9696
|
+
});
|
|
9697
|
+
await previousUpdate;
|
|
9698
|
+
try {
|
|
9699
|
+
if (reuseExisting && this.client) return this.client;
|
|
9700
|
+
if (this.client && this.providerId !== providerId) {
|
|
9701
|
+
this.eventAbortController?.abort();
|
|
9702
|
+
this.server?.close();
|
|
9703
|
+
this.client = null;
|
|
9704
|
+
this.server = null;
|
|
9705
|
+
this.configuredModels.clear();
|
|
9706
|
+
}
|
|
9707
|
+
this.providerId = providerId;
|
|
9708
|
+
const configuredModel = providerId === OPENCODE_GO_PROVIDER ? getOpenCodeGoModel(model) : model;
|
|
9709
|
+
const providerModels = providerId === OPENCODE_GO_PROVIDER ? Object.keys((await fetchOpenCodeGoCatalog()).models) : providerId === ASTER_PROVIDER ? ASTER_MODELS : await getAllowedOpenRouterModels();
|
|
9710
|
+
if (!providerModels.includes(configuredModel)) {
|
|
9711
|
+
throw new Error(`Model ${configuredModel} is not available through ${providerId}.`);
|
|
9712
|
+
}
|
|
9713
|
+
if (this.client && this.configuredModels.has(configuredModel)) {
|
|
9714
|
+
return this.client;
|
|
9715
|
+
}
|
|
9716
|
+
if (!await hasOpencodeCredentials(providerId)) {
|
|
9717
|
+
throw new Error("OpenCode Go, Aster, or OpenRouter credentials are not configured for Opencode in this workspace.");
|
|
9718
|
+
}
|
|
9644
9719
|
this.eventAbortController?.abort();
|
|
9645
9720
|
this.server?.close();
|
|
9646
|
-
|
|
9647
|
-
|
|
9648
|
-
|
|
9649
|
-
|
|
9650
|
-
|
|
9651
|
-
|
|
9652
|
-
|
|
9653
|
-
|
|
9654
|
-
|
|
9655
|
-
|
|
9656
|
-
|
|
9657
|
-
|
|
9658
|
-
|
|
9659
|
-
|
|
9660
|
-
|
|
9661
|
-
|
|
9662
|
-
|
|
9663
|
-
|
|
9664
|
-
|
|
9665
|
-
|
|
9666
|
-
|
|
9667
|
-
|
|
9668
|
-
|
|
9669
|
-
|
|
9670
|
-
|
|
9671
|
-
|
|
9672
|
-
|
|
9673
|
-
|
|
9674
|
-
|
|
9675
|
-
|
|
9676
|
-
|
|
9677
|
-
|
|
9678
|
-
|
|
9679
|
-
|
|
9680
|
-
|
|
9681
|
-
|
|
9682
|
-
|
|
9683
|
-
|
|
9684
|
-
|
|
9685
|
-
|
|
9686
|
-
|
|
9687
|
-
|
|
9688
|
-
|
|
9689
|
-
this.eventAbortController = eventController;
|
|
9690
|
-
this.eventSubscriptionReady = new Promise((resolve5) => {
|
|
9691
|
-
this.resolveEventSubscriptionReady = resolve5;
|
|
9692
|
-
});
|
|
9693
|
-
this.subscribeToEvents(client2, eventController).catch((error) => {
|
|
9694
|
-
this.resolveEventSubscriptionReady?.();
|
|
9695
|
-
this.resolveEventSubscriptionReady = null;
|
|
9696
|
-
console.error("[OpencodeManager] Event subscription failed:", error);
|
|
9697
|
-
this.recordHistoryEvent("opencode-error", opencodeErrorPayload(error), this.historyFile);
|
|
9698
|
-
});
|
|
9699
|
-
await Promise.race([
|
|
9700
|
-
this.eventSubscriptionReady,
|
|
9701
|
-
new Promise((resolve5) => setTimeout(resolve5, 2e3))
|
|
9702
|
-
]);
|
|
9703
|
-
return client2;
|
|
9721
|
+
const pathEntries = (process.env.PATH ?? "").split(delimiter).filter(Boolean);
|
|
9722
|
+
if (!pathEntries.includes(OPENCODE_SHIM_DIR)) {
|
|
9723
|
+
process.env.PATH = [OPENCODE_SHIM_DIR, ...pathEntries].join(delimiter);
|
|
9724
|
+
}
|
|
9725
|
+
const password = process.env.OPENCODE_SERVER_PASSWORD || randomBytes2(24).toString("base64url");
|
|
9726
|
+
process.env.OPENCODE_SERVER_PASSWORD = password;
|
|
9727
|
+
const config = opencodeConfig(providerId, configuredModel, providerModels);
|
|
9728
|
+
const mcp = await readProvisionedOpencodeMcpConfig();
|
|
9729
|
+
if (mcp && Object.keys(mcp).length > 0) config.mcp = mcp;
|
|
9730
|
+
const server = await createOpencodeServer({
|
|
9731
|
+
port: 0,
|
|
9732
|
+
timeout: OPENCODE_SERVER_STARTUP_TIMEOUT_MS,
|
|
9733
|
+
config
|
|
9734
|
+
});
|
|
9735
|
+
const client2 = createOpencodeClient({
|
|
9736
|
+
baseUrl: server.url,
|
|
9737
|
+
fetch: opencodeFetch,
|
|
9738
|
+
headers: {
|
|
9739
|
+
Authorization: `Basic ${Buffer.from(`opencode:${password}`).toString("base64")}`
|
|
9740
|
+
}
|
|
9741
|
+
});
|
|
9742
|
+
this.client = client2;
|
|
9743
|
+
this.server = server;
|
|
9744
|
+
this.configuredModels = new Set(providerModels);
|
|
9745
|
+
const eventController = new AbortController();
|
|
9746
|
+
this.eventAbortController = eventController;
|
|
9747
|
+
this.eventSubscriptionReady = new Promise((resolve5) => {
|
|
9748
|
+
this.resolveEventSubscriptionReady = resolve5;
|
|
9749
|
+
});
|
|
9750
|
+
this.subscribeToEvents(client2, eventController).catch((error) => {
|
|
9751
|
+
this.resolveEventSubscriptionReady?.();
|
|
9752
|
+
this.resolveEventSubscriptionReady = null;
|
|
9753
|
+
console.error("[OpencodeManager] Event subscription failed:", error);
|
|
9754
|
+
this.recordHistoryEvent("opencode-error", opencodeErrorPayload(error), this.historyFile);
|
|
9755
|
+
});
|
|
9756
|
+
await Promise.race([
|
|
9757
|
+
this.eventSubscriptionReady,
|
|
9758
|
+
new Promise((resolve5) => setTimeout(resolve5, 2e3))
|
|
9759
|
+
]);
|
|
9760
|
+
return client2;
|
|
9761
|
+
} finally {
|
|
9762
|
+
finishUpdate();
|
|
9763
|
+
}
|
|
9704
9764
|
}
|
|
9705
9765
|
async ensureSession(client2, model, agent, variant) {
|
|
9706
9766
|
if (this.sessionId) {
|
|
@@ -10108,6 +10168,31 @@ function registerOpenRouterModels(modelRegistry, apiKey, modelIds) {
|
|
|
10108
10168
|
]
|
|
10109
10169
|
});
|
|
10110
10170
|
}
|
|
10171
|
+
function registerOpenAiCompatibleProvider(modelRegistry, {
|
|
10172
|
+
providerId,
|
|
10173
|
+
name,
|
|
10174
|
+
apiKey,
|
|
10175
|
+
baseUrl,
|
|
10176
|
+
models
|
|
10177
|
+
}) {
|
|
10178
|
+
modelRegistry.registerProvider(providerId, {
|
|
10179
|
+
name,
|
|
10180
|
+
api: "openai-completions",
|
|
10181
|
+
apiKey,
|
|
10182
|
+
baseUrl,
|
|
10183
|
+
authHeader: true,
|
|
10184
|
+
models: models.map((model) => ({
|
|
10185
|
+
id: model.id,
|
|
10186
|
+
name: model.name,
|
|
10187
|
+
api: "openai-completions",
|
|
10188
|
+
reasoning: true,
|
|
10189
|
+
input: ["text"],
|
|
10190
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
10191
|
+
contextWindow: model.contextWindow ?? 131072,
|
|
10192
|
+
maxTokens: 65536
|
|
10193
|
+
}))
|
|
10194
|
+
});
|
|
10195
|
+
}
|
|
10111
10196
|
function eventPayload(event) {
|
|
10112
10197
|
return isRecord2(event) ? { ...event } : { value: event };
|
|
10113
10198
|
}
|
|
@@ -10191,7 +10276,7 @@ var PiManager = class extends CodingAgentManager {
|
|
|
10191
10276
|
async enqueueMessage(request, onAccepted) {
|
|
10192
10277
|
await this.initialized;
|
|
10193
10278
|
if (!this.session && !this.getProviderCredentials()) {
|
|
10194
|
-
throw new Error("Aster or OpenRouter authentication is missing for Pi. Add an API key in Settings \u2192 Coding agents.");
|
|
10279
|
+
throw new Error("OpenCode Go, Aster, or OpenRouter authentication is missing for Pi. Add an API key in Settings \u2192 Coding agents.");
|
|
10195
10280
|
}
|
|
10196
10281
|
return this.messageQueue.enqueue(request, onAccepted);
|
|
10197
10282
|
}
|
|
@@ -10223,32 +10308,37 @@ var PiManager = class extends CodingAgentManager {
|
|
|
10223
10308
|
}
|
|
10224
10309
|
const authStorage = AuthStorage.create(PI_AUTH_PATH);
|
|
10225
10310
|
const credentials = this.getProviderCredentials(authStorage);
|
|
10226
|
-
if (!credentials) throw new Error("Aster or OpenRouter API key is not configured for Pi.");
|
|
10311
|
+
if (!credentials) throw new Error("OpenCode Go, Aster, or OpenRouter API key is not configured for Pi.");
|
|
10227
10312
|
this.providerId = credentials.provider;
|
|
10228
10313
|
this.providerApiKey = credentials.apiKey;
|
|
10229
10314
|
const modelRegistry = ModelRegistry.create(authStorage);
|
|
10230
|
-
|
|
10231
|
-
|
|
10315
|
+
let defaultModel = DEFAULT_ASTER_MODEL;
|
|
10316
|
+
if (this.providerId === OPENCODE_GO_PROVIDER) {
|
|
10317
|
+
const catalog = await fetchOpenCodeGoCatalog([request.model ?? DEFAULT_OPENCODE_GO_MODEL]);
|
|
10318
|
+
const models = Object.entries(catalog.models);
|
|
10319
|
+
defaultModel = catalog.models[DEFAULT_OPENCODE_GO_MODEL] ? DEFAULT_OPENCODE_GO_MODEL : models[0]?.[0] ?? DEFAULT_OPENCODE_GO_MODEL;
|
|
10320
|
+
registerOpenAiCompatibleProvider(modelRegistry, {
|
|
10321
|
+
providerId: OPENCODE_GO_PROVIDER,
|
|
10322
|
+
name: "OpenCode Go",
|
|
10323
|
+
apiKey: credentials.apiKey,
|
|
10324
|
+
baseUrl: OPENCODE_GO_BASE_URL,
|
|
10325
|
+
models: models.map(([id, model2]) => ({ id, name: model2.name }))
|
|
10326
|
+
});
|
|
10327
|
+
} else if (this.providerId === ASTER_PROVIDER) {
|
|
10328
|
+
registerOpenAiCompatibleProvider(modelRegistry, {
|
|
10329
|
+
providerId: ASTER_PROVIDER,
|
|
10232
10330
|
name: "Aster",
|
|
10233
|
-
api: "openai-completions",
|
|
10234
10331
|
apiKey: credentials.apiKey,
|
|
10235
10332
|
baseUrl: ASTER_BASE_URL,
|
|
10236
|
-
authHeader: true,
|
|
10237
10333
|
models: ASTER_MODELS.map((id) => ({
|
|
10238
10334
|
id,
|
|
10239
10335
|
name: ASTER_MODEL_LABELS[id] ?? id,
|
|
10240
|
-
|
|
10241
|
-
reasoning: true,
|
|
10242
|
-
input: ["text"],
|
|
10243
|
-
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
10244
|
-
contextWindow: id === "kimi-k3" ? 1e6 : 131072,
|
|
10245
|
-
maxTokens: 65536
|
|
10336
|
+
contextWindow: id === "kimi-k3" ? 1e6 : 131072
|
|
10246
10337
|
}))
|
|
10247
10338
|
});
|
|
10248
10339
|
}
|
|
10249
|
-
let defaultModel = DEFAULT_ASTER_MODEL;
|
|
10250
10340
|
let allowedModels = null;
|
|
10251
|
-
if (this.providerId
|
|
10341
|
+
if (this.providerId === "openrouter") {
|
|
10252
10342
|
allowedModels = await getAllowedOpenRouterModels();
|
|
10253
10343
|
registerOpenRouterModels(modelRegistry, credentials.apiKey, allowedModels);
|
|
10254
10344
|
defaultModel = allowedModels[0] ?? DEFAULT_PI_MODEL;
|
|
@@ -10286,7 +10376,7 @@ var PiManager = class extends CodingAgentManager {
|
|
|
10286
10376
|
return this.session;
|
|
10287
10377
|
}
|
|
10288
10378
|
getProviderCredentials(authStorage = AuthStorage.create(PI_AUTH_PATH)) {
|
|
10289
|
-
for (const provider of [ASTER_PROVIDER, "openrouter"]) {
|
|
10379
|
+
for (const provider of [OPENCODE_GO_PROVIDER, ASTER_PROVIDER, "openrouter"]) {
|
|
10290
10380
|
const credential = authStorage.get(provider);
|
|
10291
10381
|
if (credential?.type === "api_key") return { provider, apiKey: credential.key };
|
|
10292
10382
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Generated from shared/src by generate-workspace-sdk-types.mjs; do not edit.
|
|
2
2
|
export declare const HOSTED_PLUGIN_AUTH_SCHEMES: readonly ["API_KEY", "BASIC", "BEARER_TOKEN", "DCR_OAUTH", "OAUTH1", "OAUTH2"];
|
|
3
3
|
export type HostedPluginAuthScheme = (typeof HOSTED_PLUGIN_AUTH_SCHEMES)[number];
|
|
4
|
-
declare const HOSTED_COMPOSIO_PLUGIN_DEFINITIONS: readonly [["notion", "notion", "OAUTH2", true, "productivity", "Notion"], ["jira", "jira", "OAUTH2", true, "productivity", "Jira"], ["confluence", "confluence", "OAUTH2", true, "productivity", "Confluence"], ["googlecalendar", "googlecalendar", "OAUTH2", true, "productivity", "Google Calendar"], ["microsoftteams", "microsoft_teams", "OAUTH2", true, "productivity", "Microsoft Teams"], ["outlook", "outlook", "OAUTH2", true, "productivity", "Outlook"], ["bitbucket", "bitbucket", "OAUTH2", true, "data", "Bitbucket"], ["datadog", "datadog", "API_KEY", false, "data", "Datadog"], ["pagerduty", "pagerduty", "OAUTH2", true, "data", "PagerDuty"], ["intercom", "intercom", "OAUTH2", true, "business", "Intercom"], ["zendesk", "zendesk", "OAUTH2", true, "business", "Zendesk"], ["hubspot", "hubspot", "OAUTH2", true, "business", "HubSpot"], ["supabase", "supabase", "OAUTH2", true, "data", "Supabase"], ["figma", "figma", "OAUTH2", true, "productivity", "Figma"], ["launchdarkly", "launch_darkly", "API_KEY", false, "data", "LaunchDarkly"], ["asana", "asana", "OAUTH2", true, "productivity", "Asana"], ["clickup", "clickup", "OAUTH2", true, "productivity", "ClickUp"], ["trello", "trello", "OAUTH1", true, "productivity", "Trello"], ["todoist", "todoist", "OAUTH2", true, "productivity", "Todoist"], ["airtable", "airtable", "OAUTH2", true, "productivity", "Airtable"], ["coda", "coda", "API_KEY", false, "productivity", "Coda"], ["miro", "miro", "OAUTH2", true, "productivity", "Miro"], ["sharepoint", "share_point", "OAUTH2", true, "productivity", "SharePoint"], ["onedrive", "one_drive", "OAUTH2", true, "productivity", "OneDrive"], ["googleslides", "googleslides", "OAUTH2", true, "productivity", "Google Slides"], ["googlemeet", "googlemeet", "OAUTH2", true, "productivity", "Google Meet"], ["googletasks", "googletasks", "OAUTH2", true, "productivity", "Google Tasks"], ["dropbox", "dropbox", "OAUTH2", true, "productivity", "Dropbox"], ["box", "box", "OAUTH2", true, "productivity", "Box"], ["discord", "discord", "OAUTH2", true, "productivity", "Discord"], ["discordbot", "discordbot", "OAUTH2", true, "productivity", "Discord Bot"], ["zoom", "zoom", "OAUTH2", true, "productivity", "Zoom"], ["googlechat", "google_chat", "OAUTH2", false, "productivity", "Google Chat"], ["newrelic", "new_relic", "API_KEY", false, "data", "New Relic"], ["betterstack", "better_stack", "API_KEY", false, "data", "Better Stack"], ["incidentio", "incident_io", "API_KEY", false, "data", "incident.io"], ["grafana", "grafana", "BEARER_TOKEN", false, "data", "Grafana"], ["honeycomb", "honeycomb_mcp", "DCR_OAUTH", false, "data", "Honeycomb MCP"], ["bugsnag", "bugsnag", "API_KEY", false, "data", "Bugsnag"], ["circleci", "circleci", "API_KEY", false, "data", "CircleCI"], ["buildkite", "buildkite", "API_KEY", false, "data", "Buildkite"], ["dockerhub", "docker_hub", "API_KEY", false, "data", "Docker Hub"], ["digitalocean", "digital_ocean", "OAUTH2", true, "data", "DigitalOcean"], ["railway", "railway", "API_KEY", false, "data", "Railway"], ["render", "render", "API_KEY", false, "data", "Render"], ["firebase", "firebase", "API_KEY", false, "data", "Firebase"], ["cloudinary", "cloudinary", "API_KEY", false, "data", "Cloudinary"], ["configcat", "configcat", "API_KEY", false, "data", "ConfigCat"], ["contextdev", "context_dev", "API_KEY", false, "data", "Context.dev"], ["googleanalytics", "google_analytics", "OAUTH2", true, "data", "Google Analytics"], ["googlebigquery", "googlebigquery", "OAUTH2", true, "data", "Google BigQuery"], ["amplitude", "amplitude", "API_KEY", false, "data", "Amplitude"], ["mixpanel", "mixpanel", "BASIC", false, "data", "Mixpanel"], ["segment", "segment", "API_KEY", false, "data", "Segment"], ["databricks", "databricks", "API_KEY", false, "data", "Databricks"], ["snowflake", "snowflake", "OAUTH2", false, "data", "Snowflake"], ["algolia", "algolia", "API_KEY", false, "data", "Algolia"], ["elasticsearch", "elasticsearch", "API_KEY", false, "data", "Elasticsearch"], ["salesforce", "salesforce", "OAUTH2", true, "business", "Salesforce"], ["pipedrive", "pipedrive", "API_KEY", false, "business", "Pipedrive"], ["close", "close", "API_KEY", false, "business", "Close"], ["apollo", "apollo", "API_KEY", false, "business", "Apollo"], ["gong", "gong", "OAUTH2", true, "business", "Gong"], ["freshdesk", "freshdesk", "API_KEY", false, "business", "Freshdesk"], ["helpscout", "help_scout", "OAUTH2", false, "business", "Help Scout"], ["servicenow", "servicenow", "BASIC", false, "business", "ServiceNow"], ["mailchimp", "mailchimp", "OAUTH2", true, "business", "Mailchimp"], ["customerio", "customerio", "API_KEY", false, "business", "Customer.io"], ["klaviyo", "klaviyo", "API_KEY", false, "business", "Klaviyo"], ["shopify", "shopify", "API_KEY", false, "business", "Shopify"], ["quickbooks", "quickbooks", "OAUTH2", true, "business", "QuickBooks"], ["xero", "xero", "OAUTH2", false, "business", "Xero"], ["brex", "brex", "API_KEY", false, "business", "Brex"], ["buffer", "buffer", "OAUTH2", false, "business", "Buffer"], ["
|
|
4
|
+
declare const HOSTED_COMPOSIO_PLUGIN_DEFINITIONS: readonly [["notion", "notion", "OAUTH2", true, "productivity", "Notion"], ["jira", "jira", "OAUTH2", true, "productivity", "Jira"], ["confluence", "confluence", "OAUTH2", true, "productivity", "Confluence"], ["googlecalendar", "googlecalendar", "OAUTH2", true, "productivity", "Google Calendar"], ["microsoftteams", "microsoft_teams", "OAUTH2", true, "productivity", "Microsoft Teams"], ["outlook", "outlook", "OAUTH2", true, "productivity", "Outlook"], ["bitbucket", "bitbucket", "OAUTH2", true, "data", "Bitbucket"], ["datadog", "datadog", "API_KEY", false, "data", "Datadog"], ["pagerduty", "pagerduty", "OAUTH2", true, "data", "PagerDuty"], ["intercom", "intercom", "OAUTH2", true, "business", "Intercom"], ["zendesk", "zendesk", "OAUTH2", true, "business", "Zendesk"], ["hubspot", "hubspot", "OAUTH2", true, "business", "HubSpot"], ["supabase", "supabase", "OAUTH2", true, "data", "Supabase"], ["figma", "figma", "OAUTH2", true, "productivity", "Figma"], ["launchdarkly", "launch_darkly", "API_KEY", false, "data", "LaunchDarkly"], ["asana", "asana", "OAUTH2", true, "productivity", "Asana"], ["clickup", "clickup", "OAUTH2", true, "productivity", "ClickUp"], ["trello", "trello", "OAUTH1", true, "productivity", "Trello"], ["todoist", "todoist", "OAUTH2", true, "productivity", "Todoist"], ["airtable", "airtable", "OAUTH2", true, "productivity", "Airtable"], ["coda", "coda", "API_KEY", false, "productivity", "Coda"], ["miro", "miro", "OAUTH2", true, "productivity", "Miro"], ["sharepoint", "share_point", "OAUTH2", true, "productivity", "SharePoint"], ["onedrive", "one_drive", "OAUTH2", true, "productivity", "OneDrive"], ["googleslides", "googleslides", "OAUTH2", true, "productivity", "Google Slides"], ["googlemeet", "googlemeet", "OAUTH2", true, "productivity", "Google Meet"], ["googletasks", "googletasks", "OAUTH2", true, "productivity", "Google Tasks"], ["dropbox", "dropbox", "OAUTH2", true, "productivity", "Dropbox"], ["box", "box", "OAUTH2", true, "productivity", "Box"], ["discord", "discord", "OAUTH2", true, "productivity", "Discord"], ["discordbot", "discordbot", "OAUTH2", true, "productivity", "Discord Bot"], ["zoom", "zoom", "OAUTH2", true, "productivity", "Zoom"], ["googlechat", "google_chat", "OAUTH2", false, "productivity", "Google Chat"], ["newrelic", "new_relic", "API_KEY", false, "data", "New Relic"], ["betterstack", "better_stack", "API_KEY", false, "data", "Better Stack"], ["incidentio", "incident_io", "API_KEY", false, "data", "incident.io"], ["grafana", "grafana", "BEARER_TOKEN", false, "data", "Grafana"], ["honeycomb", "honeycomb_mcp", "DCR_OAUTH", false, "data", "Honeycomb MCP"], ["bugsnag", "bugsnag", "API_KEY", false, "data", "Bugsnag"], ["circleci", "circleci", "API_KEY", false, "data", "CircleCI"], ["buildkite", "buildkite", "API_KEY", false, "data", "Buildkite"], ["dockerhub", "docker_hub", "API_KEY", false, "data", "Docker Hub"], ["digitalocean", "digital_ocean", "OAUTH2", true, "data", "DigitalOcean"], ["railway", "railway", "API_KEY", false, "data", "Railway"], ["render", "render", "API_KEY", false, "data", "Render"], ["firebase", "firebase", "API_KEY", false, "data", "Firebase"], ["cloudinary", "cloudinary", "API_KEY", false, "data", "Cloudinary"], ["configcat", "configcat", "API_KEY", false, "data", "ConfigCat"], ["contextdev", "context_dev", "API_KEY", false, "data", "Context.dev"], ["googleanalytics", "google_analytics", "OAUTH2", true, "data", "Google Analytics"], ["googlebigquery", "googlebigquery", "OAUTH2", true, "data", "Google BigQuery"], ["amplitude", "amplitude", "API_KEY", false, "data", "Amplitude"], ["mixpanel", "mixpanel", "BASIC", false, "data", "Mixpanel"], ["segment", "segment", "API_KEY", false, "data", "Segment"], ["databricks", "databricks", "API_KEY", false, "data", "Databricks"], ["snowflake", "snowflake", "OAUTH2", false, "data", "Snowflake"], ["algolia", "algolia", "API_KEY", false, "data", "Algolia"], ["elasticsearch", "elasticsearch", "API_KEY", false, "data", "Elasticsearch"], ["salesforce", "salesforce", "OAUTH2", true, "business", "Salesforce"], ["pipedrive", "pipedrive", "API_KEY", false, "business", "Pipedrive"], ["close", "close", "API_KEY", false, "business", "Close"], ["apollo", "apollo", "API_KEY", false, "business", "Apollo"], ["gong", "gong", "OAUTH2", true, "business", "Gong"], ["freshdesk", "freshdesk", "API_KEY", false, "business", "Freshdesk"], ["helpscout", "help_scout", "OAUTH2", false, "business", "Help Scout"], ["servicenow", "servicenow", "BASIC", false, "business", "ServiceNow"], ["mailchimp", "mailchimp", "OAUTH2", true, "business", "Mailchimp"], ["customerio", "customerio", "API_KEY", false, "business", "Customer.io"], ["klaviyo", "klaviyo", "API_KEY", false, "business", "Klaviyo"], ["shopify", "shopify", "API_KEY", false, "business", "Shopify"], ["quickbooks", "quickbooks", "OAUTH2", true, "business", "QuickBooks"], ["xero", "xero", "OAUTH2", false, "business", "Xero"], ["brex", "brex", "API_KEY", false, "business", "Brex"], ["buffer", "buffer", "OAUTH2", false, "business", "Buffer"], ["canva", "canva", "OAUTH2", true, "productivity", "Canva"], ["webflow", "webflow", "API_KEY", false, "business", "Webflow"], ["firecrawl", "firecrawl", "API_KEY", false, "data", "Firecrawl"], ["browserbase", "browserbase_tool", "API_KEY", false, "data", "Browserbase"], ["exa", "exa", "API_KEY", false, "data", "Exa"], ["youtube", "youtube", "OAUTH2", true, "business", "YouTube"], ["twitter", "twitter", "OAUTH2", false, "business", "Twitter/X"], ["instagram", "instagram", "OAUTH2", true, "business", "Instagram"], ["facebook", "facebook", "OAUTH2", true, "business", "Facebook"]];
|
|
5
5
|
type HostedComposioPlugin = {
|
|
6
6
|
id: (typeof HOSTED_COMPOSIO_PLUGIN_DEFINITIONS)[number][0];
|
|
7
7
|
backend: 'composio';
|