replicas-cli 0.2.283 → 0.2.284
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/{chunk-WHWH6H5W.mjs → chunk-4FSDNCBY.mjs} +55 -54
- package/dist/{chunk-IYT446IS.mjs → chunk-6VME6DX3.mjs} +377 -102
- package/dist/{chunk-Q2YIUYO5.mjs → chunk-KK6GYGUU.mjs} +12 -12
- package/dist/{chunk-VDOMBJEB.mjs → chunk-NVNLENJ4.mjs} +80 -72
- package/dist/{chunk-NE3F7K7B.mjs → chunk-RQL7JLTE.mjs} +11 -11
- package/dist/{chunk-BBX2YVOK.mjs → chunk-WQSLVATR.mjs} +33 -33
- package/dist/{dist-es-EC3POK4F.mjs → dist-es-BX7CYWBD.mjs} +22 -19
- package/dist/{dist-es-3AXDJI6F.mjs → dist-es-CGONY45O.mjs} +17 -17
- package/dist/{dist-es-SYSOOS3K.mjs → dist-es-DTKVVIKD.mjs} +4 -4
- package/dist/{dist-es-YYOEQY7N.mjs → dist-es-HR2XYBRQ.mjs} +7 -7
- package/dist/{dist-es-7KF5M4TT.mjs → dist-es-UCGFMRLC.mjs} +43 -35
- package/dist/{dist-es-HDJG642P.mjs → dist-es-UXGKQHMI.mjs} +9 -9
- package/dist/{dist-es-ZSLNSC26.mjs → dist-es-XUNSYJ43.mjs} +7 -7
- package/dist/{event-streams-LBH5ISIB.mjs → event-streams-HJSS3SIJ.mjs} +17 -17
- package/dist/index.mjs +182 -36
- package/dist/{loadSso-P6SZ6EZE.mjs → loadSso-HB5FHNX6.mjs} +19 -19
- package/dist/{signin-5AIFZB3D.mjs → signin-3CFFWTPH.mjs} +155 -77
- package/dist/{sso-oidc-BLJ4YGMZ.mjs → sso-oidc-HKJFKUG4.mjs} +21 -21
- package/dist/{sts-TZAOHYLW.mjs → sts-4KOQ3DIV.mjs} +434 -45
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1473,7 +1473,7 @@ var require_stringify = __commonJS({
|
|
|
1473
1473
|
props.push(doc.directives.tagString(tag));
|
|
1474
1474
|
return props.join(" ");
|
|
1475
1475
|
}
|
|
1476
|
-
function
|
|
1476
|
+
function stringify(item, ctx, onComment, onChompKeep) {
|
|
1477
1477
|
if (identity.isPair(item))
|
|
1478
1478
|
return item.toString(ctx, onComment, onChompKeep);
|
|
1479
1479
|
if (identity.isAlias(item)) {
|
|
@@ -1502,7 +1502,7 @@ var require_stringify = __commonJS({
|
|
|
1502
1502
|
${ctx.indent}${str}`;
|
|
1503
1503
|
}
|
|
1504
1504
|
exports.createStringifyContext = createStringifyContext;
|
|
1505
|
-
exports.stringify =
|
|
1505
|
+
exports.stringify = stringify;
|
|
1506
1506
|
}
|
|
1507
1507
|
});
|
|
1508
1508
|
|
|
@@ -1512,7 +1512,7 @@ var require_stringifyPair = __commonJS({
|
|
|
1512
1512
|
"use strict";
|
|
1513
1513
|
var identity = require_identity();
|
|
1514
1514
|
var Scalar = require_Scalar();
|
|
1515
|
-
var
|
|
1515
|
+
var stringify = require_stringify();
|
|
1516
1516
|
var stringifyComment = require_stringifyComment();
|
|
1517
1517
|
function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
|
|
1518
1518
|
const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;
|
|
@@ -1534,7 +1534,7 @@ var require_stringifyPair = __commonJS({
|
|
|
1534
1534
|
});
|
|
1535
1535
|
let keyCommentDone = false;
|
|
1536
1536
|
let chompKeep = false;
|
|
1537
|
-
let str =
|
|
1537
|
+
let str = stringify.stringify(key, ctx, () => keyCommentDone = true, () => chompKeep = true);
|
|
1538
1538
|
if (!explicitKey && !ctx.inFlow && str.length > 1024) {
|
|
1539
1539
|
if (simpleKeys)
|
|
1540
1540
|
throw new Error("With simple keys, single line scalar must not span more than 1024 characters");
|
|
@@ -1586,7 +1586,7 @@ ${indent}:`;
|
|
|
1586
1586
|
ctx.indent = ctx.indent.substring(2);
|
|
1587
1587
|
}
|
|
1588
1588
|
let valueCommentDone = false;
|
|
1589
|
-
const valueStr =
|
|
1589
|
+
const valueStr = stringify.stringify(value, ctx, () => valueCommentDone = true, () => chompKeep = true);
|
|
1590
1590
|
let ws = " ";
|
|
1591
1591
|
if (keyComment || vsb || vcb) {
|
|
1592
1592
|
ws = vsb ? "\n" : "";
|
|
@@ -1727,7 +1727,7 @@ var require_addPairToJSMap = __commonJS({
|
|
|
1727
1727
|
"use strict";
|
|
1728
1728
|
var log = require_log();
|
|
1729
1729
|
var merge = require_merge();
|
|
1730
|
-
var
|
|
1730
|
+
var stringify = require_stringify();
|
|
1731
1731
|
var identity = require_identity();
|
|
1732
1732
|
var toJS = require_toJS();
|
|
1733
1733
|
function addPairToJSMap(ctx, map, { key, value }) {
|
|
@@ -1763,7 +1763,7 @@ var require_addPairToJSMap = __commonJS({
|
|
|
1763
1763
|
if (typeof jsKey !== "object")
|
|
1764
1764
|
return String(jsKey);
|
|
1765
1765
|
if (identity.isNode(key) && ctx?.doc) {
|
|
1766
|
-
const strCtx =
|
|
1766
|
+
const strCtx = stringify.createStringifyContext(ctx.doc, {});
|
|
1767
1767
|
strCtx.anchors = /* @__PURE__ */ new Set();
|
|
1768
1768
|
for (const node of ctx.anchors.keys())
|
|
1769
1769
|
strCtx.anchors.add(node.anchor);
|
|
@@ -1830,12 +1830,12 @@ var require_stringifyCollection = __commonJS({
|
|
|
1830
1830
|
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js"(exports) {
|
|
1831
1831
|
"use strict";
|
|
1832
1832
|
var identity = require_identity();
|
|
1833
|
-
var
|
|
1833
|
+
var stringify = require_stringify();
|
|
1834
1834
|
var stringifyComment = require_stringifyComment();
|
|
1835
1835
|
function stringifyCollection(collection, ctx, options) {
|
|
1836
1836
|
const flow = ctx.inFlow ?? collection.flow;
|
|
1837
|
-
const
|
|
1838
|
-
return
|
|
1837
|
+
const stringify2 = flow ? stringifyFlowCollection : stringifyBlockCollection;
|
|
1838
|
+
return stringify2(collection, ctx, options);
|
|
1839
1839
|
}
|
|
1840
1840
|
function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {
|
|
1841
1841
|
const { indent, options: { commentString } } = ctx;
|
|
@@ -1860,7 +1860,7 @@ var require_stringifyCollection = __commonJS({
|
|
|
1860
1860
|
}
|
|
1861
1861
|
}
|
|
1862
1862
|
chompKeep = false;
|
|
1863
|
-
let str2 =
|
|
1863
|
+
let str2 = stringify.stringify(item, itemCtx, () => comment2 = null, () => chompKeep = true);
|
|
1864
1864
|
if (comment2)
|
|
1865
1865
|
str2 += stringifyComment.lineComment(str2, itemIndent, commentString(comment2));
|
|
1866
1866
|
if (chompKeep && comment2)
|
|
@@ -1927,7 +1927,7 @@ ${indent}${line}` : "\n";
|
|
|
1927
1927
|
}
|
|
1928
1928
|
if (comment)
|
|
1929
1929
|
reqNewline = true;
|
|
1930
|
-
let str =
|
|
1930
|
+
let str = stringify.stringify(item, itemCtx, () => comment = null);
|
|
1931
1931
|
reqNewline || (reqNewline = lines.length > linesAtValue || str.includes("\n"));
|
|
1932
1932
|
if (i < items.length - 1) {
|
|
1933
1933
|
str += ",";
|
|
@@ -3288,7 +3288,7 @@ var require_stringifyDocument = __commonJS({
|
|
|
3288
3288
|
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js"(exports) {
|
|
3289
3289
|
"use strict";
|
|
3290
3290
|
var identity = require_identity();
|
|
3291
|
-
var
|
|
3291
|
+
var stringify = require_stringify();
|
|
3292
3292
|
var stringifyComment = require_stringifyComment();
|
|
3293
3293
|
function stringifyDocument(doc, options) {
|
|
3294
3294
|
const lines = [];
|
|
@@ -3303,7 +3303,7 @@ var require_stringifyDocument = __commonJS({
|
|
|
3303
3303
|
}
|
|
3304
3304
|
if (hasDirectives)
|
|
3305
3305
|
lines.push("---");
|
|
3306
|
-
const ctx =
|
|
3306
|
+
const ctx = stringify.createStringifyContext(doc, options);
|
|
3307
3307
|
const { commentString } = ctx.options;
|
|
3308
3308
|
if (doc.commentBefore) {
|
|
3309
3309
|
if (lines.length !== 1)
|
|
@@ -3325,7 +3325,7 @@ var require_stringifyDocument = __commonJS({
|
|
|
3325
3325
|
contentComment = doc.contents.comment;
|
|
3326
3326
|
}
|
|
3327
3327
|
const onChompKeep = contentComment ? void 0 : () => chompKeep = true;
|
|
3328
|
-
let body =
|
|
3328
|
+
let body = stringify.stringify(doc.contents, ctx, () => contentComment = null, onChompKeep);
|
|
3329
3329
|
if (contentComment)
|
|
3330
3330
|
body += stringifyComment.lineComment(body, "", commentString(contentComment));
|
|
3331
3331
|
if ((body[0] === "|" || body[0] === ">") && lines[lines.length - 1] === "---") {
|
|
@@ -3333,7 +3333,7 @@ var require_stringifyDocument = __commonJS({
|
|
|
3333
3333
|
} else
|
|
3334
3334
|
lines.push(body);
|
|
3335
3335
|
} else {
|
|
3336
|
-
lines.push(
|
|
3336
|
+
lines.push(stringify.stringify(doc.contents, ctx));
|
|
3337
3337
|
}
|
|
3338
3338
|
if (doc.directives?.docEnd) {
|
|
3339
3339
|
if (doc.comment) {
|
|
@@ -5468,7 +5468,7 @@ var require_cst_scalar = __commonJS({
|
|
|
5468
5468
|
var require_cst_stringify = __commonJS({
|
|
5469
5469
|
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js"(exports) {
|
|
5470
5470
|
"use strict";
|
|
5471
|
-
var
|
|
5471
|
+
var stringify = (cst) => "type" in cst ? stringifyToken(cst) : stringifyItem(cst);
|
|
5472
5472
|
function stringifyToken(token) {
|
|
5473
5473
|
switch (token.type) {
|
|
5474
5474
|
case "block-scalar": {
|
|
@@ -5521,7 +5521,7 @@ var require_cst_stringify = __commonJS({
|
|
|
5521
5521
|
res += stringifyToken(value);
|
|
5522
5522
|
return res;
|
|
5523
5523
|
}
|
|
5524
|
-
exports.stringify =
|
|
5524
|
+
exports.stringify = stringify;
|
|
5525
5525
|
}
|
|
5526
5526
|
});
|
|
5527
5527
|
|
|
@@ -7251,7 +7251,7 @@ var require_public_api = __commonJS({
|
|
|
7251
7251
|
}
|
|
7252
7252
|
return doc.toJS(Object.assign({ reviver: _reviver }, options));
|
|
7253
7253
|
}
|
|
7254
|
-
function
|
|
7254
|
+
function stringify(value, replacer, options) {
|
|
7255
7255
|
let _replacer = null;
|
|
7256
7256
|
if (typeof replacer === "function" || Array.isArray(replacer)) {
|
|
7257
7257
|
_replacer = replacer;
|
|
@@ -7276,7 +7276,7 @@ var require_public_api = __commonJS({
|
|
|
7276
7276
|
exports.parse = parse;
|
|
7277
7277
|
exports.parseAllDocuments = parseAllDocuments;
|
|
7278
7278
|
exports.parseDocument = parseDocument;
|
|
7279
|
-
exports.stringify =
|
|
7279
|
+
exports.stringify = stringify;
|
|
7280
7280
|
}
|
|
7281
7281
|
});
|
|
7282
7282
|
|
|
@@ -7555,7 +7555,7 @@ function createErrorResult(error) {
|
|
|
7555
7555
|
}
|
|
7556
7556
|
|
|
7557
7557
|
// ../shared/src/agent.ts
|
|
7558
|
-
var VALID_AGENT_PROVIDERS = ["claude", "codex", "cursor", "relay"];
|
|
7558
|
+
var VALID_AGENT_PROVIDERS = ["claude", "codex", "cursor", "opencode", "relay"];
|
|
7559
7559
|
var VALID_CODING_AGENT_PROVIDERS = VALID_AGENT_PROVIDERS.filter(
|
|
7560
7560
|
(provider) => provider !== "relay"
|
|
7561
7561
|
);
|
|
@@ -7581,10 +7581,15 @@ var AGENT_PROVIDER_OPTIONS = [
|
|
|
7581
7581
|
label: "Cursor",
|
|
7582
7582
|
description: "Use Cursor for tasks"
|
|
7583
7583
|
},
|
|
7584
|
+
{
|
|
7585
|
+
value: "opencode",
|
|
7586
|
+
label: "Opencode",
|
|
7587
|
+
description: "Use Opencode for tasks"
|
|
7588
|
+
},
|
|
7584
7589
|
{
|
|
7585
7590
|
value: "relay",
|
|
7586
7591
|
label: "Relay",
|
|
7587
|
-
description: "Orchestrating agent that delegates to Claude Code, Codex, and
|
|
7592
|
+
description: "Orchestrating agent that delegates to Claude Code, Codex, Cursor, and Opencode subagents"
|
|
7588
7593
|
}
|
|
7589
7594
|
];
|
|
7590
7595
|
var VALID_THINKING_LEVELS = ["low", "medium", "high", "max"];
|
|
@@ -7597,6 +7602,8 @@ function getProviderDisplayName(provider, variant = "short") {
|
|
|
7597
7602
|
return "Codex";
|
|
7598
7603
|
case "cursor":
|
|
7599
7604
|
return "Cursor";
|
|
7605
|
+
case "opencode":
|
|
7606
|
+
return "Opencode";
|
|
7600
7607
|
case "relay":
|
|
7601
7608
|
return "Relay";
|
|
7602
7609
|
case "claude":
|
|
@@ -7847,16 +7854,13 @@ scrot /tmp/state.png
|
|
|
7847
7854
|
replicas computer info
|
|
7848
7855
|
|
|
7849
7856
|
# 2) Launch a browser on the workspace display.
|
|
7850
|
-
replicas computer launch chrome
|
|
7857
|
+
replicas computer launch chrome https://news.ycombinator.com
|
|
7851
7858
|
|
|
7852
7859
|
# 3) Take a screenshot so you can see what's there.
|
|
7853
7860
|
replicas computer screenshot /tmp/state.png
|
|
7854
7861
|
# (Read the PNG yourself before deciding where to click.)
|
|
7855
7862
|
|
|
7856
7863
|
# 4) Drive the UI.
|
|
7857
|
-
replicas computer key ctrl+l # focus address bar
|
|
7858
|
-
replicas computer type "https://news.ycombinator.com"
|
|
7859
|
-
replicas computer key Return
|
|
7860
7864
|
replicas computer click 521 700 # click coordinates from the screenshot
|
|
7861
7865
|
replicas computer scroll down --amount 5
|
|
7862
7866
|
|
|
@@ -7909,6 +7913,7 @@ Spawns an app on the workspace display. Built-in aliases:
|
|
|
7909
7913
|
- \`notepad\` / \`editor\` - mousepad (lightweight GTK text editor)
|
|
7910
7914
|
- \`files\` / \`filemanager\` - thunar (file manager)
|
|
7911
7915
|
Anything else gets \`exec\`'d verbatim, so \`replicas computer launch xeyes\` works if xeyes is installed.
|
|
7916
|
+
When opening a known page, prefer passing the URL directly: \`replicas computer launch chrome http://localhost:3000/\`.
|
|
7912
7917
|
|
|
7913
7918
|
### \`replicas computer record start <path> [--fps N]\`
|
|
7914
7919
|
Starts an ffmpeg screen recorder. Output is a fragmented MP4 (still playable if the workspace dies mid-record). Default 60fps; drop to 30 if the workspace is CPU-constrained.
|
|
@@ -7934,6 +7939,8 @@ replicas computer screenshot /tmp/after-click.png
|
|
|
7934
7939
|
|
|
7935
7940
|
### Typing into an address bar
|
|
7936
7941
|
\`\`\`bash
|
|
7942
|
+
replicas computer launch chrome
|
|
7943
|
+
sleep 2
|
|
7937
7944
|
replicas computer key ctrl+l # focus address bar
|
|
7938
7945
|
replicas computer type "https://example.com"
|
|
7939
7946
|
replicas computer key Return
|
|
@@ -9331,7 +9338,7 @@ var HOOK_EXEC_MAX_BUFFER_BYTES = 10 * 1024 * 1024;
|
|
|
9331
9338
|
var REPLICAS_CONFIG_FILENAMES = ["replicas.json", "replicas.yaml", "replicas.yml"];
|
|
9332
9339
|
|
|
9333
9340
|
// ../shared/src/cli-version.ts
|
|
9334
|
-
var CLI_VERSION = "0.2.
|
|
9341
|
+
var CLI_VERSION = "0.2.284";
|
|
9335
9342
|
|
|
9336
9343
|
// ../shared/src/engine/environment.ts
|
|
9337
9344
|
var DESKTOP_NOVNC_PORT = 6080;
|
|
@@ -9348,6 +9355,7 @@ var DEFAULT_CHAT_TITLES = {
|
|
|
9348
9355
|
claude: "Claude Code",
|
|
9349
9356
|
codex: "Codex",
|
|
9350
9357
|
cursor: "Cursor",
|
|
9358
|
+
opencode: "Opencode",
|
|
9351
9359
|
relay: "Relay"
|
|
9352
9360
|
};
|
|
9353
9361
|
function getInitialChatId(chats, preferredProvider = "claude") {
|
|
@@ -9363,6 +9371,7 @@ var CLAUDE_OPUS_1M_MODEL = "opus[1m]";
|
|
|
9363
9371
|
var LEGACY_CLAUDE_OPUS_1M_MODEL = "opus-1m";
|
|
9364
9372
|
var DEFAULT_CODEX_MODEL = "gpt-5.5";
|
|
9365
9373
|
var DEFAULT_CURSOR_MODEL = "composer-2";
|
|
9374
|
+
var DEFAULT_OPENCODE_MODEL = "z-ai/glm-5.2";
|
|
9366
9375
|
function normalizeClaudeModel(model) {
|
|
9367
9376
|
if (model === LEGACY_CLAUDE_OPUS_1M_MODEL) {
|
|
9368
9377
|
return CLAUDE_OPUS_1M_MODEL;
|
|
@@ -9373,6 +9382,7 @@ var AGENT_MODELS = {
|
|
|
9373
9382
|
claude: [CLAUDE_OPUS_1M_MODEL, "sonnet", "haiku"],
|
|
9374
9383
|
codex: [DEFAULT_CODEX_MODEL, "gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex", "gpt-5.2"],
|
|
9375
9384
|
cursor: [DEFAULT_CURSOR_MODEL, "composer-2.5"],
|
|
9385
|
+
opencode: [DEFAULT_OPENCODE_MODEL, "minimax/minimax-m3", "xiaomi/mimo-v2.5-pro", "moonshotai/kimi-k2.6:free"],
|
|
9376
9386
|
relay: [CLAUDE_OPUS_1M_MODEL, "sonnet"]
|
|
9377
9387
|
};
|
|
9378
9388
|
var MODEL_LABELS = {
|
|
@@ -9383,7 +9393,11 @@ var MODEL_LABELS = {
|
|
|
9383
9393
|
haiku: "Haiku 4.5",
|
|
9384
9394
|
[DEFAULT_CODEX_MODEL]: "GPT-5.5",
|
|
9385
9395
|
[DEFAULT_CURSOR_MODEL]: "Composer 2",
|
|
9396
|
+
[DEFAULT_OPENCODE_MODEL]: "GLM 5.2 via OpenRouter",
|
|
9386
9397
|
"composer-2.5": "Composer 2.5",
|
|
9398
|
+
"minimax/minimax-m3": "MiniMax M3 via OpenRouter",
|
|
9399
|
+
"xiaomi/mimo-v2.5-pro": "MiMo V2.5 Pro via OpenRouter",
|
|
9400
|
+
"moonshotai/kimi-k2.6:free": "Kimi K2.6 via OpenRouter",
|
|
9387
9401
|
"gpt-5.4": "GPT-5.4",
|
|
9388
9402
|
"gpt-5.4-mini": "GPT-5.4 Mini",
|
|
9389
9403
|
"gpt-5.3-codex": "GPT-5.3 Codex",
|
|
@@ -9838,12 +9852,8 @@ function parseCodexEvents(events) {
|
|
|
9838
9852
|
return messages;
|
|
9839
9853
|
}
|
|
9840
9854
|
|
|
9841
|
-
// ../shared/src/display-message/parsers/
|
|
9842
|
-
function
|
|
9843
|
-
if (!Array.isArray(value)) return "";
|
|
9844
|
-
return value.map((block) => isRecord(block) && block.type === "text" && typeof block.text === "string" ? block.text : "").join("");
|
|
9845
|
-
}
|
|
9846
|
-
function stringify(value) {
|
|
9855
|
+
// ../shared/src/display-message/parsers/utils.ts
|
|
9856
|
+
function stringifyDisplayValue(value) {
|
|
9847
9857
|
if (value === void 0 || value === null) return void 0;
|
|
9848
9858
|
if (typeof value === "string") return value;
|
|
9849
9859
|
try {
|
|
@@ -9852,6 +9862,12 @@ function stringify(value) {
|
|
|
9852
9862
|
return String(value);
|
|
9853
9863
|
}
|
|
9854
9864
|
}
|
|
9865
|
+
|
|
9866
|
+
// ../shared/src/display-message/parsers/cursor-parser.ts
|
|
9867
|
+
function getTextContent(value) {
|
|
9868
|
+
if (!Array.isArray(value)) return "";
|
|
9869
|
+
return value.map((block) => isRecord(block) && block.type === "text" && typeof block.text === "string" ? block.text : "").join("");
|
|
9870
|
+
}
|
|
9855
9871
|
function cursorStatusToDisplayStatus(status) {
|
|
9856
9872
|
return status === "completed" || status === "FINISHED" ? "completed" : status === "error" || status === "ERROR" || status === "CANCELLED" || status === "EXPIRED" ? "failed" : "in_progress";
|
|
9857
9873
|
}
|
|
@@ -9984,7 +10000,7 @@ function parseCursorEvents(events) {
|
|
|
9984
10000
|
server: "cursor",
|
|
9985
10001
|
tool,
|
|
9986
10002
|
...input !== void 0 ? { input } : {},
|
|
9987
|
-
output:
|
|
10003
|
+
output: stringifyDisplayValue(event.payload.result),
|
|
9988
10004
|
status,
|
|
9989
10005
|
timestamp: event.timestamp
|
|
9990
10006
|
};
|
|
@@ -10036,6 +10052,130 @@ function parseCursorEvents(events) {
|
|
|
10036
10052
|
return messages;
|
|
10037
10053
|
}
|
|
10038
10054
|
|
|
10055
|
+
// ../shared/src/display-message/parsers/opencode-parser.ts
|
|
10056
|
+
function timestampFromMs(value, fallback) {
|
|
10057
|
+
return typeof value === "number" && Number.isFinite(value) ? new Date(value).toISOString() : fallback;
|
|
10058
|
+
}
|
|
10059
|
+
function partFromEvent(event) {
|
|
10060
|
+
return isRecord(event.payload.part) ? event.payload.part : null;
|
|
10061
|
+
}
|
|
10062
|
+
function toolStatus(status) {
|
|
10063
|
+
return status === "completed" ? "completed" : status === "error" ? "failed" : "in_progress";
|
|
10064
|
+
}
|
|
10065
|
+
function setById(messages, id, next) {
|
|
10066
|
+
const index = messages.findIndex((message) => message.id === id);
|
|
10067
|
+
if (index === -1) {
|
|
10068
|
+
messages.push(next);
|
|
10069
|
+
} else {
|
|
10070
|
+
messages[index] = next;
|
|
10071
|
+
}
|
|
10072
|
+
}
|
|
10073
|
+
function assistantError(info) {
|
|
10074
|
+
if (!isRecord(info) || !isRecord(info.error)) return null;
|
|
10075
|
+
const data = isRecord(info.error.data) ? info.error.data : null;
|
|
10076
|
+
if (typeof data?.message === "string") return data.message;
|
|
10077
|
+
if (typeof info.error.message === "string") return info.error.message;
|
|
10078
|
+
return stringifyDisplayValue(info.error) ?? "Opencode run failed";
|
|
10079
|
+
}
|
|
10080
|
+
function parseOpencodeEvents(events) {
|
|
10081
|
+
const messages = [];
|
|
10082
|
+
for (const event of events) {
|
|
10083
|
+
if (event.type === "event_msg" && event.payload.type === "user_message") {
|
|
10084
|
+
const message = event.payload.message;
|
|
10085
|
+
if (typeof message === "string" && message.trim()) {
|
|
10086
|
+
messages.push({
|
|
10087
|
+
id: `opencode-user-${event.timestamp}-${messages.length}`,
|
|
10088
|
+
type: "user",
|
|
10089
|
+
content: message,
|
|
10090
|
+
timestamp: event.timestamp
|
|
10091
|
+
});
|
|
10092
|
+
}
|
|
10093
|
+
continue;
|
|
10094
|
+
}
|
|
10095
|
+
if (event.type === "opencode-message.updated") {
|
|
10096
|
+
const error = assistantError(event.payload.info);
|
|
10097
|
+
if (error) {
|
|
10098
|
+
messages.push({
|
|
10099
|
+
id: `opencode-error-${event.timestamp}-${messages.length}`,
|
|
10100
|
+
type: "error",
|
|
10101
|
+
message: error,
|
|
10102
|
+
timestamp: event.timestamp
|
|
10103
|
+
});
|
|
10104
|
+
}
|
|
10105
|
+
continue;
|
|
10106
|
+
}
|
|
10107
|
+
if (event.type === "opencode-error") {
|
|
10108
|
+
const message = typeof event.payload.message === "string" ? event.payload.message : "Opencode run failed";
|
|
10109
|
+
messages.push({
|
|
10110
|
+
id: `opencode-error-${event.timestamp}-${messages.length}`,
|
|
10111
|
+
type: "error",
|
|
10112
|
+
message,
|
|
10113
|
+
timestamp: event.timestamp
|
|
10114
|
+
});
|
|
10115
|
+
continue;
|
|
10116
|
+
}
|
|
10117
|
+
const part = partFromEvent(event);
|
|
10118
|
+
if (!part) continue;
|
|
10119
|
+
const id = typeof part.id === "string" ? `opencode-${part.id}` : `opencode-${event.timestamp}-${messages.length}`;
|
|
10120
|
+
const time = isRecord(part.time) ? part.time : null;
|
|
10121
|
+
const timestamp = timestampFromMs(time?.start, event.timestamp);
|
|
10122
|
+
if (part.type === "text") {
|
|
10123
|
+
const text = typeof part.text === "string" ? part.text : "";
|
|
10124
|
+
if (text.trim()) {
|
|
10125
|
+
setById(messages, id, {
|
|
10126
|
+
id,
|
|
10127
|
+
type: "agent",
|
|
10128
|
+
content: text,
|
|
10129
|
+
timestamp
|
|
10130
|
+
});
|
|
10131
|
+
}
|
|
10132
|
+
continue;
|
|
10133
|
+
}
|
|
10134
|
+
if (part.type === "reasoning") {
|
|
10135
|
+
const text = typeof part.text === "string" ? part.text : "";
|
|
10136
|
+
if (text.trim()) {
|
|
10137
|
+
setById(messages, id, {
|
|
10138
|
+
id,
|
|
10139
|
+
type: "reasoning",
|
|
10140
|
+
content: text,
|
|
10141
|
+
status: time?.end ? "completed" : "in_progress",
|
|
10142
|
+
timestamp
|
|
10143
|
+
});
|
|
10144
|
+
}
|
|
10145
|
+
continue;
|
|
10146
|
+
}
|
|
10147
|
+
if (part.type === "tool" && isRecord(part.state)) {
|
|
10148
|
+
const state = part.state;
|
|
10149
|
+
const status = toolStatus(state.status);
|
|
10150
|
+
const output = state.status === "completed" ? stringifyDisplayValue(state.output) : state.status === "error" ? stringifyDisplayValue(state.error) : void 0;
|
|
10151
|
+
setById(messages, id, {
|
|
10152
|
+
id,
|
|
10153
|
+
type: "tool_call",
|
|
10154
|
+
server: "opencode",
|
|
10155
|
+
tool: typeof part.tool === "string" ? part.tool : "tool",
|
|
10156
|
+
input: isRecord(state.input) ? state.input : stringifyDisplayValue(state.input),
|
|
10157
|
+
output,
|
|
10158
|
+
status,
|
|
10159
|
+
timestamp
|
|
10160
|
+
});
|
|
10161
|
+
continue;
|
|
10162
|
+
}
|
|
10163
|
+
if (part.type === "patch") {
|
|
10164
|
+
const files = Array.isArray(part.files) ? part.files.filter((file) => typeof file === "string") : [];
|
|
10165
|
+
if (files.length > 0) {
|
|
10166
|
+
setById(messages, id, {
|
|
10167
|
+
id,
|
|
10168
|
+
type: "file_change",
|
|
10169
|
+
changes: files.map((path6) => ({ path: path6, kind: "update" })),
|
|
10170
|
+
status: "completed",
|
|
10171
|
+
timestamp
|
|
10172
|
+
});
|
|
10173
|
+
}
|
|
10174
|
+
}
|
|
10175
|
+
}
|
|
10176
|
+
return messages;
|
|
10177
|
+
}
|
|
10178
|
+
|
|
10039
10179
|
// ../shared/src/display-message/task-accumulator.ts
|
|
10040
10180
|
function mapTaskStatus(status) {
|
|
10041
10181
|
if (status === "in_progress" || status === "completed") return status;
|
|
@@ -10745,6 +10885,9 @@ function parseAgentEvents(events, agentType) {
|
|
|
10745
10885
|
if (agentType === "cursor") {
|
|
10746
10886
|
return parseCursorEvents(events);
|
|
10747
10887
|
}
|
|
10888
|
+
if (agentType === "opencode") {
|
|
10889
|
+
return parseOpencodeEvents(events);
|
|
10890
|
+
}
|
|
10748
10891
|
return parseClaudeEvents(events);
|
|
10749
10892
|
}
|
|
10750
10893
|
function parseDisplayMessages(events, agentType, codexAspTranscript, options = {}) {
|
|
@@ -16796,18 +16939,21 @@ function WorkspaceInfo({ status, workspaceName, workspaceId, focused, loading, a
|
|
|
16796
16939
|
...rawEnv,
|
|
16797
16940
|
claudeAuthMethod: agentAvailability.claude.available ? rawEnv.claudeAuthMethod : "none",
|
|
16798
16941
|
codexAuthMethod: agentAvailability.codex.available ? rawEnv.codexAuthMethod : "none",
|
|
16799
|
-
cursorAuthMethod: agentAvailability.cursor.available ? rawEnv.cursorAuthMethod : "none"
|
|
16942
|
+
cursorAuthMethod: agentAvailability.cursor.available ? rawEnv.cursorAuthMethod : "none",
|
|
16943
|
+
opencodeAuthMethod: agentAvailability.opencode.available ? rawEnv.opencodeAuthMethod : "none"
|
|
16800
16944
|
} : rawEnv;
|
|
16801
16945
|
const processingIndicators = [
|
|
16802
16946
|
{ label: "Claude", active: status.isClaudeProcessing },
|
|
16803
16947
|
{ label: "Codex", active: status.isCodexProcessing },
|
|
16804
16948
|
{ label: "Cursor", active: status.isCursorProcessing },
|
|
16949
|
+
{ label: "Opencode", active: status.isOpencodeProcessing },
|
|
16805
16950
|
{ label: "Relay", active: status.isRelayProcessing }
|
|
16806
16951
|
].filter((indicator) => indicator.active);
|
|
16807
16952
|
const agentAuthRows = env ? [
|
|
16808
16953
|
{ label: "Claude", authMethod: env.claudeAuthMethod },
|
|
16809
16954
|
{ label: "Codex", authMethod: env.codexAuthMethod },
|
|
16810
|
-
{ label: "Cursor", authMethod: env.cursorAuthMethod }
|
|
16955
|
+
{ label: "Cursor", authMethod: env.cursorAuthMethod },
|
|
16956
|
+
{ label: "Opencode", authMethod: env.opencodeAuthMethod }
|
|
16811
16957
|
] : [];
|
|
16812
16958
|
const dashboardItem = findItem("dashboard");
|
|
16813
16959
|
const wakeItem = findItem("wake");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
import {
|
|
3
3
|
AwsRestJsonProtocol
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RQL7JLTE.mjs";
|
|
5
5
|
import {
|
|
6
6
|
AwsSdkSigV4Signer,
|
|
7
7
|
DefaultIdentityProviderConfig,
|
|
@@ -13,10 +13,10 @@ import {
|
|
|
13
13
|
package_default,
|
|
14
14
|
resolveAwsSdkSigV4Config,
|
|
15
15
|
streamCollector
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-4FSDNCBY.mjs";
|
|
17
17
|
import {
|
|
18
18
|
NodeHttpHandler
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-KK6GYGUU.mjs";
|
|
20
20
|
import {
|
|
21
21
|
BinaryDecisionDiagram,
|
|
22
22
|
Client,
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
resolveHostHeaderConfig,
|
|
50
50
|
resolveRetryConfig,
|
|
51
51
|
resolveUserAgentConfig
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-6VME6DX3.mjs";
|
|
53
53
|
import {
|
|
54
54
|
NODE_REGION_CONFIG_FILE_OPTIONS,
|
|
55
55
|
NODE_REGION_CONFIG_OPTIONS,
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
resolveDefaultsModeConfig,
|
|
66
66
|
resolveHttpHandlerRuntimeConfig,
|
|
67
67
|
resolveRegionConfig
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-NVNLENJ4.mjs";
|
|
69
69
|
import {
|
|
70
70
|
Hash,
|
|
71
71
|
calculateBodyLength,
|
|
@@ -73,12 +73,12 @@ import {
|
|
|
73
73
|
fromUtf8,
|
|
74
74
|
toBase64,
|
|
75
75
|
toUtf8
|
|
76
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-WQSLVATR.mjs";
|
|
77
77
|
import {
|
|
78
78
|
__publicField
|
|
79
79
|
} from "./chunk-DR4JHUIF.mjs";
|
|
80
80
|
|
|
81
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
81
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/auth/httpAuthSchemeProvider.js
|
|
82
82
|
var defaultSSOHttpAuthSchemeParametersProvider = async (config, context, input) => {
|
|
83
83
|
return {
|
|
84
84
|
operation: getSmithyContext(context).operation,
|
|
@@ -127,7 +127,7 @@ var resolveHttpAuthSchemeConfig = (config) => {
|
|
|
127
127
|
});
|
|
128
128
|
};
|
|
129
129
|
|
|
130
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
130
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/endpoint/EndpointParameters.js
|
|
131
131
|
var resolveClientEndpointParameters = (options) => {
|
|
132
132
|
return Object.assign(options, {
|
|
133
133
|
useDualstackEndpoint: options.useDualstackEndpoint ?? false,
|
|
@@ -142,7 +142,7 @@ var commonParams = {
|
|
|
142
142
|
UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" }
|
|
143
143
|
};
|
|
144
144
|
|
|
145
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
145
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/endpoint/bdd.js
|
|
146
146
|
var k = "ref";
|
|
147
147
|
var a = -1;
|
|
148
148
|
var b = true;
|
|
@@ -229,7 +229,7 @@ var nodes = new Int32Array([
|
|
|
229
229
|
]);
|
|
230
230
|
var bdd = BinaryDecisionDiagram.from(nodes, root, _data.conditions, _data.results);
|
|
231
231
|
|
|
232
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
232
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/endpoint/endpointResolver.js
|
|
233
233
|
var cache = new EndpointCache({
|
|
234
234
|
size: 50,
|
|
235
235
|
params: ["Endpoint", "Region", "UseDualStack", "UseFIPS"]
|
|
@@ -242,7 +242,7 @@ var defaultEndpointResolver = (endpointParams, context = {}) => {
|
|
|
242
242
|
};
|
|
243
243
|
customEndpointFunctions.aws = awsEndpointFunctions;
|
|
244
244
|
|
|
245
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
245
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/models/SSOServiceException.js
|
|
246
246
|
var SSOServiceException = class _SSOServiceException extends ServiceException {
|
|
247
247
|
constructor(options) {
|
|
248
248
|
super(options);
|
|
@@ -250,7 +250,7 @@ var SSOServiceException = class _SSOServiceException extends ServiceException {
|
|
|
250
250
|
}
|
|
251
251
|
};
|
|
252
252
|
|
|
253
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
253
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/models/errors.js
|
|
254
254
|
var InvalidRequestException = class _InvalidRequestException extends SSOServiceException {
|
|
255
255
|
constructor(opts) {
|
|
256
256
|
super({
|
|
@@ -300,7 +300,7 @@ var UnauthorizedException = class _UnauthorizedException extends SSOServiceExcep
|
|
|
300
300
|
}
|
|
301
301
|
};
|
|
302
302
|
|
|
303
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
303
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/schemas/schemas_0.js
|
|
304
304
|
var _ATT = "AccessTokenType";
|
|
305
305
|
var _GRC = "GetRoleCredentials";
|
|
306
306
|
var _GRCR = "GetRoleCredentialsRequest";
|
|
@@ -413,7 +413,7 @@ var GetRoleCredentials$ = [
|
|
|
413
413
|
() => GetRoleCredentialsResponse$
|
|
414
414
|
];
|
|
415
415
|
|
|
416
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
416
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/runtimeConfig.shared.js
|
|
417
417
|
var getRuntimeConfig = (config) => {
|
|
418
418
|
return {
|
|
419
419
|
apiVersion: "2019-06-10",
|
|
@@ -450,7 +450,7 @@ var getRuntimeConfig = (config) => {
|
|
|
450
450
|
};
|
|
451
451
|
};
|
|
452
452
|
|
|
453
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
453
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/runtimeConfig.js
|
|
454
454
|
var getRuntimeConfig2 = (config) => {
|
|
455
455
|
emitWarningIfUnsupportedVersion2(process.version);
|
|
456
456
|
const defaultsMode = resolveDefaultsModeConfig(config);
|
|
@@ -484,7 +484,7 @@ var getRuntimeConfig2 = (config) => {
|
|
|
484
484
|
};
|
|
485
485
|
};
|
|
486
486
|
|
|
487
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
487
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/auth/httpAuthExtensionConfiguration.js
|
|
488
488
|
var getHttpAuthExtensionConfiguration = (runtimeConfig) => {
|
|
489
489
|
const _httpAuthSchemes = runtimeConfig.httpAuthSchemes;
|
|
490
490
|
let _httpAuthSchemeProvider = runtimeConfig.httpAuthSchemeProvider;
|
|
@@ -523,14 +523,14 @@ var resolveHttpAuthRuntimeConfig = (config) => {
|
|
|
523
523
|
};
|
|
524
524
|
};
|
|
525
525
|
|
|
526
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
526
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/runtimeExtensions.js
|
|
527
527
|
var resolveRuntimeExtensions = (runtimeConfig, extensions) => {
|
|
528
528
|
const extensionConfiguration = Object.assign(getAwsRegionExtensionConfiguration(runtimeConfig), getDefaultExtensionConfiguration(runtimeConfig), getHttpHandlerExtensionConfiguration(runtimeConfig), getHttpAuthExtensionConfiguration(runtimeConfig));
|
|
529
529
|
extensions.forEach((extension) => extension.configure(extensionConfiguration));
|
|
530
530
|
return Object.assign(runtimeConfig, resolveAwsRegionExtensionConfiguration(extensionConfiguration), resolveDefaultRuntimeConfig(extensionConfiguration), resolveHttpHandlerRuntimeConfig(extensionConfiguration), resolveHttpAuthRuntimeConfig(extensionConfiguration));
|
|
531
531
|
};
|
|
532
532
|
|
|
533
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
533
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/SSOClient.js
|
|
534
534
|
var SSOClient = class extends Client {
|
|
535
535
|
constructor(...[configuration]) {
|
|
536
536
|
const _config_0 = getRuntimeConfig2(configuration || {});
|
|
@@ -566,7 +566,7 @@ var SSOClient = class extends Client {
|
|
|
566
566
|
}
|
|
567
567
|
};
|
|
568
568
|
|
|
569
|
-
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.
|
|
569
|
+
// ../node_modules/.bun/@aws-sdk+nested-clients@3.997.22/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/commands/GetRoleCredentialsCommand.js
|
|
570
570
|
var GetRoleCredentialsCommand = class extends Command.classBuilder().ep(commonParams).m(function(Command2, cs, config, o) {
|
|
571
571
|
return [getEndpointPlugin(config, Command2.getEndpointParameterInstructions())];
|
|
572
572
|
}).s("SWBPortalService", "GetRoleCredentials", {}).n("SSOClient", "GetRoleCredentialsCommand").sc(GetRoleCredentials$).build() {
|