@ours.network/fleet 1.2.0-nightly.20 → 1.2.0-nightly.22
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/dist/build-info.json +4 -4
- package/dist/init-wizard.js +1 -0
- package/dist/isolation/policy.js +2 -0
- package/dist/isolation/types.d.ts +5 -0
- package/dist/runner.js +8 -1
- package/dist/session/acp.js +7 -0
- package/dist/subscriptions/cli.d.ts +78 -0
- package/dist/subscriptions/cli.js +186 -0
- package/dist/subscriptions/launch.d.ts +37 -0
- package/dist/subscriptions/launch.js +93 -0
- package/dist/subscriptions/login.d.ts +75 -0
- package/dist/subscriptions/login.js +182 -0
- package/dist/subscriptions/observed.d.ts +7 -0
- package/dist/subscriptions/observed.js +44 -0
- package/dist/subscriptions/probe.d.ts +10 -0
- package/dist/subscriptions/probe.js +73 -0
- package/dist/subscriptions/service.d.ts +102 -0
- package/dist/subscriptions/service.js +364 -0
- package/dist/subscriptions/store.d.ts +71 -0
- package/dist/subscriptions/store.js +140 -0
- package/dist/web/runtime.js +7 -0
- package/dist/web/server.d.ts +2 -0
- package/dist/web/server.js +81 -0
- package/package.json +1 -1
- package/presets/README.md +12 -0
- package/presets/brain-catalog.json +2 -1
- package/presets/fleet/brains/claude-fable-5-1-high.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-1-low.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-1-max.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-1-medium.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-1-xhigh.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-high.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-low.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-max.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-medium.yaml +1 -1
- package/presets/fleet/brains/claude-fable-5-xhigh.yaml +1 -1
- package/presets/fleet/brains/claude-haiku-4-5-20251001-default.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-5-high.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-5-low.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-5-max.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-5-medium.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-5-xhigh.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-high.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-low.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-max.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-medium.yaml +1 -1
- package/presets/fleet/brains/claude-opus-5-xhigh.yaml +1 -1
- package/presets/fleet/brains/claude-sonnet-5-high.yaml +1 -1
- package/presets/fleet/brains/claude-sonnet-5-low.yaml +1 -1
- package/presets/fleet/brains/claude-sonnet-5-max.yaml +1 -1
- package/presets/fleet/brains/claude-sonnet-5-medium.yaml +1 -1
- package/presets/fleet/brains/claude-sonnet-5-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-3-codex-spark-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-3-codex-spark-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-3-codex-spark-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-3-codex-spark-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-4-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-4-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-4-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-4-mini-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-4-mini-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-4-mini-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-4-mini-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-4-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-5-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-5-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-5-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-5-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-luna-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-luna-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-luna-max.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-luna-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-luna-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-sol-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-sol-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-sol-max.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-sol-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-sol-ultra.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-sol-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-terra-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-terra-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-terra-max.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-terra-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-terra-ultra.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-5-6-terra-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-1-sol-high.yaml +5 -0
- package/presets/fleet/brains/codex-gpt-6-1-sol-low.yaml +5 -0
- package/presets/fleet/brains/codex-gpt-6-1-sol-max.yaml +5 -0
- package/presets/fleet/brains/codex-gpt-6-1-sol-medium.yaml +5 -0
- package/presets/fleet/brains/codex-gpt-6-1-sol-ultra.yaml +5 -0
- package/presets/fleet/brains/codex-gpt-6-1-sol-xhigh.yaml +5 -0
- package/presets/fleet/brains/codex-gpt-6-astra-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-astra-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-astra-max.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-astra-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-astra-ultra.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-astra-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-luna-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-luna-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-luna-max.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-luna-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-luna-xhigh.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-sol-high.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-sol-low.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-sol-max.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-sol-medium.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-sol-ultra.yaml +1 -1
- package/presets/fleet/brains/codex-gpt-6-sol-xhigh.yaml +1 -1
- package/presets/manifest.json +2 -2
package/dist/web/server.js
CHANGED
|
@@ -17,6 +17,7 @@ import { FleetEventBus } from './events.js';
|
|
|
17
17
|
import { ROLE_NAME_RE } from '../config.js';
|
|
18
18
|
import { TaskListError } from '../rooms-tasks/task-lists.js';
|
|
19
19
|
import { TaskStateError } from '../rooms-tasks/task-state.js';
|
|
20
|
+
import { isProvider } from '../subscriptions/store.js';
|
|
20
21
|
const statusFor = (code) => ({
|
|
21
22
|
role_not_found: 404, resource_not_found: 404, unauthorized: 401, forbidden: 403, conflict: 409,
|
|
22
23
|
idempotency_conflict: 409, stale_state: 409, rate_limited: 429,
|
|
@@ -433,6 +434,86 @@ export async function buildWebServer(services, boundary, options = {}) {
|
|
|
433
434
|
});
|
|
434
435
|
return result;
|
|
435
436
|
});
|
|
437
|
+
// Claude Code / Codex subscription profiles. Responses carry account metadata
|
|
438
|
+
// only; token values never leave the CLI-owned credential files.
|
|
439
|
+
const subscriptions = () => {
|
|
440
|
+
if (!services.subscriptions)
|
|
441
|
+
throw new FleetError('capability_unavailable', 'subscription management is unavailable');
|
|
442
|
+
return services.subscriptions;
|
|
443
|
+
};
|
|
444
|
+
const provider = (raw) => {
|
|
445
|
+
if (!isProvider(raw))
|
|
446
|
+
throw new FleetError('invalid_request', 'unknown subscription provider');
|
|
447
|
+
return raw;
|
|
448
|
+
};
|
|
449
|
+
const subscriptionsChanged = () => events.publish('subscription.changed', {});
|
|
450
|
+
app.get('/api/v1/subscriptions', async (request) => {
|
|
451
|
+
auth.authenticate(request);
|
|
452
|
+
return { providers: await subscriptions().list() };
|
|
453
|
+
});
|
|
454
|
+
app.post('/api/v1/subscriptions/:provider/logins', async (request, reply) => {
|
|
455
|
+
const session = auth.authenticate(request, true);
|
|
456
|
+
const login = await subscriptions().startLogin(provider(request.params.provider), session.id);
|
|
457
|
+
await audit.record({ requestId: request.id, browser: session.id, action: `subscription.login.${request.params.provider}`, result: login.state });
|
|
458
|
+
reply.code(201);
|
|
459
|
+
return login;
|
|
460
|
+
});
|
|
461
|
+
app.get('/api/v1/subscriptions/:provider/logins/:loginId', async (request) => {
|
|
462
|
+
const session = auth.authenticate(request);
|
|
463
|
+
return subscriptions().login(request.params.loginId, session.id).view();
|
|
464
|
+
});
|
|
465
|
+
app.post('/api/v1/subscriptions/:provider/logins/:loginId/code', async (request) => {
|
|
466
|
+
const session = auth.authenticate(request, true);
|
|
467
|
+
const code = request.body?.code;
|
|
468
|
+
if (typeof code !== 'string')
|
|
469
|
+
throw new FleetError('invalid_request', 'code is required');
|
|
470
|
+
const login = subscriptions().login(request.params.loginId, session.id);
|
|
471
|
+
login.submitCode(code.trim());
|
|
472
|
+
await audit.record({ requestId: request.id, browser: session.id, action: `subscription.login.code.${request.params.provider}`, result: 'submitted' });
|
|
473
|
+
return login.view();
|
|
474
|
+
});
|
|
475
|
+
app.delete('/api/v1/subscriptions/:provider/logins/:loginId', async (request) => {
|
|
476
|
+
const session = auth.authenticate(request, true);
|
|
477
|
+
const login = subscriptions().login(request.params.loginId, session.id);
|
|
478
|
+
login.cancel();
|
|
479
|
+
return login.view();
|
|
480
|
+
});
|
|
481
|
+
app.post('/api/v1/subscriptions/:provider/active', async (request) => {
|
|
482
|
+
const session = auth.authenticate(request, true);
|
|
483
|
+
const profileId = request.body?.profileId;
|
|
484
|
+
if (typeof profileId !== 'string')
|
|
485
|
+
throw new FleetError('invalid_request', 'profileId is required');
|
|
486
|
+
const view = await subscriptions().setActive(provider(request.params.provider), profileId);
|
|
487
|
+
subscriptionsChanged();
|
|
488
|
+
await audit.record({ requestId: request.id, browser: session.id, action: `subscription.activate.${request.params.provider}`, result: 'succeeded' });
|
|
489
|
+
return view;
|
|
490
|
+
});
|
|
491
|
+
app.post('/api/v1/subscriptions/:provider/profiles/:profileId/check', async (request) => {
|
|
492
|
+
auth.authenticate(request, true);
|
|
493
|
+
return subscriptions().check(provider(request.params.provider), request.params.profileId);
|
|
494
|
+
});
|
|
495
|
+
app.post('/api/v1/subscriptions/claude/profiles/:profileId/probe', async (request) => {
|
|
496
|
+
const session = auth.authenticate(request, true);
|
|
497
|
+
const usage = await subscriptions().probeClaudeUsage(request.params.profileId);
|
|
498
|
+
await audit.record({ requestId: request.id, browser: session.id, action: 'subscription.usage.probe.claude', result: usage.source });
|
|
499
|
+
return { usage };
|
|
500
|
+
});
|
|
501
|
+
app.patch('/api/v1/subscriptions/:provider/profiles/:profileId', async (request) => {
|
|
502
|
+
auth.authenticate(request, true);
|
|
503
|
+
const label = request.body?.label;
|
|
504
|
+
if (typeof label !== 'string')
|
|
505
|
+
throw new FleetError('invalid_request', 'label is required');
|
|
506
|
+
await subscriptions().rename(provider(request.params.provider), request.params.profileId, label);
|
|
507
|
+
subscriptionsChanged();
|
|
508
|
+
return { ok: true };
|
|
509
|
+
});
|
|
510
|
+
app.delete('/api/v1/subscriptions/:provider/profiles/:profileId', async (request) => {
|
|
511
|
+
const session = auth.authenticate(request, true);
|
|
512
|
+
await subscriptions().remove(provider(request.params.provider), request.params.profileId);
|
|
513
|
+
subscriptionsChanged();
|
|
514
|
+
await audit.record({ requestId: request.id, browser: session.id, action: `subscription.remove.${request.params.provider}`, result: 'succeeded' });
|
|
515
|
+
return { ok: true };
|
|
516
|
+
});
|
|
436
517
|
app.get('/api/v1/topology', async (request) => {
|
|
437
518
|
auth.authenticate(request);
|
|
438
519
|
if (!services.topology)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ours.network/fleet",
|
|
3
|
-
"version": "1.2.0-nightly.
|
|
3
|
+
"version": "1.2.0-nightly.22",
|
|
4
4
|
"description": "Harness-agnostic fleet of persistent, identity-bound AI agents. Declarative fleet.yaml, managed native/ACP sessions, supervision, and ours.network messaging.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "FSL-1.1-Apache-2.0",
|
package/presets/README.md
CHANGED
|
@@ -6,6 +6,18 @@ command with `--check` to verify generated files. An empty `efforts` array gener
|
|
|
6
6
|
one `-default` preset with no `effort` field. Bootstrap adds missing presets and
|
|
7
7
|
preserves existing user files. Existing model presets remain available.
|
|
8
8
|
|
|
9
|
+
## GPT-6.1 Sol (added 2026-09-29)
|
|
10
|
+
|
|
11
|
+
The Codex presets `codex-gpt-6-1-sol-{low,medium,high,xhigh,max,ultra}`
|
|
12
|
+
use the exact model ID `gpt-6.1-sol` with ACP sessions. The init wizard offers
|
|
13
|
+
GPT-6.1 Sol for development, review, and coordination.
|
|
14
|
+
|
|
15
|
+
[Official OpenAI documentation](https://developers.openai.com/api/docs/models/gpt-6.1-sol)
|
|
16
|
+
supports low, medium, high, xhigh, and max API reasoning efforts. The local
|
|
17
|
+
Codex `models_cache.json` inspected on 2026-09-29 additionally advertises
|
|
18
|
+
`ultra`, a Codex harness mode. These presets reflect that six-effort Codex
|
|
19
|
+
catalog; no inference or ACP launch was performed for this addition.
|
|
20
|
+
|
|
9
21
|
## Current model additions (verified 2026-09-24)
|
|
10
22
|
|
|
11
23
|
| Harness | Exact model ID | Preset efforts |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": 1,
|
|
3
|
-
"catalog_revision":
|
|
3
|
+
"catalog_revision": 4,
|
|
4
4
|
"models": [
|
|
5
5
|
{ "harness": "codex", "session": "acp", "model": "gpt-6-astra", "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"] },
|
|
6
6
|
{ "harness": "codex", "session": "acp", "model": "gpt-5.6-sol", "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"] },
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
{ "harness": "claude-code", "session": "acp", "model": "claude-fable-5", "efforts": ["low", "medium", "high", "xhigh", "max"] },
|
|
14
14
|
{ "harness": "claude-code", "session": "acp", "model": "claude-opus-5", "efforts": ["low", "medium", "high", "xhigh", "max"] },
|
|
15
15
|
{ "harness": "claude-code", "session": "acp", "model": "claude-sonnet-5", "efforts": ["low", "medium", "high", "xhigh", "max"] },
|
|
16
|
+
{ "harness": "codex", "session": "acp", "model": "gpt-6.1-sol", "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"] },
|
|
16
17
|
{ "harness": "codex", "session": "acp", "model": "gpt-6-sol", "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"] },
|
|
17
18
|
{ "harness": "codex", "session": "acp", "model": "gpt-6-luna", "efforts": ["low", "medium", "high", "xhigh", "max"] },
|
|
18
19
|
{ "harness": "claude-code", "session": "acp", "model": "claude-fable-5-1", "efforts": ["low", "medium", "high", "xhigh", "max"] },
|