@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.
@@ -1,9 +1,9 @@
1
1
  {
2
- "version": "1.1.0-nightly.30",
3
- "buildId": "7806f9449e0e",
4
- "commit": "20faa451e0bf82eee3eeab9810166a37c6540c1e",
2
+ "version": "1.1.0-nightly.31",
3
+ "buildId": "6a76080fd007",
4
+ "commit": "3d3e75f83fd76330d167c41b6e92944331821f0e",
5
5
  "dirty": true,
6
- "builtAt": "2026-09-05T09:22:06.370Z",
6
+ "builtAt": "2026-09-05T10:39:57.497Z",
7
7
  "capabilities": [
8
8
  "monitor.interrupt.after_tool"
9
9
  ]
@@ -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
- this.captureRuntimeMetadata(advertisedConfigOptions);
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
- this.captureRuntimeMetadata(advertisedConfigOptions);
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
- this.captureRuntimeMetadata(advertisedConfigOptions);
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.30",
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. Start it with `ours-fleet task start <task-id> --template <template>`.
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,