airlok 0.8.1 → 0.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,41 @@
2
2
 
3
3
  All notable changes to airlok. The format follows Keep a Changelog; versions follow SemVer.
4
4
 
5
+ ## [0.9.0] - 2026-09-13
6
+
7
+ ### Added
8
+
9
+ - `/status`: version, provider, model and effort, session id and turn count, cwd and git branch, the configuration files in effect, the MCP servers with whether each is connected, and redaction counts by class. Names, counts and sources only; no value from the key or the redaction map can reach it.
10
+ - `/context`: where the context window is going, as a bar per part for the system prompt, context block, history, tool results and tool schemas, with how near compaction is. The parts are counted the way the request estimator counts them and the total is their sum, so the breakdown always adds up.
11
+ - `/doctor`, and `airlok doctor` as a subcommand that exits non-zero on failure so it works in CI. Seven checks: the config files, whether the key resolves, a minimal live request, every MCP server, git, the terminal, and write access to the session and trust directories.
12
+ - `/diff`: what airlok changed on disk this session, diffed from what was there before its first write, using the same renderer and paging as a write confirmation. `/diff <path>` narrows to one file. Sessions now record the files `write_file` and `edit_file` touched, with the original content kept under a one megabyte budget; past it a file is reported as changed rather than shown with a misleading diff.
13
+ - `/copy`: the last reply to the clipboard through pbcopy, wl-copy, xclip or xsel. `/copy <n>` takes the Nth from the end and `/copy code` the last fenced block. With no clipboard program it says which ones it tried.
14
+ - `/permissions`: view and change what airlok asks about for the session, including both bash lists, and `/permissions save` to write them into the project config after showing a diff. Removing a deny entry says what it did rather than quietly emptying the list.
15
+ - `/init`: propose an AIRLOK.md built from the repository, as a diff to approve. Build and test commands come from the marker files that are actually present, and an existing CLAUDE.md or AGENTS.md is carried over.
16
+ - `/btw <question>`: a side question answered with the project and conversation as context but no tools. Neither the question nor the answer joins the history; one note is kept, as an assistant message so it is not counted as a turn.
17
+ - `/goal <statement>`: what the session is working toward. It goes into the system prompt every turn with an instruction to say when it is met, shows in the footer, and survives `--resume`. `/goal` shows it and `/goal clear` removes it.
18
+ - Tab completes the arguments of the new commands, as it does for `/model` and `/provider`.
19
+
20
+ ### Fixed
21
+
22
+ - The renderer wraps to the terminal's current width rather than the width it had when the run started. It re-measures each turn and on SIGWINCH, so a window resized mid-session takes effect on the next block instead of leaving the terminal to wrap over-long lines mid-line.
23
+ - The status line is sized to the terminal the same way, instead of keeping the width it was built with.
24
+
25
+ ## [0.8.2] - 2026-09-12
26
+
27
+ ### Added
28
+
29
+ - `/effort` shows the reasoning effort in force for the model in use and where it came from: the per-model config, this session, or the provider's own default. `/effort <value>` sets it for the rest of the session, using the same picker and the same did-you-mean question as `/model`, offering what the provider accepts (`none`, `minimal`, `low`, `medium`, `high`). The value is recorded in the session, so `--resume` keeps it, and on resume the session's value wins over the config file for the model the session last used. Only the openai provider sends a reasoning effort, so on anthropic the command says so rather than offering a list.
30
+ - Tab completes `/effort` arguments, alongside `/model` and `/provider`.
31
+
32
+ ### Changed
33
+
34
+ - `/e` now resolves to `/effort` rather than `/exit`. Commands are matched by prefix in the order they are listed, and `/effort` is listed beside `/model`. `/exit`, `/quit` and Ctrl-D are unchanged.
35
+
36
+ ### Fixed
37
+
38
+ - Ctrl-C leaves the `/model` and `/provider` picker, the way Esc does. The picker's terminal mode kept signals on, so Ctrl-C raised SIGINT and the list stayed up until Esc. Signals come back the moment the picker closes, so Ctrl-C at the prompt still clears the line.
39
+
5
40
  ## [0.8.1] - 2026-09-12
6
41
 
7
42
  ### Added
package/README.md CHANGED
@@ -59,7 +59,9 @@ While a turn runs, a status line below the output shows a spinner, what airlok i
59
59
  | Ctrl-D | save and quit |
60
60
  | Ctrl-R | search this run's history; Up and Down step through it |
61
61
 
