oh-my-opencode 4.17.0 → 4.18.0
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/.agents/command/publish.md +31 -58
- package/.agents/skills/codex-qa/SKILL.md +2 -0
- package/.agents/skills/pre-publish-review/SKILL.md +1 -1
- package/.agents/skills/publish/SKILL.md +32 -59
- package/.opencode/command/publish.md +31 -58
- package/.opencode/skills/pre-publish-review/SKILL.md +1 -1
- package/dist/cli/get-local-version/types.d.ts +1 -1
- package/dist/cli/index.js +71 -38
- package/dist/cli-node/index.js +71 -38
- package/dist/index.js +212 -258
- package/dist/skills/frontend/SKILL.md +1 -1
- package/dist/skills/frontend/references/design/README.md +9 -0
- package/dist/skills/frontend/references/design/design-system-architecture.md +4 -2
- package/dist/skills/frontend/references/design/layout-skill.md +107 -0
- package/dist/skills/programming/SKILL.md +12 -2
- package/dist/skills/review-work/SKILL.md +10 -2
- package/dist/skills/start-work/SKILL.md +1 -1
- package/dist/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
- package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/dist/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
- package/dist/skills/ulw-plan/SKILL.md +2 -1
- package/dist/skills/ulw-plan/references/full-workflow.md +1 -1
- package/dist/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/dist/skills/visual-qa/SKILL.md +9 -5
- package/dist/tui.js +8 -3
- package/package.json +14 -13
- package/packages/lsp-daemon/dist/cli.js +7 -13
- package/packages/lsp-daemon/dist/daemon-client.js +3 -5
- package/packages/lsp-daemon/dist/index.js +12 -18
- package/packages/lsp-daemon/dist/request-routing.js +6 -8
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +398 -400
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +14 -14
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +2 -2
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +9 -7
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +33 -16
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +2 -1
- package/packages/omo-codex/plugin/components/teammode/test/v2-spawn-schema.test.ts +69 -0
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +3 -3
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +66 -27
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +66 -27
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +9 -6
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +66 -27
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +6 -6
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +13 -13
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +9 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +4 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/layout-skill.md +107 -0
- package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -2
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +10 -2
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/teammode/SKILL.md +33 -16
- package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +2 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +66 -27
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +6 -6
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +9 -5
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +25 -0
- package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +24 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +32 -22
- package/packages/shared-skills/skills/frontend/SKILL.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/README.md +9 -0
- package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +4 -2
- package/packages/shared-skills/skills/frontend/references/design/layout-skill.md +107 -0
- package/packages/shared-skills/skills/programming/SKILL.md +12 -2
- package/packages/shared-skills/skills/review-work/SKILL.md +10 -2
- package/packages/shared-skills/skills/start-work/SKILL.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -1
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/shared-skills/skills/visual-qa/SKILL.md +9 -5
package/dist/index.js
CHANGED
|
@@ -6777,11 +6777,17 @@ function toGitFileStatus(statusToken) {
|
|
|
6777
6777
|
return "deleted";
|
|
6778
6778
|
return "modified";
|
|
6779
6779
|
}
|
|
6780
|
+
function normalizeGitStatusPath(statusToken, filePath) {
|
|
6781
|
+
if (statusToken !== "R" && statusToken !== "C")
|
|
6782
|
+
return filePath;
|
|
6783
|
+
const arrowIndex = filePath.lastIndexOf(" -> ");
|
|
6784
|
+
return arrowIndex === -1 ? filePath : filePath.slice(arrowIndex + 4);
|
|
6785
|
+
}
|
|
6780
6786
|
function parseGitStatusPorcelainLine(line) {
|
|
6781
6787
|
if (!line)
|
|
6782
6788
|
return null;
|
|
6783
6789
|
const statusToken = line.substring(0, 2).trim();
|
|
6784
|
-
const filePath = line.substring(3);
|
|
6790
|
+
const filePath = normalizeGitStatusPath(statusToken, line.substring(3));
|
|
6785
6791
|
if (!filePath)
|
|
6786
6792
|
return null;
|
|
6787
6793
|
return {
|
|
@@ -13498,7 +13504,8 @@ async function listActiveTeams(config) {
|
|
|
13498
13504
|
teamName: runtimeState.teamName,
|
|
13499
13505
|
status: runtimeState.status,
|
|
13500
13506
|
memberCount: runtimeState.members.length,
|
|
13501
|
-
scope: runtimeState.specSource
|
|
13507
|
+
scope: runtimeState.specSource,
|
|
13508
|
+
...runtimeState.leadSessionId !== undefined ? { leadSessionId: runtimeState.leadSessionId } : {}
|
|
13502
13509
|
});
|
|
13503
13510
|
} catch (error) {
|
|
13504
13511
|
log5("team runtime state skipped", {
|
|
@@ -16584,7 +16591,7 @@ var require_compile = __commonJS((exports) => {
|
|
|
16584
16591
|
const schOrFunc = root.refs[ref];
|
|
16585
16592
|
if (schOrFunc)
|
|
16586
16593
|
return schOrFunc;
|
|
16587
|
-
let _sch =
|
|
16594
|
+
let _sch = resolve36.call(this, root, ref);
|
|
16588
16595
|
if (_sch === undefined) {
|
|
16589
16596
|
const schema = (_a = root.localRefs) === null || _a === undefined ? undefined : _a[ref];
|
|
16590
16597
|
const { schemaId } = this.opts;
|
|
@@ -16611,7 +16618,7 @@ var require_compile = __commonJS((exports) => {
|
|
|
16611
16618
|
function sameSchemaEnv(s1, s2) {
|
|
16612
16619
|
return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
|
|
16613
16620
|
}
|
|
16614
|
-
function
|
|
16621
|
+
function resolve36(root, ref) {
|
|
16615
16622
|
let sch;
|
|
16616
16623
|
while (typeof (sch = this.refs[ref]) == "string")
|
|
16617
16624
|
ref = sch;
|
|
@@ -17197,55 +17204,55 @@ var require_fast_uri = __commonJS((exports, module) => {
|
|
|
17197
17204
|
}
|
|
17198
17205
|
return uri;
|
|
17199
17206
|
}
|
|
17200
|
-
function
|
|
17207
|
+
function resolve36(baseURI, relativeURI, options) {
|
|
17201
17208
|
const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
|
|
17202
17209
|
const resolved = resolveComponent(parse3(baseURI, schemelessOptions), parse3(relativeURI, schemelessOptions), schemelessOptions, true);
|
|
17203
17210
|
schemelessOptions.skipEscape = true;
|
|
17204
17211
|
return serialize(resolved, schemelessOptions);
|
|
17205
17212
|
}
|
|
17206
|
-
function resolveComponent(base,
|
|
17213
|
+
function resolveComponent(base, relative15, options, skipNormalization) {
|
|
17207
17214
|
const target = {};
|
|
17208
17215
|
if (!skipNormalization) {
|
|
17209
17216
|
base = parse3(serialize(base, options), options);
|
|
17210
|
-
|
|
17217
|
+
relative15 = parse3(serialize(relative15, options), options);
|
|
17211
17218
|
}
|
|
17212
17219
|
options = options || {};
|
|
17213
|
-
if (!options.tolerant &&
|
|
17214
|
-
target.scheme =
|
|
17215
|
-
target.userinfo =
|
|
17216
|
-
target.host =
|
|
17217
|
-
target.port =
|
|
17218
|
-
target.path = removeDotSegments(
|
|
17219
|
-
target.query =
|
|
17220
|
+
if (!options.tolerant && relative15.scheme) {
|
|
17221
|
+
target.scheme = relative15.scheme;
|
|
17222
|
+
target.userinfo = relative15.userinfo;
|
|
17223
|
+
target.host = relative15.host;
|
|
17224
|
+
target.port = relative15.port;
|
|
17225
|
+
target.path = removeDotSegments(relative15.path || "");
|
|
17226
|
+
target.query = relative15.query;
|
|
17220
17227
|
} else {
|
|
17221
|
-
if (
|
|
17222
|
-
target.userinfo =
|
|
17223
|
-
target.host =
|
|
17224
|
-
target.port =
|
|
17225
|
-
target.path = removeDotSegments(
|
|
17226
|
-
target.query =
|
|
17228
|
+
if (relative15.userinfo !== undefined || relative15.host !== undefined || relative15.port !== undefined) {
|
|
17229
|
+
target.userinfo = relative15.userinfo;
|
|
17230
|
+
target.host = relative15.host;
|
|
17231
|
+
target.port = relative15.port;
|
|
17232
|
+
target.path = removeDotSegments(relative15.path || "");
|
|
17233
|
+
target.query = relative15.query;
|
|
17227
17234
|
} else {
|
|
17228
|
-
if (!
|
|
17235
|
+
if (!relative15.path) {
|
|
17229
17236
|
target.path = base.path;
|
|
17230
|
-
if (
|
|
17231
|
-
target.query =
|
|
17237
|
+
if (relative15.query !== undefined) {
|
|
17238
|
+
target.query = relative15.query;
|
|
17232
17239
|
} else {
|
|
17233
17240
|
target.query = base.query;
|
|
17234
17241
|
}
|
|
17235
17242
|
} else {
|
|
17236
|
-
if (
|
|
17237
|
-
target.path = removeDotSegments(
|
|
17243
|
+
if (relative15.path[0] === "/") {
|
|
17244
|
+
target.path = removeDotSegments(relative15.path);
|
|
17238
17245
|
} else {
|
|
17239
17246
|
if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {
|
|
17240
|
-
target.path = "/" +
|
|
17247
|
+
target.path = "/" + relative15.path;
|
|
17241
17248
|
} else if (!base.path) {
|
|
17242
|
-
target.path =
|
|
17249
|
+
target.path = relative15.path;
|
|
17243
17250
|
} else {
|
|
17244
|
-
target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) +
|
|
17251
|
+
target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative15.path;
|
|
17245
17252
|
}
|
|
17246
17253
|
target.path = removeDotSegments(target.path);
|
|
17247
17254
|
}
|
|
17248
|
-
target.query =
|
|
17255
|
+
target.query = relative15.query;
|
|
17249
17256
|
}
|
|
17250
17257
|
target.userinfo = base.userinfo;
|
|
17251
17258
|
target.host = base.host;
|
|
@@ -17253,7 +17260,7 @@ var require_fast_uri = __commonJS((exports, module) => {
|
|
|
17253
17260
|
}
|
|
17254
17261
|
target.scheme = base.scheme;
|
|
17255
17262
|
}
|
|
17256
|
-
target.fragment =
|
|
17263
|
+
target.fragment = relative15.fragment;
|
|
17257
17264
|
return target;
|
|
17258
17265
|
}
|
|
17259
17266
|
function equal(uriA, uriB, options) {
|
|
@@ -17456,7 +17463,7 @@ var require_fast_uri = __commonJS((exports, module) => {
|
|
|
17456
17463
|
var fastUri = {
|
|
17457
17464
|
SCHEMES,
|
|
17458
17465
|
normalize: normalize4,
|
|
17459
|
-
resolve:
|
|
17466
|
+
resolve: resolve36,
|
|
17460
17467
|
resolveComponent,
|
|
17461
17468
|
equal,
|
|
17462
17469
|
serialize,
|
|
@@ -20936,7 +20943,7 @@ var AGENT_MODEL_REQUIREMENTS = {
|
|
|
20936
20943
|
{
|
|
20937
20944
|
providers: ["openai", "vercel"],
|
|
20938
20945
|
model: "gpt-5.6-sol",
|
|
20939
|
-
variant: "
|
|
20946
|
+
variant: "high"
|
|
20940
20947
|
},
|
|
20941
20948
|
{
|
|
20942
20949
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
@@ -21779,6 +21786,14 @@ var DEFAULT_MODEL_RESOLUTION_DEPS = {
|
|
|
21779
21786
|
fuzzyMatchModel,
|
|
21780
21787
|
transformModelForProvider
|
|
21781
21788
|
};
|
|
21789
|
+
function findFallbackVariantForModel(model, fallbackChain, transformModelForProvider2) {
|
|
21790
|
+
const [provider, ...modelParts] = model.split("/");
|
|
21791
|
+
if (!provider || modelParts.length === 0) {
|
|
21792
|
+
return;
|
|
21793
|
+
}
|
|
21794
|
+
const modelID = modelParts.join("/");
|
|
21795
|
+
return fallbackChain?.find((entry) => entry.providers.includes(provider) && transformModelForProvider2(provider, entry.model) === modelID && entry.variant)?.variant;
|
|
21796
|
+
}
|
|
21782
21797
|
function resolveModelPipeline(request, providerCache = {
|
|
21783
21798
|
readConnectedProvidersCache: () => null,
|
|
21784
21799
|
findProviderModelMetadata: () => {
|
|
@@ -21797,8 +21812,9 @@ function resolveModelPipeline(request, providerCache = {
|
|
|
21797
21812
|
}
|
|
21798
21813
|
const normalizedUserModel = normalizeModel(intent?.userModel);
|
|
21799
21814
|
if (normalizedUserModel) {
|
|
21815
|
+
const inheritedVariant = findFallbackVariantForModel(normalizedUserModel, fallbackChain, deps.transformModelForProvider);
|
|
21800
21816
|
log3("Model resolved via config override", { model: normalizedUserModel });
|
|
21801
|
-
return { model: normalizedUserModel, provenance: "override" };
|
|
21817
|
+
return inheritedVariant ? { model: normalizedUserModel, provenance: "override", variant: inheritedVariant } : { model: normalizedUserModel, provenance: "override" };
|
|
21802
21818
|
}
|
|
21803
21819
|
const normalizedCategoryDefault = normalizeModel(intent?.categoryDefaultModel);
|
|
21804
21820
|
if (normalizedCategoryDefault) {
|
|
@@ -79315,7 +79331,7 @@ $ARGUMENTS
|
|
|
79315
79331
|
import { existsSync as existsSync28, readdirSync as readdirSync7, readFileSync as readFileSync18 } from "fs";
|
|
79316
79332
|
import { join as join37 } from "path";
|
|
79317
79333
|
|
|
79318
|
-
// packages/
|
|
79334
|
+
// packages/utils/src/skill-path-resolver.ts
|
|
79319
79335
|
import { isAbsolute as isAbsolute6, posix as posix3, relative as relative4, resolve as resolve12, win32 as win324 } from "path";
|
|
79320
79336
|
function toDisplayPath(path8) {
|
|
79321
79337
|
return path8.replaceAll("\\", "/");
|
|
@@ -79364,7 +79380,6 @@ function resolveSkillPathReferences(content, basePath) {
|
|
|
79364
79380
|
return relativePath.endsWith("/") && !displayPath.endsWith("/") ? `${displayPath}/` : displayPath;
|
|
79365
79381
|
});
|
|
79366
79382
|
}
|
|
79367
|
-
|
|
79368
79383
|
// packages/claude-code-compat-core/src/features/claude-code-plugin-loader/skill-loader.ts
|
|
79369
79384
|
function loadPluginSkillsAsCommands(plugins) {
|
|
79370
79385
|
const skills = {};
|
|
@@ -89655,7 +89670,7 @@ function getCachedVersion(options = {}) {
|
|
|
89655
89670
|
// package.json
|
|
89656
89671
|
var package_default = {
|
|
89657
89672
|
name: "oh-my-opencode",
|
|
89658
|
-
version: "4.
|
|
89673
|
+
version: "4.18.0",
|
|
89659
89674
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
89660
89675
|
main: "./dist/index.js",
|
|
89661
89676
|
types: "dist/index.d.ts",
|
|
@@ -89762,6 +89777,7 @@ var package_default = {
|
|
|
89762
89777
|
build: "bun run script/build.ts",
|
|
89763
89778
|
"build:cli-node": "bun run script/build-cli-node.ts",
|
|
89764
89779
|
"build:codex-install": "bun run script/build-codex-install.ts",
|
|
89780
|
+
"install:codex-dev": "bun run script/build-codex-install.ts && bun run script/install-codex-dev.ts",
|
|
89765
89781
|
"build:codex-plugin": "npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build",
|
|
89766
89782
|
"build:senpi-plugin": "node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check",
|
|
89767
89783
|
"build:materialize-frontend": "node packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs --strict",
|
|
@@ -89866,18 +89882,18 @@ var package_default = {
|
|
|
89866
89882
|
typescript: "^6.0.3"
|
|
89867
89883
|
},
|
|
89868
89884
|
optionalDependencies: {
|
|
89869
|
-
"oh-my-opencode-darwin-arm64": "4.
|
|
89870
|
-
"oh-my-opencode-darwin-x64": "4.
|
|
89871
|
-
"oh-my-opencode-darwin-x64-baseline": "4.
|
|
89872
|
-
"oh-my-opencode-linux-arm64": "4.
|
|
89873
|
-
"oh-my-opencode-linux-arm64-musl": "4.
|
|
89874
|
-
"oh-my-opencode-linux-x64": "4.
|
|
89875
|
-
"oh-my-opencode-linux-x64-baseline": "4.
|
|
89876
|
-
"oh-my-opencode-linux-x64-musl": "4.
|
|
89877
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.
|
|
89878
|
-
"oh-my-opencode-windows-arm64": "4.
|
|
89879
|
-
"oh-my-opencode-windows-x64": "4.
|
|
89880
|
-
"oh-my-opencode-windows-x64-baseline": "4.
|
|
89885
|
+
"oh-my-opencode-darwin-arm64": "4.18.0",
|
|
89886
|
+
"oh-my-opencode-darwin-x64": "4.18.0",
|
|
89887
|
+
"oh-my-opencode-darwin-x64-baseline": "4.18.0",
|
|
89888
|
+
"oh-my-opencode-linux-arm64": "4.18.0",
|
|
89889
|
+
"oh-my-opencode-linux-arm64-musl": "4.18.0",
|
|
89890
|
+
"oh-my-opencode-linux-x64": "4.18.0",
|
|
89891
|
+
"oh-my-opencode-linux-x64-baseline": "4.18.0",
|
|
89892
|
+
"oh-my-opencode-linux-x64-musl": "4.18.0",
|
|
89893
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.18.0",
|
|
89894
|
+
"oh-my-opencode-windows-arm64": "4.18.0",
|
|
89895
|
+
"oh-my-opencode-windows-x64": "4.18.0",
|
|
89896
|
+
"oh-my-opencode-windows-x64-baseline": "4.18.0"
|
|
89881
89897
|
},
|
|
89882
89898
|
overrides: {
|
|
89883
89899
|
"@earendil-works/pi-agent-core": "0.80.3",
|
|
@@ -95589,7 +95605,7 @@ Before acting, survey the skills available in this system: scan their descriptio
|
|
|
95589
95605
|
| explore agent | Need codebase patterns you don't have | \`task(subagent_type="explore", load_skills=[], run_in_background=true, ...)\` |
|
|
95590
95606
|
| librarian agent | External library docs, OSS examples | \`task(subagent_type="librarian", load_skills=[], run_in_background=true, ...)\` |
|
|
95591
95607
|
| oracle agent | Stuck on architecture/debugging after 2+ attempts | \`task(subagent_type="oracle", load_skills=[], run_in_background=false, ...)\` |
|
|
95592
|
-
| plan agent |
|
|
95608
|
+
| plan agent | Discovery leaves unresolved design uncertainty: unclear boundaries, competing decompositions, or uncertain dependency order | \`task(subagent_type="plan", load_skills=[], run_in_background=false, ...)\` |
|
|
95593
95609
|
| task category | Specialized work matching a category | \`task(category="...", load_skills=[...], run_in_background=true)\` |
|
|
95594
95610
|
|
|
95595
95611
|
<tool_usage_rules>
|
|
@@ -95624,8 +95640,8 @@ deep_context = background_output(task_id=...)
|
|
|
95624
95640
|
// Merge ALL findings for comprehensive understanding
|
|
95625
95641
|
\`\`\`
|
|
95626
95642
|
|
|
95627
|
-
**Plan agent (size
|
|
95628
|
-
-
|
|
95643
|
+
**Plan agent (size by what is UNDECIDED, not by step count):**
|
|
95644
|
+
- Invoke only when open design decisions remain after context gathering \u2014 unclear boundaries, several viable decompositions, or a multi-file build whose dependency order is not obvious. A known procedure, however many steps, and work you are delegating to another session never justify it.
|
|
95629
95645
|
- Invoke AFTER gathering context from both tracks.
|
|
95630
95646
|
- Then execute in the plan's exact wave order + parallel grouping and run the verification it specifies.
|
|
95631
95647
|
|
|
@@ -99297,19 +99313,7 @@ ${textPart.text ?? ""}`;
|
|
|
99297
99313
|
};
|
|
99298
99314
|
}
|
|
99299
99315
|
// packages/skills-loader-core/src/shared/internal-initiator-marker.ts
|
|
99300
|
-
|
|
99301
|
-
function hasInternalInitiatorMarker2(text) {
|
|
99302
|
-
return INTERNAL_INITIATOR_MARKER_DETECT_PATTERN2.test(text);
|
|
99303
|
-
}
|
|
99304
|
-
function isTextPartLike2(part) {
|
|
99305
|
-
return part.type === "text" && typeof part.text === "string";
|
|
99306
|
-
}
|
|
99307
|
-
function isSyntheticOrInternalTextPart2(part) {
|
|
99308
|
-
return isTextPartLike2(part) && (part.synthetic === true || hasInternalInitiatorMarker2(part.text));
|
|
99309
|
-
}
|
|
99310
|
-
function isRealUserTextPart2(part) {
|
|
99311
|
-
return isTextPartLike2(part) && !isSyntheticOrInternalTextPart2(part);
|
|
99312
|
-
}
|
|
99316
|
+
init_internal_initiator_marker();
|
|
99313
99317
|
|
|
99314
99318
|
// packages/skills-loader-core/src/hooks/auto-slash-command/constants.ts
|
|
99315
99319
|
var AUTO_SLASH_COMMAND_TAG_OPEN = "<auto-slash-command>";
|
|
@@ -99361,7 +99365,7 @@ function detectSlashCommand(text) {
|
|
|
99361
99365
|
return parsed;
|
|
99362
99366
|
}
|
|
99363
99367
|
function extractPromptText3(parts) {
|
|
99364
|
-
const textParts = parts.filter(
|
|
99368
|
+
const textParts = parts.filter(isRealUserTextPart);
|
|
99365
99369
|
const slashPart = textParts.find((p) => (p.text ?? "").trim().startsWith("/"));
|
|
99366
99370
|
if (slashPart?.text) {
|
|
99367
99371
|
return slashPart.text;
|
|
@@ -99371,7 +99375,7 @@ function extractPromptText3(parts) {
|
|
|
99371
99375
|
function findSlashCommandPartIndex(parts) {
|
|
99372
99376
|
for (let idx = 0;idx < parts.length; idx += 1) {
|
|
99373
99377
|
const part = parts[idx];
|
|
99374
|
-
if (!
|
|
99378
|
+
if (!isRealUserTextPart(part))
|
|
99375
99379
|
continue;
|
|
99376
99380
|
if ((part.text ?? "").trim().startsWith("/")) {
|
|
99377
99381
|
return idx;
|
|
@@ -99654,56 +99658,6 @@ function findProjectOpencodeSkillDirs(startDirectory, stopDirectory) {
|
|
|
99654
99658
|
[".opencode", "skill"]
|
|
99655
99659
|
], stopDirectory ?? detectWorktreePath2(startDirectory));
|
|
99656
99660
|
}
|
|
99657
|
-
// packages/skills-loader-core/src/shared/skill-path-resolver.ts
|
|
99658
|
-
import { isAbsolute as isAbsolute13, posix as posix5, relative as relative12, resolve as resolve22, win32 as win327 } from "path";
|
|
99659
|
-
function toDisplayPath2(path17) {
|
|
99660
|
-
return path17.replaceAll("\\", "/");
|
|
99661
|
-
}
|
|
99662
|
-
function isPosixAbsolutePath3(path17) {
|
|
99663
|
-
return path17.startsWith("/") && !/^[A-Za-z]:[\\/]/.test(path17);
|
|
99664
|
-
}
|
|
99665
|
-
function isWindowsAbsolutePath3(path17) {
|
|
99666
|
-
return /^[A-Za-z]:[\\/]/.test(path17);
|
|
99667
|
-
}
|
|
99668
|
-
function looksLikeFilePath2(path17) {
|
|
99669
|
-
if (path17.endsWith("/"))
|
|
99670
|
-
return true;
|
|
99671
|
-
const lastSegment = path17.split("/").pop() ?? "";
|
|
99672
|
-
return /\.[a-zA-Z0-9]+$/.test(lastSegment);
|
|
99673
|
-
}
|
|
99674
|
-
function resolveSkillPathReferences2(content, basePath) {
|
|
99675
|
-
const normalizedBase = basePath.replace(/[\\/]$/, "");
|
|
99676
|
-
return content.replace(/(?<![a-zA-Z0-9="\(])@([a-zA-Z0-9_-]+\/[a-zA-Z0-9_.\-\/]*)/g, (match, relativePath) => {
|
|
99677
|
-
if (!looksLikeFilePath2(relativePath))
|
|
99678
|
-
return match;
|
|
99679
|
-
if (isWindowsAbsolutePath3(normalizedBase)) {
|
|
99680
|
-
const resolvedPath2 = win327.resolve(normalizedBase, relativePath);
|
|
99681
|
-
const relativePathFromBase2 = win327.relative(normalizedBase, resolvedPath2);
|
|
99682
|
-
if (relativePathFromBase2.startsWith("..") || win327.isAbsolute(relativePathFromBase2)) {
|
|
99683
|
-
return match;
|
|
99684
|
-
}
|
|
99685
|
-
const displayPath2 = toDisplayPath2(resolvedPath2);
|
|
99686
|
-
return relativePath.endsWith("/") && !displayPath2.endsWith("/") ? `${displayPath2}/` : displayPath2;
|
|
99687
|
-
}
|
|
99688
|
-
if (isPosixAbsolutePath3(normalizedBase)) {
|
|
99689
|
-
const displayBase = toDisplayPath2(normalizedBase);
|
|
99690
|
-
const resolvedPath2 = posix5.resolve(displayBase, relativePath);
|
|
99691
|
-
const relativePathFromBase2 = posix5.relative(displayBase, resolvedPath2);
|
|
99692
|
-
if (relativePathFromBase2.startsWith("..") || posix5.isAbsolute(relativePathFromBase2)) {
|
|
99693
|
-
return match;
|
|
99694
|
-
}
|
|
99695
|
-
return relativePath.endsWith("/") && !resolvedPath2.endsWith("/") ? `${resolvedPath2}/` : resolvedPath2;
|
|
99696
|
-
}
|
|
99697
|
-
const resolvedPath = resolve22(normalizedBase, relativePath);
|
|
99698
|
-
const relativePathFromBase = relative12(normalizedBase, resolvedPath);
|
|
99699
|
-
if (relativePathFromBase.startsWith("..") || isAbsolute13(relativePathFromBase)) {
|
|
99700
|
-
return match;
|
|
99701
|
-
}
|
|
99702
|
-
const displayPath = toDisplayPath2(resolvedPath);
|
|
99703
|
-
return relativePath.endsWith("/") && !displayPath.endsWith("/") ? `${displayPath}/` : displayPath;
|
|
99704
|
-
});
|
|
99705
|
-
}
|
|
99706
|
-
|
|
99707
99661
|
// packages/skills-loader-core/src/shared/index.ts
|
|
99708
99662
|
function log6(_message, _context) {}
|
|
99709
99663
|
|
|
@@ -99894,7 +99848,7 @@ async function loadSkillFromPath(options) {
|
|
|
99894
99848
|
const originalDescription = data.description || "";
|
|
99895
99849
|
const isOpencodeSource = options.scope === "opencode" || options.scope === "opencode-project";
|
|
99896
99850
|
const formattedDescription = `(${options.scope} - Skill) ${originalDescription}`;
|
|
99897
|
-
const resolvedBody =
|
|
99851
|
+
const resolvedBody = resolveSkillPathReferences(body.trim(), options.resolvedPath);
|
|
99898
99852
|
const templateContent = `<skill-instruction>
|
|
99899
99853
|
Base directory for this skill: ${options.resolvedPath}/
|
|
99900
99854
|
File references (@path) in this skill are relative to this directory.
|
|
@@ -100201,7 +100155,7 @@ function builtinToLoadedSkill(builtin) {
|
|
|
100201
100155
|
// packages/skills-loader-core/src/features/opencode-skill-loader/merger/config-skill-entry-loader.ts
|
|
100202
100156
|
init_src();
|
|
100203
100157
|
import { existsSync as existsSync79, readFileSync as readFileSync50 } from "fs";
|
|
100204
|
-
import { dirname as dirname28, isAbsolute as
|
|
100158
|
+
import { dirname as dirname28, isAbsolute as isAbsolute13, resolve as resolve22 } from "path";
|
|
100205
100159
|
import { homedir as homedir25 } from "os";
|
|
100206
100160
|
function resolveFilePath5(from, configDir) {
|
|
100207
100161
|
let filePath = from;
|
|
@@ -100209,13 +100163,13 @@ function resolveFilePath5(from, configDir) {
|
|
|
100209
100163
|
filePath = filePath.slice(6, -1);
|
|
100210
100164
|
}
|
|
100211
100165
|
if (filePath.startsWith("~/")) {
|
|
100212
|
-
return
|
|
100166
|
+
return resolve22(homedir25(), filePath.slice(2));
|
|
100213
100167
|
}
|
|
100214
|
-
if (
|
|
100168
|
+
if (isAbsolute13(filePath)) {
|
|
100215
100169
|
return filePath;
|
|
100216
100170
|
}
|
|
100217
100171
|
const baseDir = configDir || process.cwd();
|
|
100218
|
-
return
|
|
100172
|
+
return resolve22(baseDir, filePath);
|
|
100219
100173
|
}
|
|
100220
100174
|
function loadSkillFromFile(filePath) {
|
|
100221
100175
|
try {
|
|
@@ -100258,7 +100212,7 @@ function configEntryToLoadedSkill(name, entry, configDir) {
|
|
|
100258
100212
|
}
|
|
100259
100213
|
const description = entry.description || fileMetadata.description || "";
|
|
100260
100214
|
const resolvedPath = sourcePath ? dirname28(sourcePath) : configDir || process.cwd();
|
|
100261
|
-
const resolvedTemplate =
|
|
100215
|
+
const resolvedTemplate = resolveSkillPathReferences(template.trim(), resolvedPath);
|
|
100262
100216
|
const wrappedTemplate = `<skill-instruction>
|
|
100263
100217
|
Base directory for this skill: ${resolvedPath}/
|
|
100264
100218
|
File references (@path) in this skill are relative to this directory.
|
|
@@ -102459,7 +102413,7 @@ EOF
|
|
|
102459
102413
|
// packages/skills-loader-core/src/features/builtin-skills/skills/review-work.ts
|
|
102460
102414
|
var reviewWorkSkill = {
|
|
102461
102415
|
name: "review-work",
|
|
102462
|
-
description: "Post-implementation review orchestrator. Launches 5 parallel background sub-agents: Oracle (goal/constraint verification), Oracle (code quality), Oracle (security), unspecified-high (hands-on QA execution), unspecified-high (context mining from GitHub/git/Slack/Notion). All must pass for review to pass. MUST USE
|
|
102416
|
+
description: "Post-implementation review orchestrator. Launches 5 parallel background sub-agents: Oracle (goal/constraint verification), Oracle (code quality), Oracle (security), unspecified-high (hands-on QA execution), unspecified-high (context mining from GitHub/git/Slack/Notion). All must pass for review to pass. MUST USE before a PR handoff or when the user explicitly asks to review completed work. Triggers: 'review work', 'review my work', 'review changes', 'QA my work', 'verify implementation', 'check my work', 'validate changes', 'post-implementation review'.",
|
|
102463
102417
|
template: loadSharedSkillTemplate("review-work")
|
|
102464
102418
|
};
|
|
102465
102419
|
// packages/skills-loader-core/src/features/builtin-skills/skills/remove-ai-slops.ts
|
|
@@ -103454,7 +103408,7 @@ init_src();
|
|
|
103454
103408
|
var import_picomatch2 = __toESM(require_picomatch2(), 1);
|
|
103455
103409
|
import * as fs20 from "fs/promises";
|
|
103456
103410
|
import { homedir as homedir26 } from "os";
|
|
103457
|
-
import { dirname as dirname30, extname as extname2, isAbsolute as
|
|
103411
|
+
import { dirname as dirname30, extname as extname2, isAbsolute as isAbsolute14, join as join97, relative as relative12 } from "path";
|
|
103458
103412
|
var MAX_RECURSIVE_DEPTH = 10;
|
|
103459
103413
|
function isHttpUrl(path17) {
|
|
103460
103414
|
return path17.startsWith("http://") || path17.startsWith("https://");
|
|
@@ -103466,7 +103420,7 @@ function toAbsolutePath(path17, configDir) {
|
|
|
103466
103420
|
if (path17.startsWith("~/")) {
|
|
103467
103421
|
return join97(homedir26(), path17.slice(2));
|
|
103468
103422
|
}
|
|
103469
|
-
if (
|
|
103423
|
+
if (isAbsolute14(path17)) {
|
|
103470
103424
|
return path17;
|
|
103471
103425
|
}
|
|
103472
103426
|
return join97(configDir, path17);
|
|
@@ -103483,7 +103437,7 @@ function filterByGlob(skills, sourceBaseDir, globPattern) {
|
|
|
103483
103437
|
return skills.filter((skill) => {
|
|
103484
103438
|
if (!skill.path)
|
|
103485
103439
|
return false;
|
|
103486
|
-
const rel = normalizePathForGlob(
|
|
103440
|
+
const rel = normalizePathForGlob(relative12(sourceBaseDir, skill.path));
|
|
103487
103441
|
return import_picomatch2.default.isMatch(rel, globPattern, { dot: true, bash: true });
|
|
103488
103442
|
});
|
|
103489
103443
|
}
|
|
@@ -105764,11 +105718,11 @@ function isPrometheusAgent(agentName) {
|
|
|
105764
105718
|
}
|
|
105765
105719
|
|
|
105766
105720
|
// packages/omo-opencode/src/hooks/prometheus-md-only/path-policy.ts
|
|
105767
|
-
import { relative as
|
|
105721
|
+
import { relative as relative13, resolve as resolve23, isAbsolute as isAbsolute15 } from "path";
|
|
105768
105722
|
function isAllowedFile(filePath, workspaceRoot) {
|
|
105769
|
-
const resolved =
|
|
105770
|
-
const rel =
|
|
105771
|
-
if (rel.startsWith("..") ||
|
|
105723
|
+
const resolved = resolve23(workspaceRoot, filePath);
|
|
105724
|
+
const rel = relative13(workspaceRoot, resolved);
|
|
105725
|
+
if (rel.startsWith("..") || isAbsolute15(rel)) {
|
|
105772
105726
|
return false;
|
|
105773
105727
|
}
|
|
105774
105728
|
if (!/(^|[/\\])\.omo([/\\]|$)/i.test(rel)) {
|
|
@@ -105917,9 +105871,9 @@ init_logger2();
|
|
|
105917
105871
|
// packages/omo-opencode/src/hooks/start-work/worktree-detector.ts
|
|
105918
105872
|
import { execFileSync as execFileSync5 } from "child_process";
|
|
105919
105873
|
import { existsSync as existsSync82, realpathSync as realpathSync14 } from "fs";
|
|
105920
|
-
import { resolve as
|
|
105874
|
+
import { resolve as resolve24, win32 as win327 } from "path";
|
|
105921
105875
|
function normalizePath5(path18) {
|
|
105922
|
-
const resolvedPath = process.platform !== "win32" &&
|
|
105876
|
+
const resolvedPath = process.platform !== "win32" && win327.isAbsolute(path18) ? path18 : resolve24(path18);
|
|
105923
105877
|
if (!existsSync82(resolvedPath)) {
|
|
105924
105878
|
return resolvedPath;
|
|
105925
105879
|
}
|
|
@@ -106464,24 +106418,24 @@ function buildSelectedContextInfo(params) {
|
|
|
106464
106418
|
}
|
|
106465
106419
|
|
|
106466
106420
|
// packages/omo-opencode/src/hooks/start-work/session-plan-affinity.ts
|
|
106467
|
-
import { posix as
|
|
106421
|
+
import { posix as posix5, win32 as win328 } from "path";
|
|
106468
106422
|
init_logger2();
|
|
106469
106423
|
var PLAN_PATH_PATTERN = /[A-Za-z0-9_./\\:~-]*\.(?:sisyphus|omo)[\\/]plans[\\/][A-Za-z0-9._/\\~-]+\.md/gi;
|
|
106470
106424
|
function normalizePlanPath(directory, candidate) {
|
|
106471
106425
|
const trimmedCandidate = candidate.trim().replace(/^["'`]+|["'`]+$/g, "");
|
|
106472
106426
|
if (looksLikeWindowsAbsolutePath(trimmedCandidate)) {
|
|
106473
|
-
return
|
|
106427
|
+
return win328.resolve(trimmedCandidate);
|
|
106474
106428
|
}
|
|
106475
106429
|
if (looksLikeWindowsAbsolutePath(directory)) {
|
|
106476
|
-
return
|
|
106430
|
+
return win328.resolve(directory, trimmedCandidate);
|
|
106477
106431
|
}
|
|
106478
|
-
if (
|
|
106479
|
-
return
|
|
106432
|
+
if (posix5.isAbsolute(trimmedCandidate)) {
|
|
106433
|
+
return posix5.resolve(trimmedCandidate);
|
|
106480
106434
|
}
|
|
106481
|
-
return
|
|
106435
|
+
return posix5.resolve(directory, trimmedCandidate);
|
|
106482
106436
|
}
|
|
106483
106437
|
function normalizePlanPathKey(planPath) {
|
|
106484
|
-
const resolvedPath = looksLikeWindowsAbsolutePath(planPath) ?
|
|
106438
|
+
const resolvedPath = looksLikeWindowsAbsolutePath(planPath) ? win328.resolve(planPath) : posix5.resolve(planPath);
|
|
106485
106439
|
return resolvedPath.replaceAll("\\", "/");
|
|
106486
106440
|
}
|
|
106487
106441
|
function looksLikeWindowsAbsolutePath(path18) {
|
|
@@ -107810,7 +107764,7 @@ async function validateSubagentSessionId(input) {
|
|
|
107810
107764
|
}
|
|
107811
107765
|
|
|
107812
107766
|
// packages/omo-opencode/src/hooks/atlas/tool-execute-after-direct-work.ts
|
|
107813
|
-
import { resolve as
|
|
107767
|
+
import { resolve as resolve25 } from "path";
|
|
107814
107768
|
init_logger2();
|
|
107815
107769
|
|
|
107816
107770
|
// packages/omo-opencode/src/hooks/atlas/omo-path.ts
|
|
@@ -107920,7 +107874,7 @@ async function handleDirectWorkToolAfter(input) {
|
|
|
107920
107874
|
const sessionWork = getWorkForSession(ctx.directory, toolInput.sessionID);
|
|
107921
107875
|
if (sessionWork) {
|
|
107922
107876
|
const planPath = resolveBoulderPlanPathForWork(ctx.directory, sessionWork);
|
|
107923
|
-
if (
|
|
107877
|
+
if (resolve25(filePath) === resolve25(planPath) && planSnapshot !== undefined) {
|
|
107924
107878
|
const beforeCheckedKeys = parseCheckedTopLevelTaskKeys(planSnapshot);
|
|
107925
107879
|
const afterCheckedKeys = readCheckedTaskKeysFromPlan(planPath);
|
|
107926
107880
|
for (const taskKey of afterCheckedKeys) {
|
|
@@ -108669,7 +108623,7 @@ function createToolExecuteAfterHandler2(input) {
|
|
|
108669
108623
|
// packages/omo-opencode/src/hooks/atlas/tool-execute-before.ts
|
|
108670
108624
|
init_logger2();
|
|
108671
108625
|
import { existsSync as existsSync85, readFileSync as readFileSync58 } from "fs";
|
|
108672
|
-
import { resolve as
|
|
108626
|
+
import { resolve as resolve26 } from "path";
|
|
108673
108627
|
var TASK_SECTION_HEADER_PATTERN = /^##\s*1\.\s*TASK\s*$/i;
|
|
108674
108628
|
var TODO_TASK_LINE_PATTERN = /^(?:[-*]\s*\[\s*\]\s*)?(\d+)\.\s+(.+)$/;
|
|
108675
108629
|
var FINAL_WAVE_TASK_LINE_PATTERN = /^(?:[-*]\s*\[\s*\]\s*)?(F\d+)\.\s+(.+)$/i;
|
|
@@ -108727,7 +108681,7 @@ function createToolExecuteBeforeHandler2(input) {
|
|
|
108727
108681
|
const sessionWork = sessionID ? getWorkForSession(ctx.directory, sessionID) : null;
|
|
108728
108682
|
const state3 = sessionWork ? null : readBoulderState(ctx.directory);
|
|
108729
108683
|
const planPath = sessionWork ? resolveBoulderPlanPathForWork(ctx.directory, sessionWork) : state3 ? resolveBoulderPlanPath(ctx.directory, state3) : null;
|
|
108730
|
-
if (planPath &&
|
|
108684
|
+
if (planPath && resolve26(filePath) === resolve26(planPath) && pendingPlanSnapshots) {
|
|
108731
108685
|
try {
|
|
108732
108686
|
if (existsSync85(planPath)) {
|
|
108733
108687
|
pendingPlanSnapshots.set(toolInput.callID, readFileSync58(planPath, "utf-8"));
|
|
@@ -112628,7 +112582,7 @@ function createRuntimeFallbackHook(ctx, options, factoryOverrides = {}) {
|
|
|
112628
112582
|
}
|
|
112629
112583
|
// packages/omo-opencode/src/hooks/write-existing-file-guard/hook.ts
|
|
112630
112584
|
import { existsSync as existsSync87, realpathSync as realpathSync15 } from "fs";
|
|
112631
|
-
import { basename as basename17, dirname as dirname32, isAbsolute as
|
|
112585
|
+
import { basename as basename17, dirname as dirname32, isAbsolute as isAbsolute16, join as join101, normalize as normalize2, relative as relative14, resolve as resolve27 } from "path";
|
|
112632
112586
|
|
|
112633
112587
|
// packages/omo-opencode/src/hooks/write-existing-file-guard/tool-execute-before-handler.ts
|
|
112634
112588
|
import { existsSync as existsSync86 } from "fs";
|
|
@@ -112800,11 +112754,11 @@ function getPathFromArgs(args) {
|
|
|
112800
112754
|
return args?.filePath ?? args?.path ?? args?.file_path;
|
|
112801
112755
|
}
|
|
112802
112756
|
function resolveInputPath(ctx, inputPath) {
|
|
112803
|
-
return normalize2(
|
|
112757
|
+
return normalize2(isAbsolute16(inputPath) ? inputPath : resolve27(ctx.directory, inputPath));
|
|
112804
112758
|
}
|
|
112805
112759
|
function isPathInsideDirectory(pathToCheck, directory) {
|
|
112806
|
-
const relativePath =
|
|
112807
|
-
return relativePath === "" || !relativePath.startsWith("..") && !
|
|
112760
|
+
const relativePath = relative14(directory, pathToCheck);
|
|
112761
|
+
return relativePath === "" || !relativePath.startsWith("..") && !isAbsolute16(relativePath);
|
|
112808
112762
|
}
|
|
112809
112763
|
function toCanonicalPath2(absolutePath) {
|
|
112810
112764
|
let canonicalPath = absolutePath;
|
|
@@ -115788,7 +115742,7 @@ function createNotepadWriteGuardHook() {
|
|
|
115788
115742
|
}
|
|
115789
115743
|
// packages/omo-opencode/src/hooks/plan-format-validator/hook.ts
|
|
115790
115744
|
import { existsSync as existsSync89, readFileSync as readFileSync60 } from "fs";
|
|
115791
|
-
import { resolve as
|
|
115745
|
+
import { resolve as resolve28 } from "path";
|
|
115792
115746
|
init_logger2();
|
|
115793
115747
|
var WRITE_TOOLS = new Set(["Write", "Edit", "write", "edit"]);
|
|
115794
115748
|
var CHECKBOX_PATTERN = /^[-*]\s*\[[ xX]\]/m;
|
|
@@ -115870,7 +115824,7 @@ function createPlanFormatValidatorHook(_ctx) {
|
|
|
115870
115824
|
return;
|
|
115871
115825
|
if (!isPlanFilePath(filePath))
|
|
115872
115826
|
return;
|
|
115873
|
-
const resolvedPath =
|
|
115827
|
+
const resolvedPath = resolve28(_ctx.directory, filePath);
|
|
115874
115828
|
if (!existsSync89(resolvedPath))
|
|
115875
115829
|
return;
|
|
115876
115830
|
const content = readFileSync60(resolvedPath, "utf-8");
|
|
@@ -115972,7 +115926,7 @@ function createMonitorStatusInjectorHook(monitorManager, config) {
|
|
|
115972
115926
|
};
|
|
115973
115927
|
}
|
|
115974
115928
|
// packages/omo-opencode/src/tools/grep/tools.ts
|
|
115975
|
-
import { resolve as
|
|
115929
|
+
import { resolve as resolve29 } from "path";
|
|
115976
115930
|
|
|
115977
115931
|
// node_modules/.bun/@opencode-ai+plugin@1.15.13+8002cb46da36e070/node_modules/@opencode-ai/plugin/dist/tool.js
|
|
115978
115932
|
import { z as z3 } from "zod";
|
|
@@ -116219,10 +116173,10 @@ class Semaphore {
|
|
|
116219
116173
|
this.running++;
|
|
116220
116174
|
return;
|
|
116221
116175
|
}
|
|
116222
|
-
return new Promise((
|
|
116176
|
+
return new Promise((resolve29) => {
|
|
116223
116177
|
this.queue.push(() => {
|
|
116224
116178
|
this.running++;
|
|
116225
|
-
|
|
116179
|
+
resolve29();
|
|
116226
116180
|
});
|
|
116227
116181
|
});
|
|
116228
116182
|
}
|
|
@@ -116537,7 +116491,7 @@ function createGrepTools(ctx) {
|
|
|
116537
116491
|
const globs = args.include ? [args.include] : undefined;
|
|
116538
116492
|
const runtimeCtx = context;
|
|
116539
116493
|
const dir = typeof runtimeCtx.directory === "string" ? runtimeCtx.directory : ctx.directory;
|
|
116540
|
-
const searchPath = args.path ?
|
|
116494
|
+
const searchPath = args.path ? resolve29(dir, args.path) : dir;
|
|
116541
116495
|
const paths = [searchPath];
|
|
116542
116496
|
const outputMode = args.output_mode ?? "files_with_matches";
|
|
116543
116497
|
const headLimit = args.head_limit ?? 0;
|
|
@@ -116568,11 +116522,11 @@ function createGrepTools(ctx) {
|
|
|
116568
116522
|
return { grep };
|
|
116569
116523
|
}
|
|
116570
116524
|
// packages/omo-opencode/src/tools/glob/tools.ts
|
|
116571
|
-
import { resolve as
|
|
116525
|
+
import { resolve as resolve31 } from "path";
|
|
116572
116526
|
|
|
116573
116527
|
// packages/omo-opencode/src/tools/glob/cli.ts
|
|
116574
116528
|
init_bun_spawn_shim();
|
|
116575
|
-
import { resolve as
|
|
116529
|
+
import { resolve as resolve30 } from "path";
|
|
116576
116530
|
|
|
116577
116531
|
// packages/omo-opencode/src/tools/glob/constants.ts
|
|
116578
116532
|
var DEFAULT_TIMEOUT_MS3 = 60000;
|
|
@@ -116700,7 +116654,7 @@ async function runRgFilesInternal(options, resolvedCli, processSpawner = spawn)
|
|
|
116700
116654
|
}
|
|
116701
116655
|
let filePath;
|
|
116702
116656
|
if (isRg) {
|
|
116703
|
-
filePath = cwd ?
|
|
116657
|
+
filePath = cwd ? resolve30(cwd, line) : line;
|
|
116704
116658
|
} else if (isWindows2) {
|
|
116705
116659
|
filePath = line.trim();
|
|
116706
116660
|
} else {
|
|
@@ -116760,7 +116714,7 @@ function createGlobTools(ctx) {
|
|
|
116760
116714
|
const cli = await resolveGrepCliWithAutoInstall();
|
|
116761
116715
|
const runtimeCtx = context;
|
|
116762
116716
|
const dir = typeof runtimeCtx.directory === "string" ? runtimeCtx.directory : ctx.directory;
|
|
116763
|
-
const searchPath = args.path ?
|
|
116717
|
+
const searchPath = args.path ? resolve31(dir, args.path) : dir;
|
|
116764
116718
|
const result = await runRgFiles({
|
|
116765
116719
|
pattern: args.pattern,
|
|
116766
116720
|
paths: [searchPath]
|
|
@@ -117750,9 +117704,8 @@ async function getSdkAllSessions(client3) {
|
|
|
117750
117704
|
return sessions.map((session) => session.id);
|
|
117751
117705
|
}
|
|
117752
117706
|
async function sdkSessionExists(client3, sessionID) {
|
|
117753
|
-
const
|
|
117754
|
-
|
|
117755
|
-
return sessions.some((session) => session.id === sessionID);
|
|
117707
|
+
const messages = await getSdkSessionMessages(client3, sessionID);
|
|
117708
|
+
return messages.length > 0;
|
|
117756
117709
|
}
|
|
117757
117710
|
async function getSdkSessionMessages(client3, sessionID) {
|
|
117758
117711
|
const response = await fetchSdkResponse(() => client3.session.messages({ path: { id: sessionID } }));
|
|
@@ -118637,7 +118590,7 @@ init_logger2();
|
|
|
118637
118590
|
|
|
118638
118591
|
// packages/omo-opencode/src/tools/background-task/delay.ts
|
|
118639
118592
|
function delay5(ms) {
|
|
118640
|
-
return new Promise((
|
|
118593
|
+
return new Promise((resolve32) => setTimeout(resolve32, ms));
|
|
118641
118594
|
}
|
|
118642
118595
|
// packages/omo-opencode/src/tools/background-task/create-background-output.ts
|
|
118643
118596
|
init_logger2();
|
|
@@ -119495,7 +119448,7 @@ function getClaudeConfigDir3() {
|
|
|
119495
119448
|
// packages/claude-code-compat-core/src/shared/opencode-config-dir.ts
|
|
119496
119449
|
import { existsSync as existsSync93, realpathSync as realpathSync16 } from "fs";
|
|
119497
119450
|
import { homedir as homedir28 } from "os";
|
|
119498
|
-
import { join as join108, posix as
|
|
119451
|
+
import { join as join108, posix as posix6, resolve as resolve32, win32 as win329 } from "path";
|
|
119499
119452
|
var TAURI_APP_IDENTIFIER3 = "ai.opencode.desktop";
|
|
119500
119453
|
var TAURI_APP_IDENTIFIER_DEV3 = "ai.opencode.desktop.dev";
|
|
119501
119454
|
function isDevBuild3(version) {
|
|
@@ -119510,7 +119463,7 @@ function getTauriConfigDir3(identifier) {
|
|
|
119510
119463
|
return join108(homedir28(), "Library", "Application Support", identifier);
|
|
119511
119464
|
case "win32": {
|
|
119512
119465
|
const appData = process.env.APPDATA || join108(homedir28(), "AppData", "Roaming");
|
|
119513
|
-
return
|
|
119466
|
+
return win329.join(appData, identifier);
|
|
119514
119467
|
}
|
|
119515
119468
|
case "linux":
|
|
119516
119469
|
default: {
|
|
@@ -119521,9 +119474,9 @@ function getTauriConfigDir3(identifier) {
|
|
|
119521
119474
|
}
|
|
119522
119475
|
function resolveConfigPath3(pathValue) {
|
|
119523
119476
|
if (isWslEnvironment3() && pathValue.startsWith("/")) {
|
|
119524
|
-
return
|
|
119477
|
+
return posix6.normalize(pathValue);
|
|
119525
119478
|
}
|
|
119526
|
-
const resolvedPath =
|
|
119479
|
+
const resolvedPath = resolve32(pathValue);
|
|
119527
119480
|
if (!existsSync93(resolvedPath))
|
|
119528
119481
|
return resolvedPath;
|
|
119529
119482
|
try {
|
|
@@ -119553,13 +119506,13 @@ function getWslLinuxHomeDir3(windowsConfigRoot) {
|
|
|
119553
119506
|
return envHome;
|
|
119554
119507
|
}
|
|
119555
119508
|
const user = process.env.USER?.trim() || process.env.LOGNAME?.trim() || process.env.SUDO_USER?.trim() || (windowsConfigRoot ? getWindowsUserFromConfigRoot3(windowsConfigRoot) : undefined);
|
|
119556
|
-
return user ?
|
|
119509
|
+
return user ? posix6.join("/home", user) : null;
|
|
119557
119510
|
}
|
|
119558
119511
|
function getCliDefaultConfigDir3() {
|
|
119559
119512
|
const envXdgConfig = process.env.XDG_CONFIG_HOME?.trim();
|
|
119560
119513
|
const shouldIgnoreWindowsXdg = envXdgConfig !== undefined && envXdgConfig.length > 0 && isWslEnvironment3() && isWindowsUserConfigRoot3(envXdgConfig);
|
|
119561
|
-
const xdgConfig = shouldIgnoreWindowsXdg ?
|
|
119562
|
-
const configDir = isWslEnvironment3() ?
|
|
119514
|
+
const xdgConfig = shouldIgnoreWindowsXdg ? posix6.join(getWslLinuxHomeDir3(envXdgConfig) ?? "/home", ".config") : envXdgConfig || join108(homedir28(), ".config");
|
|
119515
|
+
const configDir = isWslEnvironment3() ? posix6.join(xdgConfig, "opencode") : join108(xdgConfig, "opencode");
|
|
119563
119516
|
return resolveConfigPath3(configDir);
|
|
119564
119517
|
}
|
|
119565
119518
|
function getCliCustomConfigDir3() {
|
|
@@ -119589,7 +119542,7 @@ function getOpenCodeConfigDir3(options) {
|
|
|
119589
119542
|
}
|
|
119590
119543
|
const identifier = isDevBuild3(version) ? TAURI_APP_IDENTIFIER_DEV3 : TAURI_APP_IDENTIFIER3;
|
|
119591
119544
|
const tauriDirBase = getTauriConfigDir3(identifier);
|
|
119592
|
-
const tauriDir = process.platform === "win32" ?
|
|
119545
|
+
const tauriDir = process.platform === "win32" ? win329.isAbsolute(tauriDirBase) ? win329.normalize(tauriDirBase) : win329.resolve(tauriDirBase) : resolveConfigPath3(tauriDirBase);
|
|
119593
119546
|
if (checkExisting) {
|
|
119594
119547
|
const legacyDir = getCliConfigDir3();
|
|
119595
119548
|
const legacyConfig = join108(legacyDir, "opencode.json");
|
|
@@ -119604,11 +119557,11 @@ function getOpenCodeConfigDir3(options) {
|
|
|
119604
119557
|
init_src();
|
|
119605
119558
|
// packages/claude-code-compat-core/src/shared/resolve-agent-definition-paths.ts
|
|
119606
119559
|
import { homedir as homedir29 } from "os";
|
|
119607
|
-
import { isAbsolute as
|
|
119560
|
+
import { isAbsolute as isAbsolute17, join as join109, resolve as resolve33 } from "path";
|
|
119608
119561
|
function resolveAgentDefinitionPaths2(paths, baseDir, containmentDir) {
|
|
119609
119562
|
return paths.flatMap((p) => {
|
|
119610
119563
|
const expanded = p.startsWith("~/") ? join109(homedir29(), p.slice(2)) : p;
|
|
119611
|
-
const resolved =
|
|
119564
|
+
const resolved = isAbsolute17(expanded) ? expanded : resolve33(baseDir, expanded);
|
|
119612
119565
|
if (containmentDir !== null && !isWithinProject(resolved, containmentDir)) {
|
|
119613
119566
|
log4(`agent_definitions path rejected (outside project boundary): ${p} -> ${resolved}`);
|
|
119614
119567
|
return [];
|
|
@@ -119659,10 +119612,10 @@ function getOpenCodeCommandDirs2(options) {
|
|
|
119659
119612
|
// packages/claude-code-compat-core/src/shared/project-discovery-dirs.ts
|
|
119660
119613
|
import { execFileSync as execFileSync6 } from "child_process";
|
|
119661
119614
|
import { existsSync as existsSync94, realpathSync as realpathSync17 } from "fs";
|
|
119662
|
-
import { dirname as dirname37, join as join111, resolve as
|
|
119615
|
+
import { dirname as dirname37, join as join111, resolve as resolve34, win32 as win3210 } from "path";
|
|
119663
119616
|
var worktreePathCache3 = new Map;
|
|
119664
119617
|
function normalizePath6(path18) {
|
|
119665
|
-
const resolvedPath = process.platform !== "win32" &&
|
|
119618
|
+
const resolvedPath = process.platform !== "win32" && win3210.isAbsolute(path18) ? path18 : resolve34(path18);
|
|
119666
119619
|
if (!existsSync94(resolvedPath)) {
|
|
119667
119620
|
return resolvedPath;
|
|
119668
119621
|
}
|
|
@@ -119687,7 +119640,7 @@ function pathKey3(path18) {
|
|
|
119687
119640
|
return process.platform === "win32" ? normalized.toLowerCase() : normalized;
|
|
119688
119641
|
}
|
|
119689
119642
|
function detectWorktreePath4(directory) {
|
|
119690
|
-
const resolvedDirectory =
|
|
119643
|
+
const resolvedDirectory = resolve34(directory);
|
|
119691
119644
|
const cacheKey = pathKey3(normalizePath6(resolvedDirectory));
|
|
119692
119645
|
if (worktreePathCache3.has(cacheKey)) {
|
|
119693
119646
|
return worktreePathCache3.get(cacheKey);
|
|
@@ -120124,7 +120077,7 @@ Task ID: ${task.id}`;
|
|
|
120124
120077
|
if (toolContext.abort?.aborted) {
|
|
120125
120078
|
break;
|
|
120126
120079
|
}
|
|
120127
|
-
await new Promise((
|
|
120080
|
+
await new Promise((resolve35) => setTimeout(resolve35, WAIT_FOR_SESSION_INTERVAL_MS));
|
|
120128
120081
|
}
|
|
120129
120082
|
await toolContext.metadata?.({
|
|
120130
120083
|
title: args.description,
|
|
@@ -120204,7 +120157,7 @@ async function waitForCompletion(sessionID, toolContext, ctx) {
|
|
|
120204
120157
|
log2(`[call_omo_agent] Aborted by user`);
|
|
120205
120158
|
throw new Error("Task aborted.");
|
|
120206
120159
|
}
|
|
120207
|
-
await new Promise((
|
|
120160
|
+
await new Promise((resolve35) => setTimeout(resolve35, POLL_INTERVAL_MS));
|
|
120208
120161
|
const statusResult = await ctx.client.session.status();
|
|
120209
120162
|
const allStatuses = normalizeSDKResponse(statusResult, {});
|
|
120210
120163
|
const sessionStatus = allStatuses[sessionID];
|
|
@@ -121407,7 +121360,7 @@ async function waitForLookAtSessionResult(client3, sessionID, options) {
|
|
|
121407
121360
|
sawNonIdleStatus
|
|
121408
121361
|
});
|
|
121409
121362
|
}
|
|
121410
|
-
await new Promise((
|
|
121363
|
+
await new Promise((resolve35) => setTimeout(resolve35, pollInterval));
|
|
121411
121364
|
}
|
|
121412
121365
|
throw new Error(`[look_at] Polling timed out after ${timeout}ms waiting for session ${sessionID} to become idle`);
|
|
121413
121366
|
}
|
|
@@ -123121,7 +123074,7 @@ async function executeUnstableAgentTask(args, ctx, executorCtx, parentContext, a
|
|
|
123121
123074
|
|
|
123122
123075
|
Task ID: ${task.id}`;
|
|
123123
123076
|
}
|
|
123124
|
-
await new Promise((
|
|
123077
|
+
await new Promise((resolve35) => setTimeout(resolve35, timing.WAIT_FOR_SESSION_INTERVAL_MS));
|
|
123125
123078
|
const updated = manager.getTask(task.id);
|
|
123126
123079
|
sessionID = updated?.sessionId;
|
|
123127
123080
|
}
|
|
@@ -123183,7 +123136,7 @@ Session ID: ${sessionID}`;
|
|
|
123183
123136
|
}
|
|
123184
123137
|
const timeoutBudgetMs = syncPollTimeoutMs ?? DEFAULT_SYNC_POLL_TIMEOUT_MS;
|
|
123185
123138
|
const remainingBudgetMs = timeoutBudgetMs - (Date.now() - pollStart);
|
|
123186
|
-
await new Promise((
|
|
123139
|
+
await new Promise((resolve35) => setTimeout(resolve35, Math.min(timingCfg.POLL_INTERVAL_MS, Math.max(1, remainingBudgetMs))));
|
|
123187
123140
|
const statusResult = await client3.session.status();
|
|
123188
123141
|
const allStatuses = normalizeSDKResponse(statusResult, {});
|
|
123189
123142
|
const sessionStatus = allStatuses[sessionID];
|
|
@@ -123322,7 +123275,7 @@ function continueSessionSetup(args) {
|
|
|
123322
123275
|
(async () => {
|
|
123323
123276
|
const waitStart = Date.now();
|
|
123324
123277
|
while (Date.now() - waitStart < args.timing.WAIT_FOR_SESSION_TIMEOUT_MS) {
|
|
123325
|
-
await new Promise((
|
|
123278
|
+
await new Promise((resolve35) => setTimeout(resolve35, args.timing.WAIT_FOR_SESSION_INTERVAL_MS));
|
|
123326
123279
|
const updated = args.manager.getTask(args.taskID);
|
|
123327
123280
|
if (!updated) {
|
|
123328
123281
|
return;
|
|
@@ -123360,7 +123313,7 @@ async function waitForBackgroundSessionStart(args) {
|
|
|
123360
123313
|
args.onAbort();
|
|
123361
123314
|
return;
|
|
123362
123315
|
}
|
|
123363
|
-
await new Promise((
|
|
123316
|
+
await new Promise((resolve35) => setTimeout(resolve35, args.timing.WAIT_FOR_SESSION_INTERVAL_MS));
|
|
123364
123317
|
}
|
|
123365
123318
|
return sessionId;
|
|
123366
123319
|
}
|
|
@@ -125065,7 +125018,7 @@ var TaskDeleteInputSchema = z4.object({
|
|
|
125065
125018
|
});
|
|
125066
125019
|
|
|
125067
125020
|
// packages/omo-opencode/src/features/claude-tasks/storage.ts
|
|
125068
|
-
import { join as join115, dirname as dirname40, basename as basename21, isAbsolute as
|
|
125021
|
+
import { join as join115, dirname as dirname40, basename as basename21, isAbsolute as isAbsolute18 } from "path";
|
|
125069
125022
|
import { existsSync as existsSync100, mkdirSync as mkdirSync19, readFileSync as readFileSync66, writeFileSync as writeFileSync20, renameSync as renameSync7, unlinkSync as unlinkSync15, readdirSync as readdirSync24 } from "fs";
|
|
125070
125023
|
import { randomUUID as randomUUID7 } from "crypto";
|
|
125071
125024
|
function ignoreClaudeTaskStorageError(error) {
|
|
@@ -125077,7 +125030,7 @@ function getTaskDir(config = {}) {
|
|
|
125077
125030
|
const tasksConfig = config.sisyphus?.tasks;
|
|
125078
125031
|
const storagePath = tasksConfig?.storage_path;
|
|
125079
125032
|
if (storagePath) {
|
|
125080
|
-
return
|
|
125033
|
+
return isAbsolute18(storagePath) ? storagePath : join115(process.cwd(), storagePath);
|
|
125081
125034
|
}
|
|
125082
125035
|
const configDir = getOpenCodeConfigDir({ binary: "opencode" });
|
|
125083
125036
|
const listId = resolveTaskListId(config);
|
|
@@ -125977,6 +125930,9 @@ async function assertTeamAcceptsMessages(teamRunId, config) {
|
|
|
125977
125930
|
function resolveRecipients(message, context) {
|
|
125978
125931
|
if (message.to !== "*") {
|
|
125979
125932
|
const allowedRecipients = new Set([...context.activeMembers, ...context.reservedRecipients ?? []]);
|
|
125933
|
+
if (context.leadRecipient !== undefined) {
|
|
125934
|
+
allowedRecipients.add(context.leadRecipient);
|
|
125935
|
+
}
|
|
125980
125936
|
if (!allowedRecipients.has(message.to)) {
|
|
125981
125937
|
throw new InvalidRecipientError(message.to);
|
|
125982
125938
|
}
|
|
@@ -126046,7 +126002,7 @@ async function sendMessage(message, teamRunId, config, context) {
|
|
|
126046
126002
|
if (await fileExists(unreservedPath) || await fileExists(reservedPath)) {
|
|
126047
126003
|
throw new DuplicateMessageIdError;
|
|
126048
126004
|
}
|
|
126049
|
-
const targetPath = reservedRecipients.has(recipient) ? reservedPath : unreservedPath;
|
|
126005
|
+
const targetPath = recipient !== context.leadRecipient && reservedRecipients.has(recipient) ? reservedPath : unreservedPath;
|
|
126050
126006
|
await atomicWrite(targetPath, serializedMessage);
|
|
126051
126007
|
deliveredTo.push(recipient);
|
|
126052
126008
|
}, { ownerTag: `team-mailbox:${recipient}` });
|
|
@@ -127122,9 +127078,9 @@ async function abortWithTimeout(client3, sessionID, timeoutMs = 1e4) {
|
|
|
127122
127078
|
});
|
|
127123
127079
|
return "failed";
|
|
127124
127080
|
}),
|
|
127125
|
-
new Promise((
|
|
127081
|
+
new Promise((resolve35) => {
|
|
127126
127082
|
timeoutHandle = setTimeout(() => {
|
|
127127
|
-
|
|
127083
|
+
resolve35("timed_out");
|
|
127128
127084
|
}, timeoutMs);
|
|
127129
127085
|
})
|
|
127130
127086
|
]);
|
|
@@ -127526,7 +127482,7 @@ class ConcurrencyManager {
|
|
|
127526
127482
|
this.counts.set(key, current + 1);
|
|
127527
127483
|
return;
|
|
127528
127484
|
}
|
|
127529
|
-
return new Promise((
|
|
127485
|
+
return new Promise((resolve35, reject) => {
|
|
127530
127486
|
const queue = this.queues.get(key) ?? [];
|
|
127531
127487
|
const entry = {
|
|
127532
127488
|
taskId,
|
|
@@ -127534,7 +127490,7 @@ class ConcurrencyManager {
|
|
|
127534
127490
|
if (entry.settled)
|
|
127535
127491
|
return;
|
|
127536
127492
|
entry.settled = true;
|
|
127537
|
-
|
|
127493
|
+
resolve35();
|
|
127538
127494
|
},
|
|
127539
127495
|
rawReject: reject,
|
|
127540
127496
|
settled: false
|
|
@@ -132254,10 +132210,10 @@ The task was re-queued on a fallback model after a retryable failure.
|
|
|
132254
132210
|
return this.scheduledFlushSettledCounts.get(sessionID) ?? 0;
|
|
132255
132211
|
}
|
|
132256
132212
|
awaitScheduledFlush(sessionID, sinceCount) {
|
|
132257
|
-
return new Promise((
|
|
132213
|
+
return new Promise((resolve35) => {
|
|
132258
132214
|
const arm = () => {
|
|
132259
132215
|
if ((this.scheduledFlushSettledCounts.get(sessionID) ?? 0) > sinceCount) {
|
|
132260
|
-
|
|
132216
|
+
resolve35();
|
|
132261
132217
|
return;
|
|
132262
132218
|
}
|
|
132263
132219
|
const waiters = this.scheduledFlushSettledWaiters.get(sessionID) ?? [];
|
|
@@ -133364,8 +133320,8 @@ function spawnMonitoredProcess(opts, deps) {
|
|
|
133364
133320
|
let watchdogTimer;
|
|
133365
133321
|
let graceTimer;
|
|
133366
133322
|
let resolvePublicExit = () => {};
|
|
133367
|
-
const publicExit = new Promise((
|
|
133368
|
-
resolvePublicExit =
|
|
133323
|
+
const publicExit = new Promise((resolve35) => {
|
|
133324
|
+
resolvePublicExit = resolve35;
|
|
133369
133325
|
});
|
|
133370
133326
|
function clearWatchdog() {
|
|
133371
133327
|
if (watchdogTimer !== undefined) {
|
|
@@ -133855,9 +133811,9 @@ import { basename as basename22, dirname as dirname41, join as join124 } from "p
|
|
|
133855
133811
|
// packages/mcp-client-core/src/config-dir.ts
|
|
133856
133812
|
import { existsSync as existsSync102, realpathSync as realpathSync18 } from "fs";
|
|
133857
133813
|
import { homedir as homedir30 } from "os";
|
|
133858
|
-
import { join as join122, resolve as
|
|
133814
|
+
import { join as join122, resolve as resolve35 } from "path";
|
|
133859
133815
|
function resolveConfigPath4(pathValue) {
|
|
133860
|
-
const resolvedPath =
|
|
133816
|
+
const resolvedPath = resolve35(pathValue);
|
|
133861
133817
|
if (!existsSync102(resolvedPath))
|
|
133862
133818
|
return resolvedPath;
|
|
133863
133819
|
try {
|
|
@@ -134253,7 +134209,7 @@ function buildAuthorizationUrl(authorizationEndpoint, options) {
|
|
|
134253
134209
|
}
|
|
134254
134210
|
var CALLBACK_TIMEOUT_MS = 5 * 60 * 1000;
|
|
134255
134211
|
function startCallbackServer(port) {
|
|
134256
|
-
return new Promise((
|
|
134212
|
+
return new Promise((resolve36, reject) => {
|
|
134257
134213
|
let timeoutId;
|
|
134258
134214
|
const server2 = createServer2((request, response) => {
|
|
134259
134215
|
clearTimeout(timeoutId);
|
|
@@ -134279,7 +134235,7 @@ function startCallbackServer(port) {
|
|
|
134279
134235
|
response.writeHead(200, { "content-type": "text/html" });
|
|
134280
134236
|
response.end("<html><body><h1>Authorization successful. You can close this tab.</h1></body></html>");
|
|
134281
134237
|
server2.close();
|
|
134282
|
-
|
|
134238
|
+
resolve36({ code, state: state3 });
|
|
134283
134239
|
});
|
|
134284
134240
|
timeoutId = setTimeout(() => {
|
|
134285
134241
|
server2.close();
|
|
@@ -136054,7 +136010,7 @@ class Protocol {
|
|
|
136054
136010
|
return;
|
|
136055
136011
|
}
|
|
136056
136012
|
const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1000;
|
|
136057
|
-
await new Promise((
|
|
136013
|
+
await new Promise((resolve36) => setTimeout(resolve36, pollInterval));
|
|
136058
136014
|
options?.signal?.throwIfAborted();
|
|
136059
136015
|
}
|
|
136060
136016
|
} catch (error) {
|
|
@@ -136066,7 +136022,7 @@ class Protocol {
|
|
|
136066
136022
|
}
|
|
136067
136023
|
request(request, resultSchema, options) {
|
|
136068
136024
|
const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {};
|
|
136069
|
-
return new Promise((
|
|
136025
|
+
return new Promise((resolve36, reject) => {
|
|
136070
136026
|
const earlyReject = (error) => {
|
|
136071
136027
|
reject(error);
|
|
136072
136028
|
};
|
|
@@ -136144,7 +136100,7 @@ class Protocol {
|
|
|
136144
136100
|
if (!parseResult.success) {
|
|
136145
136101
|
reject(parseResult.error);
|
|
136146
136102
|
} else {
|
|
136147
|
-
|
|
136103
|
+
resolve36(parseResult.data);
|
|
136148
136104
|
}
|
|
136149
136105
|
} catch (error) {
|
|
136150
136106
|
reject(error);
|
|
@@ -136335,12 +136291,12 @@ class Protocol {
|
|
|
136335
136291
|
interval = task.pollInterval;
|
|
136336
136292
|
}
|
|
136337
136293
|
} catch {}
|
|
136338
|
-
return new Promise((
|
|
136294
|
+
return new Promise((resolve36, reject) => {
|
|
136339
136295
|
if (signal.aborted) {
|
|
136340
136296
|
reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
|
|
136341
136297
|
return;
|
|
136342
136298
|
}
|
|
136343
|
-
const timeoutId = setTimeout(
|
|
136299
|
+
const timeoutId = setTimeout(resolve36, interval);
|
|
136344
136300
|
signal.addEventListener("abort", () => {
|
|
136345
136301
|
clearTimeout(timeoutId);
|
|
136346
136302
|
reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
|
|
@@ -138869,7 +138825,7 @@ class StdioClientTransport {
|
|
|
138869
138825
|
if (this._process) {
|
|
138870
138826
|
throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");
|
|
138871
138827
|
}
|
|
138872
|
-
return new Promise((
|
|
138828
|
+
return new Promise((resolve36, reject) => {
|
|
138873
138829
|
this._process = import_cross_spawn2.default(this._serverParams.command, this._serverParams.args ?? [], {
|
|
138874
138830
|
env: {
|
|
138875
138831
|
...getDefaultEnvironment(),
|
|
@@ -138885,7 +138841,7 @@ class StdioClientTransport {
|
|
|
138885
138841
|
this.onerror?.(error);
|
|
138886
138842
|
});
|
|
138887
138843
|
this._process.on("spawn", () => {
|
|
138888
|
-
|
|
138844
|
+
resolve36();
|
|
138889
138845
|
});
|
|
138890
138846
|
this._process.on("close", (_code) => {
|
|
138891
138847
|
this._process = undefined;
|
|
@@ -138932,20 +138888,20 @@ class StdioClientTransport {
|
|
|
138932
138888
|
if (this._process) {
|
|
138933
138889
|
const processToClose = this._process;
|
|
138934
138890
|
this._process = undefined;
|
|
138935
|
-
const closePromise = new Promise((
|
|
138891
|
+
const closePromise = new Promise((resolve36) => {
|
|
138936
138892
|
processToClose.once("close", () => {
|
|
138937
|
-
|
|
138893
|
+
resolve36();
|
|
138938
138894
|
});
|
|
138939
138895
|
});
|
|
138940
138896
|
try {
|
|
138941
138897
|
processToClose.stdin?.end();
|
|
138942
138898
|
} catch {}
|
|
138943
|
-
await Promise.race([closePromise, new Promise((
|
|
138899
|
+
await Promise.race([closePromise, new Promise((resolve36) => setTimeout(resolve36, 2000).unref())]);
|
|
138944
138900
|
if (processToClose.exitCode === null) {
|
|
138945
138901
|
try {
|
|
138946
138902
|
processToClose.kill("SIGTERM");
|
|
138947
138903
|
} catch {}
|
|
138948
|
-
await Promise.race([closePromise, new Promise((
|
|
138904
|
+
await Promise.race([closePromise, new Promise((resolve36) => setTimeout(resolve36, 2000).unref())]);
|
|
138949
138905
|
}
|
|
138950
138906
|
if (processToClose.exitCode === null) {
|
|
138951
138907
|
try {
|
|
@@ -138956,15 +138912,15 @@ class StdioClientTransport {
|
|
|
138956
138912
|
this._readBuffer.clear();
|
|
138957
138913
|
}
|
|
138958
138914
|
send(message) {
|
|
138959
|
-
return new Promise((
|
|
138915
|
+
return new Promise((resolve36) => {
|
|
138960
138916
|
if (!this._process?.stdin) {
|
|
138961
138917
|
throw new Error("Not connected");
|
|
138962
138918
|
}
|
|
138963
138919
|
const json = serializeMessage(message);
|
|
138964
138920
|
if (this._process.stdin.write(json)) {
|
|
138965
|
-
|
|
138921
|
+
resolve36();
|
|
138966
138922
|
} else {
|
|
138967
|
-
this._process.stdin.once("drain",
|
|
138923
|
+
this._process.stdin.once("drain", resolve36);
|
|
138968
138924
|
}
|
|
138969
138925
|
});
|
|
138970
138926
|
}
|
|
@@ -139427,7 +139383,7 @@ import { dirname as dirname42 } from "path";
|
|
|
139427
139383
|
import { createHash as createHash8 } from "crypto";
|
|
139428
139384
|
import { realpathSync as realpathSync19 } from "fs";
|
|
139429
139385
|
import { homedir as homedir31 } from "os";
|
|
139430
|
-
import { join as join125, resolve as
|
|
139386
|
+
import { join as join125, resolve as resolve36 } from "path";
|
|
139431
139387
|
function mirrorStorageDir() {
|
|
139432
139388
|
return join125(process.env.XDG_DATA_HOME ?? join125(homedir31(), ".local", "share"), "opencode", "storage", "oh-my-openagent", MIRROR_DIR_NAME);
|
|
139433
139389
|
}
|
|
@@ -139436,7 +139392,7 @@ function canonicalProjectDir(projectDir) {
|
|
|
139436
139392
|
return realpathSync19.native(projectDir);
|
|
139437
139393
|
} catch (error) {
|
|
139438
139394
|
if (error instanceof Error) {
|
|
139439
|
-
return
|
|
139395
|
+
return resolve36(projectDir);
|
|
139440
139396
|
}
|
|
139441
139397
|
throw error;
|
|
139442
139398
|
}
|
|
@@ -140711,8 +140667,8 @@ async function waitForSessionReady(params) {
|
|
|
140711
140667
|
} catch (error) {
|
|
140712
140668
|
log2("[tmux-session-manager] session status check error", { error: String(error) });
|
|
140713
140669
|
}
|
|
140714
|
-
await new Promise((
|
|
140715
|
-
setTimeout(
|
|
140670
|
+
await new Promise((resolve37) => {
|
|
140671
|
+
setTimeout(resolve37, SESSION_READY_POLL_INTERVAL_MS);
|
|
140716
140672
|
});
|
|
140717
140673
|
}
|
|
140718
140674
|
log2("[tmux-session-manager] session ready timeout", {
|
|
@@ -142831,7 +142787,7 @@ function markReplyListenerStopped(state3, error) {
|
|
|
142831
142787
|
|
|
142832
142788
|
// packages/openclaw-core/src/reply-listener-sleep.ts
|
|
142833
142789
|
function sleep3(ms) {
|
|
142834
|
-
return new Promise((
|
|
142790
|
+
return new Promise((resolve37) => setTimeout(resolve37, ms));
|
|
142835
142791
|
}
|
|
142836
142792
|
|
|
142837
142793
|
// packages/openclaw-core/src/reply-listener-signature.ts
|
|
@@ -143474,11 +143430,11 @@ async function createRuntimeSkillSourceServer(options, runtimeEnv = runtime6) {
|
|
|
143474
143430
|
response.end(error instanceof Error ? error.message : String(error));
|
|
143475
143431
|
}
|
|
143476
143432
|
});
|
|
143477
|
-
await new Promise((
|
|
143433
|
+
await new Promise((resolve37, reject) => {
|
|
143478
143434
|
const onError = (error) => reject(error);
|
|
143479
143435
|
const onListening = () => {
|
|
143480
143436
|
server3.off("error", onError);
|
|
143481
|
-
|
|
143437
|
+
resolve37();
|
|
143482
143438
|
};
|
|
143483
143439
|
server3.once("error", onError);
|
|
143484
143440
|
server3.once("listening", onListening);
|
|
@@ -148718,7 +148674,6 @@ call_omo_agent(subagent_type="librarian", prompt="I'm implementing [technology]
|
|
|
148718
148674
|
**Questions to Ask** (AFTER exploration):
|
|
148719
148675
|
1. Found pattern X in codebase. Should new code follow this, or deviate? Why?
|
|
148720
148676
|
2. What should explicitly NOT be built? (scope boundaries)
|
|
148721
|
-
3. What's the minimum viable version vs full vision?
|
|
148722
148677
|
|
|
148723
148678
|
**Directives for Prometheus**:
|
|
148724
148679
|
- MUST: Follow patterns from \`[discovered file:lines]\`
|
|
@@ -148805,7 +148760,6 @@ Task(
|
|
|
148805
148760
|
**Directives for Prometheus**:
|
|
148806
148761
|
- MUST: Consult Oracle before finalizing plan
|
|
148807
148762
|
- MUST: Document architectural decisions with rationale
|
|
148808
|
-
- MUST: Define "minimum viable architecture"
|
|
148809
148763
|
- MUST NOT: Introduce complexity without justification
|
|
148810
148764
|
|
|
148811
148765
|
---
|
|
@@ -148949,13 +148903,13 @@ If the type is genuinely ambiguous between two of these, ask before proceeding;
|
|
|
148949
148903
|
|
|
148950
148904
|
**Refactoring** \u2014 protect behavior. Recommend the tools that make changes safe: \`lsp_find_references\` to map usages, \`lsp_rename\` / \`lsp_prepare_rename\` for safe renames, and the \`ast-grep\` skill or \`sg --pattern '...' --rewrite '...' --lang ts\` to preview structural transforms. Ask what behavior must be preserved and with which test command, what the rollback is, and whether the change propagates or stays isolated. Direct Prometheus to define pre-refactor verification (exact commands and expected outputs), verify after each change rather than only at the end, never change behavior while restructuring, and never touch adjacent out-of-scope code.
|
|
148951
148905
|
|
|
148952
|
-
**Build from scratch** \u2014 discover before asking. Fire explore/librarian first to learn the codebase's patterns and the library's best practices, then ask only what the code could not answer: follow the found pattern or deviate; what must explicitly NOT be built
|
|
148906
|
+
**Build from scratch** \u2014 discover before asking. Fire explore/librarian first to learn the codebase's patterns and the library's best practices, then ask only what the code could not answer: follow the found pattern or deviate; what must explicitly NOT be built. Direct Prometheus to follow the discovered patterns by \`file:lines\`, define a "Must NOT Have" section against over-engineering, and add nothing unrequested.
|
|
148953
148907
|
|
|
148954
148908
|
**Mid-sized task** \u2014 define exact boundaries; this is where AI slop creeps in. Ask for the exact outputs (files, endpoints, UI), the explicit exclusions, the hard boundaries, and the done-criteria. Turn the slop patterns into questions: scope inflation ("tests for adjacent modules too?"), premature abstraction ("abstraction or inline?"), over-validation ("minimal or comprehensive error handling?"), documentation bloat ("how much documentation?"). Direct Prometheus to write Must-Have and Must-NOT-Have sections with per-task guardrails.
|
|
148955
148909
|
|
|
148956
148910
|
**Collaborative** \u2014 build understanding through dialogue, no rush. Start from the problem, not the proposed solution; gather context with explore/librarian as the user gives direction; refine incrementally; do not finalize until the user confirms. Ask what problem they are solving, what constraints exist, and what tradeoffs are acceptable. Direct Prometheus to record every decision and flag every assumption.
|
|
148957
148911
|
|
|
148958
|
-
**Architecture** \u2014 strategic and long-term. Recommend Prometheus consult Oracle with the request and the gathered context for options, tradeoffs, and risks. Ask the expected lifespan, the scale and load, the non-negotiable constraints, and the systems it must integrate with. Guard against over-engineering for hypothetical futures and unnecessary abstraction layers; direct Prometheus to document decisions with rationale
|
|
148912
|
+
**Architecture** \u2014 strategic and long-term. Recommend Prometheus consult Oracle with the request and the gathered context for options, tradeoffs, and risks. Ask the expected lifespan, the scale and load, the non-negotiable constraints, and the systems it must integrate with. Guard against over-engineering for hypothetical futures and unnecessary abstraction layers; direct Prometheus to document decisions with rationale.
|
|
148959
148913
|
|
|
148960
148914
|
**Research** \u2014 bound the investigation. Ask the decision the research informs, the exit criteria, the time box, and the expected output. Structure parallel probes via explore/librarian. Direct Prometheus to define clear exit criteria, parallel tracks, and a synthesis format, and never to research without convergence.
|
|
148961
148915
|
|
|
@@ -150698,7 +150652,7 @@ createHephaestusAgent.mode = MODE9;
|
|
|
150698
150652
|
// packages/omo-opencode/src/agents/builtin-agents/resolve-file-uri.ts
|
|
150699
150653
|
import { existsSync as existsSync111, readFileSync as readFileSync77 } from "fs";
|
|
150700
150654
|
import { homedir as homedir34 } from "os";
|
|
150701
|
-
import { isAbsolute as
|
|
150655
|
+
import { isAbsolute as isAbsolute19, join as join131, resolve as resolve37 } from "path";
|
|
150702
150656
|
init_logger2();
|
|
150703
150657
|
var ALLOWED_HOME_SUBDIRS = [
|
|
150704
150658
|
join131(homedir34(), ".config", "opencode"),
|
|
@@ -150723,7 +150677,7 @@ function resolvePromptAppend(promptAppend, configDir) {
|
|
|
150723
150677
|
try {
|
|
150724
150678
|
const decoded = decodeURIComponent(encoded);
|
|
150725
150679
|
const expanded = decoded.startsWith("~/") ? decoded.replace(/^~\//, `${homedir34()}/`) : decoded;
|
|
150726
|
-
filePath =
|
|
150680
|
+
filePath = isAbsolute19(expanded) ? expanded : resolve37(configDir ?? process.cwd(), expanded);
|
|
150727
150681
|
} catch (error) {
|
|
150728
150682
|
if (!(error instanceof Error)) {
|
|
150729
150683
|
throw error;
|
|
@@ -153810,7 +153764,7 @@ function createCodegraphMcpConfig(options = {}) {
|
|
|
153810
153764
|
|
|
153811
153765
|
// packages/omo-opencode/src/mcp/lsp.ts
|
|
153812
153766
|
import { existsSync as existsSync113 } from "fs";
|
|
153813
|
-
import { delimiter as delimiter2, dirname as dirname45, resolve as
|
|
153767
|
+
import { delimiter as delimiter2, dirname as dirname45, resolve as resolve39 } from "path";
|
|
153814
153768
|
import { fileURLToPath as fileURLToPath8 } from "url";
|
|
153815
153769
|
|
|
153816
153770
|
// packages/omo-opencode/src/mcp/cli-suffix.ts
|
|
@@ -153822,7 +153776,7 @@ function hasCliSuffix(candidatePath, suffix) {
|
|
|
153822
153776
|
}
|
|
153823
153777
|
|
|
153824
153778
|
// packages/omo-opencode/src/mcp/shared/ancestor-cli-resolver.ts
|
|
153825
|
-
import { resolve as
|
|
153779
|
+
import { resolve as resolve38 } from "path";
|
|
153826
153780
|
function resolveJavaScriptRuntime(resolveExecutable) {
|
|
153827
153781
|
const node = resolveExecutable("node");
|
|
153828
153782
|
return node.available ? node : resolveExecutable("bun");
|
|
@@ -153830,9 +153784,9 @@ function resolveJavaScriptRuntime(resolveExecutable) {
|
|
|
153830
153784
|
function createAncestorCliCandidates(options) {
|
|
153831
153785
|
const candidates = [];
|
|
153832
153786
|
const seenPaths = new Set;
|
|
153833
|
-
let currentDirectory =
|
|
153787
|
+
let currentDirectory = resolve38(options.startDirectory);
|
|
153834
153788
|
while (true) {
|
|
153835
|
-
const distCliPath =
|
|
153789
|
+
const distCliPath = resolve38(currentDirectory, options.packageRel, options.distCliRel);
|
|
153836
153790
|
if (!seenPaths.has(distCliPath)) {
|
|
153837
153791
|
const runtime7 = resolveJavaScriptRuntime(options.resolveExecutable);
|
|
153838
153792
|
seenPaths.add(distCliPath);
|
|
@@ -153844,7 +153798,7 @@ function createAncestorCliCandidates(options) {
|
|
|
153844
153798
|
runtimeAvailable: runtime7.available
|
|
153845
153799
|
});
|
|
153846
153800
|
}
|
|
153847
|
-
const sourceCliPath =
|
|
153801
|
+
const sourceCliPath = resolve38(currentDirectory, options.packageRel, options.sourceCliRel);
|
|
153848
153802
|
if (!seenPaths.has(sourceCliPath)) {
|
|
153849
153803
|
const runtime7 = options.resolveExecutable("bun");
|
|
153850
153804
|
const sourceCandidateAvailable = options.isSourceCandidateAvailable?.({
|
|
@@ -153861,7 +153815,7 @@ function createAncestorCliCandidates(options) {
|
|
|
153861
153815
|
runtimeAvailable: runtime7.available
|
|
153862
153816
|
});
|
|
153863
153817
|
}
|
|
153864
|
-
const parentDirectory =
|
|
153818
|
+
const parentDirectory = resolve38(currentDirectory, "..");
|
|
153865
153819
|
if (parentDirectory === currentDirectory)
|
|
153866
153820
|
return candidates;
|
|
153867
153821
|
currentDirectory = parentDirectory;
|
|
@@ -153905,17 +153859,17 @@ function getModuleDirectory(moduleUrl) {
|
|
|
153905
153859
|
}
|
|
153906
153860
|
}
|
|
153907
153861
|
function findBootstrapRoot(candidates, pathExists) {
|
|
153908
|
-
return candidates.find((candidate) => pathExists(
|
|
153862
|
+
return candidates.find((candidate) => pathExists(resolve39(candidate.root, "package.json")))?.root ?? process.cwd();
|
|
153909
153863
|
}
|
|
153910
153864
|
function createBootstrapCandidate(root, pathExists, resolveExecutable) {
|
|
153911
153865
|
const runtime7 = resolveJavaScriptRuntime(resolveExecutable);
|
|
153912
153866
|
const bun = resolveExecutable("bun");
|
|
153913
153867
|
const npm = resolveExecutable("npm");
|
|
153914
|
-
const packageManifestPath =
|
|
153868
|
+
const packageManifestPath = resolve39(root, PACKAGE_REL, "package.json");
|
|
153915
153869
|
return {
|
|
153916
153870
|
command: [runtime7.command, "-e", LSP_BOOTSTRAP_SCRIPT, root, npm.command, bun.command],
|
|
153917
153871
|
root,
|
|
153918
|
-
path:
|
|
153872
|
+
path: resolve39(root, PACKAGE_REL, DIST_CLI_REL),
|
|
153919
153873
|
exists: runtime7.available && npm.available && pathExists(packageManifestPath),
|
|
153920
153874
|
runtimeAvailable: runtime7.available
|
|
153921
153875
|
};
|
|
@@ -153931,7 +153885,7 @@ function resolveLspCommand(options = {}) {
|
|
|
153931
153885
|
sourceCliRel: SOURCE_CLI_REL,
|
|
153932
153886
|
pathExists,
|
|
153933
153887
|
resolveExecutable,
|
|
153934
|
-
isSourceCandidateAvailable: ({ root }) => pathExists(
|
|
153888
|
+
isSourceCandidateAvailable: ({ root }) => pathExists(resolve39(root, LSP_TOOLS_PACKAGE_REL, DIST_CLI_REL))
|
|
153935
153889
|
}) : [];
|
|
153936
153890
|
const distCandidate = candidates.find((candidate) => hasCliSuffix(candidate.path, DIST_CLI_REL) && candidate.exists);
|
|
153937
153891
|
if (distCandidate) {
|
|
@@ -154561,7 +154515,7 @@ function createTeamModeToolsRecord(args) {
|
|
|
154561
154515
|
// node_modules/.bun/@opencode-ai+sdk@1.15.13/node_modules/@opencode-ai/sdk/dist/v2/gen/core/serverSentEvents.gen.js
|
|
154562
154516
|
var createSseClient2 = ({ onRequest, onSseError, onSseEvent, responseTransformer, responseValidator, sseDefaultRetryDelay, sseMaxRetryAttempts, sseMaxRetryDelay, sseSleepFn, url: url2, ...options }) => {
|
|
154563
154517
|
let lastEventId;
|
|
154564
|
-
const sleep4 = sseSleepFn ?? ((ms) => new Promise((
|
|
154518
|
+
const sleep4 = sseSleepFn ?? ((ms) => new Promise((resolve40) => setTimeout(resolve40, ms)));
|
|
154565
154519
|
const createStream = async function* () {
|
|
154566
154520
|
let retryDelay = sseDefaultRetryDelay ?? 3000;
|
|
154567
154521
|
let attempt = 0;
|
|
@@ -158110,7 +158064,7 @@ async function readRuntimeHostSkills(client5) {
|
|
|
158110
158064
|
function createRuntimeSkillsResolver(args) {
|
|
158111
158065
|
const { baseSkills, readRuntimeHostSkills: readHostSkills, buildMergedSkills } = args;
|
|
158112
158066
|
let inflight;
|
|
158113
|
-
const
|
|
158067
|
+
const resolve40 = async () => {
|
|
158114
158068
|
const hostSkills = await readHostSkills();
|
|
158115
158069
|
if (!hostSkills)
|
|
158116
158070
|
return baseSkills;
|
|
@@ -158122,7 +158076,7 @@ function createRuntimeSkillsResolver(args) {
|
|
|
158122
158076
|
};
|
|
158123
158077
|
return () => {
|
|
158124
158078
|
if (!inflight)
|
|
158125
|
-
inflight =
|
|
158079
|
+
inflight = resolve40();
|
|
158126
158080
|
return inflight;
|
|
158127
158081
|
};
|
|
158128
158082
|
}
|
|
@@ -158962,7 +158916,7 @@ async function waitForTaskSessionId(bgMgr, task, deadlineAt) {
|
|
|
158962
158916
|
}
|
|
158963
158917
|
sessionId = updatedTask?.sessionId;
|
|
158964
158918
|
if (!sessionId)
|
|
158965
|
-
await new Promise((
|
|
158919
|
+
await new Promise((resolve40) => setTimeout(resolve40, SESSION_ID_POLL_MS));
|
|
158966
158920
|
}
|
|
158967
158921
|
return sessionId;
|
|
158968
158922
|
}
|
|
@@ -160450,13 +160404,13 @@ function logCaughtDbError(message, metadata, error) {
|
|
|
160450
160404
|
log2(message, { ...metadata, error: String(error) });
|
|
160451
160405
|
}
|
|
160452
160406
|
function nextMicrotask() {
|
|
160453
|
-
return new Promise((
|
|
160454
|
-
queueMicrotask(
|
|
160407
|
+
return new Promise((resolve40) => {
|
|
160408
|
+
queueMicrotask(resolve40);
|
|
160455
160409
|
});
|
|
160456
160410
|
}
|
|
160457
160411
|
function nextTimerTick() {
|
|
160458
|
-
return new Promise((
|
|
160459
|
-
setTimeout(
|
|
160412
|
+
return new Promise((resolve40) => {
|
|
160413
|
+
setTimeout(resolve40, 0);
|
|
160460
160414
|
});
|
|
160461
160415
|
}
|
|
160462
160416
|
function closeDbWithLog(db, message, metadata) {
|
|
@@ -164336,7 +164290,7 @@ function getTelemetryDistinctId(machineIdPrefix, osProvider = getDefaultTelemetr
|
|
|
164336
164290
|
}
|
|
164337
164291
|
|
|
164338
164292
|
// node_modules/.bun/posthog-node@5.35.12/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
|
|
164339
|
-
import { dirname as dirname47, posix as
|
|
164293
|
+
import { dirname as dirname47, posix as posix7, sep as sep3 } from "path";
|
|
164340
164294
|
function createModulerModifier() {
|
|
164341
164295
|
const getModuleFromFileName = createGetModuleFromFilename();
|
|
164342
164296
|
return async (frames) => {
|
|
@@ -164351,7 +164305,7 @@ function createGetModuleFromFilename(basePath = process.argv[1] ? dirname47(proc
|
|
|
164351
164305
|
if (!filename)
|
|
164352
164306
|
return;
|
|
164353
164307
|
const normalizedFilename = isWindows2 ? normalizeWindowsPath(filename) : filename;
|
|
164354
|
-
let { dir, base: file2, ext } =
|
|
164308
|
+
let { dir, base: file2, ext } = posix7.parse(normalizedFilename);
|
|
164355
164309
|
if (ext === ".js" || ext === ".mjs" || ext === ".cjs")
|
|
164356
164310
|
file2 = file2.slice(0, -1 * ext.length);
|
|
164357
164311
|
const decodedFile = decodeURIComponent(file2);
|
|
@@ -167032,14 +166986,14 @@ async function addSourceContext(frames) {
|
|
|
167032
166986
|
return frames;
|
|
167033
166987
|
}
|
|
167034
166988
|
function getContextLinesFromFile(path28, ranges, output) {
|
|
167035
|
-
return new Promise((
|
|
166989
|
+
return new Promise((resolve40) => {
|
|
167036
166990
|
const stream = createReadStream(path28);
|
|
167037
166991
|
const lineReaded = createInterface({
|
|
167038
166992
|
input: stream
|
|
167039
166993
|
});
|
|
167040
166994
|
function destroyStreamAndResolve() {
|
|
167041
166995
|
stream.destroy();
|
|
167042
|
-
|
|
166996
|
+
resolve40();
|
|
167043
166997
|
}
|
|
167044
166998
|
let lineNumber = 0;
|
|
167045
166999
|
let currentRangeIndex = 0;
|
|
@@ -167207,7 +167161,7 @@ function snipLine(line, colno) {
|
|
|
167207
167161
|
}
|
|
167208
167162
|
|
|
167209
167163
|
// node_modules/.bun/posthog-node@5.35.12/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/relative-path.node.mjs
|
|
167210
|
-
import { isAbsolute as
|
|
167164
|
+
import { isAbsolute as isAbsolute20, relative as relative15, sep as sep4 } from "path";
|
|
167211
167165
|
function createRelativePathModifier(basePath = process.cwd()) {
|
|
167212
167166
|
const isWindows2 = sep4 === "\\";
|
|
167213
167167
|
const toUnix = (p) => isWindows2 ? p.replace(/\\/g, "/") : p;
|
|
@@ -167215,8 +167169,8 @@ function createRelativePathModifier(basePath = process.cwd()) {
|
|
|
167215
167169
|
return async (frames) => {
|
|
167216
167170
|
for (const frame of frames)
|
|
167217
167171
|
if (!(!frame.filename || frame.filename.startsWith("node:") || frame.filename.startsWith("data:"))) {
|
|
167218
|
-
if (
|
|
167219
|
-
frame.filename = toUnix(
|
|
167172
|
+
if (isAbsolute20(frame.filename))
|
|
167173
|
+
frame.filename = toUnix(relative15(normalizedBase, toUnix(frame.filename)));
|
|
167220
167174
|
}
|
|
167221
167175
|
return frames;
|
|
167222
167176
|
};
|
|
@@ -168490,9 +168444,9 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
168490
168444
|
if (this.disabled || this.optedOut)
|
|
168491
168445
|
return;
|
|
168492
168446
|
if (!this._waitUntilCycle) {
|
|
168493
|
-
let
|
|
168447
|
+
let resolve40;
|
|
168494
168448
|
const promise2 = new Promise((r) => {
|
|
168495
|
-
|
|
168449
|
+
resolve40 = r;
|
|
168496
168450
|
});
|
|
168497
168451
|
try {
|
|
168498
168452
|
waitUntil(promise2);
|
|
@@ -168500,7 +168454,7 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
168500
168454
|
return;
|
|
168501
168455
|
}
|
|
168502
168456
|
this._waitUntilCycle = {
|
|
168503
|
-
resolve:
|
|
168457
|
+
resolve: resolve40,
|
|
168504
168458
|
startedAt: Date.now(),
|
|
168505
168459
|
timer: undefined
|
|
168506
168460
|
};
|
|
@@ -168526,11 +168480,11 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
168526
168480
|
return cycle?.resolve;
|
|
168527
168481
|
}
|
|
168528
168482
|
async resolveWaitUntilFlush() {
|
|
168529
|
-
const
|
|
168483
|
+
const resolve40 = this._consumeWaitUntilCycle();
|
|
168530
168484
|
try {
|
|
168531
168485
|
await super.flush();
|
|
168532
168486
|
} catch {} finally {
|
|
168533
|
-
|
|
168487
|
+
resolve40?.();
|
|
168534
168488
|
}
|
|
168535
168489
|
}
|
|
168536
168490
|
getPersistedProperty(key) {
|
|
@@ -168630,15 +168584,15 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
168630
168584
|
return true;
|
|
168631
168585
|
if (this.featureFlagsPoller === undefined)
|
|
168632
168586
|
return false;
|
|
168633
|
-
return new Promise((
|
|
168587
|
+
return new Promise((resolve40) => {
|
|
168634
168588
|
const timeout = setTimeout(() => {
|
|
168635
168589
|
cleanup();
|
|
168636
|
-
|
|
168590
|
+
resolve40(false);
|
|
168637
168591
|
}, timeoutMs);
|
|
168638
168592
|
const cleanup = this._events.on("localEvaluationFlagsLoaded", (count) => {
|
|
168639
168593
|
clearTimeout(timeout);
|
|
168640
168594
|
cleanup();
|
|
168641
|
-
|
|
168595
|
+
resolve40(count > 0);
|
|
168642
168596
|
});
|
|
168643
168597
|
});
|
|
168644
168598
|
}
|
|
@@ -169144,13 +169098,13 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
169144
169098
|
this.context?.enter(data, options);
|
|
169145
169099
|
}
|
|
169146
169100
|
async _shutdown(shutdownTimeoutMs) {
|
|
169147
|
-
const
|
|
169101
|
+
const resolve40 = this._consumeWaitUntilCycle();
|
|
169148
169102
|
await this.featureFlagsPoller?.stopPoller(shutdownTimeoutMs);
|
|
169149
169103
|
this.errorTracking.shutdown();
|
|
169150
169104
|
try {
|
|
169151
169105
|
return await super._shutdown(shutdownTimeoutMs);
|
|
169152
169106
|
} finally {
|
|
169153
|
-
|
|
169107
|
+
resolve40?.();
|
|
169154
169108
|
}
|
|
169155
169109
|
}
|
|
169156
169110
|
async _requestRemoteConfigPayload(flagKey) {
|