@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 +3 -4
- package/package.json +1 -1
- package/ui/views/settings.js +4 -3
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
package/ui/views/settings.js
CHANGED
|
@@ -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' }, '
|
|
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
|
)));
|