heyio 4.3.1 → 4.3.2

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.
@@ -80,7 +80,7 @@ var init_constants = __esm({
80
80
  "packages/shared/dist/constants.js"() {
81
81
  "use strict";
82
82
  APP_NAME = "io";
83
- APP_VERSION = "4.3.1";
83
+ APP_VERSION = "4.3.2";
84
84
  API_PORT = 7777;
85
85
  API_HOST = "0.0.0.0";
86
86
  DEFAULT_MODEL = "gpt-4.1-mini";
@@ -69899,7 +69899,7 @@ async function executeAgentTask(member, task, worktreePath, options2) {
69899
69899
  try {
69900
69900
  client2 = new CopilotClient3({ workingDirectory: worktreePath });
69901
69901
  await client2.start();
69902
- const model = member.model ?? await selectModelForTask(task.description);
69902
+ const model = member.model ? stripVendorPrefix(member.model) : await selectModelForTask(task.description);
69903
69903
  const session = await client2.createSession({
69904
69904
  model,
69905
69905
  workingDirectory: worktreePath,
@@ -70316,7 +70316,7 @@ Return strict JSON:
70316
70316
  try {
70317
70317
  client2 = new CopilotClient5({ workingDirectory: worktreePath });
70318
70318
  await client2.start();
70319
- const model = qaMember.model ?? await selectModelForTask(`QA review: ${objective.description}`);
70319
+ const model = qaMember.model ? stripVendorPrefix(qaMember.model) : await selectModelForTask(`QA review: ${objective.description}`);
70320
70320
  const session = await client2.createSession({
70321
70321
  model,
70322
70322
  workingDirectory: worktreePath,
@@ -70394,6 +70394,7 @@ var init_qa = __esm({
70394
70394
  "use strict";
70395
70395
  init_dist();
70396
70396
  init_event_bus();
70397
+ init_registry();
70397
70398
  init_model_selector();
70398
70399
  init_roles();
70399
70400
  init_store2();
@@ -70450,7 +70451,7 @@ Return strict JSON:
70450
70451
  try {
70451
70452
  client2 = new CopilotClient6();
70452
70453
  await client2.start();
70453
- const model = teamLead.model ?? await selectModelForTask(`Code review: ${objective.description}`);
70454
+ const model = teamLead.model ? stripVendorPrefix(teamLead.model) : await selectModelForTask(`Code review: ${objective.description}`);
70454
70455
  const session = await client2.createSession({
70455
70456
  model,
70456
70457
  onPermissionRequest: approveAll6,
@@ -70487,6 +70488,7 @@ You are conducting a final coordination review before QA.`
70487
70488
  var init_review = __esm({
70488
70489
  "packages/daemon/src/execution/review.ts"() {
70489
70490
  "use strict";
70491
+ init_registry();
70490
70492
  init_model_selector();
70491
70493
  init_roles();
70492
70494
  }
@@ -71088,11 +71090,21 @@ async function handleAddSquadMember(rawArgs) {
71088
71090
  if (!squad) {
71089
71091
  throw new Error(`Squad ${squadId} was not found.`);
71090
71092
  }
71093
+ let validatedModel = null;
71094
+ if (model) {
71095
+ validatedModel = stripVendorPrefix(model);
71096
+ const pricing = await getModelPricing(validatedModel);
71097
+ if (!pricing) {
71098
+ throw new Error(
71099
+ `Model "${model}" is not available. Use a model from the pricing database (e.g. gpt-4.1-mini, gpt-4.1, claude-sonnet-4, o4-mini). Omit the model field to use dynamic selection.`
71100
+ );
71101
+ }
71102
+ }
71091
71103
  const member = await addMember(squadId, {
71092
71104
  role,
71093
71105
  name,
71094
71106
  systemPrompt,
71095
- model: model ?? null
71107
+ model: validatedModel
71096
71108
  });
71097
71109
  eventBus.emit(EVENT_NAMES.SQUAD_MEMBER_UPDATED, { squadId, member });
71098
71110
  return {
@@ -71210,10 +71222,22 @@ async function handleUpdateSquadMember(rawArgs) {
71210
71222
  if (!member || member.squadId !== squadId) {
71211
71223
  throw new Error(`Member ${memberId} was not found in squad ${squadId}.`);
71212
71224
  }
71225
+ let validatedModel = void 0;
71226
+ if (model === "") {
71227
+ validatedModel = null;
71228
+ } else if (model) {
71229
+ validatedModel = stripVendorPrefix(model);
71230
+ const pricing = await getModelPricing(validatedModel);
71231
+ if (!pricing) {
71232
+ throw new Error(
71233
+ `Model "${model}" is not available. Use a model from the pricing database (e.g. gpt-4.1-mini, gpt-4.1, claude-sonnet-4, o4-mini). Set to empty string to clear and use dynamic selection.`
71234
+ );
71235
+ }
71236
+ }
71213
71237
  const updated = await updateMember(memberId, {
71214
71238
  role,
71215
71239
  systemPrompt,
71216
- model: model === "" ? null : model
71240
+ model: validatedModel
71217
71241
  });
71218
71242
  if (!updated) {
71219
71243
  throw new Error(`Failed to update member ${memberId}.`);
@@ -71303,6 +71327,7 @@ var init_squad2 = __esm({
71303
71327
  init_event_bus();
71304
71328
  init_instances2();
71305
71329
  init_runner();
71330
+ init_models();
71306
71331
  init_manager2();
71307
71332
  init_store2();
71308
71333
  execAsync8 = promisify8(exec8);
@@ -79,7 +79,7 @@ var init_constants = __esm({
79
79
  "packages/shared/dist/constants.js"() {
80
80
  "use strict";
81
81
  APP_NAME = "io";
82
- APP_VERSION = "4.3.1";
82
+ APP_VERSION = "4.3.2";
83
83
  API_PORT = 7777;
84
84
  API_HOST = "0.0.0.0";
85
85
  DEFAULT_MODEL = "gpt-4.1-mini";
@@ -82696,7 +82696,7 @@ async function executeAgentTask(member, task, worktreePath, options2) {
82696
82696
  try {
82697
82697
  client2 = new CopilotClient3({ workingDirectory: worktreePath });
82698
82698
  await client2.start();
82699
- const model = member.model ?? await selectModelForTask(task.description);
82699
+ const model = member.model ? stripVendorPrefix(member.model) : await selectModelForTask(task.description);
82700
82700
  const session = await client2.createSession({
82701
82701
  model,
82702
82702
  workingDirectory: worktreePath,
@@ -83036,6 +83036,7 @@ init_dist();
83036
83036
  import { exec as exec6 } from "node:child_process";
83037
83037
  import { promisify as promisify6 } from "node:util";
83038
83038
  import { CopilotClient as CopilotClient5, approveAll as approveAll5 } from "@github/copilot-sdk";
83039
+ init_registry();
83039
83040
  var execAsync6 = promisify6(exec6);
83040
83041
  var GIT_DIFF_MAX_BUFFER = 10 * 1024 * 1024;
83041
83042
  function extractJsonObject2(content) {
@@ -83077,7 +83078,7 @@ Return strict JSON:
83077
83078
  try {
83078
83079
  client2 = new CopilotClient5({ workingDirectory: worktreePath });
83079
83080
  await client2.start();
83080
- const model = qaMember.model ?? await selectModelForTask(`QA review: ${objective.description}`);
83081
+ const model = qaMember.model ? stripVendorPrefix(qaMember.model) : await selectModelForTask(`QA review: ${objective.description}`);
83081
83082
  const session = await client2.createSession({
83082
83083
  model,
83083
83084
  workingDirectory: worktreePath,
@@ -83151,6 +83152,7 @@ async function handleQARejection(objectiveId, feedback) {
83151
83152
  }
83152
83153
 
83153
83154
  // packages/daemon/src/execution/review.ts
83155
+ init_registry();
83154
83156
  import { CopilotClient as CopilotClient6, approveAll as approveAll6 } from "@github/copilot-sdk";
83155
83157
  function extractJsonObject3(content) {
83156
83158
  const fenced = content.match(/```(?:json)?\s*([\s\S]*?)```/i);
@@ -83198,7 +83200,7 @@ Return strict JSON:
83198
83200
  try {
83199
83201
  client2 = new CopilotClient6();
83200
83202
  await client2.start();
83201
- const model = teamLead.model ?? await selectModelForTask(`Code review: ${objective.description}`);
83203
+ const model = teamLead.model ? stripVendorPrefix(teamLead.model) : await selectModelForTask(`Code review: ${objective.description}`);
83202
83204
  const session = await client2.createSession({
83203
83205
  model,
83204
83206
  onPermissionRequest: approveAll6,
@@ -83948,11 +83950,21 @@ async function handleAddSquadMember(rawArgs) {
83948
83950
  if (!squad) {
83949
83951
  throw new Error(`Squad ${squadId} was not found.`);
83950
83952
  }
83953
+ let validatedModel = null;
83954
+ if (model) {
83955
+ validatedModel = stripVendorPrefix(model);
83956
+ const pricing = await getModelPricing(validatedModel);
83957
+ if (!pricing) {
83958
+ throw new Error(
83959
+ `Model "${model}" is not available. Use a model from the pricing database (e.g. gpt-4.1-mini, gpt-4.1, claude-sonnet-4, o4-mini). Omit the model field to use dynamic selection.`
83960
+ );
83961
+ }
83962
+ }
83951
83963
  const member = await addMember(squadId, {
83952
83964
  role,
83953
83965
  name,
83954
83966
  systemPrompt,
83955
- model: model ?? null
83967
+ model: validatedModel
83956
83968
  });
83957
83969
  eventBus.emit(EVENT_NAMES.SQUAD_MEMBER_UPDATED, { squadId, member });
83958
83970
  return {
@@ -84070,10 +84082,22 @@ async function handleUpdateSquadMember(rawArgs) {
84070
84082
  if (!member || member.squadId !== squadId) {
84071
84083
  throw new Error(`Member ${memberId} was not found in squad ${squadId}.`);
84072
84084
  }
84085
+ let validatedModel = void 0;
84086
+ if (model === "") {
84087
+ validatedModel = null;
84088
+ } else if (model) {
84089
+ validatedModel = stripVendorPrefix(model);
84090
+ const pricing = await getModelPricing(validatedModel);
84091
+ if (!pricing) {
84092
+ throw new Error(
84093
+ `Model "${model}" is not available. Use a model from the pricing database (e.g. gpt-4.1-mini, gpt-4.1, claude-sonnet-4, o4-mini). Set to empty string to clear and use dynamic selection.`
84094
+ );
84095
+ }
84096
+ }
84073
84097
  const updated = await updateMember(memberId, {
84074
84098
  role,
84075
84099
  systemPrompt,
84076
- model: model === "" ? null : model
84100
+ model: validatedModel
84077
84101
  });
84078
84102
  if (!updated) {
84079
84103
  throw new Error(`Failed to update member ${memberId}.`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "heyio",
3
- "version": "4.3.1",
3
+ "version": "4.3.2",
4
4
  "description": "AI orchestrator daemon with squad-based team delegation",
5
5
  "type": "module",
6
6
  "license": "MIT",