@hilbras/omninode 2.0.0-alpha.16 → 2.0.0-alpha.17

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/README.md CHANGED
@@ -18,7 +18,7 @@ existing intelligence; it does not try to become another model.
18
18
 
19
19
  ## Status
20
20
 
21
- **v2.0.0-alpha.16 — v2 Phase 16: Configuration v2**
21
+ **v2.0.0-alpha.17 — v2 Phase 17: Testing Expansion**
22
22
  (the reliability & interoperability line: architecture → execution →
23
23
  protocol → adapters → pipelines → providers → OmniHilbras → memory → reports) (the v2
24
24
  roadmap is [docs/ROADMAP_V2.md](docs/ROADMAP_V2.md); the v1 plan is complete:
@@ -31,6 +31,15 @@ for the plan and [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the design).
31
31
 
32
32
  ### What's new in v2 (so far)
33
33
 
34
+ - **Phase 17 — Testing Expansion**: an explicit, auditable **failure
35
+ matrix** covering every scenario the roadmap lists — provider
36
+ 429/500/401, model unavailable, network loss, malformed gateway
37
+ responses, agent crash/timeout/missing executable, malformed JSONL,
38
+ huge output, corrupted persistence, duplicate execution, partial
39
+ pipeline failure, Remembera/OmniHilbras unavailable — plus duplicate
40
+ configuration names now rejected instead of silently shadowing, and
41
+ protocol diagnostics surfaced on task results. Details:
42
+ [TESTING.md](docs/TESTING.md).
34
43
  - **Phase 16 — Configuration v2**: explicit precedence (CLI → env →
35
44
  project file → user file → profile overlay → defaults), named
36
45
  **profiles** (`development`/`production`/`testing`), `OMNINODE_*`
@@ -394,7 +403,7 @@ required for the core engine.
394
403
  - [Architecture](docs/ARCHITECTURE.md) — module map, workflow, local state
395
404
  - [Security model](docs/SECURITY.md) — secrets, process execution, env isolation, audit log
396
405
  - [API stability policy](docs/API_STABILITY.md) and [public API inventory](docs/API.md)
397
- - [Configuration](docs/CONFIGURATION.md) · [CLI guide](docs/CLI.md) · [Agent Protocol v2 spec](docs/PROTOCOL.md) · [Providers](docs/PROVIDERS.md) · [Memory](docs/MEMORY.md) · [Reports](docs/REPORTS.md) · [Persistence](docs/PERSISTENCE.md) · [Deprecations](docs/DEPRECATIONS.md) · [Changelog](CHANGELOG.md) · [v2 roadmap](docs/ROADMAP_V2.md)
406
+ - [Configuration](docs/CONFIGURATION.md) · [Testing & failure matrix](docs/TESTING.md) · [CLI guide](docs/CLI.md) · [Agent Protocol v2 spec](docs/PROTOCOL.md) · [Providers](docs/PROVIDERS.md) · [Memory](docs/MEMORY.md) · [Reports](docs/REPORTS.md) · [Persistence](docs/PERSISTENCE.md) · [Deprecations](docs/DEPRECATIONS.md) · [Changelog](CHANGELOG.md) · [v2 roadmap](docs/ROADMAP_V2.md)
398
407
  - [Example project](examples/demo/) — a runnable end-to-end demo (`./demo.sh`)
399
408
 
400
409
  Prefer a container? `docker build -t omninode .` then
package/dist/cli/index.js CHANGED
@@ -23,7 +23,7 @@ import { realpathSync } from "fs";
23
23
  import { Command } from "commander";
24
24
 
25
25
  // src/version.ts
26
- var OMNINODE_VERSION = "2.0.0-alpha.16";
26
+ var OMNINODE_VERSION = "2.0.0-alpha.17";
27
27
 
28
28
  // src/cli/exit-codes.ts
29
29
  var EXIT = {
@@ -346,6 +346,7 @@ function loadConfigDetailed(options = {}) {
346
346
  { details: { issues } }
347
347
  );
348
348
  }
349
+ assertUniqueNames(parsed.data);
349
350
  return {
350
351
  config: toAppConfig(parsed.data),
351
352
  sources: {
@@ -357,6 +358,26 @@ function loadConfigDetailed(options = {}) {
357
358
  }
358
359
  };
359
360
  }
361
+ function assertUniqueNames(data) {
362
+ const groups = [
363
+ ["provider", data.project.providers.map((p) => p.name)],
364
+ ["agent", data.project.agents.map((a) => a.name)],
365
+ ["role", data.project.roles.map((r) => r.id)],
366
+ ["pipeline", data.project.pipelines.map((p) => p.id)]
367
+ ];
368
+ for (const [kind, names] of groups) {
369
+ const seen = /* @__PURE__ */ new Set();
370
+ for (const name of names) {
371
+ if (seen.has(name)) {
372
+ throw new ConfigError(
373
+ "CONFIG_INVALID",
374
+ `Duplicate ${kind} name "${name}" \u2014 every ${kind} must have a unique name.`
375
+ );
376
+ }
377
+ seen.add(name);
378
+ }
379
+ }
380
+ }
360
381
  function readConfigDocument(path2, optionsEnv) {
361
382
  const raw = readFileSync(path2, "utf8");
362
383
  const secretFindings = scanForInlineSecrets(raw);
@@ -2479,6 +2500,7 @@ var TaskEngine = class {
2479
2500
  const result = {
2480
2501
  ...output.summary !== void 0 ? { summary: output.summary } : {},
2481
2502
  ...output.reports !== void 0 && output.reports.length > 0 ? { reports: output.reports } : {},
2503
+ ...output.protocol !== void 0 ? { protocol: output.protocol } : {},
2482
2504
  // Keep the verbatim output (bounded) for report extraction and audit.
2483
2505
  ...output.rawOutput !== void 0 && output.rawOutput.length > 0 ? { rawOutput: output.rawOutput.slice(0, 1e4) } : {},
2484
2506
  ...output.error !== void 0 ? { error: output.error } : {},