omnius 1.0.621 → 1.0.623

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.
@@ -293776,9 +293776,9 @@ async function managedDaemonServiceOwnsPort(port, dependencies = {
293776
293776
  function systemdQuote(value) {
293777
293777
  return /[\s"\\]/.test(value) ? `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"` : value;
293778
293778
  }
293779
- async function repairManagedDaemonUnit(port) {
293779
+ async function repairManagedDaemonUnit(port, preferredEntrypoint) {
293780
293780
  if (process.platform !== "linux") return false;
293781
- const command = await resolveDaemonCommand(process.execPath);
293781
+ const command = await resolveDaemonCommand(process.execPath, preferredEntrypoint);
293782
293782
  if (!command) return false;
293783
293783
  try {
293784
293784
  const configHome = process.env["XDG_CONFIG_HOME"] || join14(homedir14(), ".config");
@@ -293990,7 +293990,7 @@ async function reclaimOwnedDaemonListener(port = getDaemonPort(), dependencies =
293990
293990
  }
293991
293991
  return { ok: true, action: "cleared", port, clearedPids, blockedPids: [] };
293992
293992
  }
293993
- async function restartDaemon(port, expectedVersion) {
293993
+ async function restartDaemon(port, expectedVersion, preferredEntrypoint) {
293994
293994
  const p = port ?? getDaemonPort();
293995
293995
  const managed = await managedDaemonServiceMatchesPort(p);
293996
293996
  if (managed) {
@@ -293999,12 +293999,14 @@ async function restartDaemon(port, expectedVersion) {
293999
293999
  if (!reclaimed.ok) return false;
294000
294000
  await reclaimStaleDaemonEndpointClaim(p);
294001
294001
  }
294002
+ await runUserSystemctl(["reset-failed", "omnius-daemon.service"]);
294002
294003
  const restarted = await runUserSystemctl(["restart", "omnius-daemon.service"]);
294003
294004
  if (restarted.ok && (await waitForDaemonReady(p, expectedVersion)).ok) return true;
294004
- const repaired = await repairManagedDaemonUnit(p);
294005
+ const repaired = await repairManagedDaemonUnit(p, preferredEntrypoint);
294005
294006
  if (repaired) {
294006
294007
  await runUserSystemctl(["stop", "omnius-daemon.service"]);
294007
294008
  await waitForDaemonStopped(p);
294009
+ await runUserSystemctl(["reset-failed", "omnius-daemon.service"]);
294008
294010
  const started = await runUserSystemctl(["start", "omnius-daemon.service"]);
294009
294011
  if (started.ok && (await waitForDaemonReady(p, expectedVersion)).ok) return true;
294010
294012
  }
@@ -294019,7 +294021,7 @@ async function restartDaemon(port, expectedVersion) {
294019
294021
  if (!reclaimed.ok) return false;
294020
294022
  }
294021
294023
  if (!await reclaimStaleDaemonEndpointClaim(p)) return false;
294022
- const pid = await startDaemon(p);
294024
+ const pid = await startDaemon(p, preferredEntrypoint);
294023
294025
  if (!pid) return false;
294024
294026
  return (await waitForDaemonReady(p, expectedVersion)).ok;
294025
294027
  }
@@ -294039,8 +294041,9 @@ function commandForEntrypoint(path, nodeExe) {
294039
294041
  }
294040
294042
  return { command: path, args };
294041
294043
  }
294042
- async function resolveDaemonCommand(nodeExe) {
294044
+ async function resolveDaemonCommand(nodeExe, preferredEntrypoint) {
294043
294045
  const candidates = [];
294046
+ if (preferredEntrypoint) candidates.push(preferredEntrypoint);
294044
294047
  const thisDir = dirname8(fileURLToPath2(import.meta.url));
294045
294048
  candidates.push(join14(thisDir, "index.js"));
294046
294049
  if (process.argv[1]) candidates.push(process.argv[1]);
@@ -294063,13 +294066,13 @@ async function resolveDaemonCommand(nodeExe) {
294063
294066
  }
294064
294067
  return null;
294065
294068
  }
294066
- async function startDaemon(port = getDaemonPort()) {
294069
+ async function startDaemon(port = getDaemonPort(), preferredEntrypoint) {
294067
294070
  mkdirSync3(OMNIUS_DIR, { recursive: true });
294068
294071
  const daemonPort = port;
294069
294072
  const endpointClaim = claimDaemonEndpoint(daemonPort);
294070
294073
  if (!endpointClaim) return null;
294071
294074
  const nodeExe = process.execPath;
294072
- const daemonCommand = await resolveDaemonCommand(nodeExe);
294075
+ const daemonCommand = await resolveDaemonCommand(nodeExe, preferredEntrypoint);
294073
294076
  if (!daemonCommand) {
294074
294077
  releaseDaemonEndpointClaim(endpointClaim);
294075
294078
  return null;
@@ -294496,24 +294499,31 @@ async function runVerifiedUpdateTransaction(initial, dependencies, paths = resol
294496
294499
  executable_version: evidence.executableVersion
294497
294500
  }, paths);
294498
294501
  state = transition(state, { phase: "daemon_restarting" }, paths);
294499
- if (!await dependencies.restartDaemon(target)) {
294500
- throw new Error(
294501
- `The daemon restart at ${state.daemon_endpoint ?? "the configured endpoint"} did not produce Omnius v${target}`
294502
- );
294502
+ let daemon = null;
294503
+ let restartAcknowledged = false;
294504
+ for (let attempt = 1; attempt <= 3; attempt++) {
294505
+ restartAcknowledged = await dependencies.restartDaemon(target, evidence.executablePath) || restartAcknowledged;
294506
+ daemon = await dependencies.observeDaemon();
294507
+ if (daemon?.bootVersion === target && daemon.bootPackageHash === evidence.packageHash) {
294508
+ break;
294509
+ }
294510
+ if (attempt < 3) await new Promise((resolve12) => setTimeout(resolve12, 1e3));
294503
294511
  }
294504
- daemonQuiesced = false;
294505
- const daemon = await dependencies.observeDaemon();
294506
294512
  if (!daemon || daemon.bootVersion !== target) {
294507
- throw new Error(`Daemon verification failed: expected ${target}, observed ${daemon?.bootVersion ?? "unreachable"}`);
294513
+ const observed = daemon?.bootVersion ?? "unreachable";
294514
+ throw new Error(
294515
+ restartAcknowledged ? `Daemon verification failed after 3 recovery attempts: expected ${target}, observed ${observed}` : `The daemon at ${state.daemon_endpoint ?? "the configured endpoint"} could not be restarted from the verified Omnius v${target} executable after 3 attempts`
294516
+ );
294508
294517
  }
294509
294518
  if (!daemon.bootPackageHash) {
294510
- throw new Error("Daemon package verification failed: the restarted runtime did not report a boot package hash");
294519
+ throw new Error("Daemon package verification failed after 3 recovery attempts: the restarted runtime did not report a boot package hash");
294511
294520
  }
294512
294521
  if (daemon.bootPackageHash !== evidence.packageHash) {
294513
294522
  throw new Error(
294514
- `Daemon package verification failed: boot hash ${daemon.bootPackageHash} does not match installed hash ${evidence.packageHash}`
294523
+ `Daemon package verification failed after 3 recovery attempts: boot hash ${daemon.bootPackageHash} does not match installed hash ${evidence.packageHash}`
294515
294524
  );
294516
294525
  }
294526
+ daemonQuiesced = false;
294517
294527
  state = transition(state, {
294518
294528
  phase: "runtime_verified",
294519
294529
  daemon_version: daemon.bootVersion,
@@ -294865,8 +294875,8 @@ async function main() {
294865
294875
  state,
294866
294876
  {
294867
294877
  quiesceDaemon: () => quiesceDaemonForUpdate(port),
294868
- restartDaemon: (expected) => restartDaemon(port, expected),
294869
- recoverDaemon: () => restartDaemon(port),
294878
+ restartDaemon: (expected, executable) => restartDaemon(port, expected, executable),
294879
+ recoverDaemon: () => restartDaemon(port, target),
294870
294880
  observeDaemon: async () => {
294871
294881
  const identity = await getDaemonReportedIdentity(port);
294872
294882
  return identity ? { bootVersion: identity.bootVersion, bootPackageHash: identity.bootPackageHash } : null;
@@ -12380,6 +12380,162 @@
12380
12380
  "packages/cli/src/api/openapi.ts"
12381
12381
  ]
12382
12382
  },
12383
+ {
12384
+ "id": "api.v1-services",
12385
+ "kind": "api",
12386
+ "title": "/v1/services",
12387
+ "summary": "List all active daemon-owned REST services and their routes",
12388
+ "aliases": [
12389
+ "/v1/services"
12390
+ ],
12391
+ "keywords": [
12392
+ "rest",
12393
+ "openapi",
12394
+ "GET",
12395
+ "Discovery",
12396
+ "v1",
12397
+ "services"
12398
+ ],
12399
+ "maturity": "stable",
12400
+ "layer": "interface",
12401
+ "audiences": [
12402
+ "integrator",
12403
+ "service-agent",
12404
+ "coding-agent"
12405
+ ],
12406
+ "interfaces": [
12407
+ {
12408
+ "type": "rest",
12409
+ "target": "GET /v1/services"
12410
+ },
12411
+ {
12412
+ "type": "openapi",
12413
+ "target": "/openapi.json"
12414
+ }
12415
+ ],
12416
+ "references": [
12417
+ {
12418
+ "type": "source",
12419
+ "target": "packages/cli/src/api/openapi.ts",
12420
+ "relation": "openapi-source"
12421
+ },
12422
+ {
12423
+ "type": "documentation",
12424
+ "target": "docs/reference/rest-api.md",
12425
+ "relation": "endpoint-inventory"
12426
+ }
12427
+ ],
12428
+ "methods": [
12429
+ "GET"
12430
+ ],
12431
+ "tags": [
12432
+ "Discovery"
12433
+ ],
12434
+ "operations": {
12435
+ "get": {
12436
+ "summary": "List all active daemon-owned REST services and their routes",
12437
+ "tags": [
12438
+ "Discovery"
12439
+ ],
12440
+ "security": [],
12441
+ "description": "Agent-readable service inventory generated from this OpenAPI document. Every entry includes lifecycle ownership, whether it depends on an interactive session, all registered routes, and a readiness/status endpoint when one exists. /listen and /hangup affect voice sessions only and do not own the REST daemon.",
12442
+ "responses": {
12443
+ "200": {
12444
+ "description": "Active daemon and complete service catalog"
12445
+ }
12446
+ }
12447
+ }
12448
+ },
12449
+ "source_of_truth": [
12450
+ "GET /openapi.json",
12451
+ "packages/cli/src/api/openapi.ts"
12452
+ ]
12453
+ },
12454
+ {
12455
+ "id": "api.v1-services-id",
12456
+ "kind": "api",
12457
+ "title": "/v1/services/{id}",
12458
+ "summary": "Get one daemon-owned REST service contract",
12459
+ "aliases": [
12460
+ "/v1/services/{id}"
12461
+ ],
12462
+ "keywords": [
12463
+ "rest",
12464
+ "openapi",
12465
+ "GET",
12466
+ "Discovery",
12467
+ "v1",
12468
+ "services",
12469
+ "{id}"
12470
+ ],
12471
+ "maturity": "stable",
12472
+ "layer": "interface",
12473
+ "audiences": [
12474
+ "integrator",
12475
+ "service-agent",
12476
+ "coding-agent"
12477
+ ],
12478
+ "interfaces": [
12479
+ {
12480
+ "type": "rest",
12481
+ "target": "GET /v1/services/{id}"
12482
+ },
12483
+ {
12484
+ "type": "openapi",
12485
+ "target": "/openapi.json"
12486
+ }
12487
+ ],
12488
+ "references": [
12489
+ {
12490
+ "type": "source",
12491
+ "target": "packages/cli/src/api/openapi.ts",
12492
+ "relation": "openapi-source"
12493
+ },
12494
+ {
12495
+ "type": "documentation",
12496
+ "target": "docs/reference/rest-api.md",
12497
+ "relation": "endpoint-inventory"
12498
+ }
12499
+ ],
12500
+ "methods": [
12501
+ "GET"
12502
+ ],
12503
+ "tags": [
12504
+ "Discovery"
12505
+ ],
12506
+ "operations": {
12507
+ "get": {
12508
+ "summary": "Get one daemon-owned REST service contract",
12509
+ "tags": [
12510
+ "Discovery"
12511
+ ],
12512
+ "security": [],
12513
+ "parameters": [
12514
+ {
12515
+ "name": "id",
12516
+ "in": "path",
12517
+ "required": true,
12518
+ "schema": {
12519
+ "type": "string"
12520
+ },
12521
+ "description": "Service id from GET /v1/services"
12522
+ }
12523
+ ],
12524
+ "responses": {
12525
+ "200": {
12526
+ "description": "Service lifecycle, availability, readiness, and routes"
12527
+ },
12528
+ "404": {
12529
+ "description": "Unknown service id"
12530
+ }
12531
+ }
12532
+ }
12533
+ },
12534
+ "source_of_truth": [
12535
+ "GET /openapi.json",
12536
+ "packages/cli/src/api/openapi.ts"
12537
+ ]
12538
+ },
12383
12539
  {
12384
12540
  "id": "api.v1-services-systemd",
12385
12541
  "kind": "api",
@@ -13663,7 +13819,7 @@
13663
13819
  "tags": [
13664
13820
  "Tools"
13665
13821
  ],
13666
- "description": "Returns each tool's name, class, description, JSON-schema parameters, security policy {categories, risk, requires_scope, off_device_allowed, rationale}, and per-tool endpoint hrefs. Filters: ?category=read|write|exec|network|hardware|agent|sensitive · ?scope=read|run|admin · ?risk=low|medium|high|critical. Pagination via ?limit=N&offset=N (default limit=50; pass limit=200 to see all).",
13822
+ "description": "Returns every discovered tool, including unavailable tools with an availability reason, plus name, class, description, JSON-schema parameters, direct_callable, security policy {categories, risk, requires_scope, off_device_allowed, rationale}, and per-tool endpoint hrefs. Every available built-in is direct-callable through the shared policy gate. Filters: ?category=read|write|exec|network|hardware|agent|sensitive · ?scope=read|run|admin · ?risk=low|medium|high|critical. Pagination via ?limit=N&offset=N (default limit=50; pass limit=200 to see all).",
13667
13823
  "responses": {
13668
13824
  "200": {
13669
13825
  "description": "Paginated tools with security metadata"
@@ -13853,7 +14009,7 @@
13853
14009
  "tags": [
13854
14010
  "Tools"
13855
14011
  ],
13856
- "description": "Body: {args: object, working_dir?: string}. The `args` key is canonical (Q4) — the JSON-schema in /v1/tools/{name} `parameters` describes what goes INSIDE the args wrapper. Returns ToolResult {success, output, llmContent?, error?, durationMs} plus security metadata. Auth gating: request scope (read/run/admin) must satisfy tool.requires_scope; non-loopback callers need admin scope unless tool.off_device_allowed=true. Anonymous loopback callers default to admin scope; anonymous remote callers default to read scope.",
14012
+ "description": "Body: {args: object, working_dir?: string}. The `args` key is canonical (Q4) — the JSON-schema in /v1/tools/{name} `parameters` describes what goes INSIDE the args wrapper. Every available built-in and registered external tool is callable here. Returns ToolResult {success, output, llmContent?, error?, durationMs} plus security metadata. Auth gating: request scope (read/run/admin) must satisfy tool.requires_scope; non-loopback callers need admin scope unless tool.off_device_allowed=true.",
13857
14013
  "parameters": [
13858
14014
  {
13859
14015
  "name": "name",
@@ -15989,6 +16145,352 @@
15989
16145
  "packages/cli/src/api/openapi.ts"
15990
16146
  ]
15991
16147
  },
16148
+ {
16149
+ "id": "api.v1-web-crawl",
16150
+ "kind": "api",
16151
+ "title": "/v1/web/crawl",
16152
+ "summary": "Inspect web-crawl availability, schema, and security policy; Crawl a website directly through the Omnius tool runtime",
16153
+ "aliases": [
16154
+ "/v1/web/crawl"
16155
+ ],
16156
+ "keywords": [
16157
+ "rest",
16158
+ "openapi",
16159
+ "GET",
16160
+ "POST",
16161
+ "Web",
16162
+ "Tools",
16163
+ "v1",
16164
+ "web",
16165
+ "crawl"
16166
+ ],
16167
+ "maturity": "stable",
16168
+ "layer": "interface",
16169
+ "audiences": [
16170
+ "integrator",
16171
+ "service-agent",
16172
+ "coding-agent"
16173
+ ],
16174
+ "interfaces": [
16175
+ {
16176
+ "type": "rest",
16177
+ "target": "GET /v1/web/crawl"
16178
+ },
16179
+ {
16180
+ "type": "rest",
16181
+ "target": "POST /v1/web/crawl"
16182
+ },
16183
+ {
16184
+ "type": "openapi",
16185
+ "target": "/openapi.json"
16186
+ }
16187
+ ],
16188
+ "references": [
16189
+ {
16190
+ "type": "source",
16191
+ "target": "packages/cli/src/api/openapi.ts",
16192
+ "relation": "openapi-source"
16193
+ },
16194
+ {
16195
+ "type": "documentation",
16196
+ "target": "docs/reference/rest-api.md",
16197
+ "relation": "endpoint-inventory"
16198
+ }
16199
+ ],
16200
+ "methods": [
16201
+ "GET",
16202
+ "POST"
16203
+ ],
16204
+ "tags": [
16205
+ "Web",
16206
+ "Tools"
16207
+ ],
16208
+ "operations": {
16209
+ "get": {
16210
+ "summary": "Inspect web-crawl availability, schema, and security policy",
16211
+ "tags": [
16212
+ "Web",
16213
+ "Tools"
16214
+ ],
16215
+ "responses": {
16216
+ "200": {
16217
+ "description": "web_crawl capability metadata"
16218
+ }
16219
+ }
16220
+ },
16221
+ "post": {
16222
+ "summary": "Crawl a website directly through the Omnius tool runtime",
16223
+ "tags": [
16224
+ "Web",
16225
+ "Tools"
16226
+ ],
16227
+ "description": "Stable alias for POST /v1/tools/web_crawl/call. Shared tool security applies; browser-backed crawling requires the runtime dependencies reported by GET.",
16228
+ "responses": {
16229
+ "200": {
16230
+ "description": "ToolResult crawl response"
16231
+ },
16232
+ "403": {
16233
+ "description": "Policy denied"
16234
+ },
16235
+ "500": {
16236
+ "description": "Crawl failed"
16237
+ }
16238
+ }
16239
+ }
16240
+ },
16241
+ "source_of_truth": [
16242
+ "GET /openapi.json",
16243
+ "packages/cli/src/api/openapi.ts"
16244
+ ]
16245
+ },
16246
+ {
16247
+ "id": "api.v1-web-fetch",
16248
+ "kind": "api",
16249
+ "title": "/v1/web/fetch",
16250
+ "summary": "Inspect web-fetch availability, schema, and security policy; Fetch a URL directly through the Omnius tool runtime",
16251
+ "aliases": [
16252
+ "/v1/web/fetch"
16253
+ ],
16254
+ "keywords": [
16255
+ "rest",
16256
+ "openapi",
16257
+ "GET",
16258
+ "POST",
16259
+ "Web",
16260
+ "Tools",
16261
+ "v1",
16262
+ "web",
16263
+ "fetch"
16264
+ ],
16265
+ "maturity": "stable",
16266
+ "layer": "interface",
16267
+ "audiences": [
16268
+ "integrator",
16269
+ "service-agent",
16270
+ "coding-agent"
16271
+ ],
16272
+ "interfaces": [
16273
+ {
16274
+ "type": "rest",
16275
+ "target": "GET /v1/web/fetch"
16276
+ },
16277
+ {
16278
+ "type": "rest",
16279
+ "target": "POST /v1/web/fetch"
16280
+ },
16281
+ {
16282
+ "type": "openapi",
16283
+ "target": "/openapi.json"
16284
+ }
16285
+ ],
16286
+ "references": [
16287
+ {
16288
+ "type": "source",
16289
+ "target": "packages/cli/src/api/openapi.ts",
16290
+ "relation": "openapi-source"
16291
+ },
16292
+ {
16293
+ "type": "documentation",
16294
+ "target": "docs/reference/rest-api.md",
16295
+ "relation": "endpoint-inventory"
16296
+ }
16297
+ ],
16298
+ "methods": [
16299
+ "GET",
16300
+ "POST"
16301
+ ],
16302
+ "tags": [
16303
+ "Web",
16304
+ "Tools"
16305
+ ],
16306
+ "operations": {
16307
+ "get": {
16308
+ "summary": "Inspect web-fetch availability, schema, and security policy",
16309
+ "tags": [
16310
+ "Web",
16311
+ "Tools"
16312
+ ],
16313
+ "responses": {
16314
+ "200": {
16315
+ "description": "web_fetch capability metadata"
16316
+ }
16317
+ }
16318
+ },
16319
+ "post": {
16320
+ "summary": "Fetch a URL directly through the Omnius tool runtime",
16321
+ "tags": [
16322
+ "Web",
16323
+ "Tools"
16324
+ ],
16325
+ "description": "Stable alias for POST /v1/tools/web_fetch/call. Body: {args:{url:string}}. Shared tool security and network-egress policy apply.",
16326
+ "responses": {
16327
+ "200": {
16328
+ "description": "ToolResult fetch response"
16329
+ },
16330
+ "403": {
16331
+ "description": "Policy denied"
16332
+ },
16333
+ "500": {
16334
+ "description": "Fetch failed"
16335
+ }
16336
+ }
16337
+ }
16338
+ },
16339
+ "source_of_truth": [
16340
+ "GET /openapi.json",
16341
+ "packages/cli/src/api/openapi.ts"
16342
+ ]
16343
+ },
16344
+ {
16345
+ "id": "api.v1-web-search",
16346
+ "kind": "api",
16347
+ "title": "/v1/web/search",
16348
+ "summary": "Inspect web-search availability, schema, and security policy; Search the web directly through the Omnius tool runtime",
16349
+ "aliases": [
16350
+ "/v1/web/search"
16351
+ ],
16352
+ "keywords": [
16353
+ "rest",
16354
+ "openapi",
16355
+ "GET",
16356
+ "POST",
16357
+ "Web",
16358
+ "Tools",
16359
+ "v1",
16360
+ "web",
16361
+ "search"
16362
+ ],
16363
+ "maturity": "stable",
16364
+ "layer": "interface",
16365
+ "audiences": [
16366
+ "integrator",
16367
+ "service-agent",
16368
+ "coding-agent"
16369
+ ],
16370
+ "interfaces": [
16371
+ {
16372
+ "type": "rest",
16373
+ "target": "GET /v1/web/search"
16374
+ },
16375
+ {
16376
+ "type": "rest",
16377
+ "target": "POST /v1/web/search"
16378
+ },
16379
+ {
16380
+ "type": "openapi",
16381
+ "target": "/openapi.json"
16382
+ }
16383
+ ],
16384
+ "references": [
16385
+ {
16386
+ "type": "source",
16387
+ "target": "packages/cli/src/api/openapi.ts",
16388
+ "relation": "openapi-source"
16389
+ },
16390
+ {
16391
+ "type": "documentation",
16392
+ "target": "docs/reference/rest-api.md",
16393
+ "relation": "endpoint-inventory"
16394
+ }
16395
+ ],
16396
+ "methods": [
16397
+ "GET",
16398
+ "POST"
16399
+ ],
16400
+ "tags": [
16401
+ "Web",
16402
+ "Tools"
16403
+ ],
16404
+ "operations": {
16405
+ "get": {
16406
+ "summary": "Inspect web-search availability, schema, and security policy",
16407
+ "tags": [
16408
+ "Web",
16409
+ "Tools"
16410
+ ],
16411
+ "description": "Stable alias for GET /v1/tools/web_search.",
16412
+ "responses": {
16413
+ "200": {
16414
+ "description": "web_search capability metadata"
16415
+ },
16416
+ "404": {
16417
+ "description": "web_search runtime unavailable"
16418
+ }
16419
+ }
16420
+ },
16421
+ "post": {
16422
+ "summary": "Search the web directly through the Omnius tool runtime",
16423
+ "tags": [
16424
+ "Web",
16425
+ "Tools"
16426
+ ],
16427
+ "description": "Stable alias for POST /v1/tools/web_search/call. Uses the same auth, profile, origin, timeout, output-size, and audit policy. Body example: {\"args\":{\"query\":\"CUDA ASR on Jetson\",\"num_results\":5,\"provider\":\"duckduckgo\"}}. No search API key is required.",
16428
+ "requestBody": {
16429
+ "required": true,
16430
+ "content": {
16431
+ "application/json": {
16432
+ "schema": {
16433
+ "type": "object",
16434
+ "required": [
16435
+ "args"
16436
+ ],
16437
+ "properties": {
16438
+ "args": {
16439
+ "type": "object",
16440
+ "required": [
16441
+ "query"
16442
+ ],
16443
+ "properties": {
16444
+ "query": {
16445
+ "type": "string"
16446
+ },
16447
+ "num_results": {
16448
+ "type": "integer",
16449
+ "minimum": 1
16450
+ },
16451
+ "provider": {
16452
+ "type": "string",
16453
+ "enum": [
16454
+ "duckduckgo"
16455
+ ]
16456
+ }
16457
+ }
16458
+ },
16459
+ "session_id": {
16460
+ "type": "string"
16461
+ },
16462
+ "profile": {
16463
+ "type": "string"
16464
+ },
16465
+ "timeout_ms": {
16466
+ "type": "integer"
16467
+ }
16468
+ }
16469
+ }
16470
+ }
16471
+ }
16472
+ },
16473
+ "responses": {
16474
+ "200": {
16475
+ "description": "ToolResult search response"
16476
+ },
16477
+ "400": {
16478
+ "description": "Invalid request"
16479
+ },
16480
+ "403": {
16481
+ "description": "Policy denied"
16482
+ },
16483
+ "500": {
16484
+ "description": "Search failed"
16485
+ }
16486
+ }
16487
+ }
16488
+ },
16489
+ "source_of_truth": [
16490
+ "GET /openapi.json",
16491
+ "packages/cli/src/api/openapi.ts"
16492
+ ]
16493
+ },
15992
16494
  {
15993
16495
  "id": "api.version",
15994
16496
  "kind": "api",
package/docs/DISCOVERY.md CHANGED
@@ -189,6 +189,8 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
189
189
  | `api.v1-scheduled-kill` | /v1/scheduled/kill | Kill a running scheduled job |
190
190
  | `api.v1-scheduled-reconcile` | /v1/scheduled/reconcile | Preview reconciliation of persisted and legacy scheduled jobs; Preview or apply scheduled-job reconciliation |
191
191
  | `api.v1-scheduled-status` | /v1/scheduled/status | Status of scheduled job runner |
192
+ | `api.v1-services` | /v1/services | List all active daemon-owned REST services and their routes |
193
+ | `api.v1-services-id` | /v1/services/{id} | Get one daemon-owned REST service contract |
192
194
  | `api.v1-services-systemd` | /v1/services/systemd | Systemd service status (where supported) |
193
195
  | `api.v1-services-systemd-unit` | /v1/services/systemd/{unit} | Perform an action on one user-level systemd unit |
194
196
  | `api.v1-sessions` | /v1/sessions | List Omnius task sessions |
@@ -228,6 +230,9 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
228
230
  | `api.v1-voice-transcribe-stream` | /v1/voice/transcribe/stream | Isolated final ASR over Server-Sent Events |
229
231
  | `api.v1-voice-tts` | /v1/voice/tts | Synthesize text to audio bytes |
230
232
  | `api.v1-voicechat-ws` | /v1/voicechat/ws | WebSocket — full-duplex voicechat (binary PCM + JSON control) |
233
+ | `api.v1-web-crawl` | /v1/web/crawl | Inspect web-crawl availability, schema, and security policy; Crawl a website directly through the Omnius tool runtime |
234
+ | `api.v1-web-fetch` | /v1/web/fetch | Inspect web-fetch availability, schema, and security policy; Fetch a URL directly through the Omnius tool runtime |
235
+ | `api.v1-web-search` | /v1/web/search | Inspect web-search availability, schema, and security policy; Search the web directly through the Omnius tool runtime |
231
236
  | `api.version` | /version | Package, API, and discovery contract versions |
232
237
 
233
238
  ## Capability