{
  "name": "equaxis-agent",
  "version": "0.3.2",
  "private": false,
  "node": ">=22.19.0",
  "pi": "0.83.0",
  "gates": {
    "verify": "verify:full",
    "protocols": "test:protocols",
    "memory": "test:memory",
    "evaluation": "test:eval"
  },
  "gateResults": {
    "verifyFull": {
      "name": "verify:full",
      "ok": true,
      "status": 0,
      "detail": "> equaxis-agent@0.3.2 verify:full\n> npm run verify && npm run test:protocols && npm run test:memory && npm run test:eval\n\n\n> equaxis-agent@0.3.2 verify\n> npm run check && npm test\n\n\n> equaxis-agent@0.3.2 check\n> tsc --noEmit\n\n\n> equaxis-agent@0.3.2 test\n> node --test tests/*.test.mjs\n\n✔ advisor is optional and disabled by default (1.1553ms)\n✔ advisor triggers on high-risk tools and complex plans (0.9533ms)\n✔ advisor request redacts sensitive fields and remains recommendation-only (0.6208ms)\n✔ consultAdvisor calls a supplied client only when triggered (0.2553ms)\n✔ inspects a TypeScript symbol and reports rename capability (338.4907ms)\n✔ previews and applies a hash-checked AST rename (353.5242ms)\n✔ rejects stale AST rename applications and invalid identifiers (301.3309ms)\n✔ previews and applies workspace-scoped AST renames across files (409.3861ms)\n✔ rejects workspace AST apply when any affected file changed (223.5878ms)\n✔ formats a recognizable Equaxis CLI mark (0.7619ms)\n✔ does not show the banner for JSON or non-interactive output (0.1997ms)\n✔ previews a legacy config migration without writing (5.2567ms)\n✔ writes the migrated current schema when requested (2.5611ms)\n✔ merges nested reliability defaults before validation (4.1238ms)\n✔ rejects unsafe or nonsensical reliability settings (2.7045ms)\n✔ rejects invalid memory bounds and external roots (3.0265ms)\n✔ merges and validates memory governance configuration (4.7874ms)\n✔ merges and validates runtime gate configuration (2.9607ms)\n✔ validates optional advisor configuration (2.6531ms)\n✔ migrates legacy unified config aliases before validation (2.1326ms)\n✔ rejects unsupported future unified config versions (2.5594ms)\n✔ uses the unified config as the source of truth (2.2479ms)\n✔ requires explicit roots for automatic external approval (2.5326ms)\n✔ merges and validates evaluation configuration (4.4399ms)\n✔ merges and validates subagent runtime configuration (5.4966ms)\n✔ merges and validates protocol adapter configuration (3.1744ms)\n✔ selects high relevance context under a hard budget (0.8504ms)\n✔ preserves required context and reports budget overflow (0.1515ms)\n✔ builds compact skill manifests instead of loading full skill bodies (0.1697ms)\n✔ discovers namespaced tools across MCP, CLI and HTTP (14.238ms)\n✔ refresh atomically replaces a source generation (0.5197ms)\n✔ evicts expired tools and invokes through the owning adapter (0.6355ms)\n✔ publishes refresh events for automatic Agent tool injection (0.3412ms)\n✔ initializes a debug adapter and tracks initialized events (2.1339ms)\n✔ sets breakpoints and caches returned adapter breakpoints (1.3412ms)\n✔ requests threads, stack frames, scopes, variables and evaluation (0.6095ms)\n✔ tracks stopped output thread termination and exit events (0.3225ms)\n✔ rejects failed DAP responses (0.539ms)\n✔ times out an unresponsive DAP request (11.7064ms)\n✔ reports a structured session state (0.5795ms)\n✔ doctor reports actionable failures without exposing credential contents (7.1964ms)\n✔ startup preflight reads startup-facing config from the project root even when cwd differs (4.644ms)\n✔ doctor checks protocol tool declarations (16.037ms)\n✔ exports EvalLoop events as Harbor-compatible EvaluationRecord JSONL (12.1722ms)\n✔ normalizes model tool capability outcome records (3.5369ms)\n✔ aggregates outcomes by model tool and capability (10.1975ms)\n✔ filters snapshots by capability (0.3147ms)\n✔ persists and restores eval events and candidate provenance (3.9737ms)\n✔ deterministically decides A/B outcomes (0.523ms)\n✔ normalizes candidate changes with version provenance (0.178ms)\n✔ collectEvalEventsFromTraceDir reads rotated trace archives newest-last (3.3689ms)\n✔ createEvalLoopFromTrace merges trace facts with the offline ledger and dedupes by traceId (5.0093ms)\n✔ createEvalLoopFromTrace with persist disabled keeps trace-only facts (3.2973ms)\n✔ matches the supported Pi compatibility range (0.7894ms)\n✔ rejects missing dependencies and cycles in the extension graph (3.2309ms)\n✔ reports optional extension load failure as degradation (0.4663ms)\n✔ detects a loaded extension that violates its declared capabilities (0.1954ms)\n✔ selects extension paths from manifest and preserves fatal contracts (0.5049ms)\n✔ validates and loads the repository extension contracts against Pi (944.6719ms)\n✔ compares extension capability snapshots across upgrades (0.1691ms)\n✔ collects registered capabilities without exposing implementation details (0.13ms)\n✔ provides shared config, trace, diagnostics and status services (7.1293ms)\n✔ reconfigures services for a replacement session workspace (3.3816ms)\n✔ dashboard slash command renders runtime status without model mediation (850.0634ms)\n✔ loads as a real Pi extension and blocks high-risk calls without approval UI (14.4799ms)\n✔ keeps raw-secret blocking and trace redaction active in audit mode (6.397ms)\n✔ blocks semantically invalid arguments before tool execution (6.3214ms)\n✔ blocks stale edit calls before tool execution (6.3651ms)\n✔ records runtime eval telemetry for completed tool calls (6.8703ms)\n✔ exhausts repeated repairs for the same invalid field (6.3586ms)\n✔ loads Equaxis reliability and memory extensions together (424.6221ms)\n✔ memory extension exposes deterministic reflect tool (4.4317ms)\n✔ protocol tools extension exposes working advisor lsp and dap probes (6.105ms)\n✔ AST extension previews and applies a hash-checked rename (375.6156ms)\n✔ headless high-risk call is approved via the web approval queue (9.1745ms)\n✔ initializes an LSP server and sends initialized notification (1.815ms)\n✔ requests definitions and caches diagnostics (0.4153ms)\n✔ rejects failed LSP requests (1.2279ms)\n✔ times out an unresponsive LSP request (11.1351ms)\n✔ normalizes MCP text, structured content and resources (1.5792ms)\n✔ normalizes MCP errors without losing the error text (0.148ms)\n✔ adapter injects server/tool/request identity (0.2045ms)\n✔ implements MCP initialize and tools/list (1.5056ms)\n✔ executes tools with structured content and isolates tool errors (0.3303ms)\n✔ rejects calls before initialization and unknown tools (1.9767ms)\n✔ runs the vendored Python memory core through the persistent bridge (1338.4865ms)\n✔ forces UTF-8 stdio for the Python memory bridge (0.6319ms)\n✔ parses escaped Unicode responses from the Python memory bridge (0.797ms)\n✔ supports a runtime bridge outside the task working directory (0.1613ms)\n✔ buildMemoryExtractionPrompt embeds history entries (0.8559ms)\n✔ parseMemoryExtractionResponse accepts fences and prefixes (1.069ms)\n✔ parseMemoryExtractionResponse rejects invalid payloads (0.3745ms)\n✔ parseMemoryExtractionResponse trims and skips malformed items (0.1796ms)\n✔ consolidateMemoryHistory stores memories and facts then advances cursor (0.4311ms)\n✔ consolidateMemoryHistory skips empty history without calling the model (0.1086ms)\n✔ consolidateMemoryHistory does not advance cursor when storage fails (0.318ms)\n✔ plans retention deletes without touching pinned or profile memories (1.9849ms)\n✔ redacts governed memory content recursively (1.6224ms)\n✔ rejects concurrent memory governance writes while a lock is held (3.1505ms)\n✔ summarizes high-volume memory governance runs (3.5846ms)\n✔ applies memory governance to JSONL only when explicitly requested (3.2406ms)\n✔ routes a user deterministically with rendezvous hashing (1.3978ms)\n✔ routes memory to hot, warm and cold tiers (0.4254ms)\n✔ builds stable idempotent memory ids (0.6286ms)\n✔ records mock calls and injects scripted response/error (1.6339ms)\n✔ supports deterministic error and duplicate-call injection (0.5567ms)\n✔ generates valid, missing, wrong-type and numeric boundary cases (1.8622ms)\n✔ classifies destructive bash as high risk (1.4453ms)\n✔ classifies package installation as medium risk (0.415ms)\n✔ protects sensitive file paths (0.3282ms)\n✔ detects writes outside workspace (6.569ms)\n✔ auto-approves only explicitly rooted external edits (3.5407ms)\n✔ denies external edits when configured to deny (1.2666ms)\n✔ resolves symlinked paths before workspace boundary checks (10.73ms)\n✔ rejects malformed semantic tool arguments (0.4503ms)\n✔ unregistered tools are not classified as low risk (0.2223ms)\n✔ blocks raw secrets before approval (0.1955ms)\n✔ blocks indirect shell writes to protected paths (0.9436ms)\n✔ enforces per-turn tool limits (0.1181ms)\n✔ classifies web crawling as external network access (0.0667ms)\n✔ classifies protocol tools as low-risk local probes (0.0634ms)\n✔ governs AST inspection preview and application (0.7426ms)\n✔ governs durable memory mutations (0.2398ms)\n✔ install command runs dependency setup and doctor (31.4723ms)\n✔ release command verifies before writing a manifest (14.4312ms)\n✔ exercise command runs install update release dry-runs across platforms (27.7284ms)\n✔ dry-run update reports planned work without spawning npm (15.1431ms)\n✔ assertPackFiles requires .pi runtime files and rejects harbor jobs (0.6691ms)\n✔ packFilePaths parses npm pack --dry-run --json output (0.3987ms)\n✔ release command fails the package contents gate when .pi files are missing (13.6345ms)\n✔ reports unconfigured protocol adapters as skipped (0.7888ms)\n✔ discovers configured adapters without making them mandatory (0.2081ms)\n✔ runs the protocol regression test set and writes a passing trace (7.0495ms)\n✔ includes protocol adapter discovery in regression traces when config is provided (3.1629ms)\n✔ preserves redacted protocol failure diagnostics (3.6954ms)\n✔ parses partial and concatenated Content-Length frames (2.4542ms)\n✔ reports malformed frames and stderr without throwing (0.7303ms)\n✔ spawns a real stdio protocol process and closes it (72.0388ms)\n✔ derives evidence-backed lessons from run failures (1.9961ms)\n✔ does not invent lessons for a clean run (0.1724ms)\n✔ resolves registered agent resources with evidence and audit trace (2.8324ms)\n✔ denies unknown schemes and unapproved authorities (0.6575ms)\n✔ reads artifact resources without allowing workspace escape (6.5582ms)\n✔ resolves named runtime artifacts (4.4332ms)\n✔ default registry resolves in-memory agent and history providers (0.4011ms)\n✔ parses and normalizes supported resource URI schemes (1.4636ms)\n✔ creates stable URIs with encoded path segments and sorted query keys (0.1577ms)\n✔ rejects unsupported or malformed resource URIs (0.2357ms)\n✔ normalizes plain file paths when a workspace is supplied (1.7457ms)\n✔ distinguishes transport success from semantically complete result (0.8568ms)\n✔ requires evidence when a result is used for grounded answers (1.0325ms)\n✔ middleware turns incomplete output into a structured execution failure (0.6601ms)\n✔ builds a runtime dashboard from eval events versions and runtime files (16.8985ms)\n✔ passes runtime gates when all metrics meet thresholds (0.9013ms)\n✔ fails runtime gates deterministically on regressions and missing metrics (0.2407ms)\n✔ isolated env keeps only allowed non-secret variables (0.8445ms)\n✔ runtime isolation creates workspace-local output directories (6.1239ms)\n✔ runtime isolation description follows subagent config (0.7352ms)\n✔ profile extension sets follow the architecture reduction directive (1.372ms)\n✔ explicit extensions.enabled/disabled override the profile (0.1721ms)\n✔ unknown profiles are rejected and profile constants are stable (0.35ms)\n✔ profile sets never include the fatal core extensions twice (0.1212ms)\n✔ accepts a bounded, explicit tool contract (1.4081ms)\n✔ flags missing required fields, extra properties and write metadata (0.2739ms)\n✔ warns when a tool becomes a generic mega-tool (0.2264ms)\n✔ creates skill version candidates without writing SKILL.md (6.7623ms)\n✔ applies and rolls back skill candidates through the version store (9.6791ms)\n✔ rollback restores the previous skill content (10.3275ms)\n✔ parses frontmatter name, description, triggers, and body (1.8089ms)\n✔ falls back to the parent directory name when no frontmatter is present (0.1988ms)\n✔ loads every SKILL.md recursively under a directory (4.5978ms)\n✔ returns an empty array when the directory does not exist (0.1676ms)\n✔ scores name matches above trigger and description matches (1.412ms)\n✔ selects only relevant skills under a token budget (0.5809ms)\n✔ respects a hard token budget by omitting low-priority skills (8.8571ms)\n✔ renders a skill as an injectable block with baseDir reference (0.3246ms)\n✔ round-trips serialize then write then reload (6.2322ms)\n✔ derives a skill only from evidence-backed lessons (0.6604ms)\n✔ does not invent a skill when lessons lack evidence (0.1096ms)\n✔ returns null for an empty or lesson-free run (0.9799ms)\n✔ accepts fresh exact replacements (4.0428ms)\n✔ detects stale hash mismatches before editing (1.6211ms)\n✔ detects missing and ambiguous oldText (1.5203ms)\n✔ ignores non-edit tools (0.1327ms)\n✔ spawns Pi JSON mode with the prompt as the final argument (4.4782ms)\n✔ resolves ok with captured stdout on clean exit (6.1724ms)\n✔ rejects when the pi json subprocess exits nonzero and spills output (6.1866ms)\n✔ rejects immediately when the prompt is missing (0.6246ms)\n✔ isolates subagent cwd, env, and output directory by default (4.3369ms)\n✔ runs subagents through queued, running and completed states (2.3682ms)\n✔ respects max concurrency and starts queued agents later (21.8422ms)\n✔ cancels queued and running subagents (0.5828ms)\n✔ fails subagents whose result violates schema (1.6114ms)\n✔ retries failed subagents within their retry budget (0.5302ms)\n✔ fails subagents when retry budget is exhausted (0.3256ms)\n✔ times out subagents that exceed their timeout budget (100.5124ms)\n✔ fails blocked dependents when a dependency fails (0.6717ms)\n✔ holds a dependent subagent blocked until its dependency completes (0.3081ms)\n✔ rejects unknown dependencies at spawn time (0.2998ms)\n✔ schedules a DAG running independent nodes in parallel and dependents after (0.3966ms)\n✔ delivers and drains peer messages between subagents (0.1938ms)\n▶ cancels a blocked subagent waiting on dependencies\n  ✔ TypeBox result schema validates nested arrays and enums (0.9441ms)\n  ✔ timeout is terminal even with a retry budget (100.1366ms)\n✔ cancels a blocked subagent waiting on dependencies (101.5666ms)\n✔ persists subagent snapshots and restores settled task status (8.5341ms)\n✔ writes state transition events and ignores corrupt snapshots (3.9499ms)\n✔ rejects subagent state paths outside the workspace (0.7565ms)\n✔ DAG: dependent task blocks then runs after its dependency completes (9.8722ms)\n✔ persists events and snapshots, restores completed work on a new runtime (4.4679ms)\n✔ non-terminal snapshots restore as failed with a reason (no silent drop) (2.6538ms)\n✔ pi json executor spawns the configured entry and returns its output (41.9574ms)\n✔ retrieves a small ranked candidate set instead of exposing the whole catalog (13.7428ms)\n✔ namespace filtering removes unrelated candidates (0.4591ms)\n✔ empty query returns deterministic top candidates (0.9311ms)\n✔ finds protocol advisor and reflection product tools (0.8059ms)\n✔ toolDescriptor normalizes name namespace risk and contracts (1.3318ms)\n✔ createToolInvocation builds a stable invocation envelope (0.2209ms)\n✔ createToolOutcome distinguishes success from failure with retryable (0.1804ms)\n✔ riskMetadataFromPolicy maps policy classifications (0.1509ms)\n✔ contract version is stable (0.9527ms)\n✔ runs independent tasks with a bounded worker pool (35.1242ms)\n✔ propagates parent cancellation to running nodes (13.8378ms)\n✔ deduplicates completed work with a stable idempotency key (0.8019ms)\n✔ runs compensators in reverse order after a later failure (1.6204ms)\n✔ can add tasks after a wave through dynamic replanning (0.569ms)\n✔ does not treat transport success as usable business output (0.875ms)\n✔ bounds retries for the same tool error and field (0.8128ms)\n✔ non-retryable validation never becomes retryable (0.1977ms)\n✔ parallelizes independent reads and respects dependencies (9.212ms)\n✔ serializes side effects even when independent (0.2117ms)\n✔ isolates high-risk tasks and rejects cycles (0.5036ms)\n✔ recursively redacts credential fields and strings (1.1633ms)\n✔ rotates JSONL traces with bounded retention (5.3725ms)\n✔ writes and lists versioned candidate artifacts (6.6019ms)\n✔ rejects version store paths outside the workspace (1.8923ms)\n✔ extracts title, readable text, and absolute links from HTML (1.9462ms)\n✔ blocks localhost and private network targets (5.3588ms)\n✔ normalizes crawl options within configured bounds (0.2671ms)\n✔ crawls public same-origin pages with a provided fetch implementation (18.279ms)\n✔ blocks redirects to private or local addresses before following them (0.7471ms)\nℹ tests 240\nℹ suites 0\nℹ pass 240\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 5246.3316\n\n> equaxis-agent@0.3.2 test:protocols\n> node scripts/test-protocols.mjs\n\nProtocol regression passed\nTrace: D:\\test\\mianshi\\equaxis-agent\\.pi\\runtime\\protocols\\traces.jsonl\n\n> equaxis-agent@0.3.2 test:memory\n> python bridge/run_memory_tests.py\n\n........................................................................ [ 51%]\r\n....................................................................     [100%]\r\n============================== warnings summary ===============================\r\nC:\\Users\\32032\\AppData\\Roaming\\Python\\Python314\\site-packages\\chromadb\\telemetry\\opentelemetry\\__init__.py:128\r\n  C:\\Users\\32032\\AppData\\Roaming\\Python\\Python314\\site-packages\\chromadb\\telemetry\\opentelemetry\\__init__.py:128: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead\r\n    if asyncio.iscoroutinefunction(f):\r\n\r\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\r\n140 passed, 1 warning in 9.70s\r\n\n> equaxis-agent@0.3.2 test:eval\n> python -B -m unittest discover -s harbor_eval -p \"test_*.py\"",
      "stdout": "> equaxis-agent@0.3.2 verify:full\n> npm run verify && npm run test:protocols && npm run test:memory && npm run test:eval\n\n\n> equaxis-agent@0.3.2 verify\n> npm run check && npm test\n\n\n> equaxis-agent@0.3.2 check\n> tsc --noEmit\n\n\n> equaxis-agent@0.3.2 test\n> node --test tests/*.test.mjs\n\n✔ advisor is optional and disabled by default (1.1553ms)\n✔ advisor triggers on high-risk tools and complex plans (0.9533ms)\n✔ advisor request redacts sensitive fields and remains recommendation-only (0.6208ms)\n✔ consultAdvisor calls a supplied client only when triggered (0.2553ms)\n✔ inspects a TypeScript symbol and reports rename capability (338.4907ms)\n✔ previews and applies a hash-checked AST rename (353.5242ms)\n✔ rejects stale AST rename applications and invalid identifiers (301.3309ms)\n✔ previews and applies workspace-scoped AST renames across files (409.3861ms)\n✔ rejects workspace AST apply when any affected file changed (223.5878ms)\n✔ formats a recognizable Equaxis CLI mark (0.7619ms)\n✔ does not show the banner for JSON or non-interactive output (0.1997ms)\n✔ previews a legacy config migration without writing (5.2567ms)\n✔ writes the migrated current schema when requested (2.5611ms)\n✔ merges nested reliability defaults before validation (4.1238ms)\n✔ rejects unsafe or nonsensical reliability settings (2.7045ms)\n✔ rejects invalid memory bounds and external roots (3.0265ms)\n✔ merges and validates memory governance configuration (4.7874ms)\n✔ merges and validates runtime gate configuration (2.9607ms)\n✔ validates optional advisor configuration (2.6531ms)\n✔ migrates legacy unified config aliases before validation (2.1326ms)\n✔ rejects unsupported future unified config versions (2.5594ms)\n✔ uses the unified config as the source of truth (2.2479ms)\n✔ requires explicit roots for automatic external approval (2.5326ms)\n✔ merges and validates evaluation configuration (4.4399ms)\n✔ merges and validates subagent runtime configuration (5.4966ms)\n✔ merges and validates protocol adapter configuration (3.1744ms)\n✔ selects high relevance context under a hard budget (0.8504ms)\n✔ preserves required context and reports budget overflow (0.1515ms)\n✔ builds compact skill manifests instead of loading full skill bodies (0.1697ms)\n✔ discovers namespaced tools across MCP, CLI and HTTP (14.238ms)\n✔ refresh atomically replaces a source generation (0.5197ms)\n✔ evicts expired tools and invokes through the owning adapter (0.6355ms)\n✔ publishes refresh events for automatic Agent tool injection (0.3412ms)\n✔ initializes a debug adapter and tracks initialized events (2.1339ms)\n✔ sets breakpoints and caches returned adapter breakpoints (1.3412ms)\n✔ requests threads, stack frames, scopes, variables and evaluation (0.6095ms)\n✔ tracks stopped output thread termination and exit events (0.3225ms)\n✔ rejects failed DAP responses (0.539ms)\n✔ times out an unresponsive DAP request (11.7064ms)\n✔ reports a structured session state (0.5795ms)\n✔ doctor reports actionable failures without exposing credential contents (7.1964ms)\n✔ startup preflight reads startup-facing config from the project root even when cwd differs (4.644ms)\n✔ doctor checks protocol tool declarations (16.037ms)\n✔ exports EvalLoop events as Harbor-compatible EvaluationRecord JSONL (12.1722ms)\n✔ normalizes model tool capability outcome records (3.5369ms)\n✔ aggregates outcomes by model tool and capability (10.1975ms)\n✔ filters snapshots by capability (0.3147ms)\n✔ persists and restores eval events and candidate provenance (3.9737ms)\n✔ deterministically decides A/B outcomes (0.523ms)\n✔ normalizes candidate changes with version provenance (0.178ms)\n✔ collectEvalEventsFromTraceDir reads rotated trace archives newest-last (3.3689ms)\n✔ createEvalLoopFromTrace merges trace facts with the offline ledger and dedupes by traceId (5.0093ms)\n✔ createEvalLoopFromTrace with persist disabled keeps trace-only facts (3.2973ms)\n✔ matches the supported Pi compatibility range (0.7894ms)\n✔ rejects missing dependencies and cycles in the extension graph (3.2309ms)\n✔ reports optional extension load failure as degradation (0.4663ms)\n✔ detects a loaded extension that violates its declared capabilities (0.1954ms)\n✔ selects extension paths from manifest and preserves fatal contracts (0.5049ms)\n✔ validates and loads the repository extension contracts against Pi (944.6719ms)\n✔ compares extension capability snapshots across upgrades (0.1691ms)\n✔ collects registered capabilities without exposing implementation details (0.13ms)\n✔ provides shared config, trace, diagnostics and status services (7.1293ms)\n✔ reconfigures services for a replacement session workspace (3.3816ms)\n✔ dashboard slash command renders runtime status without model mediation (850.0634ms)\n✔ loads as a real Pi extension and blocks high-risk calls without approval UI (14.4799ms)\n✔ keeps raw-secret blocking and trace redaction active in audit mode (6.397ms)\n✔ blocks semantically invalid arguments before tool execution (6.3214ms)\n✔ blocks stale edit calls before tool execution (6.3651ms)\n✔ records runtime eval telemetry for completed tool calls (6.8703ms)\n✔ exhausts repeated repairs for the same invalid field (6.3586ms)\n✔ loads Equaxis reliability and memory extensions together (424.6221ms)\n✔ memory extension exposes deterministic reflect tool (4.4317ms)\n✔ protocol tools extension exposes working advisor lsp and dap probes (6.105ms)\n✔ AST extension previews and applies a hash-checked rename (375.6156ms)\n✔ headless high-risk call is approved via the web approval queue (9.1745ms)\n✔ initializes an LSP server and sends initialized notification (1.815ms)\n✔ requests definitions and caches diagnostics (0.4153ms)\n✔ rejects failed LSP requests (1.2279ms)\n✔ times out an unresponsive LSP request (11.1351ms)\n✔ normalizes MCP text, structured content and resources (1.5792ms)\n✔ normalizes MCP errors without losing the error text (0.148ms)\n✔ adapter injects server/tool/request identity (0.2045ms)\n✔ implements MCP initialize and tools/list (1.5056ms)\n✔ executes tools with structured content and isolates tool errors (0.3303ms)\n✔ rejects calls before initialization and unknown tools (1.9767ms)\n✔ runs the vendored Python memory core through the persistent bridge (1338.4865ms)\n✔ forces UTF-8 stdio for the Python memory bridge (0.6319ms)\n✔ parses escaped Unicode responses from the Python memory bridge (0.797ms)\n✔ supports a runtime bridge outside the task working directory (0.1613ms)\n✔ buildMemoryExtractionPrompt embeds history entries (0.8559ms)\n✔ parseMemoryExtractionResponse accepts fences and prefixes (1.069ms)\n✔ parseMemoryExtractionResponse rejects invalid payloads (0.3745ms)\n✔ parseMemoryExtractionResponse trims and skips malformed items (0.1796ms)\n✔ consolidateMemoryHistory stores memories and facts then advances cursor (0.4311ms)\n✔ consolidateMemoryHistory skips empty history without calling the model (0.1086ms)\n✔ consolidateMemoryHistory does not advance cursor when storage fails (0.318ms)\n✔ plans retention deletes without touching pinned or profile memories (1.9849ms)\n✔ redacts governed memory content recursively (1.6224ms)\n✔ rejects concurrent memory governance writes while a lock is held (3.1505ms)\n✔ summarizes high-volume memory governance runs (3.5846ms)\n✔ applies memory governance to JSONL only when explicitly requested (3.2406ms)\n✔ routes a user deterministically with rendezvous hashing (1.3978ms)\n✔ routes memory to hot, warm and cold tiers (0.4254ms)\n✔ builds stable idempotent memory ids (0.6286ms)\n✔ records mock calls and injects scripted response/error (1.6339ms)\n✔ supports deterministic error and duplicate-call injection (0.5567ms)\n✔ generates valid, missing, wrong-type and numeric boundary cases (1.8622ms)\n✔ classifies destructive bash as high risk (1.4453ms)\n✔ classifies package installation as medium risk (0.415ms)\n✔ protects sensitive file paths (0.3282ms)\n✔ detects writes outside workspace (6.569ms)\n✔ auto-approves only explicitly rooted external edits (3.5407ms)\n✔ denies external edits when configured to deny (1.2666ms)\n✔ resolves symlinked paths before workspace boundary checks (10.73ms)\n✔ rejects malformed semantic tool arguments (0.4503ms)\n✔ unregistered tools are not classified as low risk (0.2223ms)\n✔ blocks raw secrets before approval (0.1955ms)\n✔ blocks indirect shell writes to protected paths (0.9436ms)\n✔ enforces per-turn tool limits (0.1181ms)\n✔ classifies web crawling as external network access (0.0667ms)\n✔ classifies protocol tools as low-risk local probes (0.0634ms)\n✔ governs AST inspection preview and application (0.7426ms)\n✔ governs durable memory mutations (0.2398ms)\n✔ install command runs dependency setup and doctor (31.4723ms)\n✔ release command verifies before writing a manifest (14.4312ms)\n✔ exercise command runs install update release dry-runs across platforms (27.7284ms)\n✔ dry-run update reports planned work without spawning npm (15.1431ms)\n✔ assertPackFiles requires .pi runtime files and rejects harbor jobs (0.6691ms)\n✔ packFilePaths parses npm pack --dry-run --json output (0.3987ms)\n✔ release command fails the package contents gate when .pi files are missing (13.6345ms)\n✔ reports unconfigured protocol adapters as skipped (0.7888ms)\n✔ discovers configured adapters without making them mandatory (0.2081ms)\n✔ runs the protocol regression test set and writes a passing trace (7.0495ms)\n✔ includes protocol adapter discovery in regression traces when config is provided (3.1629ms)\n✔ preserves redacted protocol failure diagnostics (3.6954ms)\n✔ parses partial and concatenated Content-Length frames (2.4542ms)\n✔ reports malformed frames and stderr without throwing (0.7303ms)\n✔ spawns a real stdio protocol process and closes it (72.0388ms)\n✔ derives evidence-backed lessons from run failures (1.9961ms)\n✔ does not invent lessons for a clean run (0.1724ms)\n✔ resolves registered agent resources with evidence and audit trace (2.8324ms)\n✔ denies unknown schemes and unapproved authorities (0.6575ms)\n✔ reads artifact resources without allowing workspace escape (6.5582ms)\n✔ resolves named runtime artifacts (4.4332ms)\n✔ default registry resolves in-memory agent and history providers (0.4011ms)\n✔ parses and normalizes supported resource URI schemes (1.4636ms)\n✔ creates stable URIs with encoded path segments and sorted query keys (0.1577ms)\n✔ rejects unsupported or malformed resource URIs (0.2357ms)\n✔ normalizes plain file paths when a workspace is supplied (1.7457ms)\n✔ distinguishes transport success from semantically complete result (0.8568ms)\n✔ requires evidence when a result is used for grounded answers (1.0325ms)\n✔ middleware turns incomplete output into a structured execution failure (0.6601ms)\n✔ builds a runtime dashboard from eval events versions and runtime files (16.8985ms)\n✔ passes runtime gates when all metrics meet thresholds (0.9013ms)\n✔ fails runtime gates deterministically on regressions and missing metrics (0.2407ms)\n✔ isolated env keeps only allowed non-secret variables (0.8445ms)\n✔ runtime isolation creates workspace-local output directories (6.1239ms)\n✔ runtime isolation description follows subagent config (0.7352ms)\n✔ profile extension sets follow the architecture reduction directive (1.372ms)\n✔ explicit extensions.enabled/disabled override the profile (0.1721ms)\n✔ unknown profiles are rejected and profile constants are stable (0.35ms)\n✔ profile sets never include the fatal core extensions twice (0.1212ms)\n✔ accepts a bounded, explicit tool contract (1.4081ms)\n✔ flags missing required fields, extra properties and write metadata (0.2739ms)\n✔ warns when a tool becomes a generic mega-tool (0.2264ms)\n✔ creates skill version candidates without writing SKILL.md (6.7623ms)\n✔ applies and rolls back skill candidates through the version store (9.6791ms)\n✔ rollback restores the previous skill content (10.3275ms)\n✔ parses frontmatter name, description, triggers, and body (1.8089ms)\n✔ falls back to the parent directory name when no frontmatter is present (0.1988ms)\n✔ loads every SKILL.md recursively under a directory (4.5978ms)\n✔ returns an empty array when the directory does not exist (0.1676ms)\n✔ scores name matches above trigger and description matches (1.412ms)\n✔ selects only relevant skills under a token budget (0.5809ms)\n✔ respects a hard token budget by omitting low-priority skills (8.8571ms)\n✔ renders a skill as an injectable block with baseDir reference (0.3246ms)\n✔ round-trips serialize then write then reload (6.2322ms)\n✔ derives a skill only from evidence-backed lessons (0.6604ms)\n✔ does not invent a skill when lessons lack evidence (0.1096ms)\n✔ returns null for an empty or lesson-free run (0.9799ms)\n✔ accepts fresh exact replacements (4.0428ms)\n✔ detects stale hash mismatches before editing (1.6211ms)\n✔ detects missing and ambiguous oldText (1.5203ms)\n✔ ignores non-edit tools (0.1327ms)\n✔ spawns Pi JSON mode with the prompt as the final argument (4.4782ms)\n✔ resolves ok with captured stdout on clean exit (6.1724ms)\n✔ rejects when the pi json subprocess exits nonzero and spills output (6.1866ms)\n✔ rejects immediately when the prompt is missing (0.6246ms)\n✔ isolates subagent cwd, env, and output directory by default (4.3369ms)\n✔ runs subagents through queued, running and completed states (2.3682ms)\n✔ respects max concurrency and starts queued agents later (21.8422ms)\n✔ cancels queued and running subagents (0.5828ms)\n✔ fails subagents whose result violates schema (1.6114ms)\n✔ retries failed subagents within their retry budget (0.5302ms)\n✔ fails subagents when retry budget is exhausted (0.3256ms)\n✔ times out subagents that exceed their timeout budget (100.5124ms)\n✔ fails blocked dependents when a dependency fails (0.6717ms)\n✔ holds a dependent subagent blocked until its dependency completes (0.3081ms)\n✔ rejects unknown dependencies at spawn time (0.2998ms)\n✔ schedules a DAG running independent nodes in parallel and dependents after (0.3966ms)\n✔ delivers and drains peer messages between subagents (0.1938ms)\n▶ cancels a blocked subagent waiting on dependencies\n  ✔ TypeBox result schema validates nested arrays and enums (0.9441ms)\n  ✔ timeout is terminal even with a retry budget (100.1366ms)\n✔ cancels a blocked subagent waiting on dependencies (101.5666ms)\n✔ persists subagent snapshots and restores settled task status (8.5341ms)\n✔ writes state transition events and ignores corrupt snapshots (3.9499ms)\n✔ rejects subagent state paths outside the workspace (0.7565ms)\n✔ DAG: dependent task blocks then runs after its dependency completes (9.8722ms)\n✔ persists events and snapshots, restores completed work on a new runtime (4.4679ms)\n✔ non-terminal snapshots restore as failed with a reason (no silent drop) (2.6538ms)\n✔ pi json executor spawns the configured entry and returns its output (41.9574ms)\n✔ retrieves a small ranked candidate set instead of exposing the whole catalog (13.7428ms)\n✔ namespace filtering removes unrelated candidates (0.4591ms)\n✔ empty query returns deterministic top candidates (0.9311ms)\n✔ finds protocol advisor and reflection product tools (0.8059ms)\n✔ toolDescriptor normalizes name namespace risk and contracts (1.3318ms)\n✔ createToolInvocation builds a stable invocation envelope (0.2209ms)\n✔ createToolOutcome distinguishes success from failure with retryable (0.1804ms)\n✔ riskMetadataFromPolicy maps policy classifications (0.1509ms)\n✔ contract version is stable (0.9527ms)\n✔ runs independent tasks with a bounded worker pool (35.1242ms)\n✔ propagates parent cancellation to running nodes (13.8378ms)\n✔ deduplicates completed work with a stable idempotency key (0.8019ms)\n✔ runs compensators in reverse order after a later failure (1.6204ms)\n✔ can add tasks after a wave through dynamic replanning (0.569ms)\n✔ does not treat transport success as usable business output (0.875ms)\n✔ bounds retries for the same tool error and field (0.8128ms)\n✔ non-retryable validation never becomes retryable (0.1977ms)\n✔ parallelizes independent reads and respects dependencies (9.212ms)\n✔ serializes side effects even when independent (0.2117ms)\n✔ isolates high-risk tasks and rejects cycles (0.5036ms)\n✔ recursively redacts credential fields and strings (1.1633ms)\n✔ rotates JSONL traces with bounded retention (5.3725ms)\n✔ writes and lists versioned candidate artifacts (6.6019ms)\n✔ rejects version store paths outside the workspace (1.8923ms)\n✔ extracts title, readable text, and absolute links from HTML (1.9462ms)\n✔ blocks localhost and private network targets (5.3588ms)\n✔ normalizes crawl options within configured bounds (0.2671ms)\n✔ crawls public same-origin pages with a provided fetch implementation (18.279ms)\n✔ blocks redirects to private or local addresses before following them (0.7471ms)\nℹ tests 240\nℹ suites 0\nℹ pass 240\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 5246.3316\n\n> equaxis-agent@0.3.2 test:protocols\n> node scripts/test-protocols.mjs\n\nProtocol regression passed\nTrace: D:\\test\\mianshi\\equaxis-agent\\.pi\\runtime\\protocols\\traces.jsonl\n\n> equaxis-agent@0.3.2 test:memory\n> python bridge/run_memory_tests.py\n\n........................................................................ [ 51%]\r\n....................................................................     [100%]\r\n============================== warnings summary ===============================\r\nC:\\Users\\32032\\AppData\\Roaming\\Python\\Python314\\site-packages\\chromadb\\telemetry\\opentelemetry\\__init__.py:128\r\n  C:\\Users\\32032\\AppData\\Roaming\\Python\\Python314\\site-packages\\chromadb\\telemetry\\opentelemetry\\__init__.py:128: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead\r\n    if asyncio.iscoroutinefunction(f):\r\n\r\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\r\n140 passed, 1 warning in 9.70s\r\n\n> equaxis-agent@0.3.2 test:eval\n> python -B -m unittest discover -s harbor_eval -p \"test_*.py\"",
      "stderr": "npm warn Unknown env config \"manage-package-manager-versions\". This will stop working in the next major version of npm.\nnpm warn Unknown env config \"manage-package-manager-versions\". This will stop working in the next major version of npm.\nnpm warn Unknown env config \"manage-package-manager-versions\". This will stop working in the next major version of npm.\nnpm warn Unknown env config \"manage-package-manager-versions\". This will stop working in the next major version of npm.\nnpm warn Unknown env config \"manage-package-manager-versions\". This will stop working in the next major version of npm.\nnpm warn Unknown env config \"manage-package-manager-versions\". This will stop working in the next major version of npm.\nnpm warn Unknown env config \"manage-package-manager-versions\". This will stop working in the next major version of npm.\n.........\r\n----------------------------------------------------------------------\r\nRan 9 tests in 0.010s\r\n\r\nOK"
    }
  },
  "runtime": {
    "gates": {
      "enabled": true,
      "minBenchmarkPassRate": 0.8,
      "maxReliabilityRegression": 0.02,
      "maxUnitCostUsd": 0.05,
      "maxLatencyMs": 30000,
      "minImprovementDelta": 0.01
    },
    "evaluation": {
      "enabled": true,
      "rootDir": ".pi/runtime/eval-loop",
      "minSamples": 5,
      "minSuccessRateDelta": 0.02,
      "maxLatencyRegression": 0.1,
      "maxCostRegression": 0.15,
      "confidenceZ": 1.96
    },
    "memory": {
      "governance": {
        "enabled": true,
        "auditPath": ".pi/runtime/memory-governance/memories.jsonl",
        "retentionDays": {
          "hot": 3650,
          "warm": 365,
          "cold": 180
        }
      }
    },
    "subagents": {
      "budgets": {
        "timeoutMs": 60000,
        "maxRetries": 1
      },
      "persistence": {
        "enabled": true,
        "rootDir": ".pi/runtime/subagents"
      },
      "isolation": {
        "enabled": true,
        "scrubEnv": true,
        "outputRoot": ".pi/runtime/isolated",
        "extraEnvAllowlist": []
      }
    },
    "protocols": {
      "lsp": {
        "command": "typescript-language-server",
        "args": [
          "--stdio"
        ],
        "cwd": "",
        "requestTimeoutMs": 30000,
        "allowCommandOverride": false
      },
      "dap": {
        "command": "python",
        "args": [
          "-m",
          "debugpy.adapter"
        ],
        "cwd": "",
        "requestTimeoutMs": 30000,
        "allowCommandOverride": false
      }
    }
  },
  "generatedAt": "2026-08-13T18:11:24.522Z"
}
