@hybridlabor-api/aos 4.15.0 → 4.16.0

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.
Files changed (34) hide show
  1. package/bin/aos-acp.mjs +7 -3
  2. package/bin/aos-doctor.mjs +21 -6
  3. package/installer.js +341 -163
  4. package/package.json +2 -2
  5. package/skills/basic/master-session/SKILL.md +1 -1
  6. package/skills/playbooks/pb-bug-fix/SKILL.md +48 -0
  7. package/skills/playbooks/pb-clip-from-moodboard/SKILL.md +55 -0
  8. package/skills/playbooks/pb-crew-call-sheet/SKILL.md +40 -0
  9. package/skills/playbooks/pb-deploy-saas/SKILL.md +44 -0
  10. package/skills/playbooks/pb-docs-site/SKILL.md +44 -0
  11. package/skills/playbooks/pb-focus-chunks/SKILL.md +40 -0
  12. package/skills/playbooks/pb-handover/SKILL.md +41 -0
  13. package/skills/playbooks/pb-harness-work/SKILL.md +64 -0
  14. package/skills/playbooks/pb-health-weekly/SKILL.md +43 -0
  15. package/skills/playbooks/pb-idea-to-launch/SKILL.md +51 -0
  16. package/skills/playbooks/pb-image-to-3d/SKILL.md +46 -0
  17. package/skills/playbooks/pb-inbox-zero/SKILL.md +39 -0
  18. package/skills/playbooks/pb-invoice-check/SKILL.md +41 -0
  19. package/skills/playbooks/pb-landing-page/SKILL.md +46 -0
  20. package/skills/playbooks/pb-launch-video/SKILL.md +49 -0
  21. package/skills/playbooks/pb-machine-setup/SKILL.md +44 -0
  22. package/skills/playbooks/pb-master/SKILL.md +53 -0
  23. package/skills/playbooks/pb-newsletter/SKILL.md +43 -0
  24. package/skills/playbooks/pb-offer/SKILL.md +39 -0
  25. package/skills/playbooks/pb-open-source/SKILL.md +50 -0
  26. package/skills/playbooks/pb-pcb-to-case/SKILL.md +46 -0
  27. package/skills/playbooks/pb-redesign-app/SKILL.md +47 -0
  28. package/skills/playbooks/pb-release-aos/SKILL.md +50 -0
  29. package/skills/playbooks/pb-security-sweep/SKILL.md +48 -0
  30. package/skills/playbooks/pb-ship/SKILL.md +49 -0
  31. package/skills/playbooks/pb-show-build/SKILL.md +48 -0
  32. package/skills/playbooks/pb-social-pack/SKILL.md +47 -0
  33. package/skills/playbooks/pb-todo/SKILL.md +41 -0
  34. package/skills/playbooks/pb-worktrees-land/SKILL.md +52 -0
package/bin/aos-acp.mjs CHANGED
@@ -9,7 +9,7 @@
9
9
  // aos-acp <claude|codex|opencode|agy> --name <worker> [--cwd <dir>]
10
10
  // (--prompt "<text>" | --prompt-file <f>) [--allow-default deny|allow]
11
11
  // [--go-wait <sec>] [--consume|--no-consume] [--log <file>]
12
- // [--timeout <sec>] [--cmd "<custom agent command>"]
12
+ // [--model <id>] [--timeout <sec>] [--cmd "<custom agent command>"]
13
13
 
14
14
  import { spawn } from "node:child_process";
15
15
  import { appendFileSync, mkdirSync, readFileSync, realpathSync } from "node:fs";
@@ -130,8 +130,9 @@ export async function run(opts) {
130
130
  ? "agy has no sanctioned ACP adapter (antigravity-acp breaches Google's Antigravity terms); delegate via the mcsc skill instead"
131
131
  : `unknown adapter "${opts.adapter}" (claude|codex|opencode)`);
132
132
  if (adapter?.cwdFlag && !opts.cmd) cmd.push(adapter.cwdFlag, opts.cwd);
133
+ if (/fable/i.test(opts.model || "")) throw new Error(`model "${opts.model}" rejected: workers run on opus, sonnet or haiku only`);
133
134
  const consume = opts.consume ?? adapter?.consume ?? true;
134
- log("start", { adapter: opts.adapter, cmd: cmd.join(" "), cwd: opts.cwd, allow_default: opts.allowDefault, consume });
135
+ log("start", { adapter: opts.adapter, cmd: cmd.join(" "), cwd: opts.cwd, allow_default: opts.allowDefault, consume, model: opts.model || "adapter default" });
135
136
 
136
137
  let sessionId;
137
138
  const out = opts.stdout || process.stdout;
