@ours.network/fleet 1.2.0-nightly.60 → 1.2.0-nightly.62
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 -3
- package/dist/briefing.js +21 -13
- package/dist/build-info.json +4 -4
- package/dist/harness/claude-code.js +2 -1
- package/dist/harness/codex.js +2 -1
- package/dist/preset-migration.js +9 -0
- package/dist/runner.js +6 -3
- package/dist/startup-prompt.d.ts +14 -3
- package/dist/startup-prompt.js +51 -16
- package/docs/acp-files.md +1 -1
- package/package.json +5 -5
- package/presets/fleet/agent_templates/LocalCoordinator.yaml +3 -1
- package/presets/manifest.json +1 -1
package/README.md
CHANGED
|
@@ -63,9 +63,9 @@ The state dir contract:
|
|
|
63
63
|
|
|
64
64
|
| File | Owner | Lifecycle |
|
|
65
65
|
|---|---|---|
|
|
66
|
-
| `briefing.md` | generated | rewritten on every `up`/`restart`; never hand-edit |
|
|
67
|
-
| `WORKLOG.md` | the agent | seeded empty, agent-appended; survives restarts |
|
|
68
|
-
| `ROUTINES.md` | operator / agent | **optional** recurring-work instructions;
|
|
66
|
+
| `briefing.md` | generated | rewritten on every `up`/`restart`; never hand-edit; the agent reads it once per model session, not per turn or wake |
|
|
67
|
+
| `WORKLOG.md` | the agent | seeded empty, agent-appended; survives restarts; read back once only when a new conversation starts after a restart and it records previous work |
|
|
68
|
+
| `ROUTINES.md` | operator / agent | **optional** recurring-work instructions; read once per session for concrete work, hot-editable **without a restart** — tell the agent it changed so it rereads; absence means "no routines" |
|
|
69
69
|
| `.identity`, `.cwd`, `.session-id`, `.booted`, `.exit-status`, `.config-path` | supervisor | dot-marker state — session resume and boot bookkeeping |
|
|
70
70
|
| `.monitor-state.json`, `.monitor-status` | supervisor monitor | atomic body-free cursor/pending state and health |
|
|
71
71
|
| `.owner-channel-state.json` | owner-channel bridge | bounded wire-ID dedupe only; never message/reply plaintext |
|
package/dist/briefing.js
CHANGED
|
@@ -37,12 +37,16 @@ function startupGuidance(v) {
|
|
|
37
37
|
'or file reads. End that readiness turn; the supervisor delivers configured work in a separate turn.',
|
|
38
38
|
'If readiness was already announced, do not repeat it. An idle agent waits for a concrete task or wake',
|
|
39
39
|
'without reading routines, worklog, inbox, history, or unrelated files. A charter or bio alone is not a task.',
|
|
40
|
-
'
|
|
40
|
+
'Read this briefing once per session: in the first task turn after readiness, or on your first concrete',
|
|
41
|
+
'task or wake when no task turn is delivered. It then stays in your context; later tasks, user turns,',
|
|
42
|
+
'mail wakes and ordinary continuation reuse it without another read. If a curated briefing has no',
|
|
41
43
|
'concrete assignment, stop after that read and await work rather than exploring other files.',
|
|
42
|
-
'For assigned work, read any existing routines once
|
|
43
|
-
'
|
|
44
|
-
'
|
|
45
|
-
'
|
|
44
|
+
'For assigned work, read any existing routines once per session. The worklog is continuity input only:',
|
|
45
|
+
'read it once when a new conversation starts after a restart and it records previous work. A restored',
|
|
46
|
+
'conversation already holds that context; consult the worklog there only as needed to recover your next',
|
|
47
|
+
'action. Never read a worklog for fresh initialization, including a fresh temporary agent, and never',
|
|
48
|
+
'reread it because you appended to it. Reread an instruction file only when you are told it changed,',
|
|
49
|
+
'the owner asks you to, or a specific detail is genuinely missing from your context.',
|
|
46
50
|
'Fleet owns identity binding, readiness, required room admission, and application of the configured Role',
|
|
47
51
|
'bio/persona before the model starts. Accept that launch context; no model-side profile setup is needed.',
|
|
48
52
|
'Avoid startup identity/profile checks, broad tool discovery, CLI help/config exploration, or searching',
|
|
@@ -54,8 +58,8 @@ function startupGuidance(v) {
|
|
|
54
58
|
`On a mail wake, use **${v.getMessagesTool}** once to read that arrival and its authenticated provenance.`,
|
|
55
59
|
'Read another batch only if unread messages remain, a new arrival is signalled, or a concrete task',
|
|
56
60
|
'requires a fresh inbox check. Use history only for needed context or pagination, not a startup ritual.',
|
|
57
|
-
'
|
|
58
|
-
'
|
|
61
|
+
'A later turn or wake needs no briefing, routines or worklog read: act on it with the context you',
|
|
62
|
+
'already hold. Supervisor wakes replace a separate model-owned monitor.',
|
|
59
63
|
'After readiness, acknowledge the actual task and next concrete action through its assigned reply route.',
|
|
60
64
|
'Room task acknowledgements go to the assigned room; console tasks use the console response. A readiness',
|
|
61
65
|
'response does not prove task completion. Do not claim unperformed work.',
|
|
@@ -136,11 +140,13 @@ function generateRoomMemberBriefing(role, v, opts, prefix) {
|
|
|
136
140
|
L.push('Append important commands / decisions / results to `' + opts.worklogPath + '` as you go —');
|
|
137
141
|
L.push('it survives restarts. Never store invite material or secrets there.');
|
|
138
142
|
L.push('', '## Routines');
|
|
139
|
-
L.push('For concrete work, if `' + opts.routinesPath + '` exists, read it once
|
|
140
|
-
L.push('Do not read routines in the readiness turn or merely because the agent is idle.');
|
|
143
|
+
L.push('For concrete work, if `' + opts.routinesPath + '` exists, read it once per session before acting.');
|
|
144
|
+
L.push('Do not read routines in the readiness turn or merely because the agent is idle. Reread it only');
|
|
145
|
+
L.push('when you are told it changed or a specific detail is genuinely missing from your context.');
|
|
141
146
|
L.push('', '## On restart');
|
|
142
147
|
L.push('Your supervisor verifies the same assigned identity and room before resuming. Announce readiness first.');
|
|
143
|
-
L.push('
|
|
148
|
+
L.push('In a new conversation with recorded previous work, read the worklog once and recover unfinished work.');
|
|
149
|
+
L.push('A restored conversation continues from its own context.');
|
|
144
150
|
L.push('', '## House rules');
|
|
145
151
|
L.push('- Never broad `rm -rf` on home/critical paths; quote globs; use explicit paths.');
|
|
146
152
|
L.push('- When you stop, be in a declared state (DONE / BLOCKED / resting ≤2h).');
|
|
@@ -292,13 +298,15 @@ export function generateBriefing(role, v, opts) {
|
|
|
292
298
|
'Continue writing only WORKLOG.md.');
|
|
293
299
|
}
|
|
294
300
|
L.push('', '## Routines');
|
|
295
|
-
L.push(`For concrete work, if \`${opts.routinesPath}\` exists, read it once
|
|
301
|
+
L.push(`For concrete work, if \`${opts.routinesPath}\` exists, read it once per session before acting`);
|
|
296
302
|
L.push('on that work and follow it for recurring or scheduled tasks. Do not read it in the readiness turn');
|
|
297
303
|
L.push('or merely because the agent is idle. It may');
|
|
298
|
-
L.push('change
|
|
304
|
+
L.push('change without a restart: reread it when you are told it changed or a specific detail is');
|
|
305
|
+
L.push('genuinely missing from your context, not at the start of every wake.');
|
|
299
306
|
L.push('', '## On restart (you run under a supervised launcher)');
|
|
300
307
|
L.push('The supervisor verifies your identity and room before resuming. Announce readiness first.');
|
|
301
|
-
L.push('
|
|
308
|
+
L.push('In a new conversation with recorded previous work, read your worklog once and recover unfinished work.');
|
|
309
|
+
L.push('A restored conversation continues from its own context.');
|
|
302
310
|
L.push(wakeNote);
|
|
303
311
|
L.push('Do not blindly re-run whatever may have crashed you.');
|
|
304
312
|
L.push('', '## House rules');
|
package/dist/build-info.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.2.0-nightly.
|
|
3
|
-
"buildId": "
|
|
4
|
-
"commit": "
|
|
2
|
+
"version": "1.2.0-nightly.62",
|
|
3
|
+
"buildId": "dbb6bd7e2ef8",
|
|
4
|
+
"commit": "9162af7adc2521d0e1d5cbd79757919dfff402e3",
|
|
5
5
|
"dirty": true,
|
|
6
|
-
"builtAt": "2026-10-
|
|
6
|
+
"builtAt": "2026-10-13T21:20:26.416Z",
|
|
7
7
|
"capabilities": [
|
|
8
8
|
"managed-cli.codex-reasoning-effort-v1",
|
|
9
9
|
"managed-cli.setup-v1",
|
|
@@ -392,7 +392,8 @@ export function makeClaudeCodeAdapter(exec = realExec, transport) {
|
|
|
392
392
|
'Your mail wakes arrive as `[fleet-monitor]` console lines from the supervisor — ' +
|
|
393
393
|
'do NOT arm an in-session Monitor. ' +
|
|
394
394
|
'Announce console readiness first without tools, then end that readiness turn. ' +
|
|
395
|
-
`For a separate continuation task, read ${worklog} once for continuity
|
|
395
|
+
`For a separate continuation task, read ${worklog} once for continuity if it records previous work; ` +
|
|
396
|
+
'do not read it again later in this session. ' +
|
|
396
397
|
'Do not re-run whatever crashed you.'
|
|
397
398
|
: `Session restarted. Re-bind your ours identity now (choose_identity name "${id}" force=true), ` +
|
|
398
399
|
`then ${armMonitor(id)}, then continue from ${worklog}. Do not re-run whatever crashed you.`,
|
package/dist/harness/codex.js
CHANGED
|
@@ -628,7 +628,8 @@ export function makeCodexAdapter(exec = realExec, transport, nativeTransport) {
|
|
|
628
628
|
'accept that readiness and continue without rebinding or profile reconciliation. ' +
|
|
629
629
|
'Mail wakes arrive as `[fleet-monitor]` lines; do NOT arm arm_monitor/foreground_monitor. ' +
|
|
630
630
|
'Announce console readiness first without tools, then end that readiness turn. ' +
|
|
631
|
-
`For a separate continuation task, read ${worklog} once for continuity
|
|
631
|
+
`For a separate continuation task, read ${worklog} once for continuity if it records previous work; ` +
|
|
632
|
+
'do not read it again later in this session. ' +
|
|
632
633
|
'Do not re-run whatever crashed you.';
|
|
633
634
|
const consented = configuredRole?.harness_options?.monitor === true;
|
|
634
635
|
return `Session restarted. Re-bind your ours identity now (choose_identity name "${id}" force=true), ` +
|
package/dist/preset-migration.js
CHANGED
|
@@ -75,6 +75,13 @@ const OWNER_CHANNEL_COORDINATOR_FINGERPRINTS = Object.freeze({
|
|
|
75
75
|
'f0d8b169ad0a18051b57e5280b93cf01e05faa5c12f4e12bdf89973edf2ef58a',
|
|
76
76
|
],
|
|
77
77
|
});
|
|
78
|
+
// The packaged revision-10 LocalCoordinator continuity loop reread ROUTINES.md and the WORKLOG
|
|
79
|
+
// checkpoint on every 15-minute pass. Untouched copies adopt the current template; edited ones stay.
|
|
80
|
+
const REREADING_CONTINUITY_LOOP_FINGERPRINTS = Object.freeze({
|
|
81
|
+
'agent_templates/LocalCoordinator.yaml': [
|
|
82
|
+
'53889cd3987e25ca42be64ddcfa1cf46a73ab769070db144f5b7d86085734178',
|
|
83
|
+
],
|
|
84
|
+
});
|
|
78
85
|
const CURRENT_ROLE_DEFAULTS = new Set([
|
|
79
86
|
'roles/Coordinator.yaml', 'roles/LocalCoordinator.yaml', 'roles/Developer.yaml', 'roles/Critic.yaml',
|
|
80
87
|
'roles/Engineer.yaml',
|
|
@@ -205,6 +212,7 @@ export function migratePackagedRoleDefaults(configuration, options = {}, hooks =
|
|
|
205
212
|
...Object.keys(V4_ROLE_DEFAULT_FINGERPRINTS),
|
|
206
213
|
...Object.keys(V5_ROLE_DEFAULT_FINGERPRINTS),
|
|
207
214
|
...Object.keys(OWNER_CHANNEL_COORDINATOR_FINGERPRINTS),
|
|
215
|
+
...Object.keys(REREADING_CONTINUITY_LOOP_FINGERPRINTS),
|
|
208
216
|
]);
|
|
209
217
|
for (const relative of known) {
|
|
210
218
|
const path = join(root, relative);
|
|
@@ -219,6 +227,7 @@ export function migratePackagedRoleDefaults(configuration, options = {}, hooks =
|
|
|
219
227
|
V5_ROLE_DEFAULT_FINGERPRINTS[relative],
|
|
220
228
|
V5_GENERATED_ROLE_DEFAULT_FINGERPRINTS[relative],
|
|
221
229
|
...(OWNER_CHANNEL_COORDINATOR_FINGERPRINTS[relative] ?? []),
|
|
230
|
+
...(REREADING_CONTINUITY_LOOP_FINGERPRINTS[relative] ?? []),
|
|
222
231
|
].some(expected => expected !== undefined && actual === expected);
|
|
223
232
|
if (recognized)
|
|
224
233
|
(CURRENT_ROLE_DEFAULTS.has(relative) ? replacements : removals).push(path);
|
package/dist/runner.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readProvenance } from './creation.js';
|
|
2
2
|
import { firstManagedSessionMayStart, managedRecoveryPath, readManagedRecovery, writeManagedRecovery } from './managed-recovery.js';
|
|
3
3
|
import { StartupTelemetry } from './startup-telemetry.js';
|
|
4
|
-
import { managedStartupPrompt, managedTaskPrompt } from './startup-prompt.js';
|
|
4
|
+
import { managedStartupPrompt, managedTaskPrompt, worklogRecordsPriorWork } from './startup-prompt.js';
|
|
5
5
|
import { createLayoutControl } from './rooms-tasks/layout-control.js';
|
|
6
6
|
import { TemporaryChatIdle } from './temp-idle.js';
|
|
7
7
|
import { taskSupervisorMayRun, taskMemberRetirementProof } from './task-supervision.js';
|
|
@@ -865,7 +865,10 @@ export async function runOnce(name, opts = {}, partialDeps = {}) {
|
|
|
865
865
|
};
|
|
866
866
|
},
|
|
867
867
|
};
|
|
868
|
-
|
|
868
|
+
// The worklog is continuity input only when it records work. It outlives `.booted`,
|
|
869
|
+
// which a rotation to a fresh conversation clears, so the log itself is the evidence.
|
|
870
|
+
const priorWork = worklogRecordsPriorWork(dir);
|
|
871
|
+
const firstPrompt = managedStartupPrompt(dir, mode, priorWork);
|
|
869
872
|
// Wait for the first turn's TERMINAL result. An agent that accepts the
|
|
870
873
|
// startup prompt and then refuses it has not started; logging the role as
|
|
871
874
|
// up would hide a role that never completed its readiness turn.
|
|
@@ -957,7 +960,7 @@ export async function runOnce(name, opts = {}, partialDeps = {}) {
|
|
|
957
960
|
: interruptedWork ? 'Fleet supervisor restarted. Continue pending work in the restored conversation; do not redo completed steps. '
|
|
958
961
|
+ (recoveryBefore?.initial === 'dispatching' ? `If you have not yet received your assignment, read ${join(dir, 'briefing.md')} once before acting. ` : '')
|
|
959
962
|
+ 'Read the continuation log only as needed to recover your next action. If no work remains, end this turn and wait for a concrete task or supervisor wake.' : undefined
|
|
960
|
-
: configuredWork || booted ? managedTaskPrompt(dir, mode,
|
|
963
|
+
: configuredWork || booted || priorWork ? managedTaskPrompt(dir, mode, priorWork) : undefined;
|
|
961
964
|
if (started.succeeded && !deps.shouldStop?.() && workPrompt) {
|
|
962
965
|
saveRecovery({ initial: 'dispatching', active: true });
|
|
963
966
|
const queued = await arbiter.queuePrompt(workPrompt, {
|
package/dist/startup-prompt.d.ts
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* True when the active worklog records anything. A restart that left no entry
|
|
3
|
+
* has no continuity to restore, so it must not turn into a worklog read.
|
|
4
|
+
*/
|
|
5
|
+
export declare function worklogRecordsPriorWork(stateDir: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Readiness is a separate turn after identity/profile and room admission succeed.
|
|
8
|
+
*
|
|
9
|
+
* `fresh` starts a new model conversation, which reads the briefing exactly once;
|
|
10
|
+
* `resume` restores a conversation that already holds it. `hasPriorWork` says the
|
|
11
|
+
* worklog records earlier work — the only case where it is continuity input.
|
|
12
|
+
*/
|
|
13
|
+
export declare function managedStartupPrompt(stateDir: string, mode: 'fresh' | 'resume', hasPriorWork?: boolean): string;
|
|
3
14
|
/** Configured work/continuity runs after readiness, never inside the fast turn. */
|
|
4
|
-
export declare function managedTaskPrompt(stateDir: string, mode: 'fresh' | 'resume',
|
|
15
|
+
export declare function managedTaskPrompt(stateDir: string, mode: 'fresh' | 'resume', hasPriorWork?: boolean): string;
|
package/dist/startup-prompt.js
CHANGED
|
@@ -1,35 +1,70 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
1
2
|
import { join } from 'node:path';
|
|
2
|
-
/**
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* True when the active worklog records anything. A restart that left no entry
|
|
5
|
+
* has no continuity to restore, so it must not turn into a worklog read.
|
|
6
|
+
*/
|
|
7
|
+
export function worklogRecordsPriorWork(stateDir) {
|
|
8
|
+
const worklog = join(stateDir, 'WORKLOG.md');
|
|
9
|
+
try {
|
|
10
|
+
return existsSync(worklog) && readFileSync(worklog, 'utf8').trim().length > 0;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Readiness is a separate turn after identity/profile and room admission succeed.
|
|
18
|
+
*
|
|
19
|
+
* `fresh` starts a new model conversation, which reads the briefing exactly once;
|
|
20
|
+
* `resume` restores a conversation that already holds it. `hasPriorWork` says the
|
|
21
|
+
* worklog records earlier work — the only case where it is continuity input.
|
|
22
|
+
*/
|
|
23
|
+
export function managedStartupPrompt(stateDir, mode, hasPriorWork = false) {
|
|
4
24
|
const briefing = join(stateDir, 'briefing.md');
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
25
|
+
const worklog = join(stateDir, 'WORKLOG.md');
|
|
26
|
+
const context = mode === 'resume'
|
|
27
|
+
? `This restored conversation already holds ${briefing}; do not read it again unless its content is `
|
|
28
|
+
+ 'genuinely missing from your context. '
|
|
29
|
+
+ (hasPriorWork ? `Consult ${worklog} only as needed to recover your next action. ` : '')
|
|
30
|
+
: `After this readiness turn, read ${briefing} once for this session: in the supervisor's task turn, `
|
|
31
|
+
+ 'or on your first concrete task or wake when no task turn is delivered. Reuse it on every later turn, '
|
|
32
|
+
+ 'task and mail wake without reading it again. '
|
|
33
|
+
+ (hasPriorWork ? `In that same first turn, read ${worklog} once for continuity. ` : '');
|
|
8
34
|
return 'Fleet readiness check. The supervisor has verified your assigned identity, configured Role profile, '
|
|
9
35
|
+ 'and any required room admission. Reply with a short final console acknowledgement that you are ready, '
|
|
10
36
|
+ 'then end this turn. Announce readiness before any tool calls or file reads. '
|
|
11
37
|
+ 'Do not read briefing, routines, worklog, inbox, history, help or config during this readiness turn; '
|
|
12
38
|
+ 'do not perform identity/profile setup or broad tool discovery. Do not claim task work has been done. '
|
|
13
39
|
+ 'The supervisor delivers configured work separately; otherwise wait for a concrete task or supervisor wake. '
|
|
14
|
-
+
|
|
40
|
+
+ context
|
|
15
41
|
+ 'Read routines only for concrete work; an idle launch needs no detail reads. '
|
|
16
|
-
+ 'The supervisor delivers initial unread mail and later arrivals as wakes; do not poll the inbox at startup.'
|
|
17
|
-
+ continuity;
|
|
42
|
+
+ 'The supervisor delivers initial unread mail and later arrivals as wakes; do not poll the inbox at startup.';
|
|
18
43
|
}
|
|
19
44
|
/** Configured work/continuity runs after readiness, never inside the fast turn. */
|
|
20
|
-
export function managedTaskPrompt(stateDir, mode,
|
|
45
|
+
export function managedTaskPrompt(stateDir, mode, hasPriorWork = false) {
|
|
21
46
|
const briefing = join(stateDir, 'briefing.md');
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
:
|
|
25
|
-
|
|
26
|
-
|
|
47
|
+
const worklog = join(stateDir, 'WORKLOG.md');
|
|
48
|
+
const opening = mode === 'resume'
|
|
49
|
+
? `Your conversation was restored and already holds ${briefing}: follow it for the assigned work `
|
|
50
|
+
+ 'without reading it again. Only if its content is genuinely missing from your context, read it once now. '
|
|
51
|
+
: `Read and follow ${briefing} for the assigned work. This is the one briefing read of this session; `
|
|
52
|
+
+ 'reuse it on later turns, tasks and mail wakes without reading it again. ';
|
|
53
|
+
const continuity = !hasPriorWork
|
|
54
|
+
? 'No previous work is recorded, so do not read a worklog for initialization. '
|
|
55
|
+
: mode === 'resume'
|
|
56
|
+
? `Continue unfinished work from the restored conversation; consult ${worklog} only as needed to `
|
|
57
|
+
+ 'recover your next action. '
|
|
58
|
+
: `Previous work is recorded: read ${worklog} once for continuity. Do not read it again later in `
|
|
59
|
+
+ 'this session, including after you append to it. ';
|
|
60
|
+
return opening
|
|
61
|
+
+ 'Readiness has already been announced; this is a separate task turn, so do not repeat the readiness '
|
|
62
|
+
+ 'acknowledgement. ' + continuity
|
|
27
63
|
+ 'Identify the concrete assignment in the briefing or unfinished work in the continuation log. '
|
|
28
64
|
+ 'A role charter or public bio alone is not a new task. If there is no concrete work, end this turn '
|
|
29
65
|
+ 'and await a task without reading routines, inbox, history, or unrelated files. '
|
|
30
|
-
+ 'For concrete work, read any existing routines once
|
|
66
|
+
+ 'For concrete work, read any existing routines once for this session, '
|
|
31
67
|
+ 'acknowledge the actual task and next action through its assigned reply route, and proceed. '
|
|
32
|
-
+ (mode === 'fresh' && !hasPriorBoot ? 'On a fresh launch, do not read a worklog for initialization. ' : '')
|
|
33
68
|
+ 'Use inbox/history only when a mail wake, unread pagination, or the actual task needs them. '
|
|
34
69
|
+ 'The supervisor delivers initial unread mail; no model-owned startup poll is needed. '
|
|
35
70
|
+ 'Identity/profile setup, help/config exploration and broad tool discovery are not startup rituals.';
|
package/docs/acp-files.md
CHANGED
|
@@ -124,7 +124,7 @@ saving after a workspace change.
|
|
|
124
124
|
|
|
125
125
|
This source requires the companion MCP implementation's
|
|
126
126
|
`MANAGED_FILE_DELIVERY_VERSION = 1`. Fleet pins published
|
|
127
|
-
`@ours.network/mcp@1.2.0-nightly.
|
|
127
|
+
`@ours.network/mcp@1.2.0-nightly.14`, which includes it and already treats the
|
|
128
128
|
export-directory hint as optional, so default delivery needs no MCP change. An
|
|
129
129
|
installed MCP package without the capability fails Agent startup with
|
|
130
130
|
`INCOMPATIBLE_MANAGED_FILE_DELIVERY` instead of quietly requiring a contact.
|
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.62",
|
|
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",
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@agentclientprotocol/sdk": "^1.3.0",
|
|
48
48
|
"@fastify/websocket": "^11.2.0",
|
|
49
|
-
"@ours.network/cli": "2.8.1-nightly.
|
|
50
|
-
"@ours.network/mcp": "1.2.0-nightly.
|
|
51
|
-
"@ours.network/sdk": "3.8.1-nightly.
|
|
49
|
+
"@ours.network/cli": "2.8.1-nightly.16",
|
|
50
|
+
"@ours.network/mcp": "1.2.0-nightly.14",
|
|
51
|
+
"@ours.network/sdk": "3.8.1-nightly.18",
|
|
52
52
|
"commander": "^12.1.0",
|
|
53
53
|
"fastify": "^5.4.0",
|
|
54
54
|
"qrcode": "1.5.4",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@agentclientprotocol/codex-acp": "1.10.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@ours.network/daemon": "3.8.1-nightly.
|
|
64
|
+
"@ours.network/daemon": "3.8.1-nightly.10",
|
|
65
65
|
"@types/node": "^22.20.4",
|
|
66
66
|
"@types/qrcode": "^1.5.6",
|
|
67
67
|
"@types/ws": "^8.18.1",
|
|
@@ -13,7 +13,9 @@ loops:
|
|
|
13
13
|
through scheduled_at. A late start or missed-loop metadata describes this loop's outage, not
|
|
14
14
|
evidence that development froze.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Use the continuity checkpoint you already hold from earlier passes in this session. Read the
|
|
17
|
+
checkpoint in WORKLOG.md only when it is missing from your context, such as the first pass
|
|
18
|
+
after a restart; this pass needs no briefing or ROUTINES.md reread. Use bounded
|
|
17
19
|
`list_history` reads filtered to the assigned room CID and direction as needed. Do not drain
|
|
18
20
|
unread mail or mark unrelated mail read. Ignore unrelated contacts and private messages.
|
|
19
21
|
Use only attributable room/task evidence. Exclude loop-authored `CONTINUITY *` messages from
|