{"id":"@lssm-tech/integration.harness-runtime","slug":"integration.harness-runtime","name":"@lssm-tech/integration.harness-runtime","version":"2.0.5","path":"packages/integrations/harness-runtime","manifestPath":"packages/integrations/harness-runtime/package.json","manifestBlobSha":"5cf4a772c56a2642f4edd93b718575f51b90b084","layer":"integrations","physicalArea":null,"primaryArea":"agents-and-context","classification":{"privateDeclared":null,"catalogFamily":"runtime","catalogKind":"integration","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Runtime adapters for the ContractSpec harness system.","descriptionOrigin":"package.json","catalog":{"family":"runtime","kind":"integration","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./adapters/agentBrowserHarnessAdapter","./adapters/playwright-actions","./adapters/playwright-types","./adapters/playwrightBrowserHarnessAdapter","./adapters/sandboxedCodeExecutionAdapter","./adapters/visualHarnessAdapter","./artifacts/filesystemArtifactStore","./artifacts/inMemoryArtifactStore","./integration","./mcp/exposure","./targets/defaultTargetResolver","./types"],"documentation":[{"title":"Integration Harness Runtime documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.harness-runtime","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.integration.harness.runtime","title":"Integration Harness Runtime","description":"Runtime adapters for the ContractSpec harness system.","status":"active","useCases":["Adopt runtime adapters for the contractspec harness system"],"aliases":["integration","harness","runtime"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/integration.harness-runtime","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/adapters/agentBrowserHarnessAdapter","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/adapters/playwrightBrowserHarnessAdapter","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/adapters/sandboxedCodeExecutionAdapter","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/adapters/visualHarnessAdapter","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/artifacts/filesystemArtifactStore","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/artifacts/inMemoryArtifactStore","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/integration","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/mcp/exposure","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/targets/defaultTargetResolver","symbols":[]},{"from":"@lssm-tech/integration.harness-runtime/types","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/integration.harness-runtime package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/adapters/agentBrowserHarnessAdapter","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/adapters/playwrightBrowserHarnessAdapter","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/adapters/sandboxedCodeExecutionAdapter","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/adapters/visualHarnessAdapter","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/artifacts/filesystemArtifactStore","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/artifacts/inMemoryArtifactStore","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/integration","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/mcp/exposure","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/targets/defaultTargetResolver","symbols":[]},{"capabilityId":"package.lssm.tech.integration.harness.runtime","from":"@lssm-tech/integration.harness-runtime/types","symbols":[]}],"scripts":{"publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose","publish:pkg:canary":"bun publish:pkg --tag canary","build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","dev":"contractspec-bun-build dev","clean":"rimraf dist .turbo","lint":"bun run lint:fix","lint:fix":"node ../../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../../scripts/biome.cjs check --write .","lint:check":"node ../../../scripts/biome.cjs check .","test":"bun test --pass-with-no-tests","test:browser":"HARNESS_BROWSER_LIVE_TESTS=1 bun test src/adapters/playwright-browser.live.test.ts","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.assurance-spec":"workspace:^","@lssm-tech/lib.contracts-integrations":"workspace:^","@lssm-tech/lib.crypto-utils":"workspace:^","@lssm-tech/lib.harness":"workspace:^","@lssm-tech/lib.schema":"workspace:^"},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","playwright":"catalog:testing","typescript":"catalog:"},"peerDependencies":{"playwright":"^1.63.0"},"optionalDependencies":{},"peerDependenciesMeta":{"playwright":{"optional":true}},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./adapters/agentBrowserHarnessAdapter":"./src/adapters/agentBrowserHarnessAdapter.ts","./adapters/playwright-actions":"./src/adapters/playwright-actions.ts","./adapters/playwright-types":"./src/adapters/playwright-types.ts","./adapters/playwrightBrowserHarnessAdapter":"./src/adapters/playwrightBrowserHarnessAdapter.ts","./adapters/sandboxedCodeExecutionAdapter":"./src/adapters/sandboxedCodeExecutionAdapter.ts","./adapters/visualHarnessAdapter":"./src/adapters/visualHarnessAdapter.ts","./artifacts/filesystemArtifactStore":"./src/artifacts/filesystemArtifactStore.ts","./artifacts/inMemoryArtifactStore":"./src/artifacts/inMemoryArtifactStore.ts","./integration":"./src/integration.ts","./mcp/exposure":"./src/mcp/exposure.ts","./targets/defaultTargetResolver":"./src/targets/defaultTargetResolver.ts","./types":"./src/types.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./adapters/agentBrowserHarnessAdapter":{"types":"./dist/adapters/agentBrowserHarnessAdapter.d.ts","bun":"./dist/adapters/agentBrowserHarnessAdapter.js","node":"./dist/node/adapters/agentBrowserHarnessAdapter.js","default":"./dist/adapters/agentBrowserHarnessAdapter.js"},"./adapters/playwright-actions":{"types":"./dist/adapters/playwright-actions.d.ts","bun":"./dist/adapters/playwright-actions.js","node":"./dist/node/adapters/playwright-actions.js","default":"./dist/adapters/playwright-actions.js"},"./adapters/playwright-types":{"types":"./dist/adapters/playwright-types.d.ts","bun":"./dist/adapters/playwright-types.js","node":"./dist/node/adapters/playwright-types.js","default":"./dist/adapters/playwright-types.js"},"./adapters/playwrightBrowserHarnessAdapter":{"types":"./dist/adapters/playwrightBrowserHarnessAdapter.d.ts","bun":"./dist/adapters/playwrightBrowserHarnessAdapter.js","node":"./dist/node/adapters/playwrightBrowserHarnessAdapter.js","default":"./dist/adapters/playwrightBrowserHarnessAdapter.js"},"./adapters/sandboxedCodeExecutionAdapter":{"types":"./dist/adapters/sandboxedCodeExecutionAdapter.d.ts","bun":"./dist/adapters/sandboxedCodeExecutionAdapter.js","node":"./dist/node/adapters/sandboxedCodeExecutionAdapter.js","default":"./dist/adapters/sandboxedCodeExecutionAdapter.js"},"./adapters/visualHarnessAdapter":{"types":"./dist/adapters/visualHarnessAdapter.d.ts","bun":"./dist/adapters/visualHarnessAdapter.js","node":"./dist/node/adapters/visualHarnessAdapter.js","default":"./dist/adapters/visualHarnessAdapter.js"},"./artifacts/filesystemArtifactStore":{"types":"./dist/artifacts/filesystemArtifactStore.d.ts","bun":"./dist/artifacts/filesystemArtifactStore.js","node":"./dist/node/artifacts/filesystemArtifactStore.js","default":"./dist/artifacts/filesystemArtifactStore.js"},"./artifacts/inMemoryArtifactStore":{"types":"./dist/artifacts/inMemoryArtifactStore.d.ts","bun":"./dist/artifacts/inMemoryArtifactStore.js","node":"./dist/node/artifacts/inMemoryArtifactStore.js","default":"./dist/artifacts/inMemoryArtifactStore.js"},"./integration":{"types":"./dist/integration.d.ts","bun":"./dist/integration.js","node":"./dist/node/integration.js","default":"./dist/integration.js"},"./mcp/exposure":{"types":"./dist/mcp/exposure.d.ts","bun":"./dist/mcp/exposure.js","node":"./dist/node/mcp/exposure.js","default":"./dist/mcp/exposure.js"},"./targets/defaultTargetResolver":{"types":"./dist/targets/defaultTargetResolver.d.ts","bun":"./dist/targets/defaultTargetResolver.js","node":"./dist/node/targets/defaultTargetResolver.js","default":"./dist/targets/defaultTargetResolver.js"},"./types":{"types":"./dist/types.d.ts","bun":"./dist/types.js","node":"./dist/node/types.js","default":"./dist/types.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/integration.harness-runtime","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/integrations/harness-runtime/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./adapters/agentBrowserHarnessAdapter","importPath":"@lssm-tech/integration.harness-runtime/adapters/agentBrowserHarnessAdapter","target":"./src/adapters/agentBrowserHarnessAdapter.ts","targets":[{"conditions":[],"target":"./src/adapters/agentBrowserHarnessAdapter.ts","sourcePath":"packages/integrations/harness-runtime/src/adapters/agentBrowserHarnessAdapter.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/adapters/agentBrowserHarnessAdapter.ts","sourceStatus":"verified source file"}]},{"subpath":"./adapters/playwright-actions","importPath":"@lssm-tech/integration.harness-runtime/adapters/playwright-actions","target":"./src/adapters/playwright-actions.ts","targets":[{"conditions":[],"target":"./src/adapters/playwright-actions.ts","sourcePath":"packages/integrations/harness-runtime/src/adapters/playwright-actions.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/adapters/playwright-actions.ts","sourceStatus":"verified source file"}]},{"subpath":"./adapters/playwright-types","importPath":"@lssm-tech/integration.harness-runtime/adapters/playwright-types","target":"./src/adapters/playwright-types.ts","targets":[{"conditions":[],"target":"./src/adapters/playwright-types.ts","sourcePath":"packages/integrations/harness-runtime/src/adapters/playwright-types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/adapters/playwright-types.ts","sourceStatus":"verified source file"}]},{"subpath":"./adapters/playwrightBrowserHarnessAdapter","importPath":"@lssm-tech/integration.harness-runtime/adapters/playwrightBrowserHarnessAdapter","target":"./src/adapters/playwrightBrowserHarnessAdapter.ts","targets":[{"conditions":[],"target":"./src/adapters/playwrightBrowserHarnessAdapter.ts","sourcePath":"packages/integrations/harness-runtime/src/adapters/playwrightBrowserHarnessAdapter.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/adapters/playwrightBrowserHarnessAdapter.ts","sourceStatus":"verified source file"}]},{"subpath":"./adapters/sandboxedCodeExecutionAdapter","importPath":"@lssm-tech/integration.harness-runtime/adapters/sandboxedCodeExecutionAdapter","target":"./src/adapters/sandboxedCodeExecutionAdapter.ts","targets":[{"conditions":[],"target":"./src/adapters/sandboxedCodeExecutionAdapter.ts","sourcePath":"packages/integrations/harness-runtime/src/adapters/sandboxedCodeExecutionAdapter.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/adapters/sandboxedCodeExecutionAdapter.ts","sourceStatus":"verified source file"}]},{"subpath":"./adapters/visualHarnessAdapter","importPath":"@lssm-tech/integration.harness-runtime/adapters/visualHarnessAdapter","target":"./src/adapters/visualHarnessAdapter.ts","targets":[{"conditions":[],"target":"./src/adapters/visualHarnessAdapter.ts","sourcePath":"packages/integrations/harness-runtime/src/adapters/visualHarnessAdapter.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/adapters/visualHarnessAdapter.ts","sourceStatus":"verified source file"}]},{"subpath":"./artifacts/filesystemArtifactStore","importPath":"@lssm-tech/integration.harness-runtime/artifacts/filesystemArtifactStore","target":"./src/artifacts/filesystemArtifactStore.ts","targets":[{"conditions":[],"target":"./src/artifacts/filesystemArtifactStore.ts","sourcePath":"packages/integrations/harness-runtime/src/artifacts/filesystemArtifactStore.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/artifacts/filesystemArtifactStore.ts","sourceStatus":"verified source file"}]},{"subpath":"./artifacts/inMemoryArtifactStore","importPath":"@lssm-tech/integration.harness-runtime/artifacts/inMemoryArtifactStore","target":"./src/artifacts/inMemoryArtifactStore.ts","targets":[{"conditions":[],"target":"./src/artifacts/inMemoryArtifactStore.ts","sourcePath":"packages/integrations/harness-runtime/src/artifacts/inMemoryArtifactStore.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/artifacts/inMemoryArtifactStore.ts","sourceStatus":"verified source file"}]},{"subpath":"./integration","importPath":"@lssm-tech/integration.harness-runtime/integration","target":"./src/integration.ts","targets":[{"conditions":[],"target":"./src/integration.ts","sourcePath":"packages/integrations/harness-runtime/src/integration.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/integration.ts","sourceStatus":"verified source file"}]},{"subpath":"./mcp/exposure","importPath":"@lssm-tech/integration.harness-runtime/mcp/exposure","target":"./src/mcp/exposure.ts","targets":[{"conditions":[],"target":"./src/mcp/exposure.ts","sourcePath":"packages/integrations/harness-runtime/src/mcp/exposure.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/mcp/exposure.ts","sourceStatus":"verified source file"}]},{"subpath":"./targets/defaultTargetResolver","importPath":"@lssm-tech/integration.harness-runtime/targets/defaultTargetResolver","target":"./src/targets/defaultTargetResolver.ts","targets":[{"conditions":[],"target":"./src/targets/defaultTargetResolver.ts","sourcePath":"packages/integrations/harness-runtime/src/targets/defaultTargetResolver.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/targets/defaultTargetResolver.ts","sourceStatus":"verified source file"}]},{"subpath":"./types","importPath":"@lssm-tech/integration.harness-runtime/types","target":"./src/types.ts","targets":[{"conditions":[],"target":"./src/types.ts","sourcePath":"packages/integrations/harness-runtime/src/types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/src/types.ts","sourceStatus":"verified source file"}]}],"entryCount":13,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Integration Harness Runtime documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.harness-runtime","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/integration.harness-runtime.txt"},"readme":{"status":"available","body":"# @lssm-tech/integration.harness-runtime\n\nWebsite: https://contractspec.io\n\n**Runtime adapters that bridge the ContractSpec harness core into browser, sandbox, artifact, and MCP-backed execution targets.**\n\n## What It Provides\n\n- Provides concrete adapters for deterministic Playwright browser automation, optional `agent-browser` visual computer-use runs, sandboxed execution, and artifact storage.\n- Exposes MCP helpers and default target resolution on top of the mode-agnostic harness core.\n- Keeps higher-cost runtime integrations optional so consumers can opt into heavier execution targets deliberately.\n- Enforces browser navigation and request-domain allowlists at runtime, emits\n  sanitized network/trace and accessibility evidence, and keeps visual\n  baseline updates manual and permit-bound.\n- Requires an injected container, process, or remote\n  `IsolatedCodeSandboxPort` for code execution. Node `vm` is not represented as\n  a security boundary; missing isolation fails closed.\n- `src/adapters/` contains runtime, provider, or environment-specific adapters.\n- `src/mcp/` contains MCP handlers, tools, prompts, and resources.\n\n## Playwright keyed reads\n\n`PlaywrightBrowserHarnessAdapter` implements structured output for browser\n`get` actions that declare a non-empty `key`. It validates the complete keyed\nread set before creating a run session or navigating, then evaluates valid\nreads in authored order after the other actions complete.\n\n| Target | Selector | Result |\n| --- | --- | --- |\n| `text` | required | `string \\| null` from `textContent` |\n| `html` | required | `string` from `innerHTML` |\n| `value` | required | `string` from `inputValue` |\n| `title` | forbidden | `string` from `title()` |\n| `url` | forbidden | `string` from `url()` |\n\nUnkeyed reads remain legacy no-ops. Duplicate/empty keys, invalid selectors,\nand unavailable page methods fail the step without returning partial output;\nexisting screenshot, DOM, and console capture remains unchanged.\n\n## Deterministic browser admission\n\nThe Playwright adapter checks all requested interactions and keyed-read methods\nbefore navigation. Missing methods fail instead of silently skipping a step;\ndouble-click and typing keep their exact semantics. Text waits require visible\nmatching text. A requested viewport also requires runtime support.\n\nRestricted targets require a fresh context with HTTP and WebSocket routing and\nservice workers blocked. Page-only custom browser factories cannot claim this\ncoverage. Setup failures close partially created pages and contexts. Host-level\negress restrictions are still required: browser routing alone does not isolate\nDNS, redirect destinations or other network protocols.\n\nRun `bun run test:browser` with the pinned Playwright peer and its Chromium binary\ninstalled. This opt-in real-browser suite exercises actual local HTTP, popup,\nWebSocket and service-worker behavior. Missing browser support fails the suite;\nskipped live tests in ordinary unit runs are not qualification evidence.\n\nLow-level factory types are exported from `./adapters/playwright-types`;\n`./adapters/playwright-actions` exports exact action validation/execution helpers.\nUse the full adapter for session lifecycle, network guards and evidence capture.\nThe helpers do not authorize actions or establish an isolated browser context.\n\n## Installation\n\n`npm install @lssm-tech/integration.harness-runtime`\n\nor\n\n`bun add @lssm-tech/integration.harness-runtime`\n\n## Usage\n\nImport the root entrypoint from `@lssm-tech/integration.harness-runtime`, or choose a documented subpath when you only need one part of the package surface.\n\n## Architecture\n\n- `src/adapters/` contains Playwright, agent-browser, sandbox, and visual harness adapters.\n- `src/artifacts/` contains filesystem and in-memory artifact-store implementations.\n- `src/mcp/` exposes harness execution surfaces to MCP-aware runtimes.\n- `src/targets/` contains target resolution helpers and target-selection logic.\n- `src/types.ts` exposes shared runtime-facing harness types.\n- `src/index.ts` is the root public barrel and package entrypoint.\n\n## Public Entry Points\n\n- Exports runtime adapters, artifact stores, MCP exposure helpers, target resolution, and shared types.\n- Export `.` resolves through `./src/index.ts`.\n- Export `./adapters/agentBrowserHarnessAdapter` resolves through `./src/adapters/agentBrowserHarnessAdapter.ts`.\n- Export `./adapters/playwrightBrowserHarnessAdapter` resolves through `./src/adapters/playwrightBrowserHarnessAdapter.ts`.\n- Export `./adapters/sandboxedCodeExecutionAdapter` resolves through `./src/adapters/sandboxedCodeExecutionAdapter.ts`.\n- Export `./adapters/visualHarnessAdapter` resolves through `./src/adapters/visualHarnessAdapter.ts`.\n- Export `./artifacts/filesystemArtifactStore` resolves through `./src/artifacts/filesystemArtifactStore.ts`.\n- Export `./artifacts/inMemoryArtifactStore` resolves through `./src/artifacts/inMemoryArtifactStore.ts`.\n- Export `./mcp/exposure` resolves through `./src/mcp/exposure.ts`.\n- Export `./targets/defaultTargetResolver` resolves through `./src/targets/defaultTargetResolver.ts`.\n- Export `./types` resolves through `./src/types.ts`.\n\n## Local Commands\n\n- `bun run dev` — contractspec-bun-build dev\n- `bun run build` — contractspec-bun-build build\n- `bun run test` — bun test --pass-with-no-tests\n- `bun run lint` — bun run lint:fix\n- `bun run lint:check` — biome check .\n- `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .\n- `bun run typecheck` — tsgo --noEmit\n- `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose\n- `bun run publish:pkg:canary` — bun publish:pkg --tag canary\n- `bun run clean` — rimraf dist .turbo\n- `bun run build:bundle` — contractspec-bun-build transpile\n- `bun run build:types` — contractspec-bun-build types\n- `bun run prebuild` — contractspec-bun-build prebuild\n\n## Recent Updates\n\n- Replace eslint+prettier by biomejs to optimize speed.\n- Add a first-class harness system for controlled inspection, testing, evaluation, and proof generation.\n- Add OSS full-app verification adapters for Playwright and `agent-browser`, including auth profile refs, visual diff evidence, and replay-friendly browser artifacts.\n\n## Notes\n\n- Works alongside `@lssm-tech/lib.contracts-spec`, `@lssm-tech/lib.harness`, `@lssm-tech/tool.bun`, `@lssm-tech/tool.typescript`.\n- Authenticated browser runs should use named storage-state, browser-profile, session-name, or headers-env refs. Do not embed raw credentials, cookies, or bearer tokens in scenario specs or replay bundles.\n","sourcePath":"packages/integrations/harness-runtime/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/harness-runtime/README.md","blobSha":"e383e304e6efe3d8ad9285c4ef997fab2b3fc702","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"agents-and-context","areaTitle":"Agents, execution and context","displayName":"integration.harness-runtime","runtimes":["node"],"platforms":["server"],"kind":"integration","scope":"Package manifest","canonicalRoute":"/docs/packages/integration.harness-runtime/","contextUrl":"/docs/packages/integration.harness-runtime.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}