@openlife/cli 1.7.4 → 1.7.5

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/CODE_OF_CONDUCT.md +31 -0
  3. package/CONTRIBUTING.md +133 -0
  4. package/README.md +25 -9
  5. package/package.json +10 -2
  6. package/docs/CHANGELOG_FEATURE_ROLLOUT_DESIGNMD.md +0 -43
  7. package/docs/EXTERNAL_SOURCES_AND_SECURITY_GUARD.md +0 -33
  8. package/docs/OPENLIFE_AUDIT_2026-05-06.md +0 -170
  9. package/docs/OPENLIFE_CONSOLIDATED_PLAN_2026-05-06.md +0 -299
  10. package/docs/OPENLIFE_DUAL_MODE_IMPLEMENTATION_PLAN.md +0 -205
  11. package/docs/OPENLIFE_EVOLUTION_SURFACE_2026-05-07.md +0 -53
  12. package/docs/OPENLIFE_SKILLS_IMPORT_2026-05-07.json +0 -223
  13. package/docs/OPENLIFE_SQUADS_IMPORT_2026-05-07.json +0 -184
  14. package/docs/PAPERCLIP_OPENLIFE_INVESTIGATION.md +0 -85
  15. package/docs/RELEASE_ORGANIZATION_PLAN.md +0 -164
  16. package/docs/audit/CLI-EXECUTION-RESULTS.md +0 -113
  17. package/docs/audit/CLI-MATRIX.md +0 -556
  18. package/docs/audit/DOC-PARITY-GAPS.md +0 -351
  19. package/docs/audit/ORCHESTRATOR-MATRIX.md +0 -136
  20. package/docs/audit/TEST-COVERAGE-GAPS.md +0 -334
  21. package/docs/audit/integrations/SKIPPED.md +0 -101
  22. package/docs/autonomous-install.md +0 -79
  23. package/docs/capability-genesis.md +0 -137
  24. package/docs/capability-pack-schema.md +0 -157
  25. package/docs/commands.md +0 -82
  26. package/docs/deep-research-capability.md +0 -114
  27. package/docs/development/typescript-conventions.md +0 -95
  28. package/docs/host-installers.md +0 -68
  29. package/docs/install/aiobuilder.md +0 -70
  30. package/docs/install/claude-code.md +0 -83
  31. package/docs/install/codex.md +0 -64
  32. package/docs/install/gemini-cli.md +0 -64
  33. package/docs/install/runtime-profiles.md +0 -83
  34. package/docs/openlife-agent-os-blueprint.md +0 -114
  35. package/docs/openlife-install-backlog.md +0 -115
  36. package/docs/openlife-install-spec.md +0 -306
  37. package/docs/operations/CLOUD_CUTOVER_AUDIT.md +0 -37
  38. package/docs/operations/PHASE_PROGRESS_CONTINUATION.md +0 -24
  39. package/docs/performance-benchmarks.md +0 -83
  40. package/docs/planning/v1.3-capability-genesis.md +0 -157
  41. package/docs/plans/2026-05-05-admin-interface-professional-dark-premium-plan.md +0 -84
  42. package/docs/plans/2026-05-05-openlife-autonomous-domain-marketplace-masterplan.md +0 -122
  43. package/docs/roadmap/OPENLIFE_MASTER_PLAN_CLOUD_V3.md +0 -97
  44. package/docs/sandboxing-research.md +0 -117
  45. package/docs/stories/epic-feature-audit/1.1.story.md +0 -84
  46. package/docs/stories/epic-feature-audit/1.2.story.md +0 -102
  47. package/docs/stories/epic-feature-audit/1.3.story.md +0 -93
  48. package/docs/stories/epic-feature-audit/1.5.story.md +0 -121
  49. package/docs/stories/epic-feature-audit/1.6.story.md +0 -80
  50. package/docs/stories/epic-feature-completeness/2.1.story.md +0 -70
  51. package/docs/stories/epic-feature-completeness/2.2.story.md +0 -49
  52. package/docs/stories/epic-feature-completeness/2.3.story.md +0 -74
  53. package/docs/stories/epic-feature-completeness/2.4.story.md +0 -71
  54. package/docs/stories/epic-feature-completeness/3.1.story.md +0 -56
  55. package/docs/stories/epic-feature-completeness/3.2.story.md +0 -80
  56. package/docs/stories/epic-feature-completeness/3.3.story.md +0 -68
  57. package/docs/stories/epic-feature-completeness/3.4.story.md +0 -71
  58. package/docs/stories/epic-feature-completeness/3.5.story.md +0 -72
  59. package/docs/stories/epic-feature-completeness/3.6.story.md +0 -69
  60. package/docs/stories/epic-feature-completeness/3.7.story.md +0 -68
  61. package/docs/stories/epic-feature-completeness/3.8.story.md +0 -57
  62. package/docs/v1.4-changelog.md +0 -159
  63. package/docs/v1.5-changelog.md +0 -106
  64. package/docs/v1.5-roadmap.md +0 -121
  65. package/docs/v1.6-changelog.md +0 -67
  66. package/docs/v1.6-roadmap.md +0 -89