@@ -169,6 +170,8 @@ export async function run(opts) {
169
170
  log("initialized", { agent: init?.agentInfo, auth: init?.authMethods });
170
171
  ({ sessionId } = await client.request("session/new", { cwd: opts.cwd, mcpServers: [] }));
171
172
  log("session", { sessionId });
173
+ // ACP session config option "model": claude-agent-acp, codex-acp and opencode all implement it.
174
+ if (opts.model) await client.request("session/set_config_option", { sessionId, configId: "model", value: opts.model });
172
175
  const res = await client.request("session/prompt", { sessionId, prompt: [{ type: "text", text: opts.prompt }] });
173
176
  out.write("\n");
174
177
  log("done", { stopReason: res?.stopReason });
@@ -194,12 +197,13 @@ export function parseArgs(argv) {
194
197
  else if (a === "--go-wait") o.goWait = Number(v), i++;
195
198
  else if (a === "--timeout") o.timeout = Number(v), i++;
196
199
  else if (a === "--log") o.log = v, i++;
200
+ else if (a === "--model") o.model = v, i++;
197
201
  else if (a === "--cmd") o.cmd = v, i++;
198
202
  else if (a === "--consume") o.consume = true;
199
203
  else if (a === "--no-consume") o.consume = false;
200
204
  else throw new Error(`unknown argument ${a}`);
201
205
  }
202
- if (!o.adapter || !o.name || !o.prompt) throw new Error("usage: aos-acp <claude|codex|opencode> --name <worker> --prompt <text> [--cwd <dir>] [--allow-default deny|allow] [--go-wait <sec>] [--no-consume] [--log <file>] [--timeout <sec>]");
206
+ if (!o.adapter || !o.name || !o.prompt) throw new Error("usage: aos-acp <claude|codex|opencode> --name <worker> --prompt <text> [--cwd <dir>] [--allow-default deny|allow] [--go-wait <sec>] [--no-consume] [--model <id>] [--log <file>] [--timeout <sec>]");
203
207
  if (!["deny", "allow"].includes(o.allowDefault)) throw new Error("--allow-default must be deny or allow");
204
208
  return o;
205
209
  }
@@ -8,6 +8,7 @@
8
8
  import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
9
9
  import { execFileSync } from 'node:child_process';
10
10
  import { connect } from 'node:net';
11
+ import { createRequire } from 'node:module';
11
12
  import os from 'node:os';
12
13
  import path from 'node:path';
13
14
 
@@ -300,6 +301,20 @@ async function checkDaemonsAndModules() {
300
301
  ? 'Enable AO in the installer or run: ao service install'
301
302
  : 'AO binary is arm64 macOS native; build from source on other platforms: github.com/hybridlabor-api/bdb-agent-orchestrator', false);
302
303
 
304
+ // Installed ao vs a local AO checkout's HEAD, read from the binary's embedded build info.
305
+ const aoCheckout = firstExisting([h('dev', 'agents', 'bdb-agent-orchestrator'), h('dev', 'bdb-dev', 'bdb-agent-orchestrator')]);
306
+ if (aoBin && aoCheckout && existsSync(path.join(aoCheckout, '.git'))) {
307
+ const { readGoBuildInfo } = createRequire(import.meta.url)('../installer.js');
308
+ const build = readGoBuildInfo(aoBin.replace(/^~/, HOME));
309
+ let head = null;
310
+ try { head = execFileSync('git', ['--no-optional-locks', '-C', aoCheckout, 'rev-parse', 'HEAD'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim(); } catch {}
311
+ const same = !!(build && head && build.revision === head && !build.modified);
312
+ add('daemons', 'AO revision vs checkout', same,
313
+ !build ? 'Installed ao has no readable build revision'
314
+ : `Installed ${build.revision.slice(0, 9)}${build.modified ? ' (dirty build)' : ''} · checkout HEAD ${head ? head.slice(0, 9) : 'unknown'}`,
315
+ `Rebuild from a clean checkout: cd ${tilde(path.join(aoCheckout, 'backend'))} && go build -ldflags='-s -w' -o ~/.local/bin/ao.new ./cmd/ao && mv ~/.local/bin/ao.new ~/.local/bin/ao && ao service install`, true);
316
+ }
317
+
303
318
  // Code-signing check for AO on macOS
304
319
  if (IS_MAC && aoBin) {
305
320
  let signed = false;
@@ -318,15 +333,15 @@ function printAoAnnouncement() {
318
333
  console.log(`
319
334
  ╭──────────────────────────────────────────────────────────────────────────────╮
320
335
  │ │
321
- │ 🚀 BDB AGENT ORCHESTRATOR APP — FINALE BETA JETZT VERFÜGBAR! │
336
+ │ BDB AGENT ORCHESTRATOR APP — FINAL BETA NOW AVAILABLE │
322
337
  │ │
323
- │ Die nächste Generation der Cross-Harness Multi-Agenten-Orchestrierung │
324
- │ ist jetzt als finale Beta für alle User freigeschaltet. │
338
+ │ The next generation of cross-harness multi-agent orchestration │
339
+ │ is now open to every user as a final beta. │
325
340
  │ │
326
341
  │ • Dashboard & WebUI: http://localhost:3101 │
327
- │ • Service-Befehl: ao service install (Hintergrunddienst aktivieren) │
328
- │ • Quick Launch: ao open oder ao service status │
329
- │ • Features: Session-Telemetrie, Live-AgentTrail & Multi-Workspaces│
342
+ │ • Service command: ao service install (enables the background service) │
343
+ │ • Quick launch: ao open or ao service status │
344
+ │ • Features: session telemetry, live AgentTrail, multi-workspaces │
330
345
  │ │
331
346
  ╰──────────────────────────────────────────────────────────────────────────────╯
332
347
  `);