@hiperplano/aluy-cli 1.0.0-rc.181 → 1.0.0-rc.182
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.md +75 -72
- package/dist-bundle/bin/aluy.js +2 -2
- package/dist-bundle/index.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,110 +5,113 @@
|
|
|
5
5
|
</picture>
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
|
-
<
|
|
8
|
+
<p align="center">
|
|
9
|
+
<b>Um agente de terminal que roda na sua máquina, com a sua chave.</b><br>
|
|
10
|
+
Sem intermediário, sem metering, sem mandar o seu código para o servidor de ninguém.
|
|
11
|
+
</p>
|
|
9
12
|
|
|
10
13
|
<p align="center">
|
|
11
|
-
|
|
14
|
+
<a href="https://www.npmjs.com/package/@hiperplano/aluy-cli"><img alt="npm" src="https://img.shields.io/npm/v/@hiperplano/aluy-cli?color=%23cc3534&label=npm"></a>
|
|
15
|
+
<a href="LICENSE"><img alt="Licença MIT" src="https://img.shields.io/badge/licen%C3%A7a-MIT-blue"></a>
|
|
16
|
+
<a href="https://github.com/hiperplano/aluy-cli/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/hiperplano/aluy-cli/actions/workflows/ci.yml/badge.svg?branch=main"></a>
|
|
17
|
+
<img alt="Node >= 20" src="https://img.shields.io/node/v/@hiperplano/aluy-cli">
|
|
18
|
+
<img alt="Linux · macOS · Windows" src="https://img.shields.io/badge/-Linux%20%C2%B7%20macOS%20%C2%B7%20Windows-informational">
|
|
12
19
|
</p>
|
|
13
20
|
|
|
14
21
|
---
|
|
15
22
|
|
|
16
|
-
O **Aluy CLI** é um agente de terminal: ele lê e edita arquivos, executa
|
|
17
|
-
comandos, busca no seu código e conduz seu próprio **loop de ferramentas** — tudo
|
|
18
|
-
numa TUI rica, com uma **engine de permissão** onde todo efeito passa por uma
|
|
19
|
-
catraca antes de acontecer.
|
|
20
|
-
|
|
21
|
-
Você usa o **seu próprio modelo** (BYO): qualquer provider compatível com a API da
|
|
22
|
-
OpenAI, com a sua própria credencial — direto, sem intermediário e sem metering.
|
|
23
|
-
_(Por enquanto o aluy roda só local, com a sua chave.)_
|
|
24
|
-
|
|
25
|
-
## Instalação
|
|
26
|
-
|
|
27
23
|
```bash
|
|
28
24
|
npm install -g @hiperplano/aluy-cli
|
|
29
|
-
aluy onboard #
|
|
25
|
+
aluy onboard # instalador guiado: idioma, provider, modelo
|
|
30
26
|
aluy # abre a sessão
|
|
31
27
|
```
|
|
32
28
|
|
|
33
|
-
O
|
|
34
|
-
|
|
35
|
-
opcionais. Funciona em **Linux, macOS e Windows** — o terminal recomendado é o
|
|
36
|
-
[WezTerm](https://wezterm.org), mas qualquer terminal moderno serve.
|
|
37
|
-
|
|
38
|
-
## Uso
|
|
29
|
+
O **Aluy CLI** lê e edita arquivos, executa comandos, busca no seu código e conduz
|
|
30
|
+
o próprio loop de ferramentas numa TUI rica. Você aponta o objetivo; ele trabalha.
|
|
39
31
|
|
|
40
32
|
```bash
|
|
41
|
-
aluy
|
|
42
|
-
aluy "
|
|
43
|
-
aluy
|
|
44
|
-
aluy --
|
|
45
|
-
aluy --continue # retoma a sessão mais recente deste diretório
|
|
33
|
+
aluy "migre os testes de jest para vitest" # um objetivo, e acompanhe
|
|
34
|
+
aluy -p "liste os TODOs" --output-format json # headless, para script e CI
|
|
35
|
+
aluy --plan "como eu quebraria esse módulo?" # só lê e analisa, zero efeito
|
|
36
|
+
aluy --continue # retoma de onde parou
|
|
46
37
|
```
|
|
47
38
|
|
|
48
|
-
|
|
39
|
+
## Por que este, e não outro
|
|
49
40
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
| `/rename` · `/theme` · `/lang` | nome+cor da sessão, tema, idioma |
|
|
57
|
-
| `/memory` · `/compact` · `/history` | memória, compactação de contexto, histórico |
|
|
41
|
+
**A chave é sua, e o caminho é direto.** Nove providers no catálogo — Anthropic,
|
|
42
|
+
OpenAI, OpenRouter, Google, DeepSeek, Groq, Mistral, xAI e Ollama — ou qualquer
|
|
43
|
+
endpoint compatível com a API da OpenAI. Não há servidor nosso no meio: o seu
|
|
44
|
+
código e o seu prompt vão do seu terminal para o provider que **você** escolheu.
|
|
45
|
+
A credencial nunca fica em claro — vai para o keychain do SO ou, onde ele não
|
|
46
|
+
existe, para um cofre cifrado que não funciona em outra máquina.
|
|
58
47
|
|
|
59
|
-
|
|
48
|
+
**Uma catraca, e só uma.** Todo tool-call passa por um ponto único de
|
|
49
|
+
interceptação antes de virar efeito, com negação por padrão. Não é uma convenção:
|
|
50
|
+
é uma fronteira travada no lint e coberta por teste, e a engine que a hospeda não
|
|
51
|
+
pode nem importar a TUI. Quando você quiser velocidade em vez de perguntas, o
|
|
52
|
+
`--yolo` existe; quando quiser o contrário, o `--plan` deixa tudo read-only.
|
|
60
53
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
A credencial fica **só no keychain do SO** (macOS Keychain · Windows Credential
|
|
66
|
-
Manager · Linux Secret Service) — nunca em arquivo, `.env` ou log.
|
|
67
|
-
- **MCP** — conecta servers MCP (`~/.aluy/mcp.json` global e `.mcp.json` do projeto),
|
|
68
|
-
compatível com o ecossistema; o onboard ainda oferece pré-instalar alguns (Playwright,
|
|
69
|
-
Filesystem, Memory, …).
|
|
70
|
-
- **Complementos opcionais** (modo turbo) — memória persistente, modelos locais via
|
|
71
|
-
Ollama e gestão de contexto, instaláveis no onboard ou depois com `aluy bootstrap`.
|
|
72
|
-
Guia completo (instalação, problemas comuns, instalação manual): [docs/turbo.md](docs/turbo.md).
|
|
54
|
+
**O trabalho continua sem você.** Um serviço é um diretório com um `service.md`:
|
|
55
|
+
horário, orçamento, autonomia e canal. Ele acorda sozinho, abre um turno, respeita
|
|
56
|
+
o teto de tokens — e, quando precisa de uma decisão que não é dele, **pergunta pelo
|
|
57
|
+
Telegram e espera**, em vez de chutar. Você responde do celular e ele retoma.
|
|
73
58
|
|
|
74
|
-
|
|
59
|
+
**Fala com o resto do ecossistema.** Servers MCP (globais e por projeto), sub-agentes
|
|
60
|
+
em `.md`, skills, workflows, hooks e plugins. E ele lê o `AGENTS.md` e o `CLAUDE.md`
|
|
61
|
+
do seu repositório junto com o `ALUY.md` — eles compõem, não competem, então adotar
|
|
62
|
+
o aluy não obriga a reescrever o que você já tem.
|
|
75
63
|
|
|
76
|
-
|
|
64
|
+
## Documentação
|
|
77
65
|
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
| `
|
|
66
|
+
| | |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| [Comandos](docs/comandos.md) | subcomandos, flags e os 46 slash-commands |
|
|
69
|
+
| [Configuração](docs/configuracao.md) | `~/.aluy/`, precedência, hooks, arquivos de projeto |
|
|
70
|
+
| [Serviços](docs/comandos.md#serviços) | o `service.md` e o runner contínuo |
|
|
71
|
+
| [MCP](docs/mcp.md) | conectar servers, e o que isso implica |
|
|
72
|
+
| [Modo turbo](docs/turbo.md) | memória persistente, Ollama, gestão de contexto |
|
|
73
|
+
| [Compatibilidade](docs/config-compat.md) | conviver com a config de outros agentes |
|
|
83
74
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
commands e skills.
|
|
75
|
+
`aluy --help` traz tudo isso no terminal, e `aluy doctor` diz o que está quebrado
|
|
76
|
+
e como consertar.
|
|
87
77
|
|
|
88
|
-
##
|
|
78
|
+
## Segurança
|
|
89
79
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
| **`@hiperplano/aluy-cli-core`** | Engine **portável** do agente (loop · tools · permissão). Sem Ink, sem I/O de terminal. Hospeda o ponto único de interceptação de tool-calls. |
|
|
93
|
-
| **`@hiperplano/aluy-cli`** | TUI (**Ink**) + binário **`aluy`** + wiring. Consome `@hiperplano/aluy-cli-core`. |
|
|
80
|
+
O aluy roda **na sua máquina, com os seus privilégios**. Três coisas que vale saber
|
|
81
|
+
antes de usar:
|
|
94
82
|
|
|
95
|
-
|
|
96
|
-
|
|
83
|
+
- Um **server MCP** de terceiro roda com os seus privilégios e **sem sandbox** — ele
|
|
84
|
+
pode ler o seu filesystem. Plugue só os que você confia.
|
|
85
|
+
- O **`--yolo`** aprova tudo automaticamente. É útil e é perigoso; a escolha é sua.
|
|
86
|
+
- Credencial **nunca** vai para arquivo em claro, log ou `.env`, e o `gitleaks` roda
|
|
87
|
+
na CI para garantir que nenhuma vaze para o repositório.
|
|
97
88
|
|
|
98
|
-
|
|
89
|
+
Encontrou uma vulnerabilidade? Abra uma
|
|
90
|
+
[issue](https://github.com/hiperplano/aluy-cli/issues) marcando como sensível, ou
|
|
91
|
+
fale com os mantenedores antes de divulgar.
|
|
92
|
+
|
|
93
|
+
## Contribuir
|
|
94
|
+
|
|
95
|
+
PRs são bem-vindos. O [CONTRIBUTING.md](CONTRIBUTING.md) tem o essencial:
|
|
99
96
|
|
|
100
97
|
```bash
|
|
101
|
-
|
|
102
|
-
npm
|
|
103
|
-
npm run lint
|
|
98
|
+
git clone https://github.com/hiperplano/aluy-cli && cd aluy-cli
|
|
99
|
+
npm install && npm run build
|
|
104
100
|
npm test
|
|
105
|
-
node packages/cli/dist/bin/aluy.js --help
|
|
106
101
|
```
|
|
107
102
|
|
|
108
|
-
|
|
103
|
+
Duas regras que não relaxamos: **a CI é honesta** (nada de `|| true` ou
|
|
104
|
+
`continue-on-error` — gate vermelho bloqueia o merge) e **a fronteira do core é
|
|
105
|
+
real** (`@hiperplano/aluy-cli-core` não importa Ink nem faz I/O de terminal,
|
|
106
|
+
travado no eslint e em teste).
|
|
107
|
+
|
|
108
|
+
O histórico de cada versão está no [CHANGELOG.md](CHANGELOG.md).
|
|
109
|
+
|
|
110
|
+
## Estado
|
|
109
111
|
|
|
110
|
-
|
|
112
|
+
`1.0.0-rc` — em uso diário, com release frequente. A superfície de comandos está
|
|
113
|
+
estável; o que ainda muda vem anotado no CHANGELOG a cada rc.
|
|
111
114
|
|
|
112
115
|
## Licença
|
|
113
116
|
|
|
114
|
-
MIT
|
|
117
|
+
[MIT](LICENSE) © Hiperplano
|
package/dist-bundle/bin/aluy.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var k9=Object.create;var fS=Object.defineProperty;var x9=Object.getOwnPropertyDescriptor;var S9=Object.getOwnPropertyNames;var w9=Object.getPrototypeOf,A9=Object.prototype.hasOwnProperty;var g=(e,t,o)=>()=>{if(o)throw o[0];try{return e&&(t=e(e=0)),t}catch(n){throw o=[n],n}};var E9=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(o){throw t=0,o}},At=(e,t)=>{for(var o in t)fS(e,o,{get:t[o],enumerable:!0})},C9=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of S9(t))!A9.call(e,r)&&r!==o&&fS(e,r,{get:()=>t[r],enumerable:!(n=x9(t,r))||n.enumerable});return e};var T9=(e,t,o)=>(o=e!=null?k9(w9(e)):{},C9(t||!e||!e.__esModule?fS(o,"default",{value:e,enumerable:!0}):o,e));import{homedir as D9}from"node:os";import{join as R9}from"node:path";function Qa(e=D9()){return R9(e,".aluy")}var cm=g(()=>{"use strict"});var dm,aM=g(()=>{"use strict";dm="1.0.0-rc.
|
|
2
|
+
var k9=Object.create;var fS=Object.defineProperty;var x9=Object.getOwnPropertyDescriptor;var S9=Object.getOwnPropertyNames;var w9=Object.getPrototypeOf,A9=Object.prototype.hasOwnProperty;var g=(e,t,o)=>()=>{if(o)throw o[0];try{return e&&(t=e(e=0)),t}catch(n){throw o=[n],n}};var E9=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(o){throw t=0,o}},At=(e,t)=>{for(var o in t)fS(e,o,{get:t[o],enumerable:!0})},C9=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of S9(t))!A9.call(e,r)&&r!==o&&fS(e,r,{get:()=>t[r],enumerable:!(n=x9(t,r))||n.enumerable});return e};var T9=(e,t,o)=>(o=e!=null?k9(w9(e)):{},C9(t||!e||!e.__esModule?fS(o,"default",{value:e,enumerable:!0}):o,e));import{homedir as D9}from"node:os";import{join as R9}from"node:path";function Qa(e=D9()){return R9(e,".aluy")}var cm=g(()=>{"use strict"});var dm,aM=g(()=>{"use strict";dm="1.0.0-rc.182"});function _r(e,t){return e.decide(t)}var Za=g(()=>{"use strict"});var bi,Zi,es=g(()=>{"use strict";bi="remember",Zi="recall"});var pS,_9,jc,gS=g(()=>{"use strict";pS=class{id;horizon;label;parentId;children;dependencies;pinned;closed;createdAt;lastAccessedAt;accessCount;context;constructor(t,o,n,r,i){this.id=t,this.horizon=o,this.label=n,this.parentId=r,this.children=new Set,this.dependencies=new Set,this.pinned=!1,this.closed=!1,this.createdAt=i,this.lastAccessedAt=i,this.accessCount=0,this.context=[]}touch(t){this.lastAccessedAt=t,this.accessCount+=1}snapshot(){return{id:this.id,horizon:this.horizon,label:this.label,parentId:this.parentId,children:[...this.children],dependencies:[...this.dependencies],pinned:this.pinned,closed:this.closed,createdAt:this.createdAt,lastAccessedAt:this.lastAccessedAt,accessCount:this.accessCount,contextSize:this.context.length}}},_9=200,jc=class{nodes=new Map;maxBoxes;now;constructor(t){this.maxBoxes=t?.maxBoxes??_9,this.now=t?.clock??Date.now}static boxId(t,o){return`${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,60)}-${o.toString(36)}`}openBox(t,o,n,r){let i=this.nodes.get(t);if(i)return i.touch(this.now()),{box:i.snapshot(),created:!1};if(this.nodes.size>=this.maxBoxes&&(this.evictOne(),this.nodes.size>=this.maxBoxes))return null;let s=this.now(),a=new pS(t,o,n,r??null,s);if(r){let l=this.nodes.get(r);l&&l.children.add(t)}return this.nodes.set(t,a),{box:a.snapshot(),created:!0}}closeBox(t){let o=this.nodes.get(t);return o?(o.closed=!0,o.touch(this.now()),o.snapshot()):null}isClosed(t){let o=this.nodes.get(t);return o?o.closed:!1}reopenBox(t){let o=this.nodes.get(t);return o?(o.closed=!1,o.touch(this.now()),o.snapshot()):null}setHorizon(t,o){let n=this.nodes.get(t);return n?(n.horizon=o,n.touch(this.now()),n.snapshot()):null}setParent(t,o){let n=this.nodes.get(t);return n?n.parentId===o?n.snapshot():o!==null&&this.wouldCreateCycle(t,o)?null:(n.parentId&&this.nodes.get(n.parentId)?.children.delete(t),n.parentId=o,o&&this.nodes.get(o)?.children.add(t),n.touch(this.now()),n.snapshot()):null}wouldCreateCycle(t,o){let n=new Set,r=o;for(;r!==null;){if(r===t||n.has(r))return!0;n.add(r),r=this.nodes.get(r)?.parentId??null}return!1}getBox(t){let o=this.nodes.get(t);return o?(o.touch(this.now()),o.snapshot()):null}listBoxes(t="lastAccessedAt"){let o=[...this.nodes.values()].map(n=>n.snapshot());switch(t){case"createdAt":return o.sort((n,r)=>n.createdAt-r.createdAt);case"accessCount":return o.sort((n,r)=>r.accessCount-n.accessCount);default:return o.sort((n,r)=>r.lastAccessedAt-n.lastAccessedAt)}}get size(){return this.nodes.size}addContext(t,o){let n=this.nodes.get(t);return n?(n.context.push({ts:this.now(),text:o}),n.touch(this.now()),n.snapshot()):null}getContext(t){let o=this.nodes.get(t);return o?(o.touch(this.now()),[...o.context]):[]}getContextChain(t){let o=[],n=new Set,r=t;for(;r&&!n.has(r);){n.add(r);let i=this.nodes.get(r);if(!i)break;i.touch(this.now()),o.push({boxId:i.id,entries:[...i.context]}),r=i.parentId}return o}addDependency(t,o){let n=this.nodes.get(t);return!n||!this.nodes.has(o)||n.id===o?!1:(n.dependencies.add(o),n.touch(this.now()),!0)}getDependencies(t){let o=this.nodes.get(t);return o?[...o.dependencies]:[]}pinBox(t){let o=this.nodes.get(t);return o?(o.pinned=!0,o.touch(this.now()),o.snapshot()):null}unpinBox(t){let o=this.nodes.get(t);return o?(o.pinned=!1,o.touch(this.now()),o.snapshot()):null}evictOne(){let t=[];for(let n of this.nodes.values())n.horizon==="longo"||n.pinned||t.push(n);if(t.length===0)return null;t.sort((n,r)=>{let i=n.horizon==="curto"?0:1,s=r.horizon==="curto"?0:1;if(i!==s)return i-s;let a=n.closed?0:1,l=r.closed?0:1;return a!==l?a-l:n.lastAccessedAt!==r.lastAccessedAt?n.lastAccessedAt-r.lastAccessedAt:n.accessCount-r.accessCount});let o=t[0];return this.removeNode(o)}forceEvict(t){let o=this.nodes.get(t);return!o||o.horizon==="longo"||o.pinned?null:this.removeNode(o)}removeBox(t){let o=this.nodes.get(t);return o?this.removeNode(o):null}removeNode(t){if(t.parentId){let o=this.nodes.get(t.parentId);o&&o.children.delete(t.id)}return this.nodes.delete(t.id),t.snapshot()}}});function vi(e,t){for(let o of t){let n=e[o];if(typeof n=="string")return n;if(typeof n=="number"&&Number.isFinite(n))return String(n)}}function jn(e,t){let o=vi(e,t);return o!==void 0&&o.length>0?o:void 0}function hS(e,t,o=!1){let n=e[t];if(typeof n=="boolean")return n;if(typeof n=="string"){let r=n.trim().toLowerCase();if(r==="true")return!0;if(r==="false")return!1}return o}function O9(e){if(Array.isArray(e))return e;if(typeof e=="string"){let t=e.trim();if(t.startsWith("["))try{let o=JSON.parse(t);if(Array.isArray(o))return o}catch{}return}if(e!==null&&typeof e=="object"){let t=e,o=Object.keys(t);if(o.length>0&&o.every(n=>/^\d+$/.test(n)))return o.sort((n,r)=>Number(n)-Number(r)).map(n=>t[n])}}function qc(e,t){for(let o of t){let n=O9(e[o]);if(n!==void 0)return n}}function Et(e){let t=Object.keys(e);return t.length===0?"nenhum argumento":t.slice(0,4).map(n=>{let r=e[n],i=r===null?"null":Array.isArray(r)?"array":typeof r,s=typeof r=="string"?` ${JSON.stringify(r.slice(0,40))}`:"";return`${n}=${i}${s}`}).join(", ")}function el(e){for(let t of M9){let o=e[t];if(typeof o=="object"&&o!==null&&!Array.isArray(o))return o;if(typeof o!="string")continue;let n=o.trim();if(!(n===""||!n.startsWith("{")))try{let r=JSON.parse(n);if(typeof r=="object"&&r!==null&&!Array.isArray(r))return r}catch{}}return e}var M9,ts=g(()=>{"use strict";M9=["input","arguments","args","params","parameters","body","payload"]});function Ih(e){let t=[];for(let o of e){t.push({step:o,depth:0});for(let n of o.substeps??[])t.push({step:n,depth:1})}return t}function uM(e,t){let o,n="pending",r;if(typeof e=="string")o=e;else if(e!==null&&typeof e=="object"){let s=e,a=s.title??s.step??s.text??s.name??s.content;if(typeof a=="string"&&(o=a),typeof s.status=="string"&&P9.has(s.status)&&(n=s.status),t){let l=s.substeps??s.subtasks??s.subpassos??s.children;if(Array.isArray(l)&&l.length>0){let c=[];for(let d of l){let m=uM(d,!1);if(typeof m=="string")return m;c.push(m)}r=c}}}if(o===void 0||o.trim()==="")return I9;let i=o.trim().slice(0,L9);return r?{title:i,status:n,substeps:r}:{title:i,status:n}}function mM(e){let t=qc(e,lM);if(t!==void 0)return t;for(let o of lM){let n=e[o];if(n===null||typeof n!="object"||Array.isArray(n))continue;let r=mM(n);if(r!==void 0)return r}}function N9(e){let t=mM(e);if(t===void 0)return{error:`update_plan: passe "steps" como uma LISTA de passos (string ou {title,status}). Recebi: ${Et(e)}.`};if(t.length===0)return{error:"update_plan: a lista de passos est\xE1 vazia."};let o=[];for(let s of t){let a=uM(s,!0);if(typeof a=="string")return{error:a};o.push(a)}let n=new Set,r=s=>{if(!n.has(s))return n.add(s),s;for(let a=2;;a++){let l=`${s} #${a}`;if(!n.has(l))return n.add(l),l}};for(let s=0;s<o.length;s++){let a=o[s],l=r(a.title),c=a.substeps?.map(d=>({...d,title:r(d.title)}));o[s]=c!==void 0?{...a,title:l,substeps:c}:{...a,title:l}}let i=Ih(o).length;return i>cM?{error:`update_plan: no m\xE1ximo ${cM} passos (recebidos ${i}).`}:{steps:o}}function F9(e){let t=Ih(e),o=t.filter(r=>r.step.status==="completed").length,n=t.map(r=>`${" ".repeat(r.depth)}${fM[r.step.status]} ${r.step.title}`).join(`
|
|
3
3
|
`);return`plano (${o}/${t.length}):
|
|
4
4
|
${n}`}function B9(e,t){return t<0?"m\xE9dio":e===t?"curto":e>t?"longo":"m\xE9dio"}function U9(e,t){let o=new Map;for(let s of t.listBoxes())o.set(s.label,s.id);let n=e.findIndex(s=>s.status==="in_progress"||(s.substeps??[]).some(a=>a.status==="in_progress")),r=(s,a,l)=>{let c=s.status==="in_progress"?"curto":l,d=o.get(s.title),m=d??jc.boxId(s.title,0);return d?(s.status!=="completed"&&t.isClosed(d)&&t.reopenBox(d),t.setHorizon(d,c),t.setParent(d,a)):t.openBox(m,c,s.title,a),s.status==="completed"&&!t.isClosed(m)&&t.closeBox(m),o.set(s.title,m),m};e.forEach((s,a)=>{let l=B9(a,n),c=r(s,null,l);for(let d of s.substeps??[])r(d,c,l)});let i=new Set;for(let s of e){i.add(s.title);for(let a of s.substeps??[])i.add(a.title)}for(let s of t.listBoxes())i.has(s.label)||t.removeBox(s.id)}function j9(e,t){if(!t)return F9(e);let o=new Map;for(let c of t.listBoxes())o.set(c.label,c);let n=new Map;for(let c of t.listBoxes())n.set(c.id,c);let r=new Map,i=(c,d=new Set)=>{let m=r.get(c);if(m!==void 0)return m;let u=n.get(c);if(!u||!u.parentId||d.has(c))return r.set(c,0),0;let p=i(u.parentId,new Set(d).add(c))+1;return r.set(c,p),p},s=Ih(e),l=[`plano (${s.filter(c=>c.step.status==="completed").length}/${s.length}):`];for(let{step:c,depth:d}of s){let m=o.get(c.title),u=m?$9[m.horizon]:"",p=m?i(m.id):d,h=" ".repeat(p),b=fM[c.status];l.push(`${h}${u} ${b} ${c.title}`)}return l.join(`
|
|
5
5
|
`)}var um,lM,P9,cM,L9,I9,fM,$9,dM,q9,pM,Nh=g(()=>{"use strict";gS();ts();um="update_plan",lM=["steps","plan","todos","items"];P9=new Set(["pending","in_progress","completed"]),cM=30,L9=120,I9="update_plan: cada passo precisa de um t\xEDtulo (texto) n\xE3o-vazio.";fM={pending:"\u2610",in_progress:"\u25B6",completed:"\u2611"};$9={longo:"[\u{1F4D0}]",m\u00E9dio:"[\u{1F4CB}]",curto:"[\u{1F4CC}]"};dM=Object.freeze({type:"string",enum:["pending","in_progress","completed"],description:"pending (a fazer) \xB7 in_progress (em curso) \xB7 completed (feito)."}),q9=Object.freeze({type:"object",properties:{steps:{type:"array",description:"A lista COMPLETA de passos do plano (re-emita TODOS a cada atualiza\xE7\xE3o \u2014 substitui o anterior).",items:{type:"object",properties:{title:{type:"string",description:"O passo, curto e no imperativo."},status:dM,substeps:{type:"array",description:"OPCIONAL: sub-passos que detalham este passo (1 n\xEDvel). Aparecem indentados sob o passo e seguem o foco dele. Use quando um passo tem a\xE7\xF5es menores distintas.",items:{type:"object",properties:{title:{type:"string",description:"O sub-passo, curto e no imperativo."},status:dM},required:["title"],additionalProperties:!1}}},required:["title"],additionalProperties:!1}}},required:["steps"],additionalProperties:!1}),pM={name:um,effect:"read",group:"plano",description:"Declara/atualiza um PLANO vis\xEDvel (checklist de passos). Use ao iniciar uma tarefa com V\xC1RIOS passos e a cada progresso: re-emita a lista TODA marcando o status de cada passo (pending/in_progress/completed). Mantenha 1 passo in_progress por vez. N\xE3o tem efeito no sistema \u2014 \xE9 s\xF3 o seu plano, para voc\xEA e para o usu\xE1rio acompanharem.",parameters:q9,async run(e,t){let o=N9(e);return"error"in o?{ok:!1,observation:o.error}:(t.graph&&U9(o.steps,t.graph),t.plan&&t.plan.set(Ih(o.steps).map(r=>({title:r.step.title,status:r.step.status}))),{ok:!0,observation:j9(o.steps,t.graph)})}}});function hM(e){let t=e.question??e.prompt??e.text??e.message;if(typeof t!="string"||t.trim()==="")return{error:`perguntar: passe "question" (a pergunta em texto). Para escolha, passe tamb\xE9m "options". Recebi: ${Et(e)}.`};let o=t.trim().slice(0,gM),n=e.header??e.title,r=typeof n=="string"&&n.trim()!==""?n.trim().slice(0,H9):void 0,i=e.options!==void 0||e.choices!==void 0,s=qc(e,["options","choices"]);if(i&&s===void 0)return{error:`perguntar: "options" n\xE3o foi reconhecido como uma LISTA de op\xE7\xF5es. Recebi: ${Et(e)}.`};let a=s!==void 0?V9(s):void 0;if(typeof a=="string")return{error:a};let l,c=e.kind??e.type;if(typeof c=="string"&&z9.has(c))l=c;else{if(typeof c=="string"&&c.trim()!=="")return{error:`perguntar: "kind" inv\xE1lido "${c}". Use "single", "multi" ou "text".`};l=a!==void 0&&a.length>0?"single":"text"}if((l==="single"||l==="multi")&&(a===void 0||a.length===0))return{error:`perguntar: kind "${l}" requer "options" (uma lista de ao menos 1 op\xE7\xE3o).`};let d=e.allowOther,m=!(d===!1||typeof d=="string"&&d.trim().toLowerCase()==="false");return{spec:{kind:l,question:o,...r!==void 0?{header:r}:{},...l!=="text"&&a!==void 0?{options:a}:{},...l!=="text"?{allowOther:m}:{}}}}function V9(e){if(e.length===0)return'perguntar: a lista de "options" est\xE1 vazia.';if(e.length>$h)return`perguntar: no m\xE1ximo ${$h} op\xE7\xF5es (recebidas ${e.length}).`;let t=[];for(let o of e){let n,r;if(typeof o=="string")n=o;else if(o!==null&&typeof o=="object"){let i=o,s=i.label??i.text??i.value??i.name??i.title;typeof s=="string"&&(n=s),typeof i.description=="string"&&i.description.trim()!==""&&(r=i.description.trim().slice(0,G9))}if(n===void 0||n.trim()==="")return'perguntar: cada op\xE7\xE3o precisa de um "label" (texto) n\xE3o-vazio.';t.push({label:n.trim().slice(0,W9),...r!==void 0?{description:r}:{}})}return t}function K9(e){switch(e.kind){case"choice":return e.label;case"choices":return e.labels.length===0?"(nenhuma)":e.labels.join(", ");case"text":{let t=e.text.split(`
|
|
@@ -178,7 +178,7 @@ ${e.trim()}`}}function bb(e,t,o=Od){let{older:n,recent:r}=$f(e,o);if(n.length===
|
|
|
178
178
|
`);let a=fn(process.execPath,[r,"-p",o,"--yolo","--no-self-check","--anonymous"],{stdio:"inherit",timeout:9e5,env:{...process.env,ALUY_OVERWRITE_RENDER:"0",ALUY_SYNC_OUTPUT:"0",ALUY_NO_WEAK_YOLO_WARN:"1",ALUY_PRINT_VERBOSE:"1"}});if(e==="mem0")try{let p=Ne(mr(),ls),h=Ne(p,Br);bt(p)&&nv(iv(),h)}catch{}e==="ollama"&&(await ree(),iee()),process.stderr.write(`
|
|
179
179
|
verificando "${e}"\u2026 (alguns segundos; a pr\xF3xima etapa vem em seguida)
|
|
180
180
|
`);let l=await R0(e,process.platform,!0);for(let p=0;p<tee&&!l;p++)await nee(oee),l=await R0(e,process.platform,!0);let c=a.error===void 0&&a.status===0,d=c?n&&l?"already-present":l?"installed":"failed":l?"failed-but-present":"failed",u=d==="installed"?`complemento "${e}" instalado e verificado.`:d==="already-present"?`complemento "${e}" J\xC1 ESTAVA presente antes desta execu\xE7\xE3o \u2014 verificado, nada novo foi instalado.`:d==="failed-but-present"?`\u26A0 o instalador via agente N\xC3O rodou at\xE9 o fim (${pB(a)}) \u2014 o complemento "${e}" N\xC3O foi provisionado por ele. `+(n?"O que responde aqui \xE9 a instala\xE7\xE3o que J\xC1 existia nesta m\xE1quina.":"O health-check passa por conta dos passos determin\xEDsticos que rodam fora do agente \u2014 o provisionamento completo N\xC3O aconteceu.")+" Resolva a falha acima e re-rode `aluy bootstrap`.":`o complemento "${e}" ainda n\xE3o respondeu como esperado`+(c?"":` \u2014 o instalador via agente falhou (${pB(a)})`)+". O Aluy CLI funciona sem ele; Voc\xEA pode tentar de novo depois com `aluy bootstrap`.";return{target:e,hashOk:l,installed:l,outcome:d,message:u}}function pB(e){return e.error!==void 0?e.signal!==null&&e.signal!==void 0?`interrompido por ${e.signal}`:`n\xE3o executou: ${e.error.message}`:e.signal!==null&&e.signal!==void 0?`interrompido por ${e.signal}`:`saiu com c\xF3digo ${e.status??"?"}; veja o erro impresso acima`}function nee(e){return new Promise(t=>setTimeout(t,e))}async function ree(){for(let e of[Nr,sv()])try{await(await fetch(`http://${dr}:${Di}/api/pull`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:e,stream:!1})})).text()}catch{}}function iee(){if(process.platform!=="win32")try{let e=fn("sh",["-lc","command -v ollama"],{encoding:"utf8",timeout:1e4});if(e.status===0&&(e.stdout??"").trim()!=="")return;let t=rv(),n=["/usr/local/bin/ollama","/usr/bin/ollama","/opt/homebrew/bin/ollama",Ne(t,".ollama","bin","ollama"),Ne(mr(),na,"bin","ollama")].find(s=>bt(s));if(n===void 0)return;let r=Ne(t,".local","bin");O0(r,{recursive:!0});let i=Ne(r,"ollama");try{if(dB(i)===dB(n))return;FZ(i)}catch{}try{NZ(n,i)}catch{}}catch{}}function see(){try{return fn("python3",["-m","venv","--help"],{timeout:1e4}).status===0}catch{return!1}}function aee(){try{return fn("python3",["-m","pip","--version"],{timeout:1e4}).status===0}catch{return!1}}function lee(e){let t=[],o=[];if(e.has("ollama")&&(hB()||(t.push("zstd (extrair o Ollama)"),o.push("zstd")),yB()||(t.push("tar (extrair o Ollama)"),o.push("tar"))),e.has("mem0")||e.has("headroom")){let r=P0();r.ok?(see()||(t.push("m\xF3dulo venv do Python (mem0/headroom criam um virtualenv)"),o.push("python3-venv")),aee()||(t.push("pip do Python (mem0/headroom instalam pacotes)"),o.push("python3-pip"))):(t.push(`python3 >= ${jf} para mem0/headroom (encontrado: ${r.version||"nenhum"})`),o.push("python3","python3-venv","python3-pip"))}if(t.length===0)return[];let n=[...new Set(o)];return["Faltam pr\xE9-requisitos para o modo turbo (o que conseguir, instala; o resto fica de fora):",...t.map(r=>` \u2022 ${r}`),`Instale e rode \`aluy bootstrap\` de novo: sudo apt install -y ${n.join(" ")}`,""]}async function vB(e,t,o){let n=e??"turbo",r=Fr(t??{}),i=o?.useAgent!==!1,s=new _0({...o?.platform?{platform:o.platform}:{},...i?{agentInstaller:eee}:{}});if(!i)for(let a of lee(r))process.stderr.write(a+`
|
|
181
|
-
`);return s.provisionAll(n,r)}var gB,zd,jZ,Br,mB,_0,fB,QZ,tee,oee,L0=g(()=>{"use strict";F();gB=".aluy",zd=448,jZ=384;Br="aluy-mem0-server.py";mB="application/vnd.ollama.image.model";_0=class{platform;agentInstaller;constructor(t={}){this.platform=t.platform??process.platform,this.agentInstaller=t.agentInstaller}hasPinnedArtifact(){return this.platform==="linux"}async isProvisioned(t){switch(t){case"ollama":{let o=Ne(mr(),na,"bin","ollama");return bt(o)}case"mem0":{let o=Ne(mr(),ls,"bin","python3");return bt(o)&&cp(o)}case"headroom":{let o=Ne(mr(),ra,"bin","headroom");return bt(o)}default:return!1}}async provision(t,o){let n=BZ().uid;if(BC(n))return{target:t,hashOk:!1,installed:!1,message:"RECUSA ROOT (uid=0): provisionamento de sidecars \xE9 user-space. Execute como usu\xE1rio normal."};if(this.agentInstaller)return this.agentInstaller(t,o);if(!this.hasPinnedArtifact())return{target:t,hashOk:!1,installed:!1,message:`SO '${this.platform}' sem artefato pinado p/ provisionamento direto. Rode \`aluy bootstrap\` (o aluy instala via o pr\xF3prio agente, \u26A0 --yolo) ou instale manualmente.`};switch(t){case"ollama":return zZ();case"mem0":return XZ();case"headroom":return JZ();default:return{target:t,hashOk:!1,installed:!1,message:`Alvo desconhecido: ${String(t)}`}}}async provisionAll(t,o){if(!Hf(t))return{profile:t,targets:[],anySuccess:!1,allFailed:!1};let n=[],r=[...o];for(let a=0;a<r.length;a++){let l=r[a],c={index:a+1,total:r.length,plan:r};try{n.push(await this.provision(l,c))}catch(d){let m=d instanceof Error?d.message:String(d);n.push({target:l,hashOk:!1,installed:!1,message:`falha inesperada ao provisionar \u2014 seguindo p/ os pr\xF3ximos (${m}).`})}}let i=n.some(a=>a.installed),s=n.length>0&&n.every(a=>!a.installed);return{profile:t,targets:n,anySuccess:i,allFailed:s}}},fB="na faixa 3.10\u20133.12 (N\xC3O use 3.13+/3.14 \u2014 as depend\xEAncias nativas n\xE3o t\xEAm wheels e o pip falha ao compilar; no Windows prefira `py -3.12` ou `py -3.11`). Se N\xC3O houver um Python 3.10\u20133.12 instalado, INSTALE primeiro (no Windows: `winget install -e --id Python.Python.3.12 --accept-source-agreements --accept-package-agreements`; no Linux/macOS use o gerenciador do sistema). Se j\xE1 existir um venv nesse caminho numa vers\xE3o incompat\xEDvel (ex.: 3.14), APAGUE e recrie com a vers\xE3o certa",QZ="IMPORTANTE \u2014 o usu\xE1rio quer ACOMPANHAR: antes de cada passo, diga em 1 linha o que vai fazer; rode os comandos de instala\xE7\xE3o de forma VIS\xCDVEL (N\xC3O silencie pip/apt/curl com -q; mostre a sa\xEDda/progresso). Sem modo silencioso. ";tee=24,oee=5e3});var Co,Nl=g(()=>{"use strict";Co="1.0.0-rc.181"});var AB={};At(AB,{HELP_TEXT:()=>xB,parseArgs:()=>F0,suggestFlag:()=>N0,versionText:()=>SB});function Ht(e,t,o={}){let n=`--${t}=`;for(let r=0;r<e.length;r++){let i=e[r];if(i===`--${t}`){let s=e[r+1];return s===void 0||(o.allowDashValue?s.startsWith("--"):s.startsWith("-"))?void 0:s}if(i!==void 0&&i.startsWith(n))return i.slice(n.length)}}function cee(e,t){let o=`-${t}=`;for(let n=0;n<e.length;n++){let r=e[n];if(r===`-${t}`){let i=e[n+1];return i!==void 0&&!i.startsWith("-")?i:void 0}if(r!==void 0&&r.startsWith(o))return r.slice(o.length)}}function dee(e,t){let o=[],n=new Set,r=`--${t}=`;for(let i=0;i<e.length;i++){let s=e[i];if(s!==void 0){if(s===`--${t}`){let a=e[i+1];a!==void 0&&!a.startsWith("-")&&(o.push(a),n.add(i+1));continue}s.startsWith(r)&&o.push(s.slice(r.length))}}return{values:o,valueIndices:n}}function SB(){return`aluy ${Co} (@hiperplano/aluy-cli-core ${dm})`}function fee(e,t){let o=e.length,n=t.length,r=Array.from({length:n+1},(i,s)=>s);for(let i=1;i<=o;i++){let s=[i];for(let a=1;a<=n;a++){let l=e[i-1]===t[a-1]?0:1;s[a]=Math.min(r[a]+1,s[a-1]+1,r[a-1]+l)}r=s}return r[n]}function N0(e){let t,o=3;for(let n of wB){let r=fee(e,n);r<o&&(o=r,t=n)}return t}function pee(e,t){let o=[];for(let n=0;n<e.length;n++){let r=e[n];if(r==="--")break;if(!r.startsWith("--")||r.length===2||t.has(n))continue;let i=r.slice(2).split("=",1)[0];i===""||wB.has(i)||o.push(`--${i}`)}return o}function F0(e){let t=e[0];if(t==="login"&&!e.includes("-h")&&!e.includes("--help")){let J=e.slice(1),Me=Ht(J,"token"),io=Ht(J,"org"),Vt=J.includes("--device"),Ho=Ht(J,"provider"),ui=J.includes("--oauth");return{kind:"login",forceDeviceFlow:Vt,...Me!==void 0?{token:Me}:{},...io!==void 0?{org:io}:{},...Ho!==void 0?{provider:Ho}:{},...ui?{oauth:!0}:{}}}if(t==="logout"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"logout"};if(t==="whoami"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"whoami"};if(t==="doctor"&&!e.includes("-h")&&!e.includes("--help")){let J=e.includes("--deep")||e.includes("--test"),Me=e.includes("--json");return{kind:"doctor",deep:J,json:Me}}if(t==="config"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"config",json:e.includes("--json")};if(t==="agents"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"agents"};if(t==="bootstrap"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"bootstrap",agent:!e.includes("--no-agent")};if(t==="uninstall"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"uninstall",agent:e.includes("--agent")};if(t==="onboard"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"onboard"};if(t==="skills"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"skills"};if(t==="workflows"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"workflows"};if((t==="models"||t==="providers")&&!e.includes("-h")&&!e.includes("--help")){let J=e.includes("--json"),Me=e.findIndex(Vt=>Vt==="--backend"||Vt.startsWith("--backend=")),io="both";if(Me!==-1){let Ho=(e[Me].includes("=")?e[Me].slice(10):e[Me+1]??"").trim().toLowerCase();Ho==="local"?io="local":Ho==="broker"&&(io="broker")}return{kind:"models",scope:io,json:J,which:t==="providers"?"providers":"models"}}if(t==="telegram"&&!e.includes("-h")&&!e.includes("--help")){let J=e[1];if(J===void 0||!["login","logout","allow","deny","status"].includes(J))return{kind:"usage-error",message:"uso: aluy telegram <login|logout|allow|deny|status>",exitCode:2};let io=e.slice(2);if(J==="login"){let Vt=Ht(io,"token");return{kind:"telegram",sub:"login",...Vt!==void 0?{token:Vt}:{}}}if(J==="allow"||J==="deny"){let Vt=io.find(ui=>!ui.startsWith("-")),Ho=Vt!==void 0&&/^-?\d+$/.test(Vt)?Number(Vt):void 0;return Ho===void 0?{kind:"usage-error",message:`uso: aluy telegram ${J} <chat-id> (um inteiro)`,exitCode:2}:{kind:"telegram",sub:J,chatId:Ho}}return{kind:"telegram",sub:J}}if(t==="mcp"&&e[1]==="search"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"mcp-search",query:e.slice(2).filter(Me=>!Me.startsWith("-")).join(" ").trim()};if(t==="mcp")return{kind:"mcp",argv:e.slice(1)};if(t==="cron")return{kind:"cron",argv:e.slice(1)};if(t==="service")return{kind:"service",argv:e.slice(1)};if(e.includes("-v")||e.includes("--version"))return{kind:"version",text:SB()};if(e.includes("-h")||e.includes("--help"))return{kind:"help",text:xB};let o=e.includes("--plan"),n=e.includes("--unsafe"),r=e.includes("--yolo")||n,i=o?"plan":r?"unsafe":"normal",s=e.includes("--dense"),a=e.includes("--ascii"),l=e.includes("--telegram"),c=e.includes("--split")||e.includes("--view")?!0:void 0,d=e.includes("--fullscreen")||e.includes("--cockpit")?!0:void 0,m=e.includes("--no-budget")?!1:e.includes("--budget")?!0:void 0,u=Ht(e,"tier"),p=Ht(e,"lang"),h=Ht(e,"max-tokens"),b=Ht(e,"max-iterations"),y=Ht(e,"max-output-tokens"),v=!(e.includes("--no-subagents")||e.includes("--no-subagent")),S=e.includes("--no-self-check")?"0":e.includes("--self-check")?"1":void 0,w=e.includes("--no-autocompact")?"off":Ht(e,"autocompact-at"),T=e.includes("--quiet")?!0:void 0,O=e.includes("--cycle")?!0:void 0,L=Ht(e,"cycles"),I=Ht(e,"cycle-for"),{values:$,valueIndices:N}=dee(e,"image"),B=Ht(e,"backend"),U=Ht(e,"local-provider"),ee=Ht(e,"local-model"),P=Ht(e,"local-auth"),G=Ht(e,"local-base-url"),Ee=Ht(e,"model"),he=Ht(e,"provider");if((e.includes("--provider")||e.some(J=>J.startsWith("--provider=")))&&(Ee===void 0||Ee.trim()===""))return{kind:"usage-error",message:"aluy: --provider exige --model (ex.: --provider <provider> --model <slug>)",exitCode:2};if((Ee===void 0||Ee.trim()==="")&&u!==void 0&&u.trim().toLowerCase()==="custom")return{kind:"usage-error",message:"aluy: --tier custom exige --model <slug> (ex.: --model deepseek-v4-pro). A via Custom precisa do slug do modelo; sem ele use um tier can\xF4nico (aluy-flux, aluy-granito, \u2026).",exitCode:2};let Q=Ht(e,"effort"),ve=e.includes("--effort")||e.some(J=>J.startsWith("--effort=")),ce;if(Q!==void 0){if(Q.trim()==="")return{kind:"usage-error",message:"aluy: --effort requer um valor (ex.: --effort low)",exitCode:2};if(Q.length>32)return{kind:"usage-error",message:"aluy: --effort aceita no m\xE1ximo 32 caracteres",exitCode:2};ce=Q}else if(ve)return{kind:"usage-error",message:"aluy: --effort requer um valor (ex.: --effort low)",exitCode:2};let Te=e.includes("-p")||e.includes("--print")||e.includes("--exec")||e.some(J=>J.startsWith("-p=")||J.startsWith("--print=")||J.startsWith("--exec=")),ye=Te?Ht(e,"print",{allowDashValue:!0})??Ht(e,"exec",{allowDashValue:!0})??cee(e,"p")??void 0:void 0,se=Te?Ht(e,"output-format"):void 0;if(se!==void 0&&!["text","json","stream-json"].includes(se.trim()))return{kind:"usage-error",message:`aluy: --output-format inv\xE1lido "${se}" (use text | json | stream-json)`,exitCode:2};let Fe=e.includes("--new"),yt=e.includes("--continue"),ue=e.indexOf("--resume"),Oe=e.find(J=>J.startsWith("--resume=")),Ve=ue>=0||Oe!==void 0,Ot=e.includes("--anonymous");if(Ot&&(yt||Ve))return{kind:"usage-error",message:"aluy: --anonymous n\xE3o combina com --continue/--resume (retomar precisa de uma sess\xE3o salva; an\xF4nimo n\xE3o grava nenhuma). Escolha um dos dois.",exitCode:2};let Ue;if(Oe!==void 0)Ue=Oe.slice(9);else if(ue>=0){let J=e[ue+1];J!==void 0&&!J.startsWith("-")&&(Ue=J)}let qe=u!==void 0?e.indexOf("--tier")+1:-1,Y=p!==void 0&&!e.some(J=>J.startsWith("--lang="))?e.indexOf("--lang")+1:-1,$t=Ue!==void 0&&Oe===void 0?ue+1:-1,Yt=h!==void 0&&!e.some(J=>J.startsWith("--max-tokens="))?e.indexOf("--max-tokens")+1:-1,Bt=b!==void 0&&!e.some(J=>J.startsWith("--max-iterations="))?e.indexOf("--max-iterations")+1:-1,de=L!==void 0&&!e.some(J=>J.startsWith("--cycles="))?e.indexOf("--cycles")+1:-1,Se=I!==void 0&&!e.some(J=>J.startsWith("--cycle-for="))?e.indexOf("--cycle-for")+1:-1,Oo=y!==void 0&&!e.some(J=>J.startsWith("--max-output-tokens="))?e.indexOf("--max-output-tokens")+1:-1,ir=w!==void 0&&!e.includes("--no-autocompact")&&!e.some(J=>J.startsWith("--autocompact-at="))?e.indexOf("--autocompact-at")+1:-1,H=B!==void 0&&!e.some(J=>J.startsWith("--backend="))?e.indexOf("--backend")+1:-1,K=(J,Me)=>Me!==void 0&&!e.some(io=>io.startsWith(`--${J}=`))?e.indexOf(`--${J}`)+1:-1,je=K("local-provider",U),ot=K("local-model",ee),z=K("local-auth",P),Z=K("local-base-url",G),Ut=Ee!==void 0&&!e.some(J=>J.startsWith("--model="))?e.indexOf("--model")+1:-1,Fs=he!==void 0&&!e.some(J=>J.startsWith("--provider="))?e.indexOf("--provider")+1:-1,no=ce!==void 0&&!e.some(J=>J.startsWith("--effort="))?e.indexOf("--effort")+1:-1,di=se!==void 0&&!e.some(J=>J.startsWith("--output-format="))?e.indexOf("--output-format")+1:-1,Bn=ye!==void 0&&!e.some(J=>J.startsWith("-p=")||J.startsWith("--print=")||J.startsWith("--exec="))?Math.max(e.indexOf("-p"),e.indexOf("--print"),e.indexOf("--exec"))+1:-1,Un=e.find((J,Me)=>!J.startsWith("-")&&Me!==qe&&Me!==Y&&Me!==H&&Me!==je&&Me!==ot&&Me!==z&&Me!==Z&&Me!==Ut&&Me!==Fs&&Me!==no&&Me!==di&&Me!==Bn&&Me!==$t&&Me!==Yt&&Me!==Bt&&Me!==Oo&&Me!==ir&&Me!==de&&Me!==Se&&!N.has(Me)),rn=(ye??Un??"").trim();if(rn!==""&&!/\s/.test(rn)&&mee.has(rn.toLowerCase()))return{kind:"usage-error",message:`aluy: "${rn}" \xE9 um comando de SESS\xC3O, n\xE3o um objetivo. Use /${rn} DENTRO do aluy (rode \`aluy\` sem argumentos), ou veja \`aluy --help\`. Se voc\xEA quis MESMO um objetivo com essa palavra, d\xEA mais contexto (ex.: \`aluy "${rn} o arquivo X"\`).`,exitCode:2};let sn=yt?{kind:"continue"}:Ve?{kind:"resume",...Ue!==void 0?{id:Ue}:{}}:void 0,Mo=new Set([qe,Y,H,je,ot,z,Z,Ut,Fs,no,di,Bn,$t,Yt,Bt,Oo,ir,de,Se].filter(J=>J>=0));for(let J of N)Mo.add(J);for(let J of uee){let Me=e.indexOf(J);Me>=0&&!e[Me].includes("=")&&Mo.add(Me+1)}let ro=pee(e,Mo);return{kind:"launch",mode:i,unsafe:i==="unsafe",unsafeAliasUsed:n,...ro.length>0?{unknownFlags:ro}:{},dense:s,fresh:Fe,anonymous:Ot,subAgents:v,safeGlyphs:a,telegram:l,print:Te,...c!==void 0?{split:c}:{},...d!==void 0?{fullscreen:d}:{},...m!==void 0?{budget:m}:{},...Un!==void 0?{goal:Un}:{},...u!==void 0?{tier:u}:{},...B!==void 0?{backend:B}:{},...U!==void 0?{localProvider:U}:{},...ee!==void 0?{localModel:ee}:{},...P!==void 0?{localAuth:P}:{},...G!==void 0?{localBaseUrl:G}:{},...Ee!==void 0?{model:Ee}:{},...he!==void 0?{provider:he}:{},...ce!==void 0?{effort:ce}:{},...ye!==void 0?{printArg:ye}:{},...se!==void 0?{outputFormat:se}:{},...p!==void 0?{lang:p}:{},...sn!==void 0?{resume:sn}:{},...h!==void 0?{maxTokens:h}:{},...b!==void 0?{maxIterations:b}:{},...y!==void 0?{maxOutputTokens:y}:{},...S!==void 0?{selfCheck:S}:{},...w!==void 0?{autoCompactAt:w}:{},...T!==void 0?{quiet:T}:{},...O!==void 0?{cycle:O}:{},...L!==void 0?{cycles:L}:{},...I!==void 0?{cycleFor:I}:{},...$.length>0?{images:$}:{}}}var xB,wB,uee,mee,av=g(()=>{"use strict";F();Nl();xB=`aluy \u2014 agente de terminal que roda na sua m\xE1quina, com o seu provider de LLM
|
|
181
|
+
`);return s.provisionAll(n,r)}var gB,zd,jZ,Br,mB,_0,fB,QZ,tee,oee,L0=g(()=>{"use strict";F();gB=".aluy",zd=448,jZ=384;Br="aluy-mem0-server.py";mB="application/vnd.ollama.image.model";_0=class{platform;agentInstaller;constructor(t={}){this.platform=t.platform??process.platform,this.agentInstaller=t.agentInstaller}hasPinnedArtifact(){return this.platform==="linux"}async isProvisioned(t){switch(t){case"ollama":{let o=Ne(mr(),na,"bin","ollama");return bt(o)}case"mem0":{let o=Ne(mr(),ls,"bin","python3");return bt(o)&&cp(o)}case"headroom":{let o=Ne(mr(),ra,"bin","headroom");return bt(o)}default:return!1}}async provision(t,o){let n=BZ().uid;if(BC(n))return{target:t,hashOk:!1,installed:!1,message:"RECUSA ROOT (uid=0): provisionamento de sidecars \xE9 user-space. Execute como usu\xE1rio normal."};if(this.agentInstaller)return this.agentInstaller(t,o);if(!this.hasPinnedArtifact())return{target:t,hashOk:!1,installed:!1,message:`SO '${this.platform}' sem artefato pinado p/ provisionamento direto. Rode \`aluy bootstrap\` (o aluy instala via o pr\xF3prio agente, \u26A0 --yolo) ou instale manualmente.`};switch(t){case"ollama":return zZ();case"mem0":return XZ();case"headroom":return JZ();default:return{target:t,hashOk:!1,installed:!1,message:`Alvo desconhecido: ${String(t)}`}}}async provisionAll(t,o){if(!Hf(t))return{profile:t,targets:[],anySuccess:!1,allFailed:!1};let n=[],r=[...o];for(let a=0;a<r.length;a++){let l=r[a],c={index:a+1,total:r.length,plan:r};try{n.push(await this.provision(l,c))}catch(d){let m=d instanceof Error?d.message:String(d);n.push({target:l,hashOk:!1,installed:!1,message:`falha inesperada ao provisionar \u2014 seguindo p/ os pr\xF3ximos (${m}).`})}}let i=n.some(a=>a.installed),s=n.length>0&&n.every(a=>!a.installed);return{profile:t,targets:n,anySuccess:i,allFailed:s}}},fB="na faixa 3.10\u20133.12 (N\xC3O use 3.13+/3.14 \u2014 as depend\xEAncias nativas n\xE3o t\xEAm wheels e o pip falha ao compilar; no Windows prefira `py -3.12` ou `py -3.11`). Se N\xC3O houver um Python 3.10\u20133.12 instalado, INSTALE primeiro (no Windows: `winget install -e --id Python.Python.3.12 --accept-source-agreements --accept-package-agreements`; no Linux/macOS use o gerenciador do sistema). Se j\xE1 existir um venv nesse caminho numa vers\xE3o incompat\xEDvel (ex.: 3.14), APAGUE e recrie com a vers\xE3o certa",QZ="IMPORTANTE \u2014 o usu\xE1rio quer ACOMPANHAR: antes de cada passo, diga em 1 linha o que vai fazer; rode os comandos de instala\xE7\xE3o de forma VIS\xCDVEL (N\xC3O silencie pip/apt/curl com -q; mostre a sa\xEDda/progresso). Sem modo silencioso. ";tee=24,oee=5e3});var Co,Nl=g(()=>{"use strict";Co="1.0.0-rc.182"});var AB={};At(AB,{HELP_TEXT:()=>xB,parseArgs:()=>F0,suggestFlag:()=>N0,versionText:()=>SB});function Ht(e,t,o={}){let n=`--${t}=`;for(let r=0;r<e.length;r++){let i=e[r];if(i===`--${t}`){let s=e[r+1];return s===void 0||(o.allowDashValue?s.startsWith("--"):s.startsWith("-"))?void 0:s}if(i!==void 0&&i.startsWith(n))return i.slice(n.length)}}function cee(e,t){let o=`-${t}=`;for(let n=0;n<e.length;n++){let r=e[n];if(r===`-${t}`){let i=e[n+1];return i!==void 0&&!i.startsWith("-")?i:void 0}if(r!==void 0&&r.startsWith(o))return r.slice(o.length)}}function dee(e,t){let o=[],n=new Set,r=`--${t}=`;for(let i=0;i<e.length;i++){let s=e[i];if(s!==void 0){if(s===`--${t}`){let a=e[i+1];a!==void 0&&!a.startsWith("-")&&(o.push(a),n.add(i+1));continue}s.startsWith(r)&&o.push(s.slice(r.length))}}return{values:o,valueIndices:n}}function SB(){return`aluy ${Co} (@hiperplano/aluy-cli-core ${dm})`}function fee(e,t){let o=e.length,n=t.length,r=Array.from({length:n+1},(i,s)=>s);for(let i=1;i<=o;i++){let s=[i];for(let a=1;a<=n;a++){let l=e[i-1]===t[a-1]?0:1;s[a]=Math.min(r[a]+1,s[a-1]+1,r[a-1]+l)}r=s}return r[n]}function N0(e){let t,o=3;for(let n of wB){let r=fee(e,n);r<o&&(o=r,t=n)}return t}function pee(e,t){let o=[];for(let n=0;n<e.length;n++){let r=e[n];if(r==="--")break;if(!r.startsWith("--")||r.length===2||t.has(n))continue;let i=r.slice(2).split("=",1)[0];i===""||wB.has(i)||o.push(`--${i}`)}return o}function F0(e){let t=e[0];if(t==="login"&&!e.includes("-h")&&!e.includes("--help")){let J=e.slice(1),Me=Ht(J,"token"),io=Ht(J,"org"),Vt=J.includes("--device"),Ho=Ht(J,"provider"),ui=J.includes("--oauth");return{kind:"login",forceDeviceFlow:Vt,...Me!==void 0?{token:Me}:{},...io!==void 0?{org:io}:{},...Ho!==void 0?{provider:Ho}:{},...ui?{oauth:!0}:{}}}if(t==="logout"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"logout"};if(t==="whoami"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"whoami"};if(t==="doctor"&&!e.includes("-h")&&!e.includes("--help")){let J=e.includes("--deep")||e.includes("--test"),Me=e.includes("--json");return{kind:"doctor",deep:J,json:Me}}if(t==="config"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"config",json:e.includes("--json")};if(t==="agents"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"agents"};if(t==="bootstrap"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"bootstrap",agent:!e.includes("--no-agent")};if(t==="uninstall"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"uninstall",agent:e.includes("--agent")};if(t==="onboard"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"onboard"};if(t==="skills"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"skills"};if(t==="workflows"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"workflows"};if((t==="models"||t==="providers")&&!e.includes("-h")&&!e.includes("--help")){let J=e.includes("--json"),Me=e.findIndex(Vt=>Vt==="--backend"||Vt.startsWith("--backend=")),io="both";if(Me!==-1){let Ho=(e[Me].includes("=")?e[Me].slice(10):e[Me+1]??"").trim().toLowerCase();Ho==="local"?io="local":Ho==="broker"&&(io="broker")}return{kind:"models",scope:io,json:J,which:t==="providers"?"providers":"models"}}if(t==="telegram"&&!e.includes("-h")&&!e.includes("--help")){let J=e[1];if(J===void 0||!["login","logout","allow","deny","status"].includes(J))return{kind:"usage-error",message:"uso: aluy telegram <login|logout|allow|deny|status>",exitCode:2};let io=e.slice(2);if(J==="login"){let Vt=Ht(io,"token");return{kind:"telegram",sub:"login",...Vt!==void 0?{token:Vt}:{}}}if(J==="allow"||J==="deny"){let Vt=io.find(ui=>!ui.startsWith("-")),Ho=Vt!==void 0&&/^-?\d+$/.test(Vt)?Number(Vt):void 0;return Ho===void 0?{kind:"usage-error",message:`uso: aluy telegram ${J} <chat-id> (um inteiro)`,exitCode:2}:{kind:"telegram",sub:J,chatId:Ho}}return{kind:"telegram",sub:J}}if(t==="mcp"&&e[1]==="search"&&!e.includes("-h")&&!e.includes("--help"))return{kind:"mcp-search",query:e.slice(2).filter(Me=>!Me.startsWith("-")).join(" ").trim()};if(t==="mcp")return{kind:"mcp",argv:e.slice(1)};if(t==="cron")return{kind:"cron",argv:e.slice(1)};if(t==="service")return{kind:"service",argv:e.slice(1)};if(e.includes("-v")||e.includes("--version"))return{kind:"version",text:SB()};if(e.includes("-h")||e.includes("--help"))return{kind:"help",text:xB};let o=e.includes("--plan"),n=e.includes("--unsafe"),r=e.includes("--yolo")||n,i=o?"plan":r?"unsafe":"normal",s=e.includes("--dense"),a=e.includes("--ascii"),l=e.includes("--telegram"),c=e.includes("--split")||e.includes("--view")?!0:void 0,d=e.includes("--fullscreen")||e.includes("--cockpit")?!0:void 0,m=e.includes("--no-budget")?!1:e.includes("--budget")?!0:void 0,u=Ht(e,"tier"),p=Ht(e,"lang"),h=Ht(e,"max-tokens"),b=Ht(e,"max-iterations"),y=Ht(e,"max-output-tokens"),v=!(e.includes("--no-subagents")||e.includes("--no-subagent")),S=e.includes("--no-self-check")?"0":e.includes("--self-check")?"1":void 0,w=e.includes("--no-autocompact")?"off":Ht(e,"autocompact-at"),T=e.includes("--quiet")?!0:void 0,O=e.includes("--cycle")?!0:void 0,L=Ht(e,"cycles"),I=Ht(e,"cycle-for"),{values:$,valueIndices:N}=dee(e,"image"),B=Ht(e,"backend"),U=Ht(e,"local-provider"),ee=Ht(e,"local-model"),P=Ht(e,"local-auth"),G=Ht(e,"local-base-url"),Ee=Ht(e,"model"),he=Ht(e,"provider");if((e.includes("--provider")||e.some(J=>J.startsWith("--provider=")))&&(Ee===void 0||Ee.trim()===""))return{kind:"usage-error",message:"aluy: --provider exige --model (ex.: --provider <provider> --model <slug>)",exitCode:2};if((Ee===void 0||Ee.trim()==="")&&u!==void 0&&u.trim().toLowerCase()==="custom")return{kind:"usage-error",message:"aluy: --tier custom exige --model <slug> (ex.: --model deepseek-v4-pro). A via Custom precisa do slug do modelo; sem ele use um tier can\xF4nico (aluy-flux, aluy-granito, \u2026).",exitCode:2};let Q=Ht(e,"effort"),ve=e.includes("--effort")||e.some(J=>J.startsWith("--effort=")),ce;if(Q!==void 0){if(Q.trim()==="")return{kind:"usage-error",message:"aluy: --effort requer um valor (ex.: --effort low)",exitCode:2};if(Q.length>32)return{kind:"usage-error",message:"aluy: --effort aceita no m\xE1ximo 32 caracteres",exitCode:2};ce=Q}else if(ve)return{kind:"usage-error",message:"aluy: --effort requer um valor (ex.: --effort low)",exitCode:2};let Te=e.includes("-p")||e.includes("--print")||e.includes("--exec")||e.some(J=>J.startsWith("-p=")||J.startsWith("--print=")||J.startsWith("--exec=")),ye=Te?Ht(e,"print",{allowDashValue:!0})??Ht(e,"exec",{allowDashValue:!0})??cee(e,"p")??void 0:void 0,se=Te?Ht(e,"output-format"):void 0;if(se!==void 0&&!["text","json","stream-json"].includes(se.trim()))return{kind:"usage-error",message:`aluy: --output-format inv\xE1lido "${se}" (use text | json | stream-json)`,exitCode:2};let Fe=e.includes("--new"),yt=e.includes("--continue"),ue=e.indexOf("--resume"),Oe=e.find(J=>J.startsWith("--resume=")),Ve=ue>=0||Oe!==void 0,Ot=e.includes("--anonymous");if(Ot&&(yt||Ve))return{kind:"usage-error",message:"aluy: --anonymous n\xE3o combina com --continue/--resume (retomar precisa de uma sess\xE3o salva; an\xF4nimo n\xE3o grava nenhuma). Escolha um dos dois.",exitCode:2};let Ue;if(Oe!==void 0)Ue=Oe.slice(9);else if(ue>=0){let J=e[ue+1];J!==void 0&&!J.startsWith("-")&&(Ue=J)}let qe=u!==void 0?e.indexOf("--tier")+1:-1,Y=p!==void 0&&!e.some(J=>J.startsWith("--lang="))?e.indexOf("--lang")+1:-1,$t=Ue!==void 0&&Oe===void 0?ue+1:-1,Yt=h!==void 0&&!e.some(J=>J.startsWith("--max-tokens="))?e.indexOf("--max-tokens")+1:-1,Bt=b!==void 0&&!e.some(J=>J.startsWith("--max-iterations="))?e.indexOf("--max-iterations")+1:-1,de=L!==void 0&&!e.some(J=>J.startsWith("--cycles="))?e.indexOf("--cycles")+1:-1,Se=I!==void 0&&!e.some(J=>J.startsWith("--cycle-for="))?e.indexOf("--cycle-for")+1:-1,Oo=y!==void 0&&!e.some(J=>J.startsWith("--max-output-tokens="))?e.indexOf("--max-output-tokens")+1:-1,ir=w!==void 0&&!e.includes("--no-autocompact")&&!e.some(J=>J.startsWith("--autocompact-at="))?e.indexOf("--autocompact-at")+1:-1,H=B!==void 0&&!e.some(J=>J.startsWith("--backend="))?e.indexOf("--backend")+1:-1,K=(J,Me)=>Me!==void 0&&!e.some(io=>io.startsWith(`--${J}=`))?e.indexOf(`--${J}`)+1:-1,je=K("local-provider",U),ot=K("local-model",ee),z=K("local-auth",P),Z=K("local-base-url",G),Ut=Ee!==void 0&&!e.some(J=>J.startsWith("--model="))?e.indexOf("--model")+1:-1,Fs=he!==void 0&&!e.some(J=>J.startsWith("--provider="))?e.indexOf("--provider")+1:-1,no=ce!==void 0&&!e.some(J=>J.startsWith("--effort="))?e.indexOf("--effort")+1:-1,di=se!==void 0&&!e.some(J=>J.startsWith("--output-format="))?e.indexOf("--output-format")+1:-1,Bn=ye!==void 0&&!e.some(J=>J.startsWith("-p=")||J.startsWith("--print=")||J.startsWith("--exec="))?Math.max(e.indexOf("-p"),e.indexOf("--print"),e.indexOf("--exec"))+1:-1,Un=e.find((J,Me)=>!J.startsWith("-")&&Me!==qe&&Me!==Y&&Me!==H&&Me!==je&&Me!==ot&&Me!==z&&Me!==Z&&Me!==Ut&&Me!==Fs&&Me!==no&&Me!==di&&Me!==Bn&&Me!==$t&&Me!==Yt&&Me!==Bt&&Me!==Oo&&Me!==ir&&Me!==de&&Me!==Se&&!N.has(Me)),rn=(ye??Un??"").trim();if(rn!==""&&!/\s/.test(rn)&&mee.has(rn.toLowerCase()))return{kind:"usage-error",message:`aluy: "${rn}" \xE9 um comando de SESS\xC3O, n\xE3o um objetivo. Use /${rn} DENTRO do aluy (rode \`aluy\` sem argumentos), ou veja \`aluy --help\`. Se voc\xEA quis MESMO um objetivo com essa palavra, d\xEA mais contexto (ex.: \`aluy "${rn} o arquivo X"\`).`,exitCode:2};let sn=yt?{kind:"continue"}:Ve?{kind:"resume",...Ue!==void 0?{id:Ue}:{}}:void 0,Mo=new Set([qe,Y,H,je,ot,z,Z,Ut,Fs,no,di,Bn,$t,Yt,Bt,Oo,ir,de,Se].filter(J=>J>=0));for(let J of N)Mo.add(J);for(let J of uee){let Me=e.indexOf(J);Me>=0&&!e[Me].includes("=")&&Mo.add(Me+1)}let ro=pee(e,Mo);return{kind:"launch",mode:i,unsafe:i==="unsafe",unsafeAliasUsed:n,...ro.length>0?{unknownFlags:ro}:{},dense:s,fresh:Fe,anonymous:Ot,subAgents:v,safeGlyphs:a,telegram:l,print:Te,...c!==void 0?{split:c}:{},...d!==void 0?{fullscreen:d}:{},...m!==void 0?{budget:m}:{},...Un!==void 0?{goal:Un}:{},...u!==void 0?{tier:u}:{},...B!==void 0?{backend:B}:{},...U!==void 0?{localProvider:U}:{},...ee!==void 0?{localModel:ee}:{},...P!==void 0?{localAuth:P}:{},...G!==void 0?{localBaseUrl:G}:{},...Ee!==void 0?{model:Ee}:{},...he!==void 0?{provider:he}:{},...ce!==void 0?{effort:ce}:{},...ye!==void 0?{printArg:ye}:{},...se!==void 0?{outputFormat:se}:{},...p!==void 0?{lang:p}:{},...sn!==void 0?{resume:sn}:{},...h!==void 0?{maxTokens:h}:{},...b!==void 0?{maxIterations:b}:{},...y!==void 0?{maxOutputTokens:y}:{},...S!==void 0?{selfCheck:S}:{},...w!==void 0?{autoCompactAt:w}:{},...T!==void 0?{quiet:T}:{},...O!==void 0?{cycle:O}:{},...L!==void 0?{cycles:L}:{},...I!==void 0?{cycleFor:I}:{},...$.length>0?{images:$}:{}}}var xB,wB,uee,mee,av=g(()=>{"use strict";F();Nl();xB=`aluy \u2014 agente de terminal que roda na sua m\xE1quina, com o seu provider de LLM
|
|
182
182
|
|
|
183
183
|
Uso:
|
|
184
184
|
aluy ["objetivo"] [--plan | --yolo] [--dense] [--tier <tier>] [--lang <pt-BR|en>]
|
package/dist-bundle/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var A8=Object.create;var $b=Object.defineProperty;var C8=Object.getOwnPropertyDescriptor;var D8=Object.getOwnPropertyNames;var R8=Object.getPrototypeOf,T8=Object.prototype.hasOwnProperty;var C=(t,e,o)=>()=>{if(o)throw o[0];try{return t&&(e=t(t=0)),e}catch(n){throw o=[n],n}};var _8=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(o){throw e=0,o}},Bb=(t,e)=>{for(var o in e)$b(t,o,{get:e[o],enumerable:!0})},M8=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of D8(e))!T8.call(t,r)&&r!==o&&$b(t,r,{get:()=>e[r],enumerable:!(n=C8(e,r))||n.enumerable});return t};var O8=(t,e,o)=>(o=t!=null?A8(R8(t)):{},M8(e||!t||!t.__esModule?$b(o,"default",{value:t,enumerable:!0}):o,t));var id,rD=C(()=>{"use strict";id="1.0.0-rc.
|
|
1
|
+
var A8=Object.create;var $b=Object.defineProperty;var C8=Object.getOwnPropertyDescriptor;var D8=Object.getOwnPropertyNames;var R8=Object.getPrototypeOf,T8=Object.prototype.hasOwnProperty;var C=(t,e,o)=>()=>{if(o)throw o[0];try{return t&&(e=t(t=0)),e}catch(n){throw o=[n],n}};var _8=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(o){throw e=0,o}},Bb=(t,e)=>{for(var o in e)$b(t,o,{get:e[o],enumerable:!0})},M8=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of D8(e))!T8.call(t,r)&&r!==o&&$b(t,r,{get:()=>e[r],enumerable:!(n=C8(e,r))||n.enumerable});return t};var O8=(t,e,o)=>(o=t!=null?A8(R8(t)):{},M8(e||!t||!t.__esModule?$b(o,"default",{value:t,enumerable:!0}):o,t));var id,rD=C(()=>{"use strict";id="1.0.0-rc.182"});function Hn(t,e){return t.decide(e)}var Pi=C(()=>{"use strict"});var Sr,rs,ss=C(()=>{"use strict";Sr="remember",rs="recall"});var Ub,P8,al,jb=C(()=>{"use strict";Ub=class{id;horizon;label;parentId;children;dependencies;pinned;closed;createdAt;lastAccessedAt;accessCount;context;constructor(e,o,n,r,s){this.id=e,this.horizon=o,this.label=n,this.parentId=r,this.children=new Set,this.dependencies=new Set,this.pinned=!1,this.closed=!1,this.createdAt=s,this.lastAccessedAt=s,this.accessCount=0,this.context=[]}touch(e){this.lastAccessedAt=e,this.accessCount+=1}snapshot(){return{id:this.id,horizon:this.horizon,label:this.label,parentId:this.parentId,children:[...this.children],dependencies:[...this.dependencies],pinned:this.pinned,closed:this.closed,createdAt:this.createdAt,lastAccessedAt:this.lastAccessedAt,accessCount:this.accessCount,contextSize:this.context.length}}},P8=200,al=class{nodes=new Map;maxBoxes;now;constructor(e){this.maxBoxes=e?.maxBoxes??P8,this.now=e?.clock??Date.now}static boxId(e,o){return`${e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,60)}-${o.toString(36)}`}openBox(e,o,n,r){let s=this.nodes.get(e);if(s)return s.touch(this.now()),{box:s.snapshot(),created:!1};if(this.nodes.size>=this.maxBoxes&&(this.evictOne(),this.nodes.size>=this.maxBoxes))return null;let i=this.now(),a=new Ub(e,o,n,r??null,i);if(r){let l=this.nodes.get(r);l&&l.children.add(e)}return this.nodes.set(e,a),{box:a.snapshot(),created:!0}}closeBox(e){let o=this.nodes.get(e);return o?(o.closed=!0,o.touch(this.now()),o.snapshot()):null}isClosed(e){let o=this.nodes.get(e);return o?o.closed:!1}reopenBox(e){let o=this.nodes.get(e);return o?(o.closed=!1,o.touch(this.now()),o.snapshot()):null}setHorizon(e,o){let n=this.nodes.get(e);return n?(n.horizon=o,n.touch(this.now()),n.snapshot()):null}setParent(e,o){let n=this.nodes.get(e);return n?n.parentId===o?n.snapshot():o!==null&&this.wouldCreateCycle(e,o)?null:(n.parentId&&this.nodes.get(n.parentId)?.children.delete(e),n.parentId=o,o&&this.nodes.get(o)?.children.add(e),n.touch(this.now()),n.snapshot()):null}wouldCreateCycle(e,o){let n=new Set,r=o;for(;r!==null;){if(r===e||n.has(r))return!0;n.add(r),r=this.nodes.get(r)?.parentId??null}return!1}getBox(e){let o=this.nodes.get(e);return o?(o.touch(this.now()),o.snapshot()):null}listBoxes(e="lastAccessedAt"){let o=[...this.nodes.values()].map(n=>n.snapshot());switch(e){case"createdAt":return o.sort((n,r)=>n.createdAt-r.createdAt);case"accessCount":return o.sort((n,r)=>r.accessCount-n.accessCount);default:return o.sort((n,r)=>r.lastAccessedAt-n.lastAccessedAt)}}get size(){return this.nodes.size}addContext(e,o){let n=this.nodes.get(e);return n?(n.context.push({ts:this.now(),text:o}),n.touch(this.now()),n.snapshot()):null}getContext(e){let o=this.nodes.get(e);return o?(o.touch(this.now()),[...o.context]):[]}getContextChain(e){let o=[],n=new Set,r=e;for(;r&&!n.has(r);){n.add(r);let s=this.nodes.get(r);if(!s)break;s.touch(this.now()),o.push({boxId:s.id,entries:[...s.context]}),r=s.parentId}return o}addDependency(e,o){let n=this.nodes.get(e);return!n||!this.nodes.has(o)||n.id===o?!1:(n.dependencies.add(o),n.touch(this.now()),!0)}getDependencies(e){let o=this.nodes.get(e);return o?[...o.dependencies]:[]}pinBox(e){let o=this.nodes.get(e);return o?(o.pinned=!0,o.touch(this.now()),o.snapshot()):null}unpinBox(e){let o=this.nodes.get(e);return o?(o.pinned=!1,o.touch(this.now()),o.snapshot()):null}evictOne(){let e=[];for(let n of this.nodes.values())n.horizon==="longo"||n.pinned||e.push(n);if(e.length===0)return null;e.sort((n,r)=>{let s=n.horizon==="curto"?0:1,i=r.horizon==="curto"?0:1;if(s!==i)return s-i;let a=n.closed?0:1,l=r.closed?0:1;return a!==l?a-l:n.lastAccessedAt!==r.lastAccessedAt?n.lastAccessedAt-r.lastAccessedAt:n.accessCount-r.accessCount});let o=e[0];return this.removeNode(o)}forceEvict(e){let o=this.nodes.get(e);return!o||o.horizon==="longo"||o.pinned?null:this.removeNode(o)}removeBox(e){let o=this.nodes.get(e);return o?this.removeNode(o):null}removeNode(e){if(e.parentId){let o=this.nodes.get(e.parentId);o&&o.children.delete(e.id)}return this.nodes.delete(e.id),e.snapshot()}}});function wr(t,e){for(let o of e){let n=t[o];if(typeof n=="string")return n;if(typeof n=="number"&&Number.isFinite(n))return String(n)}}function un(t,e){let o=wr(t,e);return o!==void 0&&o.length>0?o:void 0}function qb(t,e,o=!1){let n=t[e];if(typeof n=="boolean")return n;if(typeof n=="string"){let r=n.trim().toLowerCase();if(r==="true")return!0;if(r==="false")return!1}return o}function L8(t){if(Array.isArray(t))return t;if(typeof t=="string"){let e=t.trim();if(e.startsWith("["))try{let o=JSON.parse(e);if(Array.isArray(o))return o}catch{}return}if(t!==null&&typeof t=="object"){let e=t,o=Object.keys(e);if(o.length>0&&o.every(n=>/^\d+$/.test(n)))return o.sort((n,r)=>Number(n)-Number(r)).map(n=>e[n])}}function ll(t,e){for(let o of e){let n=L8(t[o]);if(n!==void 0)return n}}function mt(t){let e=Object.keys(t);return e.length===0?"nenhum argumento":e.slice(0,4).map(n=>{let r=t[n],s=r===null?"null":Array.isArray(r)?"array":typeof r,i=typeof r=="string"?` ${JSON.stringify(r.slice(0,40))}`:"";return`${n}=${s}${i}`}).join(", ")}function Li(t){for(let e of I8){let o=t[e];if(typeof o=="object"&&o!==null&&!Array.isArray(o))return o;if(typeof o!="string")continue;let n=o.trim();if(!(n===""||!n.startsWith("{")))try{let r=JSON.parse(n);if(typeof r=="object"&&r!==null&&!Array.isArray(r))return r}catch{}}return t}var I8,is=C(()=>{"use strict";I8=["input","arguments","args","params","parameters","body","payload"]});function dp(t){let e=[];for(let o of t){e.push({step:o,depth:0});for(let n of o.substeps??[])e.push({step:n,depth:1})}return e}function lD(t,e){let o,n="pending",r;if(typeof t=="string")o=t;else if(t!==null&&typeof t=="object"){let i=t,a=i.title??i.step??i.text??i.name??i.content;if(typeof a=="string"&&(o=a),typeof i.status=="string"&&N8.has(i.status)&&(n=i.status),e){let l=i.substeps??i.subtasks??i.subpassos??i.children;if(Array.isArray(l)&&l.length>0){let c=[];for(let d of l){let m=lD(d,!1);if(typeof m=="string")return m;c.push(m)}r=c}}}if(o===void 0||o.trim()==="")return $8;let s=o.trim().slice(0,F8);return r?{title:s,status:n,substeps:r}:{title:s,status:n}}function cD(t){let e=ll(t,sD);if(e!==void 0)return e;for(let o of sD){let n=t[o];if(n===null||typeof n!="object"||Array.isArray(n))continue;let r=cD(n);if(r!==void 0)return r}}function B8(t){let e=cD(t);if(e===void 0)return{error:`update_plan: passe "steps" como uma LISTA de passos (string ou {title,status}). Recebi: ${mt(t)}.`};if(e.length===0)return{error:"update_plan: a lista de passos est\xE1 vazia."};let o=[];for(let i of e){let a=lD(i,!0);if(typeof a=="string")return{error:a};o.push(a)}let n=new Set,r=i=>{if(!n.has(i))return n.add(i),i;for(let a=2;;a++){let l=`${i} #${a}`;if(!n.has(l))return n.add(l),l}};for(let i=0;i<o.length;i++){let a=o[i],l=r(a.title),c=a.substeps?.map(d=>({...d,title:r(d.title)}));o[i]=c!==void 0?{...a,title:l,substeps:c}:{...a,title:l}}let s=dp(o).length;return s>iD?{error:`update_plan: no m\xE1ximo ${iD} passos (recebidos ${s}).`}:{steps:o}}function U8(t){let e=dp(t),o=e.filter(r=>r.step.status==="completed").length,n=e.map(r=>`${" ".repeat(r.depth)}${dD[r.step.status]} ${r.step.title}`).join(`
|
|
2
2
|
`);return`plano (${o}/${e.length}):
|
|
3
3
|
${n}`}function q8(t,e){return e<0?"m\xE9dio":t===e?"curto":t>e?"longo":"m\xE9dio"}function H8(t,e){let o=new Map;for(let i of e.listBoxes())o.set(i.label,i.id);let n=t.findIndex(i=>i.status==="in_progress"||(i.substeps??[]).some(a=>a.status==="in_progress")),r=(i,a,l)=>{let c=i.status==="in_progress"?"curto":l,d=o.get(i.title),m=d??al.boxId(i.title,0);return d?(i.status!=="completed"&&e.isClosed(d)&&e.reopenBox(d),e.setHorizon(d,c),e.setParent(d,a)):e.openBox(m,c,i.title,a),i.status==="completed"&&!e.isClosed(m)&&e.closeBox(m),o.set(i.title,m),m};t.forEach((i,a)=>{let l=q8(a,n),c=r(i,null,l);for(let d of i.substeps??[])r(d,c,l)});let s=new Set;for(let i of t){s.add(i.title);for(let a of i.substeps??[])s.add(a.title)}for(let i of e.listBoxes())s.has(i.label)||e.removeBox(i.id)}function W8(t,e){if(!e)return U8(t);let o=new Map;for(let c of e.listBoxes())o.set(c.label,c);let n=new Map;for(let c of e.listBoxes())n.set(c.id,c);let r=new Map,s=(c,d=new Set)=>{let m=r.get(c);if(m!==void 0)return m;let u=n.get(c);if(!u||!u.parentId||d.has(c))return r.set(c,0),0;let p=s(u.parentId,new Set(d).add(c))+1;return r.set(c,p),p},i=dp(t),l=[`plano (${i.filter(c=>c.step.status==="completed").length}/${i.length}):`];for(let{step:c,depth:d}of i){let m=o.get(c.title),u=m?j8[m.horizon]:"",p=m?s(m.id):d,g=" ".repeat(p),y=dD[c.status];l.push(`${g}${u} ${y} ${c.title}`)}return l.join(`
|
|
4
4
|
`)}var ad,sD,N8,iD,F8,$8,dD,j8,aD,G8,uD,up=C(()=>{"use strict";jb();is();ad="update_plan",sD=["steps","plan","todos","items"];N8=new Set(["pending","in_progress","completed"]),iD=30,F8=120,$8="update_plan: cada passo precisa de um t\xEDtulo (texto) n\xE3o-vazio.";dD={pending:"\u2610",in_progress:"\u25B6",completed:"\u2611"};j8={longo:"[\u{1F4D0}]",m\u00E9dio:"[\u{1F4CB}]",curto:"[\u{1F4CC}]"};aD=Object.freeze({type:"string",enum:["pending","in_progress","completed"],description:"pending (a fazer) \xB7 in_progress (em curso) \xB7 completed (feito)."}),G8=Object.freeze({type:"object",properties:{steps:{type:"array",description:"A lista COMPLETA de passos do plano (re-emita TODOS a cada atualiza\xE7\xE3o \u2014 substitui o anterior).",items:{type:"object",properties:{title:{type:"string",description:"O passo, curto e no imperativo."},status:aD,substeps:{type:"array",description:"OPCIONAL: sub-passos que detalham este passo (1 n\xEDvel). Aparecem indentados sob o passo e seguem o foco dele. Use quando um passo tem a\xE7\xF5es menores distintas.",items:{type:"object",properties:{title:{type:"string",description:"O sub-passo, curto e no imperativo."},status:aD},required:["title"],additionalProperties:!1}}},required:["title"],additionalProperties:!1}}},required:["steps"],additionalProperties:!1}),uD={name:ad,effect:"read",group:"plano",description:"Declara/atualiza um PLANO vis\xEDvel (checklist de passos). Use ao iniciar uma tarefa com V\xC1RIOS passos e a cada progresso: re-emita a lista TODA marcando o status de cada passo (pending/in_progress/completed). Mantenha 1 passo in_progress por vez. N\xE3o tem efeito no sistema \u2014 \xE9 s\xF3 o seu plano, para voc\xEA e para o usu\xE1rio acompanharem.",parameters:G8,async run(t,e){let o=B8(t);return"error"in o?{ok:!1,observation:o.error}:(e.graph&&H8(o.steps,e.graph),e.plan&&e.plan.set(dp(o.steps).map(r=>({title:r.step.title,status:r.step.status}))),{ok:!0,observation:W8(o.steps,e.graph)})}}});function fD(t){let e=t.question??t.prompt??t.text??t.message;if(typeof e!="string"||e.trim()==="")return{error:`perguntar: passe "question" (a pergunta em texto). Para escolha, passe tamb\xE9m "options". Recebi: ${mt(t)}.`};let o=e.trim().slice(0,mD),n=t.header??t.title,r=typeof n=="string"&&n.trim()!==""?n.trim().slice(0,z8):void 0,s=t.options!==void 0||t.choices!==void 0,i=ll(t,["options","choices"]);if(s&&i===void 0)return{error:`perguntar: "options" n\xE3o foi reconhecido como uma LISTA de op\xE7\xF5es. Recebi: ${mt(t)}.`};let a=i!==void 0?X8(i):void 0;if(typeof a=="string")return{error:a};let l,c=t.kind??t.type;if(typeof c=="string"&&Y8.has(c))l=c;else{if(typeof c=="string"&&c.trim()!=="")return{error:`perguntar: "kind" inv\xE1lido "${c}". Use "single", "multi" ou "text".`};l=a!==void 0&&a.length>0?"single":"text"}if((l==="single"||l==="multi")&&(a===void 0||a.length===0))return{error:`perguntar: kind "${l}" requer "options" (uma lista de ao menos 1 op\xE7\xE3o).`};let d=t.allowOther,m=!(d===!1||typeof d=="string"&&d.trim().toLowerCase()==="false");return{spec:{kind:l,question:o,...r!==void 0?{header:r}:{},...l!=="text"&&a!==void 0?{options:a}:{},...l!=="text"?{allowOther:m}:{}}}}function X8(t){if(t.length===0)return'perguntar: a lista de "options" est\xE1 vazia.';if(t.length>fp)return`perguntar: no m\xE1ximo ${fp} op\xE7\xF5es (recebidas ${t.length}).`;let e=[];for(let o of t){let n,r;if(typeof o=="string")n=o;else if(o!==null&&typeof o=="object"){let s=o,i=s.label??s.text??s.value??s.name??s.title;typeof i=="string"&&(n=i),typeof s.description=="string"&&s.description.trim()!==""&&(r=s.description.trim().slice(0,K8))}if(n===void 0||n.trim()==="")return'perguntar: cada op\xE7\xE3o precisa de um "label" (texto) n\xE3o-vazio.';e.push({label:n.trim().slice(0,V8),...r!==void 0?{description:r}:{}})}return e}function J8(t){switch(t.kind){case"choice":return t.label;case"choices":return t.labels.length===0?"(nenhuma)":t.labels.join(", ");case"text":{let e=t.text.split(`
|
|
@@ -146,7 +146,7 @@ ${t.trim()}`}}function Hg(t,e,o=Ql){let{older:n,recent:r}=Tu(t,o);if(n.length===
|
|
|
146
146
|
`;case"t":return" ";case"r":return"\r";case'"':return'"';case"\\":return"\\";default:throw new De(`config.toml:${e}: escape n\xE3o suportado "\\${i}".`)}})}function pz(t,e,o){let n=e.trim();if(!n.startsWith("[")||!n.endsWith("]"))throw new De(`config.toml:${o}: ${t} deve ser um array de strings em uma linha.`);let r=n.slice(1,-1).trim();if(r.length===0)return[];let s=[];for(let i of oL(r,",")){let a=i.trim();if(a.length===0)continue;let l=mw(a,o);if(l===void 0)throw new De(`config.toml:${o}: ${t} \u2014 todo item deve ser string.`);s.push(l)}return s}function gz(t,e,o){let n=e.trim();if(!n.startsWith("{")||!n.endsWith("}"))throw new De(`config.toml:${o}: ${t} deve ser uma tabela inline { K = "v" }.`);let r=n.slice(1,-1).trim(),s={};if(r.length===0)return s;for(let i of oL(r,",")){let a=i.trim();if(a.length===0)continue;let l=tL(a);if(l===-1)throw new De(`config.toml:${o}: ${t} \u2014 esperava K = "v".`);let c=uw(a.slice(0,l).trim(),o);if(c.length!==1)throw new De(`config.toml:${o}: ${t} \u2014 chave inv\xE1lida.`);let d=mw(a.slice(l+1).trim(),o);if(d===void 0)throw new De(`config.toml:${o}: ${t}["${c[0]}"] deve ser string.`);s[c[0]]=d}return s}function oL(t,e){let o=[],n=0,r=!1,s="",i=0;for(let a=0;a<t.length;a++){let l=t[a];r?l===s&&t[a-1]!=="\\"&&(r=!1):l==='"'||l==="'"?(r=!0,s=l):l==="["||l==="{"?n++:l==="]"||l==="}"?n--:l===e&&n===0&&(o.push(t.slice(i,a)),i=a+1)}return o.push(t.slice(i)),o}var cz,nL=C(()=>{"use strict";th();cz="mcp_servers"});function bz(t){if(t.length<20||/\s/.test(t)||/^[~./]/.test(t)||!/^[A-Za-z0-9_\-+/=.]+$/.test(t))return!1;let e=/[A-Z]/.test(t),o=/[a-z]/.test(t),n=/[0-9]/.test(t);return(e?1:0)+(o?1:0)+(n?1:0)>=2||t.length>=32}function vz(t){let e=t.toLowerCase();return hz.some(o=>e.includes(o))}function fw(t,e){if(yz.test(e.trim()))return{looksLikeSecret:!1,signals:[]};let o=[];return e.length>0&&vz(t)&&o.push("secret-key-name"),bz(e)&&o.push("high-entropy"),{looksLikeSecret:o.length>0,signals:o}}var hz,yz,rL=C(()=>{"use strict";hz=["token","secret","password","passwd","apikey","api_key","access_key","accesskey","private_key","privatekey","credential","auth"],yz=/^\$\{?[A-Za-z_][A-Za-z0-9_]*\}?$|^%[A-Za-z_][A-Za-z0-9_]*%$/});function kz(t,e){return`mcp__${t}__${e}`}function xz(t){return t==="aluy-global"||t==="project"}function Lu(t,e){let o=[],n=new Map;for(let{origin:s,config:i}of t)for(let a of i.servers)n.has(a.name)||o.push(a.name),n.set(a.name,{origin:s,server:a});let r=e?Sz(e):void 0;return o.map(s=>{let{origin:i,server:a}=n.get(s),l=r?.get(s),c=a.disabled===!0?{kind:"disabled"}:l?l.ok?{kind:"ok",toolCount:l.tools.length}:{kind:"error",error:l.error??"falha na conex\xE3o"}:{kind:"unknown"},d=c.kind==="ok"&&l?l.tools:[];return{name:s,origin:i,command:a.command,args:a.args,envKeys:Object.keys(a.env),managed:xz(i),state:c,tools:d}})}function Sz(t){let e=new Map;for(let o of t.servers){let n=o.tools.map(r=>({qualifiedName:kz(o.server,r.descriptor.name),...r.descriptor.description!==void 0?{description:r.descriptor.description}:{}}));e.set(o.server,{ok:o.ok,...o.error!==void 0?{error:o.error}:{},tools:n})}return e}function Iu(t){if(t.command.trim()!=="--")return;let e=t.args.length>0?t.args.join(" "):"<command> [args...]";return`server "${t.name}" com command inv\xE1lido "--" (separador gravado por engano \u2014 nunca vai conectar). Re-adicione: aluy mcp add ${t.name} --force -- ${e}`}function pw(t){switch(t){case"aluy-global":return"~/.aluy/mcp.json";case"project":return".mcp.json (projeto)";case"codex":return"~/.codex (Codex)"}}var sL=C(()=>{"use strict"});var iL=C(()=>{"use strict"});function wz(t){return t instanceof Error?t.message:String(t)}async function Nu(t,e,o){let n=t.servers.filter(l=>l.disabled!==!0),r=await Promise.all(n.map(async l=>{let c=e(l);try{let m=(await c.connect(l)).map(p=>({server:l.name,descriptor:p,transport:c})),u={server:l.name,ok:!0,tools:m};return o?.onServerResult?.(u),{result:u,transport:c}}catch(d){aL(c);let m={server:l.name,ok:!1,tools:[],error:wz(d)};return o?.onServerResult?.(m),{result:m}}})),s=[],i=[],a=[];for(let l of r)s.push(l.result),i.push(...l.result.tools),l.transport&&a.push(l.transport);return{servers:s,tools:i,transports:a}}async function gw(t){await Promise.all(t.map(e=>aL(e)))}async function aL(t){try{await t.close()}catch{}}var lL=C(()=>{"use strict";th()});function uL(t,e){let o=new URL(dL);return t.trim().length>0&&o.searchParams.set("search",t.trim()),o.searchParams.set("limit",String(Az)),e!==void 0&&e.length>0&&o.searchParams.set("cursor",e),o.toString()}async function Fu(t,e,o){let n=t.trim(),r=[],s;for(let i=0;i<Ez;i++){let a=uL(n,s),l;try{l=await e(a,o)}catch(m){return{ok:!1,query:n,reason:oh(Mz(m))}}if(!l.ok)return{ok:!1,query:n,reason:oh(l.reason)};if(l.status<200||l.status>=300)return{ok:!1,query:n,reason:oh(`HTTP ${l.status}`)};let c;try{c=JSON.parse(l.body)}catch{return{ok:!1,query:n,reason:oh("resposta n\xE3o \xE9 JSON v\xE1lido")}}let d=fL(c);for(let m of d.servers)if(mL(m,n)&&r.push(m),r.length>=hw)break;if(r.length>=hw||(s=d.nextCursor,s===void 0||s.length===0))break}return{ok:!0,query:n,results:r}}function oh(t){return`registro MCP indispon\xEDvel (${tc}): ${t}`}function mL(t,e){if(e.length===0)return!0;let o=e.toLowerCase();return[t.name,t.title??"",t.description,t.run.command??"",t.run.args.join(" ")].join(" ").toLowerCase().includes(o)}function fL(t){if(!ms(t))return{servers:[]};let e=Array.isArray(t.servers)?t.servers:[],o=[];for(let s of e){let i=Cz(s);i!==void 0&&o.push(i)}let n=ms(t.metadata)?t.metadata:void 0,r=n!==void 0&&typeof n.nextCursor=="string"?n.nextCursor:void 0;return{servers:o,...r!==void 0?{nextCursor:r}:{}}}function Cz(t){if(!ms(t))return;let e=ms(t.server)?t.server:t,o=typeof e.name=="string"?e.name.trim():"";if(o.length===0)return;let n=typeof e.description=="string"?e.description.trim():"",r=typeof e.title=="string"&&e.title.trim().length>0?e.title.trim():void 0,s=typeof e.version=="string"?e.version.trim():void 0,i=Dz(e);return{name:o,description:n,run:i,...r!==void 0?{title:r}:{},...s!==void 0?{version:s}:{}}}function Dz(t){let e=[],o=Array.isArray(t.remotes)?t.remotes:[];for(let r of o)ms(r)&&typeof r.url=="string"&&e.push(r.url);let n=Array.isArray(t.packages)?t.packages:[];for(let r of n){if(!ms(r))continue;let s=Rz(r);if(s!==void 0)return{...s,remoteUrls:e}}return{args:[],env:[],remoteUrls:e}}function Rz(t){let e=sa(t.registryType)??sa(t.registry_name),o=sa(t.identifier)??sa(t.name);if(o===void 0)return;let n=sa(t.version),r=sa(t.runtimeHint),s=ms(t.transport)?sa(t.transport.type):void 0,i=_z(t.environmentVariables),a=cL(t.runtimeArguments),l=cL(t.packageArguments),c=n!==void 0?`${o}@${n}`:o;return e==="npm"||r==="npx"?{command:"npx",args:Tz(["-y",...a,c,...l]),env:i,...s!==void 0?{transport:s}:{}}:e==="pypi"||r==="uvx"||r==="uv"?{command:"uvx",args:[...a,o,...l],env:i,...s!==void 0?{transport:s}:{}}:e==="oci"||r==="docker"?{command:"docker",args:["run","-i","--rm",...a,c,...l],env:i,...s!==void 0?{transport:s}:{}}:{args:[c],env:i,...s!==void 0?{transport:s}:{}}}function Tz(t){let e=[],o=!1;for(let n of t){if(n==="-y"||n==="--yes"){if(o)continue;o=!0}e.push(n)}return e}function cL(t){if(!Array.isArray(t))return[];let e=[];for(let o of t)ms(o)&&typeof o.value=="string"&&e.push(o.value);return e}function _z(t){if(!Array.isArray(t))return[];let e=[];for(let o of t)ms(o)&&typeof o.name=="string"&&o.name.length>0&&e.push({name:o.name,required:o.isRequired===!0});return e}function sa(t){return typeof t=="string"&&t.trim().length>0?t.trim():void 0}function ms(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Mz(t){return t instanceof Error?t.message:String(t)}var tc,dL,Ez,Az,hw,pL=C(()=>{"use strict";tc="registry.modelcontextprotocol.io",dL=`https://${tc}/v0/servers`,Ez=5,Az=100,hw=25});function hL(t){let{command:e,args:o}=t.run;if(e===void 0)return;let n=yL(t.name);return["aluy","mcp","add",gL(n),"--",e,...o.map(gL)].join(" ")}function yL(t){let o=(t.split("/").pop()??t).replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return o.length>0?o:"server"}function gL(t){return/^[A-Za-z0-9_./@:+=-]+$/.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}function yw(t){if(!t.ok)return`\u26A0 ${t.reason}
|
|
147
147
|
Tente de novo em instantes; a busca no registro n\xE3o bloqueia o resto do aluy.`;if(t.results.length===0)return`nenhum server encontrado para "${t.query}" no registro oficial MCP.`;let e=[],o=t.results.length;e.push(`${o} server${o===1?"":"s"} para "${t.query}" (registro oficial MCP):`),e.push("");for(let n of t.results)e.push(Oz(n)),e.push("");return e.push('Para instalar, copie a linha "\u2192 aluy mcp add \u2026" do server desejado.'),e.push("A sa\xEDda do registro \xE9 apenas informativa \u2014 nada \xE9 executado pela busca."),e.join(`
|
|
148
148
|
`)}function Oz(t){let o=[`\u2022 ${t.version!==void 0?`${t.name} (v${t.version})`:t.name}`],n=t.title!==void 0&&t.title!==t.name?t.title:void 0;n!==void 0&&o.push(` ${n}`),t.description.length>0&&o.push(` ${Pz(t.description,200)}`);let r=hL(t);if(r!==void 0){o.push(` \u2192 ${r}`),t.run.transport!==void 0&&t.run.transport!=="stdio"&&o.push(` (transporte "${t.run.transport}" \u2014 v1 do aluy s\xF3 pluga servers stdio LOCAIS)`);let s=t.run.env.filter(i=>i.required).map(i=>i.name);s.length>0&&o.push(` requer env: ${s.join(", ")} (defina por-server no mcp.json)`)}else t.run.remoteUrls.length>0?o.push(` (server REMOTO: ${t.run.remoteUrls.join(", ")} \u2014 fora do v1 de \`aluy mcp add\`)`):o.push(" (sem pacote local conhecido \u2014 nada a instalar pelo aluy)");return o.join(`
|
|
149
|
-
`)}function Pz(t,e){return t.length<=e?t:t.slice(0,e-1).trimEnd()+"\u2026"}var bL=C(()=>{"use strict"});var vL=C(()=>{"use strict";th();nL();rL();sL();iL();lL();Jk();gp();pL();bL()});var kL=C(()=>{"use strict"});function Js(t){let e=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(t.trim());if(!e)return null;let o=e[4]?e[4].split(".").map(n=>/^\d+$/.test(n)?Number(n):n):[];return{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),pre:o}}function bw(t,e){let o=Js(t),n=Js(e);if(!o||!n)return null;for(let s of["major","minor","patch"])if(o[s]!==n[s])return o[s]<n[s]?-1:1;if(o.pre.length===0&&n.pre.length===0)return 0;if(o.pre.length===0)return 1;if(n.pre.length===0)return-1;let r=Math.max(o.pre.length,n.pre.length);for(let s=0;s<r;s++){let i=o.pre[s],a=n.pre[s];if(i===void 0)return-1;if(a===void 0)return 1;if(i===a)continue;let l=typeof i=="number",c=typeof a=="number";return l&&c?i<a?-1:1:l?-1:c?1:i<a?-1:1}return 0}function ia(t,e){return bw(t,e)===1}function $u(t){let e=Js(t);if(!e||e.pre.length===0)return"latest";let o=e.pre[0];return String(o)}function xL(t,e){return!Js(t)||!Js(e)||$u(t)!==$u(e)?!1:ia(e,t)}function Bu(t,e){let o=Js(t)?$u(t):null;if(o===null)return null;let n=null;for(let r of e)!Js(r)||$u(r)!==o||(n===null||bw(r,n)===1)&&(n=r);return n}function nh(t,e){let o=Bu(t,e);return o!==null&&xL(t,o)?o:null}var vw=C(()=>{"use strict"});function rh(t,e,o){if(e.size===0)return{kind:"discard",reason:"allowlist vazia (default fechado)"};if(!e.has(t.conversation))return{kind:"discard",reason:`canal ${t.conversation} n\xE3o-allowlistado`};if(t.senderIsBot===!0)return{kind:"discard",reason:"remetente \xE9 bot (anti-loop)"};let n=t.content.trim();if(n==="")return{kind:"discard",reason:"mensagem sem conte\xFAdo"};if(o.authIsForgeable)return{kind:"data",text:n};if(t.provenance.kind==="third-party-relayed")return{kind:"data",text:n};let r=t.provenance.embeddedThirdParty?.trim();return r?{kind:"instruction",text:n,forwardedData:r}:{kind:"instruction",text:n}}var kw=C(()=>{"use strict"});function xw(t){let e;if(t.forwarded===!0)e={kind:"third-party-relayed"};else{let o=(t.quotedText??"").trim();e=o?{kind:"author-direct",embeddedThirdParty:o}:{kind:"author-direct"}}return{content:t.text,sender:String(t.fromId),conversation:String(t.chatId),provenance:e,...t.messageId!==void 0?{messageId:t.messageId}:{},...t.isBot===!0?{senderIsBot:!0}:{}}}function Sw(t){let e=new Set;for(let o of t)typeof o=="number"&&Number.isFinite(o)&&Number.isInteger(o)&&e.add(o);return e}var Uu,SL=C(()=>{"use strict";kw();Uu={id:"telegram",displayName:"Telegram",authIsForgeable:!1}});function sh(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function oc(t){return typeof t=="object"&&t!==null?t:void 0}function ww(t,e){let o=oc(t);if(!o||o.ok!==!0||!Array.isArray(o.result))return{updates:[],nextOffset:e};let n=[],r=[],s=e-1;for(let i of o.result){let a=oc(i);if(!a)continue;let l=sh(a.update_id);l!==void 0&&l>s&&(s=l);let c=oc(a.message);if(!c){r.push({updateId:l,motivo:"sem-message"});continue}let d=oc(c.chat),m=sh(d?.id);if(m===void 0){r.push({updateId:l,motivo:"sem-chat"});continue}if(d?.type!=="private"){r.push({updateId:l,motivo:"nao-privado",chatId:m,...typeof d?.type=="string"?{chatType:d.type}:{}});continue}let u=oc(c.from),p=sh(u?.id)??m,g=u?.is_bot===!0,y=typeof c.text=="string"?c.text:"",h=c.forward_origin!==void 0||c.forward_from!==void 0||c.forward_from_chat!==void 0||c.forward_sender_name!==void 0||c.forward_date!==void 0,v=(()=>{let S=oc(c.quote)?.text;return typeof S=="string"&&S.trim()!==""?S:void 0})(),x=sh(c.message_id);n.push({chatId:m,fromId:p,text:y,...x!==void 0?{messageId:x}:{},...h?{forwarded:!0}:{},...v!==void 0?{quotedText:v}:{},...g?{isBot:!0}:{}})}return{updates:n,nextOffset:s+1,...r.length>0?{descartados:r}:{}}}var wL=C(()=>{"use strict"});var ju,EL=C(()=>{"use strict";ju=class{maxPerWindow;windowMs;stamps=[];constructor(e,o){this.maxPerWindow=e,this.windowMs=o}tryConsume(e){let o=e-this.windowMs;for(;this.stamps.length>0&&this.stamps[0]<=o;)this.stamps.shift();return this.stamps.length>=this.maxPerWindow?!1:(this.stamps.push(e),!0)}get used(){return this.stamps.length}}});function Ew(t){return`connector-${t}-token`}function qu(t){let e=t.trim(),o=e.indexOf(":");return o<=0?`\u2026(${e.length} chars)`:`${e.slice(0,o)}:\u2026(${e.length-o-1} chars)`}function Aw(t,e){let o=e.trim();return o.length<8?t:t.split(o).join("\xABREDACTED\xBB")}var AL=C(()=>{"use strict"});function Cw(t){return typeof t=="string"&&t.trim()!==""?t.trim():void 0}function Rw(t){let e;try{e=JSON.parse(t)}catch(i){return{error:`aluy-plugin.json n\xE3o \xE9 JSON v\xE1lido: ${i instanceof Error?i.message:""}`}}if(typeof e!="object"||e===null||Array.isArray(e))return{error:"aluy-plugin.json precisa ser um objeto JSON."};let o=e,n=Cw(o.name);if(n===void 0)return{error:'aluy-plugin.json: falta "name" (o identificador do plugin).'};if(!Lz.test(n))return{error:`aluy-plugin.json: "name" inv\xE1lido ("${n.slice(0,40)}"). Use min\xFAsculas, n\xFAmeros e h\xEDfen \u2014 ele vira prefixo na tela e nome de pasta no disco.`};let r=Cw(o.version),s=Cw(o.description);return{manifest:{name:n,...r!==void 0?{version:r.slice(0,40)}:{},...s!==void 0?{description:s.slice(0,200)}:{}}}}function Tw(t,e){return`${t}:${e}`}var Dw,Lz,CL=C(()=>{"use strict";Dw=["agents","commands","skills","workflows","hooks"],Lz=/^[a-z0-9][a-z0-9-]{0,38}[a-z0-9]$/});function _w(t,e=[],o="~/.aluy/plugins"){let n=[];if(t.length===0&&e.length===0)return n.push("nenhum plugin instalado."),n.push(`instale com \`/plugin install <caminho>\` \u2014 eles vivem em ${o}/`),n;for(let r of t){let s=[r.manifest.name];r.manifest.version!==void 0&&s.push(`v${r.manifest.version}`),r.ativo||s.push("\xB7 DESLIGADO"),n.push(s.join(" ")),r.manifest.description!==void 0&&n.push(` ${r.manifest.description}`),n.push(r.extensoes.length>0?` traz: ${[...r.extensoes].sort().join(", ")}`:" \u26A0 n\xE3o traz nenhuma extens\xE3o reconhecida (agents/commands/skills/workflows/hooks)")}for(let r of e)n.push(`\u26A0 ${r.dir}: ${r.motivo}`);return n}var DL=C(()=>{"use strict"});var j=C(()=>{"use strict";rD();LD();zD();ET();zP();wS();eL();vL();nw();kL();Bl();vw();vw();kw();SL();wL();EL();AL();CL();DL()});import{posix as eV}from"node:path";function tV(t){return eV.normalize(t)}function en(t){let e=tV(t);for(let o of oV)if(o.re.test(e))return o.deny?{kind:"deny",why:o.why}:{kind:"ask",why:o.why};return{kind:"allow"}}function Vw(t){return en(t).kind==="allow"}var oV,oi=C(()=>{"use strict";oV=[{re:/(?:^|\/|~\/)\.ssh(?:\/|$)/,why:"chaves SSH (~/.ssh)",deny:!0},{re:/(?:^|\/|~\/)\.aws(?:\/|$)/,why:"credenciais AWS (~/.aws)",deny:!0},{re:/(?:^|\/|~\/)\.gnupg(?:\/|$)/,why:"chaves GPG (~/.gnupg)",deny:!0},{re:/(?:~\/|\$\{?HOME\}?\/|\/(?:home|Users)\/[^/]+\/)\.aluy\/rooms(?:\/|$)/,why:"arquivos de sala do Aluy (~/.aluy/rooms)",deny:!0},{re:/~\/\.aluy(?:\/|$)/,why:"estado/credencial do Aluy (~/.aluy)",deny:!0},{re:/(?:^|\/)\.aluy(?:\/(?!agents\/|workflows\/|commands\/)|$)/,why:"estado/credencial do Aluy (.aluy/)",deny:!0},{re:/(?:^|\/|~\/)\.config\/gh\/hosts\.yml$/,why:"token do gh CLI",deny:!0},{re:/(?:^|\/|~\/)\.docker\/config\.json$/,why:"credenciais Docker",deny:!0},{re:/(?:^|\/|~\/)\.kube\/config$/,why:"kubeconfig",deny:!0},{re:/(?:^|\/)id_(?:rsa|ed25519|ecdsa|dsa)\b/,why:"chave privada",deny:!0},{re:/\.pem$|\.p12$|\.pfx$|\.key$/i,why:"material de chave privada",deny:!0},{re:/(?:^|[/\w.-])\.env(?:\.(?!example$|sample$|template$|dist$)[\w.-]+)?$/,why:"arquivo .env (segredos)",deny:!1},{re:/(?:^|\/)[^/]*(?:secret|credential|token|apikey|api_key|password|passwd)[^/]*$/i,why:"arquivo com nome sens\xEDvel (token/secret)",deny:!1}]});var bE={};Bb(bE,{UserWorkflowsLoader:()=>Lr,WORKFLOWS_DIRNAME:()=>yE});import{homedir as QK}from"node:os";import{join as hE}from"node:path";import{readdirSync as ZK,readFileSync as e7,mkdirSync as t7,statSync as o7}from"node:fs";var n7,yE,r7,s7,Lr,_h=C(()=>{"use strict";j();n7=448,yE="workflows",r7=64*1024,s7=256,Lr=class{dir;constructor(e={}){let o=e.baseDir??hE(QK(),".aluy");this.dir=hE(o,yE)}get workflowsDir(){return this.dir}ensureDir(){try{t7(this.dir,{mode:n7,recursive:!0})}catch{}}load(){let e;try{e=ZK(this.dir,{withFileTypes:!0})}catch{return{workflows:[],errors:[]}}let o=e.filter(i=>(i.isFile()||i.isSymbolicLink())&&i.name.toLowerCase().endsWith(".md")).map(i=>i.name).sort((i,a)=>i.localeCompare(a)),n=new Set,r=[],s=[];for(let i of o){if(r.length>=s7)break;let a=this.readOne(i);if(a!==null){if(pu(a)){s.push(a);continue}n.has(a.name)||(n.add(a.name),r.push(a))}}return{workflows:r,errors:s}}readOne(e){let o=hE(this.dir,e);try{let n=o7(o);if(!n.isFile()||n.size>r7)return null;let r=e7(o,"utf8");return gu(e,r,"global")}catch{return null}}}});var kE={};Bb(kE,{PROJECT_WORKFLOWS_DIRNAMES:()=>vE,ProjectWorkflowsLoader:()=>Ir});import{join as i7}from"node:path";import{readdirSync as a7,readFileSync as l7,statSync as c7}from"node:fs";var vE,d7,u7,Ir,Mh=C(()=>{"use strict";j();oi();vE=[".claude/workflows",".aluy/workflows"],d7=64*1024,u7=256,Ir=class{workspace;constructor(e){this.workspace=e.workspace}load(){let e=new Set,o=[],n=[];for(let r of vE){let s;try{s=this.workspace.resolveInside(r)}catch{continue}let i;try{i=a7(s,{withFileTypes:!0})}catch{continue}let a=i.filter(l=>(l.isFile()||l.isSymbolicLink())&&l.name.toLowerCase().endsWith(".md")).map(l=>l.name).sort((l,c)=>l.localeCompare(c));for(let l of a){if(o.length>=u7)break;let c=this.readOne(r,s,l);if(c!==null){if(pu(c)){n.push(c);continue}e.has(c.name)||(e.add(c.name),o.push(c))}}}return{workflows:o,errors:n}}readOne(e,o,n){let r=`${e}/${n}`;if(en(r).kind!=="allow")return null;let s=i7(o,n);try{this.workspace.resolveInside(r);let i=c7(s);if(!i.isFile()||i.size>d7)return null;let a=l7(s,"utf8");return gu(n,a,"project")}catch{return null}}}});var O1=_8((SDe,M1)=>{M1.exports=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g});var No="1.0.0-rc.181";j();var RL=`aluy \u2014 agente de terminal que roda na sua m\xE1quina, com o seu provider de LLM
|
|
149
|
+
`)}function Pz(t,e){return t.length<=e?t:t.slice(0,e-1).trimEnd()+"\u2026"}var bL=C(()=>{"use strict"});var vL=C(()=>{"use strict";th();nL();rL();sL();iL();lL();Jk();gp();pL();bL()});var kL=C(()=>{"use strict"});function Js(t){let e=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(t.trim());if(!e)return null;let o=e[4]?e[4].split(".").map(n=>/^\d+$/.test(n)?Number(n):n):[];return{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),pre:o}}function bw(t,e){let o=Js(t),n=Js(e);if(!o||!n)return null;for(let s of["major","minor","patch"])if(o[s]!==n[s])return o[s]<n[s]?-1:1;if(o.pre.length===0&&n.pre.length===0)return 0;if(o.pre.length===0)return 1;if(n.pre.length===0)return-1;let r=Math.max(o.pre.length,n.pre.length);for(let s=0;s<r;s++){let i=o.pre[s],a=n.pre[s];if(i===void 0)return-1;if(a===void 0)return 1;if(i===a)continue;let l=typeof i=="number",c=typeof a=="number";return l&&c?i<a?-1:1:l?-1:c?1:i<a?-1:1}return 0}function ia(t,e){return bw(t,e)===1}function $u(t){let e=Js(t);if(!e||e.pre.length===0)return"latest";let o=e.pre[0];return String(o)}function xL(t,e){return!Js(t)||!Js(e)||$u(t)!==$u(e)?!1:ia(e,t)}function Bu(t,e){let o=Js(t)?$u(t):null;if(o===null)return null;let n=null;for(let r of e)!Js(r)||$u(r)!==o||(n===null||bw(r,n)===1)&&(n=r);return n}function nh(t,e){let o=Bu(t,e);return o!==null&&xL(t,o)?o:null}var vw=C(()=>{"use strict"});function rh(t,e,o){if(e.size===0)return{kind:"discard",reason:"allowlist vazia (default fechado)"};if(!e.has(t.conversation))return{kind:"discard",reason:`canal ${t.conversation} n\xE3o-allowlistado`};if(t.senderIsBot===!0)return{kind:"discard",reason:"remetente \xE9 bot (anti-loop)"};let n=t.content.trim();if(n==="")return{kind:"discard",reason:"mensagem sem conte\xFAdo"};if(o.authIsForgeable)return{kind:"data",text:n};if(t.provenance.kind==="third-party-relayed")return{kind:"data",text:n};let r=t.provenance.embeddedThirdParty?.trim();return r?{kind:"instruction",text:n,forwardedData:r}:{kind:"instruction",text:n}}var kw=C(()=>{"use strict"});function xw(t){let e;if(t.forwarded===!0)e={kind:"third-party-relayed"};else{let o=(t.quotedText??"").trim();e=o?{kind:"author-direct",embeddedThirdParty:o}:{kind:"author-direct"}}return{content:t.text,sender:String(t.fromId),conversation:String(t.chatId),provenance:e,...t.messageId!==void 0?{messageId:t.messageId}:{},...t.isBot===!0?{senderIsBot:!0}:{}}}function Sw(t){let e=new Set;for(let o of t)typeof o=="number"&&Number.isFinite(o)&&Number.isInteger(o)&&e.add(o);return e}var Uu,SL=C(()=>{"use strict";kw();Uu={id:"telegram",displayName:"Telegram",authIsForgeable:!1}});function sh(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function oc(t){return typeof t=="object"&&t!==null?t:void 0}function ww(t,e){let o=oc(t);if(!o||o.ok!==!0||!Array.isArray(o.result))return{updates:[],nextOffset:e};let n=[],r=[],s=e-1;for(let i of o.result){let a=oc(i);if(!a)continue;let l=sh(a.update_id);l!==void 0&&l>s&&(s=l);let c=oc(a.message);if(!c){r.push({updateId:l,motivo:"sem-message"});continue}let d=oc(c.chat),m=sh(d?.id);if(m===void 0){r.push({updateId:l,motivo:"sem-chat"});continue}if(d?.type!=="private"){r.push({updateId:l,motivo:"nao-privado",chatId:m,...typeof d?.type=="string"?{chatType:d.type}:{}});continue}let u=oc(c.from),p=sh(u?.id)??m,g=u?.is_bot===!0,y=typeof c.text=="string"?c.text:"",h=c.forward_origin!==void 0||c.forward_from!==void 0||c.forward_from_chat!==void 0||c.forward_sender_name!==void 0||c.forward_date!==void 0,v=(()=>{let S=oc(c.quote)?.text;return typeof S=="string"&&S.trim()!==""?S:void 0})(),x=sh(c.message_id);n.push({chatId:m,fromId:p,text:y,...x!==void 0?{messageId:x}:{},...h?{forwarded:!0}:{},...v!==void 0?{quotedText:v}:{},...g?{isBot:!0}:{}})}return{updates:n,nextOffset:s+1,...r.length>0?{descartados:r}:{}}}var wL=C(()=>{"use strict"});var ju,EL=C(()=>{"use strict";ju=class{maxPerWindow;windowMs;stamps=[];constructor(e,o){this.maxPerWindow=e,this.windowMs=o}tryConsume(e){let o=e-this.windowMs;for(;this.stamps.length>0&&this.stamps[0]<=o;)this.stamps.shift();return this.stamps.length>=this.maxPerWindow?!1:(this.stamps.push(e),!0)}get used(){return this.stamps.length}}});function Ew(t){return`connector-${t}-token`}function qu(t){let e=t.trim(),o=e.indexOf(":");return o<=0?`\u2026(${e.length} chars)`:`${e.slice(0,o)}:\u2026(${e.length-o-1} chars)`}function Aw(t,e){let o=e.trim();return o.length<8?t:t.split(o).join("\xABREDACTED\xBB")}var AL=C(()=>{"use strict"});function Cw(t){return typeof t=="string"&&t.trim()!==""?t.trim():void 0}function Rw(t){let e;try{e=JSON.parse(t)}catch(i){return{error:`aluy-plugin.json n\xE3o \xE9 JSON v\xE1lido: ${i instanceof Error?i.message:""}`}}if(typeof e!="object"||e===null||Array.isArray(e))return{error:"aluy-plugin.json precisa ser um objeto JSON."};let o=e,n=Cw(o.name);if(n===void 0)return{error:'aluy-plugin.json: falta "name" (o identificador do plugin).'};if(!Lz.test(n))return{error:`aluy-plugin.json: "name" inv\xE1lido ("${n.slice(0,40)}"). Use min\xFAsculas, n\xFAmeros e h\xEDfen \u2014 ele vira prefixo na tela e nome de pasta no disco.`};let r=Cw(o.version),s=Cw(o.description);return{manifest:{name:n,...r!==void 0?{version:r.slice(0,40)}:{},...s!==void 0?{description:s.slice(0,200)}:{}}}}function Tw(t,e){return`${t}:${e}`}var Dw,Lz,CL=C(()=>{"use strict";Dw=["agents","commands","skills","workflows","hooks"],Lz=/^[a-z0-9][a-z0-9-]{0,38}[a-z0-9]$/});function _w(t,e=[],o="~/.aluy/plugins"){let n=[];if(t.length===0&&e.length===0)return n.push("nenhum plugin instalado."),n.push(`instale com \`/plugin install <caminho>\` \u2014 eles vivem em ${o}/`),n;for(let r of t){let s=[r.manifest.name];r.manifest.version!==void 0&&s.push(`v${r.manifest.version}`),r.ativo||s.push("\xB7 DESLIGADO"),n.push(s.join(" ")),r.manifest.description!==void 0&&n.push(` ${r.manifest.description}`),n.push(r.extensoes.length>0?` traz: ${[...r.extensoes].sort().join(", ")}`:" \u26A0 n\xE3o traz nenhuma extens\xE3o reconhecida (agents/commands/skills/workflows/hooks)")}for(let r of e)n.push(`\u26A0 ${r.dir}: ${r.motivo}`);return n}var DL=C(()=>{"use strict"});var j=C(()=>{"use strict";rD();LD();zD();ET();zP();wS();eL();vL();nw();kL();Bl();vw();vw();kw();SL();wL();EL();AL();CL();DL()});import{posix as eV}from"node:path";function tV(t){return eV.normalize(t)}function en(t){let e=tV(t);for(let o of oV)if(o.re.test(e))return o.deny?{kind:"deny",why:o.why}:{kind:"ask",why:o.why};return{kind:"allow"}}function Vw(t){return en(t).kind==="allow"}var oV,oi=C(()=>{"use strict";oV=[{re:/(?:^|\/|~\/)\.ssh(?:\/|$)/,why:"chaves SSH (~/.ssh)",deny:!0},{re:/(?:^|\/|~\/)\.aws(?:\/|$)/,why:"credenciais AWS (~/.aws)",deny:!0},{re:/(?:^|\/|~\/)\.gnupg(?:\/|$)/,why:"chaves GPG (~/.gnupg)",deny:!0},{re:/(?:~\/|\$\{?HOME\}?\/|\/(?:home|Users)\/[^/]+\/)\.aluy\/rooms(?:\/|$)/,why:"arquivos de sala do Aluy (~/.aluy/rooms)",deny:!0},{re:/~\/\.aluy(?:\/|$)/,why:"estado/credencial do Aluy (~/.aluy)",deny:!0},{re:/(?:^|\/)\.aluy(?:\/(?!agents\/|workflows\/|commands\/)|$)/,why:"estado/credencial do Aluy (.aluy/)",deny:!0},{re:/(?:^|\/|~\/)\.config\/gh\/hosts\.yml$/,why:"token do gh CLI",deny:!0},{re:/(?:^|\/|~\/)\.docker\/config\.json$/,why:"credenciais Docker",deny:!0},{re:/(?:^|\/|~\/)\.kube\/config$/,why:"kubeconfig",deny:!0},{re:/(?:^|\/)id_(?:rsa|ed25519|ecdsa|dsa)\b/,why:"chave privada",deny:!0},{re:/\.pem$|\.p12$|\.pfx$|\.key$/i,why:"material de chave privada",deny:!0},{re:/(?:^|[/\w.-])\.env(?:\.(?!example$|sample$|template$|dist$)[\w.-]+)?$/,why:"arquivo .env (segredos)",deny:!1},{re:/(?:^|\/)[^/]*(?:secret|credential|token|apikey|api_key|password|passwd)[^/]*$/i,why:"arquivo com nome sens\xEDvel (token/secret)",deny:!1}]});var bE={};Bb(bE,{UserWorkflowsLoader:()=>Lr,WORKFLOWS_DIRNAME:()=>yE});import{homedir as QK}from"node:os";import{join as hE}from"node:path";import{readdirSync as ZK,readFileSync as e7,mkdirSync as t7,statSync as o7}from"node:fs";var n7,yE,r7,s7,Lr,_h=C(()=>{"use strict";j();n7=448,yE="workflows",r7=64*1024,s7=256,Lr=class{dir;constructor(e={}){let o=e.baseDir??hE(QK(),".aluy");this.dir=hE(o,yE)}get workflowsDir(){return this.dir}ensureDir(){try{t7(this.dir,{mode:n7,recursive:!0})}catch{}}load(){let e;try{e=ZK(this.dir,{withFileTypes:!0})}catch{return{workflows:[],errors:[]}}let o=e.filter(i=>(i.isFile()||i.isSymbolicLink())&&i.name.toLowerCase().endsWith(".md")).map(i=>i.name).sort((i,a)=>i.localeCompare(a)),n=new Set,r=[],s=[];for(let i of o){if(r.length>=s7)break;let a=this.readOne(i);if(a!==null){if(pu(a)){s.push(a);continue}n.has(a.name)||(n.add(a.name),r.push(a))}}return{workflows:r,errors:s}}readOne(e){let o=hE(this.dir,e);try{let n=o7(o);if(!n.isFile()||n.size>r7)return null;let r=e7(o,"utf8");return gu(e,r,"global")}catch{return null}}}});var kE={};Bb(kE,{PROJECT_WORKFLOWS_DIRNAMES:()=>vE,ProjectWorkflowsLoader:()=>Ir});import{join as i7}from"node:path";import{readdirSync as a7,readFileSync as l7,statSync as c7}from"node:fs";var vE,d7,u7,Ir,Mh=C(()=>{"use strict";j();oi();vE=[".claude/workflows",".aluy/workflows"],d7=64*1024,u7=256,Ir=class{workspace;constructor(e){this.workspace=e.workspace}load(){let e=new Set,o=[],n=[];for(let r of vE){let s;try{s=this.workspace.resolveInside(r)}catch{continue}let i;try{i=a7(s,{withFileTypes:!0})}catch{continue}let a=i.filter(l=>(l.isFile()||l.isSymbolicLink())&&l.name.toLowerCase().endsWith(".md")).map(l=>l.name).sort((l,c)=>l.localeCompare(c));for(let l of a){if(o.length>=u7)break;let c=this.readOne(r,s,l);if(c!==null){if(pu(c)){n.push(c);continue}e.has(c.name)||(e.add(c.name),o.push(c))}}}return{workflows:o,errors:n}}readOne(e,o,n){let r=`${e}/${n}`;if(en(r).kind!=="allow")return null;let s=i7(o,n);try{this.workspace.resolveInside(r);let i=c7(s);if(!i.isFile()||i.size>d7)return null;let a=l7(s,"utf8");return gu(n,a,"project")}catch{return null}}}});var O1=_8((SDe,M1)=>{M1.exports=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g});var No="1.0.0-rc.182";j();var RL=`aluy \u2014 agente de terminal que roda na sua m\xE1quina, com o seu provider de LLM
|
|
150
150
|
|
|
151
151
|
Uso:
|
|
152
152
|
aluy ["objetivo"] [--plan | --yolo] [--dense] [--tier <tier>] [--lang <pt-BR|en>]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hiperplano/aluy-cli",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.182",
|
|
4
4
|
"description": "Aluy CLI — TUI (Ink) + binário `aluy` + wiring. Consome @hiperplano/aluy-cli-core (engine portável). Credenciais só no keychain do SO.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|