{"_id":"@sapiom/harness","_rev":"48-f985466aab598a2482af0723430de308","name":"@sapiom/harness","dist-tags":{"latest":"0.19.0"},"versions":{"0.0.0":{"name":"@sapiom/harness","version":"0.0.0","keywords":["oidc","trusted-publishing","setup"],"_id":"@sapiom/harness@0.0.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"dist":{"shasum":"53b69e36a3085a22bc66952c96c95d0ac01bc7a0","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.0.0.tgz","fileCount":2,"integrity":"sha512-/LvIPtfN3MpO/gPA5kOjSHrEGD8SlQ8pCf8FrcgB2nGAM0PqkDR6eKTluNuCk7Hr46RED2fUNd4FyhAHtmq9cg==","signatures":[{"sig":"MEUCIQC10e+9NYx+sWW77XoCn8HdMK3lu6eLiAiQn/NFAI6I0wIgN0NEEGydEj/S57fapobEl1zE2RdtBoyzl5d3wMn+4WA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2023},"_npmUser":{"name":"dave_sapiom","email":"dave@sapiom.ai"},"_npmVersion":"11.11.0","description":"OIDC trusted publishing setup package for @sapiom/harness","directories":{},"_nodeVersion":"25.8.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/harness_0.0.0_1783563946645_0.14917325581376106","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@sapiom/harness","version":"0.1.0","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.1.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"3e6e9df8531217e86f0a1abb63e002d49d4d9650","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.1.0.tgz","fileCount":246,"integrity":"sha512-tD96Q/jW2+9F2gWoLuc7+kTJ8RSkIXK3uu45gjtvpM/IHEEibSCCYRgqHwrK7DM/ushKj87ISE0RT5qI2QBAfg==","signatures":[{"sig":"MEQCICxpq/oizZaK4Ljh2d+CUAzMP7NXMP6tkU7VmrJYQ45CAiA79rEkWMskHscP16kqEyoR2UVZo66Ms2zaF+t2SqijOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1357889},"main":"dist/index.js","type":"module","_from":"file:sapiom-harness-0.1.0.tgz","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/7189e19602d2a2bef35a10372c134ee2/sapiom-harness-0.1.0.tgz","_integrity":"sha512-tD96Q/jW2+9F2gWoLuc7+kTJ8RSkIXK3uu45gjtvpM/IHEEibSCCYRgqHwrK7DM/ushKj87ISE0RT5qI2QBAfg==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.18.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.10.0","@sapiom/agent":"^0.6.1","@sapiom/agent-core":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@xterm/addon-web-links":"^0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.0_1783571020067_0.5134540195056909","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@sapiom/harness","version":"0.1.1","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.1.1","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"4decdf9f8bb000bc2e0d88e71fa977887d3fb703","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.1.1.tgz","fileCount":246,"integrity":"sha512-BKNjLbktRjOkRYz7nL89qpTRFwTAlcmwPOsdgMkR6kbbLRdHyDhEoJ4ILfQrvA/nkyIQXSK0NCNOqWy2WyyCCA==","signatures":[{"sig":"MEQCIDoslfWMiG9TULCnfydzfNWQBGwla1URbxkiioTiqASpAiBQBeK4XvsDGyxksTdNwbX8aTluK8zd77v3KAAv5p8NGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1357889},"main":"dist/index.js","type":"module","_from":"file:sapiom-harness-0.1.1.tgz","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/f40c46eb1cce9461e0240bf937ef7213/sapiom-harness-0.1.1.tgz","_integrity":"sha512-BKNjLbktRjOkRYz7nL89qpTRFwTAlcmwPOsdgMkR6kbbLRdHyDhEoJ4ILfQrvA/nkyIQXSK0NCNOqWy2WyyCCA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.18.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.0","@sapiom/agent":"^0.6.2","@sapiom/agent-core":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@xterm/addon-web-links":"^0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.1_1783578143928_0.4458093469634452","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@sapiom/harness","version":"0.1.2","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.1.2","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"0d416ff834b59a04e0a121f154e3b49658b2513f","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.1.2.tgz","fileCount":299,"integrity":"sha512-kmkjQuCus1rk9srPwCH1PXdusaquqFz9oL9ZuX9ZmI0wgBjxXCLYipgRY+3iiIYbEvtyP6wqtoB/q6Tn8il28Q==","signatures":[{"sig":"MEUCID6orJG8AELqb5jKWpuWCC3d8OYh72gGWQ2H+o49KMvUAiEAmGxZYp38FlZAD94TZsWCJAytA7n+a2aJN3P2B+UqK6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1540336},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/89ca53633abe8f65c943e8a138f6ea06/sapiom-harness-0.1.2.tgz","_integrity":"sha512-kmkjQuCus1rk9srPwCH1PXdusaquqFz9oL9ZuX9ZmI0wgBjxXCLYipgRY+3iiIYbEvtyP6wqtoB/q6Tn8il28Q==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.18.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.2","@sapiom/agent":"^0.6.2","@sapiom/agent-core":"^0.9.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@xterm/addon-web-links":"^0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.2_1783642992154_0.779400475665369","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@sapiom/harness","version":"0.1.3","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.1.3","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"44d6b09c96ea70b563f6075b2c6e6a4ea7052b8d","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.1.3.tgz","fileCount":299,"integrity":"sha512-DV0Y8zYrGPFs5ufcJhCtpDAZypjZ1Si6KFyaq4M67rWzQLFAhZIUWTy0ZTB340/h3ja8S5DJx3qe5dPkMENx8g==","signatures":[{"sig":"MEUCICI0AmiYMouAA8dk5rd92FyZm0Qcfh5gSrp26W+b4u7/AiEA5yPsFbW480OiHWhYWjLnFQSG15VfUGDll/8url1bjQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1544720},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.1.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/08da8e65cc9f7619d62c3606eef93e4f/sapiom-harness-0.1.3.tgz","_integrity":"sha512-DV0Y8zYrGPFs5ufcJhCtpDAZypjZ1Si6KFyaq4M67rWzQLFAhZIUWTy0ZTB340/h3ja8S5DJx3qe5dPkMENx8g==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.18.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.2","@sapiom/agent":"^0.6.2","@sapiom/agent-core":"^0.9.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@xterm/addon-web-links":"^0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.3_1783644727705_0.18224514967917504","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@sapiom/harness","version":"0.1.4","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.1.4","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"41aa39151e25b506c4908fc88690bee078fc3f5a","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.1.4.tgz","fileCount":299,"integrity":"sha512-NH9KP44Jy8HhVbuWRxo181qkdgAJrWVmRPhPF4ezq6SJG3Oxi7kCsxcUxjirtsS7+or2QV3rweAv9hiAycgPdQ==","signatures":[{"sig":"MEYCIQD/s4w6IXeixcReOVAbtGmVfZ6i10UWhhHYsKP2tchBhAIhAL2NkAizO3L1A0elx8hxUuiQKmeYq4PAbZUGaQ8P5Bd/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1579124},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.1.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/8c25c52f683403c1c0cca187ff57b344/sapiom-harness-0.1.4.tgz","_integrity":"sha512-NH9KP44Jy8HhVbuWRxo181qkdgAJrWVmRPhPF4ezq6SJG3Oxi7kCsxcUxjirtsS7+or2QV3rweAv9hiAycgPdQ==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.18.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.6.4","@sapiom/agent-core":"^0.9.5","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@xterm/addon-web-links":"^0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.4_1784327291092_0.5665399709435104","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@sapiom/harness","version":"0.1.5","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.1.5","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"87d7c9982fe7759e82b37a27a1cee85ae8eaa63b","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.1.5.tgz","fileCount":331,"integrity":"sha512-LHLfntmcGcxbifKzHStPGqeD5KlftUijNsUbLOdnSiitq0W+i7fU5cswCHL+IjcrtT7lOgCxrmc/3NnjDrZOVA==","signatures":[{"sig":"MEUCIQCPyVVtiSFIbPWt7//B0y5GswiqCXt9OPCOQMOnWDL/bgIgOh+gq9zYUkz/IWXIdCD0RvsQw0xaOr3Wtxdbs7XOILY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1704911},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.1.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/b6c36b7cfa3c4c46604ec633f44f09d5/sapiom-harness-0.1.5.tgz","_integrity":"sha512-LHLfntmcGcxbifKzHStPGqeD5KlftUijNsUbLOdnSiitq0W+i7fU5cswCHL+IjcrtT7lOgCxrmc/3NnjDrZOVA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.18.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.6.4","@sapiom/agent-core":"^0.9.5","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@xterm/addon-web-links":"^0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.5_1784656650018_0.6510699163767262","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@sapiom/harness","version":"0.1.6","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.1.6","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"33379839e5eaf6739336768b03921ca0e64d5256","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.1.6.tgz","fileCount":350,"integrity":"sha512-c3hxC4ZsjuvHg2IpAObYuSWY1/pMBxZMOK3ZbJZ/6PuPlQzVS9h00Z+9AUIlqpOyT2rz0k/hN2K2HDrUE1L4aw==","signatures":[{"sig":"MEUCIQDzleRftVkHKITqNtd9lHCC/BjLPxnbxl+kgfIoxJKnkQIgFqh8Spi2d6mrgTCYBluYlzxn2XLNBn1mhFNM0I7NuAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2763982},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.1.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/f828357ce48fcfa62754308f6d97130d/sapiom-harness-0.1.6.tgz","_integrity":"sha512-c3hxC4ZsjuvHg2IpAObYuSWY1/pMBxZMOK3ZbJZ/6PuPlQzVS9h00Z+9AUIlqpOyT2rz0k/hN2K2HDrUE1L4aw==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.18.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.6.7","@sapiom/agent-core":"^0.9.9","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.6_1784851085982_0.5345058303718024","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@sapiom/harness","version":"0.2.0","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.2.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"53217d53bf7efc9a9c01ea4e84cf6e520b48910e","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.2.0.tgz","fileCount":380,"integrity":"sha512-Uc1YTVHg02kZk2NAhIYie6RkOkR8AMfg9bKPrYCoM0lefd39DVfz5DvOtZ5hp6S/WVNq57diQWcegdn4GyZlFw==","signatures":[{"sig":"MEYCIQCc0ilCSMecQI13XrslfmqpR/HIvGgXY3Vnnjl8NcbwOwIhAKZ+Ih1KkZ1YewuuUkF1gm4g+JfMNx92rOQXRyQAqeKu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2407291},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/59169453318486cd63b107f9b1240864/sapiom-harness-0.2.0.tgz","_integrity":"sha512-Uc1YTVHg02kZk2NAhIYie6RkOkR8AMfg9bKPrYCoM0lefd39DVfz5DvOtZ5hp6S/WVNq57diQWcegdn4GyZlFw==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.7.0","@sapiom/agent-core":"^0.9.10","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.0_1785374127609_0.4968294472662602","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@sapiom/harness","version":"0.2.1","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.2.1","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"31135e5c6c3aa5a38b836d278d27a67df10cf579","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.2.1.tgz","fileCount":380,"integrity":"sha512-vv5LH+MVW3rLEALgRwxpa1ly1FCdPiV/RwMVYPJzgPKVTBAUSBmDuJyp1fpih1ogc1nlCcitKwut3qYhD7ElzQ==","signatures":[{"sig":"MEYCIQD3+/eI74O4lrTlzIbBqQU7fKKU+FOiOKig6os2tFvThAIhAPNwdfZetDnCnWOGSgGYuiP2hIkU9+nIpXzM5Cz2SeBe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2410630},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/f203c6827508721a8185d9bc1b475816/sapiom-harness-0.2.1.tgz","_integrity":"sha512-vv5LH+MVW3rLEALgRwxpa1ly1FCdPiV/RwMVYPJzgPKVTBAUSBmDuJyp1fpih1ogc1nlCcitKwut3qYhD7ElzQ==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.7.0","@sapiom/agent-core":"^0.9.10","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.1_1785375785896_0.3054636408078566","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@sapiom/harness","version":"0.2.2","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.2.2","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"39c008a7326e0c2dea5c493129988ed28fc965c0","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.2.2.tgz","fileCount":384,"integrity":"sha512-HEPf2xabT4KNdZtGgFAOzSeJx3FYk+EUm6oMiv5toMofHE1b/g+ex1FR6PQ9BB0RLRaSu72NE+6s8o7Y5imwug==","signatures":[{"sig":"MEQCIHXR0+8gExcZJUC8iss4DfghDrKjy5XRMuwsA7V1kxmDAiA0rIrEQkRQasqQctZ5ifp77UhsyNueITVy9vf/sUt1VQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2425719},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.2.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/6e5692fa468aac6efd62eb5eb5729593/sapiom-harness-0.2.2.tgz","_integrity":"sha512-HEPf2xabT4KNdZtGgFAOzSeJx3FYk+EUm6oMiv5toMofHE1b/g+ex1FR6PQ9BB0RLRaSu72NE+6s8o7Y5imwug==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.7.0","@sapiom/agent-core":"^0.9.10","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.2_1785382030862_0.8226061475767135","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@sapiom/harness","version":"0.2.3","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.2.3","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"4b36383bdfb897763c856d800ba9771bbb3c43cf","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.2.3.tgz","fileCount":388,"integrity":"sha512-dWb3uO7zQNDPFACmQroebQW3BdlSGBP6oZxfYwEcloP2jjg5W090yNgo+UQiRvN0Y2O4bcx7BnCGAodvEVRmuQ==","signatures":[{"sig":"MEQCICWGnpmKDRj+9w+yAj0qab0QsaCbNNeTPZvs4hq06OPTAiAiLspz5tJsj5d0imwsIJFdb3li63EaCgveMVMHUiHWDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2441189},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.2.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/2175a76bb9cc44502cd5f100100599e6/sapiom-harness-0.2.3.tgz","_integrity":"sha512-dWb3uO7zQNDPFACmQroebQW3BdlSGBP6oZxfYwEcloP2jjg5W090yNgo+UQiRvN0Y2O4bcx7BnCGAodvEVRmuQ==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.7.1","@sapiom/agent-core":"^0.9.11","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.3_1785444780492_0.5856972323531371","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@sapiom/harness","version":"0.2.4","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.2.4","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"0feea00503af8e41fda7894d2b36d277153042c8","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.2.4.tgz","fileCount":388,"integrity":"sha512-o2e1cY/hsKchfvFCiKE0RU4a3naAod88UIJY8wAsGY0LaXYbTR9f6rYEVeN3lhh9Ztvs2SDGbYRUUiWVH9GgmQ==","signatures":[{"sig":"MEUCIQCS1r2V8RMoWkHt1e0KzeykifbWZO4bTIP+iYJEHsyj7wIgbqsHxB9L3TGc0zgEqdr2laQk+ozZnvWOpkQBAgUM34Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2441582},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.2.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/ddf47234a1a3bc8948d2a69ac8de07e1/sapiom-harness-0.2.4.tgz","_integrity":"sha512-o2e1cY/hsKchfvFCiKE0RU4a3naAod88UIJY8wAsGY0LaXYbTR9f6rYEVeN3lhh9Ztvs2SDGbYRUUiWVH9GgmQ==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.8.0","@sapiom/agent-core":"^0.9.12","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.4_1785461773771_0.020172282112315143","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@sapiom/harness","version":"0.2.5","keywords":["sapiom","harness","claude","codex","terminal","workflows"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.2.5","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"bba4c66e01ecd977e793cb6d4c4052ea5f4b0cbe","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.2.5.tgz","fileCount":388,"integrity":"sha512-B5Vw+ZUZOj/8RZdHD+0yHUoi71PBmoCqYo4CBnKx5cN8N6wz0pSVX+JsJ9PMIjCXgtbxFjyznD6Sw7JOZdhJmg==","signatures":[{"sig":"MEUCIQCvCmZdIo0nOkNZgpkQQ8zcOiIG2CVfyPH/BkISPKX1EAIgInuJ2qSDL0CJ6L5a+hXeFHjjCyAUmDoPUWhzdumGOVs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2689456},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.2.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/7363c713fe4d78cd2f733b709751ebce/sapiom-harness-0.2.5.tgz","_integrity":"sha512-B5Vw+ZUZOj/8RZdHD+0yHUoi71PBmoCqYo4CBnKx5cN8N6wz0pSVX+JsJ9PMIjCXgtbxFjyznD6Sw7JOZdhJmg==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Sapiom Harness — a CLI-launched local web app that runs your coding agent (Claude Code, Codex) in a Sapiom-configured environment: MCP pre-wired, workflows tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.11.3","@sapiom/agent":"^0.9.0","@sapiom/agent-core":"^0.9.13","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.5_1785612795928_0.7359683628959588","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@sapiom/harness","version":"0.2.6","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.2.6","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"3151fc57b67f847588ae33ba472911244b9c0286","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.2.6.tgz","fileCount":396,"integrity":"sha512-LJGNmjWox5/zOIH7ymKsNejmkFL7JjCffARuzhGNWbPZ1kl9RRmndYupyxgZRUPfXEuxZggVWpt783hHqSUQyg==","signatures":[{"sig":"MEQCICvaX4CZA9B4IZNTI0wWIa4HrPWuUUgEmwsUgNhLr0eyAiBSU7qVPsbytjgRJA5yj4UP2unZSH7iQiUqQQc4FF/KSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2708416},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.2.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/b5639f656921237cfa4b9031d2972228/sapiom-harness-0.2.6.tgz","_integrity":"sha512-LJGNmjWox5/zOIH7ymKsNejmkFL7JjCffARuzhGNWbPZ1kl9RRmndYupyxgZRUPfXEuxZggVWpt783hHqSUQyg==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.0","@sapiom/agent":"^0.9.1","@sapiom/agent-core":"^0.10.0","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.6_1785798564728_0.979572389899062","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@sapiom/harness","version":"0.2.7","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.2.7","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"d257229b7dfef45fe94779fafe041c599e67108f","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.2.7.tgz","fileCount":396,"integrity":"sha512-r6Q2FML9qREjsOSp3Z14+xw+wF7xvBcgV47GqXATSzjH1/VZl3Y6Fighwa4vQxrTCLGma6ZuBdUuqnthl9xFQA==","signatures":[{"sig":"MEQCIBnql3c33Bam6Bv/Cz8Ldj3GnSpaR+1yJrst4m2i9GoRAiBTKov19WqYqXEr6KJHC0DN74S3BBu9ztFdFyyxC5ZMLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2709286},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.2.7.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/da0d9c141c85457c404b478229dfdfa0/sapiom-harness-0.2.7.tgz","_integrity":"sha512-r6Q2FML9qREjsOSp3Z14+xw+wF7xvBcgV47GqXATSzjH1/VZl3Y6Fighwa4vQxrTCLGma6ZuBdUuqnthl9xFQA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.1","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.10.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.7_1785820973330_0.48117515488714235","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@sapiom/harness","version":"0.3.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.3.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"2e5540d3cf9c9a74df6a9b8959dd3a3bb3b731f5","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.3.0.tgz","fileCount":406,"integrity":"sha512-ORoshoqae3HzqhDBChmWUyefMDZA0jaDmEI9O9CIjMb1Omz3AJsz7q4YJw1WNG1tu7VD2I+JBRt+ojvL4iEfSA==","signatures":[{"sig":"MEYCIQDNMmAAW9ombro+dQTAZ43H2ZNEypUJtXAFauGPsv6f0gIhANmr6mWuO6vHUtQZEosc898v/Gnx/lSQRd3sSAEc3rnm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2924050},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/6970c236656c59993999a3261829e085/sapiom-harness-0.3.0.tgz","_integrity":"sha512-ORoshoqae3HzqhDBChmWUyefMDZA0jaDmEI9O9CIjMb1Omz3AJsz7q4YJw1WNG1tu7VD2I+JBRt+ojvL4iEfSA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.2","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.10.3","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.3.0_1785909811695_0.6767362199246973","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@sapiom/harness","version":"0.4.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.4.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"7b59041cbaa07359c61618b5e19764934d435cbf","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.4.0.tgz","fileCount":414,"integrity":"sha512-0LiHTMIc78D/sxmKQhpISEfw/26kayxcJvu2X6QzMJ5i9+C1IpR40u2rX1cQnJWD1ic/t0FSTXohXyr0iDU0pQ==","signatures":[{"sig":"MEUCIQDVS68b5N6VI8RrfUkjB01qaxKXnecEFuXIUe6TeIHfagIgJSpvy8pSYfkdj5F8Lp/+rFfXrBTo2TpLBLvlrSc8rQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2982754},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/8094849d33289af308f2d5eade9aa529/sapiom-harness-0.4.0.tgz","_integrity":"sha512-0LiHTMIc78D/sxmKQhpISEfw/26kayxcJvu2X6QzMJ5i9+C1IpR40u2rX1cQnJWD1ic/t0FSTXohXyr0iDU0pQ==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.2","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.10.3","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.4.0_1785981921923_0.5035876851001071","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@sapiom/harness","version":"0.4.1","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.4.1","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"cca579364060bb56c5111898437b5393797f42a5","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.4.1.tgz","fileCount":414,"integrity":"sha512-URC3RsNV2H6fDgeyZd2oKKNXvgrx077CjgFHllGOguaDP5iXY8/7pE81r2OsiEoQ3wVs9rb54+KxN4Oy5sSZ2g==","signatures":[{"sig":"MEUCIQC8z92wGUFcoiuUgAXusdYM2jdFmTTVMYjvXWSHji4UpwIgDSxE6NAHN/RWAyeNbJTwFv8B+Jn5CHd/jHPYBQq7vWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2984731},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/b1106d6447e20226d4f4403b72bce884/sapiom-harness-0.4.1.tgz","_integrity":"sha512-URC3RsNV2H6fDgeyZd2oKKNXvgrx077CjgFHllGOguaDP5iXY8/7pE81r2OsiEoQ3wVs9rb54+KxN4Oy5sSZ2g==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.3","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.10.4","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.4.1_1786084694879_0.5658735771851431","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@sapiom/harness","version":"0.5.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.5.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"34c19d227b54a5fb252297789464dbc52b5e4514","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.5.0.tgz","fileCount":414,"integrity":"sha512-JY4AJEu9DFKaswVcXaVwmkmcc8fuNI6RHtIL7BjFkynL1+rZkyuCiFZvELgNSr7g/cfJUifq/B6I6UjJ0XewLQ==","signatures":[{"sig":"MEUCIQDFEGwD2BUKJWywdIOOJOw9IJ5RS0026B0dxxRBY/KS5QIgTL6SFk1Id9CHE5gD+7VBxz9CUS2WDD+EkK3SPSFTVcA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2977883},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.5.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/8b37b00936fbb4fa10a6dff7d349782c/sapiom-harness-0.5.0.tgz","_integrity":"sha512-JY4AJEu9DFKaswVcXaVwmkmcc8fuNI6RHtIL7BjFkynL1+rZkyuCiFZvELgNSr7g/cfJUifq/B6I6UjJ0XewLQ==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.4","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.10.5","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.5.0_1786215977072_0.812560571605754","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@sapiom/harness","version":"0.5.1","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.5.1","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"70efce42db37d0bc87b7aeab1950a1a1b16ce20e","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.5.1.tgz","fileCount":418,"integrity":"sha512-iLUHzCB1+zGgVWc9cyT2Z85QogWYgE5yRmMn9Nf1458t9/6zx/Jw1ouXQ0CwAq63Rsd9OxLbPyG0tUJMkW0CAg==","signatures":[{"sig":"MEYCIQCVegCID6rIhhq/u9kphoHWE8dr5Pg3ctr0wghP5Wd0TQIhANeVEQTfTW9ThcwM+HaGU9sgUWw+IXmA//MFxF+O3cHG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2998531},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.5.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/6cbe8f861acb1e4270280651e85e8a6a/sapiom-harness-0.5.1.tgz","_integrity":"sha512-iLUHzCB1+zGgVWc9cyT2Z85QogWYgE5yRmMn9Nf1458t9/6zx/Jw1ouXQ0CwAq63Rsd9OxLbPyG0tUJMkW0CAg==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.4","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.10.5","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.5.1_1786378610457_0.3559739714277599","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@sapiom/harness","version":"0.6.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.6.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"7bfb59b78df7a0ad44e446fb7c29f71769bc3827","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.6.0.tgz","fileCount":426,"integrity":"sha512-4B91UmhDHKPCy+5X3DU/9jbVvuPLZ4g3f0rXZa7wKlD0OJdUXaxe3YVXeoegxdc4odMzTaHcHwCir+dI1sphAQ==","signatures":[{"sig":"MEYCIQCROX3IVwNEUqWohIxB07i3n0GDWgqBmsFP7xKjwkqrOgIhAMbWkTOpwUctmziwto5FeyMV5btdMxC15ch4J07m6lSk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3040181},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.6.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/6f268c9db753c2bafbe1b22770441d4a/sapiom-harness-0.6.0.tgz","_integrity":"sha512-4B91UmhDHKPCy+5X3DU/9jbVvuPLZ4g3f0rXZa7wKlD0OJdUXaxe3YVXeoegxdc4odMzTaHcHwCir+dI1sphAQ==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.4","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.10.6","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.6.0_1786465202772_0.860487220159939","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@sapiom/harness","version":"0.7.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.7.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"c7f5f9f4d28b817c6f8f7c5f4e9481f3d6e04ff1","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.7.0.tgz","fileCount":434,"integrity":"sha512-QKTDbky2SHdOYXCLVLSHotX5r810qpbcAvzGLiZCzn2EQgUP2GR4IrR1MoHByoso3OifNFScFZmUQRE66qXS7g==","signatures":[{"sig":"MEQCIBTMh1uS7IIgDxCQ6uGCNX01bIiFJiozfgsHlcjmSqvUAiBDZAqedcRsIAFEWTFKmr0FV3M3KhKc6aWRubYVJaLWBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3111447},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.7.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/5fbb783069b8070a98836f78b69caef7/sapiom-harness-0.7.0.tgz","_integrity":"sha512-QKTDbky2SHdOYXCLVLSHotX5r810qpbcAvzGLiZCzn2EQgUP2GR4IrR1MoHByoso3OifNFScFZmUQRE66qXS7g==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.5","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.10.7","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.7.0_1786580355117_0.2996952138418436","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@sapiom/harness","version":"0.8.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"b1e2d3544bfa78eb15266749db9b66a76c1ec615","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.0.tgz","fileCount":438,"integrity":"sha512-8xUv5yAYF8Gdq13mt/+oKdKDXgALzyEpAlzd2eLPftoseZWBgI7C4ylxG0c6TNzKHt7D/xqQ4hgKbcs+ldw57A==","signatures":[{"sig":"MEYCIQCcL74xOBe23uEb0dhXtbVqUkRvlhbCejUbvKV3k05MLwIhAMYLWygf0s9uaSnbz9lPjristNeYpCmVHHTGEDBmY5N8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3317065},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/b1a3045c0db6782df614efd62cc0042b/sapiom-harness-0.8.0.tgz","_integrity":"sha512-8xUv5yAYF8Gdq13mt/+oKdKDXgALzyEpAlzd2eLPftoseZWBgI7C4ylxG0c6TNzKHt7D/xqQ4hgKbcs+ldw57A==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.6","@sapiom/agent":"^0.9.3","@sapiom/agent-core":"^0.11.0","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.0_1786724544187_0.23994567829012947","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@sapiom/harness","version":"0.8.1","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.1","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"02158e9871ed473a60f38cc388eae3deb611abb9","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.1.tgz","fileCount":438,"integrity":"sha512-CPDFhQeb5T2gvx+7tMuOmvAIMazeVrdu/GY8uJpK1P+g8gGpJXcWwlhxw8sbT2bU460TecIe/5/JqoEalpoHPw==","signatures":[{"sig":"MEYCIQD8E1KVkcDfuRC1Ig4KRs/Z2U/cSUBxu8Yxn/O/2uKQagIhAIiMR44AE+yXW1k4B9hcnaRcVljS/BFmWE7CPbSTGXdM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3336952},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/5f09f82c9cab11668556a71a443d934f/sapiom-harness-0.8.1.tgz","_integrity":"sha512-CPDFhQeb5T2gvx+7tMuOmvAIMazeVrdu/GY8uJpK1P+g8gGpJXcWwlhxw8sbT2bU460TecIe/5/JqoEalpoHPw==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.6","@sapiom/agent":"^0.9.4","@sapiom/agent-core":"^0.11.1","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.1_1786753397598_0.886046643647147","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@sapiom/harness","version":"0.8.2","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.2","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"ad2e42a9f53fc3b328357e5943e7eeff5d932122","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.2.tgz","fileCount":438,"integrity":"sha512-8/dbqjZSaEEo3M97wodzLOi5WyCdR/Ke5dso4p4nO6/MNrvnwkpyO5IltdykB4GfWStqQyvhJvDY7VlAXwMV0g==","signatures":[{"sig":"MEUCIQCbb3k9gdlb3nThT3BfZJ/fgi3unrXMtced1HnpbtXntwIgCFP4anKBD9tXBqF41Q8ycqJ0EqD/5XS7uXhYQLbbWYY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3337094},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/b91a8e43c1ae14e375245baf2084f793/sapiom-harness-0.8.2.tgz","_integrity":"sha512-8/dbqjZSaEEo3M97wodzLOi5WyCdR/Ke5dso4p4nO6/MNrvnwkpyO5IltdykB4GfWStqQyvhJvDY7VlAXwMV0g==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.7","@sapiom/agent":"^0.10.0","@sapiom/agent-core":"^0.11.4","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.2_1787455947638_0.30936308257228706","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@sapiom/harness","version":"0.8.3","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.3","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"25943c354fb077200d1f07f5328494e1c3fbc369","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.3.tgz","fileCount":438,"integrity":"sha512-FANsSttbNiA8x5uDAIS5e0s/DChqs/hMR68Fr9xYYkhjyk54pFgb48MEtVAunlXrxnp6dKoVGT11gqax1wrFPw==","signatures":[{"sig":"MEUCIQCTjtJ5xjEEa8WQHe0obetoqn36aBL3Hq54QFTGIYdJKQIgAp5EkImgDU9IipKu4jq+VJ1JfY16bJFyhdr0Jsgmn98=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3338443},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/f6a7913deb5e88445203146b06081f1b/sapiom-harness-0.8.3.tgz","_integrity":"sha512-FANsSttbNiA8x5uDAIS5e0s/DChqs/hMR68Fr9xYYkhjyk54pFgb48MEtVAunlXrxnp6dKoVGT11gqax1wrFPw==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.8","@sapiom/agent":"^0.10.1","@sapiom/agent-core":"^0.12.0","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.3_1787466136671_0.4111413217040394","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"@sapiom/harness","version":"0.8.4","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.4","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"fee90129df2b475912fa8251d6394fac39516116","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.4.tgz","fileCount":438,"integrity":"sha512-sDr20FPfDArAtZaxtGYDA9uo0K84hfuh3/sIVbEMsQ2L0YWNAzVzs1yCDwteoPaDtbrgiCuRhhahyh5VdF+jcw==","signatures":[{"sig":"MEUCIHtIcIa0sNKCHQCwZua5i38RVYUoKAtbPdA6PCPUqRlUAiEA9LMFKwIf/PidBjPOEjOMaD1hcjZh56MXSHuutoDF61s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3338561},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/7b68ca911cac38f139e4b238e2c8bd46/sapiom-harness-0.8.4.tgz","_integrity":"sha512-sDr20FPfDArAtZaxtGYDA9uo0K84hfuh3/sIVbEMsQ2L0YWNAzVzs1yCDwteoPaDtbrgiCuRhhahyh5VdF+jcw==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.9","@sapiom/agent":"^0.11.0","@sapiom/agent-core":"^0.12.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.4_1787525514701_0.8309746611145863","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"@sapiom/harness","version":"0.8.5","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.5","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"271a886f30d7821fb76a6389ce49b6208fa95c52","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.5.tgz","fileCount":438,"integrity":"sha512-mFv7TAtvNnVjcrwaUlwEfA1fBkkvphMvqdpA0BDRrsyWE+VioBSqU81/q/KJEUeYxq2T/mu1/HCR2Sa++kBkng==","signatures":[{"sig":"MEQCIFB5nDlzD/76I3nnUNozNw7XMdr6/J56VbS7kmSbiIn/AiBWqqr3nSig1QOezH9v7ovbzCQXIYlsXz2XIoE0Jdt7nA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3338737},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/3541ba562e19440689b4c5a74fa24a7d/sapiom-harness-0.8.5.tgz","_integrity":"sha512-mFv7TAtvNnVjcrwaUlwEfA1fBkkvphMvqdpA0BDRrsyWE+VioBSqU81/q/KJEUeYxq2T/mu1/HCR2Sa++kBkng==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.10","@sapiom/agent":"^0.12.0","@sapiom/agent-core":"^0.13.0","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.5_1787604348215_0.07585554249998205","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"@sapiom/harness","version":"0.8.6","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.6","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"4f69e400aff5239f1a68c6b843e9b4f89039adf7","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.6.tgz","fileCount":438,"integrity":"sha512-9P6V1C4CJhFyTXdX/WYXrFWT7k4S78B7tkNxWOT44N+QTJ+aWr6ftosYA1g38gDFD3Zc0mvy5b8Rw2fB7/U/9w==","signatures":[{"sig":"MEUCIQDITwymwAmJWOSvSTu0wAgFhRkAgpsNDnzjXVZ3Ikx9ygIgRz0fvPW494RBkL63qKUv2quy5RRHCoEslZjcAYUilmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3363996},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/d33fcf4d74fff019889f421c748c0794/sapiom-harness-0.8.6.tgz","_integrity":"sha512-9P6V1C4CJhFyTXdX/WYXrFWT7k4S78B7tkNxWOT44N+QTJ+aWr6ftosYA1g38gDFD3Zc0mvy5b8Rw2fB7/U/9w==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.10","@sapiom/agent":"^0.12.0","@sapiom/agent-core":"^0.13.0","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.6_1787642840724_0.06666688473775095","host":"s3://npm-registry-packages-npm-production"}},"0.8.7":{"name":"@sapiom/harness","version":"0.8.7","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.7","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"26d96ccf14402c6ecfb61f02a46ec8f3be7717ed","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.7.tgz","fileCount":438,"integrity":"sha512-UQCVKBCE0OOUTlb2MIc7eXgUTC62/gBBDWDw4osDdcqYPUJo+Xesxayr98rkpWelZ8SuGjCdRrIzc/OzZQ542g==","signatures":[{"sig":"MEYCIQDRD+o/HxinUnAUrH2kvNRO53qZ53yFQeRz2S7lf/IWAgIhAKQuUy66KdOFCnchPQrqoLUI1HFej16Hs2tIxarXeBxZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3366337},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.7.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/7e7bc5847d5f557be17b67f1ec410142/sapiom-harness-0.8.7.tgz","_integrity":"sha512-UQCVKBCE0OOUTlb2MIc7eXgUTC62/gBBDWDw4osDdcqYPUJo+Xesxayr98rkpWelZ8SuGjCdRrIzc/OzZQ542g==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.10","@sapiom/agent":"^0.12.0","@sapiom/agent-core":"^0.13.0","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.7_1787647037505_0.5487007787452292","host":"s3://npm-registry-packages-npm-production"}},"0.8.8":{"name":"@sapiom/harness","version":"0.8.8","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.8","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"e5c2753f2571a6bdd52cb5284ba2849c7c83d5cf","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.8.tgz","fileCount":438,"integrity":"sha512-HEAXwbQKGANjh/jS/m4S8jBzsp0oLT/15+KiYhAqwuFDVcefJysvUD4fU/MGMo9LXftx1UdvwoGEIlousRTmkA==","signatures":[{"sig":"MEYCIQDJrKUzLs5T8hPj+L1EkjWM2no8JkQIOFZvU0nRjdr/cwIhAIKbKP4LfOrXuKn4F8ZuBO+0drQQk+/azF1XsjRG/7pA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3366224},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.8.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/e3669330d07a2805fee806c5072f20ed/sapiom-harness-0.8.8.tgz","_integrity":"sha512-HEAXwbQKGANjh/jS/m4S8jBzsp0oLT/15+KiYhAqwuFDVcefJysvUD4fU/MGMo9LXftx1UdvwoGEIlousRTmkA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.12.10","@sapiom/agent":"^0.12.1","@sapiom/agent-core":"^0.13.1","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.8_1787778243811_0.9331073670785963","host":"s3://npm-registry-packages-npm-production"}},"0.8.9":{"name":"@sapiom/harness","version":"0.8.9","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.8.9","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"e3f539203c6e9ad343407c7c116491c199d9a751","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.8.9.tgz","fileCount":438,"integrity":"sha512-fJ9jZvVEe1ChhYmrh+qO19tuplv5fhmZ9w56agT2JVk/LisDFeGDqoQIt3YcLZSJcfYYRJ3RND7rXZSSXHNN6g==","signatures":[{"sig":"MEUCIA2lM53oGAFDKJGRm7Rq7vQkHbfUApW4vgdM5aGKJxtxAiEAtUzLe8UXmGdOhW8VHE8tcWtgP9M8ztzMIl2p4aSrUGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.8.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3366813},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.8.9.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/036f1593258e10b5f0d17006a71549a7/sapiom-harness-0.8.9.tgz","_integrity":"sha512-fJ9jZvVEe1ChhYmrh+qO19tuplv5fhmZ9w56agT2JVk/LisDFeGDqoQIt3YcLZSJcfYYRJ3RND7rXZSSXHNN6g==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","@sapiom/mcp":"^0.13.0","@sapiom/agent":"^0.12.2","@sapiom/agent-core":"^0.13.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","typescript":"^5.4.2","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.8.9_1787844701046_0.2911800456101157","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@sapiom/harness","version":"0.9.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.9.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"590c5286eec08bafa9def76c427fe845a2435ba5","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.9.0.tgz","fileCount":478,"integrity":"sha512-sZIpXfdpTQSuy310zdyf5d0dmhBKe07isocwK9aG3lUg6xBSh6tgLyEqts4ZSJ5P1YwZQtwlKB4U1M9Td6SD/g==","signatures":[{"sig":"MEUCIAhrY+BzlqmcspbY168jxySOVcmdr43AkKvrmVilgibPAiEAnv9PfRo55WdkBWdyQoE9GJ17Qp3CuXb1+1v/yTnEjTE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3759110},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.9.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/1102cb67009160b3a2db9cf2bb9ba569/sapiom-harness-0.9.0.tgz","_integrity":"sha512-sZIpXfdpTQSuy310zdyf5d0dmhBKe07isocwK9aG3lUg6xBSh6tgLyEqts4ZSJ5P1YwZQtwlKB4U1M9Td6SD/g==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.13.0","@sapiom/agent":"^0.12.2","@sapiom/agent-core":"^0.13.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.9.0_1787874766838_0.8774175257479422","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@sapiom/harness","version":"0.10.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.10.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"d48d99cb16498568834b4227f8f862e8726ff734","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.10.0.tgz","fileCount":478,"integrity":"sha512-qnLGWiRZ9n5xzQGmCtl55qyXvpo5PXRR+peezVQhORlZ3c2J+RkQirHknczIgcF9ewCopqaDfCHi6YKqrI/ACA==","signatures":[{"sig":"MEQCIHeXdMxlp2DwnyZfgGJLe+q3kxHI6mV9o3894Xv8yfoEAiAyRS75Z5xaNbreObq28uwOruRVqh0cfi6dMf2IR+abuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3763606},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.10.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/31bd9330604d5881f261844ca36ec72f/sapiom-harness-0.10.0.tgz","_integrity":"sha512-qnLGWiRZ9n5xzQGmCtl55qyXvpo5PXRR+peezVQhORlZ3c2J+RkQirHknczIgcF9ewCopqaDfCHi6YKqrI/ACA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.13.1","@sapiom/agent":"^0.12.2","@sapiom/agent-core":"^0.13.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.10.0_1787967957758_0.9311781938061181","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@sapiom/harness","version":"0.11.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.11.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"c4ed6db5875919d228c0adfbab3a0681b8a412cc","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.11.0.tgz","fileCount":490,"integrity":"sha512-f/4aCpGUw4KKOg3BwTxwdSPX8Weo+wvB7/ufgwxtNIIkSbq+DkMrG7BDBvXyOvJGeraHmrkpp+ZLgK9HuLtIjw==","signatures":[{"sig":"MEQCIEzlMKA7HrZvm5b6XP4I6mIr9oq1kP9IXQcc1j24QFSoAiAUs8DUFoGWrrZtAC088ONoTZHnHzpsD84HrLpA7NeBXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3835485},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.11.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/725d85709b758b0a5e28ecfcdf007ab7/sapiom-harness-0.11.0.tgz","_integrity":"sha512-f/4aCpGUw4KKOg3BwTxwdSPX8Weo+wvB7/ufgwxtNIIkSbq+DkMrG7BDBvXyOvJGeraHmrkpp+ZLgK9HuLtIjw==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.13.1","@sapiom/agent":"^0.12.2","@sapiom/agent-core":"^0.13.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.11.0_1788150830980_0.11602251053281987","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@sapiom/harness","version":"0.12.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.12.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"27da77cbcb4240b3f48d2347e65ebd0daebf1b7e","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.12.0.tgz","fileCount":498,"integrity":"sha512-bBjdJEJv9oeXAiMwdypDojhBIZBzLUG0JYhlMKpDLoLUkscyjbCchT/eo9wOvZGtwTMb7b2FWKAmGemo73yLIg==","signatures":[{"sig":"MEUCIQC1oD6Wwi1Z/XX7VOiFL3MeFqeWfeCLjnxbysN63DsxZwIgQURWvMuHf4tGOQOuty3wOnwsT6voZ4iObJEds9moQqs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4330234},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.12.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/d34e4d3a09d618bae681f134b7dc2003/sapiom-harness-0.12.0.tgz","_integrity":"sha512-bBjdJEJv9oeXAiMwdypDojhBIZBzLUG0JYhlMKpDLoLUkscyjbCchT/eo9wOvZGtwTMb7b2FWKAmGemo73yLIg==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.13.1","@sapiom/agent":"^0.13.0","@sapiom/agent-core":"^0.13.3","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.12.0_1788244698451_0.5451767028412431","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@sapiom/harness","version":"0.13.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.13.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"bb298e11dc9fce1a4c9f95a3a86863ca67a2084f","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.13.0.tgz","fileCount":578,"integrity":"sha512-CHCdJmNeeilrUmd1MF+WcTPBzcDL+KhwcoqbHuJyDL7hZjPV8DSF9hKsFJMSaCA25bYUqdIs7X+9u4J4dWe1Qw==","signatures":[{"sig":"MEUCIBgvwTL07gA5Ub7NAESFL+LcknXcBns4VSy+E0Ac1ZI2AiEA09/YL1G2MtAa3VHYlX8kXcjouH2mh/p446KmFaU0IiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5095003},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.13.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/83182d417a342fcc11e70b1f8dcc241e/sapiom-harness-0.13.0.tgz","_integrity":"sha512-CHCdJmNeeilrUmd1MF+WcTPBzcDL+KhwcoqbHuJyDL7hZjPV8DSF9hKsFJMSaCA25bYUqdIs7X+9u4J4dWe1Qw==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.14.0","@sapiom/agent":"^0.13.1","@sapiom/agent-core":"^0.13.4","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.13.0_1788412015540_0.0270568751390865","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@sapiom/harness","version":"0.14.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.14.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"306413d1178934849db0267682d09ce6b24fac28","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.14.0.tgz","fileCount":594,"integrity":"sha512-kMUyfh+qtJaDws+QpmNjhW6t4bbgwfzQA354L7cEjh3hZtTFwB0fQCK1qDqg7Mu8tn99H2gbZ5/lILwlNc7bvQ==","signatures":[{"sig":"MEYCIQDpptjR/d+LTT8XffW64xcW65SLdZkFcz+w+GOZTLpb0wIhAOOnrNfrLkwH7IFNa2+w1BCJtX15JTQtWq+SECdE+q9i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5189203},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.14.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/d4603112766d686d7d771ffb004e71e6/sapiom-harness-0.14.0.tgz","_integrity":"sha512-kMUyfh+qtJaDws+QpmNjhW6t4bbgwfzQA354L7cEjh3hZtTFwB0fQCK1qDqg7Mu8tn99H2gbZ5/lILwlNc7bvQ==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.14.0","@sapiom/agent":"^0.13.1","@sapiom/agent-core":"^0.13.4","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.14.0_1788456900349_0.8048906243259952","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@sapiom/harness","version":"0.15.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.15.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"4f0da4b613abf753161564428d0e7d3cfdfe0529","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.15.0.tgz","fileCount":758,"integrity":"sha512-iTZGidiuUR+48+xxAML6Nnl/F8VaitWCr75nUjPXA5ChgtEBBNLPn1dEjZ0KDHzpOWyGz+jK/MvMkDPfYLZRdA==","signatures":[{"sig":"MEYCIQCnxuZoTwKhL/knfywi8pyJpJEKl+2YaHZs95u8lP49fAIhAI8EE8P2ulK3FblEzDcoYNg+4vEP0W9yv2I3L4CHj+Ue","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6768401},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.15.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/4dda7a634792ad9330c90a4615a368e9/sapiom-harness-0.15.0.tgz","_integrity":"sha512-iTZGidiuUR+48+xxAML6Nnl/F8VaitWCr75nUjPXA5ChgtEBBNLPn1dEjZ0KDHzpOWyGz+jK/MvMkDPfYLZRdA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.14.0","@sapiom/agent":"^0.13.1","@sapiom/agent-core":"^0.13.4","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.15.0_1788737445082_0.6414420002400634","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@sapiom/harness","version":"0.16.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.16.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"eaa47be6f890e4396c4531b94d8c619064dd5a3a","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.16.0.tgz","fileCount":772,"integrity":"sha512-wgb3x9sXuOo2MXdLAe/EhnMUww2kOk0GhJQT/olLG8/TT7/r+A97iE1finEfrUkViTKUvphppjw7IMCjuCRwbA==","signatures":[{"sig":"MEUCIFAG2zOG6bh57FyI2p0NcNNaNtakDSq3+2jtcrErMnfxAiEA2gdqLCP4rbGgd526eVThx+mAzEcNoNJ9l05PjwFiOXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8463437},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.16.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/148b37e7b1c8abe90665e8110050e4d0/sapiom-harness-0.16.0.tgz","_integrity":"sha512-wgb3x9sXuOo2MXdLAe/EhnMUww2kOk0GhJQT/olLG8/TT7/r+A97iE1finEfrUkViTKUvphppjw7IMCjuCRwbA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.15.0","@sapiom/agent":"^0.13.2","@sapiom/agent-core":"^0.13.5","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","elkjs":"0.12.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.16.0_1788936308175_0.7588496675297098","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@sapiom/harness","version":"0.17.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.17.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"4cc7447f037f2402e5b5e9070e4955f79f961331","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.17.0.tgz","fileCount":816,"integrity":"sha512-2Z86+OKfvu9VmFpLKqJq3BegKDat3zuWu2g/0Gry0o9zbbWfdR/hmCq2+/5kRM1bQKxur/cmov7kg/1uVaT/yA==","signatures":[{"sig":"MEUCIBFb3N38NqYO3vCVdgjFKZsZfcf6trFi2UrHZv+CwV0/AiEA29y9wbtx5G86ljtA1kWc6LIOksZuMsi8bvB8hS3Af8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9016557},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.17.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/193f4c44182ab04b30a7538d102eb3b3/sapiom-harness-0.17.0.tgz","_integrity":"sha512-2Z86+OKfvu9VmFpLKqJq3BegKDat3zuWu2g/0Gry0o9zbbWfdR/hmCq2+/5kRM1bQKxur/cmov7kg/1uVaT/yA==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.16.0","@sapiom/agent":"^0.14.0","@sapiom/opencode":"^0.1.0","@sapiom/agent-core":"^0.14.0","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","elkjs":"0.12.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@opencode-ai/sdk":"1.18.29","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@assistant-ui/react":"0.15.18","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@assistant-ui/react-opencode":"0.2.22","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.17.0_1789365611410_0.8959125536212766","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"@sapiom/harness","version":"0.17.1","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.17.1","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"7e38eb7b2f46b137cbda2f805c6aec83df4d0a48","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.17.1.tgz","fileCount":816,"integrity":"sha512-4kV2p3UoON+Q0brXQYNJcAPZZQL8IADUsHvGRaXDCchNs+gNg55QB6RS34fu15SlV1oKJOTpVZaWB0REE0ye4Q==","signatures":[{"sig":"MEYCIQCdTwRKlbQUDHyCKWRxhxSkIp7Gm6HdbtKxnNCQIx/21wIhAPPZovr+NCMEmXSLn7yrh6guq4BiX7N8yXk4gdCzw0xA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICtvGJbzvSODGyyn0rxqGdUvQTbnq+IvjWPYvx+RImlAAiBFqlr/9JrzvEq67BjsoH6f888OHcFHjVSUcriMneEcgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9025253},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.17.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/49660713bc5f2e2149bf8bd7d10126ad/sapiom-harness-0.17.1.tgz","_integrity":"sha512-4kV2p3UoON+Q0brXQYNJcAPZZQL8IADUsHvGRaXDCchNs+gNg55QB6RS34fu15SlV1oKJOTpVZaWB0REE0ye4Q==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.19.1","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.16.0","@sapiom/agent":"^0.14.2","@sapiom/opencode":"^0.1.0","@sapiom/agent-core":"^0.14.2","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","elkjs":"0.12.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@opencode-ai/sdk":"1.18.29","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@assistant-ui/react":"0.15.18","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@assistant-ui/react-opencode":"0.2.22","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.17.1_1789777792810_0.45645458033179565","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@sapiom/harness","version":"0.18.0","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.18.0","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"e3f972de20e7423299e4fcdb1330af8aa2c3da38","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.18.0.tgz","fileCount":720,"integrity":"sha512-vG5e9nqpVa/8ljciM4KxUVjVXIKZLPnWT9yKxPJkZstmxgR0hbPVn6Dshwm8IxXkrjrAhdOzU+JhJYJiPuWGvw==","signatures":[{"sig":"MEQCIC9WRrMLupJo1EYLas3MOQLD8GyfoFb86N+/xWNZEmzaAiBvL08YtELPBCZdxYC5WfEkFp4IQZ76/zG2Kpd4ZTuZfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDYiABdnDjTQxZ1MRprvJrOTM5+W+x7ZEyjuavExjQJjwIhAMM5ruwUv1H7ZRtcNfnBGrQZkFRICwdmddgg0GT6fF/s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8416819},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.18.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/68a3246ef2d278c0438a7f2e77e77c5b/sapiom-harness-0.18.0.tgz","_integrity":"sha512-vG5e9nqpVa/8ljciM4KxUVjVXIKZLPnWT9yKxPJkZstmxgR0hbPVn6Dshwm8IxXkrjrAhdOzU+JhJYJiPuWGvw==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.20.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.17.0","@sapiom/agent":"^0.14.3","@sapiom/opencode":"^0.1.0","@sapiom/agent-map":"^0.2.0","@sapiom/agent-core":"^0.14.3","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","elkjs":"0.12.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@opencode-ai/sdk":"1.18.29","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@assistant-ui/react":"0.15.18","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@assistant-ui/react-opencode":"0.2.22","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.18.0_1790143423814_0.34444723273464106","host":"s3://npm-registry-packages-npm-production"}},"0.18.1":{"name":"@sapiom/harness","version":"0.18.1","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.18.1","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"a6201d6d5ef2454a47a57e9205c366641a0fc23c","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.18.1.tgz","fileCount":720,"integrity":"sha512-u/HdwUHF0I0o8z/q0MFDL1M3fM27LFnerj+bnAzoMzSDDAaHKIuxKmCVLXRJEUt87dVxxvpEhCYKSODeRMrw3w==","signatures":[{"sig":"MEYCIQCyMqX8sgvx5c4FdGImyPmgYWM1vOgNoAEbf2vRe7MdjAIhAI9ja6NHiZ8to02iM+6d9Tv3JTDNJ26ujoWZuuTrKIQm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDswbrvaXu+sbkTguL6gak8955FAqFKcfH1GUXjMiRONgIhAKjZ/njo6ZAYrmPRWyuPleJN62XGy8LEgYGH7vmQhUdC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.18.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8417060},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.18.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/5bb187dfdca359fb108f8b9a8101ed3c/sapiom-harness-0.18.1.tgz","_integrity":"sha512-u/HdwUHF0I0o8z/q0MFDL1M3fM27LFnerj+bnAzoMzSDDAaHKIuxKmCVLXRJEUt87dVxxvpEhCYKSODeRMrw3w==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.21.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.18.0","@sapiom/agent":"^0.14.4","@sapiom/opencode":"^0.1.0","@sapiom/agent-map":"^0.2.0","@sapiom/agent-core":"^0.15.0","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","elkjs":"0.12.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@opencode-ai/sdk":"1.18.29","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@assistant-ui/react":"0.15.18","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@assistant-ui/react-opencode":"0.2.22","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.18.1_1790889149201_0.8862150409928757","host":"s3://npm-registry-packages-npm-production"}},"0.18.2":{"name":"@sapiom/harness","version":"0.18.2","keywords":["sapiom","harness","claude","codex","terminal","agents"],"author":{"name":"Sapiom"},"license":"MIT","_id":"@sapiom/harness@0.18.2","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"bin":{"sapiom-harness":"dist/cli/bin.js"},"dist":{"shasum":"398f35f99c937b212e18bee83a05586cd853e778","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.18.2.tgz","fileCount":720,"integrity":"sha512-kpVsvj5Yfym9Hvlt2jXBOxcnJYAq5QdpgmSVL3hiNjh8L4Csqf/0NmxLkUYd72ZWs3vwKrNe797hsixnllaAjg==","signatures":[{"sig":"MEUCIQCdFOfmdme6UhR8JngL9/rhOIMOuJx2e8W9wsHzoxS8QgIgWrpRrsVrZ+Zv1D4NoP2CHGghmuRU34F1TrbquifRaQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDKsLnnelcuDGDqwrvLUQhkaC58V4SEuXtrqEvhVfAVuwIgRXGajUlbtyuv35lxp9BUyeKFWKj388Y3QA2eJJxhptw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.18.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8418081},"main":"./dist/index.js","type":"module","_from":"file:sapiom-harness-0.18.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"8f72deea-95b3-4411-a5e0-55905bf06e32"}},"_resolved":"/tmp/1b37b3614a240562cd06277723c172fc/sapiom-harness-0.18.2.tgz","_integrity":"sha512-kpVsvj5Yfym9Hvlt2jXBOxcnJYAq5QdpgmSVL3hiNjh8L4Csqf/0NmxLkUYd72ZWs3vwKrNe797hsixnllaAjg==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.21.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.18.0","@sapiom/agent":"^0.14.5","@sapiom/opencode":"^0.1.0","@sapiom/agent-map":"^0.2.1","@sapiom/agent-core":"^0.15.1","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","elkjs":"0.12.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@opencode-ai/sdk":"1.18.29","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@assistant-ui/react":"0.15.18","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@assistant-ui/react-opencode":"0.2.22","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.18.2_1790903845439_0.5892998674715204","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"_id":"@sapiom/harness@0.19.0","bin":{"sapiom-harness":"dist/cli/bin.js"},"bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"dist":{"shasum":"101df74324af43267cba0419b34ba2c19aaa9739","tarball":"https://registry.npmjs.org/@sapiom/harness/-/harness-0.19.0.tgz","fileCount":728,"integrity":"sha512-5Sc2xo5v3luvPnDoZMACR3wYBdPpHLtkrol5pBay8wxAieyYGzjyPYhVV4O355ipmXrsi3+TpI4aLJaDMgtsAg==","signatures":[{"sig":"MEUCIQCsAQNJRHIgE1Kbjj1tO567KAabypXO6uY2hXzGs1LjqQIgQoCWgXzt/XHId5sA9s/in6fDHo116rPfSrWV3l/RtjY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC2Qui93aVSDq3pexj5TItZF/ujqSX8QCSwrHJxTzrVtQIgPuPFjQipVMKa3ZuRS1WXx1ddqAoPeTqSe/Cnk8z2PFQ="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@sapiom%2fharness@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8411714},"main":"./dist/index.js","name":"@sapiom/harness","type":"module","_from":"file:sapiom-harness-0.19.0.tgz","types":"./dist/index.d.ts","author":{"name":"Sapiom"},"engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"license":"MIT","scripts":{"dev":"tsx src/cli/bin.ts --dev","lint":"eslint src --ext .ts","test":"vitest run && vitest run --config vitest.perf.config.ts","build":"tsc --project tsconfig.build.json && vite build --config web/vite.config.ts","clean":"rm -rf dist *.tsbuildinfo","start":"node dist/cli/bin.js","dev:web":"vite --config web/vite.config.ts","sim:e2e":"tsx scripts/e2e-sim.ts","test:ui":"playwright test --config web/e2e/playwright.config.ts","e2e:live":"tsx scripts/e2e-live.ts","build:web":"vite build --config web/vite.config.ts","test:perf":"vitest run --config vitest.perf.config.ts","typecheck":"tsc --noEmit && tsc --noEmit -p web/tsconfig.json","test:watch":"vitest","test:canvas":"playwright test --config e2e/playwright.config.ts","build:server":"tsc --project tsconfig.build.json","seed-example":"node scripts/seed-example.mjs","test:mutation":"stryker run","mock-collector":"node scripts/mock-collector.mjs"},"version":"0.19.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"8f72deea-95b3-4411-a5e0-55905bf06e32"}},"homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","keywords":["sapiom","harness","claude","codex","terminal","agents"],"_resolved":"/tmp/163ede4388f6005cfcaf2680a61c8586/sapiom-harness-0.19.0.tgz","_integrity":"sha512-5Sc2xo5v3luvPnDoZMACR3wYBdPpHLtkrol5pBay8wxAieyYGzjyPYhVV4O355ipmXrsi3+TpI4aLJaDMgtsAg==","repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.21.0","description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","directories":{},"maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.18.0","ajv":"^8.12.0","zod":"^3.25.0","open":"^10.1.0","uuid":"^10.0.0","express":"^4.21.0","node-pty":"^1.1.0","typescript":"~5.9.3","@sapiom/mcp":"^0.18.0","@sapiom/agent":"^0.14.5","@sapiom/opencode":"^0.1.0","@sapiom/agent-map":"^0.2.1","@sapiom/agent-core":"^0.15.1","express-rate-limit":"^7.4.0","@sapiom/analytics-core":"^0.2.1","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"^6.0.0","elkjs":"0.12.0","react":"^19.0.0","vitest":"^3.0.0","@types/ws":"^8.5.10","react-dom":"^19.0.0","posthog-js":"^1.363.5","@types/node":"^20.11.30","@types/uuid":"^10.0.0","@types/react":"^19.0.0","@xterm/xterm":"^5.5.0","lucide-react":"^1.23.0","@types/express":"^4.17.21","@opencode-ai/sdk":"1.18.29","@playwright/test":"^1.61.0","@types/react-dom":"^19.0.0","@xterm/addon-fit":"^0.10.0","@assistant-ui/react":"0.15.18","@vitejs/plugin-react":"^4.3.4","@stryker-mutator/core":"^9.6.1","@xterm/addon-web-links":"^0.11.0","@assistant-ui/react-opencode":"0.2.22","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/harness_0.19.0_1790921971547_0.3161685333179982"}}},"time":{"created":"2026-07-09T02:25:46.467Z","modified":"2026-10-02T06:19:33.582Z","0.0.0":"2026-07-09T02:25:46.771Z","0.1.0":"2026-07-09T04:23:40.301Z","0.1.1":"2026-07-09T06:22:24.072Z","0.1.2":"2026-07-10T00:23:12.300Z","0.1.3":"2026-07-10T00:52:07.936Z","0.1.4":"2026-07-17T22:28:11.281Z","0.1.5":"2026-07-21T17:57:30.206Z","0.1.6":"2026-07-23T23:58:06.184Z","0.2.0":"2026-07-30T01:15:27.835Z","0.2.1":"2026-07-30T01:43:06.059Z","0.2.2":"2026-07-30T03:27:11.073Z","0.2.3":"2026-07-30T20:53:00.661Z","0.2.4":"2026-07-31T01:36:13.988Z","0.2.5":"2026-08-01T19:33:16.097Z","0.2.6":"2026-08-03T23:09:24.936Z","0.2.7":"2026-08-04T05:22:53.491Z","0.3.0":"2026-08-05T06:03:31.886Z","0.4.0":"2026-08-06T02:05:22.130Z","0.4.1":"2026-08-07T06:38:15.060Z","0.5.0":"2026-08-08T19:06:17.257Z","0.5.1":"2026-08-10T16:16:50.769Z","0.6.0":"2026-08-11T16:20:03.023Z","0.7.0":"2026-08-13T00:19:15.324Z","0.8.0":"2026-08-14T16:22:24.356Z","0.8.1":"2026-08-15T00:23:17.795Z","0.8.2":"2026-08-23T03:32:27.799Z","0.8.3":"2026-08-23T06:22:16.899Z","0.8.4":"2026-08-23T22:51:54.866Z","0.8.5":"2026-08-24T20:45:48.396Z","0.8.6":"2026-08-25T07:27:20.943Z","0.8.7":"2026-08-25T08:37:17.704Z","0.8.8":"2026-08-26T21:04:04.040Z","0.8.9":"2026-08-27T15:31:41.260Z","0.9.0":"2026-08-27T23:52:47.122Z","0.10.0":"2026-08-29T01:45:58.068Z","0.11.0":"2026-08-31T04:33:51.160Z","0.12.0":"2026-09-01T06:38:18.623Z","0.13.0":"2026-09-03T05:06:55.750Z","0.14.0":"2026-09-03T17:35:00.628Z","0.15.0":"2026-09-06T23:30:45.276Z","0.16.0":"2026-09-09T06:45:08.359Z","0.17.0":"2026-09-14T06:00:11.622Z","0.17.1":"2026-09-19T00:29:52.978Z","0.18.0":"2026-09-23T06:03:43.983Z","0.18.1":"2026-10-01T21:12:29.383Z","0.18.2":"2026-10-02T01:17:25.624Z","0.19.0":"2026-10-02T06:19:31.704Z"},"bugs":{"url":"https://github.com/sapiom/sapiom-js/issues"},"author":{"name":"Sapiom"},"license":"MIT","homepage":"https://github.com/sapiom/sapiom-js/tree/main/packages/harness#readme","keywords":["sapiom","harness","claude","codex","terminal","agents"],"repository":{"url":"git+https://github.com/sapiom/sapiom-js.git","type":"git","directory":"packages/harness"},"description":"Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.","maintainers":[{"name":"sapiom-dev","email":"david@sapiom.ai"},{"name":"ilan.z","email":"ilan@sapiom.ai"},{"name":"dave_sapiom","email":"dave@sapiom.ai"},{"name":"ynadge","email":"yash@sapiom.ai"}],"readme":"# Agent Studio\n\nAgent Studio is a local web app for building on Sapiom with your own coding agent.\n\n```bash\nnpx @sapiom/agent-studio@latest [dir]\n# supported direct implementation command:\nnpx @sapiom/harness@latest [dir]\n# also available via the Sapiom CLI (npm i -g @sapiom/cli @sapiom/harness):\nsapiom dev [dir]\n```\n\nOne command checks your environment, signs you in, and opens Agent Studio\nwith your coding agent (Claude Code or Codex) running in an embedded\nterminal — pre-wired with the Sapiom MCP servers and an agent-authoring\nsystem prompt, in whatever project directory you choose.\n\nAssistant summaries use the existing `/api/state` seed and `/ws/events` full snapshots. The browser preserves the last known state as uncertain until a validated current socket snapshot arrives; account changes clear it immediately. Summaries contain activity and pending counts only.\n\nSession tabs and retained-session rows show independent Assistant activity. Hover or use the accessible label for Working, Waiting for input, Checking status or Unavailable. Terminal output keeps its existing pulse; an idle Assistant has no success badge. See the [native acceptance record](docs/assistant-background-acceptance.md) for the combined integration checks.\n\n## What you get\n\n- **Terminal sessions** — your agent, your subscription, your machine; the\n  Agent Studio only configures it. The `+` beside a project starts a session at\n  that project root; the tab-strip `+` starts a sibling session. Sessions have\n  resumable chat history.\n- **Templates** — quick starts, the template gallery, and bundled starters use\n  your selected coding agent.\n- **Agents rail** — agent projects (`sapiom.json`) discovered and\n  tracked, with one-click local test run, deploy, production run, and\n  open-in-Sapiom actions. How that discovery is rooted and bounded, how a\n  newly-created agent gets registered, and how a stale entry leaves:\n  [docs/agent-discovery.md](docs/agent-discovery.md).\n- **Canvas** — a live pane that renders static HTML your agent writes to\n  `.sapiom/canvas/` (visualize your agent, your docs, anything), plus a\n  preview mode for dev servers the agent starts.\n- **Zero config mutation** — everything is injected per-session via flags;\n  your global agent settings are never touched.\n\nUninstall: `rm -rf ~/.sapiom/harness` (all harness-owned state lives there).\n\nStudio browser sign-in also stores a renewable user credential for internal\nAssistant eligibility checks. Existing organization-only logins keep working for\nTerminal; sign out and sign in again to obtain the user credential. It stays in\nthe shared local credential store and is never returned by Studio's browser auth\nAPI. Sign-out clears it locally and attempts to revoke its token family remotely.\n\nThe Studio host refreshes the internal Assistant capability at most every 30\nseconds and expires an enabled decision within 60 seconds. Missing identity,\noffline startup, unsupported backends, and unavailable flags leave it off.\nThese access checks are independent of optional telemetry and never prevent\nordinary Terminal startup. The browser receives only the resolved boolean and a\nrandom, process-memory `authorityRevision`; it never receives principal fields,\ncredentials, identity hashes, or grant diagnostics. The revision stays stable\nthrough polling, reconnects, transient retention, and renewed leases for the\nsame authority. A verified principal crossover or actual revocation, denial,\nexpiry, or sign-out rotates it before the new state is observable. Disabled\nresponses carry the current retirement barrier, and repeated disabled polls do\nnot rotate it. Browser draft stores use this opaque boundary to prevent text\nfrom crossing authorities without persisting it.\n\nAfter a successful check, timeout, network, or HTTP 5xx failures from credential\nor capability refresh may retain that exact grant only while its original lease\nand observed user credential remain unexpired. A transient failure never moves\neither expiry. Sign-out, credential expiry, API key/environment/tenant/user\nchange, an authentication rejection, an explicit `assistant: false`, or a\nmalformed/ambiguous response revokes the grant. Thus an offline first launch\ncannot invent eligibility, while a short outage does not interrupt an unchanged\nverified principal before the server-issued lease ends.\n\nEligible internal users see a **Terminal | Assistant** switch, with Terminal\nselected initially. Assistant sends prompts and streams Sapiom responses in the\nselected project. Returning to a session reopens its OpenCode conversation;\nswitching views detaches the display while execution continues. Connection errors\noffer **Reconnect**, which reloads history without resending accepted prompts.\nInitial attachment and reconnect synchronize status after a real native event\nframe. Newer activity wins over old status snapshots; disconnecting or detaching\nthe display invalidates outstanding status/history reads.\nHistory catch-up uses one active read and bounded follow-ups. Disconnecting the\ndisplay cancels queued reads; failed or malformed reads preserve visible history.\nNative updates and removals received during a history read survive its response.\nQueued stream frames preserve completed content, and history merging preserves\nnewer execution status.\nAfter a stream gap, Assistant retains visible output and shows **Catching up…**\nuntil native history or a complete stream update repairs its text baseline.\nDisconnecting also cancels outstanding catch-up requests before reconnection.\nAttachment and reconnect also reconcile pending permissions and questions.\nAssistant shows **Waiting for input** for current pending requests; failed request\nreads retain last-known state while the status remains uncertain.\nEvent transport scopes each frame to the authorized conversation and cancels\nits reader and status catch-up when the browser connection ends.\nThe shared observer module derives activity and pending-request counts without\nstoring transcript content or issuing execution commands.\nHost observation starts after an authorized conversation attaches and ends with\nruntime retirement. Reading summaries never launches inactive conversations.\nThis first slice includes basic tool status; richer controls arrive separately.\nAn unconfirmed response keeps the answer and tool results visible as **Stopped**.\nStudio hides its internal completion markers even if the model supplies an\nincorrect turn ID, including extra markers inside a confirmed answer.\nLiteral prose and invalid marker syntax remain visible. Incomplete marker\ncandidates are hidden while streaming and restored when the response ends.\nAfter automatic answer recovery, Studio reconnects the conversation's event\nstream to reconcile history and status while keeping the chat and draft visible.\nStudio actions reveal Terminal after a foreground CLI prompt is accepted; a\nrejected send shows its error and keeps the selected view. Unsent chat text is\nkeyed by authenticated principal and Studio session above the centre pane, so it\nsurvives Terminal/Assistant and session switches, reconnects, exited-session\nviews, and temporary New Session or past-session review navigation. It is never\npersisted: actual Assistant-access retirement, authority crossover, sign-out,\nsession deletion, and page/app reload clear the applicable in-memory draft.\nSame-authority renewals, polls, and reconnects retain it. Conversation view is\na separate, unpersisted mount-local preference: Terminal is the initial/reset\nview, while a foreground CLI prompt accepted by Studio explicitly reveals it.\nBackground actions keep the selected view. A failed UI access poll retains the\nopen draft for at most 60 seconds after the last success; explicit\nrevocation/sign-out takes effect immediately when observed. The host continues\nenforcing its own capability expiry independently.\n\nThe current `@assistant-ui/react-opencode` integration stays behind\n`OpenCodeChat`, the host-to-UI adapter. The host exposes only the shared,\nstrictly parsed transport-error contract; the adapter selects trusted static\ncopy and maps its bounded actions to the existing sign-in, Settings, Terminal,\nor reconnect surfaces. Replacing the pinned UI library means replacing that\nadapter, not changing the host association/runtime protocol or adopting native\nevents directly. Confirmed missing native history leaves the Studio session and\nrecord intact and opens Terminal; it never fabricates Continue/Resume or a new\nnative conversation.\n\nThe Assistant's model and remote MCP requests use a Studio-owned local bridge.\nIts short-lived runtime credential is separate from browser authentication;\nStudio adds the Sapiom key only when forwarding to the configured services.\nProduction sends Responses API requests to `https://router.sapiom.ai/v1/responses`\nwith the explicit `gpt-luna` model and the signed-in account's `x-api-key`. Luna uses\nlow reasoning effort and streams both tool calls and answers. Responses are not\nstored by the provider; encrypted reasoning travels with native conversation\nhistory. Other environments must explicitly set `services.llm` to a router origin\nthat supports `/v1/responses` in the matching credentials-file environment entry;\nStudio never falls back from a custom environment to production.\n\nStudio owns each Assistant runtime for the authorized session and working\ndirectory. Browser detachment leaves it running; sign-out, access revocation,\nand Studio shutdown stop it. Runtime state is isolated by user, organization,\nsession, and directory under `~/.sapiom/harness/opencode`. A process lock prevents\ntwo Studio hosts from opening the same runtime state concurrently.\n\nTransport failures use fixed, credential-free codes and copy. HTTP responses\ncarry a nested typed error; an already-open event stream receives the same error\nas a host-generated `studio.error` before closing when possible. Native events\ncannot claim that host-only type. Ordinary native events require matching\nsession IDs, including every nested ID. The only session-less native failure\nconverted to a terminal Studio error is a Sapiom provider-auth error received\nfrom the currently bound runtime and authority with an exact authorized-directory\nenvelope; unknown, conflicting, stale-runtime, and differently scoped events are\ndropped. Reconnect reattaches and reloads history; it never replays an accepted\nprompt or tool call.\n\nThe Studio session record remains authoritative for session identity, project,\nand working directory. Its authority-scoped runtime directory owns a versioned\n`association.json` sidecar that maps that Studio session to one native\nconversation. The host serializes creation and atomic commit under the same\nlifecycle that owns the native runtime; browser mounts do not own the mapping.\nRetirement, sign-out, missing native history, and transient lookup failures do\nnot delete or replace it. A native 404 is reported as confirmed unavailable,\nwhile network and other transport failures remain retryable; neither path\ncreates a second conversation. There is no implicit legacy scan or cleanup in\nthis correction: a future migration adapter must validate both identities,\ncommit a versioned mapping atomically, preserve the old history until verified,\nand make cleanup an explicit post-migration operation.\n\nThe rail's cloud icon marks an agent as deployed once Studio confirms a ready\nhosted build. Failed checks silently retain the last confirmed indicator, and changing\naccounts clears this evidence. Retained indicators do not enable cloud runs.\n\nCodex receives the generated remote Sapiom, local `sapiom-dev`, and optional\nAgent Map MCP configuration on every session launch and resume. Studio uses session-specific\nserver names such as `sapiom-dev-<session suffix>` and identifies them in the\nagent's instructions. This keeps existing Codex MCP registrations intact and\navoids inheriting old credentials or conflicting transports from a server with\nthe same name. Credentials are passed through Codex's environment and cleared from\nshell-tool environments; they never appear in command arguments. Authoring-process\nsettings stay on the MCP server. Studio does not write to your Codex `config.toml`. If a generated MCP\nfile cannot be read or parsed, the session reports an error so you can start a\nnew session to regenerate it.\n\n## Telemetry\n\nWith explicit opt-in, Agent Studio collects usage events (prompts, tool calls,\nsession lifecycle) to improve Sapiom. Opt out any time; `--no-telemetry`\ndisables collection entirely. Events are also written locally to\n`~/.sapiom/harness/events.ndjson` for your own inspection.\n\nProject bootstrap and identity migration add content-free `project_bootstrap.*`\nand `project_agent.identity_*` lifecycle events. Navigation distinguishes\n`agent_map.entered` from `session.switched`. These events contain bounded\nproject/session/attempt identifiers, retry ordinals, queue depths, outcomes, and\nerror codes only. Prompts, assistant text, source text, local paths, connector\npayloads, secrets, and raw provider errors remain local. The same telemetry\nopt-in controls whether lifecycle events leave the machine. Hook projections\nreduce session-start source to a fixed enum, model identity to a presence\nboolean, and usage to allowlisted, clamped token counters; arbitrary provider\nstrings and usage fields remain local.\n\n## Outbound requests\n\nAgent Studio makes one Sapiom request of its own, separate from telemetry\n(above), from the calls your own actions make (sign-in, Deploy, Prod Run), and\nfrom what its other components do on their own (the app's product analytics, and\n`npx @sapiom/mcp@latest` fetching and running the local MCP server each session):\n\nProject bootstrap makes no additional network request. Its attempt\ncoordination, durable input ordering, and lifecycle persistence stay inside the\nlocal server. Existing outbound surfaces remain the system-prompt fetch below,\nthe coding agent's ordinary provider traffic, and opt-in telemetry.\n\n- **System prompt, on every session start** — an unauthenticated\n  `GET https://api.sapiom.ai/v1/harness/system-prompt`, so the Studio conventions\n  your coding agent is told about can improve without you upgrading this package.\n  It sends no session content, no identifiers and no API key, and it is _not_\n  gated on the telemetry opt-in — it fetches configuration rather than reporting\n  usage. It is bounded at 5 seconds and falls back to the prompt bundled in this\n  package on any failure, so an offline session behaves exactly as before.\n  `SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1` (or `true`) skips the request entirely\n  and always uses the bundled prompt.\n\n## Development\n\n```bash\npnpm --filter @sapiom/harness dev        # server (tsx) on :4100\npnpm --filter @sapiom/harness dev:web    # Vite dev server, proxies to :4100\npnpm --filter @sapiom/harness build      # server (tsc) + SPA (vite) → dist/\n```\n\nArchitecture: a single Node process (Express + ws + node-pty) serves the built\nSPA, a small REST API, terminal WebSocket streams, and the local telemetry\ningest endpoint. The interface contract lives in `src/shared/types.ts`.\n\n### Codex MCP validation\n\nThe ordinary unit and server tests cover launch/resume conversion, login and\ncredential refresh, logout, and error reporting. To verify actual tool discovery\nwith an installed Codex CLI, build the harness's workspace dependencies, then\nrun the opt-in test:\n\n```bash\npnpm --filter \"@sapiom/harness^...\" build\nRUN_CODEX_MCP_INTEGRATION=1 pnpm --filter @sapiom/harness exec vitest run src/core/adapters/codex-mcp.integration.test.ts\n```\n\nThe test runs the `codex` binary found on `PATH`. Set `CODEX_TEST_BINARY` to the\npath of a different installed version to test that one instead.\n\nThis test uses a temporary Codex home, the built `sapiom-dev` server, and local\nHTTP fixtures. It requires no Codex login or model request and checks both a\nfresh home and an existing configuration with conflicting server registrations.\nIt also checks that command environments exclude MCP credentials and the Electron\nlaunch flag while preserving unrelated user shell settings.\n\n### Project sessions and Agent Map bootstrap\n\nEvery session whose working directory resolves to a Studio project is an\nordinary writable coding session with the same server-derived\n`{ projectId, userId, sessionId }` principal, project-agent prompt appendix, and\nAgent Map tools. Assignment or bootstrap metadata is context only and cannot\nchange the prompt profile, tools, filesystem policy, or implementation\nauthority.\n\nClicking a project name opens its durable Agent Map without creating, resuming,\nfocusing, or prompting a session. Every tab represents one real session ID and\nopens that session's ordinary conversation and Canvas/Steps experience. Sessions\ncreated before this change may still carry the **Plan Agents** title of the\nretired automatic first session; the title does not confer a role and can be\nrenamed like any other session.\n\nEmpty projects have no inline first-agent creation button, including after a\nsession ends. Use the project's session shortcut or its menu to start work;\nwarnings about separate checkouts that were not searched remain visible.\n\nMap bootstrap is legacy state. Opening or adding a project never schedules it;\nthe coordinator only resumes sessions that already carry bootstrap metadata from\ninstalls that opened projects before this change, and no new session enrols.\nFor those sessions the earlier guarantees still hold. The model reads the\ncurrent map and uses the same structured tools available to every project\nsession. It only proposes an initial map while the durable map remains\nmeaningfully empty. Attempt IDs, retry ordinals, readiness and model-turn\ntimeouts, terminal outcomes, and input-delivery acknowledgements survive\nrestart. Real user input has priority: an initial prompt prevents bootstrap\nfrom starting, and later input preempts a pending or still-staged attempt. If\nthe bootstrap Enter may already have crossed the PTY boundary, the user input\nis durably accepted and held until a correlated completion or process restart\nproves that turn cannot overlap; prompts are never concatenated or blindly\ninterleaved. Opening the map never schedules bootstrap.\n\nBootstrap state lives under\n`<state-root>/agent-map/project-bootstrap/`. Valid pre-upgrade session metadata\nand queue files are read and normalized without changing the session ID,\nprovider binding, working directory, title, transcript, or Canvas. Malformed or\nambiguous legacy identity is retained and rejected safely rather than deleting\nor duplicating the session. Retired record strings live only in dedicated,\ntested migration decoders. Live clients use the generic session routes.\n\n#### Embedder migration\n\nThe public `HarnessSession.agentMapIdentity` is now the exported\n`ProjectAgentSession { projectId, userId, sessionId }`. Embedders must stop\nreading the removed `role` and `assignment` fields; those fields no longer\ndescribe live authority. `AgentMapToolEvent.role` is also removed; consumers use\nneutral project, session, tool, and outcome fields. Persisted pre-upgrade\nproject-session data is migration input only.\nRead the optional `projectBootstrap` field when displaying bootstrap lifecycle\nstate for sessions that already carry it; opening or adding a project no longer\ncreates a session or a bootstrap turn (the user's first idea starts the first\nsession). If an embedder already owns the first prompt for a session, set\n`initialUserInputPending: true` in that session's `CreateSessionRequest`; this\ncontent-free flag never changes the session's authority or tools.\n\nCreating an agent is two requests, in this order: `POST /api/agents/scaffold`\n`{ root, name, template? }` creates the agent in the project (a 409 duplicate\nor 400 invalid name is the refusal; nothing starts), then `POST /api/sessions`\nopens one ordinary session in the project folder. To deliver the first task\nas part of that session's creation, send `initialPrompt` with optional\n`initialAttachments`, `initialSources` (URLs, handed over as text and never\nfetched by the harness) and `initialSetup` (instructions the harness appends\nafter the user's words, shown in Studio as a collapsed setup disclosure) in\n`CreateSessionRequest`. Attachments accept `{ kind: \"path\", path }` references\nor inline `{ kind: \"inline\", filename, dataUrl }` data. The first turn is\ncomposed in one order (`buildFirstPrompt`): idea, attached files, linked\nsources, setup. There is no session-side `scaffold` option and no English\nscaffold prompt on any creation path. Adapter authors receive the composed\nturn as `LaunchOpts.initialPrompt` on fresh launches; resume does not replay\nit. Embedders that configure their own HTTP body parser can use the\nexported `CREATE_SESSION_JSON_LIMIT_BYTES` for this route. Session creation\nand attachment uploads each allow 30 requests per minute in independent\nbuckets.\n\nThe browser/host token gates `/api` routes and is never injected into a coding\nagent PTY. Each PTY instead receives session-bound ingest and Agent Map\ncapabilities. Project scope is re-derived from trusted server state before every\nlaunch or resume; capabilities rotate on resume, revoke on exit or principal\nchange, expire when inactive, and fail closed outside their project.\n\n### Project contract helpers\n\n`@sapiom/harness` exports immutable map, plan and brief record types, exact-version\nreferences, strict codecs and canonical digest helpers for offline validation.\nFor example, use `parseProjectBuildPlanVersion` to validate a plan record and\n`computeBuildPlanSemanticDigest` to compare its authored meaning independently\nof timestamps or attribution. These data contracts do not require a live session\nor an active MCP tool. Store and tool activation are separate integrations.\n\nFor offline prompt composition, `PROJECT_AGENT_PROMPT_APPENDIX` provides the\ncommon Studio project guidance and `projectAgentPromptAppendix(focusedContext?)`\nappends an optional already-rendered `FocusedSessionContextProjection`. These\nsupported exports let an embedder reuse Studio's instructions without starting\na server. Use the returned string as prompt content; its wording evolves with\nStudio guidance.\n\n`BuildPlanId`, `ArchitectureSourceRef`, `AgentMapRevisionId`,\n`AgentBriefVersionRecord`, and `computeArchitectureGraphDigest` are supported\naliases for the corresponding neutral plan, map and brief contracts; they do\nnot introduce a second data model.\n\n### Existing projects after an update\n\nDesktop and CLI startup reset only files with outer `storageSchemaVersion: 1`.\nThe reset deletes that project's `workspace.json` under its normal write lock and\njournals completion; agent source, project identity, sessions, and history remain.\nFormat 2 is never reset. A separate compatibility pass recognizes four exact\nhistorical wrapped-format-2 container shapes, only at their initial revision with\nidentical creation/update timestamps, null map/plan pointers, and every proposal,\nreceipt, brief, assignment, approval, consent, and history collection empty.\nUnder the project lock it durably saves the original bytes to\n`workspace.empty-wrapped-v2.<sha256>.backup.json`, then atomically converts that\nunused container into current format 2. Shared startup and late reads use the same\nconversion, including initialization eligibility reads. A current-format-2 file\nis never rewritten by this pass. Authored or uncertain older wrappers retain\ntheir storage error and require separate data-preserving compatibility handling.\n\nOnce discovery completes, projects with agents and no authored map receive one\nbackground structured inference pass. Valid unused format-2 containers qualify;\nany current map, map version, or accepted operation history prevents automatic\ninitialization, even if a user emptied the graph. Generation uses static contract\nevidence, two concurrent tasks at most, and a three-minute timeout. Queued work\nresumes on restart; failed or interrupted work requires **Retry generation**.\nThe final write rechecks ownership, project access, and absence under the map lock.\nA coding session that creates a map first wins; automatic output is discarded.\nNew-project Plan Agents bootstrap shares this first-map ownership decision.\nStatic inspection excludes dependency, build, and Studio metadata directories,\nincluding symlinks at those ignored boundaries. Other source links remain opaque\nand prevent generation from proceeding with incomplete evidence.\n\nThe pass uses the project's latest available coding provider, otherwise the host\ndefault, and its configured default model. Authentication/execution failures do\nnot switch providers. Claude exposes only its JSON formatter, with coding tools,\nhooks, MCP servers, and optional user authentication helpers disabled. Native\nOAuth or API-key authentication is retained; helper-only logins cannot initialize\nmaps in the background. Codex uses an\nephemeral app-server thread with no code environment and an isolated provider\nconfiguration; its login snapshot cannot rotate the native refresh token. Native\nfile authentication and Mac's direct keychain are supported; unavailable or\nunsupported credential stores fail without changing the user's authentication.\nThese restrictions remove the model's project-write capabilities; native CLIs\nstill run as the user and remain subject to administrator-managed authentication.\nNo background session tab, provisional inventory graph, or raw inference task is\npublished to the browser. Relationships need contract evidence; disconnected\nagents remain visible in a compact component layout. Selection survives topology\nupdates; the view follows updates until the user pans or zooms, and **Fit** resumes it.\n\n`GET /api/projects/:projectId/agent-map/initialization` returns bounded lifecycle\nstate. The authenticated `POST .../initialization/retry` repeats eligibility checks.\n`agent-map.initialization.changed` announces status only; prompts, source paths,\ncredentials, and raw model output are never included.\nWhile generation is active, the selected project also polls its durable status\nso completion by another Studio process is visible without reloading the page.\n\n### Agent Map layout\n\nAgent Maps use the **Vertical ELK** layout in both the CLI host and desktop.\nELK 0.12.0 runs in a bundled local worker and arranges the saved nodes and\nrelationships; it does not change the map, its history, or the inference pass.\nDisconnected components pack to the available pane; Fit restores automatic\nframing after a manual pan or zoom. Per-agent Canvas views keep their own layout.\n\nVertical replaces the previous project map layout for everyone. Existing maps\nopen directly, including maps with an older layout preference. Only agents\nwithout a map use the normal initialization path.\n\nIf arrangement fails, **Retry layout** tries again without modifying the saved\nmap. Opening a map loads the bundled worker (about 1.6 MB raw / 467 kB gzip).\n\n### Agent Map implementation links\n\nAgent Map nodes resolve to exact same-project Studio implementations. Existing\ngenerated maps inherit uniquely proven initialization links. Missing or ambiguous\nimplementations remain unresolved, preserving the planned node and map history.\n\nThe boot-token-protected `GET /api/projects/:projectId/agent-map/implementations`\nreturns a path-free projection. `GET .../nodes/:nodeId/implementation` resolves\nthe current exact local target for navigation. Both are uncached reads and do\nnot start sessions, scans or another model pass.\n\nClick an agent or subagent node to open its linked agent’s step graph on Canvas,\nkeeping the current conversation. Use the node’s Info button to inspect its plan.\nOther node kinds open the inspector directly. Unlinked, missing or ambiguous\nimplementations keep the map open and show a recovery message in the inspector.\n\nAgent and subagent nodes show **Draft** until a ready hosted build is confirmed,\nthen **Deployed**, including while idle or after local edits. Badges share the\nrail's deployment evidence. Unavailable lookups offer **Retry status** to check\nagain without reloading the map. Other node kinds have no deployment badge.\n\n### Agent Map MCP\n\nStudio exposes a stateful Streamable HTTP MCP endpoint at `/mcp/agent-map` for\nthe coding-agent processes it launches. `POST` initializes and calls the\nprotocol; `GET` and `DELETE` support the protocol's live stream and session\nshutdown. This route is separate from the browser-token-protected `/api`\nsurface. It requires a Studio-issued bearer capability scoped to one trusted\nproject/session identity; callers cannot supply or change that identity.\n\nStudio injects the capability privately at process launch. Successful use\nrenews its inactivity lease, while session exit, resume rotation, signed-in\nprincipal changes, and server shutdown revoke it. Consumers should not copy,\npersist, log, or reuse the capability outside the launched session.\n\nEvery trusted project session receives the same nine project-wide tools:\n\n- `agent_map_read` reads the current confirmed workspace and shared proposal.\n- `agent_map_validate` validates one complete operation batch without mutating\n  shared state or allocating permanent IDs.\n- `agent_map_propose` atomically and idempotently applies one validated batch\n  to the shared Proposed map.\n- `build_plan_read` reads the current plan or one exact immutable historical\n  version.\n- `build_plan_validate` previews the same strict request accepted by apply\n  without writing state or consuming IDs.\n- `build_plan_apply` atomically appends an idempotent plan version using exact\n  expected map and plan references.\n- `build_plan_rebase` moves the current plan between exact map versions using\n  explicit remap or removal resolutions.\n- `build_plan_brief_refresh` refreshes canonical or focused context from exact sources.\n- `project_subsession_delegate` creates or reuses writable child sessions,\n  refreshes focused context, releases owned children, or reclaims dormant bindings.\n\nDelegation accepts up to 16 children per batch, four nesting levels and 64 active\nor explicitly re-referenced coordinator-owned sessions per project. Readiness\nwaits share a 30-second batch budget; partial `readiness_timeout` results can be\nretried explicitly with the same request key and durable session identities.\n\nThe map and plan use append-only immutable histories with optimistic\nconcurrency. Roles, assignment completeness, proposal state, and focused brief\navailability never determine whether a session may use these tools or write\ncode. See [`docs/shared-build-plan.md`](docs/shared-build-plan.md) for the\nversion, replay, rebase, and brief-storage contracts.\n\nHTTP contracts that need more than a type to use are written up under `docs/`:\n\n- [`docs/agent-canvas-graph.md`](docs/agent-canvas-graph.md) — the session-free\n  `GET /api/workflows/:path/graph` Canvas route keyed by an agent's path.\n- [`docs/agent-map-api.md`](docs/agent-map-api.md) — durable project identity,\n  map/node navigation, recovery and the removed project graph endpoints.\n\n## Testing\n\nThree tiers — run whatever fits your change:\n\n**Unit tier** (vitest, no browser, no agent): covers server logic, adapters,\nanalytics, and canvas rendering. Runs in CI on every PR.\n\n```bash\npnpm --filter @sapiom/harness test\n```\n\n**Playwright mock tier** (chromium, Vite dev server with `VITE_MOCK=1`, no\nharness server or agent process). The full `web/e2e/` suite against the SPA in\nmock mode. Runs in CI on every PR. For a fast watch loop locally, use UI mode:\n\n```bash\n# One-time browser install (not included in pnpm install):\npnpm --filter @sapiom/harness exec playwright install chromium\n\n# Watch/UI mode — re-runs affected specs on save:\npnpm --filter @sapiom/harness exec playwright test \\\n  --config web/e2e/playwright.config.ts --ui\n\n# Or run the full suite once (same command CI uses):\npnpm --filter @sapiom/harness test:ui\n```\n\n**E2E live tier** (real agent binaries, real pty, no CI). Requires Claude Code\nor Codex installed and a valid `SAPIOM_API_KEY` in your environment.\n\n```bash\npnpm --filter @sapiom/harness e2e:live\n```\n","readmeFilename":"README.md"}