@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.
- package/CHANGELOG.md +186 -0
- package/CODE_OF_CONDUCT.md +31 -0
- package/CONTRIBUTING.md +133 -0
- package/README.md +25 -9
- package/package.json +10 -2
- package/docs/CHANGELOG_FEATURE_ROLLOUT_DESIGNMD.md +0 -43
- package/docs/EXTERNAL_SOURCES_AND_SECURITY_GUARD.md +0 -33
- package/docs/OPENLIFE_AUDIT_2026-05-06.md +0 -170
- package/docs/OPENLIFE_CONSOLIDATED_PLAN_2026-05-06.md +0 -299
- package/docs/OPENLIFE_DUAL_MODE_IMPLEMENTATION_PLAN.md +0 -205
- package/docs/OPENLIFE_EVOLUTION_SURFACE_2026-05-07.md +0 -53
- package/docs/OPENLIFE_SKILLS_IMPORT_2026-05-07.json +0 -223
- package/docs/OPENLIFE_SQUADS_IMPORT_2026-05-07.json +0 -184
- package/docs/PAPERCLIP_OPENLIFE_INVESTIGATION.md +0 -85
- package/docs/RELEASE_ORGANIZATION_PLAN.md +0 -164
- package/docs/audit/CLI-EXECUTION-RESULTS.md +0 -113
- package/docs/audit/CLI-MATRIX.md +0 -556
- package/docs/audit/DOC-PARITY-GAPS.md +0 -351
- package/docs/audit/ORCHESTRATOR-MATRIX.md +0 -136
- package/docs/audit/TEST-COVERAGE-GAPS.md +0 -334
- package/docs/audit/integrations/SKIPPED.md +0 -101
- package/docs/autonomous-install.md +0 -79
- package/docs/capability-genesis.md +0 -137
- package/docs/capability-pack-schema.md +0 -157
- package/docs/commands.md +0 -82
- package/docs/deep-research-capability.md +0 -114
- package/docs/development/typescript-conventions.md +0 -95
- package/docs/host-installers.md +0 -68
- package/docs/install/aiobuilder.md +0 -70
- package/docs/install/claude-code.md +0 -83
- package/docs/install/codex.md +0 -64
- package/docs/install/gemini-cli.md +0 -64
- package/docs/install/runtime-profiles.md +0 -83
- package/docs/openlife-agent-os-blueprint.md +0 -114
- package/docs/openlife-install-backlog.md +0 -115
- package/docs/openlife-install-spec.md +0 -306
- package/docs/operations/CLOUD_CUTOVER_AUDIT.md +0 -37
- package/docs/operations/PHASE_PROGRESS_CONTINUATION.md +0 -24
- package/docs/performance-benchmarks.md +0 -83
- package/docs/planning/v1.3-capability-genesis.md +0 -157
- package/docs/plans/2026-05-05-admin-interface-professional-dark-premium-plan.md +0 -84
- package/docs/plans/2026-05-05-openlife-autonomous-domain-marketplace-masterplan.md +0 -122
- package/docs/roadmap/OPENLIFE_MASTER_PLAN_CLOUD_V3.md +0 -97
- package/docs/sandboxing-research.md +0 -117
- package/docs/stories/epic-feature-audit/1.1.story.md +0 -84
- package/docs/stories/epic-feature-audit/1.2.story.md +0 -102
- package/docs/stories/epic-feature-audit/1.3.story.md +0 -93
- package/docs/stories/epic-feature-audit/1.5.story.md +0 -121
- package/docs/stories/epic-feature-audit/1.6.story.md +0 -80
- package/docs/stories/epic-feature-completeness/2.1.story.md +0 -70
- package/docs/stories/epic-feature-completeness/2.2.story.md +0 -49
- package/docs/stories/epic-feature-completeness/2.3.story.md +0 -74
- package/docs/stories/epic-feature-completeness/2.4.story.md +0 -71
- package/docs/stories/epic-feature-completeness/3.1.story.md +0 -56
- package/docs/stories/epic-feature-completeness/3.2.story.md +0 -80
- package/docs/stories/epic-feature-completeness/3.3.story.md +0 -68
- package/docs/stories/epic-feature-completeness/3.4.story.md +0 -71
- package/docs/stories/epic-feature-completeness/3.5.story.md +0 -72
- package/docs/stories/epic-feature-completeness/3.6.story.md +0 -69
- package/docs/stories/epic-feature-completeness/3.7.story.md +0 -68
- package/docs/stories/epic-feature-completeness/3.8.story.md +0 -57
- package/docs/v1.4-changelog.md +0 -159
- package/docs/v1.5-changelog.md +0 -106
- package/docs/v1.5-roadmap.md +0 -121
- package/docs/v1.6-changelog.md +0 -67
- package/docs/v1.6-roadmap.md +0 -89
package/docs/install/codex.md
DELETED
|
@@ -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
|