agentlas 0.7.0 → 0.9.1
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 +190 -0
- package/README.md +161 -18
- package/bin/agentlas.cjs +8 -8
- package/engine/agentlas-core-harness.cjs +205 -0
- package/engine/agentlas-desktop-loadout.cjs +527 -0
- package/engine/agentlas-doctor.cjs +1 -1
- package/engine/agentlas-experience-exchange.cjs +835 -85
- package/engine/agentlas-experience-intake.cjs +444 -0
- package/engine/agentlas-experience-mcp.cjs +580 -18
- package/engine/agentlas-i18n.cjs +10 -10
- package/engine/agentlas-input.cjs +5 -4
- package/engine/agentlas-mcp-env.cjs +219 -0
- package/engine/agentlas-mcp-wrapper.cjs +51 -0
- package/engine/agentlas-memory-governance.cjs +1029 -0
- package/engine/agentlas-native-host.cjs +129 -39
- package/engine/agentlas-parity.cjs +339 -154
- package/engine/agentlas-repl.cjs +306 -31
- package/engine/agentlas-workforce.cjs +2991 -0
- package/engine/agentlas-workload-routing.cjs +523 -0
- package/engine/agentlas.cjs +1619 -234
- package/engine/bootstrap-schema.sql +1 -1
- package/engine/experience-taxonomy-v1.json +49 -0
- package/package.json +8 -4
- package/scripts/gen-bootstrap-schema.sh +0 -23
- package/test/bootstrap-race.cjs +0 -47
- package/test/capture-runtime-guard.cjs +0 -122
- package/test/cloud-asset-restore.cjs +0 -423
- package/test/cloud-cas-client.cjs +0 -333
- package/test/cloud-owner-restore.cjs +0 -183
- package/test/cloud-runtime-paths.cjs +0 -40
- package/test/cloud-save-publish.cjs +0 -487
- package/test/credential-env-regression.cjs +0 -52
- package/test/engine-hardening-regression.cjs +0 -74
- package/test/experience-exchange-contract.cjs +0 -569
- package/test/experience-mcp-contract.cjs +0 -391
- package/test/fixtures/portable-experience-bundle-v1-golden.json +0 -124
- package/test/login-loopback-security.cjs +0 -115
- package/test/mcp-config-isolation.cjs +0 -36
- package/test/permission-mapping.cjs +0 -180
- package/test/route-regression.cjs +0 -357
- package/test/run-api-regression.cjs +0 -322
- package/test/runtime-env-protection.cjs +0 -89
- package/test/semver-precedence.cjs +0 -39
- package/test/smoke.sh +0 -93
- package/test/sqlite-driver-probe.cjs +0 -22
- package/test/terminal-ui-regression.cjs +0 -477
- package/test/timeout-regression.cjs +0 -218
- package/test/tool-workspace-boundary.cjs +0 -165
- package/test/update-safety.cjs +0 -376
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.9.1 — 2026-07-16
|
|
4
|
+
|
|
5
|
+
- Record exactly one compact Memory Ticket receipt for every completed,
|
|
6
|
+
failed, or cancelled user turn, including turns with zero durable memory
|
|
7
|
+
candidates and resumed Claude/Codex sessions.
|
|
8
|
+
- Run semantic curation as a separate no-tools advisory pass, then apply
|
|
9
|
+
deterministic privacy, permission, owner, and scope gates before any durable
|
|
10
|
+
write. Read-only turns keep the central receipt but never write project files
|
|
11
|
+
or durable memory.
|
|
12
|
+
- Add owner-isolated user-global, team, agent, and project timeline lanes with
|
|
13
|
+
idempotent completion and redacted Core-compatible JSONL mirrors. Raw prompts,
|
|
14
|
+
transcripts, secrets, and absolute paths are rejected from logs and payloads.
|
|
15
|
+
- Restrict npm artifacts to the runtime allowlist; tests, fixtures, benchmarks,
|
|
16
|
+
internal docs, credentials, and signing material remain unpublished.
|
|
17
|
+
|
|
18
|
+
## 0.9.0 — 2026-07-16
|
|
19
|
+
|
|
20
|
+
- Add `agentlas plugin add <slug>` and `agentlas plugin list`. The Hub has
|
|
21
|
+
advertised `npx agentlas@latest plugin add <slug>` on every catalog plugin
|
|
22
|
+
and serves the manifest for it, but the subcommand did not exist, so every
|
|
23
|
+
listing pointed at a command that could not run. (`agentlas install` is
|
|
24
|
+
agent-only and fails with "Hub agent not found" on a plugin slug.)
|
|
25
|
+
- Register a plugin's MCP servers from its published manifest, separating stdio
|
|
26
|
+
launch commands from remote URLs so a mixed entry cannot violate the codex
|
|
27
|
+
config.toml schema and take the runtime down. Reinstalling is idempotent, and
|
|
28
|
+
a plugin that ships no MCP server is refused instead of reported installed.
|
|
29
|
+
- Translate remaining Korean runtime messages to English across the launcher,
|
|
30
|
+
doctor, parity, bootstrap schema, and tests.
|
|
31
|
+
|
|
32
|
+
## 0.8.5 — 2026-07-16
|
|
33
|
+
|
|
34
|
+
- Preserve the exact bounded, host-authored contract diagnostic in each local
|
|
35
|
+
model's one allowed structured-output repair prompt. The host still never
|
|
36
|
+
mutates model output or replays private stage inputs, but a model can now see
|
|
37
|
+
which exact Selection, WorkOrder, or planner field failed instead of receiving
|
|
38
|
+
only a generic schema error.
|
|
39
|
+
- Keep Codex CLI Workforce execution fail-closed before the first model or Hub
|
|
40
|
+
call because Codex 0.144.4 continued to expose collaboration authority after
|
|
41
|
+
every available isolation flag and an isolated `CODEX_HOME` were applied.
|
|
42
|
+
- Pin both release workflows to Agentlas OS v1.1.45 at immutable commit
|
|
43
|
+
`49752a783e944c898ea023705104661b3beb87b2`, whose finite 23-code Hub
|
|
44
|
+
coverage-gap contract accepts the live aggregate response while rejecting
|
|
45
|
+
unknown or identity-bearing reasons.
|
|
46
|
+
|
|
47
|
+
## 0.8.4 — 2026-07-16
|
|
48
|
+
|
|
49
|
+
- Make Workforce Ontology the default for ordinary direct, goal-like work on
|
|
50
|
+
new or untouched installs while preserving an explicit `network off` opt-out.
|
|
51
|
+
Sparse legacy role/tool declarations are optional semantic evidence instead
|
|
52
|
+
of accidental zero-candidate hard requirements.
|
|
53
|
+
- Persist every benchmark run as a scorer-ready, private JSON artifact with the
|
|
54
|
+
work order, content-only candidate set, host selection, three MCP receipts,
|
|
55
|
+
and real planner/worker/synthesis/verifier execution evidence.
|
|
56
|
+
- Give the host LLM one bounded schema-only repair attempt per structured phase
|
|
57
|
+
for malformed work orders, selections, or delegation plans, plus at most two
|
|
58
|
+
total semantic WorkOrder refinements from redacted required-cardinality gaps
|
|
59
|
+
or one valid `requestExpansionForSlots` content-expansion decision. Each
|
|
60
|
+
refinement has its own audited phase, re-searches the Hub, and supersedes the
|
|
61
|
+
prior search without exposing candidate identities, content, rankings, or
|
|
62
|
+
history to the refinement prompt. A repeated expansion or exhausted budget
|
|
63
|
+
fails closed; Terminal never fills a missing hard field, coerces expansion
|
|
64
|
+
through schema repair, falls back to a lexical router, or persists raw prior
|
|
65
|
+
model output. Only the idempotent Hub search may replay once after an outer
|
|
66
|
+
transport/JSON ambiguity; validation and preparation remain single-shot.
|
|
67
|
+
- Treat `consumes` and `produces` as exact candidate-profile declaration gates,
|
|
68
|
+
not ordinary workflow handoffs, and explain each hard-skill/tool/artifact or
|
|
69
|
+
entity-kind coverage gap to the same host LLM. General HR decomposition now
|
|
70
|
+
keeps any explicitly named specialized domain with distinct accountability
|
|
71
|
+
in its own slot instead of collapsing it into generic implementation work.
|
|
72
|
+
- Recompute every prepared roster row's domain-separated runtime bundle digest
|
|
73
|
+
from the exact selected release identity and complete directive bundle before
|
|
74
|
+
execution. Only execution-plan v5 with the explicit v4 digest-schema marker
|
|
75
|
+
is accepted. The shared Python/JavaScript domain rejects numbers, lone
|
|
76
|
+
surrogates, unsafe keys including `__proto__`, and non-JSON values; every row
|
|
77
|
+
must expose a nonblank top-level `systemPrompt`, `instructions`, or `agentMd`.
|
|
78
|
+
Directive or identity tampering now fails closed, while the sanitized nested
|
|
79
|
+
runtime package hash remains separate from the AgentRelease upload package
|
|
80
|
+
hash.
|
|
81
|
+
- Execute team releases as their declared manager and every graph worker in
|
|
82
|
+
exact order, followed by manager synthesis. A missing worker, flattened team,
|
|
83
|
+
unparseable manager plan, or fallback plan now rejects the v2 execution
|
|
84
|
+
receipt instead of masquerading as a successful team run.
|
|
85
|
+
- Build the local `tools/list` inventory only after Hub discovery, bind required
|
|
86
|
+
capabilities through the active host LLM, and validate the private inventory
|
|
87
|
+
and capability-binding plan against the public pair-scoped receipt. Raw local
|
|
88
|
+
tool inventory never crosses the Hub boundary.
|
|
89
|
+
- Probe Codex Workforce isolation and fail closed before the first model or Hub
|
|
90
|
+
call when Codex still exposes collaboration authority. Claude workforce
|
|
91
|
+
subprocesses run without inherited tool authority, API and Ollama workers are
|
|
92
|
+
zero-tool, and Gemini workforce execution fails closed until equivalent
|
|
93
|
+
isolation is proven. Required-tool work cannot start without an exact
|
|
94
|
+
policy-filtered native grant.
|
|
95
|
+
- Require direct WorkOrder and Selection objects from the active host LLM and
|
|
96
|
+
reject ceremonial tool-call envelopes, unknown keys, contradictory community
|
|
97
|
+
exclusions, and exhaustive "everything else" exclusion lists. Explicit user
|
|
98
|
+
prohibitions remain hard constraints while unused or adjacent communities do
|
|
99
|
+
not become accidental disqualifiers.
|
|
100
|
+
- Validate every Hub CandidateSet, slot, candidate, semantic snapshot,
|
|
101
|
+
evidence row, and operational card against exact keys before candidate text
|
|
102
|
+
reaches the selection prompt. Candidate metadata remains explicitly
|
|
103
|
+
untrusted data; unknown prompt-bearing fields fail closed. Structured repair
|
|
104
|
+
receipts persist fixed error-code messages instead of fragments copied from
|
|
105
|
+
rejected model output.
|
|
106
|
+
- Parse the Terminal Hub transport's bounded buffered `{ status, headers, text }`
|
|
107
|
+
response shape at the Workforce adapter boundary. This keeps real Hub MCP
|
|
108
|
+
JSON from being misclassified as invalid merely because it is not a native
|
|
109
|
+
Fetch `Response` object, and is covered by an end-to-end adapter regression.
|
|
110
|
+
- Ordinary `/network`, `/taskforce`, and `/workforce` requests now use the
|
|
111
|
+
Agent Workforce Ontology protocol. The active host LLM creates the pinned
|
|
112
|
+
work order and selects exact AgentRelease IDs from the Hub candidate menu;
|
|
113
|
+
Terminal only validates and executes that choice.
|
|
114
|
+
- Require the exact three workforce MCP calls, a real manager plan, distinct
|
|
115
|
+
pinned worker executions, synthesis, verifier, and auditable receipts. Stale
|
|
116
|
+
ontology versions, history or popularity influence, silent substitution,
|
|
117
|
+
planner fallback, and single-model masquerading fail closed.
|
|
118
|
+
- Keep the retired lexical router available only through explicit
|
|
119
|
+
`/legacy-network`. Cross-platform and npm release gates now exercise the
|
|
120
|
+
workforce runtime contract on Agentlas OS v1.1.44 at immutable commit
|
|
121
|
+
`f29381f15c0ee4f244c2bac253bbb992765bc859`, including canonical ontology
|
|
122
|
+
`awo:2026-07-15.2` and its reviewed singular payment/security aliases.
|
|
123
|
+
- This source commit does not prove a GitHub release or npm publication; both
|
|
124
|
+
remain separate immutable-tag gates.
|
|
125
|
+
|
|
126
|
+
## 0.8.3 — 2026-07-14
|
|
127
|
+
|
|
128
|
+
- Pin all release and npm publication gates to Agentlas OS v1.1.28 commit
|
|
129
|
+
`d741da796289678c38fac1059f0473f271d0f7e9`. Codex, Claude Code, MCP,
|
|
130
|
+
Network, owner Cloud, and Storm plugin contacts now synchronously install the
|
|
131
|
+
same Core-owned project soul memory, code map, ontology runtime, CareerGraph,
|
|
132
|
+
and full `.agentlas/` privacy block before agent work starts.
|
|
133
|
+
- Ship the repository's npm OIDC trusted-publishing workflow. It accepts only
|
|
134
|
+
an exact immutable release tag, reruns the Core contracts and 45-case smoke
|
|
135
|
+
suite, and verifies registry visibility without storing a long-lived npm
|
|
136
|
+
publish token in GitHub.
|
|
137
|
+
|
|
138
|
+
## 0.8.2 — 2026-07-14
|
|
139
|
+
|
|
140
|
+
- Include the post-`v0.8.1` hardened execution boundary: read-only discovery
|
|
141
|
+
remains passive, while the first real write/full run installs the complete
|
|
142
|
+
Core-owned project soul, memory, code map, ontology, Career Graph, and
|
|
143
|
+
privacy-first `.gitignore` contract.
|
|
144
|
+
- Fail closed when the parent AI's exact model choice is absent from live
|
|
145
|
+
inventory, exceeds a cost ceiling, or lacks required capabilities/context;
|
|
146
|
+
no provider alias or tier-to-model table chooses a model for the AI.
|
|
147
|
+
- Pin the cross-platform release gate to Agentlas OS v1.1.27 commit
|
|
148
|
+
`e024b68821b28aa40c7a22c94ac3832fed4155dd`, including the Windows ACL/POSIX
|
|
149
|
+
mode correction, and require the same Goal + UltraCode prompt bytes on all
|
|
150
|
+
three operating systems.
|
|
151
|
+
|
|
152
|
+
GitHub and npm publication remain separate operations. The registry version is
|
|
153
|
+
authoritative for `npm install -g agentlas` and must be verified after publish.
|
|
154
|
+
|
|
155
|
+
## 0.8.1 — 2026-07-14
|
|
156
|
+
|
|
157
|
+
- Load the canonical, digest-addressed Stormbreaker Goal + UltraCode harness
|
|
158
|
+
from Agentlas OS instead of maintaining a Terminal-local prompt variant.
|
|
159
|
+
- Verify byte-identical harness behavior across macOS, Linux, and Windows, and
|
|
160
|
+
fail closed when the Core digest or runtime contract does not match.
|
|
161
|
+
- Isolate Windows test hosts and ACL-specific cleanup behavior so successful
|
|
162
|
+
product assertions are not misreported as failures by platform-only process
|
|
163
|
+
or temporary-directory semantics.
|
|
164
|
+
- Select only exact models advertised by the live host inventory; when that
|
|
165
|
+
inventory is unavailable, preserve the active model instead of inventing a
|
|
166
|
+
provider-specific model ID or effort level.
|
|
167
|
+
- Bootstrap canonical Core project memory on the first real write/full Terminal
|
|
168
|
+
execution while keeping read-only and discovery commands non-mutating. The
|
|
169
|
+
complete `.agentlas/` namespace is ignored and owner-only even during the
|
|
170
|
+
compatibility fallback to an older Core.
|
|
171
|
+
- Gate the Terminal release contract on the pinned Agentlas Core
|
|
172
|
+
project-bootstrap surface across macOS, Linux, and Windows.
|
|
173
|
+
|
|
174
|
+
GitHub tag: `v0.8.1`. The npm registry remained on `0.7.0`; the attempted
|
|
175
|
+
`0.8.1` publication was rejected by the registry's OTP gate and was never
|
|
176
|
+
reported as installed.
|
|
177
|
+
|
|
178
|
+
## 0.8.0 — 2026-07-13
|
|
179
|
+
|
|
180
|
+
- Added separately owned Portable Experience/Taste assets, exact loadout and
|
|
181
|
+
receipt validation, privacy-filtered local experience candidates, and
|
|
182
|
+
explicit Desktop loadout opt-in.
|
|
183
|
+
- Added system-global-first MCP planning with one-pass consent, key-presence
|
|
184
|
+
checks, ordered alternatives, isolated failures, and valid empty-MCP mode.
|
|
185
|
+
- Added AI-authored model allocation receipts with live runtime inventory,
|
|
186
|
+
exact model/effort selection, explicit pins, cost ceilings, and visible
|
|
187
|
+
fallback reasons.
|
|
188
|
+
|
|
189
|
+
GitHub release: `v0.8.0`. npm publication is a separate registry action and is
|
|
190
|
+
not implied by the tag or GitHub asset.
|
package/README.md
CHANGED
|
@@ -17,6 +17,22 @@ Claude Code style, standalone: **no desktop app required.**
|
|
|
17
17
|
Agentlas Terminal is the already-shipped independent terminal product. It is
|
|
18
18
|
not a Desktop `cli/` mirror and does not require the Desktop app to run.
|
|
19
19
|
|
|
20
|
+
> **Current source release candidate (2026-07-16):** `v0.9.1`. The source commit
|
|
21
|
+
> does not prove a GitHub release or npm publication. After the immutable tag
|
|
22
|
+
> and release gates pass, verify the independently published npm version with
|
|
23
|
+
> `npm view agentlas version` before installation.
|
|
24
|
+
|
|
25
|
+
Release tags are published to npm through the repository's OIDC trusted
|
|
26
|
+
publisher workflow. The workflow accepts only an exact immutable `vX.Y.Z` tag,
|
|
27
|
+
runs the Core/project-bootstrap contracts and smoke suite, and verifies the
|
|
28
|
+
registry result after publishing. No long-lived npm publish token is stored in
|
|
29
|
+
GitHub.
|
|
30
|
+
|
|
31
|
+
Release history and the source-versus-registry boundary are recorded in
|
|
32
|
+
[CHANGELOG.md](CHANGELOG.md). A published version must always come from its
|
|
33
|
+
exact tag: post-tag `main` changes are the next version and must never be
|
|
34
|
+
republished under an older version number.
|
|
35
|
+
|
|
20
36
|
> **We are Agent Trust. Your agent is not a program. It is an asset. — Agentlas —**
|
|
21
37
|
|
|
22
38
|
Agent Trust means owner-scoped, portable, inspectable, and restorable agent
|
|
@@ -33,6 +49,19 @@ agentlas
|
|
|
33
49
|
Type a task and it auto-routes to the right agent. Your model, your choice:
|
|
34
50
|
Claude Code / Codex / Gemini CLI subscriptions or BYOK API keys.
|
|
35
51
|
|
|
52
|
+
For team, builder, and swarm decomposition, the parent LLM first receives this
|
|
53
|
+
host's privacy-safe **live runtime inventory** and chooses an exact
|
|
54
|
+
`runtimeId`, `exactModelId`, and reasoning effort for every child and final
|
|
55
|
+
synthesis. When both Claude Code and Codex are connected, workers can run in
|
|
56
|
+
parallel across both; a plugin host only exposes the runtimes available in that
|
|
57
|
+
host. Terminal validates that each exact selection is still live, honors
|
|
58
|
+
explicit `/model <id>` and `/effort <level>` pins, and records visible fallback
|
|
59
|
+
reasons if a selected runtime/model disappears. It never derives a new model
|
|
60
|
+
name from task keywords or a fixed role table. Decision receipts contain a task
|
|
61
|
+
hash, not the raw prompt, in the private Agentlas user-data directory.
|
|
62
|
+
Operators can set `AGENTLAS_MODEL_MAX_TIER=economy|balanced|frontier` as a hard
|
|
63
|
+
cost ceiling.
|
|
64
|
+
|
|
36
65
|
---
|
|
37
66
|
|
|
38
67
|
**Agentlas 터미널 CLI** — Claude Code(`claude`), Codex(`codex`)처럼
|
|
@@ -89,20 +118,26 @@ agentlas list # 설치된 에이전트/회사 + 활성 런
|
|
|
89
118
|
|
|
90
119
|
**Portable Experience Bundle과 Variant**
|
|
91
120
|
```sh
|
|
121
|
+
agentlas experience list
|
|
122
|
+
agentlas experience inspect <exact-release-id|bundle-id|upload-id>
|
|
92
123
|
agentlas experience validate <bundle.agentlas-experience.json>
|
|
93
124
|
agentlas experience save <bundle> --base-cloud-id <id> --base-package-hash sha256:<hash>
|
|
94
125
|
agentlas experience publish <bundle> --visibility unlisted \
|
|
95
126
|
--base-cloud-id <id> --base-package-hash sha256:<hash>
|
|
96
127
|
agentlas experience status <bundle-id|upload-id>
|
|
97
128
|
agentlas experience export <bundle-id|upload-id> [--out <file>] [--overwrite]
|
|
98
|
-
agentlas experience
|
|
129
|
+
agentlas experience unpublish <exact-release-id|bundle-id|upload-id> [--dry-run]
|
|
130
|
+
# withdraw는 unpublish와 같은 exact receipt/revision 계약의 호환 별칭
|
|
131
|
+
agentlas experience withdraw <exact-release-id|bundle-id|upload-id>
|
|
99
132
|
|
|
100
133
|
# 로컬 0600 캐시만 만들고 Hub에는 보내지 않음
|
|
101
134
|
agentlas experience save <bundle> --local-only
|
|
102
135
|
|
|
103
136
|
# 이전 pack-only 로컬 의도 호환 명령
|
|
137
|
+
agentlas experience legacy-list
|
|
138
|
+
agentlas experience legacy-inspect <pack-id|release-id>
|
|
104
139
|
agentlas experience legacy-publish .agentlas/experience-pack.json
|
|
105
|
-
agentlas experience unpublish <pack-id|release-id>
|
|
140
|
+
agentlas experience legacy-unpublish <pack-id|release-id>
|
|
106
141
|
|
|
107
142
|
agentlas variant resolve --candidates variants.json --base-release <release-id>
|
|
108
143
|
```
|
|
@@ -115,12 +150,19 @@ Cloud base artifact를 서버에서 확인한 뒤 owner-private `draft-saved`로
|
|
|
115
150
|
모든 변경 요청은 기존 로그인 세션, Idempotency-Key, exact revision ETag를 사용하고,
|
|
116
151
|
Terminal은 서버 영수증과 별도의 0600 로컬 상태만 보관한다. `--dry-run`은 로그인 확인,
|
|
117
152
|
네트워크, 로컬 저장을 모두 하지 않는다.
|
|
153
|
+
`list`와 `inspect`는 현재 프로젝트에 저장된 Portable Bundle만 다시 검증해 보여주며,
|
|
154
|
+
owner/account, 로컬 경로, raw content, prompt/transcript, credential은 출력하지 않는다.
|
|
155
|
+
pack ID가 여러 release를 가리키면 최신 것을 임의 선택하지 않고 정확한 release/bundle/
|
|
156
|
+
upload ID를 요구한다. `unpublish --dry-run`은 로컬에서 검증된 exact server receipt와
|
|
157
|
+
revision이 있을 때만 조건부 삭제 계획을 보여주며 네트워크와 로컬 쓰기를 모두 0으로
|
|
158
|
+
유지한다. 실제 `unpublish`는 그 revision을 `If-Match`로 보내고 서버의 새 `withdrawn`
|
|
159
|
+
영수증을 검증한 뒤에만 로컬 상태를 전진시킨다.
|
|
118
160
|
`export`는 서버가 돌려준 bundle hash/semantic content/영수증 owner를 다시 검증한 뒤
|
|
119
161
|
0600 파일로 원자적으로 저장한다. 기본은 기존 출력 파일을 덮어쓰지 않고 symlink는
|
|
120
162
|
항상 거절하며, 같은 일반 파일을 명시적으로 교체할 때만 `--overwrite`를 사용한다.
|
|
121
163
|
|
|
122
|
-
이전 pack-only
|
|
123
|
-
full Portable Bundle을 `publish`하면 새 서버 교환 경로를 사용한다. Experience Bundle은
|
|
164
|
+
이전 pack-only 동작은 `legacy-list|legacy-inspect|legacy-publish|legacy-unpublish`로만
|
|
165
|
+
명시적으로 접근한다. full Portable Bundle을 `publish`하면 새 서버 교환 경로를 사용한다. Experience Bundle은
|
|
124
166
|
base release를 참조할 뿐 base package를 복사하지 않는다.
|
|
125
167
|
|
|
126
168
|
`variant resolve`도 로컬 호환성 미리보기다. 후보 JSON의 `score`나
|
|
@@ -135,29 +177,96 @@ agentlas build "GitHub 이슈를 정리하는 에이전트" --approve-mcp github
|
|
|
135
177
|
agentlas build "오프라인 에이전트" --no-mcp
|
|
136
178
|
agentlas build "Windows 셸 에이전트" \
|
|
137
179
|
--experience-base-release <exact-release-id> \
|
|
138
|
-
--experience-
|
|
139
|
-
--experience-
|
|
140
|
-
agentlas
|
|
180
|
+
--experience-pack-release <exact-experience-release-id> \
|
|
181
|
+
--experience-task-signature agentlas.task.v1/debugging \
|
|
182
|
+
--experience-environment agentlas.env.v1/os/windows,agentlas.env.v1/arch/x64,agentlas.env.v1/runtime/terminal
|
|
183
|
+
agentlas run <agent> "Windows 오류를 디버깅해줘" \
|
|
141
184
|
--experience-base-release <exact-release-id> \
|
|
142
|
-
--experience-
|
|
143
|
-
--experience-
|
|
185
|
+
--experience-pack-release <exact-experience-release-id> \
|
|
186
|
+
--experience-task-signature agentlas.task.v1/debugging \
|
|
187
|
+
--experience-environment agentlas.env.v1/os/windows,agentlas.env.v1/arch/x64,agentlas.env.v1/runtime/terminal
|
|
188
|
+
|
|
189
|
+
# Desktop에서 사용자가 이미 승인해 현재 장착된 exact loadout만 명시적으로 사용
|
|
190
|
+
agentlas run <agent> "Windows 오류를 디버깅해줘" --experience-desktop-loadout
|
|
144
191
|
```
|
|
145
192
|
|
|
193
|
+
로컬에 호환 Experience가 저장되어 있다는 사실만으로는 장착으로 보지 않는다. 빌드와
|
|
194
|
+
실행은 사용자가 선택했거나 권위 있는 loadout이 넘긴 정확한 Experience release ID가
|
|
195
|
+
있을 때만 그 릴리스의 항목을 조회한다. 응답 유실이나 재시작도 다른 릴리스를 대신
|
|
196
|
+
붙이는 근거가 되지 않는다.
|
|
197
|
+
|
|
198
|
+
Desktop 연동도 자동 장착이 아니다. `--experience-desktop-loadout`을 준 그 실행에서만
|
|
199
|
+
Desktop이 canonical `terminal-bridge/ontology-loadout-v2.json`에 원자적으로 쓴 0600
|
|
200
|
+
로컬 권위 receipt를 읽는다. 임의 receipt 경로는 지원하지 않는다. Terminal은 로컬 DB의
|
|
201
|
+
exact 설치 에이전트 ↔ Hub base release 결속, Desktop 설치 authority instance와 단조
|
|
202
|
+
sequence를 다시 확인한다. 5분이 지난 receipt, 권한이 넓은 파일, symlink, 손상·변조된
|
|
203
|
+
JSON, 다른 Desktop 설치에서 복사한 receipt, rollback된 sequence, 다른 설치 에이전트,
|
|
204
|
+
다른 base release는 모두 Experience 없는 안전 모드로 건너뛴다. 이 receipt는 Hub 서버
|
|
205
|
+
서명이 아니라 같은 로컬 Agentlas DB에 결속된 Desktop 권위 증명이다. 같은 OS 사용자
|
|
206
|
+
권한으로 DB와 canonical receipt를 함께 완전히 장악한 경우는 로컬 호스트 침해로 간주한다.
|
|
207
|
+
수동 exact 플래그가 receipt와 다르면 둘 중 하나를 추정하지 않고 Experience를 끈다.
|
|
208
|
+
`--no-experience`가 항상 최우선이다.
|
|
209
|
+
|
|
210
|
+
설치 에이전트의 성공한 실행이 새 `procedure|decision|risk` Memory를 큐레이션하면,
|
|
211
|
+
Terminal은 exact 에이전트/base release/현재 OS·arch·runtime에 묶인 Operational Experience
|
|
212
|
+
후보를 기존 로컬 exchange store에 `private + draft + candidate`로 저장한다. 실행 자체는
|
|
213
|
+
검증 통과로 간주하지 않으므로 후보는 자동 장착·promote·publish·Hub 전송되지 않는다.
|
|
214
|
+
raw prompt/transcript, 로컬 경로, URL, 이메일·전화·고객 식별자, credential, base package
|
|
215
|
+
재료가 감지되면 내용은 복사하지 않고 reason code만 로컬 run ledger에 남긴다. 같은
|
|
216
|
+
실행/Memory/base/environment 재처리는 같은 후보를 재사용한다. 실패 실행과 큐레이션된
|
|
217
|
+
근거가 없는 성공 실행은 RunReceipt만 남기며 후보를 만들지 않는다. `preference`는
|
|
218
|
+
Operational 후보에 섞지 않고 내용 없는 로컬 Taste observation으로만 분리한다.
|
|
219
|
+
|
|
146
220
|
빌드 전에는 Agentlas 시스템 전역 MCP 레지스트리의 메타데이터를 먼저 읽고, 관련
|
|
147
|
-
MCP·키 필요 여부·키 존재 여부만 한 번에 보여 준다.
|
|
148
|
-
|
|
221
|
+
MCP·키 필요 여부·키 존재 여부만 한 번에 보여 준다. 승인 뒤에만 정확한 시스템 전역
|
|
222
|
+
DB 행을 다시 읽어 MCP initialize/tools-list 연결을 개별 검사한다. 성공한 행만 private
|
|
223
|
+
structured allowlist로 native 빌더 경계에 전달되며, 자연어 prompt는 실행 권한이 아니다.
|
|
224
|
+
이 첫 출력은 추천일 뿐이다. 한 번의 명시 동의 전에는 어떤 MCP도 붙이지 않고,
|
|
225
|
+
네트워크 key probe나 설치도 수행하지 않는다.
|
|
226
|
+
성공한 Build 승인에는 서버 ID·transport·command·args·키 이름을 묶은 비밀 없는 지문만
|
|
227
|
+
로컬 영수증으로 남는다. 이후 일반 `full` 턴은 enabled 상태와 이 exact 지문이 모두 맞는
|
|
228
|
+
서버만 붙이며, 행이 바뀌거나 비활성화되면 자동으로 empty-MCP로 돌아간다. Playwright를
|
|
229
|
+
포함한 어떤 서버도 legacy 기본값으로 자동 주입하지 않는다.
|
|
230
|
+
명령·인자는 로컬 host config에만 있고 package/prompt/영수증에는 들어가지 않으며 URL·키
|
|
231
|
+
값은 전달하지 않는다. LLM provider는 자기 로그인 환경을 유지하지만 실제 MCP 자식은
|
|
232
|
+
Agentlas 소유 wrapper를 거쳐 별도 HOME과 최소 실행 환경을 받는다. 이때 post-consent
|
|
233
|
+
레지스트리의 `env_keys_json`에 적힌 키 이름만 값이 전달되고, 나머지 process/global/project/
|
|
234
|
+
agent 자격증명은 상속되지 않는다. wrapper 설정과 로그에는 키 값이 기록되지 않는다.
|
|
235
|
+
HOME과 임시 폴더도 서버별 전용 디렉터리다. PATH/OS 실행 필수값 외의 proxy·TLS override·
|
|
236
|
+
NODE_OPTIONS 같은 host-control 변수는 `env_keys_json`에 적혀 있어도 거절한다.
|
|
237
|
+
최대 3개 probe만 병렬 실행하고 전체 12초 deadline을 적용하므로 8개 서버가 순차로 64초를
|
|
238
|
+
소모하지 않는다. 한 probe의 timeout/실패는 그 서버에만 남는다. 비대화형 실행은 묻지 않고 기본적으로 아무 MCP도 승인하지 않아
|
|
149
239
|
CI가 멈추지 않는다. 한 MCP가 없거나 키가 없어도 그 기능만 degraded가 되며 빌드는
|
|
150
|
-
empty-MCP 모드로 계속된다. `--require-mcp <catalog-id>`는 빌드 전체를 중단시키지 않고
|
|
240
|
+
나머지 연결 또는 empty-MCP 모드로 계속된다. `--require-mcp <catalog-id>`는 빌드 전체를 중단시키지 않고
|
|
151
241
|
Variant 대여 판단에서 해당 Variant만 제외하는 계약을 만든다.
|
|
242
|
+
한 requirement에 승인된 alternatives가 있으면 primary 실패 뒤 같은 12초 deadline 안에서
|
|
243
|
+
그 그룹만 순차 fallback하며, 다른 requirement의 probe와 결과는 격리한다.
|
|
152
244
|
시스템 전역 레지스트리를 읽지 못한 경우도 `registry: unavailable`로 명확히 구분하고,
|
|
153
245
|
설치나 네트워크 폴백 없이 empty-MCP 모드로 계속한다.
|
|
154
246
|
REPL의 `/build`도 top-level `agentlas build`와 같은 계획·한 번 동의·결과 경로를
|
|
155
247
|
사용하며, MCP 사전 계획을 건너뛰는 별도 builder 지름길은 없다.
|
|
156
|
-
로컬 promoted Experience도 같은 handler에서 exact
|
|
157
|
-
|
|
248
|
+
로컬 promoted Experience도 같은 handler에서 사용자가 고른 exact Experience release,
|
|
249
|
+
exact base release, 현재 프로젝트, task signature, environment constraint가 모두 맞을 때만
|
|
250
|
+
조회한다. 일반 `agentlas run`의 내부 loadout 경로 역시 설치된 Cloud package marker와
|
|
251
|
+
로컬의 서버 확인 baseResolution이 hash/slug/release까지 정확히 같고, 권위 있는 loadout이
|
|
252
|
+
정확한 Experience release ID를 넘긴 경우에만 후보가 된다. 현재 요청은 고정된 양언어
|
|
253
|
+
키워드 표로 분류하며 허용된 `agentlas.task.v1/<class>` ID가 그 장착 릴리스의 item에 있을
|
|
254
|
+
때만 조회한다. 환경도 현재 host가 만든 `agentlas.env.v1/os|arch|runtime/...` 태그와 정확히
|
|
255
|
+
맞아야 한다. opaque hash, `general`, legacy signature/constraint는 저장·교환은 가능하지만
|
|
256
|
+
활성하지 않고 stderr에 skip reason을 남긴다. 동의어·embedding 추정은 쓰지 않으며 CLI의
|
|
257
|
+
명시 task class는 자동 분류보다 우선한다.
|
|
258
|
+
분류표는 `engine/experience-taxonomy-v1.json`의 checksum
|
|
259
|
+
`sha256:413833472e423352518f9591cd0e051c5bc0a7971e53ab3dc7b5aaf7d50c37ab`으로 고정한다.
|
|
260
|
+
OS는 macos/windows/linux/ios/android/unknown, arch는 arm64/x64/unknown만 허용하고 runtime은
|
|
261
|
+
최소 2자다. 알 수 없는 OS/arch는 해당 item만 `unknown`/ineligible 처리하며 base agent는 유지한다.
|
|
262
|
+
합계 8개/800
|
|
158
263
|
추정 토큰을 넘지 않으며, prompt에는 `NO SERVER RENTAL-RESOLUTION RECEIPT`가 표시되어
|
|
159
264
|
로컬 사용자 증언을 서버 검증 평판처럼 오인하지 않게 한다.
|
|
160
265
|
|
|
266
|
+
API/BYOK 경로의 항상 켜진 Memory emitter는 UTF-8 bytes/3 기준 150토큰 이하 core만
|
|
267
|
+
주입한다. 전체 Memory Events schema는 기억·메모리 작업에서만, 로컬 credential index
|
|
268
|
+
안내는 deploy/release/billing/auth/API/cloud 작업에서만 별도로 로드한다.
|
|
269
|
+
|
|
161
270
|
**내 Agent Cloud 자산**
|
|
162
271
|
```sh
|
|
163
272
|
agentlas cloud save <경로> # 소유자 전용 비공개 저장(공개 심사/라우팅 카드 없음)
|
|
@@ -176,14 +285,42 @@ Agent Cloud 소유자 복원은 반드시 `agentlas cloud restore <slug>`를 사
|
|
|
176
285
|
|
|
177
286
|
**실행 엔진**
|
|
178
287
|
```sh
|
|
179
|
-
agentlas storm "목표" #
|
|
288
|
+
agentlas storm "목표" # Agentlas 자체 Goal+UltraCode: 계획→런타임/모델/effort 배정→실행→검증 [--research]
|
|
180
289
|
agentlas swarm "목표" # emergent 에이전트 스웜 [--parallel N]
|
|
181
|
-
agentlas network "요청" #
|
|
290
|
+
agentlas network "요청" # 상위 LLM이 Workforce Ontology에서 exact-release TF 선발·실행
|
|
291
|
+
agentlas network "요청" --benchmark # child/synthesis/verifier 영수증 누락 시 실패
|
|
292
|
+
agentlas legacy-network "요청" # 이전 hep-network 호환 경로(명시 실행만)
|
|
182
293
|
agentlas call "a,b" "컨텍스트" # 지정 에이전트 호출 (hep-call)
|
|
183
294
|
agentlas browser # 실제 브라우저 하드포인트 (hep-browser)
|
|
184
295
|
agentlas route "요청" # 라우팅 미리보기 (실행 없음)
|
|
185
296
|
```
|
|
186
297
|
|
|
298
|
+
`swarm`은 먼저 상위 LLM이 독립 작업과 의존성을 나누고, 이 호스트에서 실제 실행
|
|
299
|
+
가능한 런타임·모델·effort 목록을 보고 각 워커 및 최종 종합의 정확한
|
|
300
|
+
`runtimeId + exactModelId + effort`를 고른다. Claude Code와 Codex가 둘 다 연결돼
|
|
301
|
+
있으면 둘로 병렬 분배한다. 플러그인 안에서는 그 플러그인을 호스트하는 CLI의 목록만
|
|
302
|
+
노출한다. 터미널 코드는 이 판단을 키워드 규칙이나 고정 모델명으로 대체하지 않고,
|
|
303
|
+
선택이 여전히 가능한지·capability·context·비용 상한·명시적 사용자 고정만 검증한다.
|
|
304
|
+
배정 JSON이 깨지거나 런타임/모델이 사라지면 현재 모델로 폴백하고 그 이유를 화면과
|
|
305
|
+
비공개 영수증에 남긴다.
|
|
306
|
+
|
|
307
|
+
`network`는 새 Agent Workforce Ontology 경로다. 활성 상위 LLM이 먼저 redacted
|
|
308
|
+
work order와 역할 슬롯을 만든 뒤 Hub MCP의 `workforce.search_candidates`를 직접
|
|
309
|
+
호출하고, 반환된 직무·skill·MCP/tool·eval 증거 안에서 정확한 release를 고른다.
|
|
310
|
+
호스트 코드는 팀을 고르지 않고 계약만 검사한다. 선택은
|
|
311
|
+
`workforce.validate_selection`으로 검증하고, `workforce.prepare_execution`이 같은
|
|
312
|
+
release/version/package hash/content digest에 고정한 directive bundle을 반환한 뒤에만
|
|
313
|
+
manager plan → 별도 worker → synthesis → verifier 순서로 실행한다. 후보 밖 release,
|
|
314
|
+
digest 불일치, 실행 불가, 대체 release, 잘못된 planner JSON은 기존 검색이나 로컬
|
|
315
|
+
에이전트로 폴백하지 않고 실패한다. `--benchmark`는 planner fallback 0건, 모든 child,
|
|
316
|
+
synthesis, verifier 영수증과 verifier pass를 모두 요구한다. 이전 Hephaestus 분해기는
|
|
317
|
+
`legacy-network`로만 명시 호출할 수 있다.
|
|
318
|
+
|
|
319
|
+
새 설치와 아직 network 설정을 건드리지 않은 설치에서는 일반적인 실작업형 요청도
|
|
320
|
+
이 Workforce 경로로 자동 진입한다. 사용자가 `/config network off`로 명시적으로 끈
|
|
321
|
+
값은 업그레이드 후에도 보존된다. 질문·잡담과 이미 특정 에이전트를 고른 대화에는
|
|
322
|
+
자동 TF를 붙이지 않는다.
|
|
323
|
+
|
|
187
324
|
**지식 & 리서치**
|
|
188
325
|
```sh
|
|
189
326
|
agentlas research <sub> # Research Engine (status|gather|search|read|plan)
|
|
@@ -213,6 +350,12 @@ agentlas cloud <sub> # 자산 저장·공개·복원 (save|publish
|
|
|
213
350
|
공통 옵션: `--runtime claude-code|codex|gemini` · `--permission read|write|full`
|
|
214
351
|
REPL 안에서는 `/`로 명령 팔레트 (`/build` `/search` `/storm` `/network` …).
|
|
215
352
|
|
|
353
|
+
`storm`은 외부 CLI의 자동 실행 스위치를 켜는 명령이 아니다. Agentlas Core에서 서명된 동일한
|
|
354
|
+
Goal/UltraCode 하네스를 읽고 SHA-256을 검증한 뒤, Terminal의 부모 플래너가 현재 연결된 런타임과
|
|
355
|
+
모델 목록을 보고 작업별 `runtimeId`·정확한 모델·effort를 확정한다. 독립 작업은 병렬 실행하고
|
|
356
|
+
증거 기반 최종 게이트에서 결과를 종합한다. Core 하네스를 읽거나 검증하지 못하면 로컬 문구로
|
|
357
|
+
대체하지 않고 모델 호출 전에 중단한다.
|
|
358
|
+
|
|
216
359
|
권한은 이름과 실제 런타임 실행 범위를 일치시킨다.
|
|
217
360
|
|
|
218
361
|
| Agentlas 권한 | Claude Code | Codex | Gemini CLI |
|
|
@@ -221,8 +364,8 @@ REPL 안에서는 `/`로 명령 팔레트 (`/build` `/search` `/storm` `/network
|
|
|
221
364
|
| `write` | `acceptEdits` | `workspace-write` sandbox | `auto_edit` |
|
|
222
365
|
| `full` | permission 검사 우회 | approval + sandbox 우회 | `yolo` |
|
|
223
366
|
|
|
224
|
-
`write`는 무제한 권한의 다른 이름이 아니다. 외부 상태를 바꿀 수 있는 MCP
|
|
225
|
-
|
|
367
|
+
`write`는 무제한 권한의 다른 이름이 아니다. 외부 상태를 바꿀 수 있는 MCP 도구는
|
|
368
|
+
`full`이면서 exact 동의 지문이 유효한 턴에만 주입한다. 입력창에서 `Shift-Tab`으로 권한을 순환할 수 있지만,
|
|
226
369
|
`write → full`은 5초 안에 두 번 연속 눌러야 하며 이 변경은 현재 세션에만 적용된다.
|
|
227
370
|
실행 중 `Ctrl-T`는 Claude Todo/Task, Codex `todo_list`, Gemini `write_todos`가 실제로
|
|
228
371
|
보낸 체크리스트만 열고 접는다. 일반 Bash/Read 실행을 계획 항목처럼 꾸며내지 않는다.
|
package/bin/agentlas.cjs
CHANGED
|
@@ -94,7 +94,7 @@ function openSqlite(p) {
|
|
|
94
94
|
} catch { /* optional dep 미설치/ABI 불일치 */ }
|
|
95
95
|
const major = Number(process.versions.node.split(".")[0]);
|
|
96
96
|
if (major < 22) {
|
|
97
|
-
throw new Error(`Node ${process.version} —
|
|
97
|
+
throw new Error(`Node ${process.version} — Node 22+ (node:sqlite) is required when better-sqlite3 is unavailable.`);
|
|
98
98
|
}
|
|
99
99
|
const { DatabaseSync } = loadNodeSqliteQuietly();
|
|
100
100
|
const db = new DatabaseSync(p);
|
|
@@ -109,7 +109,7 @@ function bootstrapDbIfMissing() {
|
|
|
109
109
|
if (exists(p)) return { created: false, path: p };
|
|
110
110
|
const schemaFile = path.join(PKG_ROOT, "engine", "bootstrap-schema.sql");
|
|
111
111
|
if (!exists(schemaFile)) {
|
|
112
|
-
throw new Error(
|
|
112
|
+
throw new Error(`Bootstrap schema not found: ${schemaFile}`);
|
|
113
113
|
}
|
|
114
114
|
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
115
115
|
const sql = fs.readFileSync(schemaFile, "utf8");
|
|
@@ -123,7 +123,7 @@ function bootstrapDbIfMissing() {
|
|
|
123
123
|
} catch (e) {
|
|
124
124
|
db.close();
|
|
125
125
|
try { fs.rmSync(temp, { force: true }); } catch { /* leave temp for inspection */ }
|
|
126
|
-
throw new Error(`
|
|
126
|
+
throw new Error(`Database bootstrap failed: ${e.message}`);
|
|
127
127
|
}
|
|
128
128
|
db.close();
|
|
129
129
|
let created = false;
|
|
@@ -132,7 +132,7 @@ function bootstrapDbIfMissing() {
|
|
|
132
132
|
created = true;
|
|
133
133
|
} catch (e) {
|
|
134
134
|
if (!e || e.code !== "EEXIST") {
|
|
135
|
-
throw new Error(`
|
|
135
|
+
throw new Error(`Atomic database bootstrap failed: ${e && e.message ? e.message : e}`);
|
|
136
136
|
}
|
|
137
137
|
} finally {
|
|
138
138
|
try { fs.rmSync(temp, { force: true }); } catch { /* noop */ }
|
|
@@ -150,9 +150,9 @@ function main() {
|
|
|
150
150
|
|
|
151
151
|
let error = null;
|
|
152
152
|
if (!engineFound) {
|
|
153
|
-
error = "
|
|
153
|
+
error = "Engine not found (engine/agentlas.cjs). Reinstall with: npm i -g agentlas";
|
|
154
154
|
} else if (!sqliteDriver) {
|
|
155
|
-
error = `Node ${process.version} — SQLite
|
|
155
|
+
error = `Node ${process.version} — no SQLite driver. Upgrade to Node 22.5+ or reinstall with 'npm i -g agentlas' to build better-sqlite3.`;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
if (args[0] === "--where" || args[0] === "terminal-where") {
|
|
@@ -178,7 +178,7 @@ function main() {
|
|
|
178
178
|
try {
|
|
179
179
|
const boot = bootstrapDbIfMissing();
|
|
180
180
|
if (boot.created) {
|
|
181
|
-
process.stderr.write(
|
|
181
|
+
process.stderr.write(`First run: initialized Agentlas data (${boot.path})\n`);
|
|
182
182
|
}
|
|
183
183
|
} catch (e) {
|
|
184
184
|
process.stderr.write(`${e.message}\n`);
|
|
@@ -201,7 +201,7 @@ function main() {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
child.on("error", (err) => {
|
|
204
|
-
process.stderr.write(`
|
|
204
|
+
process.stderr.write(`Failed to start the Agentlas engine: ${err.message}\n`);
|
|
205
205
|
process.exit(1);
|
|
206
206
|
});
|
|
207
207
|
child.on("exit", (code, signal) => {
|