@guanlin4924/devflow-pi 0.1.0

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 (254) hide show
  1. package/README.md +164 -0
  2. package/docs/OMP-NATIVE-ARCHITECTURE.md +104 -0
  3. package/package.json +40 -0
  4. package/plugins/devflow-core/extensions/devflow-core.ts +1642 -0
  5. package/plugins/devflow-core/package.json +14 -0
  6. package/plugins/devflow-core/runtime/hooks/context_sync_gate.py +174 -0
  7. package/plugins/devflow-core/runtime/hooks/hook_common.py +696 -0
  8. package/plugins/devflow-core/runtime/hooks/index_gate.py +63 -0
  9. package/plugins/devflow-core/runtime/hooks/injection_code_specification.py +7 -0
  10. package/plugins/devflow-core/runtime/hooks/post_tool.py +44 -0
  11. package/plugins/devflow-core/runtime/hooks/start.py +288 -0
  12. package/plugins/devflow-core/skills/workflow-orchestrator/SKILL.md +265 -0
  13. package/plugins/devflow-core/skills/workflow-orchestrator/agents/openai.yaml +4 -0
  14. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/advance_state.rb +520 -0
  15. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/control_io.rb +42 -0
  16. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/init_state.rb +138 -0
  17. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/init_workflow.rb +121 -0
  18. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/inspect_state.rb +553 -0
  19. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/manage_lessons.rb +219 -0
  20. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/sync_artifacts.rb +168 -0
  21. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/update_triage_route.rb +110 -0
  22. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/validate_state.rb +565 -0
  23. package/plugins/devflow-core/skills/workflow-orchestrator/templates/feature-development.yaml +783 -0
  24. package/plugins/devflow-core/skills/workflow-orchestrator/templates/uat-remediation.yaml +143 -0
  25. package/plugins/devflow-core/skills/workflow-orchestrator/templates/workflows-README.md +10 -0
  26. package/plugins/devflow-core/skills/workflow-pipeline/SKILL.md +117 -0
  27. package/plugins/devflow-core/skills/workflow-pipeline/references/pipeline-flow.md +167 -0
  28. package/plugins/devflow-core/skills/workflow-pipeline/references/slice-safety-guide.md +125 -0
  29. package/plugins/devflow-core/skills/workflow-project-context/SKILL.md +819 -0
  30. package/plugins/devflow-core/skills/workflow-project-context/assets/agents-md-template.md +25 -0
  31. package/plugins/devflow-core/skills/workflow-project-context/assets/codebase-backend-spec-template.md +68 -0
  32. package/plugins/devflow-core/skills/workflow-project-context/assets/codebase-frontend-spec-template.md +64 -0
  33. package/plugins/devflow-core/skills/workflow-project-context/assets/codebase-navigation-template.md +168 -0
  34. package/plugins/devflow-core/skills/workflow-project-context/assets/context-domain-index-template.md +43 -0
  35. package/plugins/devflow-core/skills/workflow-project-context/assets/context-spec-index-template.md +45 -0
  36. package/plugins/devflow-core/skills/workflow-project-context/assets/execution-contract-template.md +57 -0
  37. package/plugins/devflow-core/skills/workflow-project-context/assets/navigation-index-template.md +40 -0
  38. package/plugins/devflow-core/skills/workflow-project-context/assets/project-initialization-template.md +109 -0
  39. package/plugins/devflow-core/skills/workflow-project-context/assets/rules-index-template.md +80 -0
  40. package/plugins/devflow-core/skills/workflow-project-context/assets/run-manifest-template.json +40 -0
  41. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/directory-structure.md +46 -0
  42. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/engine.md +46 -0
  43. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/errors.md +46 -0
  44. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/locator.md +46 -0
  45. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/model.md +46 -0
  46. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/repository.md +46 -0
  47. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/router.md +46 -0
  48. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/scheduler.md +46 -0
  49. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/schema.md +46 -0
  50. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/service.md +46 -0
  51. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/backend/testing.md +46 -0
  52. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/frontend/api-client.md +46 -0
  53. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/frontend/case-editor.md +46 -0
  54. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/frontend/components.md +46 -0
  55. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/frontend/directory-structure.md +46 -0
  56. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/frontend/forms.md +46 -0
  57. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/frontend/routing.md +46 -0
  58. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/frontend/state.md +46 -0
  59. package/plugins/devflow-core/skills/workflow-project-context/assets/spec-templates/frontend/testing.md +46 -0
  60. package/plugins/devflow-core/skills/workflow-project-context/assets/stack-spec-template.md +106 -0
  61. package/plugins/devflow-core/skills/workflow-project-context/assets/state-template.md +77 -0
  62. package/plugins/devflow-core/skills/workflow-project-context/assets/toolchain-template.md +37 -0
  63. package/plugins/devflow-core/skills/workflow-project-context/references/navigation-guide.md +262 -0
  64. package/plugins/devflow-core/skills/workflow-project-context/scripts/validate_initialization.py +545 -0
  65. package/plugins/devflow-design/agents/contract-auditor.md +18 -0
  66. package/plugins/devflow-design/extensions/devflow-design.ts +47 -0
  67. package/plugins/devflow-design/package.json +14 -0
  68. package/plugins/devflow-design/skills/workflow-api-call-guide/SKILL.md +142 -0
  69. package/plugins/devflow-design/skills/workflow-api-contract/SKILL.md +150 -0
  70. package/plugins/devflow-design/skills/workflow-api-supplement/SKILL.md +121 -0
  71. package/plugins/devflow-design/skills/workflow-backend-tech-spec/SKILL.md +257 -0
  72. package/plugins/devflow-design/skills/workflow-backend-tech-spec/assets/adr-template.md +57 -0
  73. package/plugins/devflow-design/skills/workflow-backend-tech-spec/assets/backend-spec-template.md +205 -0
  74. package/plugins/devflow-design/skills/workflow-backend-tech-spec/references/affected-module-exploration.md +59 -0
  75. package/plugins/devflow-design/skills/workflow-backend-tech-spec/references/backend-conventions.md +30 -0
  76. package/plugins/devflow-design/skills/workflow-backend-tech-spec/references/code-explore-guide.md +40 -0
  77. package/plugins/devflow-design/skills/workflow-backend-tech-spec/references/project-rule-contract.md +66 -0
  78. package/plugins/devflow-design/skills/workflow-design-rule-pack/SKILL.md +91 -0
  79. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/index.md +71 -0
  80. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/recommendations/accessibility.md +31 -0
  81. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/recommendations/component-library.md +31 -0
  82. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/recommendations/design-systems.md +47 -0
  83. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/recommendations/responsive-grid.md +29 -0
  84. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/recommendations/stack-guidelines.md +31 -0
  85. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/recommendations/ux-patterns.md +40 -0
  86. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tokens/project-tokens.md +19 -0
  87. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/SKILL.md +377 -0
  88. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/charts.csv +26 -0
  89. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/colors.csv +97 -0
  90. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/icons.csv +101 -0
  91. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/landing.csv +31 -0
  92. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/products.csv +97 -0
  93. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/react-performance.csv +45 -0
  94. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  95. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  96. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  97. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  98. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  99. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  100. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  101. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  102. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/react.csv +54 -0
  103. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  104. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  105. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  106. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  107. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/styles.csv +68 -0
  108. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/typography.csv +58 -0
  109. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  110. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  111. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/data/web-interface.csv +31 -0
  112. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/scripts/core.py +253 -0
  113. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/scripts/design_system.py +1067 -0
  114. package/plugins/devflow-design/skills/workflow-design-rule-pack/assets/design/tools/ui-ux-pro-max/scripts/search.py +114 -0
  115. package/plugins/devflow-design/skills/workflow-design-rule-pack/scripts/install.py +67 -0
  116. package/plugins/devflow-design/skills/workflow-feature-breakdown/SKILL.md +370 -0
  117. package/plugins/devflow-design/skills/workflow-feature-breakdown/assets/admin-system-template.md +57 -0
  118. package/plugins/devflow-design/skills/workflow-feature-breakdown/assets/api-service-template.md +42 -0
  119. package/plugins/devflow-design/skills/workflow-feature-breakdown/assets/c-end-system-template.md +25 -0
  120. package/plugins/devflow-design/skills/workflow-feature-breakdown/assets/output-template.md +139 -0
  121. package/plugins/devflow-design/skills/workflow-feature-breakdown/references/bug-rules.md +12 -0
  122. package/plugins/devflow-design/skills/workflow-feature-breakdown/references/exception-checklist.md +31 -0
  123. package/plugins/devflow-design/skills/workflow-feature-breakdown/references/trace-integrity-guide.md +153 -0
  124. package/plugins/devflow-design/skills/workflow-feature-breakdown/references/writing-guide.md +92 -0
  125. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/SKILL.md +223 -0
  126. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/assets/frontend-spec-template.md +204 -0
  127. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/references/affected-module-exploration.md +58 -0
  128. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/references/component-patterns.md +42 -0
  129. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/references/frontend-conventions.md +28 -0
  130. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/references/frontend-stack-slots/common-web.md +53 -0
  131. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/references/frontend-stack-slots/next.md +40 -0
  132. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/references/frontend-stack-slots/react.md +41 -0
  133. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/references/frontend-stack-slots/vue.md +41 -0
  134. package/plugins/devflow-design/skills/workflow-frontend-tech-spec/references/project-rule-contract.md +95 -0
  135. package/plugins/devflow-design/skills/workflow-integration-verify/SKILL.md +172 -0
  136. package/plugins/devflow-design/skills/workflow-ui-spec/SKILL.md +302 -0
  137. package/plugins/devflow-design/skills/workflow-ui-spec/assets/ui-spec-template.md +244 -0
  138. package/plugins/devflow-design/skills/workflow-ui-spec/references/affected-module-exploration.md +55 -0
  139. package/plugins/devflow-implementation/agents/implementation-worker.md +20 -0
  140. package/plugins/devflow-implementation/package.json +6 -0
  141. package/plugins/devflow-implementation/skills/workflow-bug-fix/SKILL.md +124 -0
  142. package/plugins/devflow-implementation/skills/workflow-bug-fix/references/INDEX.md +13 -0
  143. package/plugins/devflow-implementation/skills/workflow-bug-fix/references/adversarial-review.md +35 -0
  144. package/plugins/devflow-implementation/skills/workflow-bug-fix/references/first-principles.md +26 -0
  145. package/plugins/devflow-implementation/skills/workflow-bug-fix/references/lesson-format.md +28 -0
  146. package/plugins/devflow-implementation/skills/workflow-bug-fix/references/root-cause-ladder.md +51 -0
  147. package/plugins/devflow-implementation/skills/workflow-bug-fix/references/seam-analysis.md +30 -0
  148. package/plugins/devflow-implementation/skills/workflow-change-plan/SKILL.md +160 -0
  149. package/plugins/devflow-implementation/skills/workflow-change-plan/references/code-conventions.md +33 -0
  150. package/plugins/devflow-implementation/skills/workflow-change-plan/references/ddl-guidelines.md +60 -0
  151. package/plugins/devflow-implementation/skills/workflow-change-plan/references/output-template.md +217 -0
  152. package/plugins/devflow-implementation/skills/workflow-change-plan/references/project-rule-contract.md +55 -0
  153. package/plugins/devflow-implementation/skills/workflow-execute-phase/SKILL.md +271 -0
  154. package/plugins/devflow-implementation/skills/workflow-execute-phase/references/execute-phase.md +1251 -0
  155. package/plugins/devflow-implementation/skills/workflow-execute-phase/references/ui-brand.md +160 -0
  156. package/plugins/devflow-intel/agents/project-scout.md +27 -0
  157. package/plugins/devflow-intel/extensions/devflow-intel.ts +104 -0
  158. package/plugins/devflow-intel/package.json +14 -0
  159. package/plugins/devflow-intel/skills/code-index-query/SKILL.md +37 -0
  160. package/plugins/devflow-intel/skills/code-index-query/references/query-patterns.md +27 -0
  161. package/plugins/devflow-intel/skills/workflow-code-index/SKILL.md +68 -0
  162. package/plugins/devflow-intel/skills/workflow-code-index/references/adapter-contract.md +38 -0
  163. package/plugins/devflow-intel/skills/workflow-code-index/references/audit-checklist.md +10 -0
  164. package/plugins/devflow-intel/skills/workflow-code-index/references/confidence-rules.md +43 -0
  165. package/plugins/devflow-intel/skills/workflow-code-index/references/data-model.md +74 -0
  166. package/plugins/devflow-intel/skills/workflow-code-index/references/discovery.md +24 -0
  167. package/plugins/devflow-intel/skills/workflow-code-index/references/query-guide.md +20 -0
  168. package/plugins/devflow-intel/skills/workflow-code-index/scripts/adapters/__init__.py +1 -0
  169. package/plugins/devflow-intel/skills/workflow-code-index/scripts/adapters/base.py +30 -0
  170. package/plugins/devflow-intel/skills/workflow-code-index/scripts/adapters/generic_text.py +287 -0
  171. package/plugins/devflow-intel/skills/workflow-code-index/scripts/adapters/registry.py +17 -0
  172. package/plugins/devflow-intel/skills/workflow-code-index/scripts/code_index.py +437 -0
  173. package/plugins/devflow-intel/skills/workflow-code-index/scripts/core/__init__.py +1 -0
  174. package/plugins/devflow-intel/skills/workflow-code-index/scripts/core/discovery.py +139 -0
  175. package/plugins/devflow-intel/skills/workflow-code-index/scripts/core/hashing.py +11 -0
  176. package/plugins/devflow-intel/skills/workflow-code-index/scripts/core/scanner.py +115 -0
  177. package/plugins/devflow-intel/skills/workflow-code-index/scripts/core/schema.py +123 -0
  178. package/plugins/devflow-intel/skills/workflow-code-index/scripts/validators/__init__.py +1 -0
  179. package/plugins/devflow-intel/skills/workflow-code-index/scripts/validators/project_binding_check.py +66 -0
  180. package/plugins/devflow-intel/skills/workflow-code-index/scripts/validators/relation_check.py +36 -0
  181. package/plugins/devflow-intel/skills/workflow-code-index/scripts/validators/schema_validate.py +11 -0
  182. package/plugins/devflow-intel/skills/workflow-code-index/scripts/validators/stale_check.py +42 -0
  183. package/plugins/devflow-intel/skills/workflow-code-index/scripts/writers/__init__.py +1 -0
  184. package/plugins/devflow-intel/skills/workflow-code-index/scripts/writers/jsonl_writer.py +25 -0
  185. package/plugins/devflow-intel/skills/workflow-code-index/scripts/writers/markdown_writer.py +106 -0
  186. package/plugins/devflow-intel/skills/workflow-code-index/scripts/writers/sqlite_writer.py +143 -0
  187. package/plugins/devflow-intel/skills/workflow-context-sync/SKILL.md +381 -0
  188. package/plugins/devflow-intel/skills/workflow-context-sync/agents/openai.yaml +4 -0
  189. package/plugins/devflow-intel/skills/workflow-context-sync/scripts/context_sync_cursor.py +241 -0
  190. package/plugins/devflow-intel/skills/workflow-update-navigation/SKILL.md +186 -0
  191. package/plugins/devflow-intel/skills/workflow-update-navigation/references/incremental-update-guide.md +47 -0
  192. package/plugins/devflow-quality/agents/code-reviewer.md +18 -0
  193. package/plugins/devflow-quality/agents/verification-runner.md +21 -0
  194. package/plugins/devflow-quality/extensions/devflow-quality.ts +59 -0
  195. package/plugins/devflow-quality/package.json +14 -0
  196. package/plugins/devflow-quality/skills/code-review/SKILL.md +288 -0
  197. package/plugins/devflow-quality/skills/code-review/references/cross-layer-checklist.md +70 -0
  198. package/plugins/devflow-quality/skills/code-review/references/dao-checklist.md +70 -0
  199. package/plugins/devflow-quality/skills/code-review/references/handler-checklist.md +48 -0
  200. package/plugins/devflow-quality/skills/code-review/references/repository-checklist.md +44 -0
  201. package/plugins/devflow-quality/skills/code-review/references/service-checklist.md +57 -0
  202. package/plugins/devflow-quality/skills/code-review/references/spec-checklist.md +34 -0
  203. package/plugins/devflow-quality/skills/code-review/references/vo-checklist.md +26 -0
  204. package/plugins/devflow-quality/skills/workflow-audit-milestone/SKILL.md +31 -0
  205. package/plugins/devflow-quality/skills/workflow-audit-milestone/references/audit-milestone.md +328 -0
  206. package/plugins/devflow-quality/skills/workflow-complete-milestone/SKILL.md +132 -0
  207. package/plugins/devflow-quality/skills/workflow-complete-milestone/assets/milestone-archive.md +123 -0
  208. package/plugins/devflow-quality/skills/workflow-complete-milestone/references/complete-milestone.md +775 -0
  209. package/plugins/devflow-quality/skills/workflow-complete-milestone/references/milestone-archive.md +123 -0
  210. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/SKILL.md +126 -0
  211. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/api-mainflow-rules.md +27 -0
  212. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/codebase-discovery.md +54 -0
  213. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/intermediate-format.md +244 -0
  214. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/mainflow-selection.md +36 -0
  215. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/project-dsl-contract.md +190 -0
  216. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/ui-mainflow-rules.md +110 -0
  217. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/compile_dsl.py +583 -0
  218. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/discover_codebases.py +199 -0
  219. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/normalize_case_payloads.py +177 -0
  220. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/validate_case_payloads.py +370 -0
  221. package/plugins/devflow-quality/skills/workflow-verify-work/SKILL.md +106 -0
  222. package/plugins/devflow-quality/skills/workflow-verify-work/assets/UAT.md +265 -0
  223. package/plugins/devflow-quality/skills/workflow-verify-work/references/verify-work.md +759 -0
  224. package/plugins/devflow-requirements/agents/requirements-auditor.md +20 -0
  225. package/plugins/devflow-requirements/package.json +6 -0
  226. package/plugins/devflow-requirements/skills/requirement-feasibility-review/SKILL.md +219 -0
  227. package/plugins/devflow-requirements/skills/requirement-feasibility-review/agents/openai.yaml +4 -0
  228. package/plugins/devflow-requirements/skills/requirement-feasibility-review/references/review-method.md +257 -0
  229. package/plugins/devflow-requirements/skills/requirement-feasibility-review/references/review-template.md +80 -0
  230. package/plugins/devflow-requirements/skills/workflow-demand-clarify/SKILL.md +325 -0
  231. package/plugins/devflow-requirements/skills/workflow-domain-modeling/SKILL.md +163 -0
  232. package/plugins/devflow-requirements/skills/workflow-requirement-baseline/SKILL.md +748 -0
  233. package/plugins/devflow-requirements/skills/workflow-requirement-baseline/assets/baseline-template.md +281 -0
  234. package/plugins/devflow-requirements/skills/workflow-requirement-baseline/references/antipatterns.md +69 -0
  235. package/plugins/devflow-requirements/skills/workflow-requirement-baseline/references/challenge-review-guide.md +158 -0
  236. package/plugins/devflow-requirements/skills/workflow-requirement-baseline/references/decomposition-guide.md +115 -0
  237. package/plugins/devflow-requirements/skills/workflow-requirement-baseline/references/project-context-guide.md +119 -0
  238. package/plugins/devflow-requirements/skills/workflow-requirement-baseline/references/questioning.md +76 -0
  239. package/plugins/devflow-requirements/skills/workflow-requirement-baseline/references/requirement-review-checklist.md +115 -0
  240. package/plugins/devflow-requirements/skills/workflow-requirement-triage/SKILL.md +204 -0
  241. package/plugins/devflow-requirements/skills/workflow-wayfinder/SKILL.md +183 -0
  242. package/src/cli.ts +76 -0
  243. package/src/constants.ts +15 -0
  244. package/src/doctor.ts +66 -0
  245. package/src/paths.ts +37 -0
  246. package/src/platform-extension.ts +46 -0
  247. package/src/project-context.ts +165 -0
  248. package/src/runtime.ts +167 -0
  249. package/src/usage-stats.ts +101 -0
  250. package/templates/commands/start.md +58 -0
  251. package/templates/omp/AGENTS.md +36 -0
  252. package/templates/omp/config.yml +112 -0
  253. package/templates/omp/hook-config.json +18 -0
  254. package/templates/omp/index-policy.json +57 -0
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env python3
2
+ """Discover codebases from .planning navigation and .context spec indexes."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ import sys
9
+ from datetime import datetime, timezone
10
+ from pathlib import Path
11
+
12
+
13
+ NAV_INDEX = Path(".planning/navigation/INDEX.md")
14
+ SPEC_INDEX = Path(".context/spec/index.md")
15
+
16
+
17
+ def clean_cell(value: str) -> str:
18
+ value = value.strip()
19
+ if value.startswith("`") and value.endswith("`"):
20
+ value = value[1:-1]
21
+ value = value.replace("`", "").strip()
22
+ return value
23
+
24
+
25
+ def parse_markdown_tables(path: Path) -> list[list[dict[str, str]]]:
26
+ lines = path.read_text(encoding="utf-8").splitlines()
27
+ tables: list[list[dict[str, str]]] = []
28
+ idx = 0
29
+ while idx < len(lines):
30
+ line = lines[idx].strip()
31
+ if not line.startswith("|") or idx + 1 >= len(lines):
32
+ idx += 1
33
+ continue
34
+ sep = lines[idx + 1].strip()
35
+ if not sep.startswith("|") or "---" not in sep:
36
+ idx += 1
37
+ continue
38
+ headers = [clean_cell(cell) for cell in line.strip("|").split("|")]
39
+ rows: list[dict[str, str]] = []
40
+ idx += 2
41
+ while idx < len(lines) and lines[idx].strip().startswith("|"):
42
+ cells = [clean_cell(cell) for cell in lines[idx].strip().strip("|").split("|")]
43
+ if len(cells) == len(headers):
44
+ rows.append(dict(zip(headers, cells)))
45
+ idx += 1
46
+ tables.append(rows)
47
+ return tables
48
+
49
+
50
+ def first_table_with(path: Path, required: set[str]) -> list[dict[str, str]]:
51
+ for table in parse_markdown_tables(path):
52
+ if table and required.issubset(set(table[0].keys())):
53
+ return table
54
+ return []
55
+
56
+
57
+ def domain_for(type_value: str, spec_path: str) -> str:
58
+ lowered = f"{type_value} {spec_path}".lower()
59
+ if "frontend" in lowered or "前端" in lowered:
60
+ return "frontend"
61
+ if "backend" in lowered or "后端" in lowered:
62
+ return "backend"
63
+ return "unknown"
64
+
65
+
66
+ def scan_profile(domain: str) -> dict[str, list[str]]:
67
+ if domain == "backend":
68
+ return {
69
+ "source_kinds": [
70
+ "router/controller",
71
+ "service/usecase",
72
+ "schema/dto/request/response",
73
+ "model/entity",
74
+ "API entry",
75
+ ]
76
+ }
77
+ if domain == "frontend":
78
+ return {
79
+ "source_kinds": [
80
+ "router",
81
+ "pages/views",
82
+ "api/client",
83
+ "types/contracts",
84
+ "stores/hooks/components",
85
+ ]
86
+ }
87
+ return {"source_kinds": []}
88
+
89
+
90
+ def fail(message: str) -> None:
91
+ print(f"ERROR: {message}", file=sys.stderr)
92
+ raise SystemExit(2)
93
+
94
+
95
+ def discover() -> dict:
96
+ if not NAV_INDEX.exists():
97
+ fail(f"missing {NAV_INDEX}")
98
+ if not SPEC_INDEX.exists():
99
+ fail(f"missing {SPEC_INDEX}")
100
+
101
+ nav_rows = first_table_with(NAV_INDEX, {"Name", "Path", "Type", "Navigation"})
102
+ # The actual spec/index.md uses "Codebase Spec" and "Stack Spec" column names
103
+ spec_rows = first_table_with(SPEC_INDEX, {"Codebase", "Type", "Codebase Spec", "Stack Spec"})
104
+ if not spec_rows:
105
+ spec_rows = first_table_with(SPEC_INDEX, {"Codebase", "Type", "Navigation", "Stack Key", "Spec"})
106
+
107
+ if not nav_rows:
108
+ fail(f"no codebase registry table found in {NAV_INDEX}")
109
+ if not spec_rows:
110
+ fail(f"no codebase specs table found in {SPEC_INDEX}")
111
+
112
+ # Normalize column names: map "Codebase Spec" -> "Spec", "Stack Spec" -> "Stack Key"
113
+ normalized_spec_rows = []
114
+ for row in spec_rows:
115
+ nr = {}
116
+ for k, v in row.items():
117
+ if k in ("Codebase Spec", "Spec"):
118
+ nr["Spec"] = v
119
+ elif k in ("Stack Spec", "Stack Key"):
120
+ nr["Stack Key"] = v
121
+ else:
122
+ nr[k] = v
123
+ normalized_spec_rows.append(nr)
124
+ spec_rows = normalized_spec_rows
125
+
126
+ specs_by_name = {row["Codebase"]: row for row in spec_rows}
127
+ codebases: list[dict] = []
128
+ errors: list[str] = []
129
+
130
+ for row in nav_rows:
131
+ name = row.get("Name", "").strip()
132
+ if not name or name not in specs_by_name:
133
+ continue
134
+ spec_row = specs_by_name[name]
135
+ root = row.get("Path", "").strip()
136
+ navigation = row.get("Navigation", "").strip() or spec_row.get("Navigation", "").strip()
137
+ spec = spec_row.get("Spec", "").strip()
138
+ type_value = spec_row.get("Type", "").strip() or row.get("Type", "").strip()
139
+ stack_key = spec_row.get("Stack Key", "").strip()
140
+
141
+ for label, value in (("root", root), ("navigation", navigation), ("spec", spec)):
142
+ if not value:
143
+ errors.append(f"{name}: missing {label}")
144
+
145
+ root_path = Path(root)
146
+ nav_path = Path(navigation)
147
+ spec_path = Path(spec)
148
+ if root and not root_path.exists():
149
+ errors.append(f"{name}: root does not exist: {root}")
150
+ if navigation and not nav_path.exists():
151
+ errors.append(f"{name}: navigation file does not exist: {navigation}")
152
+ if spec and not spec_path.exists():
153
+ errors.append(f"{name}: spec file does not exist: {spec}")
154
+
155
+ domain = domain_for(type_value, spec)
156
+ codebases.append(
157
+ {
158
+ "name": name,
159
+ "type": type_value,
160
+ "domain": domain,
161
+ "root": root.rstrip("/"),
162
+ "navigation": navigation,
163
+ "spec": spec,
164
+ "stack_key": stack_key,
165
+ "role": row.get("Role", "").strip(),
166
+ "scan_profile": scan_profile(domain),
167
+ }
168
+ )
169
+
170
+ if errors:
171
+ fail("; ".join(errors))
172
+ if not codebases:
173
+ fail("no valid codebases discovered")
174
+
175
+ return {
176
+ "generated_at": datetime.now(timezone.utc).isoformat(),
177
+ "sources": {
178
+ "navigation_index": str(NAV_INDEX),
179
+ "spec_index": str(SPEC_INDEX),
180
+ },
181
+ "codebases": codebases,
182
+ }
183
+
184
+
185
+ def main() -> int:
186
+ parser = argparse.ArgumentParser()
187
+ parser.add_argument("--output", required=True, help="Path to write codebase-discovery.json")
188
+ args = parser.parse_args()
189
+
190
+ data = discover()
191
+ output = Path(args.output)
192
+ output.parent.mkdir(parents=True, exist_ok=True)
193
+ output.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
194
+ print(json.dumps(data, ensure_ascii=False, indent=2))
195
+ return 0
196
+
197
+
198
+ if __name__ == "__main__":
199
+ raise SystemExit(main())
@@ -0,0 +1,177 @@
1
+ #!/usr/bin/env python3
2
+ """Normalize draft mainflow case payloads into import payloads."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ import re
9
+ from copy import deepcopy
10
+ from datetime import datetime, timezone
11
+ from pathlib import Path
12
+ from typing import Any
13
+
14
+
15
+ MAINFLOW_TAGS = {"api-mainflow", "ui-mainflow"}
16
+ DEFAULT_UI_STRATEGY = {"mode": "structured_first", "fallback": "midscene"}
17
+ VALID_TARGET_KEYS = {"css", "xpath", "label", "placeholder", "role", "name", "near_text", "exact"}
18
+
19
+
20
+ def slugify(value: str, fallback: str) -> str:
21
+ text = re.sub(r"[^0-9A-Za-z_\-\u4e00-\u9fff]+", "_", value.strip()).strip("_")
22
+ return text or fallback
23
+
24
+
25
+ def load_payload(path: Path) -> dict[str, Any]:
26
+ raw = json.loads(path.read_text(encoding="utf-8"))
27
+ if isinstance(raw, list):
28
+ return {"metadata": {}, "cases": raw}
29
+ if isinstance(raw, dict) and isinstance(raw.get("cases"), list):
30
+ return raw
31
+ raise ValueError("draft payload must be a JSON object with cases[] or a JSON array")
32
+
33
+
34
+ def clean_empty(value: Any, keep_empty_list_keys: set[str] | None = None, key: str | None = None) -> Any:
35
+ keep_empty_list_keys = keep_empty_list_keys or set()
36
+ if isinstance(value, dict):
37
+ cleaned = {}
38
+ for child_key, child_value in value.items():
39
+ child = clean_empty(child_value, keep_empty_list_keys, child_key)
40
+ if child in (None, "", {}, []):
41
+ if child == [] and child_key in keep_empty_list_keys:
42
+ cleaned[child_key] = child
43
+ continue
44
+ cleaned[child_key] = child
45
+ return cleaned
46
+ if isinstance(value, list):
47
+ return [item for item in (clean_empty(item, keep_empty_list_keys, key) for item in value) if item not in (None, "", {}, [])]
48
+ return value
49
+
50
+
51
+ def infer_mainflow_tag(case: dict[str, Any]) -> str:
52
+ tags = [tag for tag in case.get("tags") or [] if tag in MAINFLOW_TAGS]
53
+ if tags:
54
+ return "ui-mainflow" if "ui-mainflow" in tags else "api-mainflow"
55
+ dsl = case.get("dsl_json") or {}
56
+ drivers = {str(step.get("driver", "")).lower() for step in dsl.get("steps") or [] if isinstance(step, dict)}
57
+ if drivers & {"ui", "web"}:
58
+ return "ui-mainflow"
59
+ return "api-mainflow"
60
+
61
+
62
+ def normalize_steps(steps: list[dict[str, Any]]) -> list[dict[str, Any]]:
63
+ normalized: list[dict[str, Any]] = []
64
+ id_map: dict[str, str] = {}
65
+ used: set[str] = set()
66
+
67
+ for index, step in enumerate(steps, start=1):
68
+ step = deepcopy(step)
69
+ old_id = str(step.get("id") or "").strip()
70
+ base = slugify(old_id or str(step.get("name") or ""), f"step_{index:02d}")
71
+ new_id = f"s{index:02d}_{base}"
72
+ while new_id in used:
73
+ new_id = f"{new_id}_{index}"
74
+ used.add(new_id)
75
+ if old_id:
76
+ id_map[old_id] = new_id
77
+ step["id"] = new_id
78
+ step.setdefault("name", f"Step {index}")
79
+ step.setdefault("params", {})
80
+ step.setdefault("assertions", [])
81
+ step.setdefault("timeout_ms", 30_000)
82
+ step.setdefault("on_failure", "stop")
83
+ if step.get("driver") == "ui":
84
+ step.setdefault("strategy", deepcopy(DEFAULT_UI_STRATEGY))
85
+ normalized.append(step)
86
+
87
+ for index, step in enumerate(normalized):
88
+ raw_deps = step.get("depends_on")
89
+ if raw_deps is None:
90
+ deps = [] if index == 0 else [normalized[index - 1]["id"]]
91
+ else:
92
+ deps = [id_map.get(str(dep), str(dep)) for dep in raw_deps]
93
+ step["depends_on"] = deps
94
+
95
+ # --- validate target keys (hard gate) ---
96
+ target_errors: list[str] = []
97
+ for step in normalized:
98
+ if step.get("driver") != "ui":
99
+ continue
100
+ target = step.get("target") or {}
101
+ unknown = set(target.keys()) - VALID_TARGET_KEYS
102
+ if unknown:
103
+ target_errors.append(
104
+ f"step '{step.get('id')}' (name='{step.get('name')}') target has invalid keys {sorted(unknown)}. "
105
+ f"Valid keys: {sorted(VALID_TARGET_KEYS)}. "
106
+ f"Current target: {json.dumps(target, ensure_ascii=False)}. "
107
+ f"Hint: use flat keys like {{\"label\": \"...\"}} or {{\"css\": \"...\"}} or {{\"placeholder\": \"...\"}}, "
108
+ f"NOT {{\"by\": \"...\", \"value\": \"...\"}}."
109
+ )
110
+ if target_errors:
111
+ raise ValueError(
112
+ "Normalization BLOCKED — invalid target keys found. Fix the draft DSL and re-run:\n"
113
+ + "\n".join(f" - {e}" for e in target_errors)
114
+ )
115
+
116
+ return [clean_empty(step, keep_empty_list_keys={"assertions", "depends_on"}) for step in normalized]
117
+
118
+
119
+ def normalize_case(case: dict[str, Any], metadata: dict[str, Any]) -> tuple[dict[str, Any], list[dict[str, Any]]]:
120
+ case = deepcopy(case)
121
+ evidence = list(case.pop("source_evidence", []) or [])
122
+ dsl = deepcopy(case.get("dsl_json") or {})
123
+ case_name = str(case.get("name") or dsl.get("name") or "Mainflow Case")
124
+ mainflow_tag = infer_mainflow_tag(case)
125
+ project_id = case.get("project_id") or metadata.get("project_id") or 1
126
+
127
+ dsl["name"] = str(dsl.get("name") or case_name)
128
+ dsl["description"] = dsl.get("description") or case.get("description")
129
+ dsl["tags"] = [mainflow_tag]
130
+ dsl["steps"] = normalize_steps(list(dsl.get("steps") or []))
131
+
132
+ normalized = {
133
+ "project_id": int(project_id),
134
+ "name": case_name,
135
+ "description": case.get("description"),
136
+ "tags": [mainflow_tag],
137
+ "dsl_json": dsl,
138
+ }
139
+ return clean_empty(normalized), evidence
140
+
141
+
142
+ def main() -> int:
143
+ parser = argparse.ArgumentParser()
144
+ parser.add_argument("input", help="legacy raw case payload JSON")
145
+ parser.add_argument("--output", required=True, help="case-import-payloads.json")
146
+ args = parser.parse_args()
147
+
148
+ draft_path = Path(args.input)
149
+ payload = load_payload(draft_path)
150
+ metadata = dict(payload.get("metadata") or {})
151
+ evidence_by_case: dict[str, list[dict[str, Any]]] = {}
152
+ cases: list[dict[str, Any]] = []
153
+
154
+ for case in payload["cases"]:
155
+ normalized, evidence = normalize_case(case, metadata)
156
+ cases.append(normalized)
157
+ evidence_by_case[normalized["name"]] = evidence
158
+
159
+ output_payload = {
160
+ "metadata": {
161
+ **metadata,
162
+ "normalized_at": datetime.now(timezone.utc).isoformat(),
163
+ "generated_by": metadata.get("generated_by") or "workflow-generate-mainflow-cases",
164
+ "case_evidence": evidence_by_case,
165
+ },
166
+ "cases": cases,
167
+ }
168
+
169
+ output = Path(args.output)
170
+ output.parent.mkdir(parents=True, exist_ok=True)
171
+ output.write_text(json.dumps(output_payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
172
+ print(json.dumps({"output": str(output), "case_count": len(cases)}, ensure_ascii=False))
173
+ return 0
174
+
175
+
176
+ if __name__ == "__main__":
177
+ raise SystemExit(main())