62
- The models airlok offers are the one in use, any named in `[models."<id>"]`, the ones used earlier in this run, and the ones saved sessions here used on this provider. Tab completes from that list after `/model `, and from the two provider names after `/provider `. Switching to an id from that list is taken as given; anything else is read back with the nearest known ids and a question, since a model id that only fails on the next turn is a poor way to learn it was a typo.
62
+ The models airlok offers are the one in use, any named in `[models."<id>"]`, the ones used earlier in this run, and the ones saved sessions here used on this provider. Tab completes from that list after `/model `, from the two provider names after `/provider `, and from the efforts the provider accepts after `/effort `. Switching to an id from that list is taken as given; anything else is read back with the nearest known ids and a question, since a model id that only fails on the next turn is a poor way to learn it was a typo.
63
+
64
+ Reasoning effort is per model. `[models."<id>"] reasoning_effort` is the default, `/effort` reports which of those you are on, and `/effort <value>` overrides it for the session and is saved with it, so `--resume` continues on the same effort rather than the config's. Only the openai provider sends it.
63
65
 
64
66
  A provider that refuses a request is reported as a sentence naming the likely cause: a model or deployment that does not exist, a key the provider rejected, rate limiting, or a request longer than the model's context. The raw body goes to the debug log, so `-v` still has it, and the session stays open either way.
65
67
 
@@ -75,7 +77,8 @@ A cancelled turn keeps the text streamed so far in the history, marked as interr
75
77
  | Command | What it does |
76
78
  |---|---|
77
79
  | `/help` | list the commands |
78
- | `/model [<id>]` | with no id, pick from the models airlok knows here: arrows, type to filter, Enter, Esc. With an id, switch to it; an id airlok has not seen is questioned rather than taken |
80
+ | `/model [<id>]` | with no id, pick from the models airlok knows here: arrows, type to filter, Enter to take one, Esc or Ctrl-C to leave it alone. With an id, switch to it; an id airlok has not seen is questioned rather than taken |
81
+ | `/effort [<value>]` | the reasoning effort in force for this model and where it came from; with a value, use it for the rest of the session. openai only |
79
82
  | `/mcp` | list the MCP servers and their tools; `/mcp <name>` enables a disabled one for this session |
80
83
  | `/plan` | turn plan mode on or off |
81
84
  | `/go` | carry out the plan from plan mode, back in normal mode |
@@ -84,6 +87,15 @@ A cancelled turn keeps the text streamed so far in the history, marked as interr
84
87
  | `/compact` | summarise older turns to free context |
85
88
  | `/config` | the effective configuration |
86
89
  | `/redactions` | what was redacted before leaving this machine (kind and length only) |
90
+ | `/status` | version, provider, model and effort, session and turn count, cwd and branch, config files in effect, MCP servers, redaction counts. Names and counts only, never a value |
91
+ | `/context` | where the context window is going, part by part, and how near compaction is |
92
+ | `/btw <question>` | a side question: same model, no tools, and neither it nor the answer joins the task's history |
93
+ | `/permissions [<name> <value>]` | what airlok asks about, and change one for the session; `/permissions save` writes them to the project config after showing a diff |
94
+ | `/init` | propose an AIRLOK.md for this repository, as a diff to approve |
95
+ | `/copy [<n>\|code]` | copy the last reply to the clipboard; a number takes the Nth from the end, `code` the last fenced block |
96
+ | `/diff [<path>]` | what airlok changed on disk this session, diffed from before its first write |
97
+ | `/doctor` | check the config, key, provider, MCP servers, git, terminal and storage; `airlok doctor` does the same and exits non-zero on failure |
98
+ | `/goal [<statement>\|clear]` | what the session is working toward, kept in the system prompt every turn and shown in the footer |
87
99
  | `/clear` | start a new session; the current one stays saved |
88
100
  | `/exit` | save and quit; `/quit` works too |
89
101
 
@@ -19,7 +19,7 @@
19
19
  "hasInstallScript": true,
20
20
  "license": "MIT OR Apache-2.0",
21
21
  "name": "airlok",
22
- "version": "0.8.1"
22
+ "version": "0.9.0"
23
23
  },
24
24
  "node_modules/detect-libc": {
25
25
  "engines": {
@@ -48,5 +48,5 @@
48
48
  }
49
49
  },
50
50
  "requires": true,
51
- "version": "0.8.1"
51
+ "version": "0.9.0"
52
52
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/airlok-dev/airlok/releases/download/v0.8.1"
3
+ "https://github.com/airlok-dev/airlok/releases/download/v0.9.0"
4
4
  ],
5
5
  "bin": {
6
6
  "airlok": "run-airlok.js"
@@ -60,7 +60,7 @@
60
60
  "zipExt": ".tar.xz"
61
61
  }
62
62
  },
63
- "version": "0.8.1",
63
+ "version": "0.9.0",
64
64
  "volta": {
65
65
  "node": "18.14.1",
66
66
  "npm": "9.5.0"