aisee-plugin 0.1.0__py3-none-any.whl

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 (329) hide show
  1. aisee_cli/__init__.py +5 -0
  2. aisee_cli/__main__.py +596 -0
  3. aisee_cli/assets.py +70 -0
  4. aisee_cli/author_check.py +220 -0
  5. aisee_cli/bootstrap.py +81 -0
  6. aisee_cli/change.py +61 -0
  7. aisee_cli/change_checks.py +302 -0
  8. aisee_cli/context_pack.py +1302 -0
  9. aisee_cli/contract.py +407 -0
  10. aisee_cli/contract_server.py +156 -0
  11. aisee_cli/doctor.py +89 -0
  12. aisee_cli/flow.py +232 -0
  13. aisee_cli/id_registry.py +477 -0
  14. aisee_cli/index.py +184 -0
  15. aisee_cli/knowledge.py +1466 -0
  16. aisee_cli/lookup.py +154 -0
  17. aisee_cli/openspec_init.py +139 -0
  18. aisee_cli/output.py +66 -0
  19. aisee_cli/paths.py +136 -0
  20. aisee_cli/plugin_assets.py +113 -0
  21. aisee_cli/project.py +44 -0
  22. aisee_cli/schema_pack.py +111 -0
  23. aisee_cli/source_map.py +368 -0
  24. aisee_cli/sources.py +206 -0
  25. aisee_cli/tool_checks.py +89 -0
  26. aisee_plugin-0.1.0.dist-info/METADATA +574 -0
  27. aisee_plugin-0.1.0.dist-info/RECORD +329 -0
  28. aisee_plugin-0.1.0.dist-info/WHEEL +5 -0
  29. aisee_plugin-0.1.0.dist-info/entry_points.txt +2 -0
  30. aisee_plugin-0.1.0.dist-info/licenses/LICENSE +21 -0
  31. aisee_plugin-0.1.0.dist-info/top_level.txt +2 -0
  32. aisee_plugin_assets/__init__.py +2 -0
  33. aisee_plugin_assets/docs/architecture/OPENSPEC_SCHEMA_GUIDE.md +801 -0
  34. aisee_plugin_assets/docs/architecture/aisee-cli-context-and-id-registry.md +1028 -0
  35. aisee_plugin_assets/docs/architecture/aisee-harness-design.md +150 -0
  36. aisee_plugin_assets/docs/architecture/aisee-openspec-compound-integration.md +1052 -0
  37. aisee_plugin_assets/docs/architecture/aisee-team-knowledge.md +142 -0
  38. aisee_plugin_assets/docs/architecture/openspec-multi-schema-best-practices.md +278 -0
  39. aisee_plugin_assets/plugin-metadata/claude/plugin.json +17 -0
  40. aisee_plugin_assets/plugin-metadata/codex/plugin.json +35 -0
  41. aisee_plugin_assets/plugin-metadata/cursor/plugin.json +17 -0
  42. aisee_plugin_assets/references/compound-bridge.md +24 -0
  43. aisee_plugin_assets/references/context-pack-contract.md +201 -0
  44. aisee_plugin_assets/references/context-pack-gaps.md +54 -0
  45. aisee_plugin_assets/references/context-pack-targets.md +122 -0
  46. aisee_plugin_assets/references/id-policy.md +28 -0
  47. aisee_plugin_assets/references/knowledge-card-contract.md +204 -0
  48. aisee_plugin_assets/references/source-map-contract.md +123 -0
  49. aisee_plugin_assets/skills/aisee-architecture/SKILL.md +149 -0
  50. aisee_plugin_assets/skills/aisee-architecture/assets/architecture-template-artifact-hints.md +11 -0
  51. aisee_plugin_assets/skills/aisee-architecture/assets/architecture-template-core.md +203 -0
  52. aisee_plugin_assets/skills/aisee-architecture/assets/architecture-template-embedded.md +45 -0
  53. aisee_plugin_assets/skills/aisee-architecture/assets/architecture-template-software.md +57 -0
  54. aisee_plugin_assets/skills/aisee-architecture/assets/architecture-template.md +58 -0
  55. aisee_plugin_assets/skills/aisee-architecture/evals/evals.json +224 -0
  56. aisee_plugin_assets/skills/aisee-architecture/references/question-bank.md +132 -0
  57. aisee_plugin_assets/skills/aisee-architecture/references/workflow.md +135 -0
  58. aisee_plugin_assets/skills/aisee-architecture/references/writing-rules.md +49 -0
  59. aisee_plugin_assets/skills/aisee-archive-guard/SKILL.md +161 -0
  60. aisee_plugin_assets/skills/aisee-change-author/SKILL.md +131 -0
  61. aisee_plugin_assets/skills/aisee-change-author/references/authoring-rules.md +147 -0
  62. aisee_plugin_assets/skills/aisee-change-plan/SKILL.md +130 -0
  63. aisee_plugin_assets/skills/aisee-change-plan/evals/evals.json +212 -0
  64. aisee_plugin_assets/skills/aisee-change-plan/references/change-boundary-algorithm.md +96 -0
  65. aisee_plugin_assets/skills/aisee-change-plan/references/input-boundary-rules.md +61 -0
  66. aisee_plugin_assets/skills/aisee-change-plan/references/output-template.md +153 -0
  67. aisee_plugin_assets/skills/aisee-change-plan/references/schema-selection-rules.md +56 -0
  68. aisee_plugin_assets/skills/aisee-change-plan/references/source-map-rules.md +64 -0
  69. aisee_plugin_assets/skills/aisee-design-assets/SKILL.md +192 -0
  70. aisee_plugin_assets/skills/aisee-design-assets/agents/openai.yaml +4 -0
  71. aisee_plugin_assets/skills/aisee-design-assets/assets/asset-manifest-template.md +16 -0
  72. aisee_plugin_assets/skills/aisee-design-assets/assets/design-assets-index-template.md +37 -0
  73. aisee_plugin_assets/skills/aisee-design-assets/assets/dev-visual-brief-template.json +58 -0
  74. aisee_plugin_assets/skills/aisee-design-assets/assets/dev-visual-brief-template.md +71 -0
  75. aisee_plugin_assets/skills/aisee-design-assets/assets/figma-brief-template.json +65 -0
  76. aisee_plugin_assets/skills/aisee-design-assets/assets/figma-brief-template.md +70 -0
  77. aisee_plugin_assets/skills/aisee-design-assets/assets/openai-config-template.json +4 -0
  78. aisee_plugin_assets/skills/aisee-design-assets/assets/prompt-template-asset.md +22 -0
  79. aisee_plugin_assets/skills/aisee-design-assets/assets/prompt-template-edit.md +19 -0
  80. aisee_plugin_assets/skills/aisee-design-assets/assets/prompt-template-reference.md +16 -0
  81. aisee_plugin_assets/skills/aisee-design-assets/assets/prompt-template-style-spec.md +19 -0
  82. aisee_plugin_assets/skills/aisee-design-assets/assets/style-spec-template.json +45 -0
  83. aisee_plugin_assets/skills/aisee-design-assets/assets/style-spec-template.md +58 -0
  84. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/catalogs/excluded.jsonl +1104 -0
  85. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/catalogs/prompts.csv +1192 -0
  86. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/catalogs/prompts.jsonl +177 -0
  87. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/catalogs/prompts.xlsx +0 -0
  88. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/catalogs/summary.json +13 -0
  89. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/ad-creative.md +893 -0
  90. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/character.md +246 -0
  91. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/comparison.md +986 -0
  92. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/ecommerce.md +338 -0
  93. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/portrait.md +4187 -0
  94. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/poster.md +5623 -0
  95. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/ui.md +1937 -0
  96. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/youmind-readme-zh.md +5701 -0
  97. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/raw-index/youmind-sitemap-zh-cn-urls.jsonl +749 -0
  98. aisee_plugin_assets/skills/aisee-design-assets/prompt-library/gpt-image-2/sources.md +59 -0
  99. aisee_plugin_assets/skills/aisee-design-assets/references/asset-manifest.md +69 -0
  100. aisee_plugin_assets/skills/aisee-design-assets/references/downstream-briefs.md +57 -0
  101. aisee_plugin_assets/skills/aisee-design-assets/references/icon-library.md +86 -0
  102. aisee_plugin_assets/skills/aisee-design-assets/references/image-first.md +61 -0
  103. aisee_plugin_assets/skills/aisee-design-assets/references/image-generation.md +216 -0
  104. aisee_plugin_assets/skills/aisee-design-assets/references/output-layout.md +102 -0
  105. aisee_plugin_assets/skills/aisee-design-assets/references/output-specs.md +74 -0
  106. aisee_plugin_assets/skills/aisee-design-assets/references/prompt-optimization.md +112 -0
  107. aisee_plugin_assets/skills/aisee-design-assets/references/style-spec.md +87 -0
  108. aisee_plugin_assets/skills/aisee-design-assets/references/workflow.md +82 -0
  109. aisee_plugin_assets/skills/aisee-design-assets/scripts/gpt_image2_prompt_library.py +1016 -0
  110. aisee_plugin_assets/skills/aisee-design-assets/scripts/image_gen.py +1151 -0
  111. aisee_plugin_assets/skills/aisee-design-assets/scripts/remove_chroma_key.py +440 -0
  112. aisee_plugin_assets/skills/aisee-design-spec/SKILL.md +210 -0
  113. aisee_plugin_assets/skills/aisee-design-spec/assets/design-spec-template-light.md +119 -0
  114. aisee_plugin_assets/skills/aisee-design-spec/assets/design-spec-template-patterns.md +56 -0
  115. aisee_plugin_assets/skills/aisee-design-spec/assets/design-spec-template-standard.md +177 -0
  116. aisee_plugin_assets/skills/aisee-design-spec/assets/design-spec-template-tokens.md +54 -0
  117. aisee_plugin_assets/skills/aisee-design-spec/assets/design-spec-template.md +25 -0
  118. aisee_plugin_assets/skills/aisee-design-spec/evals/evals.json +145 -0
  119. aisee_plugin_assets/skills/aisee-design-spec/references/design-rules.md +73 -0
  120. aisee_plugin_assets/skills/aisee-design-spec/references/question-bank.md +86 -0
  121. aisee_plugin_assets/skills/aisee-design-spec/references/writing-rules.md +74 -0
  122. aisee_plugin_assets/skills/aisee-flow/SKILL.md +184 -0
  123. aisee_plugin_assets/skills/aisee-flow/references/route-hints.md +21 -0
  124. aisee_plugin_assets/skills/aisee-image-object/SKILL.md +152 -0
  125. aisee_plugin_assets/skills/aisee-image-object/agents/openai.yaml +4 -0
  126. aisee_plugin_assets/skills/aisee-image-object/assets/app-icon.svg +24 -0
  127. aisee_plugin_assets/skills/aisee-image-object/assets/config-template.json +7 -0
  128. aisee_plugin_assets/skills/aisee-image-object/assets/requirements-image-object.txt +11 -0
  129. aisee_plugin_assets/skills/aisee-image-object/assets/source-example.json +109 -0
  130. aisee_plugin_assets/skills/aisee-image-object/assets/source-template.json +20 -0
  131. aisee_plugin_assets/skills/aisee-image-object/references/asset-extraction.md +84 -0
  132. aisee_plugin_assets/skills/aisee-image-object/references/dependencies.md +115 -0
  133. aisee_plugin_assets/skills/aisee-image-object/references/export-options.md +34 -0
  134. aisee_plugin_assets/skills/aisee-image-object/references/gui-design.md +61 -0
  135. aisee_plugin_assets/skills/aisee-image-object/references/model-backends.md +33 -0
  136. aisee_plugin_assets/skills/aisee-image-object/references/output-layout.md +109 -0
  137. aisee_plugin_assets/skills/aisee-image-object/references/source-json.md +218 -0
  138. aisee_plugin_assets/skills/aisee-image-object/references/workflows.md +97 -0
  139. aisee_plugin_assets/skills/aisee-image-object/schemas/source.schema.json +30 -0
  140. aisee_plugin_assets/skills/aisee-image-object/scripts/check_dependencies.py +147 -0
  141. aisee_plugin_assets/skills/aisee-image-object/scripts/export_runner.py +234 -0
  142. aisee_plugin_assets/skills/aisee-image-object/scripts/extract_object.py +45 -0
  143. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/__init__.py +1 -0
  144. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/app.py +66 -0
  145. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/app_icon.py +16 -0
  146. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/asset_model.py +53 -0
  147. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/asset_panel.py +127 -0
  148. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/assets/chevron-down.svg +3 -0
  149. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/components.py +286 -0
  150. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/dialogs.py +757 -0
  151. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/export_panel.py +34 -0
  152. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/main_window.py +1798 -0
  153. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/preview_canvas.py +45 -0
  154. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/preview_render.py +286 -0
  155. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/recent_files.py +68 -0
  156. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/source_canvas.py +498 -0
  157. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/task_runner.py +56 -0
  158. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/theme.py +313 -0
  159. aisee_plugin_assets/skills/aisee-image-object/scripts/gui/tool_panel.py +31 -0
  160. aisee_plugin_assets/skills/aisee-image-object/scripts/image_object_tool.py +621 -0
  161. aisee_plugin_assets/skills/aisee-image-object/scripts/inpaint_runner.py +231 -0
  162. aisee_plugin_assets/skills/aisee-image-object/scripts/mask_ops.py +141 -0
  163. aisee_plugin_assets/skills/aisee-image-object/scripts/model_registry.py +91 -0
  164. aisee_plugin_assets/skills/aisee-image-object/scripts/rembg_runner.py +95 -0
  165. aisee_plugin_assets/skills/aisee-image-object/scripts/runtime_config.py +76 -0
  166. aisee_plugin_assets/skills/aisee-image-object/scripts/sam_runner.py +50 -0
  167. aisee_plugin_assets/skills/aisee-image-object/scripts/source_state.py +162 -0
  168. aisee_plugin_assets/skills/aisee-image-object/scripts/workspace.py +87 -0
  169. aisee_plugin_assets/skills/aisee-implementation-bridge/SKILL.md +219 -0
  170. aisee_plugin_assets/skills/aisee-implementation-bridge/references/brief-index-template.md +64 -0
  171. aisee_plugin_assets/skills/aisee-implementation-bridge/references/brief-template.md +106 -0
  172. aisee_plugin_assets/skills/aisee-init/SKILL.md +193 -0
  173. aisee_plugin_assets/skills/aisee-init/agents/openai.yaml +7 -0
  174. aisee_plugin_assets/skills/aisee-init/assets/codex-agents-template.md +152 -0
  175. aisee_plugin_assets/skills/aisee-init/assets/memory-index-template.md +21 -0
  176. aisee_plugin_assets/skills/aisee-init/assets/memory-rules-template.md +94 -0
  177. aisee_plugin_assets/skills/aisee-init/assets/openspec-project-template.md +98 -0
  178. aisee_plugin_assets/skills/aisee-init/evals/evals.json +342 -0
  179. aisee_plugin_assets/skills/aisee-init/references/layout-migration.md +60 -0
  180. aisee_plugin_assets/skills/aisee-init/scripts/hooks/prompt-scan.js +116 -0
  181. aisee_plugin_assets/skills/aisee-init/scripts/hooks/session-inject.js +226 -0
  182. aisee_plugin_assets/skills/aisee-init/scripts/hooks/spec-drift.js +231 -0
  183. aisee_plugin_assets/skills/aisee-init/scripts/setup-hooks.js +223 -0
  184. aisee_plugin_assets/skills/aisee-knowledge-curate/SKILL.md +65 -0
  185. aisee_plugin_assets/skills/aisee-knowledge-curate/references/batch-review-template.md +83 -0
  186. aisee_plugin_assets/skills/aisee-knowledge-curate/references/workflow.md +102 -0
  187. aisee_plugin_assets/skills/aisee-reflect/SKILL.md +103 -0
  188. aisee_plugin_assets/skills/aisee-reflect/references/knowledge-candidates.md +124 -0
  189. aisee_plugin_assets/skills/aisee-reflect/references/output-templates.md +260 -0
  190. aisee_plugin_assets/skills/aisee-reflect/references/workflow.md +139 -0
  191. aisee_plugin_assets/skills/aisee-schema-pack/SKILL.md +163 -0
  192. aisee_plugin_assets/skills/aisee-schema-pack/agents/openai.yaml +7 -0
  193. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/examples/add-passwordless-login/change-context.md +21 -0
  194. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/examples/add-passwordless-login/data-model.md +26 -0
  195. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/examples/add-passwordless-login/proposal.md +24 -0
  196. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/examples/add-passwordless-login/service-contract.md +36 -0
  197. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/examples/add-passwordless-login/source-map.md +70 -0
  198. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/examples/add-passwordless-login/specs/auth.md +21 -0
  199. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/examples/add-passwordless-login/tasks.md +8 -0
  200. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/examples/add-passwordless-login/ui-contract.md +33 -0
  201. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/schema.yaml +176 -0
  202. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/templates/change-context.md +53 -0
  203. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/templates/data-model.md +83 -0
  204. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/templates/proposal.md +52 -0
  205. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/templates/service-contract.md +131 -0
  206. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/templates/source-map.md +148 -0
  207. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/templates/spec.md +33 -0
  208. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/templates/tasks.md +39 -0
  209. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-app-spec-driven/templates/ui-contract.md +94 -0
  210. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/schema.yaml +227 -0
  211. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/connectivity-contract.md +60 -0
  212. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/design.md +90 -0
  213. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/firmware-contract.md +88 -0
  214. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/hardware-contract.md +111 -0
  215. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/operations-contract.md +50 -0
  216. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/production-contract.md +59 -0
  217. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/proposal.md +82 -0
  218. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/runtime-contract.md +92 -0
  219. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/security-contract.md +62 -0
  220. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/source-map.md +107 -0
  221. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/spec.md +39 -0
  222. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/tasks.md +58 -0
  223. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-device-spec-driven/templates/verification-contract.md +108 -0
  224. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-docsite-driven/baseline-templates/project-docs.md +57 -0
  225. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-docsite-driven/schema.yaml +64 -0
  226. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-docsite-driven/templates/doc-change.md +82 -0
  227. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-docsite-driven/templates/proposal.md +39 -0
  228. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/aisee-docsite-driven/templates/tasks.md +32 -0
  229. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/infra-change/schema.yaml +69 -0
  230. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/infra-change/templates/impact-assessment.md +58 -0
  231. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/infra-change/templates/proposal.md +49 -0
  232. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/infra-change/templates/rollback-plan.md +69 -0
  233. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/infra-change/templates/tasks.md +56 -0
  234. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/opsx-collab-pr-loop/schema.yaml +69 -0
  235. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/opsx-collab-pr-loop/templates/checkpoints.md +36 -0
  236. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/opsx-collab-pr-loop/templates/implementation.md +61 -0
  237. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/opsx-collab-pr-loop/templates/intake.md +45 -0
  238. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/opsx-collab-pr-loop/templates/research-plan.md +54 -0
  239. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/quick-fix/schema.yaml +56 -0
  240. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/quick-fix/templates/problem.md +53 -0
  241. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/quick-fix/templates/solution.md +52 -0
  242. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/quick-fix/templates/tasks.md +24 -0
  243. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/quick-research/schema.yaml +50 -0
  244. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/quick-research/templates/findings.md +63 -0
  245. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/quick-research/templates/question.md +47 -0
  246. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/quick-research/templates/recommendation.md +77 -0
  247. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/security-audit/schema.yaml +79 -0
  248. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/security-audit/templates/design.md +68 -0
  249. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/security-audit/templates/proposal.md +48 -0
  250. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/security-audit/templates/spec.md +44 -0
  251. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/security-audit/templates/tasks.md +39 -0
  252. aisee_plugin_assets/skills/aisee-schema-pack/assets/schema-pack/security-audit/templates/threat-model.md +86 -0
  253. aisee_plugin_assets/skills/aisee-schema-pack/references/multi-schema-best-practices.md +278 -0
  254. aisee_plugin_assets/skills/aisee-schema-pack/scripts/setup-schemas.js +273 -0
  255. aisee_plugin_assets/skills/aisee-spec-migrate/SKILL.md +127 -0
  256. aisee_plugin_assets/skills/aisee-spec-migrate/assets/migration-index-template.md +70 -0
  257. aisee_plugin_assets/skills/aisee-spec-migrate/evals/evals.json +141 -0
  258. aisee_plugin_assets/skills/aisee-spec-migrate/references/question-bank.md +72 -0
  259. aisee_plugin_assets/skills/aisee-spec-migrate/references/workflow.md +140 -0
  260. aisee_plugin_assets/skills/aisee-srs/SKILL.md +146 -0
  261. aisee_plugin_assets/skills/aisee-srs/assets/srs-template-epic-main.md +198 -0
  262. aisee_plugin_assets/skills/aisee-srs/assets/srs-template-epic-module.md +127 -0
  263. aisee_plugin_assets/skills/aisee-srs/assets/srs-template-standard.md +216 -0
  264. aisee_plugin_assets/skills/aisee-srs/assets/srs-template.md +34 -0
  265. aisee_plugin_assets/skills/aisee-srs/evals/evals.json +215 -0
  266. aisee_plugin_assets/skills/aisee-srs/references/domain-rules.md +42 -0
  267. aisee_plugin_assets/skills/aisee-srs/references/module-boundary-rules.md +59 -0
  268. aisee_plugin_assets/skills/aisee-srs/references/question-bank.md +132 -0
  269. aisee_plugin_assets/skills/aisee-srs/references/scenario-extension-blocks.md +207 -0
  270. aisee_plugin_assets/skills/aisee-srs/references/workflow.md +179 -0
  271. aisee_plugin_assets/skills/aisee-srs/references/writing-rules.md +86 -0
  272. aisee_plugin_assets/skills/aisee-svg-assets/SKILL.md +174 -0
  273. aisee_plugin_assets/skills/aisee-svg-assets/agents/openai.yaml +4 -0
  274. aisee_plugin_assets/skills/aisee-svg-assets/assets/logo-brief-template.md +34 -0
  275. aisee_plugin_assets/skills/aisee-svg-assets/assets/logo-guidelines-template.md +70 -0
  276. aisee_plugin_assets/skills/aisee-svg-assets/assets/svg-asset-index-template.json +16 -0
  277. aisee_plugin_assets/skills/aisee-svg-assets/assets/svg-asset-index-template.md +9 -0
  278. aisee_plugin_assets/skills/aisee-svg-assets/assets/svg-icon-template.svg +5 -0
  279. aisee_plugin_assets/skills/aisee-svg-assets/evals/evals.json +230 -0
  280. aisee_plugin_assets/skills/aisee-svg-assets/references/logo-design.md +166 -0
  281. aisee_plugin_assets/skills/aisee-svg-assets/references/output-layout.md +53 -0
  282. aisee_plugin_assets/skills/aisee-svg-assets/references/png-to-svg.md +88 -0
  283. aisee_plugin_assets/skills/aisee-svg-assets/references/svg-generation.md +56 -0
  284. aisee_plugin_assets/skills/aisee-svg-assets/references/svg-validation.md +50 -0
  285. aisee_plugin_assets/skills/aisee-svg-assets/scripts/optimize_svg.py +76 -0
  286. aisee_plugin_assets/skills/aisee-svg-assets/scripts/trace_bitmap.py +166 -0
  287. aisee_plugin_assets/skills/aisee-svg-assets/scripts/validate_svg.py +136 -0
  288. aisee_plugin_assets/skills/aisee-ui-content/SKILL.md +161 -0
  289. aisee_plugin_assets/skills/aisee-ui-content/assets/ui-content-template-enhancement.md +230 -0
  290. aisee_plugin_assets/skills/aisee-ui-content/assets/ui-content-template-epic-index.md +102 -0
  291. aisee_plugin_assets/skills/aisee-ui-content/assets/ui-content-template-epic-module.md +161 -0
  292. aisee_plugin_assets/skills/aisee-ui-content/assets/ui-content-template-inventory.md +124 -0
  293. aisee_plugin_assets/skills/aisee-ui-content/assets/ui-content-template-platform-diff.md +39 -0
  294. aisee_plugin_assets/skills/aisee-ui-content/assets/ui-content-template-shared-flows.md +43 -0
  295. aisee_plugin_assets/skills/aisee-ui-content/assets/ui-content-template-standard.md +234 -0
  296. aisee_plugin_assets/skills/aisee-ui-content/assets/ui-content-template.md +71 -0
  297. aisee_plugin_assets/skills/aisee-ui-content/evals/evals.json +188 -0
  298. aisee_plugin_assets/skills/aisee-ui-content/references/question-bank.md +139 -0
  299. aisee_plugin_assets/skills/aisee-ui-content/references/workflow.md +108 -0
  300. aisee_plugin_assets/skills/aisee-ui-content/references/writing-rules.md +50 -0
  301. aisee_plugin_assets/skills/aisee-verify/SKILL.md +187 -0
  302. aisee_plugin_assets/skills/aisee-verify/evals/evals.json +95 -0
  303. aisee_plugin_assets/skills/hw-architecture/SKILL.md +175 -0
  304. aisee_plugin_assets/skills/hw-architecture/assets/architecture-template.md +128 -0
  305. aisee_plugin_assets/skills/hw-architecture/assets/module-architecture-template.md +45 -0
  306. aisee_plugin_assets/skills/hw-architecture/references/architecture-checklist.md +35 -0
  307. aisee_plugin_assets/skills/hw-change-plan/SKILL.md +193 -0
  308. aisee_plugin_assets/skills/hw-change-plan/assets/change-plan-template.md +93 -0
  309. aisee_plugin_assets/skills/hw-change-plan/references/change-boundary-rules.md +49 -0
  310. aisee_plugin_assets/skills/hw-init/SKILL.md +233 -0
  311. aisee_plugin_assets/skills/hw-init/assets/clock-contract-template.md +75 -0
  312. aisee_plugin_assets/skills/hw-init/assets/init-report-template.md +63 -0
  313. aisee_plugin_assets/skills/hw-init/assets/memory-device-contract-template.md +107 -0
  314. aisee_plugin_assets/skills/hw-init/assets/project-structure-template.md +45 -0
  315. aisee_plugin_assets/skills/hw-init/assets/project-templates.md +186 -0
  316. aisee_plugin_assets/skills/hw-srs/SKILL.md +163 -0
  317. aisee_plugin_assets/skills/hw-srs/assets/srs-template.md +122 -0
  318. aisee_plugin_assets/skills/hw-srs/references/capability-checklist.md +58 -0
  319. aisee_plugin_assets/skills/hw-srs/references/question-bank.md +78 -0
  320. aisee_plugin_assets/team-knowledge/AGENTS.md +8 -0
  321. aisee_plugin_assets/team-knowledge/README.md +23 -0
  322. aisee_plugin_assets/team-knowledge/docs/authoring-guide.md +16 -0
  323. aisee_plugin_assets/team-knowledge/docs/review-policy.md +13 -0
  324. aisee_plugin_assets/team-knowledge/knowledge/cards/cli/cli-json-output-stability.md +32 -0
  325. aisee_plugin_assets/team-knowledge/knowledge/cards/openspec/openspec-source-map-is-routing.md +34 -0
  326. aisee_plugin_assets/team-knowledge/knowledge/packs/openspec.yaml +11 -0
  327. aisee_plugin_assets/team-knowledge/knowledge/packs/web-app.yaml +11 -0
  328. aisee_plugin_assets/team-knowledge/schemas/knowledge-card.schema.json +28 -0
  329. aisee_plugin_assets/team-knowledge/schemas/knowledge-pack.schema.json +17 -0
