@ours.network/fleet 1.1.0-nightly.30 → 1.1.0-nightly.31
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
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.1.0-nightly.
|
|
3
|
-
"buildId": "
|
|
4
|
-
"commit": "
|
|
2
|
+
"version": "1.1.0-nightly.31",
|
|
3
|
+
"buildId": "6a76080fd007",
|
|
4
|
+
"commit": "3d3e75f83fd76330d167c41b6e92944331821f0e",
|
|
5
5
|
"dirty": true,
|
|
6
|
-
"builtAt": "2026-09-
|
|
6
|
+
"builtAt": "2026-09-05T10:39:57.497Z",
|
|
7
7
|
"capabilities": [
|
|
8
8
|
"monitor.interrupt.after_tool"
|
|
9
9
|
]
|
package/dist/session/acp.js
CHANGED
|
@@ -187,6 +187,12 @@ export function runtimeSelector(options, category) {
|
|
|
187
187
|
const selected = choices.find(choice => choice.value === option.currentValue);
|
|
188
188
|
return { value: option.currentValue, ...(selected?.name ? { label: selected.name } : {}) };
|
|
189
189
|
}
|
|
190
|
+
function reasoningFromModelId(modelId) {
|
|
191
|
+
if (typeof modelId !== 'string')
|
|
192
|
+
return undefined;
|
|
193
|
+
const match = modelId.match(/\[([^\]]+)\]$/u);
|
|
194
|
+
return match?.[1] ? { value: match[1] } : undefined;
|
|
195
|
+
}
|
|
190
196
|
/**
|
|
191
197
|
* Classify an ACP `stopReason` into a terminal outcome. A refusal and a
|
|
192
198
|
* cancellation are the two ways a delivered prompt ends without being carried
|
|
@@ -1030,6 +1036,7 @@ export class AcpSession {
|
|
|
1030
1036
|
? readFileSync(this.sessionFile, 'utf8').trim()
|
|
1031
1037
|
: '';
|
|
1032
1038
|
let advertisedConfigOptions;
|
|
1039
|
+
let advertisedModelId;
|
|
1033
1040
|
if (persisted && this.agentCapabilities?.sessionCapabilities?.resume != null) {
|
|
1034
1041
|
const resumed = await this.connection.agent.request(acp.methods.agent.session.resume, {
|
|
1035
1042
|
sessionId: persisted,
|
|
@@ -1037,7 +1044,8 @@ export class AcpSession {
|
|
|
1037
1044
|
mcpServers: this.declaredMcpServers(),
|
|
1038
1045
|
});
|
|
1039
1046
|
advertisedConfigOptions = resumed.configOptions;
|
|
1040
|
-
|
|
1047
|
+
advertisedModelId = resumed.models?.currentModelId;
|
|
1048
|
+
this.captureRuntimeMetadata(advertisedConfigOptions, advertisedModelId);
|
|
1041
1049
|
this.sessionId = persisted;
|
|
1042
1050
|
}
|
|
1043
1051
|
else if (persisted && this.agentCapabilities?.loadSession) {
|
|
@@ -1051,7 +1059,8 @@ export class AcpSession {
|
|
|
1051
1059
|
mcpServers: this.declaredMcpServers(),
|
|
1052
1060
|
});
|
|
1053
1061
|
advertisedConfigOptions = loaded.configOptions;
|
|
1054
|
-
|
|
1062
|
+
advertisedModelId = loaded.models?.currentModelId;
|
|
1063
|
+
this.captureRuntimeMetadata(advertisedConfigOptions, advertisedModelId);
|
|
1055
1064
|
}
|
|
1056
1065
|
finally {
|
|
1057
1066
|
this.replaying = false;
|
|
@@ -1066,11 +1075,16 @@ export class AcpSession {
|
|
|
1066
1075
|
});
|
|
1067
1076
|
this.sessionId = created.sessionId;
|
|
1068
1077
|
advertisedConfigOptions = created.configOptions;
|
|
1069
|
-
|
|
1078
|
+
advertisedModelId = created.models?.currentModelId;
|
|
1079
|
+
this.captureRuntimeMetadata(advertisedConfigOptions, advertisedModelId);
|
|
1070
1080
|
}
|
|
1071
1081
|
for (const selection of this.options.configSelections ?? []) {
|
|
1072
|
-
if (!advertisedConfigOptions?.some(option => option.id === selection.configId))
|
|
1082
|
+
if (!advertisedConfigOptions?.some(option => option.id === selection.configId)) {
|
|
1083
|
+
if (selection.configId === 'reasoning_effort'
|
|
1084
|
+
&& reasoningFromModelId(advertisedModelId)?.value === selection.value)
|
|
1085
|
+
continue;
|
|
1073
1086
|
throw new Error(`ACP agent did not advertise required session config option '${selection.configId}'`);
|
|
1087
|
+
}
|
|
1074
1088
|
let configured;
|
|
1075
1089
|
try {
|
|
1076
1090
|
configured = await this.connection.agent.request(acp.methods.agent.session.setConfigOption, { sessionId: this.sessionId, configId: selection.configId, value: selection.value });
|
|
@@ -1080,7 +1094,7 @@ export class AcpSession {
|
|
|
1080
1094
|
+ (error instanceof Error ? error.message : String(error)));
|
|
1081
1095
|
}
|
|
1082
1096
|
advertisedConfigOptions = configured.configOptions;
|
|
1083
|
-
this.captureRuntimeMetadata(advertisedConfigOptions);
|
|
1097
|
+
this.captureRuntimeMetadata(advertisedConfigOptions, advertisedModelId);
|
|
1084
1098
|
const applied = advertisedConfigOptions.find(option => option.id === selection.configId);
|
|
1085
1099
|
if (applied?.currentValue !== selection.value)
|
|
1086
1100
|
throw new Error(`ACP agent did not apply required session config option '${selection.configId}' value '${selection.value}'`);
|
|
@@ -1112,9 +1126,9 @@ export class AcpSession {
|
|
|
1112
1126
|
acpSessionId: this.sessionId, payload: { status: 'idle' },
|
|
1113
1127
|
});
|
|
1114
1128
|
}
|
|
1115
|
-
captureRuntimeMetadata(options) {
|
|
1129
|
+
captureRuntimeMetadata(options, modelId) {
|
|
1116
1130
|
this.runtimeModel = runtimeSelector(options, 'model');
|
|
1117
|
-
this.reasoningEffort = runtimeSelector(options, 'thought_level');
|
|
1131
|
+
this.reasoningEffort = runtimeSelector(options, 'thought_level') ?? reasoningFromModelId(modelId);
|
|
1118
1132
|
}
|
|
1119
1133
|
async runPrompt(text, turnId = randomUUID(), origin) {
|
|
1120
1134
|
if (!this.sessionId || !this.isAlive())
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ours.network/fleet",
|
|
3
|
-
"version": "1.1.0-nightly.
|
|
3
|
+
"version": "1.1.0-nightly.31",
|
|
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",
|
|
@@ -15,7 +15,14 @@ persona: |
|
|
|
15
15
|
For every new task:
|
|
16
16
|
1. Record it first with `ours-fleet task create --title "<title>" --brief "<brief>" --backlog --no-room`.
|
|
17
17
|
2. Ask the owner which room template to use: `single`, `pair`, or `team`.
|
|
18
|
-
3.
|
|
18
|
+
3. Resolve the exact launch plan without creating the room. Immediately before room creation, send
|
|
19
|
+
one proactive message to `Coordinator Owner Channel` stating that you are about to create the
|
|
20
|
+
room and listing the task, selected template, every member role and count, and each member's
|
|
21
|
+
Agent Template, Brain, harness, session, model, reasoning effort, permissions, and working
|
|
22
|
+
directory. Wait for `send_message` to confirm delivery. This detailed message replaces the
|
|
23
|
+
generic meaningful-action notice for room creation. If delivery fails, do not create the room.
|
|
24
|
+
4. Only after confirmed delivery, start it with
|
|
25
|
+
`ours-fleet task start <task-id> --template <template>`.
|
|
19
26
|
|
|
20
27
|
Keep the backlog current with `ours-fleet task list --state all` and use `task show`, `task block`,
|
|
21
28
|
`task unblock`, and `task review` to reflect lifecycle changes. When the owner asks for progress,
|