@oar-sh/oar 0.9.14 → 0.9.15
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 +94 -0
- package/README.md +9 -9
- package/bin/oar.js +525 -12
- package/package.json +3 -1
- package/server/public/app/settings-modal.js +17 -3
- package/server/routes/sessions-routes.mjs +45 -14
- package/server/services/oar-cli-helpers.mjs +12 -4
- package/server/services/windows-autostart-service.mjs +88 -16
- package/server/services/windows-boot-autostart-service.mjs +775 -126
- package/.github/extensions/web-relay/README.md +0 -190
- package/server/README.md +0 -2334
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,100 @@
|
|
|
3
3
|
All notable changes to OAR are documented here. The format follows
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow semver.
|
|
5
5
|
|
|
6
|
+
## [0.9.15] — 2026-10-22
|
|
7
|
+
|
|
8
|
+
Highlights: `oar setup` asks how the relay starts on Windows, at sign-in or
|
|
9
|
+
at boot before anyone signs in, and `oar autostart` switches between them
|
|
10
|
+
later. `oar uninstall` takes OAR off the machine and keeps your data unless
|
|
11
|
+
you ask for `--purge`. A declined administrator prompt changes nothing, boot
|
|
12
|
+
tasks work in profile folders with spaces or non-ASCII names, and a
|
|
13
|
+
hand-made task, or one only an administrator can read, is never deleted
|
|
14
|
+
without a copy. The package is smaller.
|
|
15
|
+
|
|
16
|
+
### Upgrade notes
|
|
17
|
+
|
|
18
|
+
- **From 0.9.14 with a hand-made autostart task:** switching to boot mode
|
|
19
|
+
in 0.9.14 could delete an existing task of the same name (`oar-relay` or
|
|
20
|
+
the pre-rebrand name) without a copy. 0.9.15 keeps such a task and asks
|
|
21
|
+
for `--replace`, which saves a copy first.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **`oar setup` asks how the relay starts** on Windows: at sign-in, at boot
|
|
26
|
+
(before anyone signs in; one administrator prompt) or not at all, with the
|
|
27
|
+
current mode as the default. `--autostart signin|boot|off` answers it
|
|
28
|
+
without a question.
|
|
29
|
+
- **`oar autostart signin|boot|off|status`.** Switching to or from boot mode
|
|
30
|
+
asks for an administrator once, only for the schtasks call; sign-in mode
|
|
31
|
+
needs none. A declined prompt changes nothing. `status` lists each entry,
|
|
32
|
+
whether OAR generated it, and which other OAR install a stale one starts.
|
|
33
|
+
`--replace` replaces hand-made entries with generated ones, keeping a copy
|
|
34
|
+
of each (`<name>.bak`: a launcher's beside it, a task's exported XML and a
|
|
35
|
+
Startup entry's in the OAR folder); nothing else ever does. On Linux it is
|
|
36
|
+
the systemd user service (`oar service`); elsewhere it says it is not
|
|
37
|
+
supported.
|
|
38
|
+
- **`oar uninstall [--purge]`** stops the relay, takes out the autostart
|
|
39
|
+
entries OAR generated and the Copilot extension wrapper OAR wrote for this
|
|
40
|
+
install (a changed one, or one of another install, stays and is named),
|
|
41
|
+
and has npm remove the package once `oar` has ended. **The data stays** (config,
|
|
42
|
+
database, uploads, logs in the state root), and the command says where.
|
|
43
|
+
`--purge` deletes the state root after you type `delete`; a data folder
|
|
44
|
+
outside it, one in a git checkout, and `rescued-package-data` are each
|
|
45
|
+
deleted only after a question of their own; a drive root, the home folder
|
|
46
|
+
or a folder above it, a system folder and a folder without OAR's config or
|
|
47
|
+
database in it are refused, whatever is typed. A relay that holds its lock
|
|
48
|
+
without answering (bringing over a database) stops the command before it
|
|
49
|
+
deletes anything. Programs that still run from the package (session
|
|
50
|
+
workers) are named: npm leaves the files they hold in a hidden `.oar-*`
|
|
51
|
+
folder, which the log names. A step
|
|
52
|
+
that fails stops the command, which says what is done and what is left.
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- The two developer READMEs (`server/README.md` with the HTTP API, and the
|
|
57
|
+
web-relay extension's) are no longer in the npm package; they are on
|
|
58
|
+
[GitHub](https://github.com/oar-sh/oar).
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- **A hand-made autostart entry is never deleted or written over.** Leaving
|
|
63
|
+
boot mode deleted a boot task or launcher edited by hand, and *Off* also
|
|
64
|
+
a task OAR did not make; switching to sign-in replaced an edited Startup
|
|
65
|
+
entry. Only entries exactly as an OAR version generated them are changed
|
|
66
|
+
now, in the web UI as in `oar autostart`: a hand-made entry that would stay
|
|
67
|
+
beside the new mode, or be replaced by it, stops the switch with the same
|
|
68
|
+
message. Picking *At system startup* no longer replaces a hand-edited
|
|
69
|
+
launcher or a task someone else made, the pre-rebrand one included. A boot
|
|
70
|
+
task is OAR's own only while it is exactly the one OAR registers: the
|
|
71
|
+
account, the run level, one action, one boot trigger and its settings.
|
|
72
|
+
- **Boot mode switches on and off with a space, an apostrophe or non-ASCII
|
|
73
|
+
characters in the profile path.** The elevated step was a script file
|
|
74
|
+
passed unquoted, and read in the wrong encoding; it now travels as an
|
|
75
|
+
encoded command with every path quoted. A failed switch is no longer
|
|
76
|
+
reported as a declined prompt: it puts back the tasks it deleted from their
|
|
77
|
+
copies and keeps the copies, and a declined one leaves no file behind.
|
|
78
|
+
Windows PowerShell can report a declined prompt with an error that does not
|
|
79
|
+
stop it, or with no process at all; that read as confirmed, so leaving boot
|
|
80
|
+
mode deleted the launcher but kept the task, and switching it on removed
|
|
81
|
+
the sign-in entry without registering the task. Both now count as declined.
|
|
82
|
+
Leaving boot mode in the web UI switches the sign-in entry only after the
|
|
83
|
+
prompt was confirmed. Leaving boot mode removes the task XML and the record of
|
|
84
|
+
the sweep too, and the web UI names a Startup entry OAR did not make.
|
|
85
|
+
- **A boot task with non-ASCII characters in its paths reads right.**
|
|
86
|
+
schtasks writes its XML in the console's code page, so a profile path like
|
|
87
|
+
`C:\Users\Jürgen` came back garbled and OAR took its own task for a
|
|
88
|
+
hand-made one: switching boot on reported a failure and deleted the new
|
|
89
|
+
launcher, and *Off* refused to remove the task. Such a task is now read
|
|
90
|
+
again through PowerShell in UTF-8. A task that still cannot be read is
|
|
91
|
+
never taken as missing, removed, put back or someone else's, and never
|
|
92
|
+
deleted without a copy: nothing is changed while it cannot be read, and
|
|
93
|
+
after a confirmed prompt OAR says it could not check, and undoes nothing.
|
|
94
|
+
- **A boot task only an administrator can read is never deleted.** One that
|
|
95
|
+
stores another account's password answers "Access is denied" to OAR; that
|
|
96
|
+
read as no task, so `oar autostart boot` deleted it without a copy. Any
|
|
97
|
+
failed read of a task that is there now counts as unreadable: status says
|
|
98
|
+
so, and OAR changes nothing, `--replace` included.
|
|
99
|
+
|
|
6
100
|
## [0.9.14] — 2026-10-21
|
|
7
101
|
|
|
8
102
|
Highlights: a relay started by Windows autostart, or by a plain
|
package/README.md
CHANGED
|
@@ -45,29 +45,29 @@ flowchart LR
|
|
|
45
45
|
<table>
|
|
46
46
|
<tr>
|
|
47
47
|
<td width="42%" rowspan="4" valign="top">
|
|
48
|
-
<a href="https://oar.sh/assets/shots/cfmail-mobile.png?v=0.9.
|
|
48
|
+
<a href="https://oar.sh/assets/shots/cfmail-mobile.png?v=0.9.15"><picture><source media="(prefers-color-scheme: light)" srcset="https://oar.sh/assets/shots/cfmail-mobile.light.png?v=0.9.15"><img src="https://oar.sh/assets/shots/cfmail-mobile.png?v=0.9.15" alt="OAR on a phone: a finished agent turn in a conversation, with the composer below"></picture></a>
|
|
49
49
|
<br><sub>On a phone: the same conversations, installable as an app.</sub>
|
|
50
50
|
</td>
|
|
51
51
|
<td width="58%" valign="top">
|
|
52
|
-
<a href="https://oar.sh/assets/shots/cfmail-agents.png?v=0.9.
|
|
52
|
+
<a href="https://oar.sh/assets/shots/cfmail-agents.png?v=0.9.15"><picture><source media="(prefers-color-scheme: light)" srcset="https://oar.sh/assets/shots/cfmail-agents.light.png?v=0.9.15"><img src="https://oar.sh/assets/shots/cfmail-agents.png?v=0.9.15" alt="Background subagents running in parallel in the task panel, each with live token counts, elapsed time, and its own Stop button"></picture></a>
|
|
53
53
|
<br><sub>Agents working in parallel, each with live token counts and its own Stop.</sub>
|
|
54
54
|
</td>
|
|
55
55
|
</tr>
|
|
56
56
|
<tr>
|
|
57
57
|
<td valign="top">
|
|
58
|
-
<a href="https://oar.sh/assets/shots/cfmail-question.png?v=0.9.
|
|
58
|
+
<a href="https://oar.sh/assets/shots/cfmail-question.png?v=0.9.15"><picture><source media="(prefers-color-scheme: light)" srcset="https://oar.sh/assets/shots/cfmail-question.light.png?v=0.9.15"><img src="https://oar.sh/assets/shots/cfmail-question.png?v=0.9.15" alt="A question card in the middle of a turn: the agent offers several choices and a free-text reply"></picture></a>
|
|
59
59
|
<br><sub>When the agent needs a decision, it asks, and waits for your answer.</sub>
|
|
60
60
|
</td>
|
|
61
61
|
</tr>
|
|
62
62
|
<tr>
|
|
63
63
|
<td valign="top">
|
|
64
|
-
<a href="https://oar.sh/assets/shots/pingcf-thoughts.png?v=0.9.
|
|
64
|
+
<a href="https://oar.sh/assets/shots/pingcf-thoughts.png?v=0.9.15"><picture><source media="(prefers-color-scheme: light)" srcset="https://oar.sh/assets/shots/pingcf-thoughts.light.png?v=0.9.15"><img src="https://oar.sh/assets/shots/pingcf-thoughts.png?v=0.9.15" alt="An expanded Thoughts block showing the agent's reasoning above its reply"></picture></a>
|
|
65
65
|
<br><sub>Read the reasoning, not just the answer.</sub>
|
|
66
66
|
</td>
|
|
67
67
|
</tr>
|
|
68
68
|
<tr>
|
|
69
69
|
<td valign="top">
|
|
70
|
-
<a href="https://oar.sh/assets/shots/pagewright-watching.png?v=0.9.
|
|
70
|
+
<a href="https://oar.sh/assets/shots/pagewright-watching.png?v=0.9.15"><picture><source media="(prefers-color-scheme: light)" srcset="https://oar.sh/assets/shots/pagewright-watching.light.png?v=0.9.15"><img src="https://oar.sh/assets/shots/pagewright-watching.png?v=0.9.15" alt="A session watching two other sessions: a finished reply arrives as a compact relay-event row, the watching 2 sessions list is open with Unsubscribe, and a request to also watch a session on a paired relay waits on an Allow / Deny card"></picture></a>
|
|
71
71
|
<br><sub>Agents that watch agents: woken by events, approving nothing.</sub>
|
|
72
72
|
</td>
|
|
73
73
|
</tr>
|
|
@@ -116,11 +116,11 @@ API keys are entered in **⚙️ Settings** and stay on the relay host. The Clau
|
|
|
116
116
|
<table>
|
|
117
117
|
<tr>
|
|
118
118
|
<td width="62%" valign="top">
|
|
119
|
-
<a href="https://oar.sh/assets/shots/cfmail-steering.png?v=0.9.
|
|
119
|
+
<a href="https://oar.sh/assets/shots/cfmail-steering.png?v=0.9.15"><picture><source media="(prefers-color-scheme: light)" srcset="https://oar.sh/assets/shots/cfmail-steering.light.png?v=0.9.15"><img src="https://oar.sh/assets/shots/cfmail-steering.png?v=0.9.15" alt="A running Claude turn with a message steered into it mid-turn, the reply streaming with its tool calls, and the Steer button in the composer"></picture></a>
|
|
120
120
|
<br><sub>Send a message while the agent works, and it steers the running turn.</sub>
|
|
121
121
|
</td>
|
|
122
122
|
<td width="38%" valign="top">
|
|
123
|
-
<a href="https://oar.sh/assets/shots/usage-copilot-compact.png?v=0.9.
|
|
123
|
+
<a href="https://oar.sh/assets/shots/usage-copilot-compact.png?v=0.9.15"><picture><source media="(prefers-color-scheme: light)" srcset="https://oar.sh/assets/shots/usage-copilot-compact.light.png?v=0.9.15"><img src="https://oar.sh/assets/shots/usage-copilot-compact.png?v=0.9.15" alt="The GitHub Copilot card in Check Usage: premium requests and plan quota with reset dates, and the cost of the last turn"></picture></a>
|
|
124
124
|
<br><sub>What each plan has left, in one place.</sub>
|
|
125
125
|
</td>
|
|
126
126
|
</tr>
|
|
@@ -137,7 +137,7 @@ API keys are entered in **⚙️ Settings** and stay on the relay host. The Clau
|
|
|
137
137
|
- **Share** a conversation as a read-only link, hide single messages and the host's paths from it, and see when it was opened ([Sharing](docs/web-ui.md#sharing)).
|
|
138
138
|
- **On your phone**: install OAR as an app and get push notifications ([Notifications and the app](docs/web-ui.md#notifications-and-the-app)).
|
|
139
139
|
|
|
140
|
-
The full tour is in [Using the web UI](docs/web-ui.md); every setting and config key is in [Settings and configuration](docs/configuration.md). What changed in each release is in the [changelog](CHANGELOG.md), with [0.9.
|
|
140
|
+
The full tour is in [Using the web UI](docs/web-ui.md); every setting and config key is in [Settings and configuration](docs/configuration.md). What changed in each release is in the [changelog](CHANGELOG.md), with [0.9.15](CHANGELOG.md#0915--2026-10-22) as the latest.
|
|
141
141
|
|
|
142
142
|
## Remote access
|
|
143
143
|
|
|
@@ -188,7 +188,7 @@ flowchart LR
|
|
|
188
188
|
|
|
189
189
|
You stay in charge: per paired relay you decide whether agents may only read, also prompt, or do everything, and in the `ask` and `plan` modes every write asks you first. A subscription only notifies; it approves nothing.
|
|
190
190
|
|
|
191
|
-
<p><a href="https://oar.sh/assets/shots/pagewright-cross-relay.png?v=0.9.
|
|
191
|
+
<p><a href="https://oar.sh/assets/shots/pagewright-cross-relay.png?v=0.9.15"><picture><source media="(prefers-color-scheme: light)" srcset="https://oar.sh/assets/shots/pagewright-cross-relay.light.png?v=0.9.15"><img src="https://oar.sh/assets/shots/pagewright-cross-relay.png?v=0.9.15" alt="A session watching two sessions on a paired relay: a reply arrives as a relay-event row, and after a short outage the events the other relay kept arrive as one replayed row" width="720"></picture></a></p>
|
|
192
192
|
|
|
193
193
|
How pairing, permissions and limits work is in [Agents working together](docs/agents-together.md).
|
|
194
194
|
|