@pi-harness/pi-harness 0.1.21 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/apps/web/dist/assets/index-Bo9CNI_U.js +22 -0
- package/apps/web/dist/index.html +1 -1
- package/apps/web/package.json +6 -6
- package/apps/web/server-dist/bin.js +18 -5
- package/apps/web/server-dist/bin.js.map +1 -1
- package/apps/web/src/server/bin.ts +18 -5
- package/apps/web/test/bin.test.ts +90 -0
- package/node_modules/@pi-harness/api-gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/index.js +204 -66
- package/node_modules/@pi-harness/api-gateway/dist/index.js.map +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/agent-teams.json +3 -12
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +3 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +3 -12
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +3 -13
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +2 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +2 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -12
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +3 -12
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +4 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +3 -13
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -12
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -13
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -12
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +2 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +2 -6
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -13
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +2 -6
- package/node_modules/@pi-harness/api-gateway/package.json +1 -1
- package/node_modules/@pi-harness/cli/dist/node-stdio.d.ts.map +1 -1
- package/node_modules/@pi-harness/cli/dist/node-stdio.js +3 -1
- package/node_modules/@pi-harness/cli/dist/node-stdio.js.map +1 -1
- package/node_modules/@pi-harness/cli/dist/relaunch.d.ts.map +1 -1
- package/node_modules/@pi-harness/cli/dist/relaunch.js +6 -1
- package/node_modules/@pi-harness/cli/dist/relaunch.js.map +1 -1
- package/node_modules/@pi-harness/cli/package.json +1 -1
- package/node_modules/@pi-harness/host-webserver/dist/index.d.ts.map +1 -1
- package/node_modules/@pi-harness/host-webserver/dist/index.js +52 -3
- package/node_modules/@pi-harness/host-webserver/dist/index.js.map +1 -1
- package/node_modules/@pi-harness/host-webserver/package.json +1 -1
- package/node_modules/@pi-harness/web-app/dist/index.d.ts +3 -0
- package/node_modules/@pi-harness/web-app/dist/index.d.ts.map +1 -1
- package/node_modules/@pi-harness/web-app/dist/index.js +9 -5
- package/node_modules/@pi-harness/web-app/dist/index.js.map +1 -1
- package/node_modules/@pi-harness/web-app/package.json +1 -1
- package/package.json +7 -7
- package/packages/api-gateway/dist/index.d.ts.map +1 -1
- package/packages/api-gateway/dist/index.js +204 -66
- package/packages/api-gateway/dist/index.js.map +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +3 -12
- package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +3 -8
- package/packages/api-gateway/dist/marketplace-entries/official/archify.json +3 -12
- package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +3 -13
- package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +2 -5
- package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +2 -8
- package/packages/api-gateway/dist/marketplace-entries/official/context.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -12
- package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/genui.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +3 -12
- package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +4 -11
- package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +3 -13
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/memory.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -12
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -13
- package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -12
- package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +2 -7
- package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +2 -6
- package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -13
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +2 -6
- package/packages/api-gateway/package.json +1 -1
- package/packages/api-gateway/src/index.ts +227 -68
- package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +3 -12
- package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/annotation.json +3 -8
- package/packages/api-gateway/src/marketplace-entries/official/archify.json +3 -12
- package/packages/api-gateway/src/marketplace-entries/official/at-file.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +3 -13
- package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +2 -5
- package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +2 -8
- package/packages/api-gateway/src/marketplace-entries/official/context.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +3 -12
- package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/genui.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +3 -12
- package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +4 -11
- package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +3 -13
- package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/memory.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/modlens.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/module-search.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/openpets.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +3 -12
- package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +3 -13
- package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/session-export.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/session-search.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +3 -12
- package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/synapse.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +2 -7
- package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +2 -6
- package/packages/api-gateway/src/marketplace-entries/official/web-research.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +3 -13
- package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +2 -6
- package/packages/api-gateway/test/index.test.ts +363 -1
- package/packages/api-gateway/test/marketplace-schema.test.ts +139 -0
- package/packages/api-gateway/test/release-contract.test.ts +77 -0
- package/packages/api-gateway/test/release-package.test.ts +1 -1
- package/packages/api-gateway/test/release-version.test.ts +6 -4
- package/packages/bundle-web-app/dist/index.d.ts +3 -0
- package/packages/bundle-web-app/dist/index.d.ts.map +1 -1
- package/packages/bundle-web-app/dist/index.js +9 -5
- package/packages/bundle-web-app/dist/index.js.map +1 -1
- package/packages/bundle-web-app/package.json +1 -1
- package/packages/bundle-web-app/src/index.ts +12 -5
- package/packages/bundle-web-app/test/index.test.ts +33 -2
- package/packages/cli/dist/node-stdio.d.ts.map +1 -1
- package/packages/cli/dist/node-stdio.js +3 -1
- package/packages/cli/dist/node-stdio.js.map +1 -1
- package/packages/cli/dist/relaunch.d.ts.map +1 -1
- package/packages/cli/dist/relaunch.js +6 -1
- package/packages/cli/dist/relaunch.js.map +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/cli/src/node-stdio.ts +6 -3
- package/packages/cli/src/relaunch.ts +5 -1
- package/packages/cli/test/node-stdio.test.ts +43 -0
- package/packages/cli/test/relaunch.test.ts +35 -0
- package/packages/host-webserver/dist/index.d.ts.map +1 -1
- package/packages/host-webserver/dist/index.js +52 -3
- package/packages/host-webserver/dist/index.js.map +1 -1
- package/packages/host-webserver/package.json +1 -1
- package/packages/host-webserver/src/index.ts +57 -3
- package/packages/host-webserver/test/index.test.ts +129 -1
- package/apps/web/dist/assets/index-e92yZuUr.js +0 -22
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import { request as httpRequest } from "node:http";
|
|
2
3
|
import { afterEach, describe, expect, test } from "vitest";
|
|
3
|
-
import webServerPlugin, { DEFAULT_WEB_SERVER_PORT } from "../src/index.js";
|
|
4
|
+
import webServerPlugin, { DEFAULT_WEB_SERVER_PORT, type WebServer } from "../src/index.js";
|
|
4
5
|
|
|
5
6
|
const contexts: Context[] = [];
|
|
6
7
|
|
|
@@ -8,6 +9,42 @@ afterEach(async () => {
|
|
|
8
9
|
await Promise.all(contexts.splice(0).map(async (context) => context.fiber.dispose()));
|
|
9
10
|
});
|
|
10
11
|
|
|
12
|
+
async function startServer(config: { host?: string; port: number }): Promise<WebServer> {
|
|
13
|
+
const context = new Context();
|
|
14
|
+
contexts.push(context);
|
|
15
|
+
await context.plugin(webServerPlugin, config);
|
|
16
|
+
return context.webServer;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Node's fetch strips a caller-supplied Host header, so raw node:http is needed to emulate a DNS-rebinding request.
|
|
20
|
+
function rawRequest(server: WebServer, headers: Record<string, string>, method = "GET"): Promise<{ status: number; body: string }> {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const request = httpRequest({ host: "127.0.0.1", port: server.port, path: "/health", method, headers }, (response) => {
|
|
23
|
+
let body = "";
|
|
24
|
+
response.setEncoding("utf8");
|
|
25
|
+
response.on("data", (chunk: string) => {
|
|
26
|
+
body += chunk;
|
|
27
|
+
});
|
|
28
|
+
response.on("end", () => resolve({ status: response.statusCode ?? 0, body }));
|
|
29
|
+
});
|
|
30
|
+
request.on("error", reject);
|
|
31
|
+
request.end();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function registerHealth(server: WebServer): { calls: number } {
|
|
36
|
+
const state = { calls: 0 };
|
|
37
|
+
server.register({
|
|
38
|
+
path: "/health",
|
|
39
|
+
handler(_request, response) {
|
|
40
|
+
state.calls += 1;
|
|
41
|
+
response.writeHead(200, { "content-type": "text/plain; charset=utf-8" });
|
|
42
|
+
response.end("ok");
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
return state;
|
|
46
|
+
}
|
|
47
|
+
|
|
11
48
|
describe("web server plugin", () => {
|
|
12
49
|
test("uses the memorable Pi default port", () => {
|
|
13
50
|
expect(DEFAULT_WEB_SERVER_PORT).toBe(3141);
|
|
@@ -47,4 +84,95 @@ describe("web server plugin", () => {
|
|
|
47
84
|
expect(() => context.webServer.register({ path: "health", handler() {} })).toThrow(/absolute/);
|
|
48
85
|
expect(() => context.webServer.register({ path: "/health/", handler() {} })).toThrow(/trailing slash/);
|
|
49
86
|
});
|
|
87
|
+
|
|
88
|
+
test("turns a synchronous handler throw into a 500 response and keeps serving", async () => {
|
|
89
|
+
const server = await startServer({ host: "127.0.0.1", port: 0 });
|
|
90
|
+
server.register({
|
|
91
|
+
path: "/sync-throw",
|
|
92
|
+
handler() {
|
|
93
|
+
throw new Error("boom-sync");
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
server.register({
|
|
97
|
+
path: "/async-throw",
|
|
98
|
+
handler() {
|
|
99
|
+
return Promise.reject(new Error("boom-async"));
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
registerHealth(server);
|
|
103
|
+
|
|
104
|
+
await expect(
|
|
105
|
+
fetch(server.url + "/sync-throw").then(async (response) => ({ status: response.status, body: (await response.json()) as unknown })),
|
|
106
|
+
).resolves.toEqual({
|
|
107
|
+
status: 500,
|
|
108
|
+
body: { error: "boom-sync" },
|
|
109
|
+
});
|
|
110
|
+
await expect(
|
|
111
|
+
fetch(server.url + "/async-throw").then(async (response) => ({ status: response.status, body: (await response.json()) as unknown })),
|
|
112
|
+
).resolves.toEqual({
|
|
113
|
+
status: 500,
|
|
114
|
+
body: { error: "boom-async" },
|
|
115
|
+
});
|
|
116
|
+
await expect(fetch(server.url + "/health")).resolves.toMatchObject({ status: 200 });
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test("rejects cross-origin requests with 403 before any handler or fallback runs", async () => {
|
|
120
|
+
const server = await startServer({ host: "127.0.0.1", port: 0 });
|
|
121
|
+
const health = registerHealth(server);
|
|
122
|
+
let fallbackCalls = 0;
|
|
123
|
+
server.registerFallback((_request, response) => {
|
|
124
|
+
fallbackCalls += 1;
|
|
125
|
+
response.end("fallback");
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const crossOrigin = await fetch(server.url + "/health", { method: "POST", headers: { origin: "https://evil.example" }, body: "{}" });
|
|
129
|
+
expect(crossOrigin.status).toBe(403);
|
|
130
|
+
await expect(crossOrigin.json()).resolves.toEqual({ error: "Cross-origin requests are not allowed" });
|
|
131
|
+
await expect(fetch(server.url + "/anything", { method: "POST", headers: { origin: "https://evil.example" }, body: "{}" })).resolves.toMatchObject({
|
|
132
|
+
status: 403,
|
|
133
|
+
});
|
|
134
|
+
await expect(fetch(server.url + "/health", { headers: { origin: "null" } })).resolves.toMatchObject({ status: 403 });
|
|
135
|
+
await expect(fetch(server.url + "/health", { headers: { origin: "http://127.0.0.1:" + (server.port + 1) } })).resolves.toMatchObject({ status: 403 });
|
|
136
|
+
await expect(fetch(server.url + "/health", { headers: { origin: "https://127.0.0.1:" + server.port } })).resolves.toMatchObject({ status: 403 });
|
|
137
|
+
expect(health.calls).toBe(0);
|
|
138
|
+
expect(fallbackCalls).toBe(0);
|
|
139
|
+
|
|
140
|
+
await expect(fetch(server.url + "/health", { method: "POST", headers: { origin: server.url }, body: "{}" })).resolves.toMatchObject({ status: 200 });
|
|
141
|
+
expect(health.calls).toBe(1);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test("rejects requests whose Host header does not name the bound server", async () => {
|
|
145
|
+
const server = await startServer({ host: "127.0.0.1", port: 0 });
|
|
146
|
+
const health = registerHealth(server);
|
|
147
|
+
|
|
148
|
+
await expect(rawRequest(server, { host: "evil.example:" + server.port })).resolves.toEqual({
|
|
149
|
+
status: 400,
|
|
150
|
+
body: JSON.stringify({ error: "Host header does not match the web server address" }),
|
|
151
|
+
});
|
|
152
|
+
await expect(rawRequest(server, { host: "127.0.0.1:" + (server.port + 1) })).resolves.toMatchObject({ status: 400 });
|
|
153
|
+
await expect(rawRequest(server, { host: "127.0.0.1" })).resolves.toMatchObject({ status: 400 });
|
|
154
|
+
await expect(rawRequest(server, { host: "user@127.0.0.1:" + server.port })).resolves.toMatchObject({ status: 400 });
|
|
155
|
+
expect(health.calls).toBe(0);
|
|
156
|
+
|
|
157
|
+
await expect(rawRequest(server, { host: "localhost:" + server.port, origin: "http://localhost:" + server.port }, "POST")).resolves.toMatchObject({
|
|
158
|
+
status: 200,
|
|
159
|
+
});
|
|
160
|
+
await expect(rawRequest(server, { host: "LOCALHOST:" + server.port })).resolves.toMatchObject({ status: 200 });
|
|
161
|
+
await expect(rawRequest(server, { host: "[::1]:" + server.port })).resolves.toMatchObject({ status: 200 });
|
|
162
|
+
await expect(rawRequest(server, { host: "localhost:" + server.port, origin: "http://127.0.0.1:" + server.port })).resolves.toMatchObject({ status: 403 });
|
|
163
|
+
expect(health.calls).toBe(3);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test("accepts the configured non-loopback host and any hostname on a wildcard bind", async () => {
|
|
167
|
+
const wildcard = await startServer({ host: "0.0.0.0", port: 0 });
|
|
168
|
+
registerHealth(wildcard);
|
|
169
|
+
await expect(rawRequest(wildcard, { host: "workstation.lan:" + wildcard.port })).resolves.toMatchObject({ status: 200 });
|
|
170
|
+
await expect(rawRequest(wildcard, { host: "workstation.lan:" + (wildcard.port + 1) })).resolves.toMatchObject({ status: 400 });
|
|
171
|
+
|
|
172
|
+
const ipv6 = await startServer({ host: "::1", port: 0 });
|
|
173
|
+
registerHealth(ipv6);
|
|
174
|
+
expect(ipv6.url).toBe("http://[::1]:" + ipv6.port);
|
|
175
|
+
await expect(fetch(ipv6.url + "/health")).resolves.toMatchObject({ status: 200 });
|
|
176
|
+
await expect(fetch(ipv6.url + "/health", { headers: { origin: ipv6.url } })).resolves.toMatchObject({ status: 200 });
|
|
177
|
+
});
|
|
50
178
|
});
|