skaile-cli 5.11.0 → 5.12.0

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 (3) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/README.md +13 -0
  3. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,103 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.12.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Rendered agents: one render on `add` and `install`, and layouts each harness loads.
8
+
9
+ - `skaile add agent:…` renders the agent after its composed skills and delegate sub-agents are in place, so the file already holds the `## Installed Abilities` block and a later `install`, `install --locked` or `update` leaves it alone (no `Updated` line, mtime unchanged). Before, the first `install` or `update` rewrote it (p84, p300).
10
+ - A locked agent that a fresh clone has not restored yet is told `run skaile install --locked`; `skaile add <ref>` is named only for a ref the lock does not have (p303).
11
+ - omp: the agent is also written as the flat `.omp/agents/<name>.md` omp lists next to `<name>/agent.yaml`; local `composes` dirs are copied next to the omp `agent.yaml` (`../x` becomes `./composes/x`) (p356, p418).
12
+ - The Claude Code model aliases (`inherit`, `opus`, `sonnet`, `haiku`) are no longer written into Codex and omp files (p419).
13
+ - A delegate sub-agent or `role` is told it is a sub-agent and lists only the connectors its slots are bound to (p420).
14
+ - Docs say which harness release loads the rendered files: omp 18.12.5 does, Codex 0.159.3 does not list `.codex/agents/*.toml` as spawnable agents (p428).
15
+ - `skaile init` gitignores `__pycache__/`, `*.pyc`, `.omp/system.md`, `.omp/sessions/` and `.codex/skaile-session-instructions.md`; the environment section says "isolated container" only inside a container (p326, p354).
16
+ - `skaile add --global` deploys to the harness of the project you run it in as well as every harness dir that exists under `~`, and prints the path per harness (p353).
17
+
18
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Library authoring guards agree across `validate`, `library index`, `asset import`, `migrate assets` and `library publish`.
19
+
20
+ - `library publish`, `register` and `yank` exit 1 for `--asset ""` instead of selecting every asset (p106).
21
+ - `library index` exits 1 and prints no green line when it skips an asset with a non-semver version, as `validate` does (p222). A yaml-number version (`version: 1.0`) is shown as written with the quoted fix (`"1.0.0"`) by `validate`, `index` and `publish` (p229).
22
+ - A flow with no `nodes:` fails `validate`, `index` and the publish plan like `nodes: []` (p230). `publish` and `register` refuse a skill, agent, prompt or contract whose body is still the untouched scaffold; `validate` still only warns (p231).
23
+ - `validate` fails for a `skaile.manifest.yaml` that does not parse and names the file (p308). Every invalid `dependencies:` form prints the same line in `index` and `validate` and exits 1 (p310). A `dependencies:` entry with an invalid publisher is refused the same way.
24
+ - `asset import` runs the shared asset checks before it copies, exits 1 with `Not imported` when they fail, and no longer prints a success line or `add` hint for such a skill (p223). `asset import` and `asset migrate --mode copy` leave `.DS_Store`, `node_modules/`, `__pycache__/` and `*.pyc` out (p224). `asset migrate` names the commands that make the asset addable (p225).
25
+ - `migrate assets` writes no `publisher:` into a preset and prints `version <old> → <new>` when the version changes (p226); a root-level bundle moves into `<name>/<name>.preset.yaml`, which `index` and `validate` accept (p307).
26
+ - `validate versions --changed-only` notices an edited or new helper file of an asset (p322). `--changed-only` and `validate changelog` outside a git repository print one line naming the problem and no git usage text (p501).
27
+ - `validate` checks agent manifests for what the schema cannot see: a cron no scheduler reads, a capability naming an undeclared connector slot, a local compose path that does not exist, an agent composing itself, a missing or oversized memory source (p415).
28
+ - `skaile` prints no raw JSON log record on stdout (p47) and prints one line, exit 1, when the index database stays locked by another `skaile` process for 5 seconds (p228).
29
+ - `library index` writes `version: 0.1.0` into the manifest entry of an `AGENT.md` or `agent.yaml` agent that declares none, so the version and the lock key are the same in every library (p323).
30
+
31
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - `skaile run` uses the composed agent it locked.
32
+
33
+ - A hand edit of a pinned convention file (`SOUL.md`, `RULES.md`, `DUTIES.md`, `knowledge/`) after `skaile rebuild` is now a `composition_conflict` (`hash_mismatch`): `skaile run` stops at session start and `skaile check` prints one line per edited file and exits 1. Before, only the `Revision` changed and `check` exited 0.
34
+ - `skaile add agent:@pub/name` from a project `sources:` clone deploys what the agent `composes:` (skills, connectors, sub-agents) as requirements, so `check` and `install --locked` exit 0 and `remove` prunes them. Before, `check` called them fixable while `install` printed `Nothing to install`.
35
+ - `DUTIES.md` is part of the live system prompt of `skaile run` (the duties section); omp does not read it from the agent directory.
36
+ - A role instance's `model.preferred` is the model of its nested `agent.run` session. Before, the child started on the parent's model or the driver default.
37
+ - `skaile run --skill <name> --dry-run` prints the skill (source, version, requires) and each `prerequisites.files` entry as present or missing; an unknown skill exits 1.
38
+
39
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Drivers (5.11.0 critique, RCV drivers):
40
+
41
+ - `skaile.yaml` alone owns `driver`. `config set model` writes only `model`; a personal `driver` no longer overrides the project harness (a warning says so), and `config show` names the file that set each key (p340).
42
+ - `skaile run` with omp 18.x prints the answer when the reply arrives in `message_start` (p341), and a successful one-shot turn no longer logs `prompt failed - omp process killed` (p342, p427).
43
+ - `skaile repl` reads piped stdin line by line and exits at EOF; with no `skaile.yaml` a non-terminal repl refuses and names `skaile init` (p343).
44
+ - `integration install --driver omp` writes a default-export extension omp 18 loads, calling `skaile integration omp-exec` (p345); `--driver claude-code` writes project-root `.mcp.json` (p346) and its hooks call `skaile integration hook` (p346b).
45
+ - codex: the session home is always created (p347); no credential fails at once with `codex driver needs OPENAI_API_KEY` (p348); the `openai` entry is rendered as `skaile-openai` (p363).
46
+ - `run --help` and `repl --help` build the driver list from the registry (p350); omp start failures name omp's last error line as text (p359); the missing-SDK hint prints the project's package manager (p361); a provider entry whose credential variable is unset is named and not handed to omp (p362).
47
+
48
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Serve, protocol and plugins behave as documented.
49
+
50
+ - `plugin install` resolves the plugin entry from `exports`/`main` (loads under node), loads the plugin once and fails, restoring `skaile.yaml`, when it does not load (p450, p451).
51
+ - `skaile serve` gains `--host`, prints bind address and auth state, warns loudly when it runs without a token, checks the driver SDK before it reports ready, and prints one line on a busy port (p458, p466, p468).
52
+ - A major protocol mismatch emits `incompatible_protocol` and shuts the runner down (p454); `resource_request` accepts `resourceId` as an alias for `connectorId` (p455); an unknown command is answered with an `error` event (p457).
53
+ - `validate` fails on a connector with no `driver` (including the old `adapter` spelling) (p456).
54
+ - The WebSocket client reports the HTTP status of a refused handshake and an `error` event when another client takes the connection over (close code 4001, no reconnect) (p465, p467).
55
+ - The reconnect replay now sends `protocol_info` before the buffered events and the status (p469).
56
+ - `@skaile/workspaces/runner` types no longer pull drizzle into consumers' type-check (p461); `createAgentSession` no longer writes runner log lines to stdout (p473).
57
+
58
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - `skaile install --locked` restores every origin in full, and `check` notices what is missing.
59
+
60
+ - A source- or store-origin asset is restored by fetching its locked commit again and deploying every file its lock entry lists, not only its `.md` files (p320, p381). `check`, `doctor`, `outdated` and `diff` compare the deployed folder with that list too: a deleted `build.py` next to an intact `SKILL.md` is drift (exit 1, `<ref> is deployed without <files>`), and `install` / `install --locked` restore it (p382).
61
+ - A store-added asset (`skaile add skill:@admin/review`) is a first-class lock entry: `check`, `doctor` and `outdated` no longer fail with `locked but no source or library provides it any more`, `install --locked` restores it from the pinned commit (or from the bytes in `.skaile/cache/store/` when every file still hashes to the lock), and `install` heals what `check` fails on instead of printing `Nothing to install` (p380, p403).
62
+ - `outdated` counts only the commits that touch an asset's own folder, so a commit to `pirate-report` no longer marks `speak-like-a-pirate` as `1 commit(s) behind` (p397).
63
+ - `skaile.lock.yaml` is always written with `schema_version: 4`, whatever origins it holds. A lock written as `3` still loads and is rewritten as `4` by the next `add`, `install` or `update` (p398).
64
+ - `add`, `install` and `update` refuse to lock a source commit that is in no remote branch of its clone (`<url> clone has unpublished commit <sha>`), and `install --locked` exits 1 with `could not check out pin <sha>` when the pinned commit cannot be fetched, instead of deploying another commit's files and printing `Done` (p260).
65
+ - A re-lock (`install`, `update`) removes the `.env`, `.venv/` and `.pytest_cache/` files an earlier release copied into an asset folder and prints `Removed <file> (not part of <ref>)` for each (p309).
66
+
67
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - State commands give one verdict and name the fix.
68
+
69
+ - `skaile update` keeps a locked asset on its library when another library holds the same ref at the same version, also after `library rename`; a higher version elsewhere still wins.
70
+ - `skaile diff <ref>` fails with exit 1 when a requirement of the ref lost its library, when the ref is of a publisher the lock does not hold (`is not deployed — run skaile add <ref>`), and for a ref without a publisher that names no locked asset (`publisher required`); a ref without a publisher that names exactly one locked asset still diffs it.
71
+ - `skaile install` refuses a declared asset whose requirement nothing holds before it deploys or locks anything (`nothing was installed`, exit 1).
72
+ - `skaile info`, `why` and `tree` print one `parse error` line and exit 1 for a `skaile.yaml` that does not parse; `why` and `tree` outside a project print `No skaile.yaml found` and exit 1.
73
+ - `skaile update --catalog-only` exits 1 when the catalog cannot be refreshed and no longer says the re-deploy continues.
74
+ - `check` and `install --locked` say `(run skaile install)` for a requirement that `install` can deploy, not `(fixable)`.
75
+ - `skaile library push` of a library that is only behind says `behind origin by <n> commit(s); run skaile library pull <name>`. `library link` records the checked-out branch of an existing repo; a push without the configured branch names `library set <name> backendConfig.branch=<branch>`.
76
+ - `skaile run <word>` with no flow of that id exits 1 `Flow not found: <id>` and lists the near ids; only text with a space is a prompt.
77
+
78
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Store and catalog commands list only what `add` can install, and offline answers are honest.
79
+
80
+ - `store search`/`show`/`search` list only refs `skaile add` installs: no agent, contract or mcp-server entries, no non-canonical names, no `test-`/`demo-` entries (`--all` shows the test/demo ones). A plain store search prints at most 20 rows and says how many more match. `store show` prints `Requires:`.
81
+ - `store search`, `search --store` and `add` say `store unreachable` or `Store search failed` with the catalog URL and the cause, point at `skaile catalog test`, and exit 1 when the store was asked for. `add` honours `cache_ttl: 0`.
82
+ - Offline, the cached list answers `store search --kind` and `store show` (file list marked unavailable).
83
+ - A GitHub rate limit names `SKAILE_GITHUB_PAT` and the reset time; anonymous store adds read the raw-content host and spend no API calls.
84
+ - A source with a repo-level `publisher:` and no `assets:` can be added; one bad `sources:` entry is named and skipped instead of failing every `add`.
85
+ - `source manifest init`/`edit`/`rebuild` commit the manifest in the store repo; `store search` lists local curated manifests; the init hint prints the repo URL.
86
+ - `source add <bare-name>` is rejected (no made-up `skaile-ai/<name>` clone); a failed clone leaves no empty folders.
87
+ - `sha256 not pinned` is no longer printed on `source sync`, `add` and `update`.
88
+ - `config set|get catalog.url|catalog.cache_ttl|catalog.framing` writes and reads `config.yaml`.
89
+
90
+ ### Patch Changes
91
+
92
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - `skaile` no longer prints internal log records on stdout. Until a command sets up its own log store, the CLI keeps only warnings and errors and writes them to stderr (`SKAILE_LOG_LEVEL` still overrides the level). Before, `library index`, `search --local` and `add` printed the raw JSON record `asset scan truncated (cycle)` on stdout when a library held a symlink to an ancestor. `skaile run <flow> --dry-run` prints its plan as plain `[dry-run] …` lines instead of `[info] [flow-connector:run:…]` log lines.
93
+
94
+ The index database (`index.db`) and the log database (`logs.db`) now wait up to 5 seconds for another `skaile` process that holds the write lock. When the wait runs out, `skaile` prints `The skaile index is busy (another skaile process holds it); retry in a moment.` and exits 1 instead of printing a `SQLITE_BUSY` stack trace.
95
+
96
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Docs match 5.11.0. The three tutorials run end to end as written: tutorial 01 creates a skill with `--description` and says what the `TODO:` placeholder blocks, tutorial 02 shows the real `config show` output and the `driver`, `model` and `apiKey.<provider>` keys, and tutorial 03 builds a strict-v2 flow and runs it. The command pages (`index`, `run`, `repl`, `session`, `connector`, `asset`, `diff`, `library`, `misc`, `project`, `validate`, `source`, `store`, `catalog`, `plugin`, `serve`) list the options, exit codes and messages the CLI has now. The new `integration` page covers `skaile integration install | uninstall | enable | disable | status | hook`; `skaile plugin` documents `install | remove | list` and the rollback of a failed install. `protocol-v2.md` describes the `session_init` handshake the runner speaks (`protocol_info`, `session_init_ack`). Links in the docs use the routes the docs loader generates. The factory skills `authoring-skaile-assets`, `authoring-skaile-manifests` and `skaile-author-asset` list the `requires:` forms 5.11.0 deploys, say that the asset file's version wins over a manifest entry, and name the `manifest-compliance` skill.
97
+
98
+ - Updated dependencies [[`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9), [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9)]:
99
+ - @skaile/workspaces@5.12.0
100
+
3
101
  ## 5.11.0
4
102
 
5
103
  ### Minor Changes
package/README.md CHANGED
@@ -7,6 +7,19 @@ npx skaile-cli install skill:@admin/agent-browser#0.0.0
7
7
  npx skaile-cli --help
8
8
  ```
9
9
 
10
+ `skaile run` and `skaile repl` start a driver (a harness). Two of the drivers need an
11
+ optional SDK that `skaile-cli` does not install. Install the one for your driver
12
+ in the project before the first `run` or `repl`:
13
+
14
+ | Driver | Install |
15
+ |---|---|
16
+ | `claude-sdk` (default) | `npm i @anthropic-ai/claude-agent-sdk` (with Bun: `bun add @anthropic-ai/claude-agent-sdk`) |
17
+ | `codex` | `npm i @openai/codex-sdk` (with Bun: `bun add @openai/codex-sdk`) |
18
+ | `omp` | none; needs the `omp` binary on your `PATH` and a configured model |
19
+
20
+ Without the SDK, `skaile run` exits 1 with `Claude Agent SDK not installed` (or
21
+ `Codex SDK not installed`).
22
+
10
23
  It depends on `@skaile/workspaces` (which ships the actual CLI) and forwards
11
24
  all arguments to its `skaile` binary. Versions are kept in lockstep with
12
25
  `@skaile/workspaces` via Changesets `fixed` groups.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skaile-cli",
3
- "version": "5.11.0",
3
+ "version": "5.12.0",
4
4
  "description": "Run the Skaile CLI via `npx skaile-cli` — thin wrapper around @skaile/workspaces",
5
5
  "type": "module",
6
6
  "bin": {
@@ -25,7 +25,7 @@
25
25
  "asset-manager"
26
26
  ],
27
27
  "dependencies": {
28
- "@skaile/workspaces": "5.11.0"
28
+ "@skaile/workspaces": "5.12.0"
29
29
  },
30
30
  "publishConfig": {
31
31
  "access": "public"