@stratusagent/dashboard 0.9.1 → 0.10.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/README.md CHANGED
@@ -14,10 +14,9 @@ single-use sign-in link, and opens your browser at it.
14
14
  ## Why it is a separate package
15
15
 
16
16
  The control API has three consumers and only one of them is a web page. The
17
- macOS app (roadmap step 07) is deliberately *not* a chat app, and a headless
18
- VM deployment wants the API with no UI at all. Keeping the UI here means both
19
- of those install the API alone, and this package can grow without weighting
20
- them.
17
+ desktop app (roadmap step 07) ships its own UI, and a headless VM deployment
18
+ wants the API with no UI at all. Keeping the UI here means both of those
19
+ install the API alone, and this package can grow without weighting them.
21
20
 
22
21
  The API auto-loads it: if this package resolves, the dashboard is served. Pass
23
22
  `ui: false` to `createControlApi` to run the API bare on a machine that has it
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stratusagent/dashboard",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -2,7 +2,7 @@ import { el } from '../lib/dom.js';
2
2
  import { api } from '../lib/api.js';
3
3
  import { refreshCore, store } from '../app.js';
4
4
 
5
- const PROVIDERS = ['anthropic', 'openai'];
5
+ const PROVIDERS = ['anthropic', 'openai', 'codex'];
6
6
 
7
7
  /**
8
8
  * Bring a `<select>`'s options up to date without disturbing a choice.
@@ -83,7 +83,7 @@ export const renderSettings = (section) => {
83
83
  const provider = el('select', {}, ...PROVIDERS.map((name) => el('option', { value: name }, name)));
84
84
  const type = el('select', {},
85
85
  el('option', { value: 'api_key' }, 'API key'),
86
- el('option', { value: 'oauth_token' }, 'Claude subscription token'));
86
+ el('option', { value: 'oauth_token' }, 'Subscription sign-in'));
87
87
  const value = el('input', { type: 'password', placeholder: 'paste the key' });
88
88
  const baseUrl = el('input', { placeholder: 'optional — a proxy or local endpoint' });
89
89
 
@@ -149,6 +149,7 @@ export const renderSettings = (section) => {
149
149
  el('label', {}, 'Key'), value,
150
150
  el('label', {}, 'Endpoint'), baseUrl,
151
151
  el('p', { class: 'field-note' }, 'A key is bound to the endpoint you save it with, and is never sent anywhere else.'),
152
+ el('p', { class: 'field-note' }, 'A subscription sign-in is a Claude Code setup token for anthropic. For codex it only records that this machine uses `codex login` — type anything (say, "chatgpt") as the value; it is never sent anywhere.'),
152
153
  el('div', { class: 'actions' }, verifyButton, saveButton),
153
154
  ),
154
155
  refresh() {
@@ -156,7 +157,7 @@ export const renderSettings = (section) => {
156
157
  el('div', { class: 'grow' },
157
158
  el('div', { class: 'title' }, entry.provider),
158
159
  el('div', { class: 'sub' }, entry.stored
159
- ? `${entry.type === 'oauth_token' ? 'Claude subscription' : 'API key'}${entry.baseUrl ? ` · ${entry.baseUrl}` : ''}`
160
+ ? `${entry.type === 'oauth_token' ? (entry.provider === 'codex' ? 'ChatGPT sign-in (codex login)' : 'Claude subscription') : 'API key'}${entry.baseUrl ? ` · ${entry.baseUrl}` : ''}`
160
161
  : 'not signed in')),
161
162
  el('span', { class: `pill${entry.stored ? ' running' : ''}` }, entry.stored ? 'signed in' : 'none'),
162
163
  )));