@@ -1,64 +0,0 @@
1
- # OpenLife on `codex`
2
-
3
- ## Status
4
-
5
- **Reserved for v1.1 follow-up** — this document is a forward-looking stub that captures the contract today and what changes when the real installer lands (tracked as a v1.1 follow-up to the multi-host installer epic).
6
-
7
- Today: `openlife init` and `openlife system setup --host codex` both **accept** this host, but the host-install step throws `HostNotYetSupportedError` and the dispatcher catches it gracefully — the runtime state dir `.openlife/` is still created, only the codex-specific artifacts are skipped.
8
-
9
- ## Auto-detection signal
10
-
11
- The `InstallFlow.detectHostFromEnv()` resolver selects `codex` when:
12
-
13
- - `CODEX_HOME` is set
14
-
15
- To force-select `codex` regardless of environment, pass `--host codex`.
16
-
17
- ## What gets installed (today)
18
-
19
- | Artifact | Status (today) |
20
- |-------------------|--------------------------------------------------------------------------|
21
- | Host artifacts | **None** — `HostInstaller.installCodex()` throws `HOST_NOT_YET_SUPPORTED` |
22
- | Runtime state dir | `<root>/.openlife/` — created normally |
23
- | Install manifest | `<root>/.openlife/install-manifest.json` — written with `hostInstall.ok = false` |
24
-
25
- The CLI return value documents the skip:
26
-
27
- ```json
28
- {
29
- "hostInstall": {
30
- "ok": false,
31
- "reason": "host_not_yet_supported",
32
- "host": "codex"
33
- }
34
- }
35
- ```
36
-
37
- This is **degradação graciosa por design** — picking an unsupported host does not abort the install, so the rest of the surface (state dir, governance, catalogs) is still usable.
38
-
39
- ## What gets installed (v1.1 follow-up)
40
-
41
- When the codex installer ships, the same `openlife system setup --host codex` command will write (planned layout, subject to host conventions):
42
-
43
- - Agents into `${CODEX_HOME}/agents/openlife-*.md`
44
- - Slash commands or prompt templates into `${CODEX_HOME}/commands/openlife/*.md`
45
- - MCP manifest staged for manual merge into the codex MCP config
46
-
47
- No CLI flag change will be required — the same command starts working once the installer is implemented.
48
-
49
- ## What gets uninstalled
50
-
51
- Today: `openlife system uninstall --host codex` is also gated by `HOST_NOT_YET_SUPPORTED`. `.openlife/`, `.catalog/`, and the codex config are all preserved (nothing was installed in the first place).
52
-
53
- When the installer ships, uninstall will mirror the claude-code contract: prefix-scoped agent removal (`openlife-*` only), full namespace removal for `commands/openlife/`, and preservation of `.openlife/`, `.catalog/`, and the operator's codex global config.
54
-
55
- ## MCP integration
56
-
57
- Deferred to the v1.1 follow-up. The staged MCP manifest format mirrors `dist-templates/claude-code/mcp/openlife-orchestrator.json`; the codex installer will adapt it to codex's MCP config convention when shipped.
58
-
59
- ## Known limitations
60
-
61
- - `install` command returns `skipped` (with `HOST_NOT_YET_SUPPORTED`) — `.openlife/` is still created, but no codex host artifacts.
62
- - `uninstall` similarly no-ops gracefully — nothing to remove yet.
63
- - The wizard accepts `codex` and emits a warning in `WizardResult.warnings` ("host wiring deferred to v1.1 follow-up") so users are not surprised.
64
- - This stub will be replaced by the real per-host doc when the installer lands.
@@ -1,64 +0,0 @@
1
- # OpenLife on `gemini-cli`
2
-
3
- ## Status
4
-
5
- **Reserved for v1.1 follow-up** — this document is a forward-looking stub that captures the contract today and what changes when the real installer lands (tracked as a v1.1 follow-up to the multi-host installer epic).
6
-
7
- Today: `openlife init` and `openlife system setup --host gemini-cli` both **accept** this host, but the host-install step throws `HostNotYetSupportedError` and the dispatcher catches it gracefully — the runtime state dir `.openlife/` is still created, only the gemini-cli-specific artifacts are skipped.
8
-
9
- ## Auto-detection signal
10
-
11
- The `InstallFlow.detectHostFromEnv()` resolver selects `gemini-cli` when:
12
-
13
- - `GEMINI_CONFIG_DIR` is set
14
-
15
- To force-select `gemini-cli` regardless of environment, pass `--host gemini-cli`.
16
-
17
- ## What gets installed (today)
18
-
19
- | Artifact | Status (today) |
20
- |-------------------|--------------------------------------------------------------------------|
21
- | Host artifacts | **None** — `HostInstaller.installGeminiCli()` throws `HOST_NOT_YET_SUPPORTED` |
22
- | Runtime state dir | `<root>/.openlife/` — created normally |
23
- | Install manifest | `<root>/.openlife/install-manifest.json` — written with `hostInstall.ok = false` |
24
-
25
- The CLI return value documents the skip:
26
-
27
- ```json
28
- {
29
- "hostInstall": {
30
- "ok": false,
31
- "reason": "host_not_yet_supported",
32
- "host": "gemini-cli"
33
- }
34
- }
35
- ```
36
-
37
- This is **degradação graciosa por design** — picking an unsupported host does not abort the install, so the rest of the surface (state dir, governance, catalogs) is still usable.
38
-
39
- ## What gets installed (v1.1 follow-up)
40
-
41
- When the gemini-cli installer ships, the same `openlife system setup --host gemini-cli` command will write (planned layout, subject to host conventions):
42
-
43
- - Agents into `${GEMINI_CONFIG_DIR}/agents/openlife-*.md`
44
- - Slash commands into `${GEMINI_CONFIG_DIR}/commands/openlife/*.md`
45
- - MCP manifest staged for manual merge into the gemini-cli MCP config
46
-
47
- No CLI flag change will be required — the same command starts working once the installer is implemented.
48
-
49
- ## What gets uninstalled
50
-
51
- Today: `openlife system uninstall --host gemini-cli` is also gated by `HOST_NOT_YET_SUPPORTED`. `.openlife/`, `.catalog/`, and the gemini-cli config are all preserved (nothing was installed in the first place).
52
-
53
- When the installer ships, uninstall will mirror the claude-code contract: prefix-scoped agent removal (`openlife-*` only), full namespace removal for `commands/openlife/`, and preservation of `.openlife/`, `.catalog/`, and the operator's gemini-cli global config.
54
-
55
- ## MCP integration
56
-
57
- Deferred to the v1.1 follow-up. The staged MCP manifest format mirrors `dist-templates/claude-code/mcp/openlife-orchestrator.json`; the gemini-cli installer will adapt it to gemini-cli's MCP config convention when shipped.
58
-
59
- ## Known limitations
60
-
61
- - `install` command returns `skipped` (with `HOST_NOT_YET_SUPPORTED`) — `.openlife/` is still created, but no gemini-cli host artifacts.
62
- - `uninstall` similarly no-ops gracefully — nothing to remove yet.
63
- - The wizard accepts `gemini-cli` and emits a warning in `WizardResult.warnings` ("host wiring deferred to v1.1 follow-up") so users are not surprised.
64
- - This stub will be replaced by the real per-host doc when the installer lands.
@@ -1,83 +0,0 @@
1
- # Runtime profiles (Advanced)
2
-
3
- > **Advanced topic.** Casual users can skip this page — the defaults are correct
4
- > for the typical install where API keys are present in `.env`. This page is for
5
- > operators who run OpenLife against **OAuth-authenticated LLM CLIs only**
6
- > (`claude`, `codex`, `gemini`) and never set API keys.
7
-
8
- Runtime profiles tune how `openlife doctor world` **classifies** check
9
- severities at runtime. They do **not** change which providers `Brain.ts` calls
10
- or in what order — the fallback chain is unaffected.
11
-
12
- Cross-link: see [`../../INSTALL.md`](../../INSTALL.md), section 4 ("Profiles") for
13
- the install-time `framework` vs `autonomous` distinction. Install profiles and
14
- runtime profiles are orthogonal.
15
-
16
- ## Env var contract
17
-
18
- | Env var | Value | Effect |
19
- |---|---|---|
20
- | `OPENLIFE_RUNTIME_PROFILE` | _unset_ (default) | Standard severity classifier in `WorldClassCommands.doctorWorldDetailed()`. Missing CLIs and env vars are flagged as `blocker`. |
21
- | `OPENLIFE_RUNTIME_PROFILE` | `oauth-only` (case-insensitive — `OAuth-Only` works too) | Failing checks `cli:ollama` (default: `blocker`), `env:OPENAI_API_KEY`, `env:GEMINI_API_KEY`, `env:ANTHROPIC_API_KEY` (default: `warning`) are all downgraded to `info`. All other checks keep their default severity. |
22
-
23
- The classifier lives at `src/cli/WorldClassCommands.ts` (`doctorWorldDetailed`)
24
- and is regression-tested by `src/test_runtime_profile_oauth_only.ts`.
25
-
26
- ## When to use `oauth-only`
27
-
28
- Set `OPENLIFE_RUNTIME_PROFILE=oauth-only` when ALL of the following are true:
29
-
30
- - You are not using direct API keys (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`,
31
- `GEMINI_API_KEY` are intentionally absent).
32
- - You drive OpenLife through OAuth-authenticated LLM CLIs that are on `PATH`
33
- (e.g. `claude`, `codex`, `gemini`).
34
- - You are not running a local Ollama and do not want its absence flagged as a
35
- blocker.
36
- - You still want `openlife doctor world` to show the four checks (for
37
- transparency) — just as `info`, not as `blocker`.
38
-
39
- ## Worked example
40
-
41
- Without the profile (defaults):
42
-
43
- ```text
44
- $ openlife doctor world
45
- ...
46
- ❌ cli:ollama: CLI não encontrada no PATH [blocker]
47
- ❌ env:OPENAI_API_KEY: Variável ausente [warning]
48
- ❌ env:GEMINI_API_KEY: Variável ausente [warning]
49
- ❌ env:ANTHROPIC_API_KEY: Variável ausente [warning]
50
- ```
51
-
52
- With the profile:
53
-
54
- ```text
55
- $ OPENLIFE_RUNTIME_PROFILE=oauth-only openlife doctor world
56
- ...
57
- ❌ cli:ollama: CLI não encontrada no PATH [info]
58
- ❌ env:OPENAI_API_KEY: Variável ausente [info]
59
- ❌ env:GEMINI_API_KEY: Variável ausente [info]
60
- ❌ env:ANTHROPIC_API_KEY: Variável ausente [info]
61
- ```
62
-
63
- The check still runs and still reports `ok=false`. Only the `severity` field
64
- changes, which is what release-gate / CI tooling reads when deciding to block.
65
-
66
- ## What it does NOT do
67
-
68
- - It does **not** modify the LLM fallback chain in `src/orchestrator/Brain.ts`.
69
- - It does **not** disable any provider. If `OPENAI_API_KEY` is absent, the
70
- OpenAI SDK path still won't authenticate — `oauth-only` just stops doctor
71
- from flagging that as a blocker.
72
- - It does **not** affect `cli:codex`, `cli:claude`, `cli:gemini` checks — those
73
- stay required because the oauth-only flow depends on them.
74
- - It does **not** affect `runtime:*` health checks, `env:TELEGRAM_BOT_TOKEN`,
75
- or any state-dir / manifest checks.
76
-
77
- ## Forward compatibility
78
-
79
- `OPENLIFE_RUNTIME_PROFILE` is intentionally a generic env var. `oauth-only`
80
- is the first value; future profiles (e.g. `air-gapped`, `local-only`) may use
81
- the same env var with different downgrade lists. Treat unknown values as
82
- "default behavior" — the classifier explicitly checks for `oauth-only` and
83
- falls through otherwise.
@@ -1,114 +0,0 @@
1
- # OpenLife Agent OS — Blueprint
2
-
3
- > Version: v1.3 "Agent OS Integration" (May 2026)
4
- > Status: shipping
5
- > Audience: operators, framework contributors
6
-
7
- OpenLife is a TypeScript Agent OS: a runtime, a CLI framework, and an
8
- autonomous-agent daemon — all sharing a single codebase. v1.3 wires the
9
- nervous system that connects every existing organ. No greenfield, no
10
- Hermes/Obsidian runtime dependency.
11
-
12
- ## Runtime source-of-truth contract (LOCKED)
13
-
14
- - **`.catalog/`** — runtime source-of-truth for agents, skills, squads,
15
- workflows, MCPs, and **capability packs** (new in v1.3). Loaded by the
16
- composite provider chain. Everything else is documentation or scratch.
17
- - **`.openlife/`** — runtime state (consents, queues, locks,
18
- heartbeat, capability lifecycle, crons, profiles, active-profile pointer).
19
- - **`.artifacts/`** — output and audit (mission state, thought-traces,
20
- service events, security events, cron events, soak reports).
21
- - **Hermes / Obsidian** — reference and product context. Never imported
22
- at runtime. `test_openlife_runtime_source_truth.ts` guards this.
23
-
24
- ## Two profiles, three modes
25
-
26
- OpenLife runs in two install profiles (set at `openlife system install`):
27
- - **framework** — interactive CLI for local operators
28
- - **autonomous** — long-running daemon with Telegram + HTTP gateway
29
-
30
- And three execution modes (selectable per workflow / mission):
31
- - **task** — one-shot mission, completes when sequence finishes. Default.
32
- - **service** — long-running, must be explicitly requested. The
33
- WorkflowEngine refuses silent task→service promotion.
34
- - **swarm** — parallel multi-agent (existing, unchanged in v1.3).
35
-
36
- ## The four pillars
37
-
38
- ```
39
- ┌─────────────────────────────────────────────────────────┐
40
- │ CAPABILITY PACK (.catalog/capabilities/<id>/) │
41
- │ ├── workflows/ (how to do it — verb) │
42
- │ ├── squads/ (who does it — noun) │
43
- │ ├── agents/ │
44
- │ ├── skills/ │
45
- │ ├── checklists/ (validation gates) │
46
- │ ├── templates/ (output shells) │
47
- │ └── policies/ (governance tags) │
48
- └─────────────────────────────────────────────────────────┘
49
- │ │
50
- ▼ ▼
51
- ┌────────────────────────┐ ┌─────────────────────────────┐
52
- │ CapabilityGenesisEngine│ │ AIOBuilder CLI (16/16) │
53
- │ (reuse-first builder) │ │ + `openlife create …` │
54
- └────────────────────────┘ └─────────────────────────────┘
55
- │ │
56
- ▼ ▼
57
- ┌─────────────────────────────────────────────────────────┐
58
- │ RUNTIME (CLI Framework + Autonomous Agent) │
59
- │ Gateway + Gatekeeper + GovernanceLayer │
60
- │ QueueScheduler + CronManager + DistributedLock │
61
- │ ProfileManager + ToolsetRegistry + WatchdogEmitter │
62
- │ WorkflowEngine + MissionCheckpointStore │
63
- └─────────────────────────────────────────────────────────┘
64
- ```
65
-
66
- ## Canonical maestro: AIOBUILDER
67
-
68
- The AIOBuilder CLI is the single maestro. 16/16 verb parity (v1.2). v1.3
69
- adds `create-capability` (17 verbs) and a top-level `openlife create …`
70
- alias family that forwards to the same handlers. Per locked decision
71
- (2026-05-12): no duplicate logic; AIOBUILDER stays canonical.
72
-
73
- ## What's new in v1.3
74
-
75
- 1. **Capability Packs** — `.catalog/capabilities/<id>/` schema, parser,
76
- lifecycle (`draft → tested → active → deprecated`), and providers.
77
- 2. **CapabilityGenesisEngine** — reuse-first builder. Calls
78
- `AssetReuseRouter.find()` before creating; novel assets are embedded
79
- in the pack, matches are referenced.
80
- 3. **Workflow Schema v2** — 15 new Hermes-mandated fields (status, mode,
81
- triggers, objective, success_criteria, inputs, outputs,
82
- required_context, skills, tools, policies, validation, evidence,
83
- failure_handling, learning_rules). All optional, v1.2 YAMLs parse
84
- unchanged.
85
- 4. **Service-mode is explicit-only** — `WorkflowEngine.run()` refuses
86
- silent task→service; `ServiceState.promoteTaskToService()` requires
87
- human actor + consentScope.
88
- 5. **GovernanceLayer expanded** — 4 new categories: production-deploy,
89
- external-send, fake-fallback, conclusion-without-validation.
90
- 6. **Gatekeeper × OutcomeSimulator** — best-effort pre-dispatch
91
- prediction persisted to `.artifacts/missions/<id>.thought-trace.json`.
92
- 7. **Gateway Telegram guardrails** — `validateBotToken()` via real
93
- getMe; `redactBotToken()` strips token bodies from any log line.
94
- 8. **CronManager** — native 5-field cron + `openlife cron …` CLI.
95
- 9. **ProfileManager** — per-profile memory namespace, catalog scope,
96
- toolset allowlist, model chain. `openlife profile …` CLI.
97
- 10. **ToolsetRegistry** — 15 canonical categories with per-profile
98
- allow/deny.
99
- 11. **ExternalCatalogRegistry.import()** — trust-gated MCP install
100
- policy decision (network fetch wired in v1.4).
101
- 12. **OrchestrationLoop post-mission hook** — adds candidates to
102
- `SkillLearningLoopStore` based on un-approved review findings.
103
-
104
- ## Reading order for new contributors
105
-
106
- 1. `CLAUDE.md` (root) — codebase contract
107
- 2. `docs/openlife-agent-os-blueprint.md` (this file) — high-level map
108
- 3. `docs/capability-pack-schema.md` — pack manifest details
109
- 4. `docs/capability-genesis.md` — how packs are authored
110
- 5. `docs/workflow-schema.md` — workflow v2 reference
111
- 6. `docs/deep-research-capability.md` — seed-pack example
112
-
113
- Each commands runs `--help` clean (`node bin/openlife.js --help` < 2s)
114
- thanks to the lazy-require contract in `src/index.ts`.
@@ -1,115 +0,0 @@
1
- # OpenLife Install — Backlog por Sprint
2
-
3
- ## Sprint 1 — Foundation (iniciar já)
4
- Objetivo: criar base técnica para `openlife install` dual-mode com estado e wizard.
5
-
6
- ### Entregas
7
- - [ ] Criar comando novo de entrada: `openlife install`
8
- - [ ] Implementar roteamento inicial de modo (CLI | Autonomous)
9
- - [ ] Criar `state-store` para checkpoint e resume (`.openlife/install-state.json`)
10
- - [ ] Criar contrato de etapas comuns (`precheck`, `telegram`, `chat-terminal`, `validate`)
11
- - [ ] Integrar com `InstallFlow` atual sem quebrar `system install`
12
-
13
- ### Critérios de aceite
14
- - [ ] `openlife install` aparece no `--help`
15
- - [ ] `openlife install --resume` retoma estado salvo
16
- - [ ] `system install` continua funcional
17
- - [ ] Build TS sem erro
18
-
19
- ### Testes
20
- - [ ] unit: salvar/ler/reset state
21
- - [ ] unit: seleção de modo gera etapa correta
22
- - [ ] smoke: `node dist/index.js install --help`
23
-
24
- ---
25
-
26
- ## Sprint 2 — CLI Flow completo
27
- Objetivo: fechar trilha de instalação CLI.
28
-
29
- ### Entregas
30
- - [ ] Precheck com saída estruturada + auto-fix opcional
31
- - [ ] Workspace selector (default/custom)
32
- - [ ] Core install + init config
33
- - [ ] Telegram opcional com validação real (`getMe`)
34
- - [ ] Chat terminal obrigatório (`openlife chat` + `--test`)
35
- - [ ] Validação final com relatório
36
-
37
- ### Critérios de aceite
38
- - [ ] Fluxo CLI conclui com resumo final
39
- - [ ] Erro em token Telegram não passa silenciosamente
40
- - [ ] `openlife chat --test` retorna sucesso
41
-
42
- ### Testes
43
- - [ ] unit: normalização de opções
44
- - [ ] integration: fluxo CLI happy path
45
- - [ ] integration: Telegram inválido falha com mensagem clara
46
-
47
- ---
48
-
49
- ## Sprint 3 — Autonomous Flow completo
50
- Objetivo: fechar trilha de agente autônomo modular.
51
-
52
- ### Entregas
53
- - [ ] Wizard de modelos: 1 | 1+2 | 1+2+3
54
- - [ ] Auth por modelo (API key/OAuth)
55
- - [ ] Roteamento/fallback real
56
- - [ ] Skills opcionais no setup
57
- - [ ] Gestão de agentes: padrão/renomear/novo/adicional
58
- - [ ] Ativação systemd/supervisor
59
- - [ ] Chat terminal obrigatório no final
60
-
61
- ### Critérios de aceite
62
- - [ ] Serviço autônomo sobe com sucesso
63
- - [ ] Modelo fallback validado
64
- - [ ] Agente padrão existe sempre, mas nome pode mudar
65
-
66
- ### Testes
67
- - [ ] integration: fluxo autônomo happy path
68
- - [ ] integration: escolha de 1 modelo sem fallback
69
- - [ ] integration: conflito em auth bloqueia etapa
70
-
71
- ---
72
-
73
- ## Sprint 4 — Telegram hardening + UX recovery
74
- Objetivo: robustez de canal e recuperação de erro.
75
-
76
- ### Entregas
77
- - [ ] Máscara de token em logs
78
- - [ ] Detecção de conflito 409 long polling
79
- - [ ] Fluxo de correção: parar instância concorrente/trocar token/pular
80
- - [ ] Retry por etapa com persistência de estado
81
-
82
- ### Critérios de aceite
83
- - [ ] sem token completo em logs
84
- - [ ] conflito 409 guiado com ação corretiva
85
-
86
- ### Testes
87
- - [ ] integration: caso conflito 409
88
- - [ ] security: redaction de secrets
89
-
90
- ---
91
-
92
- ## Sprint 5 — UX final + modo headless
93
- Objetivo: productização final.
94
-
95
- ### Entregas
96
- - [ ] `openlife install --mode cli|autonomous`
97
- - [ ] `openlife install --from-file setup.yaml`
98
- - [ ] `openlife install --headless`
99
- - [ ] relatório final padronizado + próximos comandos
100
-
101
- ### Critérios de aceite
102
- - [ ] execução não interativa em CI
103
- - [ ] documentação final sincronizada
104
-
105
- ### Testes
106
- - [ ] e2e: install headless CLI
107
- - [ ] e2e: install headless autonomous
108
-
109
- ---
110
-
111
- ## Ordem de implementação recomendada (agora)
112
- 1. Sprint 1 completo
113
- 2. Sprint 2 completo
114
- 3. Sprint 3 completo
115
- 4. Sprint 4 + Sprint 5