lazycodex-ai 5.1.41 → 5.1.43
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.de.md +118 -0
- package/README.es.md +118 -0
- package/README.fr.md +118 -0
- package/README.it.md +118 -0
- package/README.ja.md +2 -1
- package/README.ko.md +2 -1
- package/README.md +3 -2
- package/README.pt-br.md +118 -0
- package/README.ru.md +2 -1
- package/README.zh-cn.md +2 -1
- package/dist/cli/index.js +187 -39
- package/dist/cli/service-auth/cli-keystore.fixture.d.ts +1 -7
- package/dist/cli/service-auth/index.d.ts +3 -0
- package/dist/cli/service-auth/keystore.d.ts +8 -2
- package/dist/cli/service-auth/secret-service-lock.d.ts +4 -0
- package/dist/cli/service-auth/session.d.ts +7 -1
- package/dist/cli-node/index.js +187 -39
- package/package.json +1 -1
- package/packages/lsp-daemon/dist/cli.js +363 -35
- package/packages/lsp-daemon/dist/client.js +341 -13
- package/packages/lsp-daemon/dist/index.js +344 -16
- package/packages/lsp-tools-mcp/dist/cli.js +333 -5
- package/packages/lsp-tools-mcp/dist/mcp.js +333 -5
- package/packages/lsp-tools-mcp/dist/tools.js +333 -5
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +68 -9
- 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 +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +358 -36
- 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/dist/cli.js +2 -0
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2 -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/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/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-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 +17 -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/scripts/install-dist/install-local.mjs +72 -11
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type Credentials } from "./protocol";
|
|
1
|
+
import { type Credentials, SignInError } from "./protocol";
|
|
2
|
+
import { type SecretServiceLockProbe } from "./secret-service-lock";
|
|
2
3
|
type SecretKey = {
|
|
3
4
|
readonly service: string;
|
|
4
5
|
readonly name: string;
|
|
@@ -15,6 +16,11 @@ export type CredentialStore = {
|
|
|
15
16
|
readonly write: (value: Credentials) => Promise<void>;
|
|
16
17
|
readonly clear: () => Promise<void>;
|
|
17
18
|
};
|
|
19
|
+
export declare class KeychainLockedError extends SignInError {
|
|
20
|
+
}
|
|
21
|
+
export declare class SecretServiceUnavailableError extends SignInError {
|
|
22
|
+
}
|
|
23
|
+
export declare const quietNotice: (_message: string) => void;
|
|
18
24
|
export declare function credentialId(api: string): string;
|
|
19
|
-
export declare function createCredentialStore(api: string, secrets?: SecretApi | null, platform?: NodeJS.Platform): CredentialStore;
|
|
25
|
+
export declare function createCredentialStore(api: string, secrets?: SecretApi | null, platform?: NodeJS.Platform, lockProbe?: SecretServiceLockProbe, notice?: (message: string) => void): CredentialStore;
|
|
20
26
|
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type SecretServiceLockState = "locked" | "unlocked" | "absent" | "unknown";
|
|
2
|
+
export type SecretServiceLockProbe = () => Promise<SecretServiceLockState>;
|
|
3
|
+
export declare const parseLockedReply: (stdout: string) => SecretServiceLockState | null;
|
|
4
|
+
export declare const probeSecretServiceLock: SecretServiceLockProbe;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { type CredentialStore } from "./keystore";
|
|
2
|
-
import { type ChooseDevice, type Credentials } from "./protocol";
|
|
2
|
+
import { type ChooseDevice, type Credentials, SignInError } from "./protocol";
|
|
3
|
+
export declare class SessionEnded extends SignInError {
|
|
4
|
+
readonly deviceRevoked: boolean;
|
|
5
|
+
readonly code: string;
|
|
6
|
+
constructor(message: string, deviceRevoked: boolean, code: string);
|
|
7
|
+
}
|
|
3
8
|
export declare function createSession(options: {
|
|
4
9
|
readonly api: string;
|
|
5
10
|
readonly store: CredentialStore;
|
|
@@ -10,6 +15,7 @@ export declare function createSession(options: {
|
|
|
10
15
|
signal: AbortSignal | undefined;
|
|
11
16
|
ready(): Promise<void>;
|
|
12
17
|
save(value: Credentials): Promise<void>;
|
|
18
|
+
update<T>(action: (current: Credentials | null) => Promise<T>): Promise<T>;
|
|
13
19
|
logout(): Promise<boolean>;
|
|
14
20
|
accessToken(): Promise<string>;
|
|
15
21
|
removeForLimit(error: unknown, choose: ChooseDevice): Promise<boolean>;
|
package/dist/cli-node/index.js
CHANGED
|
@@ -2133,7 +2133,7 @@ var package_default;
|
|
|
2133
2133
|
var init_package = __esm(() => {
|
|
2134
2134
|
package_default = {
|
|
2135
2135
|
name: "oh-my-opencode",
|
|
2136
|
-
version: "5.1.
|
|
2136
|
+
version: "5.1.43",
|
|
2137
2137
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2138
2138
|
main: "./dist/index.js",
|
|
2139
2139
|
types: "dist/index.d.ts",
|
|
@@ -2310,7 +2310,7 @@ var init_package = __esm(() => {
|
|
|
2310
2310
|
},
|
|
2311
2311
|
devDependencies: {
|
|
2312
2312
|
"@clack/prompts": "^1.8.1",
|
|
2313
|
-
"@code-yeongyu/senpi": "2026.10.21-
|
|
2313
|
+
"@code-yeongyu/senpi": "2026.10.21-2",
|
|
2314
2314
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
2315
2315
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
2316
2316
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -2371,18 +2371,18 @@ var init_package = __esm(() => {
|
|
|
2371
2371
|
typescript: "^7.0.2"
|
|
2372
2372
|
},
|
|
2373
2373
|
optionalDependencies: {
|
|
2374
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
2375
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
2376
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
2377
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
2378
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
2379
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
2380
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
2381
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
2382
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
2383
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
2384
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
2385
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
2374
|
+
"oh-my-opencode-darwin-arm64": "5.1.43",
|
|
2375
|
+
"oh-my-opencode-darwin-x64": "5.1.43",
|
|
2376
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.43",
|
|
2377
|
+
"oh-my-opencode-linux-arm64": "5.1.43",
|
|
2378
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.43",
|
|
2379
|
+
"oh-my-opencode-linux-x64": "5.1.43",
|
|
2380
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.43",
|
|
2381
|
+
"oh-my-opencode-linux-x64-musl": "5.1.43",
|
|
2382
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.43",
|
|
2383
|
+
"oh-my-opencode-windows-arm64": "5.1.43",
|
|
2384
|
+
"oh-my-opencode-windows-x64": "5.1.43",
|
|
2385
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.43"
|
|
2386
2386
|
},
|
|
2387
2387
|
overrides: {
|
|
2388
2388
|
hono: "^4.13.8",
|
|
@@ -76909,7 +76909,7 @@ var init_memory_agreements = __esm(() => {
|
|
|
76909
76909
|
});
|
|
76910
76910
|
|
|
76911
76911
|
// packages/omo-config-core/src/schema/memory.ts
|
|
76912
|
-
var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
|
|
76912
|
+
var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemoryAutoIdentitySchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
|
|
76913
76913
|
var init_memory = __esm(() => {
|
|
76914
76914
|
init_zod();
|
|
76915
76915
|
init_memory_agreements();
|
|
@@ -77065,9 +77065,11 @@ var init_memory = __esm(() => {
|
|
|
77065
77065
|
projection: OmoMemoryProjectionLayerSchema.optional(),
|
|
77066
77066
|
compile_warn_tokens: number2().int().positive().optional()
|
|
77067
77067
|
}).strict();
|
|
77068
|
+
OmoMemoryAutoIdentitySchema = _enum(["path", "git"]);
|
|
77068
77069
|
OmoMemorySettingsSchema = object({
|
|
77069
77070
|
enabled: boolean2().default(true),
|
|
77070
77071
|
agent: string2().min(1).default("auto"),
|
|
77072
|
+
auto_identity: OmoMemoryAutoIdentitySchema.default("path"),
|
|
77071
77073
|
reflection: OmoMemoryReflectionSchema.default({
|
|
77072
77074
|
enabled: true,
|
|
77073
77075
|
trigger: { step_count: 25, on_compaction: true },
|
|
@@ -77109,6 +77111,7 @@ var init_memory = __esm(() => {
|
|
|
77109
77111
|
OmoMemorySettingsLayerSchema = object({
|
|
77110
77112
|
enabled: boolean2().optional(),
|
|
77111
77113
|
agent: string2().min(1).optional(),
|
|
77114
|
+
auto_identity: OmoMemoryAutoIdentitySchema.optional(),
|
|
77112
77115
|
reflection: OmoMemoryReflectionLayerSchema.optional(),
|
|
77113
77116
|
nudge: OmoMemoryNudgeLayerSchema.optional(),
|
|
77114
77117
|
facts: OmoMemoryFactsLayerSchema.optional(),
|
|
@@ -77158,6 +77161,7 @@ var init_model_profile = __esm(() => {
|
|
|
77158
77161
|
init_fallback_models();
|
|
77159
77162
|
OmoModelProfileInputSchema = object({
|
|
77160
77163
|
display_name: string2().optional(),
|
|
77164
|
+
caution: string2().optional(),
|
|
77161
77165
|
family: _enum(["daily", "geeky"]).optional(),
|
|
77162
77166
|
tier: _enum(["normal", "heavy"]).optional(),
|
|
77163
77167
|
models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
|
|
@@ -77451,7 +77455,7 @@ var init_gateway = __esm(() => {
|
|
|
77451
77455
|
});
|
|
77452
77456
|
|
|
77453
77457
|
// packages/omo-config-core/src/schema/config.ts
|
|
77454
|
-
var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
|
|
77458
|
+
var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoExcludedModelsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
|
|
77455
77459
|
var init_config = __esm(() => {
|
|
77456
77460
|
init_zod();
|
|
77457
77461
|
init_agent();
|
|
@@ -77469,6 +77473,7 @@ var init_config = __esm(() => {
|
|
|
77469
77473
|
init_gateway();
|
|
77470
77474
|
OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
|
|
77471
77475
|
OmoDisabledSkillsSchema = array(string2());
|
|
77476
|
+
OmoExcludedModelsSchema = array(string2());
|
|
77472
77477
|
OmoTypedHarnessConfigSchema = object({
|
|
77473
77478
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
77474
77479
|
gateway: OmoGatewaySectionSchema.optional(),
|
|
@@ -77484,7 +77489,8 @@ var init_config = __esm(() => {
|
|
|
77484
77489
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
77485
77490
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77486
77491
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77487
|
-
disabled_skills: OmoDisabledSkillsSchema.optional()
|
|
77492
|
+
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
77493
|
+
exclude_models: OmoExcludedModelsSchema.optional()
|
|
77488
77494
|
}).strict();
|
|
77489
77495
|
OmoConfigProfileSchema = object({
|
|
77490
77496
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
@@ -77501,6 +77507,7 @@ var init_config = __esm(() => {
|
|
|
77501
77507
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77502
77508
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77503
77509
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
77510
|
+
exclude_models: OmoExcludedModelsSchema.optional(),
|
|
77504
77511
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
77505
77512
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
77506
77513
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -77523,6 +77530,7 @@ var init_config = __esm(() => {
|
|
|
77523
77530
|
side_panel: OmoSidePanelSettingsSchema.optional(),
|
|
77524
77531
|
computer: OmoComputerSettingsSchema.optional(),
|
|
77525
77532
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
77533
|
+
exclude_models: OmoExcludedModelsSchema.optional(),
|
|
77526
77534
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
77527
77535
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
77528
77536
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -77548,6 +77556,7 @@ var init_config = __esm(() => {
|
|
|
77548
77556
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77549
77557
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77550
77558
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
77559
|
+
exclude_models: OmoExcludedModelsSchema.optional(),
|
|
77551
77560
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
77552
77561
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
77553
77562
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -77756,7 +77765,51 @@ var init_diagnostic_lines = __esm(() => {
|
|
|
77756
77765
|
});
|
|
77757
77766
|
|
|
77758
77767
|
// packages/omo-config-core/src/loader/disabled-skills.ts
|
|
77759
|
-
|
|
77768
|
+
function toRecord(value) {
|
|
77769
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
77770
|
+
return;
|
|
77771
|
+
return value;
|
|
77772
|
+
}
|
|
77773
|
+
function namesAt(record, key) {
|
|
77774
|
+
const value = record?.[key];
|
|
77775
|
+
if (!Array.isArray(value))
|
|
77776
|
+
return [];
|
|
77777
|
+
return value.filter((entry) => typeof entry === "string" && entry.trim() !== "");
|
|
77778
|
+
}
|
|
77779
|
+
function harnessBlockKeys(harness) {
|
|
77780
|
+
const canonical = canonicalHarnessName(harness);
|
|
77781
|
+
const legacy = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([name]) => harnessBlockKey(name));
|
|
77782
|
+
return [harnessBlockKey(canonical), ...legacy];
|
|
77783
|
+
}
|
|
77784
|
+
function scopesOf(config, harness) {
|
|
77785
|
+
if (harness === undefined)
|
|
77786
|
+
return [config];
|
|
77787
|
+
return [config, ...harnessBlockKeys(harness).map((key) => toRecord(config[key]))];
|
|
77788
|
+
}
|
|
77789
|
+
function collectExcludedModels(options) {
|
|
77790
|
+
return collectUnionedList("exclude_models", options);
|
|
77791
|
+
}
|
|
77792
|
+
function collectUnionedList(key, options) {
|
|
77793
|
+
const names = new Set;
|
|
77794
|
+
for (const layer of options.layers) {
|
|
77795
|
+
const config = toRecord(layer.config);
|
|
77796
|
+
if (config === undefined)
|
|
77797
|
+
continue;
|
|
77798
|
+
const profile = options.profile === undefined ? undefined : toRecord(toRecord(config["profiles"])?.[options.profile]);
|
|
77799
|
+
const scopes = [
|
|
77800
|
+
...scopesOf(config, options.harness),
|
|
77801
|
+
...profile === undefined ? [] : scopesOf(profile, options.harness)
|
|
77802
|
+
];
|
|
77803
|
+
for (const scope of scopes) {
|
|
77804
|
+
for (const name of namesAt(scope, key))
|
|
77805
|
+
names.add(name.trim());
|
|
77806
|
+
}
|
|
77807
|
+
}
|
|
77808
|
+
return [...names];
|
|
77809
|
+
}
|
|
77810
|
+
var init_disabled_skills = __esm(() => {
|
|
77811
|
+
init_schema();
|
|
77812
|
+
});
|
|
77760
77813
|
|
|
77761
77814
|
// packages/omo-config-core/src/loader/merge.ts
|
|
77762
77815
|
function isUnsafeObjectKey2(key) {
|
|
@@ -77992,7 +78045,7 @@ function stripUnrecognizedKeys(record, issues) {
|
|
|
77992
78045
|
}
|
|
77993
78046
|
return { issuePaths, stripped };
|
|
77994
78047
|
}
|
|
77995
|
-
function
|
|
78048
|
+
function toRecord2(value) {
|
|
77996
78049
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
77997
78050
|
return null;
|
|
77998
78051
|
const record = {};
|
|
@@ -78003,7 +78056,7 @@ function toRecord(value) {
|
|
|
78003
78056
|
}
|
|
78004
78057
|
function validateConfigLayer(path, data) {
|
|
78005
78058
|
const sanitized = sanitizeUnsafeKeys(data);
|
|
78006
|
-
const record =
|
|
78059
|
+
const record = toRecord2(sanitized.value);
|
|
78007
78060
|
const unsafeIssuePaths = sanitized.issues.flatMap((issue) => issue.keys.map((key) => [...issue.path, key].join(".")));
|
|
78008
78061
|
const unsafeDiagnostics = unsafeIssuePaths.length === 0 ? [] : [{ kind: "unknown-keys", message: `Ignored unknown keys in ${path}: ${unsafeIssuePaths.join(", ")}`, path, issuePaths: unsafeIssuePaths }];
|
|
78009
78062
|
const validation = OmoConfigLayerSchema.safeParse(sanitized.value);
|
|
@@ -78156,7 +78209,7 @@ function resolveOmoProfileName(options = {}) {
|
|
|
78156
78209
|
const env = options.env ?? process.env;
|
|
78157
78210
|
return profileName(options.profile) ?? profileName(env["OMO_PROFILE"]) ?? profileName(env["OCX_PROFILE"]) ?? profileNameFromOpenCodeConfigDir(env["OPENCODE_CONFIG_DIR"]);
|
|
78158
78211
|
}
|
|
78159
|
-
function
|
|
78212
|
+
function toRecord3(value) {
|
|
78160
78213
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
78161
78214
|
return;
|
|
78162
78215
|
return Object.fromEntries(Object.entries(value));
|
|
@@ -78177,13 +78230,13 @@ function harnessLayer(config, harness) {
|
|
|
78177
78230
|
const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
|
|
78178
78231
|
let layer = {};
|
|
78179
78232
|
for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
|
|
78180
|
-
layer = mergeOmoConfigRecords(layer,
|
|
78233
|
+
layer = mergeOmoConfigRecords(layer, toRecord3(config[key]) ?? {});
|
|
78181
78234
|
}
|
|
78182
78235
|
return layer;
|
|
78183
78236
|
}
|
|
78184
78237
|
function resolveOmoConfigView(options) {
|
|
78185
|
-
const profiles =
|
|
78186
|
-
const profile = options.profile === undefined ? undefined :
|
|
78238
|
+
const profiles = toRecord3(options.config["profiles"]);
|
|
78239
|
+
const profile = options.profile === undefined ? undefined : toRecord3(profiles?.[options.profile]);
|
|
78187
78240
|
const diagnostics = profile === undefined && options.profile !== undefined ? [{
|
|
78188
78241
|
kind: "profile",
|
|
78189
78242
|
message: `Activated omo profile "${options.profile}" does not exist; using the base configuration`,
|
|
@@ -78324,9 +78377,15 @@ function loadOmoConfig(options = {}) {
|
|
|
78324
78377
|
});
|
|
78325
78378
|
const finalInput = mergeOmoConfigRecords(DEFAULT_RAW_CONFIG, resolved.config);
|
|
78326
78379
|
const finalConfig = OmoConfigSchema.safeParse(finalInput);
|
|
78380
|
+
const excludeModels = collectExcludedModels({
|
|
78381
|
+
layers,
|
|
78382
|
+
...options.harness === undefined ? {} : { harness: options.harness },
|
|
78383
|
+
...resolved.profile === undefined ? {} : { profile: resolved.profile }
|
|
78384
|
+
});
|
|
78385
|
+
const withExcludedModels = (config) => excludeModels.length === 0 ? config : { ...config, exclude_models: [...excludeModels] };
|
|
78327
78386
|
if (finalConfig.success) {
|
|
78328
78387
|
return {
|
|
78329
|
-
config: stripResolutionControlKeys(finalConfig.data),
|
|
78388
|
+
config: withExcludedModels(stripResolutionControlKeys(finalConfig.data)),
|
|
78330
78389
|
diagnostics: [...diagnostics, ...resolved.diagnostics],
|
|
78331
78390
|
layers,
|
|
78332
78391
|
...resolved.profile === undefined ? {} : { profile: resolved.profile },
|
|
@@ -78339,7 +78398,7 @@ function loadOmoConfig(options = {}) {
|
|
|
78339
78398
|
});
|
|
78340
78399
|
if (pruned.ok) {
|
|
78341
78400
|
return {
|
|
78342
|
-
config: stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config)),
|
|
78401
|
+
config: withExcludedModels(stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config))),
|
|
78343
78402
|
diagnostics: [...diagnostics, ...resolved.diagnostics, ...invalidValueDiagnostics(MERGED_OMO_CONFIG_PATH, pruned.dropped)],
|
|
78344
78403
|
layers,
|
|
78345
78404
|
...resolved.profile === undefined ? {} : { profile: resolved.profile },
|
|
@@ -78358,6 +78417,7 @@ var DEFAULT_RAW_CONFIG;
|
|
|
78358
78417
|
var init_loader2 = __esm(() => {
|
|
78359
78418
|
init_main();
|
|
78360
78419
|
init_schema();
|
|
78420
|
+
init_disabled_skills();
|
|
78361
78421
|
init_layer_validation();
|
|
78362
78422
|
init_merge();
|
|
78363
78423
|
init_paths();
|
|
@@ -82467,6 +82527,8 @@ function toDiagnosticRecord(input, now) {
|
|
|
82467
82527
|
timestamp: now.toISOString(),
|
|
82468
82528
|
event: input.event,
|
|
82469
82529
|
source: input.source,
|
|
82530
|
+
...input.entryKind === undefined ? {} : { entry_kind: input.entryKind },
|
|
82531
|
+
...input.errorCode === undefined ? {} : { error_code: input.errorCode },
|
|
82470
82532
|
...input.count === undefined ? {} : { count: input.count },
|
|
82471
82533
|
...serializeError(input.error, input.errorKind)
|
|
82472
82534
|
};
|
|
@@ -92220,7 +92282,7 @@ var package_default2;
|
|
|
92220
92282
|
var init_package2 = __esm(() => {
|
|
92221
92283
|
package_default2 = {
|
|
92222
92284
|
name: "@oh-my-opencode/omo-codex",
|
|
92223
|
-
version: "5.1.
|
|
92285
|
+
version: "5.1.43",
|
|
92224
92286
|
type: "module",
|
|
92225
92287
|
private: true,
|
|
92226
92288
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -99527,6 +99589,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
99527
99589
|
join63("extensions", "CaseFolding.txt"),
|
|
99528
99590
|
join63("extensions", "omo-thread-client.js"),
|
|
99529
99591
|
join63("extensions", "omo-feedback.js"),
|
|
99592
|
+
join63("extensions", "omo-claim-receipt.js"),
|
|
99530
99593
|
join63("extensions", "assets.generated.json"),
|
|
99531
99594
|
join63("extensions", "omo-member.js"),
|
|
99532
99595
|
join63("extensions", "memory-run-supervisor.mjs"),
|
|
@@ -108569,6 +108632,10 @@ var package_default3 = {
|
|
|
108569
108632
|
types: "./src/config-migration/index.ts",
|
|
108570
108633
|
import: "./src/config-migration/index.ts"
|
|
108571
108634
|
},
|
|
108635
|
+
"./service-auth": {
|
|
108636
|
+
types: "./src/cli/service-auth/index.ts",
|
|
108637
|
+
import: "./src/cli/service-auth/index.ts"
|
|
108638
|
+
},
|
|
108572
108639
|
"./binary-downloader": {
|
|
108573
108640
|
types: "./src/shared/binary-downloader.ts",
|
|
108574
108641
|
import: "./src/shared/binary-downloader.ts"
|
|
@@ -111582,24 +111649,98 @@ async function loginDevice(session, options) {
|
|
|
111582
111649
|
|
|
111583
111650
|
// packages/omo-opencode/src/cli/service-auth/keystore.ts
|
|
111584
111651
|
import { createHash as createHash9 } from "node:crypto";
|
|
111652
|
+
|
|
111653
|
+
// packages/omo-opencode/src/cli/service-auth/secret-service-lock.ts
|
|
111654
|
+
import { spawn as spawn5 } from "node:child_process";
|
|
111655
|
+
var DEFAULT_COLLECTION = "/org/freedesktop/secrets/aliases/default";
|
|
111656
|
+
var PROBE_TIMEOUT_MS2 = 1e4;
|
|
111657
|
+
var parseLockedReply = (stdout) => {
|
|
111658
|
+
const match = /<\s*(true|false)\s*>/.exec(stdout);
|
|
111659
|
+
if (match === null)
|
|
111660
|
+
return null;
|
|
111661
|
+
return match[1] === "true" ? "locked" : "unlocked";
|
|
111662
|
+
};
|
|
111663
|
+
var probeSecretServiceLock = () => new Promise((resolve) => {
|
|
111664
|
+
const child = spawn5("gdbus", [
|
|
111665
|
+
"call",
|
|
111666
|
+
"--session",
|
|
111667
|
+
"--dest",
|
|
111668
|
+
"org.freedesktop.secrets",
|
|
111669
|
+
"--object-path",
|
|
111670
|
+
DEFAULT_COLLECTION,
|
|
111671
|
+
"--method",
|
|
111672
|
+
"org.freedesktop.DBus.Properties.Get",
|
|
111673
|
+
"org.freedesktop.Secret.Collection",
|
|
111674
|
+
"Locked"
|
|
111675
|
+
], { stdio: ["ignore", "pipe", "ignore"] });
|
|
111676
|
+
let stdout = "";
|
|
111677
|
+
const timer = setTimeout(() => {
|
|
111678
|
+
child.kill();
|
|
111679
|
+
resolve("unknown");
|
|
111680
|
+
}, PROBE_TIMEOUT_MS2);
|
|
111681
|
+
child.stdout.on("data", (chunk) => {
|
|
111682
|
+
stdout += chunk.toString();
|
|
111683
|
+
});
|
|
111684
|
+
child.on("error", () => {
|
|
111685
|
+
clearTimeout(timer);
|
|
111686
|
+
resolve("unknown");
|
|
111687
|
+
});
|
|
111688
|
+
child.on("close", (code) => {
|
|
111689
|
+
clearTimeout(timer);
|
|
111690
|
+
resolve(code === 0 ? parseLockedReply(stdout) ?? "absent" : "absent");
|
|
111691
|
+
});
|
|
111692
|
+
});
|
|
111693
|
+
|
|
111694
|
+
// packages/omo-opencode/src/cli/service-auth/keystore.ts
|
|
111695
|
+
class KeychainLockedError extends SignInError {
|
|
111696
|
+
}
|
|
111697
|
+
var LOCKED = /-25308|errSecInteractionNotAllowed|interaction is not allowed|locked collection/i;
|
|
111698
|
+
var UNLOCKED_REUSE_MS = 30000;
|
|
111699
|
+
var fallbackNoticed = false;
|
|
111700
|
+
var stderrNoticeOncePerProcess = (message) => {
|
|
111701
|
+
if (fallbackNoticed)
|
|
111702
|
+
return;
|
|
111703
|
+
fallbackNoticed = true;
|
|
111704
|
+
process.stderr.write(`${message}
|
|
111705
|
+
`);
|
|
111706
|
+
};
|
|
111707
|
+
var isLocked = (error) => error instanceof Error && (LOCKED.test(error.message) || LOCKED.test(String(error.code ?? "")));
|
|
111585
111708
|
function credentialId(api) {
|
|
111586
111709
|
return createHash9("sha256").update(serviceOrigin(api)).digest("hex");
|
|
111587
111710
|
}
|
|
111588
|
-
function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform) {
|
|
111711
|
+
function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
|
|
111589
111712
|
if (!secrets)
|
|
111590
111713
|
throw new SignInError("OmO sign-in needs Bun 1.4 or newer with OS credential storage. No file fallback is available.");
|
|
111591
111714
|
const platformName = platform === "darwin" ? "macOS Keychain" : platform === "linux" ? "Linux Secret Service (libsecret and an unlocked keyring)" : platform === "win32" ? "Windows Credential Manager" : null;
|
|
111592
111715
|
if (platformName === null)
|
|
111593
111716
|
throw new SignInError("This platform has no supported OS credential store.");
|
|
111594
111717
|
const key = { service: "omo-cli", name: credentialId(api) };
|
|
111595
|
-
const unavailable = () => new SignInError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`);
|
|
111718
|
+
const unavailable = (error) => isLocked(error) ? new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`) : new SignInError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`);
|
|
111719
|
+
let unlockedUntil = 0;
|
|
111720
|
+
let noticed = false;
|
|
111721
|
+
const assertUsable = async () => {
|
|
111722
|
+
if (platform !== "linux" || Date.now() < unlockedUntil)
|
|
111723
|
+
return;
|
|
111724
|
+
const lock = await lockProbe();
|
|
111725
|
+
if (lock === "locked")
|
|
111726
|
+
throw new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`);
|
|
111727
|
+
if (lock === "unlocked") {
|
|
111728
|
+
unlockedUntil = Date.now() + UNLOCKED_REUSE_MS;
|
|
111729
|
+
return;
|
|
111730
|
+
}
|
|
111731
|
+
if (!noticed) {
|
|
111732
|
+
noticed = true;
|
|
111733
|
+
notice("omo: could not check whether the keyring is locked (gdbus or the Secret Service did not answer); using libsecret directly.");
|
|
111734
|
+
}
|
|
111735
|
+
};
|
|
111596
111736
|
return {
|
|
111597
111737
|
async read() {
|
|
111738
|
+
await assertUsable();
|
|
111598
111739
|
let value;
|
|
111599
111740
|
try {
|
|
111600
111741
|
value = await secrets.get(key);
|
|
111601
|
-
} catch {
|
|
111602
|
-
throw unavailable();
|
|
111742
|
+
} catch (error) {
|
|
111743
|
+
throw unavailable(error);
|
|
111603
111744
|
}
|
|
111604
111745
|
if (value === null)
|
|
111605
111746
|
return null;
|
|
@@ -111610,17 +111751,19 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
|
|
|
111610
111751
|
}
|
|
111611
111752
|
},
|
|
111612
111753
|
async write(value) {
|
|
111754
|
+
await assertUsable();
|
|
111613
111755
|
try {
|
|
111614
111756
|
await secrets.set({ ...key, value: JSON.stringify(credentialSchema.parse(value)) });
|
|
111615
|
-
} catch {
|
|
111616
|
-
throw unavailable();
|
|
111757
|
+
} catch (error) {
|
|
111758
|
+
throw unavailable(error);
|
|
111617
111759
|
}
|
|
111618
111760
|
},
|
|
111619
111761
|
async clear() {
|
|
111762
|
+
await assertUsable();
|
|
111620
111763
|
try {
|
|
111621
111764
|
await secrets.delete(key);
|
|
111622
|
-
} catch {
|
|
111623
|
-
throw unavailable();
|
|
111765
|
+
} catch (error) {
|
|
111766
|
+
throw unavailable(error);
|
|
111624
111767
|
}
|
|
111625
111768
|
}
|
|
111626
111769
|
};
|
|
@@ -111964,9 +112107,11 @@ async function reapStaleLock(lockPath, staleAfterMs = DEFAULT_STALE_AFTER_MS, de
|
|
|
111964
112107
|
// packages/omo-opencode/src/cli/service-auth/session.ts
|
|
111965
112108
|
class SessionEnded extends SignInError {
|
|
111966
112109
|
deviceRevoked;
|
|
111967
|
-
|
|
112110
|
+
code;
|
|
112111
|
+
constructor(message, deviceRevoked, code) {
|
|
111968
112112
|
super(message);
|
|
111969
112113
|
this.deviceRevoked = deviceRevoked;
|
|
112114
|
+
this.code = code;
|
|
111970
112115
|
}
|
|
111971
112116
|
}
|
|
111972
112117
|
var DEVICE_REVOKING_REFUSALS = new Set(["account_deleted", "reauth_required"]);
|
|
@@ -111998,7 +112143,7 @@ function createSession(options) {
|
|
|
111998
112143
|
} catch (error) {
|
|
111999
112144
|
if (error instanceof ApiRefusal && error.status < 500 && ["unauthorized", "account_deleted", "reauth_required", "invalid_grant"].includes(error.code)) {
|
|
112000
112145
|
await store.clear();
|
|
112001
|
-
throw new SessionEnded(error.code === "reauth_required" ? "This session was ended because its refresh token was reused. Sign in again with omo login." : "Sign in again with omo login.", DEVICE_REVOKING_REFUSALS.has(error.code));
|
|
112146
|
+
throw new SessionEnded(error.code === "reauth_required" ? "This session was ended because its refresh token was reused. Sign in again with omo login." : "Sign in again with omo login.", DEVICE_REVOKING_REFUSALS.has(error.code), error.code);
|
|
112002
112147
|
}
|
|
112003
112148
|
if (error instanceof RequestFailure && error.notSent || error instanceof ApiRefusal && error.status === 429 && error.code === "rate_limited") {
|
|
112004
112149
|
await store.write(current);
|
|
@@ -112016,6 +112161,9 @@ function createSession(options) {
|
|
|
112016
112161
|
async save(value) {
|
|
112017
112162
|
await locked(() => store.write(value));
|
|
112018
112163
|
},
|
|
112164
|
+
async update(action) {
|
|
112165
|
+
return locked(async () => action(await store.read()));
|
|
112166
|
+
},
|
|
112019
112167
|
async logout() {
|
|
112020
112168
|
return locked(async () => {
|
|
112021
112169
|
try {
|
|
@@ -112379,7 +112527,7 @@ async function boulder(options) {
|
|
|
112379
112527
|
return 0;
|
|
112380
112528
|
}
|
|
112381
112529
|
// packages/omo-opencode/src/cli/codex-ulw-loop.ts
|
|
112382
|
-
import { spawn as
|
|
112530
|
+
import { spawn as spawn6 } from "node:child_process";
|
|
112383
112531
|
import { existsSync as existsSync65, readFileSync as readFileSync43, realpathSync as realpathSync11 } from "node:fs";
|
|
112384
112532
|
import { homedir as homedir29 } from "node:os";
|
|
112385
112533
|
var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
|
|
@@ -112409,7 +112557,7 @@ async function codexUlwLoop(args) {
|
|
|
112409
112557
|
return 1;
|
|
112410
112558
|
}
|
|
112411
112559
|
const { promise, resolve } = Promise.withResolvers();
|
|
112412
|
-
const child =
|
|
112560
|
+
const child = spawn6(command.executable, [...command.argsPrefix, ...args], {
|
|
112413
112561
|
stdio: "inherit",
|
|
112414
112562
|
env: { ...process.env, [ULW_LOOP_DELEGATION_SENTINEL]: "1" }
|
|
112415
112563
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lazycodex-ai",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.43",
|
|
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",
|