@aipt/cli 0.1.0 → 0.1.13
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 +114 -5
- package/dist/application-runner.js +276 -0
- package/dist/application.js +254 -0
- package/dist/catalog/foundation.agent-chat-ui-consumer/1.0.0/assets/README.agent-chat-ui.md +5 -0
- package/dist/catalog/foundation.agent-chat-ui-consumer/1.0.0/release.json +29 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/package.json +19 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/AgentChatWorkbench.test.tsx +12 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/AgentChatWorkbench.tsx +27 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/index.ts +2 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/style.css +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/styles.d.ts +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/tooling/verify-bundle.mjs +4 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/tsconfig.build.json +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/tsconfig.json +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/vite.config.ts +4 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.0.0/release.json +33 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/package.json +19 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/AgentChatWorkbench.test.tsx +12 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/AgentChatWorkbench.tsx +27 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/index.ts +2 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/style.css +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/styles.d.ts +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/tooling/verify-bundle.mjs +4 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/tsconfig.build.json +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/tsconfig.json +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/vite.config.ts +4 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.1.0/release.json +39 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/package.json +65 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/AgentChatWorkbench.test.tsx +12 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/AgentChatWorkbench.tsx +27 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/index.ts +2 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/style.css +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/styles.d.ts +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/tooling/verify-bundle.mjs +4 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/tsconfig.build.json +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/tsconfig.json +1 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/vite.config.ts +4 -0
- package/dist/catalog/foundation.agent-chat-workbench/1.2.0/release.json +39 -0
- package/dist/catalog/foundation.agent-state-sqlite/1.0.0/assets/README.agent-state-sqlite.md +5 -0
- package/dist/catalog/foundation.agent-state-sqlite/1.0.0/assets/src/agent-state.test.ts +8 -0
- package/dist/catalog/foundation.agent-state-sqlite/1.0.0/assets/src/agent-state.ts +8 -0
- package/dist/catalog/foundation.agent-state-sqlite/1.0.0/release.json +34 -0
- package/dist/catalog/foundation.agent-state-sqlite/1.1.0/assets/README.agent-state-sqlite.md +5 -0
- package/dist/catalog/foundation.agent-state-sqlite/1.1.0/assets/src/agent-state.test.ts +8 -0
- package/dist/catalog/foundation.agent-state-sqlite/1.1.0/assets/src/agent-state.ts +8 -0
- package/dist/catalog/foundation.agent-state-sqlite/1.1.0/release.json +34 -0
- package/dist/catalog/foundation.agent-state-sqlite-registry-consumer/1.0.0/assets/README.agent-state-registry-consumer.md +5 -0
- package/dist/catalog/foundation.agent-state-sqlite-registry-consumer/1.0.0/release.json +38 -0
- package/dist/catalog/foundation.agent-state-sqlite-registry-consumer/1.1.0/assets/README.agent-state-registry-consumer.md +5 -0
- package/dist/catalog/foundation.agent-state-sqlite-registry-consumer/1.1.0/release.json +31 -0
- package/dist/catalog/foundation.agent-worker-skill-runtime/1.0.0/assets/README.agent-runtime.md +7 -0
- package/dist/catalog/foundation.agent-worker-skill-runtime/1.0.0/assets/src/agent-runtime.test.ts +19 -0
- package/dist/catalog/foundation.agent-worker-skill-runtime/1.0.0/assets/src/agent-runtime.ts +15 -0
- package/dist/catalog/foundation.agent-worker-skill-runtime/1.0.0/release.json +47 -0
- package/dist/catalog/foundation.ai-education-agent-example/1.0.0/assets/README.agent-example.md +5 -0
- package/dist/catalog/foundation.ai-education-agent-example/1.0.0/assets/app/agent-phase1/page.tsx +2 -0
- package/dist/catalog/foundation.ai-education-agent-example/1.0.0/assets/app/agent-phase1/workbench.test.tsx +5 -0
- package/dist/catalog/foundation.ai-education-agent-example/1.0.0/assets/app/agent-phase1/workbench.tsx +19 -0
- package/dist/catalog/foundation.ai-education-agent-example/1.0.0/release.json +21 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/README.agent-sqlite-example.md +3 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/contracts.ts +5 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/page.tsx +3 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/state.server.ts +7 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/workbench.test.tsx +7 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/workbench.tsx +9 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/release.json +30 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/README.agent-stage5.md +3 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/contracts.ts +6 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/page.tsx +1 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/platform-proof.ts +8 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/state.server.ts +5 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/workbench.test.tsx +1 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/workbench.tsx +3 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/release.json +32 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/README.education-agent-intake.md +3 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/contracts.ts +8 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/page.tsx +3 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/platform-proof.ts +7 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/state.server.ts +8 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/workbench.test.tsx +7 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/workbench.tsx +6 -0
- package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/release.json +32 -0
- package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/assets/README.ai-education-delegated-review.md +3 -0
- package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/assets/app/ai-education-delegated-review/page.tsx +47 -0
- package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/assets/src/delegated-review-fixture.test.ts +1 -0
- package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/assets/src/delegated-review-fixture.ts +1 -0
- package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/release.json +26 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.0.0/assets/README.ai-education-end-to-end-production.md +7 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.0.0/assets/app/ai-education-end-to-end-production/page.tsx +13 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.0.0/assets/src/education-production-lineage.test.ts +16 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.0.0/assets/src/education-production-lineage.ts +30 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.0.0/release.json +34 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.1.0/assets/README.ai-education-end-to-end-production.md +3 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.1.0/assets/app/ai-education-end-to-end-production/page.tsx +3 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.1.0/assets/src/education-production-lineage.test.ts +2 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.1.0/assets/src/education-production-lineage.ts +3 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.1.0/release.json +31 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.2.0/assets/README.ai-education-end-to-end-production.md +5 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.2.0/assets/app/ai-education-end-to-end-production/page.tsx +3 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.2.0/assets/src/education-production-lineage.test.ts +2 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.2.0/assets/src/education-production-lineage.ts +5 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.2.0/release.json +31 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.3.0/assets/README.ai-education-end-to-end-production.md +5 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.3.0/assets/app/ai-education-end-to-end-production/page.tsx +2 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.3.0/assets/src/education-production-journey.test.ts +2 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.3.0/assets/src/education-production-journey.ts +4 -0
- package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.3.0/release.json +1 -0
- package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/assets/README.education-learning-media-authoring.md +3 -0
- package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/assets/app/education-learning-media-authoring/page.tsx +1 -0
- package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/assets/src/learning-media-fixture.test.ts +1 -0
- package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/assets/src/learning-media-fixture.ts +3 -0
- package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/release.json +26 -0
- package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/assets/README.ai-education-picturebook-courseware.md +5 -0
- package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/assets/app/ai-education-picturebook-courseware/page.tsx +1 -0
- package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/assets/src/picturebook-fixture.test.ts +1 -0
- package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/assets/src/picturebook-fixture.ts +4 -0
- package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/release.json +1 -0
- package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/assets/README.ai-education-web-courseware.md +3 -0
- package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/assets/app/ai-education-web-courseware/page.tsx +1 -0
- package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/assets/src/courseware-fixture.test.ts +1 -0
- package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/assets/src/courseware-fixture.ts +3 -0
- package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/release.json +18 -0
- package/dist/catalog/foundation.ai-orchestration/1.0.0/assets/docs/engineering/ai-orchestration.md +3 -0
- package/dist/catalog/foundation.ai-orchestration/1.0.0/release.json +99 -0
- package/dist/catalog/foundation.api-contract-toolchain/1.0.0/assets/docs/engineering/api-contract.md +33 -0
- package/dist/catalog/foundation.api-contract-toolchain/1.0.0/assets/openapi-ts.config.ts +20 -0
- package/dist/catalog/foundation.api-contract-toolchain/1.0.0/assets/src/api/query-client.ts +29 -0
- package/dist/catalog/foundation.api-contract-toolchain/1.0.0/assets/src/api/runtime.ts +44 -0
- package/dist/catalog/foundation.api-contract-toolchain/1.0.0/release.json +122 -0
- package/dist/catalog/foundation.application-config-binding/1.0.0/assets/.dyyto/application-config-binding.json +4 -0
- package/dist/catalog/foundation.application-config-binding/1.0.0/assets/docs/engineering/application-config-binding.md +5 -0
- package/dist/catalog/foundation.application-config-binding/1.0.0/release.json +28 -0
- package/dist/catalog/foundation.artifact-delivery/1.0.0/assets/docs/engineering/artifact-delivery.md +3 -0
- package/dist/catalog/foundation.artifact-delivery/1.0.0/release.json +75 -0
- package/dist/catalog/foundation.artifact-runtime/1.0.0/assets/docs/engineering/artifact-runtime.md +3 -0
- package/dist/catalog/foundation.artifact-runtime/1.0.0/release.json +87 -0
- package/dist/catalog/foundation.capability-family-routing/1.0.0/assets/README.capability-family-routing.md +7 -0
- package/dist/catalog/foundation.capability-family-routing/1.0.0/assets/src/capability-family-routing.test.ts +10 -0
- package/dist/catalog/foundation.capability-family-routing/1.0.0/release.json +35 -0
- package/dist/catalog/foundation.environment-schema/1.0.0/assets/docs/engineering/environment.md +37 -0
- package/dist/catalog/foundation.environment-schema/1.0.0/assets/src/environment.ts +30 -0
- package/dist/catalog/foundation.environment-schema/1.0.0/release.json +75 -0
- package/dist/catalog/foundation.environment-schema/1.1.0/assets/.env.example +1 -0
- package/dist/catalog/foundation.environment-schema/1.1.0/assets/docs/engineering/environment.md +9 -0
- package/dist/catalog/foundation.environment-schema/1.1.0/release.json +25 -0
- package/dist/catalog/foundation.environment-schema/2.0.0/assets/config/application-config.json +4 -0
- package/dist/catalog/foundation.environment-schema/2.0.0/assets/docs/engineering/environment.md +33 -0
- package/dist/catalog/foundation.environment-schema/2.0.0/release.json +63 -0
- package/dist/catalog/foundation.managed-project-control/1.0.0/assets/docs/engineering/project-control.md +24 -0
- package/dist/catalog/foundation.managed-project-control/1.0.0/release.json +34 -0
- package/dist/catalog/foundation.managed-project-control/1.1.0/assets/docs/engineering/project-control.md +15 -0
- package/dist/catalog/foundation.managed-project-control/1.1.0/release.json +27 -0
- package/dist/catalog/foundation.managed-project-control/1.2.0/assets/docs/engineering/project-control.md +15 -0
- package/dist/catalog/foundation.managed-project-control/1.2.0/release.json +27 -0
- package/dist/catalog/foundation.managed-project-control/1.3.0/assets/docs/engineering/project-control.md +14 -0
- package/dist/catalog/foundation.managed-project-control/1.3.0/release.json +27 -0
- package/dist/catalog/foundation.media-production-infrastructure/1.0.0/assets/docs/engineering/media-production-infrastructure.md +3 -0
- package/dist/catalog/foundation.media-production-infrastructure/1.0.0/release.json +99 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/AGENTS.md +8 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/README.md +12 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/api/health/route.test.ts +9 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/api/health/route.ts +5 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/components/Counter.test.tsx +12 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/components/Counter.tsx +13 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/globals.css +20 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/layout.tsx +12 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/page.test.tsx +11 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/page.tsx +19 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/e2e/home.spec.ts +15 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/eslint.config.mjs +7 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/next-env.d.ts +6 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/next.config.ts +9 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/package.json +4 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/playwright.config.ts +16 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/pnpm-workspace.yaml +4 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/public/.gitkeep +1 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/tooling/package-standalone.mjs +15 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/tooling/verify-standalone.mjs +20 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/tsconfig.json +42 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/vitest.config.mts +12 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/release.json +42 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.1.0/assets/package.json +4 -0
- package/dist/catalog/foundation.nextjs-full-stack-application/1.1.0/release.json +21 -0
- package/dist/catalog/foundation.package-source-fixture/1.0.0/assets/README.runtime.md +1 -0
- package/dist/catalog/foundation.package-source-fixture/1.0.0/release.json +16 -0
- package/dist/catalog/foundation.page-authoring/1.0.0/assets/docs/engineering/page-authoring.md +27 -0
- package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/csr-entry.tsx +6 -0
- package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/load-document.ts +11 -0
- package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/pages/about.json +26 -0
- package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/pages/home.json +26 -0
- package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/project.json +38 -0
- package/dist/catalog/foundation.page-authoring/1.0.0/release.json +146 -0
- package/dist/catalog/foundation.pro-search-table-page/1.0.0/assets/docs/engineering/pro-search-table.md +20 -0
- package/dist/catalog/foundation.pro-search-table-page/1.0.0/assets/search/operations-page.tsx +66 -0
- package/dist/catalog/foundation.pro-search-table-page/1.0.0/assets/search/search-main.tsx +15 -0
- package/dist/catalog/foundation.pro-search-table-page/1.0.0/assets/search.html +13 -0
- package/dist/catalog/foundation.pro-search-table-page/1.0.0/release.json +119 -0
- package/dist/catalog/foundation.pro-search-table-page/2.0.0/assets/docs/engineering/pro-search-table.md +20 -0
- package/dist/catalog/foundation.pro-search-table-page/2.0.0/assets/search/operations-page.tsx +66 -0
- package/dist/catalog/foundation.pro-search-table-page/2.0.0/assets/search/search-main.tsx +15 -0
- package/dist/catalog/foundation.pro-search-table-page/2.0.0/assets/search.html +13 -0
- package/dist/catalog/foundation.pro-search-table-page/2.0.0/release.json +153 -0
- package/dist/catalog/foundation.product-interaction-feedback/1.0.0/assets/docs/engineering/product-interaction-feedback.md +10 -0
- package/dist/catalog/foundation.product-interaction-feedback/1.0.0/release.json +68 -0
- package/dist/catalog/foundation.production-orchestration-contracts/1.0.0/assets/README.production-orchestration.md +3 -0
- package/dist/catalog/foundation.production-orchestration-contracts/1.0.0/assets/src/production-orchestration.test.ts +8 -0
- package/dist/catalog/foundation.production-orchestration-contracts/1.0.0/assets/src/production-orchestration.ts +7 -0
- package/dist/catalog/foundation.production-orchestration-contracts/1.0.0/release.json +33 -0
- package/dist/catalog/foundation.production-orchestration-contracts/1.1.0/assets/README.production-orchestration.md +3 -0
- package/dist/catalog/foundation.production-orchestration-contracts/1.1.0/assets/src/production-orchestration.test.ts +11 -0
- package/dist/catalog/foundation.production-orchestration-contracts/1.1.0/assets/src/production-orchestration.ts +4 -0
- package/dist/catalog/foundation.production-orchestration-contracts/1.1.0/release.json +29 -0
- package/dist/catalog/foundation.production-orchestration-registry-consumer/1.1.0/assets/README.production-orchestration-registry.md +5 -0
- package/dist/catalog/foundation.production-orchestration-registry-consumer/1.1.0/release.json +33 -0
- package/dist/catalog/foundation.production-orchestration-registry-consumer/1.2.0/assets/README.production-orchestration-registry.md +3 -0
- package/dist/catalog/foundation.production-orchestration-registry-consumer/1.2.0/release.json +33 -0
- package/dist/catalog/foundation.production-workbench/1.0.0/assets/docs/engineering/production-workbench.md +3 -0
- package/dist/catalog/foundation.production-workbench/1.0.0/release.json +74 -0
- package/dist/catalog/foundation.project-documentation/1.0.0/assets/docs/engineering/README.md +13 -0
- package/dist/catalog/foundation.project-documentation/1.0.0/release.json +37 -0
- package/dist/catalog/foundation.project-maintenance/1.0.0/assets/docs/engineering/README.md +5 -0
- package/dist/catalog/foundation.project-maintenance/1.0.0/release.json +39 -0
- package/dist/catalog/foundation.project-maintenance-console/1.0.0/assets/docs/engineering/project-maintenance-console.md +7 -0
- package/dist/catalog/foundation.project-maintenance-console/1.0.0/release.json +27 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/package.json +1 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/pnpm-workspace.yaml +1 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/Button.test.tsx +12 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/Button.tsx +8 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/index.ts +1 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/style.css +14 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/styles.d.ts +1 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/tooling/verify-bundle.mjs +7 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/tsconfig.build.json +11 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/tsconfig.json +14 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/assets/vite.config.ts +12 -0
- package/dist/catalog/foundation.react-component-library/1.0.0/release.json +30 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/package.json +1 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/pnpm-lock.yaml +1327 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/pnpm-workspace.yaml +5 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/Button.test.tsx +12 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/Button.tsx +8 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/index.ts +1 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/style.css +14 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/styles.d.ts +1 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/tooling/verify-bundle.mjs +7 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/tsconfig.build.json +11 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/tsconfig.json +14 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/assets/vite.config.ts +12 -0
- package/dist/catalog/foundation.react-component-library/1.1.0/release.json +125 -0
- package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/package.json +4 -0
- package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/pnpm-workspace.yaml +1 -0
- package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/src/index.test.ts +8 -0
- package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/src/index.ts +3 -0
- package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/tsconfig.build.json +12 -0
- package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/tsconfig.json +14 -0
- package/dist/catalog/foundation.standalone-npm-package/1.1.0/release.json +29 -0
- package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/package.json +4 -0
- package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/pnpm-lock.yaml +727 -0
- package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/pnpm-workspace.yaml +5 -0
- package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/src/index.test.ts +8 -0
- package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/src/index.ts +3 -0
- package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/tsconfig.build.json +12 -0
- package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/tsconfig.json +14 -0
- package/dist/catalog/foundation.standalone-npm-package/1.2.0/release.json +82 -0
- package/dist/catalog/foundation.structured-knowledge-runtime/1.0.0/assets/README.structured-knowledge.md +3 -0
- package/dist/catalog/foundation.structured-knowledge-runtime/1.0.0/assets/src/structured-knowledge.test.ts +8 -0
- package/dist/catalog/foundation.structured-knowledge-runtime/1.0.0/assets/src/structured-knowledge.ts +8 -0
- package/dist/catalog/foundation.structured-knowledge-runtime/1.0.0/release.json +37 -0
- package/dist/catalog/foundation.visual-presentation-composition/1.0.0/assets/README.visual-presentation.md +3 -0
- package/dist/catalog/foundation.visual-presentation-composition/1.0.0/assets/app/visual-presentation/page.tsx +48 -0
- package/dist/catalog/foundation.visual-presentation-composition/1.0.0/assets/src/visual-presentation.test.ts +1 -0
- package/dist/catalog/foundation.visual-presentation-composition/1.0.0/assets/src/visual-presentation.ts +2 -0
- package/dist/catalog/foundation.visual-presentation-composition/1.0.0/release.json +26 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/__dyyto_dotfiles__/gitignore +13 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/app/_layout.tsx +5 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/app/index.tsx +25 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/app.json +14 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/expo-env.d.ts +3 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/package.json +4 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/src/app-config.test.ts +10 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/tooling/verify-expo-export.mjs +5 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/tsconfig.json +10 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/vitest.config.mts +5 -0
- package/dist/catalog/foundation.workspace-expo-application/1.0.0/release.json +42 -0
- package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/package.json +4 -0
- package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/src/app.test.ts +21 -0
- package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/src/app.ts +14 -0
- package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/src/index.test.ts +14 -0
- package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/src/index.ts +53 -0
- package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/tsconfig.build.json +12 -0
- package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/tsconfig.json +7 -0
- package/dist/catalog/foundation.workspace-node-application/1.1.0/release.json +19 -0
- package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/package.json +4 -0
- package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/src/index.test.ts +8 -0
- package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/src/index.ts +3 -0
- package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/tsconfig.build.json +12 -0
- package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/tsconfig.json +7 -0
- package/dist/catalog/foundation.workspace-npm-package/1.1.0/release.json +17 -0
- package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/package.json +4 -0
- package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/src/index.test.ts +8 -0
- package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/src/index.ts +3 -0
- package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/tsconfig.build.json +12 -0
- package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/tsconfig.json +7 -0
- package/dist/catalog/foundation.workspace-npm-package/1.2.0/release.json +17 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/package.json +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/Button.test.tsx +12 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/Button.tsx +8 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/index.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/style.css +14 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/styles.d.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/tooling/verify-bundle.mjs +7 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/tsconfig.build.json +11 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/tsconfig.json +14 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/vite.config.ts +12 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.0.0/release.json +24 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/package.json +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/Button.test.tsx +12 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/Button.tsx +8 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/index.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/style.css +14 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/styles.d.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/tooling/verify-bundle.mjs +7 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/tsconfig.build.json +11 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/tsconfig.json +14 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/vite.config.ts +12 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.1.0/release.json +38 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/package.json +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/Button.test.tsx +12 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/Button.tsx +8 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/index.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/style.css +14 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/styles.d.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/test/setup.ts +1 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tooling/package-externals.d.mts +8 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tooling/package-externals.mjs +16 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tooling/verify-bundle.mjs +30 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tsconfig.build.json +11 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tsconfig.json +14 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/vite.config.ts +15 -0
- package/dist/catalog/foundation.workspace-react-component-library/1.2.0/release.json +40 -0
- package/dist/catalog/foundation.workspace-root/1.2.0/assets/apps/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.2.0/assets/package.json +13 -0
- package/dist/catalog/foundation.workspace-root/1.2.0/assets/packages/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.2.0/assets/pnpm-workspace.yaml +3 -0
- package/dist/catalog/foundation.workspace-root/1.2.0/assets/tsconfig.base.json +12 -0
- package/dist/catalog/foundation.workspace-root/1.2.0/release.json +17 -0
- package/dist/catalog/foundation.workspace-root/1.3.0/assets/apps/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.3.0/assets/package.json +13 -0
- package/dist/catalog/foundation.workspace-root/1.3.0/assets/packages/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.3.0/assets/pnpm-workspace.yaml +4 -0
- package/dist/catalog/foundation.workspace-root/1.3.0/assets/services/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.3.0/assets/tsconfig.base.json +12 -0
- package/dist/catalog/foundation.workspace-root/1.3.0/release.json +18 -0
- package/dist/catalog/foundation.workspace-root/1.4.0/assets/apps/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.4.0/assets/package.json +15 -0
- package/dist/catalog/foundation.workspace-root/1.4.0/assets/packages/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.4.0/assets/pnpm-workspace.yaml +4 -0
- package/dist/catalog/foundation.workspace-root/1.4.0/assets/services/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.4.0/assets/tsconfig.base.json +8 -0
- package/dist/catalog/foundation.workspace-root/1.4.0/release.json +18 -0
- package/dist/catalog/foundation.workspace-root/1.5.0/assets/apps/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.5.0/assets/package.json +15 -0
- package/dist/catalog/foundation.workspace-root/1.5.0/assets/packages/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.5.0/assets/pnpm-workspace.yaml +4 -0
- package/dist/catalog/foundation.workspace-root/1.5.0/assets/services/README.md +3 -0
- package/dist/catalog/foundation.workspace-root/1.5.0/assets/tsconfig.base.json +8 -0
- package/dist/catalog/foundation.workspace-root/1.5.0/release.json +18 -0
- package/dist/chunk.js +49 -0
- package/dist/cli.js +10 -12026
- package/dist/contracts/dyyto-package-release-catalog.schema.json +36 -0
- package/dist/optional-runtime.js +47 -0
- package/dist/package-releases/aipt--cli/0.1.0/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.1/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.10/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.11/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.12/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.13/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.2/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.3/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.4/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.5/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.6/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.7/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.8/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.9/release.json +29 -0
- package/dist/package-releases/aipt--platform-kernel/0.1.0/release.json +33 -0
- package/dist/package-releases/aipt--platform-kernel/0.1.1/release.json +33 -0
- package/dist/package-releases/aipt--platform-kernel/0.1.2/release.json +33 -0
- package/dist/package-releases/aipt--platform-kernel/0.1.3/release.json +33 -0
- package/dist/package-releases/aipt--platform-kernel/0.1.4/release.json +33 -0
- package/dist/package-releases/aipt--platform-kernel/0.1.5/release.json +33 -0
- package/dist/recipes/ai-education-agent-phase1/1.0.0/recipe.json +18 -0
- package/dist/recipes/ai-education-agent-sqlite/1.0.0/recipe.json +20 -0
- package/dist/recipes/ai-education-agent-sqlite/1.1.0/recipe.json +20 -0
- package/dist/recipes/ai-education-delegated-review/1.0.0/recipe.json +14 -0
- package/dist/recipes/ai-education-end-to-end-production/1.0.0/recipe.json +22 -0
- package/dist/recipes/ai-education-end-to-end-production/1.1.0/recipe.json +22 -0
- package/dist/recipes/ai-education-end-to-end-production/1.2.0/recipe.json +22 -0
- package/dist/recipes/ai-education-end-to-end-production/1.3.0/recipe.json +1 -0
- package/dist/recipes/ai-education-picturebook-courseware/1.0.0/recipe.json +1 -0
- package/dist/recipes/ai-education-web-courseware/1.0.0/recipe.json +1 -0
- package/dist/recipes/capability-family-routing/1.0.0/recipe.json +14 -0
- package/dist/recipes/education-agent-intake/1.0.0/recipe.json +20 -0
- package/dist/recipes/education-knowledge-skill/1.0.0/recipe.json +14 -0
- package/dist/recipes/education-learning-media-authoring/1.0.0/recipe.json +22 -0
- package/dist/recipes/education-picturebook-courseware-authoring/1.0.0/recipe.json +38 -0
- package/dist/recipes/education-web-courseware-authoring/1.0.0/recipe.json +38 -0
- package/dist/recipes/generic-agent-chat/1.0.0/recipe.json +17 -0
- package/dist/recipes/visual-presentation-composition/1.0.0/recipe.json +14 -0
- package/dist/templates/template.expo-react-native-application/1.0.0/template.json +23 -0
- package/dist/templates/template.nextjs-full-stack-application/1.0.0/template.json +23 -0
- package/dist/templates/template.node-api-application/1.0.0/template.json +20 -0
- package/dist/templates/template.react-component-library/1.0.0/template.json +29 -0
- package/dist/templates/template.react-component-library/1.1.0/template.json +122 -0
- package/dist/templates/template.typescript-library/1.0.0/template.json +27 -0
- package/dist/templates/template.typescript-library/1.1.0/template.json +104 -0
- package/dist/templates/template.web-frontend-application/1.0.0/template.json +26 -0
- package/dist/templates/template.workspace-npm-package/1.0.0/template.json +31 -0
- package/dist/templates/template.workspace-react-component-library/1.0.0/template.json +33 -0
- package/dist/templates/template.workspace-react-component-library/1.1.0/template.json +33 -0
- package/dist/templates/template.workspace-react-component-library/1.2.0/template.json +33 -0
- package/dist/templates/template.workspace-root/1.0.0/template.json +23 -0
- package/dist/templates/template.workspace-root/1.1.0/template.json +23 -0
- package/dist/templates/template.workspace-root/1.2.0/template.json +19 -0
- package/package.json +34 -4
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"capabilityId": "foundation.agent-chat-ui-consumer",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"integrity": "sha256:9e4f4a560f6e9d20879a58d0f34b52a6cb36179948bf0b3ad3a70c03c75ba5d7",
|
|
6
|
+
"consumerProfile": "any-project",
|
|
7
|
+
"kind": "engineering-feature",
|
|
8
|
+
"availability": { "maturity": "candidate", "visibility": "maintainers-only", "sourceState": "development-registry" },
|
|
9
|
+
"dependencies": { "profiles": ["nextjs-full-stack-application"], "capabilities": ["foundation.agent-worker-skill-runtime"] },
|
|
10
|
+
"compatibility": { "node": ">=24.18.0 <25", "pnpm": "11.21.0", "typescript": "6.0.3" },
|
|
11
|
+
"integration": {
|
|
12
|
+
"title": "Agent Chat UI Consumer",
|
|
13
|
+
"purpose": "为 Web 应用安装平台共享 Agent Chat UI 及其精确合同闭包。",
|
|
14
|
+
"packages": [
|
|
15
|
+
{ "packageName": "@aipt/agent-chat-ui", "version": "0.2.0", "usage": "runtime", "imports": [{ "importFrom": "@aipt/agent-chat-ui", "symbol": "AgentChatWorkbench", "referencePath": "app/agent/education-agent-workbench.tsx" }] },
|
|
16
|
+
{ "packageName": "@aipt/agent-chat-contracts", "version": "0.2.0", "usage": "runtime", "imports": [] },
|
|
17
|
+
{ "packageName": "@aipt/agent-runtime-contracts", "version": "0.2.0", "usage": "runtime", "imports": [] }
|
|
18
|
+
],
|
|
19
|
+
"codeAssets": [{ "sourcePath": "assets/README.agent-chat-ui.md", "targetPath": "README.agent-chat-ui.md", "ownership": "owned-file" }]
|
|
20
|
+
},
|
|
21
|
+
"packageSources": [
|
|
22
|
+
{ "registryId": "registry.local.development", "packageName": "@aipt/agent-chat-contracts", "version": "0.2.0", "integrity": "sha512-BvetSwv395hHMj820nvlgzgTTUQO1a4ngEsv3+Ytcl4lihI2udah+Fs5Y///BiFz1bMQ/sfx476WN6Kjz/MmKA==", "tarballDigest": "sha256:8228b41131a581f505c42d8bcf43bfcdfa079184d84eed0168e294afb3dc3857", "deliveryReceiptId": "sha256:922a618abda784520dd6c4ee4b04929f2cdff3018f2fbb5e690d972f14d516e3", "usage": "runtime" },
|
|
23
|
+
{ "registryId": "registry.local.development", "packageName": "@aipt/agent-chat-ui", "version": "0.2.0", "integrity": "sha512-yk05/kEUrtsUh2C2p4uCodTaQ+u8nl1gWB/ynSIHFojIx2R3OJMPA8JPqyHj6xfBsqH8yBjwN1jCcfO35RRBvw==", "tarballDigest": "sha256:87199f4722e3a858b5265643a297dd82d14c009720bc79b962b4e69d0f326d74", "deliveryReceiptId": "sha256:b6d44f820ee5212b19ccb832f55616e02f9d69d3b1d1be29c1aabf79c45a0533", "usage": "runtime" },
|
|
24
|
+
{ "registryId": "registry.local.development", "packageName": "@aipt/agent-runtime-contracts", "version": "0.2.0", "integrity": "sha512-VI5dMsGaawC8ZKDR6memVEEFR15JiVXI/tZQQOoSN63FyHTXsL2N0oEPl2ZS+NPkINwU06ieAGUriVArgG/9yw==", "tarballDigest": "sha256:5fe6e0c9785f9fd66f81d33788e956128d386c796a870746e4f781ce0507367c", "deliveryReceiptId": "sha256:c951f5e27bc58b6c702058a7c040800b4318bef32a2441a0d14efc7585cd3ebe", "usage": "runtime" }
|
|
25
|
+
],
|
|
26
|
+
"assets": [{ "path": "README.agent-chat-ui.md", "ownership": "owned-file", "digest": "sha256:6effd42f63b65d37b3fa76cc02fc1ef00ef76295d27d7c25f1af53e800555dd4", "mode": 420 }],
|
|
27
|
+
"verifiers": [{ "id": "capability.assets" }, { "id": "typescript.typecheck" }, { "id": "vitest.run" }, { "id": "next.application-build" }],
|
|
28
|
+
"exit": { "ownedAssets": ["README.agent-chat-ui.md"] }
|
|
29
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aipt/agent-chat-ui",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"repository": { "type": "git", "url": "https://example.invalid/aipt/agent-chat-ui" },
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": ["**/*.css"],
|
|
8
|
+
"files": ["dist"],
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": { ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" }, "./style.css": "./dist/style.css" },
|
|
13
|
+
"engines": { "node": ">=24.18.0 <25", "pnpm": "11.21.0" },
|
|
14
|
+
"packageManager": "pnpm@11.21.0",
|
|
15
|
+
"scripts": { "build": "vite build && tsc -p tsconfig.build.json", "typecheck": "tsc --noEmit -p tsconfig.json", "test": "vitest run", "verify:bundle": "vite build && tsc -p tsconfig.build.json && node tooling/verify-bundle.mjs", "check": "corepack pnpm typecheck && corepack pnpm test && corepack pnpm verify:bundle", "prepack": "corepack pnpm check" },
|
|
16
|
+
"peerDependencies": { "react": ">=19.0.0 <20", "react-dom": ">=19.0.0 <20" },
|
|
17
|
+
"devDependencies": { "@testing-library/dom": "10.4.1", "@testing-library/jest-dom": "6.9.1", "@testing-library/react": "16.3.2", "@types/node": "24.10.13", "@types/react": "19.2.18", "@types/react-dom": "19.2.4", "@vitejs/plugin-react": "6.0.5", "jsdom": "30.0.1", "react": "19.2.8", "react-dom": "19.2.8", "typescript": "6.0.3", "vite": "8.2.1", "vitest": "4.1.10" },
|
|
18
|
+
"publishConfig": { "access": "public" }
|
|
19
|
+
}
|
package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/AgentChatWorkbench.test.tsx
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { fireEvent, render, screen } from "@testing-library/react";
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { AgentChatWorkbench } from "./AgentChatWorkbench.js";
|
|
4
|
+
|
|
5
|
+
const digest = `sha256:${"a".repeat(64)}` as const;
|
|
6
|
+
const view = { schemaVersion: 1 as const, tenantId: "tenant-1", conversationId: "conversation-1", agentInstanceId: "agent-1", revision: 1, lastCursor: 1, messages: [{ schemaVersion: 1 as const, messageId: "message-1", tenantId: "tenant-1", conversationId: "conversation-1", runId: "run-1", sequence: 1, role: "assistant" as const, parts: [{ kind: "text" as const, text: "你好,我可以协助你。" }], createdAt: "2026-08-23T00:00:00.000Z" }], artifacts: [], findings: [] };
|
|
7
|
+
|
|
8
|
+
describe("AgentChatWorkbench", () => {
|
|
9
|
+
it("uses Chinese product copy and sends a trimmed message", () => { const onSend = vi.fn(); render(<AgentChatWorkbench view={view} onSend={onSend}/>); expect(screen.getByRole("region", { name: "Agent 对话工作台" })).toBeInTheDocument(); expect(screen.getByText("你好,我可以协助你。")).toBeInTheDocument(); fireEvent.change(screen.getByLabelText("输入消息"), { target: { value: " 请继续 " } }); fireEvent.click(screen.getByRole("button", { name: "发送" })); expect(onSend).toHaveBeenCalledWith("请继续"); });
|
|
10
|
+
it("never binds a recommended Skill until the user confirms", () => { const decide = vi.fn(); render(<AgentChatWorkbench view={view} recommendation={{ schemaVersion: 1, recommendationId: "recommendation-1", tenantId: "tenant-1", conversationId: "conversation-1", revision: 1, inputDigest: digest, status: "pending", candidates: [{ subjectSkillReleaseId: "skill-1@1.0.0", compatible: true, reason: "与当前上下文兼容" }] }} onSend={() => undefined} onRecommendationDecision={decide}/>); expect(decide).not.toHaveBeenCalled(); fireEvent.click(screen.getByRole("button", { name: "确认绑定" })); expect(decide).toHaveBeenCalledWith("accept", "skill-1@1.0.0"); });
|
|
11
|
+
it("projects HITL decisions without owning approval state", () => { const decide = vi.fn(); render(<AgentChatWorkbench view={view} interrupt={{ schemaVersion: 1, interruptId: "interrupt-1", tenantId: "tenant-1", conversationId: "conversation-1", runId: "run-1", revision: 1, kind: "review_candidate", payloadDigest: digest, allowedDecisions: ["approve", "edit", "reject"], status: "pending" }} onSend={() => undefined} onInterruptDecision={decide}/>); fireEvent.click(screen.getByRole("button", { name: "确认继续" })); expect(decide).toHaveBeenCalledWith("approve"); });
|
|
12
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useState, type FormEvent } from "react";
|
|
2
|
+
import type { ConversationView, InterruptEnvelope, SkillRecommendation } from "@aipt/agent-chat-contracts";
|
|
3
|
+
import "./style.css";
|
|
4
|
+
|
|
5
|
+
export type AgentChatWorkbenchProps = Readonly<{
|
|
6
|
+
view: ConversationView;
|
|
7
|
+
recommendation?: SkillRecommendation;
|
|
8
|
+
interrupt?: InterruptEnvelope;
|
|
9
|
+
busy?: boolean;
|
|
10
|
+
onSend(text: string): void | Promise<void>;
|
|
11
|
+
onRecommendationDecision?(decision: "accept" | "reject", subjectSkillReleaseId?: string): void | Promise<void>;
|
|
12
|
+
onInterruptDecision?(decision: "approve" | "edit" | "reject"): void | Promise<void>;
|
|
13
|
+
}>;
|
|
14
|
+
|
|
15
|
+
export function AgentChatWorkbench({ view, recommendation, interrupt, busy = false, onSend, onRecommendationDecision, onInterruptDecision }: AgentChatWorkbenchProps) {
|
|
16
|
+
const [draft, setDraft] = useState("");
|
|
17
|
+
const submit = (event: FormEvent) => { event.preventDefault(); const text = draft.trim(); if (!text || busy) return; setDraft(""); void onSend(text); };
|
|
18
|
+
return <section className="agent-chat" aria-label="Agent 对话工作台">
|
|
19
|
+
<header className="agent-chat__header"><div><p className="agent-chat__eyebrow">Agent 对话</p><h2>与智能助手协作</h2></div><span className="agent-chat__status">{view.progress?.label ?? "等待输入"}</span></header>
|
|
20
|
+
{view.findings.length > 0 && <div role="alert" className="agent-chat__warning">事件流需要恢复,请刷新会话后继续。</div>}
|
|
21
|
+
<ol className="agent-chat__messages" aria-live="polite">{view.messages.map((message) => <li key={message.messageId} className={`agent-chat__message agent-chat__message--${message.role}`}><strong>{message.role === "user" ? "你" : message.role === "assistant" ? "助手" : "系统"}</strong>{message.parts.map((part, index) => part.kind === "text" ? <p key={index}>{part.text}</p> : <p key={index}>{part.kind === "artifact" ? "已生成 Artifact" : `工具状态:${part.status}`}</p>)}</li>)}</ol>
|
|
22
|
+
{recommendation?.status === "pending" && <aside className="agent-chat__decision" aria-label="Skill 推荐确认"><h3>推荐 Skill</h3>{recommendation.candidates.map((candidate) => <div key={`${candidate.subjectSkillReleaseId}:${candidate.publisherProfileReleaseId ?? ""}`}><p><strong>{candidate.subjectSkillReleaseId}</strong></p><p>{candidate.reason}</p><button type="button" disabled={busy} onClick={() => void onRecommendationDecision?.("accept", candidate.subjectSkillReleaseId)}>确认绑定</button></div>)}<button type="button" className="agent-chat__secondary" disabled={busy} onClick={() => void onRecommendationDecision?.("reject")}>暂不使用</button></aside>}
|
|
23
|
+
{interrupt?.status === "pending" && <aside className="agent-chat__decision" aria-label="人工确认"><h3>{interrupt.kind === "review_candidate" ? "生成教学设计前确认" : "需要人工确认"}</h3><p>请核对当前候选内容。确认前不会继续执行。</p><div className="agent-chat__actions">{interrupt.allowedDecisions.includes("approve") && <button type="button" disabled={busy} onClick={() => void onInterruptDecision?.("approve")}>确认继续</button>}{interrupt.allowedDecisions.includes("edit") && <button type="button" className="agent-chat__secondary" disabled={busy} onClick={() => void onInterruptDecision?.("edit")}>修改</button>}{interrupt.allowedDecisions.includes("reject") && <button type="button" className="agent-chat__danger" disabled={busy} onClick={() => void onInterruptDecision?.("reject")}>拒绝</button>}</div></aside>}
|
|
24
|
+
{view.artifacts.length > 0 && <aside className="agent-chat__artifacts" aria-label="Artifact 列表"><h3>生成结果</h3><ul>{view.artifacts.map((artifact) => <li key={artifact.artifactId}>{artifact.kind.toUpperCase()} · {artifact.status === "final" ? "已确认" : "候选"}</li>)}</ul></aside>}
|
|
25
|
+
<form className="agent-chat__composer" onSubmit={submit}><label htmlFor="agent-chat-input">输入消息</label><textarea id="agent-chat-input" value={draft} onChange={(event) => setDraft(event.target.value)} disabled={busy} placeholder="描述你希望 Agent 协助完成的任务"/><button type="submit" disabled={busy || draft.trim().length === 0}>{busy ? "处理中…" : "发送"}</button></form>
|
|
26
|
+
</section>;
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-chat{display:grid;gap:1rem;color:#172033;background:#fff;border:1px solid #d9dfeb;border-radius:16px;padding:1.25rem}.agent-chat__header{display:flex;align-items:center;justify-content:space-between;gap:1rem}.agent-chat__header h2,.agent-chat__decision h3,.agent-chat__artifacts h3{margin:0}.agent-chat__eyebrow{margin:0 0 .25rem;color:#52627a;font-size:.8rem}.agent-chat__status{border-radius:999px;background:#edf3ff;padding:.4rem .7rem;color:#234b94}.agent-chat__messages{display:grid;gap:.75rem;margin:0;padding:0;list-style:none}.agent-chat__message{max-width:80%;border-radius:12px;padding:.75rem 1rem;background:#f3f5f8}.agent-chat__message--user{justify-self:end;background:#e8f0ff}.agent-chat__message p{margin:.35rem 0 0}.agent-chat__decision,.agent-chat__artifacts,.agent-chat__warning{border-radius:12px;padding:1rem;background:#fff8e8;border:1px solid #f1d791}.agent-chat__warning{color:#8a3d12;background:#fff0ea}.agent-chat__actions{display:flex;gap:.5rem;flex-wrap:wrap}.agent-chat button{border:0;border-radius:8px;background:#2359b8;color:#fff;padding:.65rem 1rem;font:inherit;cursor:pointer}.agent-chat button:disabled{cursor:not-allowed;opacity:.55}.agent-chat .agent-chat__secondary{background:#e8edf5;color:#26354d}.agent-chat .agent-chat__danger{background:#a83434}.agent-chat__composer{display:grid;gap:.5rem}.agent-chat__composer textarea{min-height:6rem;resize:vertical;border:1px solid #aeb9ca;border-radius:10px;padding:.75rem;font:inherit}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module "*.css";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@testing-library/jest-dom/vitest";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
const source=await readFile(new URL("../dist/index.js",import.meta.url),"utf8");
|
|
3
|
+
if(!source.includes("AgentChatWorkbench")||source.includes("react/jsx-runtime.js"))throw new Error("Agent Chat bundle contract failed");
|
|
4
|
+
for(const file of ["../dist/index.d.ts","../dist/style.css"])await stat(new URL(file,import.meta.url));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"extends":"./tsconfig.json","compilerOptions":{"declaration":true,"emitDeclarationOnly":true,"rootDir":"src","outDir":"dist","types":[]},"include":["src/index.ts","src/AgentChatWorkbench.tsx","src/styles.d.ts"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"compilerOptions":{"target":"ES2022","module":"ESNext","moduleResolution":"Bundler","jsx":"react-jsx","strict":true,"noUncheckedIndexedAccess":true,"exactOptionalPropertyTypes":true,"skipLibCheck":true,"types":["vitest/globals","@testing-library/jest-dom"]},"include":["src","vite.config.ts"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import react from "@vitejs/plugin-react";
|
|
3
|
+
import { defineConfig } from "vitest/config";
|
|
4
|
+
export default defineConfig({plugins:[react()],build:{lib:{entry:resolve(import.meta.dirname,"src/index.ts"),formats:["es"],fileName:"index",cssFileName:"style"},rolldownOptions:{external:["react","react-dom","react/jsx-runtime","react/jsx-dev-runtime","@aipt/agent-chat-contracts"]}},test:{environment:"jsdom",setupFiles:["./src/test/setup.ts"]}});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"capabilityId": "foundation.agent-chat-workbench",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"integrity": "sha256:924931e5e8c5391aace17e949472f2095c169b057134c660095fc0e21964d41b",
|
|
6
|
+
"consumerProfile": "react-component-library",
|
|
7
|
+
"kind": "profile",
|
|
8
|
+
"availability": { "maturity": "candidate", "visibility": "maintainers-only", "sourceState": "development-registry" },
|
|
9
|
+
"dependencies": { "profiles": ["react-component-library"], "capabilities": ["foundation.workspace-react-component-library"] },
|
|
10
|
+
"compatibility": { "node": ">=24.18.0 <25", "pnpm": "11.21.0", "typescript": "6.0.3" },
|
|
11
|
+
"integration": {
|
|
12
|
+
"title": "Agent Chat Workbench",
|
|
13
|
+
"purpose": "提供复用平台 Agent Chat 合同的无领域 React 交互组件。",
|
|
14
|
+
"packages": [{ "packageName": "@aipt/agent-chat-contracts", "version": "0.1.0", "usage": "runtime", "imports": [{ "importFrom": "@aipt/agent-chat-contracts", "symbol": "ConversationView", "referencePath": "src/AgentChatWorkbench.tsx" }] }, { "packageName": "@aipt/agent-runtime-contracts", "version": "0.1.0", "usage": "runtime", "imports": [] }],
|
|
15
|
+
"codeAssets": [{ "sourcePath": "src/AgentChatWorkbench.tsx", "targetPath": "src/AgentChatWorkbench.tsx", "ownership": "owned-file" }]
|
|
16
|
+
},
|
|
17
|
+
"packageSources": [{ "registryId": "registry.local.development", "packageName": "@aipt/agent-chat-contracts", "version": "0.1.0", "integrity": "sha512-y2zQQonSZ+OlL06bP8FtlhRFLpbHK4i7JXJA/0wKMrt6DtUdw24X9P3iUajZRZ1IX17JYqVtMKoNyplBElh4yA==", "tarballDigest": "sha256:e2c1935b0c410597e4fa593e1e27322135fbc43e06b333159a807483d5fc7e32", "deliveryReceiptId": "sha256:444b26e53dbfad156cf0fef5d695fba4f71b1399f64e8cf5ad246b0bcc194884", "usage": "runtime" }, { "registryId": "registry.local.development", "packageName": "@aipt/agent-runtime-contracts", "version": "0.1.0", "integrity": "sha512-vNmwy0aP3eTQe/A7h5S0/L1RbhMAI9DdYfBNjPxqVNuQ/hzlPcxtDSlFiVdzo0TFQWqIqW6RvcANgNjZov1z3w==", "tarballDigest": "sha256:cc5fbe46676151ddc61079242dd6e52b63a216d179c97f078b7fb8950686f44b", "deliveryReceiptId": "sha256:ff52b66137f32d69f4f415d2edc2f8df1e5555c8a547c8467b3ccde6e72ce17e", "usage": "runtime" }],
|
|
18
|
+
"assets": [
|
|
19
|
+
{ "path": "package.json", "ownership": "owned-file", "digest": "sha256:f90d181ce62044ef40b8872a8f27f1199e6add5cfe1f15b0d3199181df246769", "mode": 420 },
|
|
20
|
+
{ "path": "src/AgentChatWorkbench.test.tsx", "ownership": "owned-file", "digest": "sha256:92762f50abb00bfe40ef65a5c28f0dc5b03a0d8e4023098c80489c1a74a49e06", "mode": 420 },
|
|
21
|
+
{ "path": "src/AgentChatWorkbench.tsx", "ownership": "owned-file", "digest": "sha256:1f117cc2882cd5e79618103bb590accd53fdc9e1f55b7202a56f41e0f935e62c", "mode": 420 },
|
|
22
|
+
{ "path": "src/index.ts", "ownership": "owned-file", "digest": "sha256:b3edef10a09f6547de4cd6c4da99a379b33e02a66cb7a5e199ad2ba04394a558", "mode": 420 },
|
|
23
|
+
{ "path": "src/style.css", "ownership": "owned-file", "digest": "sha256:3404d2f6b14636d39ab1d5d37119b673ef10a4759b888ecf32432216f506e380", "mode": 420 },
|
|
24
|
+
{ "path": "src/styles.d.ts", "ownership": "owned-file", "digest": "sha256:35d26ea66c86da9701e4f4b467913481ffeae910761cea34c775c5dacb7f8eaa", "mode": 420 },
|
|
25
|
+
{ "path": "src/test/setup.ts", "ownership": "owned-file", "digest": "sha256:9b328c4843431fa76d8de00008fc159e95f99a840211085ff3b8f25e53d14409", "mode": 420 },
|
|
26
|
+
{ "path": "tooling/verify-bundle.mjs", "ownership": "owned-file", "digest": "sha256:5bcf986eac3c33caaa905a097a64de22b721b15ecf53990d6d2b64095f79eccf", "mode": 420 },
|
|
27
|
+
{ "path": "tsconfig.build.json", "ownership": "owned-file", "digest": "sha256:3dd36ed2ea6d997ade0fcba6ffbbf0dacdd68f2680cd9c1cf632b9bb3710139b", "mode": 420 },
|
|
28
|
+
{ "path": "tsconfig.json", "ownership": "owned-file", "digest": "sha256:7bdbe5196a5a5dfc07cbb8fd2f6466e7d07753a6762b4aec302f41138665616f", "mode": 420 },
|
|
29
|
+
{ "path": "vite.config.ts", "ownership": "owned-file", "digest": "sha256:1ca9d7a3e3807b5b105c8c32d40c4552d615ec604eb698ac500e96d553faf40f", "mode": 420 }
|
|
30
|
+
],
|
|
31
|
+
"verifiers": [{ "id": "capability.assets" }, { "id": "typescript.typecheck" }, { "id": "vitest.run" }, { "id": "react.library-build" }],
|
|
32
|
+
"exit": { "ownedAssets": ["package.json", "src/AgentChatWorkbench.test.tsx", "src/AgentChatWorkbench.tsx", "src/index.ts", "src/style.css", "src/styles.d.ts", "src/test/setup.ts", "tooling/verify-bundle.mjs", "tsconfig.build.json", "tsconfig.json", "vite.config.ts"] }
|
|
33
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aipt/agent-chat-ui",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"repository": { "type": "git", "url": "https://example.invalid/aipt/agent-chat-ui" },
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": ["**/*.css"],
|
|
8
|
+
"files": ["dist"],
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": { ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" }, "./style.css": "./dist/style.css" },
|
|
13
|
+
"engines": { "node": ">=24.18.0 <25", "pnpm": "11.21.0" },
|
|
14
|
+
"packageManager": "pnpm@11.21.0",
|
|
15
|
+
"scripts": { "build": "vite build && tsc -p tsconfig.build.json", "typecheck": "tsc --noEmit -p tsconfig.json", "test": "vitest run", "verify:bundle": "vite build && tsc -p tsconfig.build.json && node tooling/verify-bundle.mjs", "check": "corepack pnpm typecheck && corepack pnpm test && corepack pnpm verify:bundle", "prepack": "corepack pnpm check" },
|
|
16
|
+
"peerDependencies": { "react": ">=19.0.0 <20", "react-dom": ">=19.0.0 <20" },
|
|
17
|
+
"devDependencies": { "@testing-library/dom": "10.4.1", "@testing-library/jest-dom": "6.9.1", "@testing-library/react": "16.3.2", "@types/node": "24.10.13", "@types/react": "19.2.18", "@types/react-dom": "19.2.4", "@vitejs/plugin-react": "6.0.5", "jsdom": "30.0.1", "react": "19.2.8", "react-dom": "19.2.8", "typescript": "6.0.3", "vite": "8.2.1", "vitest": "4.1.10" },
|
|
18
|
+
"publishConfig": { "access": "public" }
|
|
19
|
+
}
|
package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/AgentChatWorkbench.test.tsx
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { fireEvent, render, screen } from "@testing-library/react";
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { AgentChatWorkbench } from "./AgentChatWorkbench.js";
|
|
4
|
+
|
|
5
|
+
const digest = `sha256:${"a".repeat(64)}` as const;
|
|
6
|
+
const view = { schemaVersion: 1 as const, tenantId: "tenant-1", conversationId: "conversation-1", agentInstanceId: "agent-1", revision: 1, lastCursor: 1, messages: [{ schemaVersion: 1 as const, messageId: "message-1", tenantId: "tenant-1", conversationId: "conversation-1", runId: "run-1", sequence: 1, role: "assistant" as const, parts: [{ kind: "text" as const, text: "你好,我可以协助你。" }], createdAt: "2026-08-23T00:00:00.000Z" }], artifacts: [], findings: [] };
|
|
7
|
+
|
|
8
|
+
describe("AgentChatWorkbench", () => {
|
|
9
|
+
it("uses Chinese product copy and sends a trimmed message", () => { const onSend = vi.fn(); render(<AgentChatWorkbench view={view} onSend={onSend}/>); expect(screen.getByRole("region", { name: "Agent 对话工作台" })).toBeInTheDocument(); expect(screen.getByText("你好,我可以协助你。")).toBeInTheDocument(); fireEvent.change(screen.getByLabelText("输入消息"), { target: { value: " 请继续 " } }); fireEvent.click(screen.getByRole("button", { name: "发送" })); expect(onSend).toHaveBeenCalledWith("请继续"); });
|
|
10
|
+
it("never binds a recommended Skill until the user confirms", () => { const decide = vi.fn(); render(<AgentChatWorkbench view={view} recommendation={{ schemaVersion: 1, recommendationId: "recommendation-1", tenantId: "tenant-1", conversationId: "conversation-1", revision: 1, inputDigest: digest, status: "pending", candidates: [{ subjectSkillReleaseId: "skill-1@1.0.0", compatible: true, reason: "与当前上下文兼容" }] }} onSend={() => undefined} onRecommendationDecision={decide}/>); expect(decide).not.toHaveBeenCalled(); fireEvent.click(screen.getByRole("button", { name: "确认绑定" })); expect(decide).toHaveBeenCalledWith("accept", "skill-1@1.0.0"); });
|
|
11
|
+
it("projects HITL decisions without owning approval state", () => { const decide = vi.fn(); render(<AgentChatWorkbench view={view} interrupt={{ schemaVersion: 1, interruptId: "interrupt-1", tenantId: "tenant-1", conversationId: "conversation-1", runId: "run-1", revision: 1, kind: "review_candidate", payloadDigest: digest, allowedDecisions: ["approve", "edit", "reject"], status: "pending" }} onSend={() => undefined} onInterruptDecision={decide}/>); fireEvent.click(screen.getByRole("button", { name: "确认继续" })); expect(decide).toHaveBeenCalledWith("approve"); });
|
|
12
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useState, type FormEvent } from "react";
|
|
2
|
+
import type { ConversationView, InterruptEnvelope, SkillRecommendation } from "@aipt/agent-chat-contracts";
|
|
3
|
+
import "./style.css";
|
|
4
|
+
|
|
5
|
+
export type AgentChatWorkbenchProps = Readonly<{
|
|
6
|
+
view: ConversationView;
|
|
7
|
+
recommendation?: SkillRecommendation;
|
|
8
|
+
interrupt?: InterruptEnvelope;
|
|
9
|
+
busy?: boolean;
|
|
10
|
+
onSend(text: string): void | Promise<void>;
|
|
11
|
+
onRecommendationDecision?(decision: "accept" | "reject", subjectSkillReleaseId?: string): void | Promise<void>;
|
|
12
|
+
onInterruptDecision?(decision: "approve" | "edit" | "reject"): void | Promise<void>;
|
|
13
|
+
}>;
|
|
14
|
+
|
|
15
|
+
export function AgentChatWorkbench({ view, recommendation, interrupt, busy = false, onSend, onRecommendationDecision, onInterruptDecision }: AgentChatWorkbenchProps) {
|
|
16
|
+
const [draft, setDraft] = useState("");
|
|
17
|
+
const submit = (event: FormEvent) => { event.preventDefault(); const text = draft.trim(); if (!text || busy) return; setDraft(""); void onSend(text); };
|
|
18
|
+
return <section className="agent-chat" aria-label="Agent 对话工作台">
|
|
19
|
+
<header className="agent-chat__header"><div><p className="agent-chat__eyebrow">Agent 对话</p><h2>与智能助手协作</h2></div><span className="agent-chat__status">{view.progress?.label ?? "等待输入"}</span></header>
|
|
20
|
+
{view.findings.length > 0 && <div role="alert" className="agent-chat__warning">事件流需要恢复,请刷新会话后继续。</div>}
|
|
21
|
+
<ol className="agent-chat__messages" aria-live="polite">{view.messages.map((message) => <li key={message.messageId} className={`agent-chat__message agent-chat__message--${message.role}`}><strong>{message.role === "user" ? "你" : message.role === "assistant" ? "助手" : "系统"}</strong>{message.parts.map((part, index) => part.kind === "text" ? <p key={index}>{part.text}</p> : <p key={index}>{part.kind === "artifact" ? "已生成 Artifact" : `工具状态:${part.status}`}</p>)}</li>)}</ol>
|
|
22
|
+
{recommendation?.status === "pending" && <aside className="agent-chat__decision" aria-label="Skill 推荐确认"><h3>推荐 Skill</h3>{recommendation.candidates.map((candidate) => <div key={`${candidate.subjectSkillReleaseId}:${candidate.publisherProfileReleaseId ?? ""}`}><p><strong>{candidate.subjectSkillReleaseId}</strong></p><p>{candidate.reason}</p><button type="button" disabled={busy} onClick={() => void onRecommendationDecision?.("accept", candidate.subjectSkillReleaseId)}>确认绑定</button></div>)}<button type="button" className="agent-chat__secondary" disabled={busy} onClick={() => void onRecommendationDecision?.("reject")}>暂不使用</button></aside>}
|
|
23
|
+
{interrupt?.status === "pending" && <aside className="agent-chat__decision" aria-label="人工确认"><h3>{interrupt.kind === "review_candidate" ? "生成教学设计前确认" : "需要人工确认"}</h3><p>请核对当前候选内容。确认前不会继续执行。</p><div className="agent-chat__actions">{interrupt.allowedDecisions.includes("approve") && <button type="button" disabled={busy} onClick={() => void onInterruptDecision?.("approve")}>确认继续</button>}{interrupt.allowedDecisions.includes("edit") && <button type="button" className="agent-chat__secondary" disabled={busy} onClick={() => void onInterruptDecision?.("edit")}>修改</button>}{interrupt.allowedDecisions.includes("reject") && <button type="button" className="agent-chat__danger" disabled={busy} onClick={() => void onInterruptDecision?.("reject")}>拒绝</button>}</div></aside>}
|
|
24
|
+
{view.artifacts.length > 0 && <aside className="agent-chat__artifacts" aria-label="Artifact 列表"><h3>生成结果</h3><ul>{view.artifacts.map((artifact) => <li key={artifact.artifactId}>{artifact.kind.toUpperCase()} · {artifact.status === "final" ? "已确认" : "候选"}</li>)}</ul></aside>}
|
|
25
|
+
<form className="agent-chat__composer" onSubmit={submit}><label htmlFor="agent-chat-input">输入消息</label><textarea id="agent-chat-input" value={draft} onChange={(event) => setDraft(event.target.value)} disabled={busy} placeholder="描述你希望 Agent 协助完成的任务"/><button type="submit" disabled={busy || draft.trim().length === 0}>{busy ? "处理中…" : "发送"}</button></form>
|
|
26
|
+
</section>;
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-chat{display:grid;gap:1rem;color:#172033;background:#fff;border:1px solid #d9dfeb;border-radius:16px;padding:1.25rem}.agent-chat__header{display:flex;align-items:center;justify-content:space-between;gap:1rem}.agent-chat__header h2,.agent-chat__decision h3,.agent-chat__artifacts h3{margin:0}.agent-chat__eyebrow{margin:0 0 .25rem;color:#52627a;font-size:.8rem}.agent-chat__status{border-radius:999px;background:#edf3ff;padding:.4rem .7rem;color:#234b94}.agent-chat__messages{display:grid;gap:.75rem;margin:0;padding:0;list-style:none}.agent-chat__message{max-width:80%;border-radius:12px;padding:.75rem 1rem;background:#f3f5f8}.agent-chat__message--user{justify-self:end;background:#e8f0ff}.agent-chat__message p{margin:.35rem 0 0}.agent-chat__decision,.agent-chat__artifacts,.agent-chat__warning{border-radius:12px;padding:1rem;background:#fff8e8;border:1px solid #f1d791}.agent-chat__warning{color:#8a3d12;background:#fff0ea}.agent-chat__actions{display:flex;gap:.5rem;flex-wrap:wrap}.agent-chat button{border:0;border-radius:8px;background:#2359b8;color:#fff;padding:.65rem 1rem;font:inherit;cursor:pointer}.agent-chat button:disabled{cursor:not-allowed;opacity:.55}.agent-chat .agent-chat__secondary{background:#e8edf5;color:#26354d}.agent-chat .agent-chat__danger{background:#a83434}.agent-chat__composer{display:grid;gap:.5rem}.agent-chat__composer textarea{min-height:6rem;resize:vertical;border:1px solid #aeb9ca;border-radius:10px;padding:.75rem;font:inherit}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module "*.css";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@testing-library/jest-dom/vitest";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
const source=await readFile(new URL("../dist/index.js",import.meta.url),"utf8");
|
|
3
|
+
if(!source.includes("AgentChatWorkbench")||source.includes("react/jsx-runtime.js"))throw new Error("Agent Chat bundle contract failed");
|
|
4
|
+
for(const file of ["../dist/index.d.ts","../dist/style.css"])await stat(new URL(file,import.meta.url));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"extends":"./tsconfig.json","compilerOptions":{"declaration":true,"emitDeclarationOnly":true,"rootDir":"src","outDir":"dist","types":[]},"include":["src/index.ts","src/AgentChatWorkbench.tsx","src/styles.d.ts"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"compilerOptions":{"target":"ES2022","module":"ESNext","moduleResolution":"Bundler","jsx":"react-jsx","strict":true,"noUncheckedIndexedAccess":true,"exactOptionalPropertyTypes":true,"skipLibCheck":true,"types":["vitest/globals","@testing-library/jest-dom"]},"include":["src","vite.config.ts"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import react from "@vitejs/plugin-react";
|
|
3
|
+
import { defineConfig } from "vitest/config";
|
|
4
|
+
export default defineConfig({plugins:[react()],build:{lib:{entry:resolve(import.meta.dirname,"src/index.ts"),formats:["es"],fileName:"index",cssFileName:"style"},rolldownOptions:{external:["react","react-dom","react/jsx-runtime","react/jsx-dev-runtime","@aipt/agent-chat-contracts"]}},test:{environment:"jsdom",setupFiles:["./src/test/setup.ts"]}});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"capabilityId": "foundation.agent-chat-workbench",
|
|
4
|
+
"version": "1.1.0",
|
|
5
|
+
"integrity": "sha256:ab4f9828e714fd2db50af24221abdb6642aeb362a832b1815701998f1132495b",
|
|
6
|
+
"consumerProfile": "react-component-library",
|
|
7
|
+
"kind": "profile",
|
|
8
|
+
"availability": { "maturity": "candidate", "visibility": "maintainers-only", "sourceState": "development-registry" },
|
|
9
|
+
"dependencies": { "profiles": ["react-component-library"], "capabilities": ["foundation.agent-chat-workbench"] },
|
|
10
|
+
"compatibility": { "node": ">=24.18.0 <25", "pnpm": "11.21.0", "typescript": "6.0.3" },
|
|
11
|
+
"integration": {
|
|
12
|
+
"title": "Agent Chat Workbench",
|
|
13
|
+
"purpose": "提供复用平台 Agent Chat 合同的无领域 React 交互组件。",
|
|
14
|
+
"packages": [
|
|
15
|
+
{ "packageName": "@aipt/agent-chat-contracts", "version": "0.2.0", "usage": "runtime", "imports": [{ "importFrom": "@aipt/agent-chat-contracts", "symbol": "ConversationView", "referencePath": "src/AgentChatWorkbench.tsx" }] },
|
|
16
|
+
{ "packageName": "@aipt/agent-runtime-contracts", "version": "0.2.0", "usage": "runtime", "imports": [] }
|
|
17
|
+
],
|
|
18
|
+
"codeAssets": [{ "sourcePath": "src/AgentChatWorkbench.tsx", "targetPath": "src/AgentChatWorkbench.tsx", "ownership": "owned-file" }]
|
|
19
|
+
},
|
|
20
|
+
"packageSources": [
|
|
21
|
+
{ "registryId": "registry.local.development", "packageName": "@aipt/agent-chat-contracts", "version": "0.2.0", "integrity": "sha512-BvetSwv395hHMj820nvlgzgTTUQO1a4ngEsv3+Ytcl4lihI2udah+Fs5Y///BiFz1bMQ/sfx476WN6Kjz/MmKA==", "tarballDigest": "sha256:8228b41131a581f505c42d8bcf43bfcdfa079184d84eed0168e294afb3dc3857", "deliveryReceiptId": "sha256:45e37f8a3ea062113d0d8b38a5cea407d900c07063c60e4ebd3ccefacc092eed", "usage": "runtime" },
|
|
22
|
+
{ "registryId": "registry.local.development", "packageName": "@aipt/agent-runtime-contracts", "version": "0.2.0", "integrity": "sha512-VI5dMsGaawC8ZKDR6memVEEFR15JiVXI/tZQQOoSN63FyHTXsL2N0oEPl2ZS+NPkINwU06ieAGUriVArgG/9yw==", "tarballDigest": "sha256:5fe6e0c9785f9fd66f81d33788e956128d386c796a870746e4f781ce0507367c", "deliveryReceiptId": "sha256:82fb16f38bce144f90bfc8408c1612994118012b709c5b906fdbb549a4affe7c", "usage": "runtime" }
|
|
23
|
+
],
|
|
24
|
+
"assets": [
|
|
25
|
+
{ "path": "package.json", "ownership": "owned-file", "digest": "sha256:9197c939c906a8569509849b6ba318641919caef79bc5c58b25bace8af25fff8", "mode": 420 },
|
|
26
|
+
{ "path": "src/AgentChatWorkbench.test.tsx", "ownership": "owned-file", "digest": "sha256:92762f50abb00bfe40ef65a5c28f0dc5b03a0d8e4023098c80489c1a74a49e06", "mode": 420 },
|
|
27
|
+
{ "path": "src/AgentChatWorkbench.tsx", "ownership": "owned-file", "digest": "sha256:1f117cc2882cd5e79618103bb590accd53fdc9e1f55b7202a56f41e0f935e62c", "mode": 420 },
|
|
28
|
+
{ "path": "src/index.ts", "ownership": "owned-file", "digest": "sha256:b3edef10a09f6547de4cd6c4da99a379b33e02a66cb7a5e199ad2ba04394a558", "mode": 420 },
|
|
29
|
+
{ "path": "src/style.css", "ownership": "owned-file", "digest": "sha256:3404d2f6b14636d39ab1d5d37119b673ef10a4759b888ecf32432216f506e380", "mode": 420 },
|
|
30
|
+
{ "path": "src/styles.d.ts", "ownership": "owned-file", "digest": "sha256:35d26ea66c86da9701e4f4b467913481ffeae910761cea34c775c5dacb7f8eaa", "mode": 420 },
|
|
31
|
+
{ "path": "src/test/setup.ts", "ownership": "owned-file", "digest": "sha256:9b328c4843431fa76d8de00008fc159e95f99a840211085ff3b8f25e53d14409", "mode": 420 },
|
|
32
|
+
{ "path": "tooling/verify-bundle.mjs", "ownership": "owned-file", "digest": "sha256:5bcf986eac3c33caaa905a097a64de22b721b15ecf53990d6d2b64095f79eccf", "mode": 420 },
|
|
33
|
+
{ "path": "tsconfig.build.json", "ownership": "owned-file", "digest": "sha256:3dd36ed2ea6d997ade0fcba6ffbbf0dacdd68f2680cd9c1cf632b9bb3710139b", "mode": 420 },
|
|
34
|
+
{ "path": "tsconfig.json", "ownership": "owned-file", "digest": "sha256:7bdbe5196a5a5dfc07cbb8fd2f6466e7d07753a6762b4aec302f41138665616f", "mode": 420 },
|
|
35
|
+
{ "path": "vite.config.ts", "ownership": "owned-file", "digest": "sha256:1ca9d7a3e3807b5b105c8c32d40c4552d615ec604eb698ac500e96d553faf40f", "mode": 420 }
|
|
36
|
+
],
|
|
37
|
+
"verifiers": [{ "id": "capability.assets" }, { "id": "typescript.typecheck" }, { "id": "vitest.run" }, { "id": "react.library-build" }],
|
|
38
|
+
"exit": { "ownedAssets": ["package.json", "src/AgentChatWorkbench.test.tsx", "src/AgentChatWorkbench.tsx", "src/index.ts", "src/style.css", "src/styles.d.ts", "src/test/setup.ts", "tooling/verify-bundle.mjs", "tsconfig.build.json", "tsconfig.json", "vite.config.ts"] }
|
|
39
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aipt/agent-chat-ui",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://example.invalid/aipt/agent-chat-ui"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"sideEffects": [
|
|
11
|
+
"**/*.css"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"main": "./dist/index.js",
|
|
17
|
+
"module": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./style.css": "./dist/style.css"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=24.18.0 <25",
|
|
28
|
+
"pnpm": "11.21.0"
|
|
29
|
+
},
|
|
30
|
+
"packageManager": "pnpm@11.21.0",
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "vite build && tsc -p tsconfig.build.json",
|
|
33
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"verify:bundle": "vite build && tsc -p tsconfig.build.json && node tooling/verify-bundle.mjs",
|
|
36
|
+
"check": "corepack pnpm typecheck && corepack pnpm test && corepack pnpm verify:bundle",
|
|
37
|
+
"prepack": "corepack pnpm check"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"react": ">=19.0.0 <20",
|
|
41
|
+
"react-dom": ">=19.0.0 <20"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@testing-library/dom": "10.4.1",
|
|
45
|
+
"@testing-library/jest-dom": "6.9.1",
|
|
46
|
+
"@testing-library/react": "16.3.2",
|
|
47
|
+
"@types/node": "24.10.13",
|
|
48
|
+
"@types/react": "19.2.18",
|
|
49
|
+
"@types/react-dom": "19.2.4",
|
|
50
|
+
"@vitejs/plugin-react": "6.0.5",
|
|
51
|
+
"jsdom": "30.0.1",
|
|
52
|
+
"react": "19.2.8",
|
|
53
|
+
"react-dom": "19.2.8",
|
|
54
|
+
"typescript": "6.0.3",
|
|
55
|
+
"vite": "8.2.1",
|
|
56
|
+
"vitest": "4.1.10"
|
|
57
|
+
},
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public"
|
|
60
|
+
},
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"@aipt/agent-chat-contracts": "workspace:*",
|
|
63
|
+
"@aipt/agent-runtime-contracts": "workspace:*"
|
|
64
|
+
}
|
|
65
|
+
}
|
package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/AgentChatWorkbench.test.tsx
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { fireEvent, render, screen } from "@testing-library/react";
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { AgentChatWorkbench } from "./AgentChatWorkbench.js";
|
|
4
|
+
|
|
5
|
+
const digest = `sha256:${"a".repeat(64)}` as const;
|
|
6
|
+
const view = { schemaVersion: 1 as const, tenantId: "tenant-1", conversationId: "conversation-1", agentInstanceId: "agent-1", revision: 1, lastCursor: 1, messages: [{ schemaVersion: 1 as const, messageId: "message-1", tenantId: "tenant-1", conversationId: "conversation-1", runId: "run-1", sequence: 1, role: "assistant" as const, parts: [{ kind: "text" as const, text: "你好,我可以协助你。" }], createdAt: "2026-08-23T00:00:00.000Z" }], artifacts: [], findings: [] };
|
|
7
|
+
|
|
8
|
+
describe("AgentChatWorkbench", () => {
|
|
9
|
+
it("uses Chinese product copy and sends a trimmed message", () => { const onSend = vi.fn(); render(<AgentChatWorkbench view={view} onSend={onSend}/>); expect(screen.getByRole("region", { name: "Agent 对话工作台" })).toBeInTheDocument(); expect(screen.getByText("你好,我可以协助你。")).toBeInTheDocument(); fireEvent.change(screen.getByLabelText("输入消息"), { target: { value: " 请继续 " } }); fireEvent.click(screen.getByRole("button", { name: "发送" })); expect(onSend).toHaveBeenCalledWith("请继续"); });
|
|
10
|
+
it("never binds a recommended Skill until the user confirms", () => { const decide = vi.fn(); render(<AgentChatWorkbench view={view} recommendation={{ schemaVersion: 1, recommendationId: "recommendation-1", tenantId: "tenant-1", conversationId: "conversation-1", revision: 1, inputDigest: digest, status: "pending", candidates: [{ subjectSkillReleaseId: "skill-1@1.0.0", compatible: true, reason: "与当前上下文兼容" }] }} onSend={() => undefined} onRecommendationDecision={decide}/>); expect(decide).not.toHaveBeenCalled(); fireEvent.click(screen.getByRole("button", { name: "确认绑定" })); expect(decide).toHaveBeenCalledWith("accept", "skill-1@1.0.0"); });
|
|
11
|
+
it("projects HITL decisions without owning approval state", () => { const decide = vi.fn(); render(<AgentChatWorkbench view={view} interrupt={{ schemaVersion: 1, interruptId: "interrupt-1", tenantId: "tenant-1", conversationId: "conversation-1", runId: "run-1", revision: 1, kind: "review_candidate", payloadDigest: digest, allowedDecisions: ["approve", "edit", "reject"], status: "pending" }} onSend={() => undefined} onInterruptDecision={decide}/>); fireEvent.click(screen.getByRole("button", { name: "确认继续" })); expect(decide).toHaveBeenCalledWith("approve"); });
|
|
12
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useState, type FormEvent } from "react";
|
|
2
|
+
import type { ConversationView, InterruptEnvelope, SkillRecommendation } from "@aipt/agent-chat-contracts";
|
|
3
|
+
import "./style.css";
|
|
4
|
+
|
|
5
|
+
export type AgentChatWorkbenchProps = Readonly<{
|
|
6
|
+
view: ConversationView;
|
|
7
|
+
recommendation?: SkillRecommendation;
|
|
8
|
+
interrupt?: InterruptEnvelope;
|
|
9
|
+
busy?: boolean;
|
|
10
|
+
onSend(text: string): void | Promise<void>;
|
|
11
|
+
onRecommendationDecision?(decision: "accept" | "reject", subjectSkillReleaseId?: string): void | Promise<void>;
|
|
12
|
+
onInterruptDecision?(decision: "approve" | "edit" | "reject"): void | Promise<void>;
|
|
13
|
+
}>;
|
|
14
|
+
|
|
15
|
+
export function AgentChatWorkbench({ view, recommendation, interrupt, busy = false, onSend, onRecommendationDecision, onInterruptDecision }: AgentChatWorkbenchProps) {
|
|
16
|
+
const [draft, setDraft] = useState("");
|
|
17
|
+
const submit = (event: FormEvent) => { event.preventDefault(); const text = draft.trim(); if (!text || busy) return; setDraft(""); void onSend(text); };
|
|
18
|
+
return <section className="agent-chat" aria-label="Agent 对话工作台">
|
|
19
|
+
<header className="agent-chat__header"><div><p className="agent-chat__eyebrow">Agent 对话</p><h2>与智能助手协作</h2></div><span className="agent-chat__status">{view.progress?.label ?? "等待输入"}</span></header>
|
|
20
|
+
{view.findings.length > 0 && <div role="alert" className="agent-chat__warning">事件流需要恢复,请刷新会话后继续。</div>}
|
|
21
|
+
<ol className="agent-chat__messages" aria-live="polite">{view.messages.map((message) => <li key={message.messageId} className={`agent-chat__message agent-chat__message--${message.role}`}><strong>{message.role === "user" ? "你" : message.role === "assistant" ? "助手" : "系统"}</strong>{message.parts.map((part, index) => part.kind === "text" ? <p key={index}>{part.text}</p> : <p key={index}>{part.kind === "artifact" ? "已生成 Artifact" : `工具状态:${part.status}`}</p>)}</li>)}</ol>
|
|
22
|
+
{recommendation?.status === "pending" && <aside className="agent-chat__decision" aria-label="Skill 推荐确认"><h3>推荐 Skill</h3>{recommendation.candidates.map((candidate) => <div key={`${candidate.subjectSkillReleaseId}:${candidate.publisherProfileReleaseId ?? ""}`}><p><strong>{candidate.subjectSkillReleaseId}</strong></p><p>{candidate.reason}</p><button type="button" disabled={busy} onClick={() => void onRecommendationDecision?.("accept", candidate.subjectSkillReleaseId)}>确认绑定</button></div>)}<button type="button" className="agent-chat__secondary" disabled={busy} onClick={() => void onRecommendationDecision?.("reject")}>暂不使用</button></aside>}
|
|
23
|
+
{interrupt?.status === "pending" && <aside className="agent-chat__decision" aria-label="人工确认"><h3>{interrupt.kind === "review_candidate" ? "生成教学设计前确认" : "需要人工确认"}</h3><p>请核对当前候选内容。确认前不会继续执行。</p><div className="agent-chat__actions">{interrupt.allowedDecisions.includes("approve") && <button type="button" disabled={busy} onClick={() => void onInterruptDecision?.("approve")}>确认继续</button>}{interrupt.allowedDecisions.includes("edit") && <button type="button" className="agent-chat__secondary" disabled={busy} onClick={() => void onInterruptDecision?.("edit")}>修改</button>}{interrupt.allowedDecisions.includes("reject") && <button type="button" className="agent-chat__danger" disabled={busy} onClick={() => void onInterruptDecision?.("reject")}>拒绝</button>}</div></aside>}
|
|
24
|
+
{view.artifacts.length > 0 && <aside className="agent-chat__artifacts" aria-label="Artifact 列表"><h3>生成结果</h3><ul>{view.artifacts.map((artifact) => <li key={artifact.artifactId}>{artifact.kind.toUpperCase()} · {artifact.status === "final" ? "已确认" : "候选"}</li>)}</ul></aside>}
|
|
25
|
+
<form className="agent-chat__composer" onSubmit={submit}><label htmlFor="agent-chat-input">输入消息</label><textarea id="agent-chat-input" value={draft} onChange={(event) => setDraft(event.target.value)} disabled={busy} placeholder="描述你希望 Agent 协助完成的任务"/><button type="submit" disabled={busy || draft.trim().length === 0}>{busy ? "处理中…" : "发送"}</button></form>
|
|
26
|
+
</section>;
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-chat{display:grid;gap:1rem;color:#172033;background:#fff;border:1px solid #d9dfeb;border-radius:16px;padding:1.25rem}.agent-chat__header{display:flex;align-items:center;justify-content:space-between;gap:1rem}.agent-chat__header h2,.agent-chat__decision h3,.agent-chat__artifacts h3{margin:0}.agent-chat__eyebrow{margin:0 0 .25rem;color:#52627a;font-size:.8rem}.agent-chat__status{border-radius:999px;background:#edf3ff;padding:.4rem .7rem;color:#234b94}.agent-chat__messages{display:grid;gap:.75rem;margin:0;padding:0;list-style:none}.agent-chat__message{max-width:80%;border-radius:12px;padding:.75rem 1rem;background:#f3f5f8}.agent-chat__message--user{justify-self:end;background:#e8f0ff}.agent-chat__message p{margin:.35rem 0 0}.agent-chat__decision,.agent-chat__artifacts,.agent-chat__warning{border-radius:12px;padding:1rem;background:#fff8e8;border:1px solid #f1d791}.agent-chat__warning{color:#8a3d12;background:#fff0ea}.agent-chat__actions{display:flex;gap:.5rem;flex-wrap:wrap}.agent-chat button{border:0;border-radius:8px;background:#2359b8;color:#fff;padding:.65rem 1rem;font:inherit;cursor:pointer}.agent-chat button:disabled{cursor:not-allowed;opacity:.55}.agent-chat .agent-chat__secondary{background:#e8edf5;color:#26354d}.agent-chat .agent-chat__danger{background:#a83434}.agent-chat__composer{display:grid;gap:.5rem}.agent-chat__composer textarea{min-height:6rem;resize:vertical;border:1px solid #aeb9ca;border-radius:10px;padding:.75rem;font:inherit}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module "*.css";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@testing-library/jest-dom/vitest";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
const source=await readFile(new URL("../dist/index.js",import.meta.url),"utf8");
|
|
3
|
+
if(!source.includes("AgentChatWorkbench")||source.includes("react/jsx-runtime.js"))throw new Error("Agent Chat bundle contract failed");
|
|
4
|
+
for(const file of ["../dist/index.d.ts","../dist/style.css"])await stat(new URL(file,import.meta.url));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"extends":"./tsconfig.json","compilerOptions":{"declaration":true,"emitDeclarationOnly":true,"rootDir":"src","outDir":"dist","types":[]},"include":["src/index.ts","src/AgentChatWorkbench.tsx","src/styles.d.ts"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"compilerOptions":{"target":"ES2022","module":"ESNext","moduleResolution":"Bundler","jsx":"react-jsx","strict":true,"noUncheckedIndexedAccess":true,"exactOptionalPropertyTypes":true,"skipLibCheck":true,"types":["vitest/globals","@testing-library/jest-dom"]},"include":["src","vite.config.ts"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import react from "@vitejs/plugin-react";
|
|
3
|
+
import { defineConfig } from "vitest/config";
|
|
4
|
+
export default defineConfig({plugins:[react()],build:{lib:{entry:resolve(import.meta.dirname,"src/index.ts"),formats:["es"],fileName:"index",cssFileName:"style"},rolldownOptions:{external:["react","react-dom","react/jsx-runtime","react/jsx-dev-runtime","@aipt/agent-chat-contracts"]}},test:{environment:"jsdom",setupFiles:["./src/test/setup.ts"]}});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"capabilityId": "foundation.agent-chat-workbench",
|
|
4
|
+
"version": "1.2.0",
|
|
5
|
+
"integrity": "sha256:9f9394e642ec9cd862c8e611aa8f58345a95ef2401f4dfa7b1d40d7d8bcbac86",
|
|
6
|
+
"consumerProfile": "react-component-library",
|
|
7
|
+
"kind": "profile",
|
|
8
|
+
"availability": { "maturity": "withdrawn", "visibility": "existing-locks-only", "reasonCode": "FROZEN_MIGRATION_SOURCE" },
|
|
9
|
+
"dependencies": { "profiles": ["react-component-library"], "capabilities": ["foundation.agent-chat-workbench"] },
|
|
10
|
+
"compatibility": { "node": ">=24.18.0 <25", "pnpm": "11.21.0", "typescript": "6.0.3" },
|
|
11
|
+
"integration": {
|
|
12
|
+
"title": "Agent Chat Workbench 冻结迁移源",
|
|
13
|
+
"purpose": "保留已验证的 Agent Chat React 交互组件,供 Forge、SmartGo 与 Portal 消费者完成迁移;不再接受新功能。",
|
|
14
|
+
"packages": [
|
|
15
|
+
{ "packageName": "@aipt/agent-chat-contracts", "version": "0.2.0", "usage": "runtime", "imports": [{ "importFrom": "@aipt/agent-chat-contracts", "symbol": "ConversationView", "referencePath": "src/AgentChatWorkbench.tsx" }] },
|
|
16
|
+
{ "packageName": "@aipt/agent-runtime-contracts", "version": "0.2.0", "usage": "runtime", "imports": [] }
|
|
17
|
+
],
|
|
18
|
+
"codeAssets": [{ "sourcePath": "src/AgentChatWorkbench.tsx", "targetPath": "src/AgentChatWorkbench.tsx", "ownership": "seed-file" }]
|
|
19
|
+
},
|
|
20
|
+
"packageSources": [
|
|
21
|
+
{ "registryId": "registry.local.development", "packageName": "@aipt/agent-chat-contracts", "version": "0.2.0", "integrity": "sha512-BvetSwv395hHMj820nvlgzgTTUQO1a4ngEsv3+Ytcl4lihI2udah+Fs5Y///BiFz1bMQ/sfx476WN6Kjz/MmKA==", "tarballDigest": "sha256:8228b41131a581f505c42d8bcf43bfcdfa079184d84eed0168e294afb3dc3857", "deliveryReceiptId": "sha256:45e37f8a3ea062113d0d8b38a5cea407d900c07063c60e4ebd3ccefacc092eed", "usage": "runtime" },
|
|
22
|
+
{ "registryId": "registry.local.development", "packageName": "@aipt/agent-runtime-contracts", "version": "0.2.0", "integrity": "sha512-VI5dMsGaawC8ZKDR6memVEEFR15JiVXI/tZQQOoSN63FyHTXsL2N0oEPl2ZS+NPkINwU06ieAGUriVArgG/9yw==", "tarballDigest": "sha256:5fe6e0c9785f9fd66f81d33788e956128d386c796a870746e4f781ce0507367c", "deliveryReceiptId": "sha256:82fb16f38bce144f90bfc8408c1612994118012b709c5b906fdbb549a4affe7c", "usage": "runtime" }
|
|
23
|
+
],
|
|
24
|
+
"assets": [
|
|
25
|
+
{ "path": "package.json", "ownership": "seed-file", "digest": "sha256:16e794f6836595d590d48b76d5d76ab0fc2db1ce50ee74078234548c9fbf0249", "mode": 420 },
|
|
26
|
+
{ "path": "src/AgentChatWorkbench.test.tsx", "ownership": "seed-file", "digest": "sha256:92762f50abb00bfe40ef65a5c28f0dc5b03a0d8e4023098c80489c1a74a49e06", "mode": 420 },
|
|
27
|
+
{ "path": "src/AgentChatWorkbench.tsx", "ownership": "seed-file", "digest": "sha256:1f117cc2882cd5e79618103bb590accd53fdc9e1f55b7202a56f41e0f935e62c", "mode": 420 },
|
|
28
|
+
{ "path": "src/index.ts", "ownership": "seed-file", "digest": "sha256:b3edef10a09f6547de4cd6c4da99a379b33e02a66cb7a5e199ad2ba04394a558", "mode": 420 },
|
|
29
|
+
{ "path": "src/style.css", "ownership": "seed-file", "digest": "sha256:3404d2f6b14636d39ab1d5d37119b673ef10a4759b888ecf32432216f506e380", "mode": 420 },
|
|
30
|
+
{ "path": "src/styles.d.ts", "ownership": "seed-file", "digest": "sha256:35d26ea66c86da9701e4f4b467913481ffeae910761cea34c775c5dacb7f8eaa", "mode": 420 },
|
|
31
|
+
{ "path": "src/test/setup.ts", "ownership": "seed-file", "digest": "sha256:9b328c4843431fa76d8de00008fc159e95f99a840211085ff3b8f25e53d14409", "mode": 420 },
|
|
32
|
+
{ "path": "tooling/verify-bundle.mjs", "ownership": "seed-file", "digest": "sha256:5bcf986eac3c33caaa905a097a64de22b721b15ecf53990d6d2b64095f79eccf", "mode": 420 },
|
|
33
|
+
{ "path": "tsconfig.build.json", "ownership": "seed-file", "digest": "sha256:3dd36ed2ea6d997ade0fcba6ffbbf0dacdd68f2680cd9c1cf632b9bb3710139b", "mode": 420 },
|
|
34
|
+
{ "path": "tsconfig.json", "ownership": "seed-file", "digest": "sha256:7bdbe5196a5a5dfc07cbb8fd2f6466e7d07753a6762b4aec302f41138665616f", "mode": 420 },
|
|
35
|
+
{ "path": "vite.config.ts", "ownership": "seed-file", "digest": "sha256:1ca9d7a3e3807b5b105c8c32d40c4552d615ec604eb698ac500e96d553faf40f", "mode": 420 }
|
|
36
|
+
],
|
|
37
|
+
"verifiers": [{ "id": "capability.assets" }, { "id": "typescript.typecheck" }, { "id": "vitest.run" }, { "id": "react.library-build" }],
|
|
38
|
+
"exit": { "ownedAssets": ["package.json", "src/AgentChatWorkbench.test.tsx", "src/AgentChatWorkbench.tsx", "src/index.ts", "src/style.css", "src/styles.d.ts", "src/test/setup.ts", "tooling/verify-bundle.mjs", "tsconfig.build.json", "tsconfig.json", "vite.config.ts"] }
|
|
39
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Agent SQLite 本地事务仓储
|
|
2
|
+
|
|
3
|
+
该 Capability 是 development candidate,只用于本地开发、PoC、fixture 与正式脚手架。它通过 `@aipt/agent-run-kernel` 的公共 Port 创建 SQLite Adapter,不改变 Agent Chat 协议,也不代表 PostgreSQL 或 production available。
|
|
4
|
+
|
|
5
|
+
环境合同只包含 `DYYTO_AGENT_STATE_ADAPTER=sqlite` 与 `DYYTO_AGENT_STATE_SQLITE_PATH=.data/agent-state.sqlite`。业务代码不得直接导入 `better-sqlite3`。
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { runDigest } from "@aipt/agent-run-kernel";
|
|
6
|
+
import { createLocalAgentState } from "./agent-state";
|
|
7
|
+
|
|
8
|
+
describe("Agent SQLite 本地状态", () => { it("使用正式环境合同并在重开后保留 revision", async () => { const root = await mkdtemp(path.join(tmpdir(), "agent-state-example-")); const first = createLocalAgentState({ projectRoot: root, environment: {} }); const scope = { tenantId: "tenant-example", projectId: "project-example", userId: "teacher-example" }; await first.transact({ schemaVersion: 1, commandId: "command-example", idempotencyKey: "key-example", inputDigest: runDigest("input"), ...scope, aggregateId: "conversation-example", expectedRevision: 0, authorizationDigest: runDigest("authorization"), occurredAt: "2026-08-23T00:00:00Z" }, (transaction) => transaction.putDocument({ kind: "conversation", aggregateId: "conversation-example", expectedRevision: 0, contentSchemaVersion: "example.conversation@1", contentDigest: runDigest({ status: "pending" }), content: { status: "pending" }, updatedAt: "2026-08-23T00:00:00Z" })); first.close(); const reopened = createLocalAgentState({ projectRoot: root, environment: {} }); expect(await reopened.revision(scope, "conversation", "conversation-example")).toBe(1); reopened.close(); await rm(root, { recursive: true, force: true }); }); });
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { parseAgentStateEnvironment } from "@aipt/agent-state-repository";
|
|
3
|
+
import { SqliteAgentStateRepository } from "@aipt/agent-state-repository/sqlite";
|
|
4
|
+
|
|
5
|
+
export function createLocalAgentState(input: Readonly<{ projectRoot: string; environment: Readonly<Record<string, string | undefined>> }>) {
|
|
6
|
+
const environment = parseAgentStateEnvironment({ DYYTO_AGENT_STATE_ADAPTER: input.environment.DYYTO_AGENT_STATE_ADAPTER ?? "sqlite", DYYTO_AGENT_STATE_SQLITE_PATH: input.environment.DYYTO_AGENT_STATE_SQLITE_PATH ?? ".data/agent-state.sqlite" });
|
|
7
|
+
return new SqliteAgentStateRepository({ filename: path.resolve(input.projectRoot, environment.DYYTO_AGENT_STATE_SQLITE_PATH) });
|
|
8
|
+
}
|