oh-my-opencode 5.0.0 → 5.1.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/README.ja.md +41 -376
- package/README.ko.md +45 -376
- package/README.md +39 -376
- package/README.ru.md +50 -368
- package/README.zh-cn.md +50 -371
- package/dist/cli/index.js +242 -150
- package/dist/cli-node/index.js +242 -150
- package/dist/features/background-agent/parent-wake-dedupe.d.ts +1 -0
- package/dist/features/boulder-state/storage.d.ts +1 -1
- package/dist/hooks/comment-checker/downloader.d.ts +3 -1
- package/dist/index.js +2367 -2152
- package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
- package/dist/skills/coding-agent-sessions/SKILL.md +1 -1
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
- package/dist/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
- package/dist/tui.js +76 -43
- package/package.json +29 -18
- package/packages/lsp-core/src/lsp/fixtures/workspace-edit-server.mjs +3 -0
- package/packages/lsp-core/src/lsp/workspace-apply-edit-lease.integration.test.ts +7 -3
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +26 -3
- 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/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/.omo-runtime-manifest.json +2 -2
- 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/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- 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/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- 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/ulw-execute-continuation/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/dist/cli.js +42 -32
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/src/plan-checklist.ts +55 -29
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/test/boulder-reader.test.ts +51 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- 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-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/post-tool-use-recording-spawn-admission.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-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-ulw-execute-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-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 +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
- package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +0 -1
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +37 -14
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
|
@@ -66,7 +66,7 @@ The finder prints JSON for stdout and `jq`. Every result includes:
|
|
|
66
66
|
| `detail_hint` | Ready-to-run `read` command for detailed inspection |
|
|
67
67
|
| `match_reasons` | Search-only array explaining which field/content matched each query |
|
|
68
68
|
|
|
69
|
-
Each `match_reasons` entry includes `query`, `platform`, `field`, and `snippet`, so you can tell which platform matched and what content caused the hit without opening every transcript.
|
|
69
|
+
Each `match_reasons` entry includes `query`, `platform`, `field`, and `snippet`, so you can tell which platform matched and what content caused the hit without opening every transcript. `field` is `user_message` when the query matched a user prompt that the `first_user_message`/`last_user_message` previews do not cover, such as a prompt in the middle of the session.
|
|
70
70
|
|
|
71
71
|
## Filters
|
|
72
72
|
|
|
@@ -93,6 +93,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
|
|
|
93
93
|
sid = _dir_session_id(path.parent.name)
|
|
94
94
|
row = index.get(sid)
|
|
95
95
|
first_user = last_user = ""
|
|
96
|
+
prompts: list[str] = []
|
|
96
97
|
provider = model = None
|
|
97
98
|
created = updated = None
|
|
98
99
|
usage: JsonMap = {}
|
|
@@ -107,6 +108,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
|
|
|
107
108
|
if prompt:
|
|
108
109
|
first_user = first_user or prompt
|
|
109
110
|
last_user = prompt
|
|
111
|
+
prompts.append(prompt)
|
|
110
112
|
elif role == "assistant":
|
|
111
113
|
provider = provider or text(data.get("provider"))
|
|
112
114
|
model = model or text(data.get("model"))
|
|
@@ -125,6 +127,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
|
|
|
125
127
|
row.parent_id if row is not None else None,
|
|
126
128
|
row.title if row is not None and row.parent_id is not None else None,
|
|
127
129
|
last_user,
|
|
130
|
+
tuple(prompts),
|
|
128
131
|
)
|
|
129
132
|
|
|
130
133
|
|
|
@@ -226,6 +226,10 @@ def _match_reasons(item: Session, query: str) -> list[JsonMap]:
|
|
|
226
226
|
for field, value in _search_fields(item):
|
|
227
227
|
if needle in value.lower():
|
|
228
228
|
reasons.append({"query": query, "platform": item.platform, "field": field, "snippet": _snippet(value, needle)})
|
|
229
|
+
if not reasons:
|
|
230
|
+
prompt = next((message for message in item.user_messages or () if needle in message.lower()), "")
|
|
231
|
+
if prompt:
|
|
232
|
+
reasons.append({"query": query, "platform": item.platform, "field": "user_message", "snippet": _snippet(prompt, needle)})
|
|
229
233
|
return reasons
|
|
230
234
|
|
|
231
235
|
|
|
@@ -80,6 +80,7 @@ def scan_aider(extra_roots: tuple[Path, ...], workers: int) -> list[Session]:
|
|
|
80
80
|
def _droid_session(path: Path) -> Session:
|
|
81
81
|
sid = path.stem
|
|
82
82
|
cwd = model = first_user = last_user = None
|
|
83
|
+
prompts: list[str] = []
|
|
83
84
|
created = updated = None
|
|
84
85
|
settings = as_map(read_json(path.with_suffix(".settings.json"))) or {}
|
|
85
86
|
for data in iter_jsonl(path):
|
|
@@ -94,7 +95,8 @@ def _droid_session(path: Path) -> Session:
|
|
|
94
95
|
if prompt:
|
|
95
96
|
first_user = first_user or prompt
|
|
96
97
|
last_user = prompt
|
|
97
|
-
|
|
98
|
+
prompts.append(prompt)
|
|
99
|
+
return Session("droid", sid, str(path), cwd, created or file_time(path), updated or created or file_time(path), None, text(settings.get("model")) or model, first_user or "", _usage(settings), last_user_message=last_user or "", user_messages=tuple(prompts))
|
|
98
100
|
|
|
99
101
|
|
|
100
102
|
def _amp_sessions(path: Path) -> list[Session]:
|
|
@@ -136,6 +138,7 @@ def _gemini_sessions(path: Path) -> list[Session]:
|
|
|
136
138
|
|
|
137
139
|
def _kimi_session(path: Path) -> Session:
|
|
138
140
|
first_user = last_user = ""
|
|
141
|
+
prompts: list[str] = []
|
|
139
142
|
created = updated = None
|
|
140
143
|
for data in iter_jsonl(path):
|
|
141
144
|
stamp = data.get("timestamp")
|
|
@@ -146,7 +149,8 @@ def _kimi_session(path: Path) -> Session:
|
|
|
146
149
|
if prompt:
|
|
147
150
|
first_user = first_user or prompt
|
|
148
151
|
last_user = prompt
|
|
149
|
-
|
|
152
|
+
prompts.append(prompt)
|
|
153
|
+
return Session("kimi", path.parent.name, str(path), None, created or file_time(path), updated or file_time(path), "moonshot", None, first_user, {}, last_user_message=last_user, user_messages=tuple(prompts))
|
|
150
154
|
|
|
151
155
|
|
|
152
156
|
def _codebuff_sessions(path: Path) -> list[Session]:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
4
|
+
from dataclasses import replace
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
from typing import Callable, TypeAlias
|
|
6
7
|
|
|
@@ -95,8 +96,13 @@ def _dedupe(sessions: list[Session]) -> list[Session]:
|
|
|
95
96
|
for session in sessions:
|
|
96
97
|
key = (session.platform, session.id)
|
|
97
98
|
current = found.get(key)
|
|
98
|
-
if current is None
|
|
99
|
+
if current is None:
|
|
99
100
|
found[key] = session
|
|
101
|
+
continue
|
|
102
|
+
winner, twin = (session, current) if _linkage_score(session) > _linkage_score(current) else (current, session)
|
|
103
|
+
if winner.user_messages is None and twin.user_messages is not None:
|
|
104
|
+
winner = replace(winner, user_messages=twin.user_messages)
|
|
105
|
+
found[key] = winner
|
|
100
106
|
return list(found.values())
|
|
101
107
|
|
|
102
108
|
|
|
@@ -39,6 +39,7 @@ def jsonl_session(platform: str, path: Path, fallback_id: str) -> Session:
|
|
|
39
39
|
sid = fallback_id
|
|
40
40
|
cwd = provider = model = first_user = parent = agent = None
|
|
41
41
|
last_user = ""
|
|
42
|
+
prompts: list[str] = []
|
|
42
43
|
created = updated = None
|
|
43
44
|
usage: JsonMap = {}
|
|
44
45
|
for data in iter_jsonl(path):
|
|
@@ -65,8 +66,9 @@ def jsonl_session(platform: str, path: Path, fallback_id: str) -> Session:
|
|
|
65
66
|
if prompt:
|
|
66
67
|
first_user = first_user or prompt
|
|
67
68
|
last_user = prompt
|
|
69
|
+
prompts.append(prompt)
|
|
68
70
|
merge_usage(usage, as_map(message.get("usage")) or as_map(data.get("usage")))
|
|
69
|
-
return Session(platform, sid, str(path), cwd, created or file_time(path), updated or created or file_time(path), provider, model, first_user or "", usage, parent, agent, last_user)
|
|
71
|
+
return Session(platform, sid, str(path), cwd, created or file_time(path), updated or created or file_time(path), provider, model, first_user or "", usage, parent, agent, last_user, tuple(prompts))
|
|
70
72
|
|
|
71
73
|
|
|
72
74
|
def spawn_info(source: Json | None) -> tuple[str | None, str | None]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dataclasses import dataclass
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import TypeAlias
|
|
6
6
|
|
|
@@ -38,6 +38,8 @@ class Session:
|
|
|
38
38
|
parent_id: str | None = None
|
|
39
39
|
agent: str | None = None
|
|
40
40
|
last_user_message: str = ""
|
|
41
|
+
# Every user prompt the scanner already parsed, kept for search only; None when the scanner did not read the whole transcript.
|
|
42
|
+
user_messages: tuple[str, ...] | None = field(default=None, compare=False, repr=False)
|
|
41
43
|
|
|
42
44
|
def to_json(self) -> JsonMap:
|
|
43
45
|
return {
|
|
@@ -16,4 +16,8 @@ sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
if __name__ == "__main__":
|
|
19
|
+
if sys.version_info < (3, 11):
|
|
20
|
+
found = ".".join(str(part) for part in sys.version_info[:3])
|
|
21
|
+
_ = sys.stderr.write(f"find-agent-sessions requires Python 3.11 or newer (found {found}); run it with python3.11+ or `uv run`.\n")
|
|
22
|
+
raise SystemExit(2)
|
|
19
23
|
_ = runpy.run_module("agent_sessions.cli", run_name="__main__")
|
package/dist/tui.js
CHANGED
|
@@ -2911,6 +2911,9 @@ function getActiveReservation(sessionID) {
|
|
|
2911
2911
|
pruneExpiredReservations();
|
|
2912
2912
|
return promptAsyncReservations.get(sessionID);
|
|
2913
2913
|
}
|
|
2914
|
+
function reservedDispatchResult(reservation) {
|
|
2915
|
+
return reservation.expiresAt === undefined ? { status: "reserved", reservedBy: reservation.source } : { status: "reserved", reservedBy: reservation.source, expiresAt: reservation.expiresAt };
|
|
2916
|
+
}
|
|
2914
2917
|
function setPromptReservation(sessionID, reservation) {
|
|
2915
2918
|
promptAsyncReservations.set(sessionID, reservation);
|
|
2916
2919
|
}
|
|
@@ -2960,7 +2963,7 @@ async function dispatchAfterSessionIdle(args) {
|
|
|
2960
2963
|
reservedBy: existing.source,
|
|
2961
2964
|
reservedAgeMs: Date.now() - existing.reservedAt
|
|
2962
2965
|
});
|
|
2963
|
-
return
|
|
2966
|
+
return reservedDispatchResult(existing);
|
|
2964
2967
|
}
|
|
2965
2968
|
const reservation = {
|
|
2966
2969
|
source,
|
|
@@ -3595,11 +3598,6 @@ var init_category_model_requirements = __esm(() => {
|
|
|
3595
3598
|
writing: {
|
|
3596
3599
|
requiresAnyModel: true,
|
|
3597
3600
|
fallbackChain: [
|
|
3598
|
-
{
|
|
3599
|
-
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
3600
|
-
model: "claude-fable-5-1",
|
|
3601
|
-
variant: "low"
|
|
3602
|
-
},
|
|
3603
3601
|
{
|
|
3604
3602
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
3605
3603
|
model: "claude-opus-5-5",
|
|
@@ -3940,8 +3938,17 @@ var init_model_resolver = () => {};
|
|
|
3940
3938
|
// packages/model-core/src/fallback-chain-from-models.ts
|
|
3941
3939
|
var init_fallback_chain_from_models = () => {};
|
|
3942
3940
|
|
|
3941
|
+
// packages/model-core/src/runtime-fallback-auto-retry-signal.ts
|
|
3942
|
+
var init_runtime_fallback_auto_retry_signal = () => {};
|
|
3943
|
+
|
|
3944
|
+
// packages/model-core/src/runtime-fallback-error-shape.ts
|
|
3945
|
+
var init_runtime_fallback_error_shape = () => {};
|
|
3946
|
+
|
|
3947
|
+
// packages/model-core/src/runtime-fallback-error-classifier.ts
|
|
3948
|
+
var init_runtime_fallback_error_classifier = () => {};
|
|
3949
|
+
|
|
3943
3950
|
// packages/model-core/src/model-error-classifier.ts
|
|
3944
|
-
var RETRYABLE_ERROR_NAMES,
|
|
3951
|
+
var RETRYABLE_ERROR_NAMES, NON_RETRYABLE_ERROR_NAMES;
|
|
3945
3952
|
var init_model_error_classifier = __esm(() => {
|
|
3946
3953
|
RETRYABLE_ERROR_NAMES = new Set([
|
|
3947
3954
|
"providermodelnotfounderror",
|
|
@@ -3950,11 +3957,6 @@ var init_model_error_classifier = __esm(() => {
|
|
|
3950
3957
|
"providerconnectionerror",
|
|
3951
3958
|
"authenticationerror"
|
|
3952
3959
|
]);
|
|
3953
|
-
STOP_ERROR_NAMES = new Set([
|
|
3954
|
-
"quotaexceedederror",
|
|
3955
|
-
"insufficientcreditserror",
|
|
3956
|
-
"freeusagelimiterror"
|
|
3957
|
-
]);
|
|
3958
3960
|
NON_RETRYABLE_ERROR_NAMES = new Set([
|
|
3959
3961
|
"messageabortederror",
|
|
3960
3962
|
"permissiondeniederror",
|
|
@@ -3966,15 +3968,6 @@ var init_model_error_classifier = __esm(() => {
|
|
|
3966
3968
|
]);
|
|
3967
3969
|
});
|
|
3968
3970
|
|
|
3969
|
-
// packages/model-core/src/runtime-fallback-auto-retry-signal.ts
|
|
3970
|
-
var init_runtime_fallback_auto_retry_signal = () => {};
|
|
3971
|
-
|
|
3972
|
-
// packages/model-core/src/runtime-fallback-error-shape.ts
|
|
3973
|
-
var init_runtime_fallback_error_shape = () => {};
|
|
3974
|
-
|
|
3975
|
-
// packages/model-core/src/runtime-fallback-error-classifier.ts
|
|
3976
|
-
var init_runtime_fallback_error_classifier = () => {};
|
|
3977
|
-
|
|
3978
3971
|
// packages/model-core/src/provider-exhaustion-fallback-policy.ts
|
|
3979
3972
|
var init_provider_exhaustion_fallback_policy = () => {};
|
|
3980
3973
|
|
|
@@ -5091,7 +5084,7 @@ var init_kimi_categories = __esm(() => {
|
|
|
5091
5084
|
KIMI_CATEGORIES = [
|
|
5092
5085
|
{
|
|
5093
5086
|
name: "writing",
|
|
5094
|
-
config: { model: "anthropic/claude-
|
|
5087
|
+
config: { model: "anthropic/claude-opus-5-5", variant: "low" },
|
|
5095
5088
|
description: "Documentation, prose, technical writing",
|
|
5096
5089
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
5097
5090
|
}
|
|
@@ -69759,6 +69752,29 @@ var init_category = __esm(() => {
|
|
|
69759
69752
|
OmoCategoriesConfigSchema = record(string2(), OmoCategoryConfigSchema);
|
|
69760
69753
|
});
|
|
69761
69754
|
|
|
69755
|
+
// packages/omo-config-core/src/schema/computer.ts
|
|
69756
|
+
var positiveInteger, nonNegativeInteger, OmoComputerSettingsLayerSchema, OmoComputerSettingsSchema;
|
|
69757
|
+
var init_computer = __esm(() => {
|
|
69758
|
+
init_zod();
|
|
69759
|
+
positiveInteger = number2().int().positive();
|
|
69760
|
+
nonNegativeInteger = number2().int().nonnegative();
|
|
69761
|
+
OmoComputerSettingsLayerSchema = object({
|
|
69762
|
+
enabled: boolean2().describe("Experimental: register the computer tool in OmO Native sessions (default: on where the host is supported; false leaves it unregistered)"),
|
|
69763
|
+
display: string2().min(1),
|
|
69764
|
+
max_width: positiveInteger,
|
|
69765
|
+
max_height: positiveInteger,
|
|
69766
|
+
screenshot_max_bytes: positiveInteger,
|
|
69767
|
+
stop_hotkey: string2().min(1),
|
|
69768
|
+
allow_host_relay_only_stop: boolean2(),
|
|
69769
|
+
macos_canary: _enum(["session", "off"]),
|
|
69770
|
+
audit_log: object({ enabled: boolean2() }).partial().strict(),
|
|
69771
|
+
screenshot_gc: object({ enabled: boolean2(), stale_ms: nonNegativeInteger, scan_interval_ms: nonNegativeInteger }).partial().strict(),
|
|
69772
|
+
engine_path: string2().min(1),
|
|
69773
|
+
cua_adapter: boolean2()
|
|
69774
|
+
}).partial().strict().describe("Experimental computer use in OmO Native: screenshots, windows, accessibility trees and native mouse and keyboard input. Every key is optional; defaults depend on the host.");
|
|
69775
|
+
OmoComputerSettingsSchema = OmoComputerSettingsLayerSchema;
|
|
69776
|
+
});
|
|
69777
|
+
|
|
69762
69778
|
// packages/omo-config-core/src/schema/git-master.ts
|
|
69763
69779
|
var OmoGitMasterSettingsShape, OmoGitMasterSettingsLayerSchema, OmoGitMasterSettingsSchema;
|
|
69764
69780
|
var init_git_master = __esm(() => {
|
|
@@ -70031,11 +70047,11 @@ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism
|
|
|
70031
70047
|
const record2 = record(string2(), unknown()).parse(input);
|
|
70032
70048
|
return OmoTaskSettingsSchema.parse({
|
|
70033
70049
|
...record2,
|
|
70034
|
-
residency_max_children: record2["residency_max_children"] ??
|
|
70050
|
+
residency_max_children: record2["residency_max_children"] ?? DEFAULT_RESIDENCY_MAX_CHILDREN,
|
|
70035
70051
|
global_concurrency: record2["global_concurrency"] ?? Math.max(8, resolveParallelism() * 2)
|
|
70036
70052
|
});
|
|
70037
70053
|
}
|
|
70038
|
-
var DEFAULT_RESIDENCY_MAX_CHILDREN =
|
|
70054
|
+
var DEFAULT_RESIDENCY_MAX_CHILDREN = "unlimited", ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, IsolationBackendKindSchema, OmoTaskIsolationSchema, isolationDefaults, OmoTaskIsolationLayerSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
|
|
70039
70055
|
var init_task = __esm(() => {
|
|
70040
70056
|
init_zod();
|
|
70041
70057
|
ResidencyMaxChildrenInputSchema = union([number2().int().nonnegative(), literal("unlimited")]);
|
|
@@ -70098,7 +70114,7 @@ var init_task = __esm(() => {
|
|
|
70098
70114
|
provider_concurrency: record(string2(), number2().int().nonnegative()).optional(),
|
|
70099
70115
|
model_concurrency: record(string2(), number2().int().nonnegative()).optional(),
|
|
70100
70116
|
max_depth: number2().int().nonnegative().default(1),
|
|
70101
|
-
residency_max_children: ResidencyMaxChildrenInputSchema.default(
|
|
70117
|
+
residency_max_children: ResidencyMaxChildrenInputSchema.default(DEFAULT_RESIDENCY_MAX_CHILDREN),
|
|
70102
70118
|
resident_idle_timeout_ms: number2().int().positive().max(Number.MAX_SAFE_INTEGER).default(900000),
|
|
70103
70119
|
ttl_ms: number2().int().positive().default(86400000),
|
|
70104
70120
|
state_dir: string2().optional(),
|
|
@@ -70249,6 +70265,7 @@ var init_config = __esm(() => {
|
|
|
70249
70265
|
init_zod();
|
|
70250
70266
|
init_agent();
|
|
70251
70267
|
init_category();
|
|
70268
|
+
init_computer();
|
|
70252
70269
|
init_git_master();
|
|
70253
70270
|
init_memory();
|
|
70254
70271
|
init_model_catalog();
|
|
@@ -70271,6 +70288,7 @@ var init_config = __esm(() => {
|
|
|
70271
70288
|
model_profile: string2().optional(),
|
|
70272
70289
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
70273
70290
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
70291
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
70274
70292
|
disabled_skills: OmoDisabledSkillsSchema.optional()
|
|
70275
70293
|
}).strict();
|
|
70276
70294
|
OmoConfigProfileSchema = object({
|
|
@@ -70285,6 +70303,7 @@ var init_config = __esm(() => {
|
|
|
70285
70303
|
model_profile: string2().optional(),
|
|
70286
70304
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
70287
70305
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
70306
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
70288
70307
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
70289
70308
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
70290
70309
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -70304,6 +70323,7 @@ var init_config = __esm(() => {
|
|
|
70304
70323
|
model_profile: string2().optional(),
|
|
70305
70324
|
memory: OmoMemorySettingsSchema.optional(),
|
|
70306
70325
|
telemetry: OmoTelemetrySettingsSchema.optional(),
|
|
70326
|
+
computer: OmoComputerSettingsSchema.optional(),
|
|
70307
70327
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
70308
70328
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
70309
70329
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -70326,6 +70346,7 @@ var init_config = __esm(() => {
|
|
|
70326
70346
|
model_profile: string2().optional(),
|
|
70327
70347
|
memory: OmoMemorySettingsLayerSchema.optional(),
|
|
70328
70348
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
70349
|
+
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
70329
70350
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
70330
70351
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
70331
70352
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -70465,6 +70486,7 @@ var init_schema = __esm(() => {
|
|
|
70465
70486
|
init_task();
|
|
70466
70487
|
init_team();
|
|
70467
70488
|
init_telemetry();
|
|
70489
|
+
init_computer();
|
|
70468
70490
|
});
|
|
70469
70491
|
|
|
70470
70492
|
// packages/omo-config-core/src/loader/disabled-skills.ts
|
|
@@ -74155,7 +74177,7 @@ init_shared();
|
|
|
74155
74177
|
// package.json
|
|
74156
74178
|
var package_default = {
|
|
74157
74179
|
name: "oh-my-opencode",
|
|
74158
|
-
version: "5.
|
|
74180
|
+
version: "5.1.0",
|
|
74159
74181
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
74160
74182
|
main: "./dist/index.js",
|
|
74161
74183
|
types: "dist/index.d.ts",
|
|
@@ -74188,6 +74210,11 @@ var package_default = {
|
|
|
74188
74210
|
"packages/omo-codex",
|
|
74189
74211
|
"packages/omo-senpi",
|
|
74190
74212
|
"packages/senpi-task",
|
|
74213
|
+
"packages/senpi-desktop-protocol",
|
|
74214
|
+
"packages/senpi-desktop-engine",
|
|
74215
|
+
"packages/senpi-desktop-prelude",
|
|
74216
|
+
"packages/senpi-desktop-service",
|
|
74217
|
+
"packages/senpi-desktop-tool",
|
|
74191
74218
|
"packages/omo-opencode",
|
|
74192
74219
|
"packages/omo-native"
|
|
74193
74220
|
],
|
|
@@ -74289,7 +74316,7 @@ var package_default = {
|
|
|
74289
74316
|
prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
|
|
74290
74317
|
"test:model-capabilities": "bun test --timeout 20000 packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
|
|
74291
74318
|
typecheck: "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
|
|
74292
|
-
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
|
|
74319
|
+
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-protocol/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-engine/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-prelude/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-service/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-tool/tsconfig.json",
|
|
74293
74320
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
74294
74321
|
test: "bun test --timeout 20000",
|
|
74295
74322
|
"changelog:section": "bun script/changelog-section.ts",
|
|
@@ -74298,7 +74325,8 @@ var package_default = {
|
|
|
74298
74325
|
"test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
|
|
74299
74326
|
"test:windows-codex": "bun run test:codex",
|
|
74300
74327
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
74301
|
-
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
|
|
74328
|
+
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build",
|
|
74329
|
+
"test:desktop": "bun script/check-cargo-pinned-deps.mjs && bun run --cwd packages/senpi-desktop-protocol test && bun run --cwd packages/senpi-desktop-engine test && bun run --cwd packages/senpi-desktop-prelude test && bun run --cwd packages/senpi-desktop-service test && bun run --cwd packages/senpi-desktop-tool test"
|
|
74302
74330
|
},
|
|
74303
74331
|
keywords: [
|
|
74304
74332
|
"opencode",
|
|
@@ -74338,7 +74366,7 @@ var package_default = {
|
|
|
74338
74366
|
zod: "^4.6.5"
|
|
74339
74367
|
},
|
|
74340
74368
|
devDependencies: {
|
|
74341
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
74369
|
+
"@code-yeongyu/senpi": "2026.9.28-7",
|
|
74342
74370
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
74343
74371
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
74344
74372
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -74347,11 +74375,11 @@ var package_default = {
|
|
|
74347
74375
|
"@oh-my-opencode/delegate-core": "workspace:*",
|
|
74348
74376
|
"@oh-my-opencode/git-bash-mcp": "workspace:*",
|
|
74349
74377
|
"@oh-my-opencode/hashline-core": "workspace:*",
|
|
74350
|
-
"@oh-my-opencode/lsp-core": "workspace:*",
|
|
74351
74378
|
"@oh-my-opencode/isolation-core": "workspace:*",
|
|
74352
|
-
"@oh-my-opencode/
|
|
74379
|
+
"@oh-my-opencode/lsp-core": "workspace:*",
|
|
74353
74380
|
"@oh-my-opencode/mcp-client-core": "workspace:*",
|
|
74354
74381
|
"@oh-my-opencode/mcp-stdio-core": "workspace:*",
|
|
74382
|
+
"@oh-my-opencode/memory-core": "workspace:*",
|
|
74355
74383
|
"@oh-my-opencode/model-core": "workspace:*",
|
|
74356
74384
|
"@oh-my-opencode/omo-codex": "workspace:*",
|
|
74357
74385
|
"@oh-my-opencode/omo-config-core": "workspace:*",
|
|
@@ -74360,6 +74388,11 @@ var package_default = {
|
|
|
74360
74388
|
"@oh-my-opencode/openclaw-core": "workspace:*",
|
|
74361
74389
|
"@oh-my-opencode/prompts-core": "workspace:*",
|
|
74362
74390
|
"@oh-my-opencode/rules-engine": "workspace:*",
|
|
74391
|
+
"@oh-my-opencode/senpi-desktop-engine": "workspace:*",
|
|
74392
|
+
"@oh-my-opencode/senpi-desktop-prelude": "workspace:*",
|
|
74393
|
+
"@oh-my-opencode/senpi-desktop-protocol": "workspace:*",
|
|
74394
|
+
"@oh-my-opencode/senpi-desktop-service": "workspace:*",
|
|
74395
|
+
"@oh-my-opencode/senpi-desktop-tool": "workspace:*",
|
|
74363
74396
|
"@oh-my-opencode/senpi-task": "workspace:*",
|
|
74364
74397
|
"@oh-my-opencode/shared-skills": "workspace:*",
|
|
74365
74398
|
"@oh-my-opencode/skills-loader-core": "workspace:*",
|
|
@@ -74379,18 +74412,18 @@ var package_default = {
|
|
|
74379
74412
|
typescript: "^7.0.2"
|
|
74380
74413
|
},
|
|
74381
74414
|
optionalDependencies: {
|
|
74382
|
-
"oh-my-opencode-darwin-arm64": "5.
|
|
74383
|
-
"oh-my-opencode-darwin-x64": "5.
|
|
74384
|
-
"oh-my-opencode-darwin-x64-baseline": "5.
|
|
74385
|
-
"oh-my-opencode-linux-arm64": "5.
|
|
74386
|
-
"oh-my-opencode-linux-arm64-musl": "5.
|
|
74387
|
-
"oh-my-opencode-linux-x64": "5.
|
|
74388
|
-
"oh-my-opencode-linux-x64-baseline": "5.
|
|
74389
|
-
"oh-my-opencode-linux-x64-musl": "5.
|
|
74390
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.
|
|
74391
|
-
"oh-my-opencode-windows-arm64": "5.
|
|
74392
|
-
"oh-my-opencode-windows-x64": "5.
|
|
74393
|
-
"oh-my-opencode-windows-x64-baseline": "5.
|
|
74415
|
+
"oh-my-opencode-darwin-arm64": "5.1.0",
|
|
74416
|
+
"oh-my-opencode-darwin-x64": "5.1.0",
|
|
74417
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.0",
|
|
74418
|
+
"oh-my-opencode-linux-arm64": "5.1.0",
|
|
74419
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.0",
|
|
74420
|
+
"oh-my-opencode-linux-x64": "5.1.0",
|
|
74421
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.0",
|
|
74422
|
+
"oh-my-opencode-linux-x64-musl": "5.1.0",
|
|
74423
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.0",
|
|
74424
|
+
"oh-my-opencode-windows-arm64": "5.1.0",
|
|
74425
|
+
"oh-my-opencode-windows-x64": "5.1.0",
|
|
74426
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.0"
|
|
74394
74427
|
},
|
|
74395
74428
|
overrides: {
|
|
74396
74429
|
"@earendil-works/pi-agent-core": "0.84.2",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.0",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,6 +33,11 @@
|
|
|
33
33
|
"packages/omo-codex",
|
|
34
34
|
"packages/omo-senpi",
|
|
35
35
|
"packages/senpi-task",
|
|
36
|
+
"packages/senpi-desktop-protocol",
|
|
37
|
+
"packages/senpi-desktop-engine",
|
|
38
|
+
"packages/senpi-desktop-prelude",
|
|
39
|
+
"packages/senpi-desktop-service",
|
|
40
|
+
"packages/senpi-desktop-tool",
|
|
36
41
|
"packages/omo-opencode",
|
|
37
42
|
"packages/omo-native"
|
|
38
43
|
],
|
|
@@ -134,7 +139,7 @@
|
|
|
134
139
|
"prepublishOnly": "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
|
|
135
140
|
"test:model-capabilities": "bun test --timeout 20000 packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
|
|
136
141
|
"typecheck": "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
|
|
137
|
-
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
|
|
142
|
+
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-protocol/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-engine/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-prelude/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-service/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-tool/tsconfig.json",
|
|
138
143
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
139
144
|
"test": "bun test --timeout 20000",
|
|
140
145
|
"changelog:section": "bun script/changelog-section.ts",
|
|
@@ -143,7 +148,8 @@
|
|
|
143
148
|
"test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
|
|
144
149
|
"test:windows-codex": "bun run test:codex",
|
|
145
150
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
146
|
-
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
|
|
151
|
+
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build",
|
|
152
|
+
"test:desktop": "bun script/check-cargo-pinned-deps.mjs && bun run --cwd packages/senpi-desktop-protocol test && bun run --cwd packages/senpi-desktop-engine test && bun run --cwd packages/senpi-desktop-prelude test && bun run --cwd packages/senpi-desktop-service test && bun run --cwd packages/senpi-desktop-tool test"
|
|
147
153
|
},
|
|
148
154
|
"keywords": [
|
|
149
155
|
"opencode",
|
|
@@ -183,7 +189,7 @@
|
|
|
183
189
|
"zod": "^4.6.5"
|
|
184
190
|
},
|
|
185
191
|
"devDependencies": {
|
|
186
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
192
|
+
"@code-yeongyu/senpi": "2026.9.28-7",
|
|
187
193
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
188
194
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
189
195
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -192,11 +198,11 @@
|
|
|
192
198
|
"@oh-my-opencode/delegate-core": "workspace:*",
|
|
193
199
|
"@oh-my-opencode/git-bash-mcp": "workspace:*",
|
|
194
200
|
"@oh-my-opencode/hashline-core": "workspace:*",
|
|
195
|
-
"@oh-my-opencode/lsp-core": "workspace:*",
|
|
196
201
|
"@oh-my-opencode/isolation-core": "workspace:*",
|
|
197
|
-
"@oh-my-opencode/
|
|
202
|
+
"@oh-my-opencode/lsp-core": "workspace:*",
|
|
198
203
|
"@oh-my-opencode/mcp-client-core": "workspace:*",
|
|
199
204
|
"@oh-my-opencode/mcp-stdio-core": "workspace:*",
|
|
205
|
+
"@oh-my-opencode/memory-core": "workspace:*",
|
|
200
206
|
"@oh-my-opencode/model-core": "workspace:*",
|
|
201
207
|
"@oh-my-opencode/omo-codex": "workspace:*",
|
|
202
208
|
"@oh-my-opencode/omo-config-core": "workspace:*",
|
|
@@ -205,6 +211,11 @@
|
|
|
205
211
|
"@oh-my-opencode/openclaw-core": "workspace:*",
|
|
206
212
|
"@oh-my-opencode/prompts-core": "workspace:*",
|
|
207
213
|
"@oh-my-opencode/rules-engine": "workspace:*",
|
|
214
|
+
"@oh-my-opencode/senpi-desktop-engine": "workspace:*",
|
|
215
|
+
"@oh-my-opencode/senpi-desktop-prelude": "workspace:*",
|
|
216
|
+
"@oh-my-opencode/senpi-desktop-protocol": "workspace:*",
|
|
217
|
+
"@oh-my-opencode/senpi-desktop-service": "workspace:*",
|
|
218
|
+
"@oh-my-opencode/senpi-desktop-tool": "workspace:*",
|
|
208
219
|
"@oh-my-opencode/senpi-task": "workspace:*",
|
|
209
220
|
"@oh-my-opencode/shared-skills": "workspace:*",
|
|
210
221
|
"@oh-my-opencode/skills-loader-core": "workspace:*",
|
|
@@ -224,18 +235,18 @@
|
|
|
224
235
|
"typescript": "^7.0.2"
|
|
225
236
|
},
|
|
226
237
|
"optionalDependencies": {
|
|
227
|
-
"oh-my-opencode-darwin-arm64": "5.
|
|
228
|
-
"oh-my-opencode-darwin-x64": "5.
|
|
229
|
-
"oh-my-opencode-darwin-x64-baseline": "5.
|
|
230
|
-
"oh-my-opencode-linux-arm64": "5.
|
|
231
|
-
"oh-my-opencode-linux-arm64-musl": "5.
|
|
232
|
-
"oh-my-opencode-linux-x64": "5.
|
|
233
|
-
"oh-my-opencode-linux-x64-baseline": "5.
|
|
234
|
-
"oh-my-opencode-linux-x64-musl": "5.
|
|
235
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.
|
|
236
|
-
"oh-my-opencode-windows-arm64": "5.
|
|
237
|
-
"oh-my-opencode-windows-x64": "5.
|
|
238
|
-
"oh-my-opencode-windows-x64-baseline": "5.
|
|
238
|
+
"oh-my-opencode-darwin-arm64": "5.1.0",
|
|
239
|
+
"oh-my-opencode-darwin-x64": "5.1.0",
|
|
240
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.0",
|
|
241
|
+
"oh-my-opencode-linux-arm64": "5.1.0",
|
|
242
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.0",
|
|
243
|
+
"oh-my-opencode-linux-x64": "5.1.0",
|
|
244
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.0",
|
|
245
|
+
"oh-my-opencode-linux-x64-musl": "5.1.0",
|
|
246
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.0",
|
|
247
|
+
"oh-my-opencode-windows-arm64": "5.1.0",
|
|
248
|
+
"oh-my-opencode-windows-x64": "5.1.0",
|
|
249
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.0"
|
|
239
250
|
},
|
|
240
251
|
"overrides": {
|
|
241
252
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -182,6 +182,9 @@ function handleNotification(message) {
|
|
|
182
182
|
}
|
|
183
183
|
if (message.method === "textDocument/didOpen") {
|
|
184
184
|
applyPublishSteps("didOpen", message.params.textDocument.uri, message.params.textDocument.version);
|
|
185
|
+
if (scenario.unscopedApplyEditOnDidOpen) {
|
|
186
|
+
sendApplyEdit(scenario.unscopedApplyEditOnDidOpen, { kind: "unscoped" });
|
|
187
|
+
}
|
|
185
188
|
}
|
|
186
189
|
if (message.method === "textDocument/didChange" && Array.isArray(scenario.diagnostics)) {
|
|
187
190
|
send({
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
readEvents,
|
|
8
8
|
renameTextEdit,
|
|
9
9
|
waitForEventCount,
|
|
10
|
+
waitForEventCountBySubscription,
|
|
10
11
|
} from "./workspace-apply-edit-test-support.js";
|
|
11
12
|
|
|
12
13
|
const harness = createWorkspaceEditTestHarness();
|
|
@@ -17,13 +18,16 @@ afterEach(async () => {
|
|
|
17
18
|
|
|
18
19
|
describe("LspClient workspace mutation lease", () => {
|
|
19
20
|
it("#given no mutating request #when the server calls applyEdit #then the request is rejected as unscoped", async () => {
|
|
20
|
-
const context = await harness.makeClient({
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const context = await harness.makeClient({
|
|
22
|
+
unscopedApplyEditOnDidOpen: renameTextEdit("before", "after", { version: 1 }),
|
|
23
|
+
});
|
|
24
|
+
const response = waitForEventCountBySubscription(
|
|
23
25
|
context.events,
|
|
24
26
|
(event) => event.type === "clientResponse" && event.method === "workspace/applyEdit",
|
|
25
27
|
1,
|
|
26
28
|
);
|
|
29
|
+
await context.client.openFile(context.source);
|
|
30
|
+
const responses = await response;
|
|
27
31
|
|
|
28
32
|
expect(responses[0]?.result).toEqual({
|
|
29
33
|
applied: false,
|