@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.
Files changed (433) hide show
  1. package/README.md +114 -5
  2. package/dist/application-runner.js +276 -0
  3. package/dist/application.js +254 -0
  4. package/dist/catalog/foundation.agent-chat-ui-consumer/1.0.0/assets/README.agent-chat-ui.md +5 -0
  5. package/dist/catalog/foundation.agent-chat-ui-consumer/1.0.0/release.json +29 -0
  6. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/package.json +19 -0
  7. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/AgentChatWorkbench.test.tsx +12 -0
  8. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/AgentChatWorkbench.tsx +27 -0
  9. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/index.ts +2 -0
  10. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/style.css +1 -0
  11. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/styles.d.ts +1 -0
  12. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/src/test/setup.ts +1 -0
  13. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/tooling/verify-bundle.mjs +4 -0
  14. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/tsconfig.build.json +1 -0
  15. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/tsconfig.json +1 -0
  16. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/assets/vite.config.ts +4 -0
  17. package/dist/catalog/foundation.agent-chat-workbench/1.0.0/release.json +33 -0
  18. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/package.json +19 -0
  19. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/AgentChatWorkbench.test.tsx +12 -0
  20. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/AgentChatWorkbench.tsx +27 -0
  21. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/index.ts +2 -0
  22. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/style.css +1 -0
  23. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/styles.d.ts +1 -0
  24. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/src/test/setup.ts +1 -0
  25. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/tooling/verify-bundle.mjs +4 -0
  26. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/tsconfig.build.json +1 -0
  27. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/tsconfig.json +1 -0
  28. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/assets/vite.config.ts +4 -0
  29. package/dist/catalog/foundation.agent-chat-workbench/1.1.0/release.json +39 -0
  30. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/package.json +65 -0
  31. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/AgentChatWorkbench.test.tsx +12 -0
  32. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/AgentChatWorkbench.tsx +27 -0
  33. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/index.ts +2 -0
  34. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/style.css +1 -0
  35. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/styles.d.ts +1 -0
  36. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/src/test/setup.ts +1 -0
  37. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/tooling/verify-bundle.mjs +4 -0
  38. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/tsconfig.build.json +1 -0
  39. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/tsconfig.json +1 -0
  40. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/assets/vite.config.ts +4 -0
  41. package/dist/catalog/foundation.agent-chat-workbench/1.2.0/release.json +39 -0
  42. package/dist/catalog/foundation.agent-state-sqlite/1.0.0/assets/README.agent-state-sqlite.md +5 -0
  43. package/dist/catalog/foundation.agent-state-sqlite/1.0.0/assets/src/agent-state.test.ts +8 -0
  44. package/dist/catalog/foundation.agent-state-sqlite/1.0.0/assets/src/agent-state.ts +8 -0
  45. package/dist/catalog/foundation.agent-state-sqlite/1.0.0/release.json +34 -0
  46. package/dist/catalog/foundation.agent-state-sqlite/1.1.0/assets/README.agent-state-sqlite.md +5 -0
  47. package/dist/catalog/foundation.agent-state-sqlite/1.1.0/assets/src/agent-state.test.ts +8 -0
  48. package/dist/catalog/foundation.agent-state-sqlite/1.1.0/assets/src/agent-state.ts +8 -0
  49. package/dist/catalog/foundation.agent-state-sqlite/1.1.0/release.json +34 -0
  50. package/dist/catalog/foundation.agent-state-sqlite-registry-consumer/1.0.0/assets/README.agent-state-registry-consumer.md +5 -0
  51. package/dist/catalog/foundation.agent-state-sqlite-registry-consumer/1.0.0/release.json +38 -0
  52. package/dist/catalog/foundation.agent-state-sqlite-registry-consumer/1.1.0/assets/README.agent-state-registry-consumer.md +5 -0
  53. package/dist/catalog/foundation.agent-state-sqlite-registry-consumer/1.1.0/release.json +31 -0
  54. package/dist/catalog/foundation.agent-worker-skill-runtime/1.0.0/assets/README.agent-runtime.md +7 -0
  55. package/dist/catalog/foundation.agent-worker-skill-runtime/1.0.0/assets/src/agent-runtime.test.ts +19 -0
  56. package/dist/catalog/foundation.agent-worker-skill-runtime/1.0.0/assets/src/agent-runtime.ts +15 -0
  57. package/dist/catalog/foundation.agent-worker-skill-runtime/1.0.0/release.json +47 -0
  58. package/dist/catalog/foundation.ai-education-agent-example/1.0.0/assets/README.agent-example.md +5 -0
  59. package/dist/catalog/foundation.ai-education-agent-example/1.0.0/assets/app/agent-phase1/page.tsx +2 -0
  60. package/dist/catalog/foundation.ai-education-agent-example/1.0.0/assets/app/agent-phase1/workbench.test.tsx +5 -0
  61. package/dist/catalog/foundation.ai-education-agent-example/1.0.0/assets/app/agent-phase1/workbench.tsx +19 -0
  62. package/dist/catalog/foundation.ai-education-agent-example/1.0.0/release.json +21 -0
  63. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/README.agent-sqlite-example.md +3 -0
  64. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/contracts.ts +5 -0
  65. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/page.tsx +3 -0
  66. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/state.server.ts +7 -0
  67. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/workbench.test.tsx +7 -0
  68. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/assets/app/agent-sqlite/workbench.tsx +9 -0
  69. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.0.0/release.json +30 -0
  70. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/README.agent-stage5.md +3 -0
  71. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/contracts.ts +6 -0
  72. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/page.tsx +1 -0
  73. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/platform-proof.ts +8 -0
  74. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/state.server.ts +5 -0
  75. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/workbench.test.tsx +1 -0
  76. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/assets/app/agent-stage5/workbench.tsx +3 -0
  77. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.1.0/release.json +32 -0
  78. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/README.education-agent-intake.md +3 -0
  79. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/contracts.ts +8 -0
  80. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/page.tsx +3 -0
  81. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/platform-proof.ts +7 -0
  82. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/state.server.ts +8 -0
  83. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/workbench.test.tsx +7 -0
  84. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/assets/app/agent-intake/workbench.tsx +6 -0
  85. package/dist/catalog/foundation.ai-education-agent-sqlite-example/1.2.0/release.json +32 -0
  86. package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/assets/README.ai-education-delegated-review.md +3 -0
  87. package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/assets/app/ai-education-delegated-review/page.tsx +47 -0
  88. package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/assets/src/delegated-review-fixture.test.ts +1 -0
  89. package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/assets/src/delegated-review-fixture.ts +1 -0
  90. package/dist/catalog/foundation.ai-education-delegated-review-example/1.0.0/release.json +26 -0
  91. 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
  92. 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
  93. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.0.0/assets/src/education-production-lineage.test.ts +16 -0
  94. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.0.0/assets/src/education-production-lineage.ts +30 -0
  95. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.0.0/release.json +34 -0
  96. 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
  97. 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
  98. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.1.0/assets/src/education-production-lineage.test.ts +2 -0
  99. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.1.0/assets/src/education-production-lineage.ts +3 -0
  100. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.1.0/release.json +31 -0
  101. 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
  102. 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
  103. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.2.0/assets/src/education-production-lineage.test.ts +2 -0
  104. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.2.0/assets/src/education-production-lineage.ts +5 -0
  105. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.2.0/release.json +31 -0
  106. 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
  107. 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
  108. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.3.0/assets/src/education-production-journey.test.ts +2 -0
  109. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.3.0/assets/src/education-production-journey.ts +4 -0
  110. package/dist/catalog/foundation.ai-education-end-to-end-production-example/1.3.0/release.json +1 -0
  111. package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/assets/README.education-learning-media-authoring.md +3 -0
  112. package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/assets/app/education-learning-media-authoring/page.tsx +1 -0
  113. package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/assets/src/learning-media-fixture.test.ts +1 -0
  114. package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/assets/src/learning-media-fixture.ts +3 -0
  115. package/dist/catalog/foundation.ai-education-learning-media-authoring-example/1.0.0/release.json +26 -0
  116. package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/assets/README.ai-education-picturebook-courseware.md +5 -0
  117. package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/assets/app/ai-education-picturebook-courseware/page.tsx +1 -0
  118. package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/assets/src/picturebook-fixture.test.ts +1 -0
  119. package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/assets/src/picturebook-fixture.ts +4 -0
  120. package/dist/catalog/foundation.ai-education-picturebook-courseware-example/1.0.0/release.json +1 -0
  121. package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/assets/README.ai-education-web-courseware.md +3 -0
  122. package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/assets/app/ai-education-web-courseware/page.tsx +1 -0
  123. package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/assets/src/courseware-fixture.test.ts +1 -0
  124. package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/assets/src/courseware-fixture.ts +3 -0
  125. package/dist/catalog/foundation.ai-education-web-courseware-example/1.0.0/release.json +18 -0
  126. package/dist/catalog/foundation.ai-orchestration/1.0.0/assets/docs/engineering/ai-orchestration.md +3 -0
  127. package/dist/catalog/foundation.ai-orchestration/1.0.0/release.json +99 -0
  128. package/dist/catalog/foundation.api-contract-toolchain/1.0.0/assets/docs/engineering/api-contract.md +33 -0
  129. package/dist/catalog/foundation.api-contract-toolchain/1.0.0/assets/openapi-ts.config.ts +20 -0
  130. package/dist/catalog/foundation.api-contract-toolchain/1.0.0/assets/src/api/query-client.ts +29 -0
  131. package/dist/catalog/foundation.api-contract-toolchain/1.0.0/assets/src/api/runtime.ts +44 -0
  132. package/dist/catalog/foundation.api-contract-toolchain/1.0.0/release.json +122 -0
  133. package/dist/catalog/foundation.application-config-binding/1.0.0/assets/.dyyto/application-config-binding.json +4 -0
  134. package/dist/catalog/foundation.application-config-binding/1.0.0/assets/docs/engineering/application-config-binding.md +5 -0
  135. package/dist/catalog/foundation.application-config-binding/1.0.0/release.json +28 -0
  136. package/dist/catalog/foundation.artifact-delivery/1.0.0/assets/docs/engineering/artifact-delivery.md +3 -0
  137. package/dist/catalog/foundation.artifact-delivery/1.0.0/release.json +75 -0
  138. package/dist/catalog/foundation.artifact-runtime/1.0.0/assets/docs/engineering/artifact-runtime.md +3 -0
  139. package/dist/catalog/foundation.artifact-runtime/1.0.0/release.json +87 -0
  140. package/dist/catalog/foundation.capability-family-routing/1.0.0/assets/README.capability-family-routing.md +7 -0
  141. package/dist/catalog/foundation.capability-family-routing/1.0.0/assets/src/capability-family-routing.test.ts +10 -0
  142. package/dist/catalog/foundation.capability-family-routing/1.0.0/release.json +35 -0
  143. package/dist/catalog/foundation.environment-schema/1.0.0/assets/docs/engineering/environment.md +37 -0
  144. package/dist/catalog/foundation.environment-schema/1.0.0/assets/src/environment.ts +30 -0
  145. package/dist/catalog/foundation.environment-schema/1.0.0/release.json +75 -0
  146. package/dist/catalog/foundation.environment-schema/1.1.0/assets/.env.example +1 -0
  147. package/dist/catalog/foundation.environment-schema/1.1.0/assets/docs/engineering/environment.md +9 -0
  148. package/dist/catalog/foundation.environment-schema/1.1.0/release.json +25 -0
  149. package/dist/catalog/foundation.environment-schema/2.0.0/assets/config/application-config.json +4 -0
  150. package/dist/catalog/foundation.environment-schema/2.0.0/assets/docs/engineering/environment.md +33 -0
  151. package/dist/catalog/foundation.environment-schema/2.0.0/release.json +63 -0
  152. package/dist/catalog/foundation.managed-project-control/1.0.0/assets/docs/engineering/project-control.md +24 -0
  153. package/dist/catalog/foundation.managed-project-control/1.0.0/release.json +34 -0
  154. package/dist/catalog/foundation.managed-project-control/1.1.0/assets/docs/engineering/project-control.md +15 -0
  155. package/dist/catalog/foundation.managed-project-control/1.1.0/release.json +27 -0
  156. package/dist/catalog/foundation.managed-project-control/1.2.0/assets/docs/engineering/project-control.md +15 -0
  157. package/dist/catalog/foundation.managed-project-control/1.2.0/release.json +27 -0
  158. package/dist/catalog/foundation.managed-project-control/1.3.0/assets/docs/engineering/project-control.md +14 -0
  159. package/dist/catalog/foundation.managed-project-control/1.3.0/release.json +27 -0
  160. package/dist/catalog/foundation.media-production-infrastructure/1.0.0/assets/docs/engineering/media-production-infrastructure.md +3 -0
  161. package/dist/catalog/foundation.media-production-infrastructure/1.0.0/release.json +99 -0
  162. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/AGENTS.md +8 -0
  163. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/README.md +12 -0
  164. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/api/health/route.test.ts +9 -0
  165. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/api/health/route.ts +5 -0
  166. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/components/Counter.test.tsx +12 -0
  167. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/components/Counter.tsx +13 -0
  168. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/globals.css +20 -0
  169. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/layout.tsx +12 -0
  170. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/page.test.tsx +11 -0
  171. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/app/page.tsx +19 -0
  172. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/e2e/home.spec.ts +15 -0
  173. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/eslint.config.mjs +7 -0
  174. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/next-env.d.ts +6 -0
  175. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/next.config.ts +9 -0
  176. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/package.json +4 -0
  177. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/playwright.config.ts +16 -0
  178. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/pnpm-workspace.yaml +4 -0
  179. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/public/.gitkeep +1 -0
  180. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/src/test/setup.ts +1 -0
  181. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/tooling/package-standalone.mjs +15 -0
  182. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/tooling/verify-standalone.mjs +20 -0
  183. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/tsconfig.json +42 -0
  184. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/assets/vitest.config.mts +12 -0
  185. package/dist/catalog/foundation.nextjs-full-stack-application/1.0.0/release.json +42 -0
  186. package/dist/catalog/foundation.nextjs-full-stack-application/1.1.0/assets/package.json +4 -0
  187. package/dist/catalog/foundation.nextjs-full-stack-application/1.1.0/release.json +21 -0
  188. package/dist/catalog/foundation.package-source-fixture/1.0.0/assets/README.runtime.md +1 -0
  189. package/dist/catalog/foundation.package-source-fixture/1.0.0/release.json +16 -0
  190. package/dist/catalog/foundation.page-authoring/1.0.0/assets/docs/engineering/page-authoring.md +27 -0
  191. package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/csr-entry.tsx +6 -0
  192. package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/load-document.ts +11 -0
  193. package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/pages/about.json +26 -0
  194. package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/pages/home.json +26 -0
  195. package/dist/catalog/foundation.page-authoring/1.0.0/assets/src/page-authoring/project.json +38 -0
  196. package/dist/catalog/foundation.page-authoring/1.0.0/release.json +146 -0
  197. package/dist/catalog/foundation.pro-search-table-page/1.0.0/assets/docs/engineering/pro-search-table.md +20 -0
  198. package/dist/catalog/foundation.pro-search-table-page/1.0.0/assets/search/operations-page.tsx +66 -0
  199. package/dist/catalog/foundation.pro-search-table-page/1.0.0/assets/search/search-main.tsx +15 -0
  200. package/dist/catalog/foundation.pro-search-table-page/1.0.0/assets/search.html +13 -0
  201. package/dist/catalog/foundation.pro-search-table-page/1.0.0/release.json +119 -0
  202. package/dist/catalog/foundation.pro-search-table-page/2.0.0/assets/docs/engineering/pro-search-table.md +20 -0
  203. package/dist/catalog/foundation.pro-search-table-page/2.0.0/assets/search/operations-page.tsx +66 -0
  204. package/dist/catalog/foundation.pro-search-table-page/2.0.0/assets/search/search-main.tsx +15 -0
  205. package/dist/catalog/foundation.pro-search-table-page/2.0.0/assets/search.html +13 -0
  206. package/dist/catalog/foundation.pro-search-table-page/2.0.0/release.json +153 -0
  207. package/dist/catalog/foundation.product-interaction-feedback/1.0.0/assets/docs/engineering/product-interaction-feedback.md +10 -0
  208. package/dist/catalog/foundation.product-interaction-feedback/1.0.0/release.json +68 -0
  209. package/dist/catalog/foundation.production-orchestration-contracts/1.0.0/assets/README.production-orchestration.md +3 -0
  210. package/dist/catalog/foundation.production-orchestration-contracts/1.0.0/assets/src/production-orchestration.test.ts +8 -0
  211. package/dist/catalog/foundation.production-orchestration-contracts/1.0.0/assets/src/production-orchestration.ts +7 -0
  212. package/dist/catalog/foundation.production-orchestration-contracts/1.0.0/release.json +33 -0
  213. package/dist/catalog/foundation.production-orchestration-contracts/1.1.0/assets/README.production-orchestration.md +3 -0
  214. package/dist/catalog/foundation.production-orchestration-contracts/1.1.0/assets/src/production-orchestration.test.ts +11 -0
  215. package/dist/catalog/foundation.production-orchestration-contracts/1.1.0/assets/src/production-orchestration.ts +4 -0
  216. package/dist/catalog/foundation.production-orchestration-contracts/1.1.0/release.json +29 -0
  217. package/dist/catalog/foundation.production-orchestration-registry-consumer/1.1.0/assets/README.production-orchestration-registry.md +5 -0
  218. package/dist/catalog/foundation.production-orchestration-registry-consumer/1.1.0/release.json +33 -0
  219. package/dist/catalog/foundation.production-orchestration-registry-consumer/1.2.0/assets/README.production-orchestration-registry.md +3 -0
  220. package/dist/catalog/foundation.production-orchestration-registry-consumer/1.2.0/release.json +33 -0
  221. package/dist/catalog/foundation.production-workbench/1.0.0/assets/docs/engineering/production-workbench.md +3 -0
  222. package/dist/catalog/foundation.production-workbench/1.0.0/release.json +74 -0
  223. package/dist/catalog/foundation.project-documentation/1.0.0/assets/docs/engineering/README.md +13 -0
  224. package/dist/catalog/foundation.project-documentation/1.0.0/release.json +37 -0
  225. package/dist/catalog/foundation.project-maintenance/1.0.0/assets/docs/engineering/README.md +5 -0
  226. package/dist/catalog/foundation.project-maintenance/1.0.0/release.json +39 -0
  227. package/dist/catalog/foundation.project-maintenance-console/1.0.0/assets/docs/engineering/project-maintenance-console.md +7 -0
  228. package/dist/catalog/foundation.project-maintenance-console/1.0.0/release.json +27 -0
  229. package/dist/catalog/foundation.react-component-library/1.0.0/assets/package.json +1 -0
  230. package/dist/catalog/foundation.react-component-library/1.0.0/assets/pnpm-workspace.yaml +1 -0
  231. package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/Button.test.tsx +12 -0
  232. package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/Button.tsx +8 -0
  233. package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/index.ts +1 -0
  234. package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/style.css +14 -0
  235. package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/styles.d.ts +1 -0
  236. package/dist/catalog/foundation.react-component-library/1.0.0/assets/src/test/setup.ts +1 -0
  237. package/dist/catalog/foundation.react-component-library/1.0.0/assets/tooling/verify-bundle.mjs +7 -0
  238. package/dist/catalog/foundation.react-component-library/1.0.0/assets/tsconfig.build.json +11 -0
  239. package/dist/catalog/foundation.react-component-library/1.0.0/assets/tsconfig.json +14 -0
  240. package/dist/catalog/foundation.react-component-library/1.0.0/assets/vite.config.ts +12 -0
  241. package/dist/catalog/foundation.react-component-library/1.0.0/release.json +30 -0
  242. package/dist/catalog/foundation.react-component-library/1.1.0/assets/package.json +1 -0
  243. package/dist/catalog/foundation.react-component-library/1.1.0/assets/pnpm-lock.yaml +1327 -0
  244. package/dist/catalog/foundation.react-component-library/1.1.0/assets/pnpm-workspace.yaml +5 -0
  245. package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/Button.test.tsx +12 -0
  246. package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/Button.tsx +8 -0
  247. package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/index.ts +1 -0
  248. package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/style.css +14 -0
  249. package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/styles.d.ts +1 -0
  250. package/dist/catalog/foundation.react-component-library/1.1.0/assets/src/test/setup.ts +1 -0
  251. package/dist/catalog/foundation.react-component-library/1.1.0/assets/tooling/verify-bundle.mjs +7 -0
  252. package/dist/catalog/foundation.react-component-library/1.1.0/assets/tsconfig.build.json +11 -0
  253. package/dist/catalog/foundation.react-component-library/1.1.0/assets/tsconfig.json +14 -0
  254. package/dist/catalog/foundation.react-component-library/1.1.0/assets/vite.config.ts +12 -0
  255. package/dist/catalog/foundation.react-component-library/1.1.0/release.json +125 -0
  256. package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/package.json +4 -0
  257. package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/pnpm-workspace.yaml +1 -0
  258. package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/src/index.test.ts +8 -0
  259. package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/src/index.ts +3 -0
  260. package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/tsconfig.build.json +12 -0
  261. package/dist/catalog/foundation.standalone-npm-package/1.1.0/assets/tsconfig.json +14 -0
  262. package/dist/catalog/foundation.standalone-npm-package/1.1.0/release.json +29 -0
  263. package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/package.json +4 -0
  264. package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/pnpm-lock.yaml +727 -0
  265. package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/pnpm-workspace.yaml +5 -0
  266. package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/src/index.test.ts +8 -0
  267. package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/src/index.ts +3 -0
  268. package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/tsconfig.build.json +12 -0
  269. package/dist/catalog/foundation.standalone-npm-package/1.2.0/assets/tsconfig.json +14 -0
  270. package/dist/catalog/foundation.standalone-npm-package/1.2.0/release.json +82 -0
  271. package/dist/catalog/foundation.structured-knowledge-runtime/1.0.0/assets/README.structured-knowledge.md +3 -0
  272. package/dist/catalog/foundation.structured-knowledge-runtime/1.0.0/assets/src/structured-knowledge.test.ts +8 -0
  273. package/dist/catalog/foundation.structured-knowledge-runtime/1.0.0/assets/src/structured-knowledge.ts +8 -0
  274. package/dist/catalog/foundation.structured-knowledge-runtime/1.0.0/release.json +37 -0
  275. package/dist/catalog/foundation.visual-presentation-composition/1.0.0/assets/README.visual-presentation.md +3 -0
  276. package/dist/catalog/foundation.visual-presentation-composition/1.0.0/assets/app/visual-presentation/page.tsx +48 -0
  277. package/dist/catalog/foundation.visual-presentation-composition/1.0.0/assets/src/visual-presentation.test.ts +1 -0
  278. package/dist/catalog/foundation.visual-presentation-composition/1.0.0/assets/src/visual-presentation.ts +2 -0
  279. package/dist/catalog/foundation.visual-presentation-composition/1.0.0/release.json +26 -0
  280. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/__dyyto_dotfiles__/gitignore +13 -0
  281. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/app/_layout.tsx +5 -0
  282. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/app/index.tsx +25 -0
  283. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/app.json +14 -0
  284. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/expo-env.d.ts +3 -0
  285. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/package.json +4 -0
  286. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/src/app-config.test.ts +10 -0
  287. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/tooling/verify-expo-export.mjs +5 -0
  288. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/tsconfig.json +10 -0
  289. package/dist/catalog/foundation.workspace-expo-application/1.0.0/assets/vitest.config.mts +5 -0
  290. package/dist/catalog/foundation.workspace-expo-application/1.0.0/release.json +42 -0
  291. package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/package.json +4 -0
  292. package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/src/app.test.ts +21 -0
  293. package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/src/app.ts +14 -0
  294. package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/src/index.test.ts +14 -0
  295. package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/src/index.ts +53 -0
  296. package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/tsconfig.build.json +12 -0
  297. package/dist/catalog/foundation.workspace-node-application/1.1.0/assets/tsconfig.json +7 -0
  298. package/dist/catalog/foundation.workspace-node-application/1.1.0/release.json +19 -0
  299. package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/package.json +4 -0
  300. package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/src/index.test.ts +8 -0
  301. package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/src/index.ts +3 -0
  302. package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/tsconfig.build.json +12 -0
  303. package/dist/catalog/foundation.workspace-npm-package/1.1.0/assets/tsconfig.json +7 -0
  304. package/dist/catalog/foundation.workspace-npm-package/1.1.0/release.json +17 -0
  305. package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/package.json +4 -0
  306. package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/src/index.test.ts +8 -0
  307. package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/src/index.ts +3 -0
  308. package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/tsconfig.build.json +12 -0
  309. package/dist/catalog/foundation.workspace-npm-package/1.2.0/assets/tsconfig.json +7 -0
  310. package/dist/catalog/foundation.workspace-npm-package/1.2.0/release.json +17 -0
  311. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/package.json +1 -0
  312. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/Button.test.tsx +12 -0
  313. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/Button.tsx +8 -0
  314. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/index.ts +1 -0
  315. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/style.css +14 -0
  316. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/styles.d.ts +1 -0
  317. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/src/test/setup.ts +1 -0
  318. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/tooling/verify-bundle.mjs +7 -0
  319. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/tsconfig.build.json +11 -0
  320. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/tsconfig.json +14 -0
  321. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/assets/vite.config.ts +12 -0
  322. package/dist/catalog/foundation.workspace-react-component-library/1.0.0/release.json +24 -0
  323. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/package.json +1 -0
  324. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/Button.test.tsx +12 -0
  325. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/Button.tsx +8 -0
  326. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/index.ts +1 -0
  327. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/style.css +14 -0
  328. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/styles.d.ts +1 -0
  329. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/src/test/setup.ts +1 -0
  330. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/tooling/verify-bundle.mjs +7 -0
  331. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/tsconfig.build.json +11 -0
  332. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/tsconfig.json +14 -0
  333. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/assets/vite.config.ts +12 -0
  334. package/dist/catalog/foundation.workspace-react-component-library/1.1.0/release.json +38 -0
  335. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/package.json +1 -0
  336. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/Button.test.tsx +12 -0
  337. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/Button.tsx +8 -0
  338. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/index.ts +1 -0
  339. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/style.css +14 -0
  340. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/styles.d.ts +1 -0
  341. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/src/test/setup.ts +1 -0
  342. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tooling/package-externals.d.mts +8 -0
  343. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tooling/package-externals.mjs +16 -0
  344. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tooling/verify-bundle.mjs +30 -0
  345. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tsconfig.build.json +11 -0
  346. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/tsconfig.json +14 -0
  347. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/assets/vite.config.ts +15 -0
  348. package/dist/catalog/foundation.workspace-react-component-library/1.2.0/release.json +40 -0
  349. package/dist/catalog/foundation.workspace-root/1.2.0/assets/apps/README.md +3 -0
  350. package/dist/catalog/foundation.workspace-root/1.2.0/assets/package.json +13 -0
  351. package/dist/catalog/foundation.workspace-root/1.2.0/assets/packages/README.md +3 -0
  352. package/dist/catalog/foundation.workspace-root/1.2.0/assets/pnpm-workspace.yaml +3 -0
  353. package/dist/catalog/foundation.workspace-root/1.2.0/assets/tsconfig.base.json +12 -0
  354. package/dist/catalog/foundation.workspace-root/1.2.0/release.json +17 -0
  355. package/dist/catalog/foundation.workspace-root/1.3.0/assets/apps/README.md +3 -0
  356. package/dist/catalog/foundation.workspace-root/1.3.0/assets/package.json +13 -0
  357. package/dist/catalog/foundation.workspace-root/1.3.0/assets/packages/README.md +3 -0
  358. package/dist/catalog/foundation.workspace-root/1.3.0/assets/pnpm-workspace.yaml +4 -0
  359. package/dist/catalog/foundation.workspace-root/1.3.0/assets/services/README.md +3 -0
  360. package/dist/catalog/foundation.workspace-root/1.3.0/assets/tsconfig.base.json +12 -0
  361. package/dist/catalog/foundation.workspace-root/1.3.0/release.json +18 -0
  362. package/dist/catalog/foundation.workspace-root/1.4.0/assets/apps/README.md +3 -0
  363. package/dist/catalog/foundation.workspace-root/1.4.0/assets/package.json +15 -0
  364. package/dist/catalog/foundation.workspace-root/1.4.0/assets/packages/README.md +3 -0
  365. package/dist/catalog/foundation.workspace-root/1.4.0/assets/pnpm-workspace.yaml +4 -0
  366. package/dist/catalog/foundation.workspace-root/1.4.0/assets/services/README.md +3 -0
  367. package/dist/catalog/foundation.workspace-root/1.4.0/assets/tsconfig.base.json +8 -0
  368. package/dist/catalog/foundation.workspace-root/1.4.0/release.json +18 -0
  369. package/dist/catalog/foundation.workspace-root/1.5.0/assets/apps/README.md +3 -0
  370. package/dist/catalog/foundation.workspace-root/1.5.0/assets/package.json +15 -0
  371. package/dist/catalog/foundation.workspace-root/1.5.0/assets/packages/README.md +3 -0
  372. package/dist/catalog/foundation.workspace-root/1.5.0/assets/pnpm-workspace.yaml +4 -0
  373. package/dist/catalog/foundation.workspace-root/1.5.0/assets/services/README.md +3 -0
  374. package/dist/catalog/foundation.workspace-root/1.5.0/assets/tsconfig.base.json +8 -0
  375. package/dist/catalog/foundation.workspace-root/1.5.0/release.json +18 -0
  376. package/dist/chunk.js +49 -0
  377. package/dist/cli.js +10 -12026
  378. package/dist/contracts/dyyto-package-release-catalog.schema.json +36 -0
  379. package/dist/optional-runtime.js +47 -0
  380. package/dist/package-releases/aipt--cli/0.1.0/release.json +29 -0
  381. package/dist/package-releases/aipt--cli/0.1.1/release.json +29 -0
  382. package/dist/package-releases/aipt--cli/0.1.10/release.json +29 -0
  383. package/dist/package-releases/aipt--cli/0.1.11/release.json +29 -0
  384. package/dist/package-releases/aipt--cli/0.1.12/release.json +29 -0
  385. package/dist/package-releases/aipt--cli/0.1.13/release.json +29 -0
  386. package/dist/package-releases/aipt--cli/0.1.2/release.json +29 -0
  387. package/dist/package-releases/aipt--cli/0.1.3/release.json +29 -0
  388. package/dist/package-releases/aipt--cli/0.1.4/release.json +29 -0
  389. package/dist/package-releases/aipt--cli/0.1.5/release.json +29 -0
  390. package/dist/package-releases/aipt--cli/0.1.6/release.json +29 -0
  391. package/dist/package-releases/aipt--cli/0.1.7/release.json +29 -0
  392. package/dist/package-releases/aipt--cli/0.1.8/release.json +29 -0
  393. package/dist/package-releases/aipt--cli/0.1.9/release.json +29 -0
  394. package/dist/package-releases/aipt--platform-kernel/0.1.0/release.json +33 -0
  395. package/dist/package-releases/aipt--platform-kernel/0.1.1/release.json +33 -0
  396. package/dist/package-releases/aipt--platform-kernel/0.1.2/release.json +33 -0
  397. package/dist/package-releases/aipt--platform-kernel/0.1.3/release.json +33 -0
  398. package/dist/package-releases/aipt--platform-kernel/0.1.4/release.json +33 -0
  399. package/dist/package-releases/aipt--platform-kernel/0.1.5/release.json +33 -0
  400. package/dist/recipes/ai-education-agent-phase1/1.0.0/recipe.json +18 -0
  401. package/dist/recipes/ai-education-agent-sqlite/1.0.0/recipe.json +20 -0
  402. package/dist/recipes/ai-education-agent-sqlite/1.1.0/recipe.json +20 -0
  403. package/dist/recipes/ai-education-delegated-review/1.0.0/recipe.json +14 -0
  404. package/dist/recipes/ai-education-end-to-end-production/1.0.0/recipe.json +22 -0
  405. package/dist/recipes/ai-education-end-to-end-production/1.1.0/recipe.json +22 -0
  406. package/dist/recipes/ai-education-end-to-end-production/1.2.0/recipe.json +22 -0
  407. package/dist/recipes/ai-education-end-to-end-production/1.3.0/recipe.json +1 -0
  408. package/dist/recipes/ai-education-picturebook-courseware/1.0.0/recipe.json +1 -0
  409. package/dist/recipes/ai-education-web-courseware/1.0.0/recipe.json +1 -0
  410. package/dist/recipes/capability-family-routing/1.0.0/recipe.json +14 -0
  411. package/dist/recipes/education-agent-intake/1.0.0/recipe.json +20 -0
  412. package/dist/recipes/education-knowledge-skill/1.0.0/recipe.json +14 -0
  413. package/dist/recipes/education-learning-media-authoring/1.0.0/recipe.json +22 -0
  414. package/dist/recipes/education-picturebook-courseware-authoring/1.0.0/recipe.json +38 -0
  415. package/dist/recipes/education-web-courseware-authoring/1.0.0/recipe.json +38 -0
  416. package/dist/recipes/generic-agent-chat/1.0.0/recipe.json +17 -0
  417. package/dist/recipes/visual-presentation-composition/1.0.0/recipe.json +14 -0
  418. package/dist/templates/template.expo-react-native-application/1.0.0/template.json +23 -0
  419. package/dist/templates/template.nextjs-full-stack-application/1.0.0/template.json +23 -0
  420. package/dist/templates/template.node-api-application/1.0.0/template.json +20 -0
  421. package/dist/templates/template.react-component-library/1.0.0/template.json +29 -0
  422. package/dist/templates/template.react-component-library/1.1.0/template.json +122 -0
  423. package/dist/templates/template.typescript-library/1.0.0/template.json +27 -0
  424. package/dist/templates/template.typescript-library/1.1.0/template.json +104 -0
  425. package/dist/templates/template.web-frontend-application/1.0.0/template.json +26 -0
  426. package/dist/templates/template.workspace-npm-package/1.0.0/template.json +31 -0
  427. package/dist/templates/template.workspace-react-component-library/1.0.0/template.json +33 -0
  428. package/dist/templates/template.workspace-react-component-library/1.1.0/template.json +33 -0
  429. package/dist/templates/template.workspace-react-component-library/1.2.0/template.json +33 -0
  430. package/dist/templates/template.workspace-root/1.0.0/template.json +23 -0
  431. package/dist/templates/template.workspace-root/1.1.0/template.json +23 -0
  432. package/dist/templates/template.workspace-root/1.2.0/template.json +19 -0
  433. package/package.json +34 -4
@@ -0,0 +1,5 @@
1
+ # Agent Chat UI consumer
2
+
3
+ 本项目通过 Dyyto Catalog 与 development Registry 消费平台共享 `@aipt/agent-chat-ui`。聊天消息、Skill 推荐确认、HITL 与 Artifact 均复用平台合同;消费端不得定义第二套协议。
4
+
5
+ 该能力仅用于本地 development PoC,不代表 production available。
@@ -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
+ }
@@ -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,2 @@
1
+ export { AgentChatWorkbench } from "./AgentChatWorkbench.js";
2
+ export type { AgentChatWorkbenchProps } from "./AgentChatWorkbench.js";
@@ -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
+ 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
+ }
@@ -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,2 @@
1
+ export { AgentChatWorkbench } from "./AgentChatWorkbench.js";
2
+ export type { AgentChatWorkbenchProps } from "./AgentChatWorkbench.js";
@@ -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
+ 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
+ }
@@ -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,2 @@
1
+ export { AgentChatWorkbench } from "./AgentChatWorkbench.js";
2
+ export type { AgentChatWorkbenchProps } from "./AgentChatWorkbench.js";
@@ -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
+ 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
+ }