skaile-cli 6.8.0 → 6.9.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 (2) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,63 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1135](https://github.com/skaile-ai/workspaces/pull/1135) [`2bac4bb`](https://github.com/skaile-ai/workspaces/commit/2bac4bbb0b754a254a023a3d6747cee466c6ab00) Thanks [@mortegro](https://github.com/mortegro)! - A running `skaile serve` workspace can offer its own agent as a model. With `model_endpoint: { enabled: true, agent: true }` in `skaile.yaml`, or `skaile serve --model-endpoint-agent` (which implies the model endpoint and combines with `--model-endpoint <port>`), the loopback endpoint serves the pseudo-model `skaile-agent`. Any OpenAI chat-completions client (`curl`, Continue, aider, another skaile workspace) sends `POST /v1/chat/completions` with `"model": "skaile-agent"` and gets the live agent's turn back, streamed or not. The agent's text is `content`; each tool call, tool result and non-fatal error is one `reasoning_content` line (`→ <name> <input>`, `← <name>`, `! <message>`). Only the last `user` message is sent, because the session keeps its own context. A question the agent asks ends the turn and comes back as content with numbered options. A client that disconnects aborts the turn like a `cancel` (on Node and Bun ≥1.4.3; under Bun 1.3 the turn runs to its end), a failed turn answers 502 `turn_failed`, and `GET /v1/models` lists `skaile-agent`. The key is off by default: with it on, the endpoint token lets a client drive an agent that edits files and runs tools. It takes text only, chat completions only, and a tool of the agent must not call `skaile-agent` (it would wait on its own turn).
8
+
9
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - A Claude alias in an agent instance's `model.preferred` is no longer passed to codex or omp as the model, for `run --instance`, `repl --instance` and a nested `agent.run`: it goes through the mapping the manifest's model uses.
10
+
11
+ The private omp home of a harness (`$TMPDIR/skaile-omp-agent/...`) is deleted once omp has exited after `kill()`, so a nested `agent.run` that failed leaves nothing behind; `dispose()` resolves after the delete.
12
+
13
+ `skaile update <ref>` takes an agent that only an `agents.<id>.ref` instance binds (as `outdated` and `update` alone already did) and does not copy it into `dependencies:`. `skaile show` lists an agent that renders only as instance files.
14
+
15
+ In a fresh clone behind a persona or ruleset bump, `check` and `doctor` name `skaile update`, not a `skaile rebuild` that would fail.
16
+
17
+ When omp exits during a turn before it showed any output, the harness sends the prompt to a fresh omp once, so the client sees no error. A second early exit is one `omp process crashed (exit code N)` error whose hint names the exit code and the session directory when omp wrote nothing to stderr.
18
+
19
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - Authoring fixes of the 6.7.0 critique. `library init --path` refuses a folder with a root-level agent, contract, prompt, flow, preset, ruleset or persona file (only `SKILL.md` can be a library root); a root-skill library holds one asset (`library create`, `asset import`, `validate`, `library index` and the publish plan refuse a second); a `RULESET.md` or `PERSONA.md` with an empty body fails like the other markdown kinds; `add preset:` runs the same manifest and file checks as the other kinds; `install` locks a preset that resolved to zero assets; the line for a renamed flow says to rename the file; reader and source clones get the owner's fix (`library pull`, `source sync`) instead of `library index`; adopting a clone whose manifest lists a missing folder says `does not exist` and exits 1 (a reader is registered with a warning); an adopted clone of an empty remote gets its scaffold committed; `publish --dry-run` reports a library without a commit the same with and without `--ref`; `library set backendConfig.url` warns about a non-GitHub url; `library commit` names the git identity fix; a mistyped subcommand of a command group prints `unknown command` with a suggestion; `validate versions --changed-only` names the changed files; `search --local` at 80 columns stacks the description under a long ref.
20
+
21
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - Consume and harness: `check` and `doctor` name `skaile update` (not `skaile install --locked`) for a locked asset or bound agent whose deployed copy is gone while its library is at another version, the same advice `install --locked` and `outdated` give. `harness set <harness> --clean` deletes an old agent file only when it still has the hash the lock recorded for it before the switch; a file you edited stays and is named under `Kept`. `add <agent> --global` prints every agent file it wrote for claude-code, codex and omp, next to the skill folders.
22
+
23
+ `run` and `add` append `.skaile/logs.db*` and `.skaile/history.yaml` (with the other run-state lines) to the `.gitignore` of a project that `skaile init` did not create, and create one in a git checkout that has none; `skaile init` writes each line once. A codex `401` on a ChatGPT login reads `codex harness: the codex login was rejected (401): <cause>` and points at `codex login`; a stored API key keeps `the API key was rejected`. `check` prints the agent's `content changed since lock` line once: the skills it requires share the verdict and the fix, so they no longer repeat it, and a lock that holds an asset under two keys no longer doubles the line.
24
+
25
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - `skaile resume` runs the same harness preflight as `skaile run` for the harness and model the session recorded. A missing SDK or program, a provider the harness cannot use or a model it refuses now stops `resume` with one `✗` line per problem before the flow connector starts, and the session stays `paused` instead of becoming `failed`. `resume --dry-run` prints its plan, then the same lines, and exits 1 on a problem. The docs follow 6.7.0: tutorial 03 (the SDK-missing text of `run`, no session record), the flow node states of `concepts/flow-execution` (`not_started`, `available`, `awaiting_approval`, `awaiting_input`, `complete`, `failed`, `skipped`, `blocked`), `flow list` and library flows, `--force` of `remove`, `plugin remove`, `store` (`.mcp.json` paths, `Requires`), the `configure` samples of the types README, `runtime.md` and the types CLAUDE.md (retired in protocol 3; the README samples are type-checked by a test), and the example refs of the factory authoring skills (`@acme` placeholder publisher).
26
+
27
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - `serve --harness omp` no longer sends a fatal `omp process crashed (exit code N)` when omp exits between two turns, and the next prompt keeps the conversation. The omp harness now logs such an exit as a warning with omp's last stderr lines and the exit code, sends no `error` event, and starts omp again on the next prompt with `--session <id>` of the session it had (the id from the last `session_info`). A restart that omp cannot open on that session starts a new one instead of failing. An exit during a turn still fails that turn with the `process` error, and the next prompt resumes the session as well.
28
+
29
+ The model endpoint no longer sends a bare model id that no entry declares to the first registry entry: for an entry that declares no models the id must be listed by its upstream (`GET <base_url>/models`), else 404 `model_not_found`, and `/v1/models` lists what those upstreams answer.
30
+
31
+ `serve` refuses a project whose `skaile.yaml` has a connector that `validate` rejects (no `id`, duplicate `id`, unknown `access`): it prints the `connector_*` lines and exits 1. An `access` other than `read-write` now reads as `read-only`, so `access: rw` is no longer writable.
32
+
33
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - Sources and clones: `outdated` names a source whose origin it cannot reach also when the clone has commits of its own and when the project has no lock yet (exit 1, never `All assets are up to date.`). A source clone with no usable git checkout (an empty `.git`, a `.git` whose `HEAD` is garbage) is named by `check`, `doctor` and `outdated` as `its clone is not a git checkout - run skaile source sync to clone it again`, before any publisher check, and `source sync` clones it again.
34
+
35
+ A publisher that a source repo's `skaile.manifest.yaml` names (repo level or per asset) is checked against the grammar of `source add --publisher`; `source add` refuses a bad one with one line. Any `branch:` key of a `skaile.yaml` `sources:` entry is refused with `use pin: <branch>`.
36
+
37
+ A declared `dependencies:` ref of the wrong kind gets the `It is a skill: skill:@pub/name.` hint on `check`, `doctor`, `outdated` and `install`. The recovery command of a diverged source clone is `git -C <dir> checkout -B <branch> origin/<branch>`, which also works on a detached HEAD. The "remote already registered as a library" guard compares GitHub owner and repo without case. `library init --git <remote>` refuses a remote whose HEAD names a missing branch while other branches exist.
38
+
39
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - Store commands wait once for a dead store. `check`, `doctor`, `install`, `update` and `outdated` ask a store that does not answer once, with a 5 s limit, and every later ref of the command fails at once with the same cause, instead of waiting 10 s per locked store asset. `install --locked` never asks a store for a locked store asset (it asks only to restore a library asset whose library is not registered here).
40
+
41
+ `install` and `update` with `catalog.url: local` keep a deployed, locked store asset (`kept as locked (catalog.url is local: the store was not asked)`, exit 0) instead of `Missing:`. A store host that answers 404 for the catalog route ends with the `store unreachable` line, not `Missing:`.
42
+
43
+ A locked store asset (`origin: store`) is a pin: a registered source that holds the same ref no longer takes it on `update`, and the lock keeps `origin: store`, `store:` and the upstream url. `skaile remove <ref>` then `skaile add <ref>` switches it.
44
+
45
+ `diff <store ref>` of a clean locked store asset in a clone without `.skaile/cache/` prints `No differences.` (an edited file is named, with the advice `skaile install --locked`) instead of `Asset not found`.
46
+
47
+ In air-gapped mode (`catalog.cache_ttl: 0`) the advice for a cold cache is `skaile update --catalog-only`, and `store show` ends with `Not installable offline: set catalog.cache_ttl above 0 ...` instead of `Install: skaile add <ref>`.
48
+
49
+ ### Patch Changes
50
+
51
+ - Updated dependencies [[`2bac4bb`](https://github.com/skaile-ai/workspaces/commit/2bac4bbb0b754a254a023a3d6747cee466c6ab00), [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b), [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b), [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b), [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b), [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b), [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b), [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b)]:
52
+ - @skaile/workspaces@6.9.0
53
+
54
+ ## 6.8.1
55
+
56
+ ### Patch Changes
57
+
58
+ - Updated dependencies [[`8e24fb5`](https://github.com/skaile-ai/workspaces/commit/8e24fb5e6b69de942c8c8602ba061b9466101ae5)]:
59
+ - @skaile/workspaces@6.8.1
60
+
3
61
  ## 6.8.0
4
62
 
5
63
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skaile-cli",
3
- "version": "6.8.0",
3
+ "version": "6.9.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": "6.8.0"
28
+ "@skaile/workspaces": "6.9.0"
29
29
  },
30
30
  "publishConfig": {
31
31
  "access": "public"