aisee_cli/__init__.py ADDED
@@ -0,0 +1,5 @@
1
+ """Aisee CLI package."""
2
+
3
+ __all__ = ["__version__"]
4
+
5
+ __version__ = "0.1.0"
aisee_cli/__main__.py ADDED
@@ -0,0 +1,596 @@
1
+ """Aisee CLI scaffold."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ from pathlib import Path
7
+
8
+ from aisee_cli import __version__
9
+ from aisee_cli.author_check import build_author_check
10
+ from aisee_cli.bootstrap import build_bootstrap_apply_response, build_bootstrap_plan
11
+ from aisee_cli.change import build_change_inspect
12
+ from aisee_cli.change_checks import build_archive_check, build_verify_check
13
+ from aisee_cli.contract import build_contract_get, build_contract_manifest, build_contract_summary
14
+ from aisee_cli.contract_server import lan_warning, serve_contract_context
15
+ from aisee_cli.context_pack import build_context_pack
16
+ from aisee_cli.doctor import build_doctor
17
+ from aisee_cli.flow import build_flow
18
+ from aisee_cli.id_registry import activate_id, check_registry, deprecate_id, next_id, reserve_ids
19
+ from aisee_cli.index import build_index
20
+ from aisee_cli.knowledge import (
21
+ build_knowledge_check,
22
+ build_knowledge_doctor,
23
+ build_knowledge_index,
24
+ build_knowledge_inspect,
25
+ build_knowledge_install,
26
+ build_knowledge_promote_batch,
27
+ build_knowledge_query,
28
+ build_knowledge_scaffold,
29
+ build_knowledge_update,
30
+ )
31
+ from aisee_cli.lookup import get_id, trace_id
32
+ from aisee_cli.openspec_init import run_openspec_init
33
+ from aisee_cli.output import error_response, exit_code_for, print_json
34
+ from aisee_cli.plugin_assets import export_plugin_assets, inspect_plugin_assets, plugin_path
35
+ from aisee_cli.project import resolve_project_root
36
+ from aisee_cli.schema_pack import check_schema_packs, install_schema_packs, list_schema_packs
37
+ from aisee_cli.sources import add_source, check_sources, list_sources, remove_source
38
+
39
+
40
+ def main() -> int:
41
+ parser = argparse.ArgumentParser(prog="aisee")
42
+ parser.add_argument("--version", action="store_true", help="print version")
43
+ subparsers = parser.add_subparsers(dest="command")
44
+ doctor_parser = subparsers.add_parser("doctor")
45
+ doctor_parser.add_argument("--json", action="store_true", help="output JSON")
46
+ doctor_parser.add_argument("--fail-on-blocker", action="store_true", help="return non-zero when blockers exist")
47
+ bootstrap_parser = subparsers.add_parser("bootstrap")
48
+ bootstrap_group = bootstrap_parser.add_mutually_exclusive_group()
49
+ bootstrap_group.add_argument("--plan", action="store_true", help="output bootstrap plan")
50
+ bootstrap_group.add_argument("--apply", action="store_true", help="apply bootstrap plan")
51
+ bootstrap_parser.add_argument("--json", action="store_true", help="output JSON")
52
+ openspec_parser = subparsers.add_parser("openspec")
53
+ openspec_parser.add_argument("--json", action="store_true", help="output JSON")
54
+ openspec_subparsers = openspec_parser.add_subparsers(dest="openspec_command")
55
+ openspec_ensure_parser = openspec_subparsers.add_parser("ensure")
56
+ openspec_ensure_parser.add_argument("--profile", default="core", help="OpenSpec profile preset; default: core")
57
+ openspec_ensure_parser.add_argument("--tools", default="none", help="OpenSpec AI tools value for init; default: none")
58
+ openspec_ensure_parser.add_argument("--skip-profile", action="store_true", help="do not run openspec config profile")
59
+ openspec_ensure_parser.add_argument("--force", action="store_true", help="pass --force to openspec init when initialization is needed")
60
+ openspec_ensure_parser.add_argument("--json", action="store_true", help="output JSON")
61
+ plugin_parser = subparsers.add_parser("plugin")
62
+ plugin_parser.add_argument("--json", action="store_true", help="output JSON")
63
+ plugin_subparsers = plugin_parser.add_subparsers(dest="plugin_command")
64
+ plugin_inspect_parser = plugin_subparsers.add_parser("inspect")
65
+ plugin_inspect_parser.add_argument("--json", action="store_true", help="output JSON")
66
+ plugin_path_parser = plugin_subparsers.add_parser("path")
67
+ plugin_path_parser.add_argument("--target", choices=["codex", "claude", "cursor"], required=True, help="agent runtime target")
68
+ plugin_path_parser.add_argument("--json", action="store_true", help="output JSON")
69
+ plugin_export_parser = plugin_subparsers.add_parser("export")
70
+ plugin_export_parser.add_argument("--target", choices=["codex", "claude", "cursor"], required=True, help="agent runtime target")
71
+ plugin_export_parser.add_argument("--dest", required=True, help="destination directory for the exported plugin bundle")
72
+ plugin_export_parser.add_argument("--force", action="store_true", help="overwrite destination when it already exists")
73
+ plugin_export_parser.add_argument("--json", action="store_true", help="output JSON")
74
+ sources_parser = subparsers.add_parser("sources")
75
+ sources_parser.add_argument("--json", action="store_true", help="output JSON")
76
+ sources_subparsers = sources_parser.add_subparsers(dest="sources_command")
77
+ sources_list_parser = sources_subparsers.add_parser("list")
78
+ sources_list_parser.add_argument("--json", action="store_true", help="output JSON")
79
+ sources_check_parser = sources_subparsers.add_parser("check")
80
+ sources_check_parser.add_argument("--json", action="store_true", help="output JSON")
81
+ sources_check_parser.add_argument("--fail-on-blocker", action="store_true", help="return non-zero when blockers exist")
82
+ sources_add_parser = sources_subparsers.add_parser("add")
83
+ sources_add_parser.add_argument("--scope", required=True, help="source scope")
84
+ sources_add_parser.add_argument("--type", required=True, help="source type")
85
+ sources_add_parser.add_argument("--path", required=True, help="source path")
86
+ sources_add_parser.add_argument("--template", help="source template")
87
+ sources_add_parser.add_argument("--parser", help="source parser")
88
+ sources_add_parser.add_argument("--json", action="store_true", help="output JSON")
89
+ sources_remove_parser = sources_subparsers.add_parser("remove")
90
+ sources_remove_parser.add_argument("--scope", required=True, help="source scope")
91
+ sources_remove_parser.add_argument("--type", required=True, help="source type")
92
+ sources_remove_parser.add_argument("--path", required=True, help="source path")
93
+ sources_remove_parser.add_argument("--json", action="store_true", help="output JSON")
94
+ schemas_parser = subparsers.add_parser("schemas")
95
+ schemas_parser.add_argument("--json", action="store_true", help="output JSON")
96
+ schemas_subparsers = schemas_parser.add_subparsers(dest="schemas_command")
97
+ schemas_list_parser = schemas_subparsers.add_parser("list")
98
+ schemas_list_parser.add_argument("--json", action="store_true", help="output JSON")
99
+ schemas_check_parser = schemas_subparsers.add_parser("check")
100
+ schemas_check_parser.add_argument("--json", action="store_true", help="output JSON")
101
+ schemas_check_parser.add_argument("--fail-on-blocker", action="store_true", help="return non-zero when blockers exist")
102
+ schemas_install_parser = schemas_subparsers.add_parser("install")
103
+ schemas_install_parser.add_argument("--schema", action="append", default=[], help="schema name to install")
104
+ schemas_install_parser.add_argument("--all", action="store_true", help="install all schemas")
105
+ schemas_install_parser.add_argument("--force", action="store_true", help="overwrite installed schemas")
106
+ schemas_install_parser.add_argument("--json", action="store_true", help="output JSON")
107
+ index_parser = subparsers.add_parser("index")
108
+ index_parser.add_argument("--json", action="store_true", help="output JSON")
109
+ index_parser.add_argument("--fail-on-blocker", action="store_true", help="return non-zero when blockers exist")
110
+ change_parser = subparsers.add_parser("change")
111
+ change_parser.add_argument("--json", action="store_true", help="output JSON")
112
+ change_subparsers = change_parser.add_subparsers(dest="change_command")
113
+ inspect_parser = change_subparsers.add_parser("inspect")
114
+ inspect_parser.add_argument("change", help="OpenSpec change name")
115
+ inspect_parser.add_argument("--json", action="store_true", help="output JSON")
116
+ author_check_parser = change_subparsers.add_parser("author-check")
117
+ author_check_parser.add_argument("change", help="OpenSpec change name")
118
+ author_check_parser.add_argument("--json", action="store_true", help="output JSON")
119
+ verify_check_parser = change_subparsers.add_parser("verify-check")
120
+ verify_check_parser.add_argument("change", help="OpenSpec change name")
121
+ verify_check_parser.add_argument("--json", action="store_true", help="output JSON")
122
+ verify_check_parser.add_argument("--fail-on-blocker", action="store_true", help="return non-zero when blockers exist")
123
+ archive_check_parser = change_subparsers.add_parser("archive-check")
124
+ archive_check_parser.add_argument("change", help="OpenSpec change name")
125
+ archive_check_parser.add_argument("--json", action="store_true", help="output JSON")
126
+ archive_check_parser.add_argument("--fail-on-blocker", action="store_true", help="return non-zero when blockers exist")
127
+ context_parser = subparsers.add_parser("context")
128
+ context_parser.add_argument("--json", action="store_true", help="output JSON")
129
+ context_subparsers = context_parser.add_subparsers(dest="context_command")
130
+ pack_parser = context_subparsers.add_parser("pack")
131
+ pack_parser.add_argument("--change", required=True, help="OpenSpec change name")
132
+ pack_parser.add_argument("--for", dest="target", required=True, help="context target")
133
+ pack_parser.add_argument("--knowledge", action="store_true", help="include knowledge guardrail matches")
134
+ pack_parser.add_argument("--json", action="store_true", help="output JSON")
135
+ knowledge_parser = subparsers.add_parser("knowledge")
136
+ knowledge_parser.add_argument("--json", action="store_true", help="output JSON")
137
+ knowledge_subparsers = knowledge_parser.add_subparsers(dest="knowledge_command")
138
+ knowledge_inspect_parser = knowledge_subparsers.add_parser("inspect")
139
+ knowledge_inspect_parser.add_argument("--json", action="store_true", help="output JSON")
140
+ knowledge_check_parser = knowledge_subparsers.add_parser("check")
141
+ knowledge_check_parser.add_argument("--team-path", help="team knowledge repository path")
142
+ knowledge_check_parser.add_argument("--json", action="store_true", help="output JSON")
143
+ knowledge_doctor_parser = knowledge_subparsers.add_parser("doctor")
144
+ knowledge_doctor_parser.add_argument("--team-path", help="team knowledge repository path to compare with config")
145
+ knowledge_doctor_parser.add_argument("--json", action="store_true", help="output JSON")
146
+ knowledge_scaffold_parser = knowledge_subparsers.add_parser("scaffold")
147
+ knowledge_scaffold_parser.add_argument("--dest", required=True, help="destination directory for scaffold")
148
+ knowledge_scaffold_parser.add_argument("--force", action="store_true", help="overwrite destination when it already exists")
149
+ knowledge_scaffold_parser.add_argument("--update-config", action="store_true", help="write the scaffold path into aisee/knowledge.yaml")
150
+ knowledge_scaffold_parser.add_argument("--pack", action="append", default=[], help="pack to enable when writing config; can be repeated")
151
+ knowledge_scaffold_parser.add_argument("--json", action="store_true", help="output JSON")
152
+ knowledge_install_parser = knowledge_subparsers.add_parser("install")
153
+ knowledge_install_parser.add_argument("--allow-dirty", action="store_true", help="allow dirty existing checkout")
154
+ knowledge_install_parser.add_argument("--json", action="store_true", help="output JSON")
155
+ knowledge_update_parser = knowledge_subparsers.add_parser("update")
156
+ knowledge_update_parser.add_argument("--allow-dirty", action="store_true", help="allow dirty existing checkout")
157
+ knowledge_update_parser.add_argument("--json", action="store_true", help="output JSON")
158
+ knowledge_promote_parser = knowledge_subparsers.add_parser("promote-batch")
159
+ knowledge_promote_parser.add_argument("--curation", required=True, help="curation report path")
160
+ knowledge_promote_parser.add_argument("--team-path", required=True, help="team knowledge repository path")
161
+ knowledge_promote_parser.add_argument("--pack", help="pack id to update")
162
+ knowledge_promote_parser.add_argument("--category", default="general", help="card category directory")
163
+ knowledge_promote_parser.add_argument("--activate", action="store_true", help="promote drafts as active cards")
164
+ knowledge_promote_parser.add_argument("--json", action="store_true", help="output JSON")
165
+ knowledge_query_parser = knowledge_subparsers.add_parser("query")
166
+ knowledge_query_parser.add_argument("--phase", help="phase feature")
167
+ knowledge_query_parser.add_argument("--surface", action="append", default=[], help="surface feature; can be repeated")
168
+ knowledge_query_parser.add_argument("--schema", help="schema feature")
169
+ knowledge_query_parser.add_argument("--stack", help="stack feature")
170
+ knowledge_query_parser.add_argument("--query", help="free text query")
171
+ knowledge_query_parser.add_argument("--from-change", help="OpenSpec change name to extract features from")
172
+ knowledge_query_parser.add_argument("--for", dest="target", help="context target for --from-change")
173
+ knowledge_query_parser.add_argument("--max-cards", type=int, help="maximum matches")
174
+ knowledge_query_parser.add_argument("--debug", action="store_true", help="include matched body excerpts")
175
+ knowledge_query_parser.add_argument("--json", action="store_true", help="output JSON")
176
+ knowledge_index_parser = knowledge_subparsers.add_parser("index")
177
+ knowledge_index_parser.add_argument("--team-path", help="team knowledge repository path")
178
+ knowledge_index_parser.add_argument("--json", action="store_true", help="output JSON")
179
+ contract_parser = subparsers.add_parser("contract")
180
+ contract_parser.add_argument("--json", action="store_true", help="output JSON")
181
+ contract_subparsers = contract_parser.add_subparsers(dest="contract_command")
182
+ contract_manifest_parser = contract_subparsers.add_parser("manifest")
183
+ contract_manifest_parser.add_argument("--max-chars", type=int, default=800, help="maximum summary characters per contract")
184
+ contract_manifest_parser.add_argument("--json", action="store_true", help="output JSON")
185
+ contract_summary_parser = contract_subparsers.add_parser("summary")
186
+ contract_summary_parser.add_argument("--change", required=True, help="OpenSpec change name")
187
+ contract_summary_parser.add_argument("--max-chars", type=int, default=800, help="maximum summary characters per contract")
188
+ contract_summary_parser.add_argument("--json", action="store_true", help="output JSON")
189
+ contract_get_parser = contract_subparsers.add_parser("get")
190
+ contract_get_parser.add_argument("--change", required=True, help="OpenSpec change name")
191
+ contract_get_parser.add_argument("--artifact", required=True, help="contract artifact id or path")
192
+ contract_get_parser.add_argument("--section", help="contract section id or title")
193
+ contract_get_parser.add_argument("--max-chars", type=int, default=4000, help="maximum content characters")
194
+ contract_get_parser.add_argument("--raw", action="store_true", help="return raw artifact content when no section is selected")
195
+ contract_get_parser.add_argument("--json", action="store_true", help="output JSON")
196
+ contract_serve_parser = contract_subparsers.add_parser("serve")
197
+ contract_serve_parser.add_argument("--host", default="127.0.0.1", help="host to bind; default: 127.0.0.1")
198
+ contract_serve_parser.add_argument("--port", type=int, default=8765, help="port to bind; default: 8765")
199
+ contract_serve_parser.add_argument("--json", action="store_true", help="output JSON startup metadata")
200
+ id_parser = subparsers.add_parser("id")
201
+ id_parser.add_argument("--json", action="store_true", help="output JSON")
202
+ id_subparsers = id_parser.add_subparsers(dest="id_command")
203
+ id_check_parser = id_subparsers.add_parser("check")
204
+ id_check_parser.add_argument("--json", action="store_true", help="output JSON")
205
+ id_check_parser.add_argument("--fail-on-blocker", action="store_true", help="return non-zero when blockers exist")
206
+ id_next_parser = id_subparsers.add_parser("next")
207
+ id_next_parser.add_argument("--scope", required=True, help="ID scope")
208
+ id_next_parser.add_argument("--type", required=True, help="ID type")
209
+ id_next_parser.add_argument("--json", action="store_true", help="output JSON")
210
+ id_reserve_parser = id_subparsers.add_parser("reserve")
211
+ id_reserve_parser.add_argument("--scope", required=True, help="ID scope")
212
+ id_reserve_parser.add_argument("--type", required=True, help="ID type")
213
+ id_reserve_parser.add_argument("--count", type=int, default=1, help="number of IDs to reserve")
214
+ id_reserve_parser.add_argument("--json", action="store_true", help="output JSON")
215
+ id_activate_parser = id_subparsers.add_parser("activate")
216
+ id_activate_parser.add_argument("id", help="full ID, for example auth:FR-001")
217
+ id_activate_parser.add_argument("--owner", required=True, help="owner document path")
218
+ id_activate_parser.add_argument("--title", required=True, help="ID title")
219
+ id_activate_parser.add_argument("--json", action="store_true", help="output JSON")
220
+ id_deprecate_parser = id_subparsers.add_parser("deprecate")
221
+ id_deprecate_parser.add_argument("id", help="full ID, for example auth:FR-001")
222
+ id_deprecate_parser.add_argument("--replaced-by", action="append", default=[], help="replacement full ID")
223
+ id_deprecate_parser.add_argument("--reason", required=True, help="deprecation reason")
224
+ id_deprecate_parser.add_argument("--json", action="store_true", help="output JSON")
225
+ flow_parser = subparsers.add_parser("flow")
226
+ flow_parser.add_argument("--json", action="store_true", help="output JSON")
227
+ flow_subparsers = flow_parser.add_subparsers(dest="flow_command")
228
+ flow_inspect_parser = flow_subparsers.add_parser("inspect")
229
+ flow_inspect_parser.add_argument("--change", help="OpenSpec change name")
230
+ flow_inspect_parser.add_argument("--json", action="store_true", help="output JSON")
231
+ flow_next_parser = flow_subparsers.add_parser("next")
232
+ flow_next_parser.add_argument("--change", help="OpenSpec change name")
233
+ flow_next_parser.add_argument("--json", action="store_true", help="output JSON")
234
+ gaps_parser = subparsers.add_parser("gaps")
235
+ gaps_parser.add_argument("--change", required=True, help="OpenSpec change name")
236
+ gaps_parser.add_argument("--json", action="store_true", help="output JSON")
237
+ trace_parser = subparsers.add_parser("trace")
238
+ trace_parser.add_argument("id", help="full ID to trace")
239
+ trace_parser.add_argument("--json", action="store_true", help="output JSON")
240
+ get_parser = subparsers.add_parser("get")
241
+ get_parser.add_argument("id", help="full ID to get")
242
+ get_parser.add_argument("--json", action="store_true", help="output JSON")
243
+ args = parser.parse_args()
244
+
245
+ if args.version:
246
+ print(f"aisee {__version__}")
247
+ return 0
248
+
249
+ if args.command == "doctor":
250
+ root = resolve_project_root(Path.cwd())
251
+ result = build_doctor(root)
252
+ print_json(result)
253
+ return exit_code_for(result, fail_on_blocker=args.fail_on_blocker)
254
+
255
+ if args.command == "bootstrap":
256
+ root = resolve_project_root(Path.cwd())
257
+ result = build_bootstrap_apply_response() if args.apply else build_bootstrap_plan(root)
258
+ print_json(result)
259
+ return exit_code_for(result, fail_on_blocker=args.apply)
260
+
261
+ if args.command == "openspec" and args.openspec_command is None:
262
+ print_json(error_response("Use one of: ensure.", "MISSING_SUBCOMMAND"), stderr=True)
263
+ return 2
264
+
265
+ if args.command == "openspec" and args.openspec_command == "ensure":
266
+ root = resolve_project_root(Path.cwd())
267
+ result = run_openspec_init(
268
+ root,
269
+ profile=args.profile,
270
+ tools=args.tools,
271
+ skip_profile=args.skip_profile,
272
+ force=args.force,
273
+ )
274
+ print_json(result)
275
+ return exit_code_for(result, fail_on_blocker=True)
276
+
277
+ if args.command == "plugin":
278
+ root = resolve_project_root(Path.cwd())
279
+ try:
280
+ if args.plugin_command in {None, "inspect"}:
281
+ result = inspect_plugin_assets(root)
282
+ print_json(result)
283
+ return exit_code_for(result, fail_on_blocker=True)
284
+ if args.plugin_command == "path":
285
+ result = plugin_path(root, args.target)
286
+ print_json(result)
287
+ return 0
288
+ if args.plugin_command == "export":
289
+ result = export_plugin_assets(root, args.target, Path(args.dest), force=args.force)
290
+ print_json(result)
291
+ return 0
292
+ except ValueError as error:
293
+ print_json(error_response(str(error)), stderr=True)
294
+ return 2
295
+ print_json(error_response("Use one of: inspect, path, export.", "MISSING_SUBCOMMAND"), stderr=True)
296
+ return 2
297
+
298
+ if args.command == "context" and args.context_command is None:
299
+ print_json(error_response("Use one of: pack.", "MISSING_SUBCOMMAND"), stderr=True)
300
+ return 2
301
+
302
+ if args.command == "context" and args.context_command == "pack":
303
+ try:
304
+ root = resolve_project_root(Path.cwd())
305
+ pack = build_context_pack(root, args.change, args.target)
306
+ if args.knowledge:
307
+ knowledge = build_knowledge_query(root, from_change=args.change, target=args.target)
308
+ pack["knowledge"] = compact_knowledge_for_context_pack(knowledge)
309
+ except ValueError as error:
310
+ print_json(error_response(str(error)), stderr=True)
311
+ return 2
312
+ print_json(pack)
313
+ return 0
314
+
315
+ if args.command == "knowledge" and args.knowledge_command is None:
316
+ print_json(error_response("Use one of: inspect, check, doctor, scaffold, install, update, promote-batch, query, index.", "MISSING_SUBCOMMAND"), stderr=True)
317
+ return 2
318
+
319
+ if args.command == "knowledge":
320
+ root = resolve_project_root(Path.cwd())
321
+ try:
322
+ if args.knowledge_command == "inspect":
323
+ result = build_knowledge_inspect(root)
324
+ elif args.knowledge_command == "check":
325
+ result = build_knowledge_check(root, team_path=args.team_path)
326
+ elif args.knowledge_command == "doctor":
327
+ result = build_knowledge_doctor(root, team_path=args.team_path)
328
+ elif args.knowledge_command == "scaffold":
329
+ result = build_knowledge_scaffold(root, args.dest, force=args.force, update_config=args.update_config, packs=args.pack)
330
+ elif args.knowledge_command == "install":
331
+ result = build_knowledge_install(root, allow_dirty=args.allow_dirty)
332
+ elif args.knowledge_command == "update":
333
+ result = build_knowledge_update(root, allow_dirty=args.allow_dirty)
334
+ elif args.knowledge_command == "promote-batch":
335
+ result = build_knowledge_promote_batch(
336
+ root,
337
+ curation=args.curation,
338
+ team_path=args.team_path,
339
+ pack_id=args.pack,
340
+ category=args.category,
341
+ activate=args.activate,
342
+ )
343
+ elif args.knowledge_command == "query":
344
+ result = build_knowledge_query(
345
+ root,
346
+ phase=args.phase,
347
+ surfaces=args.surface,
348
+ schema=args.schema,
349
+ stack=args.stack,
350
+ query=args.query,
351
+ from_change=args.from_change,
352
+ target=args.target,
353
+ max_cards=args.max_cards,
354
+ debug=args.debug,
355
+ )
356
+ elif args.knowledge_command == "index":
357
+ result = build_knowledge_index(root, write_cache=True, team_path=args.team_path)
358
+ else:
359
+ print_json(error_response("Use one of: inspect, check, doctor, scaffold, install, update, promote-batch, query, index.", "MISSING_SUBCOMMAND"), stderr=True)
360
+ return 2
361
+ except ValueError as error:
362
+ print_json(error_response(str(error), "KNOWLEDGE_ERROR"), stderr=True)
363
+ return 2
364
+ print_json(result)
365
+ return exit_code_for(result, fail_on_blocker=False)
366
+
367
+ if args.command == "contract" and args.contract_command is None:
368
+ print_json(error_response("Use one of: manifest, summary, get, serve.", "MISSING_SUBCOMMAND"), stderr=True)
369
+ return 2
370
+
371
+ if args.command == "contract":
372
+ try:
373
+ root = resolve_project_root(Path.cwd())
374
+ if args.contract_command == "manifest":
375
+ result = build_contract_manifest(root, max_chars=args.max_chars)
376
+ elif args.contract_command == "summary":
377
+ result = build_contract_summary(root, args.change, max_chars=args.max_chars)
378
+ elif args.contract_command == "get":
379
+ result = build_contract_get(
380
+ root,
381
+ args.change,
382
+ args.artifact,
383
+ section=args.section,
384
+ max_chars=args.max_chars,
385
+ raw=args.raw,
386
+ )
387
+ elif args.contract_command == "serve":
388
+ if not args.host:
389
+ print_json(error_response("contract serve host must not be empty", "CONTRACT_CONTEXT_ERROR"), stderr=True)
390
+ return 2
391
+ startup = {
392
+ "schema_version": "1.0",
393
+ "status": "serving",
394
+ "host": args.host,
395
+ "port": args.port,
396
+ "warning": lan_warning(args.host),
397
+ }
398
+ print_json(startup, stderr=True)
399
+ serve_contract_context(root, host=args.host, port=args.port)
400
+ return 0
401
+ else:
402
+ print_json(error_response("Use one of: manifest, summary, get, serve.", "MISSING_SUBCOMMAND"), stderr=True)
403
+ return 2
404
+ except ValueError as error:
405
+ print_json(error_response(str(error), "CONTRACT_CONTEXT_ERROR"), stderr=True)
406
+ return 2
407
+ print_json(result)
408
+ return 0
409
+
410
+ if args.command == "gaps":
411
+ root = resolve_project_root(Path.cwd())
412
+ pack = build_context_pack(root, args.change, "aisee-verify")
413
+ result = {
414
+ "schema_version": pack["schema_version"],
415
+ "change": pack["change"],
416
+ "result": summarize_gaps(pack["gaps"]),
417
+ "gaps": pack["gaps"],
418
+ "guardrails": pack["guardrails"],
419
+ "meta": {
420
+ "command": f"aisee gaps --change {args.change} --json",
421
+ "source_context_target": "aisee-verify",
422
+ },
423
+ }
424
+ print_json(result)
425
+ return 0
426
+
427
+ if args.command == "change" and args.change_command is None:
428
+ print_json(error_response("Use one of: inspect, author-check, verify-check, archive-check.", "MISSING_SUBCOMMAND"), stderr=True)
429
+ return 2
430
+
431
+ if args.command == "change" and args.change_command == "inspect":
432
+ root = resolve_project_root(Path.cwd())
433
+ result = build_change_inspect(root, args.change)
434
+ print_json(result)
435
+ return 0
436
+
437
+ if args.command == "change" and args.change_command == "author-check":
438
+ root = resolve_project_root(Path.cwd())
439
+ result = build_author_check(root, args.change)
440
+ print_json(result)
441
+ return 0
442
+
443
+ if args.command == "change" and args.change_command == "verify-check":
444
+ root = resolve_project_root(Path.cwd())
445
+ result = build_verify_check(root, args.change)
446
+ print_json(result)
447
+ return exit_code_for(result, fail_on_blocker=args.fail_on_blocker)
448
+
449
+ if args.command == "change" and args.change_command == "archive-check":
450
+ root = resolve_project_root(Path.cwd())
451
+ result = build_archive_check(root, args.change)
452
+ print_json(result)
453
+ return exit_code_for(result, fail_on_blocker=args.fail_on_blocker)
454
+
455
+ if args.command == "sources":
456
+ root = resolve_project_root(Path.cwd())
457
+ try:
458
+ if args.sources_command in {None, "list"}:
459
+ result = list_sources(root)
460
+ print_json(result)
461
+ return 0
462
+ if args.sources_command == "check":
463
+ result = check_sources(root)
464
+ print_json(result)
465
+ return exit_code_for(result, fail_on_blocker=args.fail_on_blocker)
466
+ if args.sources_command == "add":
467
+ result = add_source(root, args.scope, args.type, args.path, args.template, args.parser)
468
+ print_json(result)
469
+ return 0
470
+ if args.sources_command == "remove":
471
+ result = remove_source(root, args.scope, args.type, args.path)
472
+ print_json(result)
473
+ return 0
474
+ except ValueError as error:
475
+ print_json(error_response(str(error)), stderr=True)
476
+ return 2
477
+ print_json(error_response("Use one of: list, check, add, remove.", "MISSING_SUBCOMMAND"), stderr=True)
478
+ return 2
479
+
480
+ if args.command == "schemas":
481
+ root = resolve_project_root(Path.cwd())
482
+ try:
483
+ if args.schemas_command in {None, "list"}:
484
+ result = list_schema_packs(root)
485
+ print_json(result)
486
+ return 0
487
+ if args.schemas_command == "check":
488
+ result = check_schema_packs(root)
489
+ print_json(result)
490
+ return exit_code_for(result, fail_on_blocker=args.fail_on_blocker)
491
+ if args.schemas_command == "install":
492
+ selected = ["*"] if args.all else args.schema
493
+ result = install_schema_packs(root, selected, force=args.force)
494
+ print_json(result)
495
+ return 0
496
+ except ValueError as error:
497
+ print_json(error_response(str(error)), stderr=True)
498
+ return 2
499
+ print_json(error_response("Use one of: list, check, install.", "MISSING_SUBCOMMAND"), stderr=True)
500
+ return 2
501
+
502
+ if args.command == "index":
503
+ root = resolve_project_root(Path.cwd())
504
+ result = build_index(root, write_cache=True)
505
+ print_json(result)
506
+ return exit_code_for(result, fail_on_blocker=args.fail_on_blocker)
507
+
508
+ if args.command == "id":
509
+ root = resolve_project_root(Path.cwd())
510
+ try:
511
+ if args.id_command == "check":
512
+ result = check_registry(root)
513
+ elif args.id_command == "next":
514
+ result = next_id(root, args.scope, args.type)
515
+ elif args.id_command == "reserve":
516
+ result = reserve_ids(root, args.scope, args.type, args.count)
517
+ elif args.id_command == "activate":
518
+ result = activate_id(root, args.id, args.owner, args.title)
519
+ elif args.id_command == "deprecate":
520
+ result = deprecate_id(root, args.id, args.replaced_by, args.reason)
521
+ else:
522
+ print_json(error_response("Use one of: check, next, reserve, activate, deprecate.", "MISSING_SUBCOMMAND"), stderr=True)
523
+ return 2
524
+ except ValueError as error:
525
+ print_json(error_response(str(error)), stderr=True)
526
+ return 2
527
+ print_json(result)
528
+ fail_on_blocker = bool(getattr(args, "fail_on_blocker", False))
529
+ return exit_code_for(result, fail_on_blocker=fail_on_blocker)
530
+
531
+ if args.command == "trace":
532
+ root = resolve_project_root(Path.cwd())
533
+ try:
534
+ result = trace_id(root, args.id)
535
+ except ValueError as error:
536
+ print_json(error_response(str(error)), stderr=True)
537
+ return 2
538
+ print_json(result)
539
+ return 0
540
+
541
+ if args.command == "get":
542
+ root = resolve_project_root(Path.cwd())
543
+ try:
544
+ result = get_id(root, args.id)
545
+ except ValueError as error:
546
+ print_json(error_response(str(error)), stderr=True)
547
+ return 2
548
+ print_json(result)
549
+ return 0
550
+
551
+ if args.command == "flow":
552
+ root = resolve_project_root(Path.cwd())
553
+ if args.flow_command is None:
554
+ print_json(error_response("Use one of: inspect, next.", "MISSING_SUBCOMMAND"), stderr=True)
555
+ return 2
556
+ result = build_flow(root, change=getattr(args, "change", None), command=args.flow_command)
557
+ print_json(result)
558
+ return 0
559
+
560
+ print_json(error_response("Use a supported Aisee command.", "MISSING_COMMAND"), stderr=True)
561
+ return 2
562
+
563
+
564
+ def compact_knowledge_for_context_pack(knowledge: dict) -> dict:
565
+ payload = knowledge.get("knowledge", {})
566
+ meta = knowledge.get("meta", {})
567
+ return {
568
+ "status": knowledge.get("status"),
569
+ "enabled": payload.get("enabled"),
570
+ "source": payload.get("source"),
571
+ "matches": payload.get("matches", []),
572
+ "summary": knowledge.get("summary", {}),
573
+ "issues": knowledge.get("issues", []),
574
+ "meta": {
575
+ "cache_is_fact_source": meta.get("cache_is_fact_source", False),
576
+ "full_card_body_read": meta.get("full_card_body_read", False),
577
+ },
578
+ }
579
+
580
+
581
+ def summarize_gaps(gaps: list[dict[str, object]]) -> dict[str, int | str]:
582
+ blocker = sum(1 for gap in gaps if gap.get("severity") == "blocker")
583
+ risk = sum(1 for gap in gaps if gap.get("severity") == "risk")
584
+ info = sum(1 for gap in gaps if gap.get("severity") == "info")
585
+ status = "blocked" if blocker else ("risk" if risk else "clear")
586
+ return {
587
+ "status": status,
588
+ "blocker": blocker,
589
+ "risk": risk,
590
+ "info": info,
591
+ "total": len(gaps),
592
+ }
593
+
594
+
595
+ if __name__ == "__main__":
596
+ raise SystemExit(main())