@pi-harness/pi-harness 0.1.28 → 0.1.29
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/apps/web/dist/assets/{index-1vaEg8Vr.js → index-DCkzrlCA.js} +2 -2
- package/apps/web/dist/index.html +1 -1
- package/apps/web/package.json +6 -6
- package/apps/web/profile/cordis.yml +73 -73
- package/node_modules/@pi-harness/api-gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/index.js +4 -11
- 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 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace.d.ts +0 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace.d.ts.map +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace.js +0 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace.js.map +1 -1
- package/node_modules/@pi-harness/api-gateway/package.json +27 -1
- package/node_modules/@pi-harness/cli/dist/main.d.ts.map +1 -1
- package/node_modules/@pi-harness/cli/dist/main.js +5 -2
- package/node_modules/@pi-harness/cli/dist/main.js.map +1 -1
- package/node_modules/@pi-harness/cli/dist/profiles.d.ts +3 -0
- package/node_modules/@pi-harness/cli/dist/profiles.d.ts.map +1 -0
- package/node_modules/@pi-harness/cli/dist/profiles.js +5 -0
- package/node_modules/@pi-harness/cli/dist/profiles.js.map +1 -0
- package/node_modules/@pi-harness/cli/package.json +3 -2
- package/node_modules/@pi-harness/cli/profiles/default/cordis.yml +122 -0
- package/node_modules/@pi-harness/cli/profiles/development/cordis.yml +47 -0
- package/node_modules/@pi-harness/host-webserver/package.json +1 -1
- package/node_modules/@pi-harness/web-app/package.json +1 -1
- package/package.json +41 -14
- package/packages/api-gateway/dist/index.d.ts.map +1 -1
- package/packages/api-gateway/dist/index.js +4 -11
- package/packages/api-gateway/dist/index.js.map +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/archify.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/context.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/genui.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/memory.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +3 -3
- package/packages/api-gateway/dist/marketplace.d.ts +0 -1
- package/packages/api-gateway/dist/marketplace.d.ts.map +1 -1
- package/packages/api-gateway/dist/marketplace.js +0 -3
- package/packages/api-gateway/dist/marketplace.js.map +1 -1
- package/packages/api-gateway/package.json +27 -1
- package/packages/api-gateway/src/index.ts +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/annotation.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/archify.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/at-file.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/context.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/genui.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/memory.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/modlens.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/module-search.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/openpets.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-export.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-search.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/synapse.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/web-research.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +3 -3
- package/packages/api-gateway/src/marketplace.ts +0 -4
- package/packages/api-gateway/test/index.test.ts +140 -94
- package/packages/api-gateway/test/marketplace-schema.test.ts +1 -1
- package/packages/api-gateway/test/marketplace.test.ts +7 -9
- package/packages/api-gateway/test/packed-package.test.ts +3 -3
- package/packages/api-gateway/test/release-contract.test.ts +35 -5
- package/packages/api-gateway/test/release-package.test.ts +1 -1
- package/packages/api-gateway/test/release-version.test.ts +79 -3
- package/packages/bundle-web-app/package.json +1 -1
- package/packages/cli/dist/main.d.ts.map +1 -1
- package/packages/cli/dist/main.js +5 -2
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/cli/dist/profiles.d.ts +3 -0
- package/packages/cli/dist/profiles.d.ts.map +1 -0
- package/packages/cli/dist/profiles.js +5 -0
- package/packages/cli/dist/profiles.js.map +1 -0
- package/packages/cli/package.json +3 -2
- package/packages/cli/profiles/default/cordis.yml +122 -0
- package/packages/cli/profiles/development/cordis.yml +47 -0
- package/packages/cli/src/main.ts +5 -2
- package/packages/cli/src/profiles.ts +6 -0
- package/packages/cli/test/profiles.integration.test.ts +575 -0
- package/packages/host-webserver/package.json +1 -1
|
@@ -102,7 +102,7 @@ describe("API gateway plugin", () => {
|
|
|
102
102
|
{
|
|
103
103
|
id: "profile:group:child",
|
|
104
104
|
disabled: true,
|
|
105
|
-
options: { id: "child", name: "@pi-harness/
|
|
105
|
+
options: { id: "child", name: "@pi-harness/plugin-context", disabled: true },
|
|
106
106
|
},
|
|
107
107
|
];
|
|
108
108
|
context.reflect.provide("loader", {
|
|
@@ -125,7 +125,7 @@ describe("API gateway plugin", () => {
|
|
|
125
125
|
data: {
|
|
126
126
|
entries: [
|
|
127
127
|
{ id: "profile:group", name: "plugin-group", state: "unloaded", enabled: true },
|
|
128
|
-
{ id: "profile:group:child", name: "@pi-harness/
|
|
128
|
+
{ id: "profile:group:child", name: "@pi-harness/plugin-context", state: "unloaded", enabled: false },
|
|
129
129
|
],
|
|
130
130
|
},
|
|
131
131
|
},
|
|
@@ -227,7 +227,7 @@ describe("API gateway plugin", () => {
|
|
|
227
227
|
});
|
|
228
228
|
|
|
229
229
|
test("publishes the persisted UTC cost ledger through its dedicated panel", async () => {
|
|
230
|
-
const costMeterModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
230
|
+
const costMeterModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-cost-meter"))) as {
|
|
231
231
|
default: Parameters<Context["plugin"]>[0];
|
|
232
232
|
};
|
|
233
233
|
const context = new Context();
|
|
@@ -266,7 +266,7 @@ describe("API gateway plugin", () => {
|
|
|
266
266
|
items: [
|
|
267
267
|
{
|
|
268
268
|
id: "cost-meter-panel",
|
|
269
|
-
pluginId: "@pi-harness/
|
|
269
|
+
pluginId: "@pi-harness/plugin-cost-meter",
|
|
270
270
|
title: "Cost Meter",
|
|
271
271
|
data: {
|
|
272
272
|
sessionCost: 1.25,
|
|
@@ -285,7 +285,7 @@ describe("API gateway plugin", () => {
|
|
|
285
285
|
});
|
|
286
286
|
|
|
287
287
|
test("publishes the bounded dependency report through its dedicated panel", async () => {
|
|
288
|
-
const dependencyCheckerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
288
|
+
const dependencyCheckerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-dependency-checker"))) as {
|
|
289
289
|
default: Parameters<Context["plugin"]>[0];
|
|
290
290
|
};
|
|
291
291
|
const context = new Context();
|
|
@@ -317,7 +317,7 @@ describe("API gateway plugin", () => {
|
|
|
317
317
|
items: [
|
|
318
318
|
{
|
|
319
319
|
id: "dependency-checker-panel",
|
|
320
|
-
pluginId: "@pi-harness/
|
|
320
|
+
pluginId: "@pi-harness/plugin-dependency-checker",
|
|
321
321
|
title: "Dependency Checker",
|
|
322
322
|
data: {
|
|
323
323
|
report: {
|
|
@@ -338,7 +338,7 @@ describe("API gateway plugin", () => {
|
|
|
338
338
|
});
|
|
339
339
|
|
|
340
340
|
test("publishes the enforced Docker sandbox defaults through its real plugin panel", async () => {
|
|
341
|
-
const dockerSandboxModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
341
|
+
const dockerSandboxModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-docker-sandbox"))) as {
|
|
342
342
|
default: Parameters<Context["plugin"]>[0];
|
|
343
343
|
};
|
|
344
344
|
const context = new Context();
|
|
@@ -362,7 +362,7 @@ describe("API gateway plugin", () => {
|
|
|
362
362
|
items: [
|
|
363
363
|
{
|
|
364
364
|
id: "docker-sandbox-panel",
|
|
365
|
-
pluginId: "@pi-harness/
|
|
365
|
+
pluginId: "@pi-harness/plugin-docker-sandbox",
|
|
366
366
|
title: "Docker Sandbox",
|
|
367
367
|
description: "仅使用本地镜像,并以无网络、只读根文件系统和有界资源运行 argv 命令。工作区默认只读。",
|
|
368
368
|
icon: "⬡",
|
|
@@ -386,7 +386,7 @@ describe("API gateway plugin", () => {
|
|
|
386
386
|
});
|
|
387
387
|
|
|
388
388
|
test("publishes aggregated failures through the real Failure Logger panel", async () => {
|
|
389
|
-
const failLoggerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
389
|
+
const failLoggerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-fail-logger"))) as {
|
|
390
390
|
default: Parameters<Context["plugin"]>[0];
|
|
391
391
|
};
|
|
392
392
|
const context = new Context();
|
|
@@ -433,7 +433,7 @@ describe("API gateway plugin", () => {
|
|
|
433
433
|
expect(payload.items).toHaveLength(1);
|
|
434
434
|
expect(payload.items[0]).toMatchObject({
|
|
435
435
|
id: "fail-logger-panel",
|
|
436
|
-
pluginId: "@pi-harness/
|
|
436
|
+
pluginId: "@pi-harness/plugin-fail-logger",
|
|
437
437
|
title: "Failure Logger",
|
|
438
438
|
data: {
|
|
439
439
|
total: 3,
|
|
@@ -450,7 +450,7 @@ describe("API gateway plugin", () => {
|
|
|
450
450
|
});
|
|
451
451
|
|
|
452
452
|
test("publishes bounded structured cards through the real GenUI panel", async () => {
|
|
453
|
-
const genUiModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
453
|
+
const genUiModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-genui"))) as {
|
|
454
454
|
default: Parameters<Context["plugin"]>[0];
|
|
455
455
|
};
|
|
456
456
|
const context = new Context();
|
|
@@ -488,7 +488,7 @@ describe("API gateway plugin", () => {
|
|
|
488
488
|
items: [
|
|
489
489
|
{
|
|
490
490
|
id: "genui-panel",
|
|
491
|
-
pluginId: "@pi-harness/
|
|
491
|
+
pluginId: "@pi-harness/plugin-genui",
|
|
492
492
|
title: "GenUI",
|
|
493
493
|
data: {
|
|
494
494
|
rendered: 1,
|
|
@@ -507,7 +507,7 @@ describe("API gateway plugin", () => {
|
|
|
507
507
|
});
|
|
508
508
|
|
|
509
509
|
test("publishes captured Git undo capsules through the real plugin panel", async () => {
|
|
510
|
-
const gitTimeCapsuleModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
510
|
+
const gitTimeCapsuleModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-git-time-capsule"))) as {
|
|
511
511
|
default: Parameters<Context["plugin"]>[0];
|
|
512
512
|
};
|
|
513
513
|
const context = new Context();
|
|
@@ -557,7 +557,7 @@ describe("API gateway plugin", () => {
|
|
|
557
557
|
items: [
|
|
558
558
|
{
|
|
559
559
|
id: "git-time-capsule-panel",
|
|
560
|
-
pluginId: "@pi-harness/
|
|
560
|
+
pluginId: "@pi-harness/plugin-git-time-capsule",
|
|
561
561
|
title: "Git Time Capsule",
|
|
562
562
|
data: {
|
|
563
563
|
latest: { action: "capture", status: "completed", files: 1 },
|
|
@@ -576,7 +576,7 @@ describe("API gateway plugin", () => {
|
|
|
576
576
|
});
|
|
577
577
|
|
|
578
578
|
test("publishes the persisted graph memory through the real plugin panel", async () => {
|
|
579
|
-
const graphMemoryModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
579
|
+
const graphMemoryModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-graph-memory"))) as {
|
|
580
580
|
default: Parameters<Context["plugin"]>[0];
|
|
581
581
|
};
|
|
582
582
|
const context = new Context();
|
|
@@ -606,7 +606,7 @@ describe("API gateway plugin", () => {
|
|
|
606
606
|
items: [
|
|
607
607
|
{
|
|
608
608
|
id: "graph-memory-panel",
|
|
609
|
-
pluginId: "@pi-harness/
|
|
609
|
+
pluginId: "@pi-harness/plugin-graph-memory",
|
|
610
610
|
title: "Graph Memory",
|
|
611
611
|
data: {
|
|
612
612
|
nodes: 1,
|
|
@@ -622,7 +622,7 @@ describe("API gateway plugin", () => {
|
|
|
622
622
|
});
|
|
623
623
|
|
|
624
624
|
test("publishes a bounded locale parity report through the real plugin panel", async () => {
|
|
625
|
-
const i18nPairModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
625
|
+
const i18nPairModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-i18n-pair"))) as {
|
|
626
626
|
default: Parameters<Context["plugin"]>[0];
|
|
627
627
|
};
|
|
628
628
|
const context = new Context();
|
|
@@ -654,7 +654,7 @@ describe("API gateway plugin", () => {
|
|
|
654
654
|
items: [
|
|
655
655
|
{
|
|
656
656
|
id: "i18n-pair-panel",
|
|
657
|
-
pluginId: "@pi-harness/
|
|
657
|
+
pluginId: "@pi-harness/plugin-i18n-pair",
|
|
658
658
|
title: "I18n Pair",
|
|
659
659
|
data: {
|
|
660
660
|
status: { state: "completed" },
|
|
@@ -677,7 +677,7 @@ describe("API gateway plugin", () => {
|
|
|
677
677
|
});
|
|
678
678
|
|
|
679
679
|
test("publishes bounded Git capsule cleanup activity through the real plugin panel", async () => {
|
|
680
|
-
const cleanerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
680
|
+
const cleanerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-cleaner"))) as {
|
|
681
681
|
default: Parameters<Context["plugin"]>[0];
|
|
682
682
|
};
|
|
683
683
|
const context = new Context();
|
|
@@ -711,7 +711,7 @@ describe("API gateway plugin", () => {
|
|
|
711
711
|
items: [
|
|
712
712
|
{
|
|
713
713
|
id: "cleaner-panel",
|
|
714
|
-
pluginId: "@pi-harness/
|
|
714
|
+
pluginId: "@pi-harness/plugin-cleaner",
|
|
715
715
|
title: "Harness Cleaner",
|
|
716
716
|
data: {
|
|
717
717
|
capsules: [{ name: "0003.patch", bytes: 3 }],
|
|
@@ -725,7 +725,7 @@ describe("API gateway plugin", () => {
|
|
|
725
725
|
});
|
|
726
726
|
|
|
727
727
|
test("publishes a bounded isolated SQLite query through the real plugin panel", async () => {
|
|
728
|
-
const sqlLensModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
728
|
+
const sqlLensModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-sql-lens"))) as {
|
|
729
729
|
default: Parameters<Context["plugin"]>[0];
|
|
730
730
|
};
|
|
731
731
|
const context = new Context();
|
|
@@ -757,7 +757,7 @@ describe("API gateway plugin", () => {
|
|
|
757
757
|
items: [
|
|
758
758
|
{
|
|
759
759
|
id: "sql-lens-panel",
|
|
760
|
-
pluginId: "@pi-harness/
|
|
760
|
+
pluginId: "@pi-harness/plugin-sql-lens",
|
|
761
761
|
title: "SQL Lens",
|
|
762
762
|
data: {
|
|
763
763
|
status: { state: "completed" },
|
|
@@ -777,7 +777,7 @@ describe("API gateway plugin", () => {
|
|
|
777
777
|
});
|
|
778
778
|
|
|
779
779
|
test("publishes bounded MCP inventories and limits through the real plugin panel", async () => {
|
|
780
|
-
const mcpClientModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
780
|
+
const mcpClientModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-mcp-client"))) as {
|
|
781
781
|
default: Parameters<Context["plugin"]>[0];
|
|
782
782
|
};
|
|
783
783
|
const context = new Context();
|
|
@@ -815,7 +815,7 @@ describe("API gateway plugin", () => {
|
|
|
815
815
|
items: [
|
|
816
816
|
{
|
|
817
817
|
id: "mcp-client-panel",
|
|
818
|
-
pluginId: "@pi-harness/
|
|
818
|
+
pluginId: "@pi-harness/plugin-mcp-client",
|
|
819
819
|
title: "MCP Client",
|
|
820
820
|
data: {
|
|
821
821
|
inventory: {
|
|
@@ -844,7 +844,7 @@ describe("API gateway plugin", () => {
|
|
|
844
844
|
});
|
|
845
845
|
|
|
846
846
|
test("publishes a bounded Browser Fetch preview through the real plugin panel", async () => {
|
|
847
|
-
const browserFetchModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
847
|
+
const browserFetchModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-browser-fetch"))) as {
|
|
848
848
|
default: Parameters<Context["plugin"]>[0];
|
|
849
849
|
};
|
|
850
850
|
const context = new Context();
|
|
@@ -886,7 +886,7 @@ describe("API gateway plugin", () => {
|
|
|
886
886
|
items: [
|
|
887
887
|
{
|
|
888
888
|
id: "browser-fetch-panel",
|
|
889
|
-
pluginId: "@pi-harness/
|
|
889
|
+
pluginId: "@pi-harness/plugin-browser-fetch",
|
|
890
890
|
title: "Browser Fetch",
|
|
891
891
|
data: {
|
|
892
892
|
latest: { status: 200, bytes: 12_001, truncated: false, previewTruncated: true },
|
|
@@ -905,7 +905,7 @@ describe("API gateway plugin", () => {
|
|
|
905
905
|
});
|
|
906
906
|
|
|
907
907
|
test("publishes a bounded Browser Session inventory through the real plugin panel", async () => {
|
|
908
|
-
const browserSessionModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
908
|
+
const browserSessionModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-browser-session"))) as {
|
|
909
909
|
default: Parameters<Context["plugin"]>[0];
|
|
910
910
|
};
|
|
911
911
|
const context = new Context();
|
|
@@ -954,7 +954,7 @@ describe("API gateway plugin", () => {
|
|
|
954
954
|
items: [
|
|
955
955
|
{
|
|
956
956
|
id: "browser-session-panel",
|
|
957
|
-
pluginId: "@pi-harness/
|
|
957
|
+
pluginId: "@pi-harness/plugin-browser-session",
|
|
958
958
|
title: "Browser Session",
|
|
959
959
|
data: {
|
|
960
960
|
endpoint: `http://127.0.0.1:${devtoolsAddress.port}/`,
|
|
@@ -973,7 +973,7 @@ describe("API gateway plugin", () => {
|
|
|
973
973
|
});
|
|
974
974
|
|
|
975
975
|
test("publishes a bounded Plugin Stars inventory through the real plugin panel", async () => {
|
|
976
|
-
const pluginStarsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
976
|
+
const pluginStarsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-plugin-stars"))) as {
|
|
977
977
|
default: Parameters<Context["plugin"]>[0];
|
|
978
978
|
};
|
|
979
979
|
const originalFetch = globalThis.fetch;
|
|
@@ -1018,7 +1018,7 @@ describe("API gateway plugin", () => {
|
|
|
1018
1018
|
items: [
|
|
1019
1019
|
{
|
|
1020
1020
|
id: "plugin-stars-panel",
|
|
1021
|
-
pluginId: "@pi-harness/
|
|
1021
|
+
pluginId: "@pi-harness/plugin-plugin-stars",
|
|
1022
1022
|
title: "Plugin Stars",
|
|
1023
1023
|
data: {
|
|
1024
1024
|
limit: 50,
|
|
@@ -1035,7 +1035,7 @@ describe("API gateway plugin", () => {
|
|
|
1035
1035
|
});
|
|
1036
1036
|
|
|
1037
1037
|
test("publishes bounded YAML diagnostics through the real plugin panel", async () => {
|
|
1038
|
-
const yamlValidatorModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1038
|
+
const yamlValidatorModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-yaml-validator"))) as {
|
|
1039
1039
|
default: Parameters<Context["plugin"]>[0];
|
|
1040
1040
|
};
|
|
1041
1041
|
const context = new Context();
|
|
@@ -1067,7 +1067,7 @@ describe("API gateway plugin", () => {
|
|
|
1067
1067
|
items: [
|
|
1068
1068
|
{
|
|
1069
1069
|
id: "yaml-validator-panel",
|
|
1070
|
-
pluginId: "@pi-harness/
|
|
1070
|
+
pluginId: "@pi-harness/plugin-yaml-validator",
|
|
1071
1071
|
title: "YAML Validator",
|
|
1072
1072
|
data: {
|
|
1073
1073
|
latest: { path: "invalid.yml", valid: false, errorCount: 101, diagnosticsTruncated: false },
|
|
@@ -1084,7 +1084,7 @@ describe("API gateway plugin", () => {
|
|
|
1084
1084
|
});
|
|
1085
1085
|
|
|
1086
1086
|
test("publishes bounded Plugin Dev reload state through the real plugin panel", async () => {
|
|
1087
|
-
const pluginDevModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1087
|
+
const pluginDevModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-plugin-dev"))) as {
|
|
1088
1088
|
default: Parameters<Context["plugin"]>[0];
|
|
1089
1089
|
};
|
|
1090
1090
|
const context = new Context();
|
|
@@ -1124,7 +1124,7 @@ describe("API gateway plugin", () => {
|
|
|
1124
1124
|
items: [
|
|
1125
1125
|
{
|
|
1126
1126
|
id: "plugin-dev-panel",
|
|
1127
|
-
pluginId: "@pi-harness/
|
|
1127
|
+
pluginId: "@pi-harness/plugin-plugin-dev",
|
|
1128
1128
|
title: "Plugin Dev",
|
|
1129
1129
|
data: {
|
|
1130
1130
|
status: "reloaded",
|
|
@@ -1140,7 +1140,7 @@ describe("API gateway plugin", () => {
|
|
|
1140
1140
|
});
|
|
1141
1141
|
|
|
1142
1142
|
test("publishes bounded OpenPets state through the real plugin panel", async () => {
|
|
1143
|
-
const openPetsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1143
|
+
const openPetsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-openpets"))) as {
|
|
1144
1144
|
default: Parameters<Context["plugin"]>[0];
|
|
1145
1145
|
};
|
|
1146
1146
|
const context = new Context();
|
|
@@ -1177,7 +1177,7 @@ describe("API gateway plugin", () => {
|
|
|
1177
1177
|
items: [
|
|
1178
1178
|
{
|
|
1179
1179
|
id: "openpets-panel",
|
|
1180
|
-
pluginId: "@pi-harness/
|
|
1180
|
+
pluginId: "@pi-harness/plugin-openpets",
|
|
1181
1181
|
title: "OpenPets",
|
|
1182
1182
|
data: {
|
|
1183
1183
|
name: "Pi",
|
|
@@ -1195,7 +1195,7 @@ describe("API gateway plugin", () => {
|
|
|
1195
1195
|
});
|
|
1196
1196
|
|
|
1197
1197
|
test("publishes bounded Session Bridge previews through the real plugin panel", async () => {
|
|
1198
|
-
const sessionBridgeModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1198
|
+
const sessionBridgeModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-session-bridge"))) as {
|
|
1199
1199
|
default: Parameters<Context["plugin"]>[0];
|
|
1200
1200
|
};
|
|
1201
1201
|
const context = new Context();
|
|
@@ -1239,7 +1239,7 @@ describe("API gateway plugin", () => {
|
|
|
1239
1239
|
items: [
|
|
1240
1240
|
{
|
|
1241
1241
|
id: "session-bridge-panel",
|
|
1242
|
-
pluginId: "@pi-harness/
|
|
1242
|
+
pluginId: "@pi-harness/plugin-session-bridge",
|
|
1243
1243
|
title: "Session Bridge",
|
|
1244
1244
|
data: {
|
|
1245
1245
|
latest: null,
|
|
@@ -1267,7 +1267,7 @@ describe("API gateway plugin", () => {
|
|
|
1267
1267
|
});
|
|
1268
1268
|
|
|
1269
1269
|
test("publishes bounded Skill Guard audits through the real plugin panel", async () => {
|
|
1270
|
-
const skillGuardModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1270
|
+
const skillGuardModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-skill-guard"))) as {
|
|
1271
1271
|
default: Parameters<Context["plugin"]>[0];
|
|
1272
1272
|
};
|
|
1273
1273
|
const cwd = await mkdtemp(join(tmpdir(), "pi-harness-api-skill-guard-"));
|
|
@@ -1302,7 +1302,7 @@ describe("API gateway plugin", () => {
|
|
|
1302
1302
|
items: [
|
|
1303
1303
|
{
|
|
1304
1304
|
id: "skill-guard-panel",
|
|
1305
|
-
pluginId: "@pi-harness/
|
|
1305
|
+
pluginId: "@pi-harness/plugin-skill-guard",
|
|
1306
1306
|
title: "Skill Guard",
|
|
1307
1307
|
data: {
|
|
1308
1308
|
scans: 1,
|
|
@@ -1338,7 +1338,7 @@ describe("API gateway plugin", () => {
|
|
|
1338
1338
|
}, 15_000);
|
|
1339
1339
|
|
|
1340
1340
|
test("publishes bounded Recall Unread inventory through the real plugin panel", async () => {
|
|
1341
|
-
const recallUnreadModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1341
|
+
const recallUnreadModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-recall-unread"))) as {
|
|
1342
1342
|
default: Parameters<Context["plugin"]>[0];
|
|
1343
1343
|
};
|
|
1344
1344
|
const workspace = await mkdtemp(join(tmpdir(), "pi-harness-api-recall-unread-workspace-"));
|
|
@@ -1384,7 +1384,7 @@ describe("API gateway plugin", () => {
|
|
|
1384
1384
|
items: [
|
|
1385
1385
|
{
|
|
1386
1386
|
id: "recall-unread-panel",
|
|
1387
|
-
pluginId: "@pi-harness/
|
|
1387
|
+
pluginId: "@pi-harness/plugin-recall-unread",
|
|
1388
1388
|
title: "Recall Unread",
|
|
1389
1389
|
data: {
|
|
1390
1390
|
scans: 1,
|
|
@@ -1422,7 +1422,7 @@ describe("API gateway plugin", () => {
|
|
|
1422
1422
|
});
|
|
1423
1423
|
|
|
1424
1424
|
test("publishes bounded Context Insights through the real plugin panel", async () => {
|
|
1425
|
-
const contextInsightsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1425
|
+
const contextInsightsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-context"))) as {
|
|
1426
1426
|
default: Parameters<Context["plugin"]>[0];
|
|
1427
1427
|
};
|
|
1428
1428
|
const context = new Context();
|
|
@@ -1451,7 +1451,7 @@ describe("API gateway plugin", () => {
|
|
|
1451
1451
|
items: [
|
|
1452
1452
|
{
|
|
1453
1453
|
id: "context-insight-panel",
|
|
1454
|
-
pluginId: "@pi-harness/
|
|
1454
|
+
pluginId: "@pi-harness/plugin-context",
|
|
1455
1455
|
title: "上下文洞察",
|
|
1456
1456
|
data: {
|
|
1457
1457
|
tokens: 2_000,
|
|
@@ -1473,7 +1473,7 @@ describe("API gateway plugin", () => {
|
|
|
1473
1473
|
});
|
|
1474
1474
|
|
|
1475
1475
|
test("publishes cached Token Guard state through the real plugin panel", async () => {
|
|
1476
|
-
const tokenGuardModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1476
|
+
const tokenGuardModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-token-guard"))) as {
|
|
1477
1477
|
default: Parameters<Context["plugin"]>[0];
|
|
1478
1478
|
};
|
|
1479
1479
|
const context = new Context();
|
|
@@ -1501,7 +1501,7 @@ describe("API gateway plugin", () => {
|
|
|
1501
1501
|
items: [
|
|
1502
1502
|
{
|
|
1503
1503
|
id: "token-guard-panel",
|
|
1504
|
-
pluginId: "@pi-harness/
|
|
1504
|
+
pluginId: "@pi-harness/plugin-token-guard",
|
|
1505
1505
|
title: "Token Guard",
|
|
1506
1506
|
data: {
|
|
1507
1507
|
maxPercent: 90,
|
|
@@ -1522,7 +1522,7 @@ describe("API gateway plugin", () => {
|
|
|
1522
1522
|
});
|
|
1523
1523
|
|
|
1524
1524
|
test("publishes the bounded Context Doctor audit through the real plugin panel", async () => {
|
|
1525
|
-
const contextDoctorModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1525
|
+
const contextDoctorModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-context-doctor"))) as {
|
|
1526
1526
|
default: Parameters<Context["plugin"]>[0];
|
|
1527
1527
|
};
|
|
1528
1528
|
const context = new Context();
|
|
@@ -1559,7 +1559,7 @@ describe("API gateway plugin", () => {
|
|
|
1559
1559
|
items: [
|
|
1560
1560
|
{
|
|
1561
1561
|
id: "context-doctor-panel",
|
|
1562
|
-
pluginId: "@pi-harness/
|
|
1562
|
+
pluginId: "@pi-harness/plugin-context-doctor",
|
|
1563
1563
|
title: "Context Doctor",
|
|
1564
1564
|
data: {
|
|
1565
1565
|
status: "warning",
|
|
@@ -1589,7 +1589,7 @@ describe("API gateway plugin", () => {
|
|
|
1589
1589
|
});
|
|
1590
1590
|
|
|
1591
1591
|
test("publishes bounded current-branch Turn Rewind candidates through the real plugin panel", async () => {
|
|
1592
|
-
const turnRewindModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/
|
|
1592
|
+
const turnRewindModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-turn-rewind"))) as {
|
|
1593
1593
|
default: Parameters<Context["plugin"]>[0];
|
|
1594
1594
|
};
|
|
1595
1595
|
const manager = SessionManager.inMemory("/workspace");
|
|
@@ -1640,7 +1640,7 @@ describe("API gateway plugin", () => {
|
|
|
1640
1640
|
items: [
|
|
1641
1641
|
{
|
|
1642
1642
|
id: "turn-rewind-panel",
|
|
1643
|
-
pluginId: "@pi-harness/
|
|
1643
|
+
pluginId: "@pi-harness/plugin-turn-rewind",
|
|
1644
1644
|
title: "Turn Rewind",
|
|
1645
1645
|
data: {
|
|
1646
1646
|
candidates: [
|
|
@@ -2146,44 +2146,65 @@ describe("API gateway plugin", () => {
|
|
|
2146
2146
|
expect(invalidSort.status).toBe(400);
|
|
2147
2147
|
});
|
|
2148
2148
|
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
const
|
|
2149
|
+
// An official plugin is its own npm package, so it takes the same install path a community package takes: npm first, then the profile row, then the loader entry. Nothing about `source: "official"` shortcuts any of it.
|
|
2150
|
+
test("installs an official plugin through npm exactly like a community package", async () => {
|
|
2151
|
+
const directory = await mkdtemp(join(tmpdir(), "pi-harness-api-plugin-install-"));
|
|
2152
|
+
temporaryDirectories.push(directory);
|
|
2153
|
+
const shimDirectory = join(directory, "bin");
|
|
2154
|
+
await mkdir(shimDirectory);
|
|
2155
|
+
await writeFile(join(directory, "package.json"), '{ "name": "harness" }\n', "utf8");
|
|
2156
|
+
const configPath = join(directory, "pi.toml");
|
|
2152
2157
|
await writeFile(configPath, '- id: runtime\n name: "@pi-harness/core/plugins/runtime"\n config: {}\n', "utf8");
|
|
2158
|
+
const npmLog = join(directory, "npm.log");
|
|
2159
|
+
await writeFile(join(shimDirectory, "npm"), `#!/bin/sh\nprintf '%s\\n' "$*" >> ${JSON.stringify(npmLog)}\n`, { mode: 0o755 });
|
|
2153
2160
|
const context = new Context();
|
|
2154
2161
|
contexts.push(context);
|
|
2155
2162
|
await context.plugin(webServerPlugin, { host: "127.0.0.1", port: 0 });
|
|
2156
2163
|
const session = { sessionId: "marketplace-install-session", sessionFile: undefined, messages: [], isStreaming: false, subscribe: () => () => {} };
|
|
2157
2164
|
context.provide("piRuntime", { session, prompt: () => Promise.resolve(), abort: () => Promise.resolve(), dispose: () => Promise.resolve() } as never);
|
|
2158
2165
|
context.provide("piModels", { model: { provider: "test", id: "model" } } as never);
|
|
2159
|
-
context.provide("piHarnessLaunch", { cwd, agentDir:
|
|
2160
|
-
|
|
2166
|
+
context.provide("piHarnessLaunch", { cwd: directory, agentDir: directory, configPath, args: [], requestExit() {} });
|
|
2167
|
+
const created: Array<{ name?: unknown }> = [];
|
|
2161
2168
|
context.reflect.provide("loader", {
|
|
2162
|
-
entries()
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
createCalled = true;
|
|
2167
|
-
return Promise.reject(new Error("bundled plugin must not be dynamically created"));
|
|
2169
|
+
entries: () => [],
|
|
2170
|
+
create: (options: { name?: unknown }) => {
|
|
2171
|
+
created.push(options);
|
|
2172
|
+
return Promise.resolve("marketplace-entry");
|
|
2168
2173
|
},
|
|
2174
|
+
resolve: () => ({ fiber: { await: () => Promise.resolve() } }),
|
|
2175
|
+
remove: () => Promise.resolve(),
|
|
2169
2176
|
});
|
|
2170
2177
|
await context.plugin(apiPlugin);
|
|
2171
2178
|
|
|
2172
|
-
const
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2179
|
+
const originalPath = process.env.PATH ?? "";
|
|
2180
|
+
process.env.PATH = `${shimDirectory}:${originalPath}`;
|
|
2181
|
+
let response: Response;
|
|
2182
|
+
try {
|
|
2183
|
+
response = await fetch(context.webServer.url + "/api/marketplace/install", {
|
|
2184
|
+
method: "POST",
|
|
2185
|
+
headers: { "content-type": "application/json" },
|
|
2186
|
+
body: JSON.stringify({ id: "skill-guard" }),
|
|
2187
|
+
});
|
|
2188
|
+
} finally {
|
|
2189
|
+
process.env.PATH = originalPath;
|
|
2190
|
+
}
|
|
2191
|
+
|
|
2177
2192
|
expect(response.status).toBe(200);
|
|
2178
|
-
await expect(response.json()).resolves.toMatchObject({ installed:
|
|
2179
|
-
expect(
|
|
2180
|
-
|
|
2193
|
+
await expect(response.json()).resolves.toMatchObject({ installed: true, plugin: { id: "skill-guard" } });
|
|
2194
|
+
expect((await readFile(npmLog, "utf8")).trim()).toMatch(/^install --save-exact --package-lock=false @pi-harness\/plugin-skill-guard@\d/u);
|
|
2195
|
+
expect(created).toEqual([expect.objectContaining({ name: "@pi-harness/plugin-skill-guard" })]);
|
|
2196
|
+
await expect(readFile(configPath, "utf8")).resolves.toContain('name: "@pi-harness/plugin-skill-guard"');
|
|
2181
2197
|
});
|
|
2182
2198
|
|
|
2183
2199
|
test("locks marketplace installation before reading a request body", async () => {
|
|
2184
2200
|
const cwd = await mkdtemp(join(tmpdir(), "pi-harness-api-plugin-install-lock-"));
|
|
2201
|
+
temporaryDirectories.push(cwd);
|
|
2202
|
+
const shimDirectory = join(cwd, "bin");
|
|
2203
|
+
await mkdir(shimDirectory);
|
|
2204
|
+
await writeFile(join(cwd, "package.json"), '{ "name": "harness" }\n', "utf8");
|
|
2185
2205
|
const configPath = join(cwd, "pi.toml");
|
|
2186
2206
|
await writeFile(configPath, '- id: runtime\n name: "@pi-harness/core/plugins/runtime"\n config: {}\n', "utf8");
|
|
2207
|
+
await writeFile(join(shimDirectory, "npm"), "#!/bin/sh\nexit 0\n", { mode: 0o755 });
|
|
2187
2208
|
const context = new Context();
|
|
2188
2209
|
contexts.push(context);
|
|
2189
2210
|
await context.plugin(webServerPlugin, { host: "127.0.0.1", port: 0 });
|
|
@@ -2191,7 +2212,12 @@ describe("API gateway plugin", () => {
|
|
|
2191
2212
|
context.provide("piRuntime", { session, prompt: () => Promise.resolve(), abort: () => Promise.resolve(), dispose: () => Promise.resolve() } as never);
|
|
2192
2213
|
context.provide("piModels", { model: { provider: "test", id: "model" } } as never);
|
|
2193
2214
|
context.provide("piHarnessLaunch", { cwd, agentDir: cwd, configPath, args: [], requestExit() {} });
|
|
2194
|
-
context.reflect.provide("loader", {
|
|
2215
|
+
context.reflect.provide("loader", {
|
|
2216
|
+
entries: () => [],
|
|
2217
|
+
create: () => Promise.resolve("marketplace-entry"),
|
|
2218
|
+
resolve: () => ({ fiber: { await: () => Promise.resolve() } }),
|
|
2219
|
+
remove: () => Promise.resolve(),
|
|
2220
|
+
});
|
|
2195
2221
|
await context.plugin(apiPlugin);
|
|
2196
2222
|
|
|
2197
2223
|
let finishBody: (() => void) | undefined;
|
|
@@ -2204,23 +2230,29 @@ describe("API gateway plugin", () => {
|
|
|
2204
2230
|
};
|
|
2205
2231
|
},
|
|
2206
2232
|
});
|
|
2207
|
-
const
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2233
|
+
const originalPath = process.env.PATH ?? "";
|
|
2234
|
+
process.env.PATH = `${shimDirectory}:${originalPath}`;
|
|
2235
|
+
try {
|
|
2236
|
+
const first = fetch(context.webServer.url + "/api/marketplace/install", {
|
|
2237
|
+
method: "POST",
|
|
2238
|
+
headers: { "content-type": "application/json" },
|
|
2239
|
+
body,
|
|
2240
|
+
duplex: "half",
|
|
2241
|
+
} as RequestInit & { duplex: "half" });
|
|
2242
|
+
await new Promise((resolveDelay) => setTimeout(resolveDelay, 25));
|
|
2214
2243
|
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2244
|
+
const competing = await fetch(context.webServer.url + "/api/marketplace/install", {
|
|
2245
|
+
method: "POST",
|
|
2246
|
+
headers: { "content-type": "application/json" },
|
|
2247
|
+
body: JSON.stringify({ id: "cost-meter" }),
|
|
2248
|
+
});
|
|
2249
|
+
expect(competing.status).toBe(409);
|
|
2221
2250
|
|
|
2222
|
-
|
|
2223
|
-
|
|
2251
|
+
finishBody?.();
|
|
2252
|
+
expect((await first).status).toBe(200);
|
|
2253
|
+
} finally {
|
|
2254
|
+
process.env.PATH = originalPath;
|
|
2255
|
+
}
|
|
2224
2256
|
});
|
|
2225
2257
|
|
|
2226
2258
|
test("marks legacy random-id marketplace entries as removable", async () => {
|
|
@@ -2230,7 +2262,7 @@ describe("API gateway plugin", () => {
|
|
|
2230
2262
|
const session = { sessionId: "legacy-plugin-session", sessionFile: undefined, messages: [], isStreaming: false, subscribe: () => () => {} };
|
|
2231
2263
|
const loaderEntries = [
|
|
2232
2264
|
{ options: { id: "769990d2", name: "@deepseek-ai/cordis-plugin-logger-console" } },
|
|
2233
|
-
{ options: { id: "marketplace-session-bridge", name: "@pi-harness/
|
|
2265
|
+
{ options: { id: "marketplace-session-bridge", name: "@pi-harness/plugin-session-bridge" } },
|
|
2234
2266
|
];
|
|
2235
2267
|
context.provide("piRuntime", { session, prompt: () => Promise.resolve() } as never);
|
|
2236
2268
|
context.provide("piModels", { model: { provider: "test", id: "model" } } as never);
|
|
@@ -2256,7 +2288,7 @@ describe("API gateway plugin", () => {
|
|
|
2256
2288
|
},
|
|
2257
2289
|
{
|
|
2258
2290
|
id: "marketplace-session-bridge",
|
|
2259
|
-
name: "@pi-harness/
|
|
2291
|
+
name: "@pi-harness/plugin-session-bridge",
|
|
2260
2292
|
enabled: true,
|
|
2261
2293
|
state: "unloaded",
|
|
2262
2294
|
removable: true,
|
|
@@ -2361,16 +2393,22 @@ describe("API gateway plugin", () => {
|
|
|
2361
2393
|
await expect(readFile(configPath, "utf8")).resolves.toContain("- id: sibling");
|
|
2362
2394
|
});
|
|
2363
2395
|
|
|
2364
|
-
|
|
2396
|
+
// The plugin was installed from npm, so removing it removes the profile row, the loader entry, and the package.
|
|
2397
|
+
test("uninstalls an official marketplace plugin from its profile row and from npm", async () => {
|
|
2365
2398
|
const context = new Context();
|
|
2366
2399
|
contexts.push(context);
|
|
2367
2400
|
const directory = await mkdtemp(join(tmpdir(), "pi-harness-api-bundled-uninstall-"));
|
|
2401
|
+
temporaryDirectories.push(directory);
|
|
2402
|
+
const shimDirectory = join(directory, "bin");
|
|
2403
|
+
await mkdir(shimDirectory);
|
|
2404
|
+
const npmLog = join(directory, "npm.log");
|
|
2405
|
+
await writeFile(join(shimDirectory, "npm"), `#!/bin/sh\nprintf '%s\\n' "$*" >> ${JSON.stringify(npmLog)}\n`, { mode: 0o755 });
|
|
2368
2406
|
const configPath = join(directory, "profile.yml");
|
|
2369
2407
|
const entryId = "skill-guard";
|
|
2370
2408
|
let active = true;
|
|
2371
2409
|
const loaderEntry = {
|
|
2372
2410
|
id: `profile:${entryId}`,
|
|
2373
|
-
options: { id: entryId, name: "@pi-harness/
|
|
2411
|
+
options: { id: entryId, name: "@pi-harness/plugin-skill-guard", config: {} },
|
|
2374
2412
|
parent: {
|
|
2375
2413
|
tree: { write() {} },
|
|
2376
2414
|
remove(id: string): Promise<void> {
|
|
@@ -2397,14 +2435,22 @@ describe("API gateway plugin", () => {
|
|
|
2397
2435
|
});
|
|
2398
2436
|
await context.plugin(apiPlugin);
|
|
2399
2437
|
|
|
2400
|
-
const
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2438
|
+
const originalPath = process.env.PATH ?? "";
|
|
2439
|
+
process.env.PATH = `${shimDirectory}:${originalPath}`;
|
|
2440
|
+
let response: Response;
|
|
2441
|
+
try {
|
|
2442
|
+
response = await fetch(context.webServer.url + "/api/plugins/uninstall", {
|
|
2443
|
+
method: "POST",
|
|
2444
|
+
headers: { "content-type": "application/json" },
|
|
2445
|
+
body: JSON.stringify({ id: entryId }),
|
|
2446
|
+
});
|
|
2447
|
+
} finally {
|
|
2448
|
+
process.env.PATH = originalPath;
|
|
2449
|
+
}
|
|
2405
2450
|
|
|
2406
2451
|
expect(response.status).toBe(200);
|
|
2407
2452
|
expect(active).toBe(false);
|
|
2453
|
+
expect((await readFile(npmLog, "utf8")).trim()).toBe("uninstall --package-lock=false @pi-harness/plugin-skill-guard");
|
|
2408
2454
|
await expect(readFile(configPath, "utf8")).resolves.not.toContain(entryId);
|
|
2409
2455
|
await expect(readFile(configPath, "utf8")).resolves.toContain("- id: sibling");
|
|
2410
2456
|
});
|