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
package/README.pt-br.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
[English](README.md) | [简体中文](README.zh-cn.md) | [日本語](README.ja.md) | [Русский](README.ru.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-br.md) | [Italiano](README.it.md)
|
|
2
|
+
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> **OmO 5.0: OmO ❤️ Pi**
|
|
5
|
+
> Instale com `curl -fsSL https://get.omo.dev/install.sh | bash`. Sistema de memória, CodeMode, assinaturas da Anthropic, tudo incluso.
|
|
6
|
+
> [](https://github.com/jc01rho/omo-herdr-dag)
|
|
7
|
+
> *Basta digitar "mass ulw" com o seu prompt - agora você é o mestre da engenharia de grafos. O ultracode multimodelo, junto com um sistema de memória melhor. (O painel à direita é o [omo-herdr-dag](https://github.com/jc01rho/omo-herdr-dag).)*
|
|
8
|
+
|
|
9
|
+
> **Patrocinadores**
|
|
10
|
+
> Estes são os nossos patrocinadores. Eles ajudam a manter o OmO ativo como um projeto paralelo pessoal.
|
|
11
|
+
> | [<img alt="OpenGateway" src="./.github/assets/opengateway-logo.svg" width="156px" />](https://opengateway.ai/) | O **[OpenGateway](https://opengateway.ai/)** patrocina o OmO. Um gateway compatível com a OpenAI que reúne vários provedores de modelos em uma única API. Obrigado por apoiar o código aberto. |
|
|
12
|
+
> | :-----| :----- |
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
> [!NOTE]
|
|
16
|
+
>
|
|
17
|
+
> [](https://sisyphuslabs.ai)
|
|
18
|
+
> > **O OmO é mantido por Jobdori, o assistente de IA mostrado acima. Conheça seu próprio Jobdori, Dori. <br />Entre na lista de espera [aqui](https://sisyphuslabs.ai).**
|
|
19
|
+
|
|
20
|
+
> [!TIP]
|
|
21
|
+
> Junte-se a nós!
|
|
22
|
+
>
|
|
23
|
+
> | [<img alt="Discord link" src="https://img.shields.io/discord/1452487457085063218?color=5865F2&label=discord&labelColor=black&logo=discord&logoColor=white&style=flat-square" width="156px" />](https://discord.gg/PUwSMR9XNk) | Entre na nossa [comunidade no Discord](https://discord.gg/PUwSMR9XNk) para se conectar com contribuidores e outros usuários do OmO. |
|
|
24
|
+
> | :-----| :----- |
|
|
25
|
+
> | [<img alt="X link" src="https://img.shields.io/badge/Follow-%40justsisyphus-00CED1?style=flat-square&logo=x&labelColor=black" width="156px" />](https://x.com/justsisyphus) | As atualizações do OmO costumavam ser postadas na minha conta do X. <br /> Como ela foi suspensa por engano, [@justsisyphus](https://x.com/justsisyphus) agora posta atualizações em meu nome. |
|
|
26
|
+
> | [<img alt="GitHub Follow" src="https://img.shields.io/github/followers/code-yeongyu?style=flat-square&logo=github&labelColor=black&color=24292f" width="156px" />](https://github.com/code-yeongyu) | Siga [@code-yeongyu](https://github.com/code-yeongyu) no GitHub para mais projetos. |
|
|
27
|
+
|
|
28
|
+
<!-- <CENTERED SECTION FOR GITHUB DISPLAY> -->
|
|
29
|
+
|
|
30
|
+
<div align="center">
|
|
31
|
+
|
|
32
|
+
<a href="https://omo.dev"><img src="./.github/assets/omo-icon-light.svg" alt="OmO" width="200" /></a>
|
|
33
|
+
|
|
34
|
+
# OmO
|
|
35
|
+
|
|
36
|
+
**Sua ferramenta para trabalho de verdade. Mas é um agente.**
|
|
37
|
+
|
|
38
|
+
[](https://github.com/code-yeongyu/oh-my-openagent/releases)
|
|
39
|
+
[](https://omo.dev)
|
|
40
|
+
[](https://github.com/code-yeongyu/oh-my-openagent/graphs/contributors)
|
|
41
|
+
[](https://github.com/code-yeongyu/oh-my-openagent/stargazers)
|
|
42
|
+
[](https://github.com/code-yeongyu/oh-my-openagent/blob/dev/LICENSE.md)
|
|
43
|
+
[](https://omo.dev/docs)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<!-- </CENTERED SECTION FOR GITHUB DISPLAY> -->
|
|
49
|
+
|
|
50
|
+
O OmO é um único comando `omo` que transforma seus tokens em trabalho pronto: pesquisa em dez mil fontes, uma apresentação que as pessoas realmente entendem, backends, frontends, código. Ele roda no senpi, nosso fork do [pi](https://github.com/badlogic/pi-mono), com tudo o que está abaixo já integrado.
|
|
51
|
+
|
|
52
|
+
## Instalação
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
curl -fsSL https://get.omo.dev/install.sh | bash
|
|
56
|
+
omo
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
No Windows, no PowerShell: `irm https://get.omo.dev/install.ps1 | iex`. O script instala o binário nativo do `omo` para o seu SO e CPU em `~/.local/bin`, confere os checksums da versão e recorre ao GitHub Releases quando o espelho está inacessível. Adicione `-s -- beta` (ou uma versão como `-s -- 5.1.1`) após `bash` para escolher outro canal. O CMD do Windows, o ajuste do seu `PATH`, a atualização e a desinstalação são abordados em [omo.dev/docs/install](https://omo.dev/docs/install).
|
|
60
|
+
|
|
61
|
+
Prefere um gerenciador de pacotes? `bun add -g omo-ai` (ou `npm i -g omo-ai`) instala o mesmo OmO. O pacote é `omo-ai`; o pacote `omo` no npm não tem relação e pertence a outra pessoa.
|
|
62
|
+
|
|
63
|
+
Abra o seu projeto, execute `omo`, descreva a tarefa. Essa é toda a configuração.
|
|
64
|
+
|
|
65
|
+
Em uma sessão, `/thinking <level>` define o quanto o modelo pensa (`/thinking` sozinho abre um seletor), `Shift+Tab` alterna entre os níveis e `/efforts <level>` define o esforço de raciocínio diretamente em modelos com níveis de esforço. Para retomar um trabalho anterior, `/resume` (ou `/sessions`) abre suas sessões passadas; no shell, `omo -c` continua a última e `omo -r` abre o seletor. `/help` lista todo o resto.
|
|
66
|
+
|
|
67
|
+
Vindo da edição OpenCode ou do LazyCodex? Execute `omo setup` uma vez. Ele transfere suas chaves de provedor, provedores personalizados, servidores MCP, skills e escolhas de modelo. Em seguida, `omo doctor` mostra quais categorias de tarefas seus provedores podem executar e o que a instalação antiga deixou para trás. O passo a passo completo está em [Migrando do OpenCode](docs/guide/migrating-from-opencode.md).
|
|
68
|
+
|
|
69
|
+
Para atualizar, execute a linha de instalação novamente (uma instalação via gerenciador de pacotes atualiza com `omo update`). `rm ~/.local/bin/omo` remove a instalação do binário; `bun remove -g omo-ai` (ou `npm uninstall -g omo-ai`) remove a instalação do pacote.
|
|
70
|
+
|
|
71
|
+
## Por que o OmO
|
|
72
|
+
|
|
73
|
+
**ultrawork.** Pule o estudo. Se uma tarefa parecer difícil, adicione `ultrawork` (ou `ulw`) ao seu prompt. O agente lê a base de código antes de tocar em uma linha, planeja, comprova cada etapa antes de avançar, verifica o resultado na superfície real e para quando termina.
|
|
74
|
+
|
|
75
|
+
**Centenas de agentes, uma palavra-chave.** Digite `mass ulw` e todo o trabalho vira um grafo de agentes: pesquisa profunda em milhares de fontes, um pipeline completo de machine learning, uma migração que ninguém quer fazer. Cada parte roda no modelo mais adequado, em paralelo, e é verificada antes que qualquer coisa seja dada como pronta.
|
|
76
|
+
|
|
77
|
+
**Kibitzer. Seu agente não esquece de você, nem do seu trabalho.** A memória fica em um repositório git de arquivos markdown. Um modelo pequeno e barato fica ao lado do agente principal mais caro, lê o que você já fez e avisa o agente principal antes que ele repita um erro. Você para de se explicar repetidamente.
|
|
78
|
+
|
|
79
|
+
**Combine modelos sem pensar nisso.** Use os modelos de ponta que você adora junto com os mais baratos. Basta entrar: `/login` cobre assinaturas do Claude, ChatGPT, Kimi e GLM. Cada modelo já vem com um system prompt ajustado para ele, então você nunca escolhe o errado.
|
|
80
|
+
|
|
81
|
+
**Skills de alta qualidade, apenas as que você precisa.** Seu modelo é inteligente, mas ainda não sabe muito sobre como resolver problemas do mundo real. O OmO entrega o conhecimento que falta na forma de skills, incluindo uso do navegador, e carrega apenas o que a tarefa precisa.
|
|
82
|
+
|
|
83
|
+
**Todo o resto é pensado nos detalhes.** Chamadas de ferramentas independentes rodam juntas em um pequeno programa, então vinte leituras acontecem em uma única viagem de ida e volta. Argumentos de ferramentas malformados são reparados antes de rodar. Esperar por um build ou deploy funciona por inscrição, não por polling. Trabalhos longos mantêm um registro do que já foi verificado, para que uma sessão reiniciada continue de onde parou. Configurações, skills e prompts recarregam ao vivo.
|
|
84
|
+
|
|
85
|
+
## Configuração
|
|
86
|
+
|
|
87
|
+
Padrões opinativos, ajustáveis se você insistir. Suas configurações ficam em `~/.omo/omo.jsonc`, e um projeto pode adicionar seu próprio `.omo/omo.jsonc`; o arquivo mais próximo vence. Todas as chaves estão na [referência de configuração](docs/reference/configuration.md).
|
|
88
|
+
|
|
89
|
+
## Documentação
|
|
90
|
+
|
|
91
|
+
- [omo.dev/docs](https://omo.dev/docs)
|
|
92
|
+
- [Migrando do OpenCode](docs/guide/migrating-from-opencode.md)
|
|
93
|
+
- [Referência de configuração](docs/reference/configuration.md)
|
|
94
|
+
- [Recursos](docs/reference/features.md)
|
|
95
|
+
- [Uso do computador](docs/guide/computer-use.md) (experimental)
|
|
96
|
+
- [Manifesto Ultrawork](docs/manifesto.md)
|
|
97
|
+
|
|
98
|
+
## Avaliações
|
|
99
|
+
|
|
100
|
+
> "Me fez cancelar minha assinatura do Cursor. Coisas inacreditáveis estão acontecendo na comunidade open source." - [Arthur Guiot](https://x.com/arthur_guiot/status/2008736347092382053?s=20)
|
|
101
|
+
|
|
102
|
+
> "Se o Claude Code faz em 7 dias o que um humano faz em 3 meses, o OmO faz em 1 hora." <br/>- B, Pesquisador Quantitativo
|
|
103
|
+
|
|
104
|
+
> "Vocês deveriam integrar isso ao core e contratá-lo. Sério. É muito, muito, muito bom." <br/>- Henning Kilset
|
|
105
|
+
|
|
106
|
+
## Nota do Autor
|
|
107
|
+
|
|
108
|
+
Quando preciso tomar o volante de volta de um agente, isso não é trabalho em equipe. O sistema falhou. O OmO foi construído com base nessa ideia. Você diz o que quer; o agente pesquisa, planeja, escreve um código que você não conseguiria diferenciar do de um engenheiro sênior, faz a verificação e continua até terminar. Ele gasta tokens quando eles compram velocidade real e direciona as partes fáceis para modelos baratos.
|
|
109
|
+
|
|
110
|
+
Sou o usuário mais obcecado deste projeto. Qual modelo tem a lógica mais afiada? Quem escreve a melhor prosa? O que todo mundo lançou esta semana? O OmO é onde essas respostas vão parar. Tem um jeito melhor? PRs são bem-vindos.
|
|
111
|
+
|
|
112
|
+
O objetivo é um agente que você deixa de notar. Você aperta o interruptor, a luz acende. A versão longa está no [Manifesto Ultrawork](docs/manifesto.md).
|
|
113
|
+
|
|
114
|
+
Sem afiliação com nenhum projeto ou modelo mencionado. As ideias do Ultragoal e do UltraQA vêm do [oh-my-codex](https://github.com/Yeachan-Heo/oh-my-codex), reimplementadas a partir do conceito para o OmO.
|
|
115
|
+
|
|
116
|
+
## Amado por profissionais em
|
|
117
|
+
|
|
118
|
+
[Indent](https://indentcorp.com), criadores do Spray (solução de marketing de influência), vovushop (plataforma de comércio transfronteiriço) e vreview (solução de marketing de avaliações de comércio com IA). [Google](https://google.com). [Microsoft](https://microsoft.com). [Vercel](https://vercel.com). [ELESTYLE](https://elestyle.jp), criadores do elepay (gateway de pagamento multimóvel) e OneQR (SaaS de aplicativo móvel para soluções sem dinheiro em espécie). [Deepgram](https://deepgram.com).
|
package/README.ru.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
[English](README.md) | [简体中文](README.zh-cn.md) | [日本語](README.ja.md) | [Русский](README.ru.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-br.md) | [Italiano](README.it.md)
|
|
2
|
+
|
|
1
3
|
> [!NOTE]
|
|
2
4
|
> **OmO Бета: OmO ❤️ Pi**
|
|
3
5
|
> Установите одной командой `curl -fsSL https://get.omo.dev/install.sh | bash`: система памяти, CodeMode, подписки Anthropic. Всё включено.
|
|
@@ -41,7 +43,6 @@
|
|
|
41
43
|
[](https://github.com/code-yeongyu/oh-my-openagent/blob/dev/LICENSE.md)
|
|
42
44
|
[](https://omo.dev/docs)
|
|
43
45
|
|
|
44
|
-
[English](README.md) | [简体中文](README.zh-cn.md) | [日本語](README.ja.md) | [Русский](README.ru.md) | [한국어](README.ko.md)
|
|
45
46
|
|
|
46
47
|
</div>
|
|
47
48
|
|
package/README.zh-cn.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
[English](README.md) | [简体中文](README.zh-cn.md) | [日本語](README.ja.md) | [Русский](README.ru.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-br.md) | [Italiano](README.it.md)
|
|
2
|
+
|
|
1
3
|
> [!NOTE]
|
|
2
4
|
> **OmO 测试版: OmO ❤️ Pi**
|
|
3
5
|
> 使用 `curl -fsSL https://get.omo.dev/install.sh | bash` 安装。记忆系统、CodeMode、Anthropic 订阅,全部支持。
|
|
@@ -41,7 +43,6 @@
|
|
|
41
43
|
[](https://github.com/code-yeongyu/oh-my-openagent/blob/dev/LICENSE.md)
|
|
42
44
|
[](https://omo.dev/docs)
|
|
43
45
|
|
|
44
|
-
[English](README.md) | [简体中文](README.zh-cn.md) | [日本語](README.ja.md) | [Русский](README.ru.md) | [한국어](README.ko.md)
|
|
45
46
|
|
|
46
47
|
</div>
|
|
47
48
|
|
package/dist/cli/index.js
CHANGED
|
@@ -2132,7 +2132,7 @@ var package_default;
|
|
|
2132
2132
|
var init_package = __esm(() => {
|
|
2133
2133
|
package_default = {
|
|
2134
2134
|
name: "oh-my-opencode",
|
|
2135
|
-
version: "5.1.
|
|
2135
|
+
version: "5.1.43",
|
|
2136
2136
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2137
2137
|
main: "./dist/index.js",
|
|
2138
2138
|
types: "dist/index.d.ts",
|
|
@@ -2309,7 +2309,7 @@ var init_package = __esm(() => {
|
|
|
2309
2309
|
},
|
|
2310
2310
|
devDependencies: {
|
|
2311
2311
|
"@clack/prompts": "^1.8.1",
|
|
2312
|
-
"@code-yeongyu/senpi": "2026.10.21-
|
|
2312
|
+
"@code-yeongyu/senpi": "2026.10.21-2",
|
|
2313
2313
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
2314
2314
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
2315
2315
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -2370,18 +2370,18 @@ var init_package = __esm(() => {
|
|
|
2370
2370
|
typescript: "^7.0.2"
|
|
2371
2371
|
},
|
|
2372
2372
|
optionalDependencies: {
|
|
2373
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
2374
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
2375
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
2376
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
2377
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
2378
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
2379
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
2380
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
2381
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
2382
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
2383
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
2384
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
2373
|
+
"oh-my-opencode-darwin-arm64": "5.1.43",
|
|
2374
|
+
"oh-my-opencode-darwin-x64": "5.1.43",
|
|
2375
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.43",
|
|
2376
|
+
"oh-my-opencode-linux-arm64": "5.1.43",
|
|
2377
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.43",
|
|
2378
|
+
"oh-my-opencode-linux-x64": "5.1.43",
|
|
2379
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.43",
|
|
2380
|
+
"oh-my-opencode-linux-x64-musl": "5.1.43",
|
|
2381
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.43",
|
|
2382
|
+
"oh-my-opencode-windows-arm64": "5.1.43",
|
|
2383
|
+
"oh-my-opencode-windows-x64": "5.1.43",
|
|
2384
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.43"
|
|
2385
2385
|
},
|
|
2386
2386
|
overrides: {
|
|
2387
2387
|
hono: "^4.13.8",
|
|
@@ -76830,7 +76830,7 @@ var init_memory_agreements = __esm(() => {
|
|
|
76830
76830
|
});
|
|
76831
76831
|
|
|
76832
76832
|
// packages/omo-config-core/src/schema/memory.ts
|
|
76833
|
-
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;
|
|
76833
|
+
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;
|
|
76834
76834
|
var init_memory = __esm(() => {
|
|
76835
76835
|
init_zod();
|
|
76836
76836
|
init_memory_agreements();
|
|
@@ -76986,9 +76986,11 @@ var init_memory = __esm(() => {
|
|
|
76986
76986
|
projection: OmoMemoryProjectionLayerSchema.optional(),
|
|
76987
76987
|
compile_warn_tokens: number2().int().positive().optional()
|
|
76988
76988
|
}).strict();
|
|
76989
|
+
OmoMemoryAutoIdentitySchema = _enum(["path", "git"]);
|
|
76989
76990
|
OmoMemorySettingsSchema = object({
|
|
76990
76991
|
enabled: boolean2().default(true),
|
|
76991
76992
|
agent: string2().min(1).default("auto"),
|
|
76993
|
+
auto_identity: OmoMemoryAutoIdentitySchema.default("path"),
|
|
76992
76994
|
reflection: OmoMemoryReflectionSchema.default({
|
|
76993
76995
|
enabled: true,
|
|
76994
76996
|
trigger: { step_count: 25, on_compaction: true },
|
|
@@ -77030,6 +77032,7 @@ var init_memory = __esm(() => {
|
|
|
77030
77032
|
OmoMemorySettingsLayerSchema = object({
|
|
77031
77033
|
enabled: boolean2().optional(),
|
|
77032
77034
|
agent: string2().min(1).optional(),
|
|
77035
|
+
auto_identity: OmoMemoryAutoIdentitySchema.optional(),
|
|
77033
77036
|
reflection: OmoMemoryReflectionLayerSchema.optional(),
|
|
77034
77037
|
nudge: OmoMemoryNudgeLayerSchema.optional(),
|
|
77035
77038
|
facts: OmoMemoryFactsLayerSchema.optional(),
|
|
@@ -77079,6 +77082,7 @@ var init_model_profile = __esm(() => {
|
|
|
77079
77082
|
init_fallback_models();
|
|
77080
77083
|
OmoModelProfileInputSchema = object({
|
|
77081
77084
|
display_name: string2().optional(),
|
|
77085
|
+
caution: string2().optional(),
|
|
77082
77086
|
family: _enum(["daily", "geeky"]).optional(),
|
|
77083
77087
|
tier: _enum(["normal", "heavy"]).optional(),
|
|
77084
77088
|
models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
|
|
@@ -77372,7 +77376,7 @@ var init_gateway = __esm(() => {
|
|
|
77372
77376
|
});
|
|
77373
77377
|
|
|
77374
77378
|
// packages/omo-config-core/src/schema/config.ts
|
|
77375
|
-
var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
|
|
77379
|
+
var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoExcludedModelsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
|
|
77376
77380
|
var init_config = __esm(() => {
|
|
77377
77381
|
init_zod();
|
|
77378
77382
|
init_agent();
|
|
@@ -77390,6 +77394,7 @@ var init_config = __esm(() => {
|
|
|
77390
77394
|
init_gateway();
|
|
77391
77395
|
OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
|
|
77392
77396
|
OmoDisabledSkillsSchema = array(string2());
|
|
77397
|
+
OmoExcludedModelsSchema = array(string2());
|
|
77393
77398
|
OmoTypedHarnessConfigSchema = object({
|
|
77394
77399
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
77395
77400
|
gateway: OmoGatewaySectionSchema.optional(),
|
|
@@ -77405,7 +77410,8 @@ var init_config = __esm(() => {
|
|
|
77405
77410
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
77406
77411
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77407
77412
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77408
|
-
disabled_skills: OmoDisabledSkillsSchema.optional()
|
|
77413
|
+
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
77414
|
+
exclude_models: OmoExcludedModelsSchema.optional()
|
|
77409
77415
|
}).strict();
|
|
77410
77416
|
OmoConfigProfileSchema = object({
|
|
77411
77417
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
@@ -77422,6 +77428,7 @@ var init_config = __esm(() => {
|
|
|
77422
77428
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77423
77429
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77424
77430
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
77431
|
+
exclude_models: OmoExcludedModelsSchema.optional(),
|
|
77425
77432
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
77426
77433
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
77427
77434
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -77444,6 +77451,7 @@ var init_config = __esm(() => {
|
|
|
77444
77451
|
side_panel: OmoSidePanelSettingsSchema.optional(),
|
|
77445
77452
|
computer: OmoComputerSettingsSchema.optional(),
|
|
77446
77453
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
77454
|
+
exclude_models: OmoExcludedModelsSchema.optional(),
|
|
77447
77455
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
77448
77456
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
77449
77457
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -77469,6 +77477,7 @@ var init_config = __esm(() => {
|
|
|
77469
77477
|
side_panel: OmoSidePanelSettingsLayerSchema.optional(),
|
|
77470
77478
|
computer: OmoComputerSettingsLayerSchema.optional(),
|
|
77471
77479
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
77480
|
+
exclude_models: OmoExcludedModelsSchema.optional(),
|
|
77472
77481
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
77473
77482
|
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
77474
77483
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
@@ -77677,7 +77686,51 @@ var init_diagnostic_lines = __esm(() => {
|
|
|
77677
77686
|
});
|
|
77678
77687
|
|
|
77679
77688
|
// packages/omo-config-core/src/loader/disabled-skills.ts
|
|
77680
|
-
|
|
77689
|
+
function toRecord(value) {
|
|
77690
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
77691
|
+
return;
|
|
77692
|
+
return value;
|
|
77693
|
+
}
|
|
77694
|
+
function namesAt(record, key) {
|
|
77695
|
+
const value = record?.[key];
|
|
77696
|
+
if (!Array.isArray(value))
|
|
77697
|
+
return [];
|
|
77698
|
+
return value.filter((entry) => typeof entry === "string" && entry.trim() !== "");
|
|
77699
|
+
}
|
|
77700
|
+
function harnessBlockKeys(harness) {
|
|
77701
|
+
const canonical = canonicalHarnessName(harness);
|
|
77702
|
+
const legacy = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([name]) => harnessBlockKey(name));
|
|
77703
|
+
return [harnessBlockKey(canonical), ...legacy];
|
|
77704
|
+
}
|
|
77705
|
+
function scopesOf(config, harness) {
|
|
77706
|
+
if (harness === undefined)
|
|
77707
|
+
return [config];
|
|
77708
|
+
return [config, ...harnessBlockKeys(harness).map((key) => toRecord(config[key]))];
|
|
77709
|
+
}
|
|
77710
|
+
function collectExcludedModels(options) {
|
|
77711
|
+
return collectUnionedList("exclude_models", options);
|
|
77712
|
+
}
|
|
77713
|
+
function collectUnionedList(key, options) {
|
|
77714
|
+
const names = new Set;
|
|
77715
|
+
for (const layer of options.layers) {
|
|
77716
|
+
const config = toRecord(layer.config);
|
|
77717
|
+
if (config === undefined)
|
|
77718
|
+
continue;
|
|
77719
|
+
const profile = options.profile === undefined ? undefined : toRecord(toRecord(config["profiles"])?.[options.profile]);
|
|
77720
|
+
const scopes = [
|
|
77721
|
+
...scopesOf(config, options.harness),
|
|
77722
|
+
...profile === undefined ? [] : scopesOf(profile, options.harness)
|
|
77723
|
+
];
|
|
77724
|
+
for (const scope of scopes) {
|
|
77725
|
+
for (const name of namesAt(scope, key))
|
|
77726
|
+
names.add(name.trim());
|
|
77727
|
+
}
|
|
77728
|
+
}
|
|
77729
|
+
return [...names];
|
|
77730
|
+
}
|
|
77731
|
+
var init_disabled_skills = __esm(() => {
|
|
77732
|
+
init_schema();
|
|
77733
|
+
});
|
|
77681
77734
|
|
|
77682
77735
|
// packages/omo-config-core/src/loader/merge.ts
|
|
77683
77736
|
function isUnsafeObjectKey2(key) {
|
|
@@ -77913,7 +77966,7 @@ function stripUnrecognizedKeys(record, issues) {
|
|
|
77913
77966
|
}
|
|
77914
77967
|
return { issuePaths, stripped };
|
|
77915
77968
|
}
|
|
77916
|
-
function
|
|
77969
|
+
function toRecord2(value) {
|
|
77917
77970
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
77918
77971
|
return null;
|
|
77919
77972
|
const record = {};
|
|
@@ -77924,7 +77977,7 @@ function toRecord(value) {
|
|
|
77924
77977
|
}
|
|
77925
77978
|
function validateConfigLayer(path, data) {
|
|
77926
77979
|
const sanitized = sanitizeUnsafeKeys(data);
|
|
77927
|
-
const record =
|
|
77980
|
+
const record = toRecord2(sanitized.value);
|
|
77928
77981
|
const unsafeIssuePaths = sanitized.issues.flatMap((issue) => issue.keys.map((key) => [...issue.path, key].join(".")));
|
|
77929
77982
|
const unsafeDiagnostics = unsafeIssuePaths.length === 0 ? [] : [{ kind: "unknown-keys", message: `Ignored unknown keys in ${path}: ${unsafeIssuePaths.join(", ")}`, path, issuePaths: unsafeIssuePaths }];
|
|
77930
77983
|
const validation = OmoConfigLayerSchema.safeParse(sanitized.value);
|
|
@@ -78077,7 +78130,7 @@ function resolveOmoProfileName(options = {}) {
|
|
|
78077
78130
|
const env = options.env ?? process.env;
|
|
78078
78131
|
return profileName(options.profile) ?? profileName(env["OMO_PROFILE"]) ?? profileName(env["OCX_PROFILE"]) ?? profileNameFromOpenCodeConfigDir(env["OPENCODE_CONFIG_DIR"]);
|
|
78079
78132
|
}
|
|
78080
|
-
function
|
|
78133
|
+
function toRecord3(value) {
|
|
78081
78134
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
78082
78135
|
return;
|
|
78083
78136
|
return Object.fromEntries(Object.entries(value));
|
|
@@ -78098,13 +78151,13 @@ function harnessLayer(config, harness) {
|
|
|
78098
78151
|
const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
|
|
78099
78152
|
let layer = {};
|
|
78100
78153
|
for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
|
|
78101
|
-
layer = mergeOmoConfigRecords(layer,
|
|
78154
|
+
layer = mergeOmoConfigRecords(layer, toRecord3(config[key]) ?? {});
|
|
78102
78155
|
}
|
|
78103
78156
|
return layer;
|
|
78104
78157
|
}
|
|
78105
78158
|
function resolveOmoConfigView(options) {
|
|
78106
|
-
const profiles =
|
|
78107
|
-
const profile = options.profile === undefined ? undefined :
|
|
78159
|
+
const profiles = toRecord3(options.config["profiles"]);
|
|
78160
|
+
const profile = options.profile === undefined ? undefined : toRecord3(profiles?.[options.profile]);
|
|
78108
78161
|
const diagnostics = profile === undefined && options.profile !== undefined ? [{
|
|
78109
78162
|
kind: "profile",
|
|
78110
78163
|
message: `Activated omo profile "${options.profile}" does not exist; using the base configuration`,
|
|
@@ -78245,9 +78298,15 @@ function loadOmoConfig(options = {}) {
|
|
|
78245
78298
|
});
|
|
78246
78299
|
const finalInput = mergeOmoConfigRecords(DEFAULT_RAW_CONFIG, resolved.config);
|
|
78247
78300
|
const finalConfig = OmoConfigSchema.safeParse(finalInput);
|
|
78301
|
+
const excludeModels = collectExcludedModels({
|
|
78302
|
+
layers,
|
|
78303
|
+
...options.harness === undefined ? {} : { harness: options.harness },
|
|
78304
|
+
...resolved.profile === undefined ? {} : { profile: resolved.profile }
|
|
78305
|
+
});
|
|
78306
|
+
const withExcludedModels = (config) => excludeModels.length === 0 ? config : { ...config, exclude_models: [...excludeModels] };
|
|
78248
78307
|
if (finalConfig.success) {
|
|
78249
78308
|
return {
|
|
78250
|
-
config: stripResolutionControlKeys(finalConfig.data),
|
|
78309
|
+
config: withExcludedModels(stripResolutionControlKeys(finalConfig.data)),
|
|
78251
78310
|
diagnostics: [...diagnostics, ...resolved.diagnostics],
|
|
78252
78311
|
layers,
|
|
78253
78312
|
...resolved.profile === undefined ? {} : { profile: resolved.profile },
|
|
@@ -78260,7 +78319,7 @@ function loadOmoConfig(options = {}) {
|
|
|
78260
78319
|
});
|
|
78261
78320
|
if (pruned.ok) {
|
|
78262
78321
|
return {
|
|
78263
|
-
config: stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config)),
|
|
78322
|
+
config: withExcludedModels(stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config))),
|
|
78264
78323
|
diagnostics: [...diagnostics, ...resolved.diagnostics, ...invalidValueDiagnostics(MERGED_OMO_CONFIG_PATH, pruned.dropped)],
|
|
78265
78324
|
layers,
|
|
78266
78325
|
...resolved.profile === undefined ? {} : { profile: resolved.profile },
|
|
@@ -78279,6 +78338,7 @@ var DEFAULT_RAW_CONFIG;
|
|
|
78279
78338
|
var init_loader2 = __esm(() => {
|
|
78280
78339
|
init_main();
|
|
78281
78340
|
init_schema();
|
|
78341
|
+
init_disabled_skills();
|
|
78282
78342
|
init_layer_validation();
|
|
78283
78343
|
init_merge();
|
|
78284
78344
|
init_paths();
|
|
@@ -82388,6 +82448,8 @@ function toDiagnosticRecord(input, now) {
|
|
|
82388
82448
|
timestamp: now.toISOString(),
|
|
82389
82449
|
event: input.event,
|
|
82390
82450
|
source: input.source,
|
|
82451
|
+
...input.entryKind === undefined ? {} : { entry_kind: input.entryKind },
|
|
82452
|
+
...input.errorCode === undefined ? {} : { error_code: input.errorCode },
|
|
82391
82453
|
...input.count === undefined ? {} : { count: input.count },
|
|
82392
82454
|
...serializeError(input.error, input.errorKind)
|
|
82393
82455
|
};
|
|
@@ -92141,7 +92203,7 @@ var package_default2;
|
|
|
92141
92203
|
var init_package2 = __esm(() => {
|
|
92142
92204
|
package_default2 = {
|
|
92143
92205
|
name: "@oh-my-opencode/omo-codex",
|
|
92144
|
-
version: "5.1.
|
|
92206
|
+
version: "5.1.43",
|
|
92145
92207
|
type: "module",
|
|
92146
92208
|
private: true,
|
|
92147
92209
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -99448,6 +99510,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
99448
99510
|
join63("extensions", "CaseFolding.txt"),
|
|
99449
99511
|
join63("extensions", "omo-thread-client.js"),
|
|
99450
99512
|
join63("extensions", "omo-feedback.js"),
|
|
99513
|
+
join63("extensions", "omo-claim-receipt.js"),
|
|
99451
99514
|
join63("extensions", "assets.generated.json"),
|
|
99452
99515
|
join63("extensions", "omo-member.js"),
|
|
99453
99516
|
join63("extensions", "memory-run-supervisor.mjs"),
|
|
@@ -108490,6 +108553,10 @@ var package_default3 = {
|
|
|
108490
108553
|
types: "./src/config-migration/index.ts",
|
|
108491
108554
|
import: "./src/config-migration/index.ts"
|
|
108492
108555
|
},
|
|
108556
|
+
"./service-auth": {
|
|
108557
|
+
types: "./src/cli/service-auth/index.ts",
|
|
108558
|
+
import: "./src/cli/service-auth/index.ts"
|
|
108559
|
+
},
|
|
108493
108560
|
"./binary-downloader": {
|
|
108494
108561
|
types: "./src/shared/binary-downloader.ts",
|
|
108495
108562
|
import: "./src/shared/binary-downloader.ts"
|
|
@@ -111503,24 +111570,98 @@ async function loginDevice(session, options) {
|
|
|
111503
111570
|
|
|
111504
111571
|
// packages/omo-opencode/src/cli/service-auth/keystore.ts
|
|
111505
111572
|
import { createHash as createHash9 } from "crypto";
|
|
111573
|
+
|
|
111574
|
+
// packages/omo-opencode/src/cli/service-auth/secret-service-lock.ts
|
|
111575
|
+
import { spawn as spawn5 } from "child_process";
|
|
111576
|
+
var DEFAULT_COLLECTION = "/org/freedesktop/secrets/aliases/default";
|
|
111577
|
+
var PROBE_TIMEOUT_MS2 = 1e4;
|
|
111578
|
+
var parseLockedReply = (stdout) => {
|
|
111579
|
+
const match = /<\s*(true|false)\s*>/.exec(stdout);
|
|
111580
|
+
if (match === null)
|
|
111581
|
+
return null;
|
|
111582
|
+
return match[1] === "true" ? "locked" : "unlocked";
|
|
111583
|
+
};
|
|
111584
|
+
var probeSecretServiceLock = () => new Promise((resolve) => {
|
|
111585
|
+
const child = spawn5("gdbus", [
|
|
111586
|
+
"call",
|
|
111587
|
+
"--session",
|
|
111588
|
+
"--dest",
|
|
111589
|
+
"org.freedesktop.secrets",
|
|
111590
|
+
"--object-path",
|
|
111591
|
+
DEFAULT_COLLECTION,
|
|
111592
|
+
"--method",
|
|
111593
|
+
"org.freedesktop.DBus.Properties.Get",
|
|
111594
|
+
"org.freedesktop.Secret.Collection",
|
|
111595
|
+
"Locked"
|
|
111596
|
+
], { stdio: ["ignore", "pipe", "ignore"] });
|
|
111597
|
+
let stdout = "";
|
|
111598
|
+
const timer = setTimeout(() => {
|
|
111599
|
+
child.kill();
|
|
111600
|
+
resolve("unknown");
|
|
111601
|
+
}, PROBE_TIMEOUT_MS2);
|
|
111602
|
+
child.stdout.on("data", (chunk) => {
|
|
111603
|
+
stdout += chunk.toString();
|
|
111604
|
+
});
|
|
111605
|
+
child.on("error", () => {
|
|
111606
|
+
clearTimeout(timer);
|
|
111607
|
+
resolve("unknown");
|
|
111608
|
+
});
|
|
111609
|
+
child.on("close", (code) => {
|
|
111610
|
+
clearTimeout(timer);
|
|
111611
|
+
resolve(code === 0 ? parseLockedReply(stdout) ?? "absent" : "absent");
|
|
111612
|
+
});
|
|
111613
|
+
});
|
|
111614
|
+
|
|
111615
|
+
// packages/omo-opencode/src/cli/service-auth/keystore.ts
|
|
111616
|
+
class KeychainLockedError extends SignInError {
|
|
111617
|
+
}
|
|
111618
|
+
var LOCKED = /-25308|errSecInteractionNotAllowed|interaction is not allowed|locked collection/i;
|
|
111619
|
+
var UNLOCKED_REUSE_MS = 30000;
|
|
111620
|
+
var fallbackNoticed = false;
|
|
111621
|
+
var stderrNoticeOncePerProcess = (message) => {
|
|
111622
|
+
if (fallbackNoticed)
|
|
111623
|
+
return;
|
|
111624
|
+
fallbackNoticed = true;
|
|
111625
|
+
process.stderr.write(`${message}
|
|
111626
|
+
`);
|
|
111627
|
+
};
|
|
111628
|
+
var isLocked = (error) => error instanceof Error && (LOCKED.test(error.message) || LOCKED.test(String(error.code ?? "")));
|
|
111506
111629
|
function credentialId(api) {
|
|
111507
111630
|
return createHash9("sha256").update(serviceOrigin(api)).digest("hex");
|
|
111508
111631
|
}
|
|
111509
|
-
function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform) {
|
|
111632
|
+
function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
|
|
111510
111633
|
if (!secrets)
|
|
111511
111634
|
throw new SignInError("OmO sign-in needs Bun 1.4 or newer with OS credential storage. No file fallback is available.");
|
|
111512
111635
|
const platformName = platform === "darwin" ? "macOS Keychain" : platform === "linux" ? "Linux Secret Service (libsecret and an unlocked keyring)" : platform === "win32" ? "Windows Credential Manager" : null;
|
|
111513
111636
|
if (platformName === null)
|
|
111514
111637
|
throw new SignInError("This platform has no supported OS credential store.");
|
|
111515
111638
|
const key = { service: "omo-cli", name: credentialId(api) };
|
|
111516
|
-
const unavailable = () => new SignInError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`);
|
|
111639
|
+
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.`);
|
|
111640
|
+
let unlockedUntil = 0;
|
|
111641
|
+
let noticed = false;
|
|
111642
|
+
const assertUsable = async () => {
|
|
111643
|
+
if (platform !== "linux" || Date.now() < unlockedUntil)
|
|
111644
|
+
return;
|
|
111645
|
+
const lock = await lockProbe();
|
|
111646
|
+
if (lock === "locked")
|
|
111647
|
+
throw new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`);
|
|
111648
|
+
if (lock === "unlocked") {
|
|
111649
|
+
unlockedUntil = Date.now() + UNLOCKED_REUSE_MS;
|
|
111650
|
+
return;
|
|
111651
|
+
}
|
|
111652
|
+
if (!noticed) {
|
|
111653
|
+
noticed = true;
|
|
111654
|
+
notice("omo: could not check whether the keyring is locked (gdbus or the Secret Service did not answer); using libsecret directly.");
|
|
111655
|
+
}
|
|
111656
|
+
};
|
|
111517
111657
|
return {
|
|
111518
111658
|
async read() {
|
|
111659
|
+
await assertUsable();
|
|
111519
111660
|
let value;
|
|
111520
111661
|
try {
|
|
111521
111662
|
value = await secrets.get(key);
|
|
111522
|
-
} catch {
|
|
111523
|
-
throw unavailable();
|
|
111663
|
+
} catch (error) {
|
|
111664
|
+
throw unavailable(error);
|
|
111524
111665
|
}
|
|
111525
111666
|
if (value === null)
|
|
111526
111667
|
return null;
|
|
@@ -111531,17 +111672,19 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
|
|
|
111531
111672
|
}
|
|
111532
111673
|
},
|
|
111533
111674
|
async write(value) {
|
|
111675
|
+
await assertUsable();
|
|
111534
111676
|
try {
|
|
111535
111677
|
await secrets.set({ ...key, value: JSON.stringify(credentialSchema.parse(value)) });
|
|
111536
|
-
} catch {
|
|
111537
|
-
throw unavailable();
|
|
111678
|
+
} catch (error) {
|
|
111679
|
+
throw unavailable(error);
|
|
111538
111680
|
}
|
|
111539
111681
|
},
|
|
111540
111682
|
async clear() {
|
|
111683
|
+
await assertUsable();
|
|
111541
111684
|
try {
|
|
111542
111685
|
await secrets.delete(key);
|
|
111543
|
-
} catch {
|
|
111544
|
-
throw unavailable();
|
|
111686
|
+
} catch (error) {
|
|
111687
|
+
throw unavailable(error);
|
|
111545
111688
|
}
|
|
111546
111689
|
}
|
|
111547
111690
|
};
|
|
@@ -111885,9 +112028,11 @@ async function reapStaleLock(lockPath, staleAfterMs = DEFAULT_STALE_AFTER_MS, de
|
|
|
111885
112028
|
// packages/omo-opencode/src/cli/service-auth/session.ts
|
|
111886
112029
|
class SessionEnded extends SignInError {
|
|
111887
112030
|
deviceRevoked;
|
|
111888
|
-
|
|
112031
|
+
code;
|
|
112032
|
+
constructor(message, deviceRevoked, code) {
|
|
111889
112033
|
super(message);
|
|
111890
112034
|
this.deviceRevoked = deviceRevoked;
|
|
112035
|
+
this.code = code;
|
|
111891
112036
|
}
|
|
111892
112037
|
}
|
|
111893
112038
|
var DEVICE_REVOKING_REFUSALS = new Set(["account_deleted", "reauth_required"]);
|
|
@@ -111919,7 +112064,7 @@ function createSession(options) {
|
|
|
111919
112064
|
} catch (error) {
|
|
111920
112065
|
if (error instanceof ApiRefusal && error.status < 500 && ["unauthorized", "account_deleted", "reauth_required", "invalid_grant"].includes(error.code)) {
|
|
111921
112066
|
await store.clear();
|
|
111922
|
-
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));
|
|
112067
|
+
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);
|
|
111923
112068
|
}
|
|
111924
112069
|
if (error instanceof RequestFailure && error.notSent || error instanceof ApiRefusal && error.status === 429 && error.code === "rate_limited") {
|
|
111925
112070
|
await store.write(current);
|
|
@@ -111937,6 +112082,9 @@ function createSession(options) {
|
|
|
111937
112082
|
async save(value) {
|
|
111938
112083
|
await locked(() => store.write(value));
|
|
111939
112084
|
},
|
|
112085
|
+
async update(action) {
|
|
112086
|
+
return locked(async () => action(await store.read()));
|
|
112087
|
+
},
|
|
111940
112088
|
async logout() {
|
|
111941
112089
|
return locked(async () => {
|
|
111942
112090
|
try {
|
|
@@ -112300,7 +112448,7 @@ async function boulder(options) {
|
|
|
112300
112448
|
return 0;
|
|
112301
112449
|
}
|
|
112302
112450
|
// packages/omo-opencode/src/cli/codex-ulw-loop.ts
|
|
112303
|
-
import { spawn as
|
|
112451
|
+
import { spawn as spawn6 } from "child_process";
|
|
112304
112452
|
import { existsSync as existsSync65, readFileSync as readFileSync43, realpathSync as realpathSync11 } from "fs";
|
|
112305
112453
|
import { homedir as homedir29 } from "os";
|
|
112306
112454
|
var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
|
|
@@ -112330,7 +112478,7 @@ async function codexUlwLoop(args) {
|
|
|
112330
112478
|
return 1;
|
|
112331
112479
|
}
|
|
112332
112480
|
const { promise, resolve } = Promise.withResolvers();
|
|
112333
|
-
const child =
|
|
112481
|
+
const child = spawn6(command.executable, [...command.argsPrefix, ...args], {
|
|
112334
112482
|
stdio: "inherit",
|
|
112335
112483
|
env: { ...process.env, [ULW_LOOP_DELEGATION_SENTINEL]: "1" }
|
|
112336
112484
|
});
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
|
|
2
|
-
declare const get: () => Promise<string | null>;
|
|
3
|
-
declare const set: ({ value }: {
|
|
4
|
-
readonly value: string;
|
|
5
|
-
}) => Promise<void>;
|
|
6
|
-
declare const remove: () => Promise<boolean>;
|
|
7
|
-
declare const failure: string | undefined;
|
|
1
|
+
export {};
|