claude-code-workflow 6.3.31 → 6.3.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +7 -3
- package/.claude/agents/action-planning-agent.md +885 -885
- package/.claude/agents/cli-discuss-agent.md +391 -391
- package/.claude/agents/cli-execution-agent.md +7 -6
- package/.claude/agents/cli-lite-planning-agent.md +1 -1
- package/.claude/agents/cli-planning-agent.md +2 -2
- package/.claude/agents/code-developer.md +407 -403
- package/.claude/agents/conceptual-planning-agent.md +11 -0
- package/.claude/agents/debug-explore-agent.md +3 -3
- package/.claude/agents/doc-generator.md +3 -3
- package/.claude/agents/issue-plan-agent.md +333 -340
- package/.claude/agents/issue-queue-agent.md +1 -1
- package/.claude/agents/memory-bridge.md +95 -95
- package/.claude/agents/test-context-search-agent.md +402 -402
- package/.claude/agents/ui-design-agent.md +595 -595
- package/.claude/agents/universal-executor.md +134 -134
- package/.claude/commands/cli/codex-review.md +355 -0
- package/.claude/commands/issue/discover-by-prompt.md +1 -1
- package/.claude/commands/issue/execute.md +581 -581
- package/.claude/commands/issue/new.md +413 -413
- package/.claude/commands/issue/plan.md +1 -1
- package/.claude/commands/issue/queue.md +441 -382
- package/.claude/commands/memory/code-map-memory.md +687 -687
- package/.claude/commands/memory/compact.md +383 -383
- package/.claude/commands/memory/docs-full-cli.md +471 -471
- package/.claude/commands/memory/docs-related-cli.md +386 -386
- package/.claude/commands/memory/docs.md +615 -615
- package/.claude/commands/memory/load-skill-memory.md +182 -182
- package/.claude/commands/memory/skill-memory.md +525 -525
- package/.claude/commands/memory/style-skill-memory.md +396 -396
- package/.claude/commands/memory/swagger-docs.md +773 -773
- package/.claude/commands/memory/tech-research-rules.md +2 -2
- package/.claude/commands/memory/update-full.md +332 -332
- package/.claude/commands/memory/workflow-skill-memory.md +517 -517
- package/.claude/commands/task/create.md +151 -151
- package/.claude/commands/task/replan.md +436 -436
- package/.claude/commands/version.md +254 -254
- package/.claude/commands/workflow/brainstorm/api-designer.md +587 -587
- package/.claude/commands/workflow/brainstorm/auto-parallel.md +11 -0
- package/.claude/commands/workflow/brainstorm/data-architect.md +220 -220
- package/.claude/commands/workflow/brainstorm/product-manager.md +200 -200
- package/.claude/commands/workflow/brainstorm/product-owner.md +200 -200
- package/.claude/commands/workflow/brainstorm/scrum-master.md +200 -200
- package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
- package/.claude/commands/workflow/brainstorm/system-architect.md +389 -389
- package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -221
- package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -221
- package/.claude/commands/workflow/clean.md +3 -3
- package/.claude/commands/workflow/debug-with-file.md +666 -0
- package/.claude/commands/workflow/debug.md +327 -327
- package/.claude/commands/workflow/execute.md +498 -498
- package/.claude/commands/workflow/init.md +25 -12
- package/.claude/commands/workflow/lite-execute.md +25 -22
- package/.claude/commands/workflow/lite-fix.md +631 -631
- package/.claude/commands/workflow/lite-lite-lite.md +39 -11
- package/.claude/commands/workflow/lite-plan.md +4 -2
- package/.claude/commands/workflow/multi-cli-plan.md +97 -39
- package/.claude/commands/workflow/plan.md +551 -551
- package/.claude/commands/workflow/replan.md +515 -515
- package/.claude/commands/workflow/review-fix.md +610 -610
- package/.claude/commands/workflow/review-module-cycle.md +771 -771
- package/.claude/commands/workflow/review-session-cycle.md +782 -782
- package/.claude/commands/workflow/review.md +322 -322
- package/.claude/commands/workflow/session/complete.md +31 -4
- package/.claude/commands/workflow/session/list.md +95 -95
- package/.claude/commands/workflow/session/resume.md +60 -60
- package/.claude/commands/workflow/session/solidify.md +299 -299
- package/.claude/commands/workflow/session/start.md +1 -1
- package/.claude/commands/workflow/tdd-plan.md +597 -460
- package/.claude/commands/workflow/test-cycle-execute.md +504 -504
- package/.claude/commands/workflow/test-fix-gen.md +699 -699
- package/.claude/commands/workflow/tools/conflict-resolution.md +2 -2
- package/.claude/commands/workflow/tools/context-gather.md +2 -2
- package/.claude/commands/workflow/tools/task-generate-tdd.md +517 -517
- package/.claude/commands/workflow/tools/tdd-coverage-analysis.md +309 -309
- package/.claude/commands/workflow/tools/test-concept-enhanced.md +1 -1
- package/.claude/commands/workflow/tools/test-context-gather.md +235 -235
- package/.claude/commands/workflow/tools/test-task-generate.md +255 -255
- package/.claude/commands/workflow/ui-design/animation-extract.md +1150 -1150
- package/.claude/commands/workflow/ui-design/design-sync.md +454 -454
- package/.claude/commands/workflow/ui-design/explore-auto.md +678 -678
- package/.claude/commands/workflow/ui-design/imitate-auto.md +745 -745
- package/.claude/commands/workflow/ui-design/layout-extract.md +788 -788
- package/.claude/commands/workflow/ui-design/reference-page-generator.md +356 -356
- package/.claude/commands/workflow/ui-design/style-extract.md +773 -773
- package/.claude/skills/ccw/SKILL.md +522 -352
- package/.claude/skills/ccw/command.json +641 -547
- package/.claude/skills/ccw-help/SKILL.md +116 -116
- package/.claude/skills/ccw-help/command.json +520 -511
- package/.claude/skills/copyright-docs/phases/01.5-project-exploration.md +150 -150
- package/.claude/skills/copyright-docs/phases/02.5-consolidation.md +192 -192
- package/.claude/skills/copyright-docs/templates/agent-base.md +200 -200
- package/.claude/skills/project-analyze/phases/03.5-consolidation.md +233 -233
- package/.claude/skills/project-analyze/specs/writing-style.md +152 -152
- package/.claude/skills/review-code/phases/state-manager.md +752 -752
- package/.claude/skills/review-code/specs/rules/index.md +140 -140
- package/.claude/skills/skill-generator/specs/cli-integration.md +13 -19
- package/.claude/skills/skill-generator/specs/scripting-integration.md +265 -265
- package/.claude/skills/skill-generator/templates/code-analysis-action.md +503 -503
- package/.claude/skills/skill-generator/templates/llm-action.md +355 -355
- package/.claude/skills/skill-generator/templates/script-bash.md +277 -277
- package/.claude/skills/skill-generator/templates/script-python.md +198 -198
- package/.claude/skills/skill-generator/templates/skill-md.md +235 -235
- package/.claude/skills/skill-tuning/SKILL.md +303 -303
- package/.claude/skills/skill-tuning/phases/actions/action-abort.md +164 -164
- package/.claude/skills/skill-tuning/phases/actions/action-apply-fix.md +206 -206
- package/.claude/skills/skill-tuning/phases/actions/action-complete.md +195 -195
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-agent.md +317 -317
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-context.md +243 -243
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-dataflow.md +318 -318
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-memory.md +269 -269
- package/.claude/skills/skill-tuning/phases/actions/action-diagnose-token-consumption.md +200 -200
- package/.claude/skills/skill-tuning/phases/actions/action-gemini-analysis.md +322 -322
- package/.claude/skills/skill-tuning/phases/actions/action-generate-report.md +228 -228
- package/.claude/skills/skill-tuning/phases/actions/action-init.md +149 -149
- package/.claude/skills/skill-tuning/phases/actions/action-propose-fixes.md +317 -317
- package/.claude/skills/skill-tuning/phases/actions/action-verify.md +222 -222
- package/.claude/skills/skill-tuning/phases/orchestrator.md +377 -377
- package/.claude/skills/skill-tuning/phases/state-schema.md +378 -378
- package/.claude/skills/skill-tuning/specs/problem-taxonomy.md +318 -318
- package/.claude/skills/skill-tuning/specs/quality-gates.md +263 -263
- package/.claude/skills/skill-tuning/specs/tuning-strategies.md +1537 -1537
- package/.claude/skills/skill-tuning/templates/diagnosis-report.md +153 -153
- package/.claude/skills/skill-tuning/templates/fix-proposal.md +204 -204
- package/.claude/skills/software-manual/SKILL.md +184 -184
- package/.claude/skills/software-manual/phases/01-requirements-discovery.md +162 -162
- package/.claude/skills/software-manual/phases/02-project-exploration.md +101 -101
- package/.claude/skills/software-manual/phases/03-parallel-analysis.md +183 -183
- package/.claude/skills/software-manual/phases/03.5-consolidation.md +82 -82
- package/.claude/skills/software-manual/phases/04-screenshot-capture.md +89 -89
- package/.claude/skills/software-manual/phases/05-html-assembly.md +132 -132
- package/.claude/skills/software-manual/phases/06-iterative-refinement.md +259 -259
- package/.claude/skills/software-manual/scripts/screenshot-helper.md +447 -447
- package/.claude/skills/software-manual/scripts/swagger-runner.md +419 -419
- package/.claude/skills/software-manual/scripts/typedoc-runner.md +357 -357
- package/.claude/skills/software-manual/specs/html-template.md +325 -325
- package/.claude/skills/software-manual/specs/quality-standards.md +253 -253
- package/.claude/skills/software-manual/specs/writing-style.md +298 -298
- package/.claude/skills/text-formatter/SKILL.md +196 -196
- package/.claude/skills/text-formatter/phases/01-input-collection.md +111 -111
- package/.claude/skills/text-formatter/phases/02-content-analysis.md +248 -248
- package/.claude/skills/text-formatter/phases/03-format-transform.md +245 -245
- package/.claude/skills/text-formatter/phases/04-output-preview.md +183 -183
- package/.claude/skills/text-formatter/specs/callout-types.md +293 -293
- package/.claude/skills/text-formatter/specs/element-mapping.md +226 -226
- package/.claude/skills/text-formatter/specs/format-rules.md +273 -273
- package/.claude/skills/text-formatter/templates/bbcode-template.md +350 -350
- package/.claude/workflows/chinese-response.md +25 -25
- package/.claude/workflows/cli-templates/memory/style-skill-memory/skill-md-template.md +299 -299
- package/.claude/workflows/cli-templates/planning-roles/product-owner.md +261 -261
- package/.claude/workflows/cli-templates/prompts/{analysis/03-analyze-performance.txt → analysis-analyze-performance.txt} +29 -29
- package/.claude/workflows/cli-templates/prompts/{analysis/03-assess-security-risks.txt → analysis-assess-security-risks.txt} +29 -29
- package/.claude/workflows/cli-templates/prompts/{analysis/02-review-architecture.txt → analysis-review-architecture.txt} +29 -29
- package/.claude/workflows/cli-templates/prompts/{analysis/02-review-code-quality.txt → analysis-review-code-quality.txt} +28 -28
- package/.claude/workflows/cli-templates/prompts/{analysis/03-review-quality-standards.txt → analysis-review-quality-standards.txt} +29 -29
- package/.claude/workflows/cli-templates/prompts/{analysis/01-trace-code-execution.txt → analysis-trace-code-execution.txt} +115 -115
- package/.claude/workflows/cli-templates/prompts/{documentation/api.txt → documentation-api.txt} +14 -14
- package/.claude/workflows/cli-templates/prompts/{documentation/folder-navigation.txt → documentation-folder-navigation.txt} +26 -26
- package/.claude/workflows/cli-templates/prompts/{documentation/project-architecture.txt → documentation-project-architecture.txt} +40 -40
- package/.claude/workflows/cli-templates/prompts/{documentation/project-examples.txt → documentation-project-examples.txt} +34 -34
- package/.claude/workflows/cli-templates/prompts/{documentation/project-readme.txt → documentation-project-readme.txt} +34 -34
- package/.claude/workflows/cli-templates/prompts/{documentation/swagger-api.txt → documentation-swagger-api.txt} +266 -266
- package/.claude/workflows/cli-templates/prompts/{planning/02-design-component-spec.txt → planning-design-component-spec.txt} +28 -28
- package/.claude/workflows/cli-templates/prompts/{verification/codex-technical.txt → verification-codex-technical.txt} +28 -28
- package/.claude/workflows/cli-templates/prompts/{verification/cross-validation.txt → verification-cross-validation.txt} +28 -28
- package/.claude/workflows/cli-templates/prompts/{verification/gemini-strategic.txt → verification-gemini-strategic.txt} +27 -27
- package/.claude/workflows/cli-templates/prompts/{workflow/analysis-results-structure.txt → workflow-analysis-results-structure.txt} +224 -224
- package/.claude/workflows/cli-templates/prompts/{workflow/impl-plan-template.txt → workflow-impl-plan-template.txt} +286 -286
- package/.claude/workflows/cli-templates/prompts/{workflow/skill-conflict-patterns.txt → workflow-skill-conflict-patterns.txt} +2 -2
- package/.claude/workflows/cli-templates/prompts/{workflow/skill-lessons-learned.txt → workflow-skill-lessons-learned.txt} +2 -2
- package/.claude/workflows/cli-templates/prompts/{workflow/task-json-agent-mode.txt → workflow-task-json-agent-mode.txt} +123 -123
- package/.claude/workflows/cli-templates/schemas/project-guidelines-schema.json +141 -0
- package/.claude/workflows/cli-templates/schemas/{project-json-schema.json → project-tech-schema.json} +2 -2
- package/.claude/workflows/cli-tools-usage.md +135 -115
- package/.claude/workflows/coding-philosophy.md +69 -69
- package/.claude/workflows/context-tools.md +76 -76
- package/.claude/workflows/file-modification.md +64 -64
- package/.claude/workflows/review-directory-specification.md +336 -336
- package/.claude/workflows/windows-platform.md +19 -19
- package/.claude/workflows/workflow-architecture.md +942 -942
- package/.codex/prompts/issue-execute.md +176 -70
- package/README.md +250 -214
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +15 -0
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/cli.d.ts +5 -0
- package/ccw/dist/commands/cli.d.ts.map +1 -1
- package/ccw/dist/commands/cli.js +117 -20
- package/ccw/dist/commands/cli.js.map +1 -1
- package/ccw/dist/commands/install.d.ts +17 -0
- package/ccw/dist/commands/install.d.ts.map +1 -1
- package/ccw/dist/commands/install.js +211 -2
- package/ccw/dist/commands/install.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +208 -28
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/commands/uninstall.d.ts.map +1 -1
- package/ccw/dist/commands/uninstall.js +22 -1
- package/ccw/dist/commands/uninstall.js.map +1 -1
- package/ccw/dist/commands/view.d.ts.map +1 -1
- package/ccw/dist/commands/view.js +3 -0
- package/ccw/dist/commands/view.js.map +1 -1
- package/ccw/dist/commands/workflow.d.ts +11 -0
- package/ccw/dist/commands/workflow.d.ts.map +1 -0
- package/ccw/dist/commands/workflow.js +294 -0
- package/ccw/dist/commands/workflow.js.map +1 -0
- package/ccw/dist/core/data-aggregator.d.ts +13 -2
- package/ccw/dist/core/data-aggregator.d.ts.map +1 -1
- package/ccw/dist/core/data-aggregator.js +10 -16
- package/ccw/dist/core/data-aggregator.js.map +1 -1
- package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/claude-routes.js +57 -3
- package/ccw/dist/core/routes/claude-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts +13 -0
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +46 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/help-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/help-routes.js +156 -58
- package/ccw/dist/core/routes/help-routes.js.map +1 -1
- package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/hooks-routes.js +33 -0
- package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
- package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/issue-routes.js +211 -29
- package/ccw/dist/core/routes/issue-routes.js.map +1 -1
- package/ccw/dist/core/routes/mcp-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/mcp-routes.js +4 -1
- package/ccw/dist/core/routes/mcp-routes.js.map +1 -1
- package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/rules-routes.js +22 -6
- package/ccw/dist/core/routes/rules-routes.js.map +1 -1
- package/ccw/dist/core/routes/session-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/session-routes.js +23 -1
- package/ccw/dist/core/routes/session-routes.js.map +1 -1
- package/ccw/dist/mcp-server/index.js +8 -2
- package/ccw/dist/mcp-server/index.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.js +52 -28
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
- package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor-core.js +38 -12
- package/ccw/dist/tools/cli-executor-core.js.map +1 -1
- package/ccw/dist/tools/cli-executor-state.d.ts +2 -0
- package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor-state.js.map +1 -1
- package/ccw/dist/tools/cli-executor-utils.d.ts +7 -0
- package/ccw/dist/tools/cli-executor-utils.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor-utils.js +31 -2
- package/ccw/dist/tools/cli-executor-utils.js.map +1 -1
- package/ccw/dist/tools/cli-history-store.d.ts +21 -0
- package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
- package/ccw/dist/tools/cli-history-store.js +106 -30
- package/ccw/dist/tools/cli-history-store.js.map +1 -1
- package/ccw/dist/tools/cli-output-converter.d.ts +2 -1
- package/ccw/dist/tools/cli-output-converter.d.ts.map +1 -1
- package/ccw/dist/tools/cli-output-converter.js +65 -10
- package/ccw/dist/tools/cli-output-converter.js.map +1 -1
- package/ccw/dist/tools/codex-lens-lsp.d.ts +61 -0
- package/ccw/dist/tools/codex-lens-lsp.d.ts.map +1 -0
- package/ccw/dist/tools/codex-lens-lsp.js +320 -0
- package/ccw/dist/tools/codex-lens-lsp.js.map +1 -0
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +74 -54
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/dist/tools/index.d.ts.map +1 -1
- package/ccw/dist/tools/index.js +4 -0
- package/ccw/dist/tools/index.js.map +1 -1
- package/ccw/dist/tools/template-discovery.d.ts +85 -0
- package/ccw/dist/tools/template-discovery.d.ts.map +1 -0
- package/ccw/dist/tools/template-discovery.js +239 -0
- package/ccw/dist/tools/template-discovery.js.map +1 -0
- package/ccw/dist/tools/vscode-lsp.d.ts +57 -0
- package/ccw/dist/tools/vscode-lsp.d.ts.map +1 -0
- package/ccw/dist/tools/vscode-lsp.js +250 -0
- package/ccw/dist/tools/vscode-lsp.js.map +1 -0
- package/ccw/dist/utils/path-resolver.d.ts +16 -2
- package/ccw/dist/utils/path-resolver.d.ts.map +1 -1
- package/ccw/dist/utils/path-resolver.js +36 -6
- package/ccw/dist/utils/path-resolver.js.map +1 -1
- package/ccw/dist/utils/path-validator.d.ts +5 -0
- package/ccw/dist/utils/path-validator.d.ts.map +1 -1
- package/ccw/dist/utils/path-validator.js +16 -5
- package/ccw/dist/utils/path-validator.js.map +1 -1
- package/ccw/dist/utils/project-root.d.ts +25 -0
- package/ccw/dist/utils/project-root.d.ts.map +1 -0
- package/ccw/dist/utils/project-root.js +63 -0
- package/ccw/dist/utils/project-root.js.map +1 -0
- package/ccw/dist/utils/shell-escape.d.ts +47 -3
- package/ccw/dist/utils/shell-escape.d.ts.map +1 -1
- package/ccw/dist/utils/shell-escape.js +98 -15
- package/ccw/dist/utils/shell-escape.js.map +1 -1
- package/ccw/dist/utils/update-checker.d.ts +11 -0
- package/ccw/dist/utils/update-checker.d.ts.map +1 -0
- package/ccw/dist/utils/update-checker.js +167 -0
- package/ccw/dist/utils/update-checker.js.map +1 -0
- package/ccw/src/cli.ts +16 -0
- package/ccw/src/commands/cli.ts +127 -20
- package/ccw/src/commands/install.ts +239 -2
- package/ccw/src/commands/issue.ts +245 -31
- package/ccw/src/commands/uninstall.ts +23 -1
- package/ccw/src/commands/view.ts +4 -0
- package/ccw/src/commands/workflow.ts +348 -0
- package/ccw/src/core/data-aggregator.ts +25 -19
- package/ccw/src/core/routes/claude-routes.ts +64 -3
- package/ccw/src/core/routes/cli-routes.ts +58 -0
- package/ccw/src/core/routes/help-routes.ts +172 -60
- package/ccw/src/core/routes/hooks-routes.ts +32 -0
- package/ccw/src/core/routes/issue-routes.ts +242 -28
- package/ccw/src/core/routes/mcp-routes.ts +6 -2
- package/ccw/src/core/routes/rules-routes.ts +24 -6
- package/ccw/src/core/routes/session-routes.ts +24 -1
- package/ccw/src/mcp-server/index.ts +7 -2
- package/ccw/src/templates/dashboard-css/26-claude-manager.css +179 -0
- package/ccw/src/templates/dashboard-css/32-issue-manager.css +3427 -3302
- package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +3 -2
- package/ccw/src/templates/dashboard-js/components/cli-history.js +4 -1
- package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +57 -21
- package/ccw/src/templates/dashboard-js/components/hook-manager.js +1492 -1372
- package/ccw/src/templates/dashboard-js/components/mcp-manager.js +107 -20
- package/ccw/src/templates/dashboard-js/components/version-check.js +135 -1
- package/ccw/src/templates/dashboard-js/i18n.js +42 -0
- package/ccw/src/templates/dashboard-js/views/claude-manager.js +168 -0
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +1 -0
- package/ccw/src/templates/dashboard-js/views/hook-manager.js +21 -5
- package/ccw/src/templates/dashboard-js/views/issue-manager.js +201 -1
- package/ccw/src/templates/dashboard-js/views/lite-tasks.js +3502 -3478
- package/ccw/src/templates/dashboard-js/views/mcp-manager.js +16 -0
- package/ccw/src/templates/dashboard.html +112 -0
- package/ccw/src/tools/claude-cli-tools.ts +54 -28
- package/ccw/src/tools/cli-executor-core.ts +42 -13
- package/ccw/src/tools/cli-executor-state.ts +2 -0
- package/ccw/src/tools/cli-executor-utils.ts +38 -2
- package/ccw/src/tools/cli-history-store.ts +122 -31
- package/ccw/src/tools/cli-output-converter.ts +76 -12
- package/ccw/src/tools/codex-lens-lsp.ts +405 -0
- package/ccw/src/tools/codex-lens.ts +82 -59
- package/ccw/src/tools/index.ts +4 -0
- package/ccw/src/tools/template-discovery.ts +303 -0
- package/ccw/src/tools/vscode-lsp.ts +317 -0
- package/ccw/src/utils/path-resolver.ts +37 -6
- package/ccw/src/utils/path-validator.ts +17 -5
- package/ccw/src/utils/project-root.ts +73 -0
- package/ccw/src/utils/shell-escape.ts +103 -16
- package/ccw/src/utils/update-checker.ts +178 -0
- package/codex-lens/pyproject.toml +14 -0
- package/codex-lens/src/codexlens/__pycache__/config.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/errors.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/errors.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__init__.py +88 -0
- package/codex-lens/src/codexlens/api/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/definition.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/definition.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/file_context.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/file_context.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/hover.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/hover.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/models.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/models.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/references.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/references.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/semantic.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/semantic.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/symbols.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/symbols.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/utils.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/api/__pycache__/utils.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/api/definition.py +126 -0
- package/codex-lens/src/codexlens/api/file_context.py +271 -0
- package/codex-lens/src/codexlens/api/hover.py +148 -0
- package/codex-lens/src/codexlens/api/models.py +281 -0
- package/codex-lens/src/codexlens/api/references.py +345 -0
- package/codex-lens/src/codexlens/api/semantic.py +471 -0
- package/codex-lens/src/codexlens/api/symbols.py +146 -0
- package/codex-lens/src/codexlens/api/utils.py +153 -0
- package/codex-lens/src/codexlens/config.py +7 -0
- package/codex-lens/src/codexlens/errors.py +4 -0
- package/codex-lens/src/codexlens/hybrid_search/__init__.py +28 -0
- package/codex-lens/src/codexlens/hybrid_search/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/hybrid_search/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/hybrid_search/__pycache__/data_structures.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/hybrid_search/__pycache__/data_structures.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/hybrid_search/__pycache__/engine.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/hybrid_search/data_structures.py +602 -0
- package/codex-lens/src/codexlens/lsp/__init__.py +34 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/handlers.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/lsp_bridge.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/lsp_bridge.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/lsp_graph_builder.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/lsp_graph_builder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/providers.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/server.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/__pycache__/standalone_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/lsp/handlers.py +551 -0
- package/codex-lens/src/codexlens/lsp/lsp_bridge.py +834 -0
- package/codex-lens/src/codexlens/lsp/lsp_graph_builder.py +375 -0
- package/codex-lens/src/codexlens/lsp/providers.py +177 -0
- package/codex-lens/src/codexlens/lsp/server.py +263 -0
- package/codex-lens/src/codexlens/lsp/standalone_manager.py +1159 -0
- package/codex-lens/src/codexlens/mcp/__init__.py +20 -0
- package/codex-lens/src/codexlens/mcp/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/mcp/__pycache__/hooks.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/mcp/__pycache__/provider.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/mcp/__pycache__/schema.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/mcp/hooks.py +170 -0
- package/codex-lens/src/codexlens/mcp/provider.py +202 -0
- package/codex-lens/src/codexlens/mcp/schema.py +113 -0
- package/codex-lens/src/codexlens/search/__init__.py +53 -15
- package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/association_tree/QUICK_START.md +257 -0
- package/codex-lens/src/codexlens/search/association_tree/README.md +188 -0
- package/codex-lens/src/codexlens/search/association_tree/__init__.py +21 -0
- package/codex-lens/src/codexlens/search/association_tree/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/association_tree/__pycache__/builder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/association_tree/__pycache__/data_structures.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/association_tree/__pycache__/deduplicator.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/association_tree/builder.py +450 -0
- package/codex-lens/src/codexlens/search/association_tree/data_structures.py +191 -0
- package/codex-lens/src/codexlens/search/association_tree/deduplicator.py +301 -0
- package/codex-lens/src/codexlens/search/chain_search.py +864 -3
- package/codex-lens/src/codexlens/search/clustering/__init__.py +124 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/base.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/base.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/dbscan_strategy.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/factory.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/factory.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/frequency_strategy.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/frequency_strategy.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/hdbscan_strategy.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/noop_strategy.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/__pycache__/noop_strategy.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/clustering/base.py +153 -0
- package/codex-lens/src/codexlens/search/clustering/dbscan_strategy.py +197 -0
- package/codex-lens/src/codexlens/search/clustering/factory.py +202 -0
- package/codex-lens/src/codexlens/search/clustering/frequency_strategy.py +263 -0
- package/codex-lens/src/codexlens/search/clustering/hdbscan_strategy.py +153 -0
- package/codex-lens/src/codexlens/search/clustering/noop_strategy.py +83 -0
- package/codex-lens/src/codexlens/search/hybrid_search.py +194 -2
- package/codex-lens/src/codexlens/search/ranking.py +6 -4
- package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/dir_index.py +172 -0
- package/codex-lens/src/codexlens/storage/global_index.py +33 -0
- package/package.json +92 -92
- /package/.claude/workflows/cli-templates/prompts/{analysis/02-analyze-code-patterns.txt → analysis-analyze-code-patterns.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{analysis/02-analyze-technical-document.txt → analysis-analyze-technical-document.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{analysis/01-diagnose-bug-root-cause.txt → analysis-diagnose-bug-root-cause.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{development/03-debug-runtime-issues.txt → development-debug-runtime-issues.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{development/02-generate-tests.txt → development-generate-tests.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{development/02-implement-component-ui.txt → development-implement-component-ui.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{development/02-implement-feature.txt → development-implement-feature.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{development/02-refactor-codebase.txt → development-refactor-codebase.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{documentation/module-readme.txt → documentation-module-readme.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{memory/02-document-module-structure.txt → memory-document-module-structure.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{planning/02-breakdown-task-steps.txt → planning-breakdown-task-steps.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{planning/03-evaluate-concept-feasibility.txt → planning-evaluate-concept-feasibility.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{planning/01-plan-architecture-design.txt → planning-plan-architecture-design.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{planning/03-plan-migration-strategy.txt → planning-plan-migration-strategy.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{rules/rule-api.txt → rules-rule-api.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{rules/rule-components.txt → rules-rule-components.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{rules/rule-config.txt → rules-rule-config.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{rules/rule-core.txt → rules-rule-core.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{rules/rule-patterns.txt → rules-rule-patterns.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{rules/rule-testing.txt → rules-rule-testing.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{rules/tech-rules-agent-prompt.txt → rules-tech-rules-agent-prompt.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{tech/tech-module-format.txt → tech-tech-module-format.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{tech/tech-skill-index.txt → tech-tech-skill-index.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{test/test-concept-analysis.txt → test-test-concept-analysis.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{universal/00-universal-creative-style.txt → universal-universal-creative-style.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{universal/00-universal-rigorous-style.txt → universal-universal-rigorous-style.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{workflow/codex-feasibility-validation.txt → workflow-codex-feasibility-validation.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{workflow/gemini-solution-design.txt → workflow-gemini-solution-design.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{workflow/skill-aggregation.txt → workflow-skill-aggregation.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{workflow/skill-index.txt → workflow-skill-index.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{workflow/skill-sessions-timeline.txt → workflow-skill-sessions-timeline.txt} +0 -0
- /package/.claude/workflows/cli-templates/prompts/{workflow/task-json-cli-mode.txt → workflow-task-json-cli-mode.txt} +0 -0
|
@@ -1,318 +1,318 @@
|
|
|
1
|
-
# Action: Diagnose Data Flow Issues
|
|
2
|
-
|
|
3
|
-
Analyze target skill for data flow disruption - state inconsistencies and format variations.
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
- Detect inconsistent data formats between phases
|
|
8
|
-
- Identify scattered state storage
|
|
9
|
-
- Find missing data contracts
|
|
10
|
-
- Measure state transition integrity
|
|
11
|
-
|
|
12
|
-
## Preconditions
|
|
13
|
-
|
|
14
|
-
- [ ] state.status === 'running'
|
|
15
|
-
- [ ] state.target_skill.path is set
|
|
16
|
-
- [ ] 'dataflow' in state.focus_areas OR state.focus_areas is empty
|
|
17
|
-
|
|
18
|
-
## Detection Patterns
|
|
19
|
-
|
|
20
|
-
### Pattern 1: Multiple Storage Locations
|
|
21
|
-
|
|
22
|
-
```regex
|
|
23
|
-
# Data written to multiple paths without centralization
|
|
24
|
-
/Write\s*\(\s*[`'"][^`'"]+[`'"]/g
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### Pattern 2: Inconsistent Field Names
|
|
28
|
-
|
|
29
|
-
```regex
|
|
30
|
-
# Same concept with different names: title/name, id/identifier
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### Pattern 3: Missing Schema Validation
|
|
34
|
-
|
|
35
|
-
```regex
|
|
36
|
-
# Absence of validation before state write
|
|
37
|
-
# Look for lack of: validate, schema, check, verify
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### Pattern 4: Format Transformation Without Normalization
|
|
41
|
-
|
|
42
|
-
```regex
|
|
43
|
-
# Direct JSON.parse without error handling or normalization
|
|
44
|
-
/JSON\.parse\([^)]+\)(?!\s*\|\|)/
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Execution
|
|
48
|
-
|
|
49
|
-
```javascript
|
|
50
|
-
async function execute(state, workDir) {
|
|
51
|
-
const skillPath = state.target_skill.path;
|
|
52
|
-
const startTime = Date.now();
|
|
53
|
-
const issues = [];
|
|
54
|
-
const evidence = [];
|
|
55
|
-
|
|
56
|
-
console.log(`Diagnosing data flow in ${skillPath}...`);
|
|
57
|
-
|
|
58
|
-
// 1. Collect all Write operations to map data storage
|
|
59
|
-
const allFiles = Glob(`${skillPath}/**/*.md`);
|
|
60
|
-
const writeLocations = [];
|
|
61
|
-
const readLocations = [];
|
|
62
|
-
|
|
63
|
-
for (const file of allFiles) {
|
|
64
|
-
const content = Read(file);
|
|
65
|
-
const relativePath = file.replace(skillPath + '/', '');
|
|
66
|
-
|
|
67
|
-
// Find Write operations
|
|
68
|
-
const writeMatches = content.matchAll(/Write\s*\(\s*[`'"]([^`'"]+)[`'"]/g);
|
|
69
|
-
for (const match of writeMatches) {
|
|
70
|
-
writeLocations.push({
|
|
71
|
-
file: relativePath,
|
|
72
|
-
target: match[1],
|
|
73
|
-
isStateFile: match[1].includes('state.json') || match[1].includes('config.json')
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Find Read operations
|
|
78
|
-
const readMatches = content.matchAll(/Read\s*\(\s*[`'"]([^`'"]+)[`'"]/g);
|
|
79
|
-
for (const match of readMatches) {
|
|
80
|
-
readLocations.push({
|
|
81
|
-
file: relativePath,
|
|
82
|
-
source: match[1]
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// 2. Check for scattered state storage
|
|
88
|
-
const stateTargets = writeLocations
|
|
89
|
-
.filter(w => w.isStateFile)
|
|
90
|
-
.map(w => w.target);
|
|
91
|
-
|
|
92
|
-
const uniqueStateFiles = [...new Set(stateTargets)];
|
|
93
|
-
|
|
94
|
-
if (uniqueStateFiles.length > 2) {
|
|
95
|
-
issues.push({
|
|
96
|
-
id: `DF-${issues.length + 1}`,
|
|
97
|
-
type: 'dataflow_break',
|
|
98
|
-
severity: 'high',
|
|
99
|
-
location: { file: 'multiple' },
|
|
100
|
-
description: `State stored in ${uniqueStateFiles.length} different locations`,
|
|
101
|
-
evidence: uniqueStateFiles.slice(0, 5),
|
|
102
|
-
root_cause: 'No centralized state management',
|
|
103
|
-
impact: 'State inconsistency between phases',
|
|
104
|
-
suggested_fix: 'Centralize state to single state.json with state manager'
|
|
105
|
-
});
|
|
106
|
-
evidence.push({
|
|
107
|
-
file: 'multiple',
|
|
108
|
-
pattern: 'scattered_state',
|
|
109
|
-
context: uniqueStateFiles.join(', '),
|
|
110
|
-
severity: 'high'
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// 3. Check for inconsistent field naming
|
|
115
|
-
const fieldNamePatterns = {
|
|
116
|
-
'name_vs_title': [/\.name\b/, /\.title\b/],
|
|
117
|
-
'id_vs_identifier': [/\.id\b/, /\.identifier\b/],
|
|
118
|
-
'status_vs_state': [/\.status\b/, /\.state\b/],
|
|
119
|
-
'error_vs_errors': [/\.error\b/, /\.errors\b/]
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const fieldUsage = {};
|
|
123
|
-
|
|
124
|
-
for (const file of allFiles) {
|
|
125
|
-
const content = Read(file);
|
|
126
|
-
const relativePath = file.replace(skillPath + '/', '');
|
|
127
|
-
|
|
128
|
-
for (const [patternName, patterns] of Object.entries(fieldNamePatterns)) {
|
|
129
|
-
for (const pattern of patterns) {
|
|
130
|
-
if (pattern.test(content)) {
|
|
131
|
-
if (!fieldUsage[patternName]) fieldUsage[patternName] = [];
|
|
132
|
-
fieldUsage[patternName].push({
|
|
133
|
-
file: relativePath,
|
|
134
|
-
pattern: pattern.toString()
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
for (const [patternName, usages] of Object.entries(fieldUsage)) {
|
|
142
|
-
const uniquePatterns = [...new Set(usages.map(u => u.pattern))];
|
|
143
|
-
if (uniquePatterns.length > 1) {
|
|
144
|
-
issues.push({
|
|
145
|
-
id: `DF-${issues.length + 1}`,
|
|
146
|
-
type: 'dataflow_break',
|
|
147
|
-
severity: 'medium',
|
|
148
|
-
location: { file: 'multiple' },
|
|
149
|
-
description: `Inconsistent field naming: ${patternName.replace('_vs_', ' vs ')}`,
|
|
150
|
-
evidence: usages.slice(0, 3).map(u => `${u.file}: ${u.pattern}`),
|
|
151
|
-
root_cause: 'Same concept referred to with different field names',
|
|
152
|
-
impact: 'Data may be lost during field access',
|
|
153
|
-
suggested_fix: `Standardize to single field name, add normalization function`
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// 4. Check for missing schema validation
|
|
159
|
-
for (const file of allFiles) {
|
|
160
|
-
const content = Read(file);
|
|
161
|
-
const relativePath = file.replace(skillPath + '/', '');
|
|
162
|
-
|
|
163
|
-
// Find JSON.parse without validation
|
|
164
|
-
const unsafeParses = content.match(/JSON\.parse\s*\([^)]+\)(?!\s*\?\?|\s*\|\|)/g);
|
|
165
|
-
const hasValidation = /validat|schema|type.*check/i.test(content);
|
|
166
|
-
|
|
167
|
-
if (unsafeParses && unsafeParses.length > 0 && !hasValidation) {
|
|
168
|
-
issues.push({
|
|
169
|
-
id: `DF-${issues.length + 1}`,
|
|
170
|
-
type: 'dataflow_break',
|
|
171
|
-
severity: 'medium',
|
|
172
|
-
location: { file: relativePath },
|
|
173
|
-
description: 'JSON parsing without validation',
|
|
174
|
-
evidence: unsafeParses.slice(0, 2),
|
|
175
|
-
root_cause: 'No schema validation after parsing',
|
|
176
|
-
impact: 'Invalid data may propagate through phases',
|
|
177
|
-
suggested_fix: 'Add schema validation after JSON.parse'
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// 5. Check state schema if exists
|
|
183
|
-
const stateSchemaFile = Glob(`${skillPath}/phases/state-schema.md`)[0];
|
|
184
|
-
if (stateSchemaFile) {
|
|
185
|
-
const schemaContent = Read(stateSchemaFile);
|
|
186
|
-
|
|
187
|
-
// Check for type definitions
|
|
188
|
-
const hasTypeScript = /interface\s+\w+|type\s+\w+\s*=/i.test(schemaContent);
|
|
189
|
-
const hasValidationFunction = /function\s+validate|validateState/i.test(schemaContent);
|
|
190
|
-
|
|
191
|
-
if (hasTypeScript && !hasValidationFunction) {
|
|
192
|
-
issues.push({
|
|
193
|
-
id: `DF-${issues.length + 1}`,
|
|
194
|
-
type: 'dataflow_break',
|
|
195
|
-
severity: 'low',
|
|
196
|
-
location: { file: 'phases/state-schema.md' },
|
|
197
|
-
description: 'Type definitions without runtime validation',
|
|
198
|
-
evidence: ['TypeScript interfaces defined but no validation function'],
|
|
199
|
-
root_cause: 'Types are compile-time only, not enforced at runtime',
|
|
200
|
-
impact: 'Schema violations may occur at runtime',
|
|
201
|
-
suggested_fix: 'Add validateState() function using Zod or manual checks'
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
} else if (state.target_skill.execution_mode === 'autonomous') {
|
|
205
|
-
issues.push({
|
|
206
|
-
id: `DF-${issues.length + 1}`,
|
|
207
|
-
type: 'dataflow_break',
|
|
208
|
-
severity: 'high',
|
|
209
|
-
location: { file: 'phases/' },
|
|
210
|
-
description: 'Autonomous skill missing state-schema.md',
|
|
211
|
-
evidence: ['No state schema definition found'],
|
|
212
|
-
root_cause: 'State structure undefined for orchestrator',
|
|
213
|
-
impact: 'Inconsistent state handling across actions',
|
|
214
|
-
suggested_fix: 'Create phases/state-schema.md with explicit type definitions'
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// 6. Check read-write alignment
|
|
219
|
-
const writtenFiles = new Set(writeLocations.map(w => w.target));
|
|
220
|
-
const readFiles = new Set(readLocations.map(r => r.source));
|
|
221
|
-
|
|
222
|
-
const writtenButNotRead = [...writtenFiles].filter(f =>
|
|
223
|
-
!readFiles.has(f) && !f.includes('output') && !f.includes('report')
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
if (writtenButNotRead.length > 0) {
|
|
227
|
-
issues.push({
|
|
228
|
-
id: `DF-${issues.length + 1}`,
|
|
229
|
-
type: 'dataflow_break',
|
|
230
|
-
severity: 'low',
|
|
231
|
-
location: { file: 'multiple' },
|
|
232
|
-
description: 'Files written but never read',
|
|
233
|
-
evidence: writtenButNotRead.slice(0, 3),
|
|
234
|
-
root_cause: 'Orphaned output files',
|
|
235
|
-
impact: 'Wasted storage and potential confusion',
|
|
236
|
-
suggested_fix: 'Remove unused writes or add reads where needed'
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// 7. Calculate severity
|
|
241
|
-
const criticalCount = issues.filter(i => i.severity === 'critical').length;
|
|
242
|
-
const highCount = issues.filter(i => i.severity === 'high').length;
|
|
243
|
-
const severity = criticalCount > 0 ? 'critical' :
|
|
244
|
-
highCount > 1 ? 'high' :
|
|
245
|
-
highCount > 0 ? 'medium' :
|
|
246
|
-
issues.length > 0 ? 'low' : 'none';
|
|
247
|
-
|
|
248
|
-
// 8. Write diagnosis result
|
|
249
|
-
const diagnosisResult = {
|
|
250
|
-
status: 'completed',
|
|
251
|
-
issues_found: issues.length,
|
|
252
|
-
severity: severity,
|
|
253
|
-
execution_time_ms: Date.now() - startTime,
|
|
254
|
-
details: {
|
|
255
|
-
patterns_checked: [
|
|
256
|
-
'scattered_state',
|
|
257
|
-
'inconsistent_naming',
|
|
258
|
-
'missing_validation',
|
|
259
|
-
'read_write_alignment'
|
|
260
|
-
],
|
|
261
|
-
patterns_matched: evidence.map(e => e.pattern),
|
|
262
|
-
evidence: evidence,
|
|
263
|
-
data_flow_map: {
|
|
264
|
-
write_locations: writeLocations.length,
|
|
265
|
-
read_locations: readLocations.length,
|
|
266
|
-
unique_state_files: uniqueStateFiles.length
|
|
267
|
-
},
|
|
268
|
-
recommendations: [
|
|
269
|
-
uniqueStateFiles.length > 2 ? 'Implement centralized state manager' : null,
|
|
270
|
-
issues.some(i => i.description.includes('naming'))
|
|
271
|
-
? 'Create normalization layer for field names' : null,
|
|
272
|
-
issues.some(i => i.description.includes('validation'))
|
|
273
|
-
? 'Add Zod or JSON Schema validation' : null
|
|
274
|
-
].filter(Boolean)
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
Write(`${workDir}/diagnosis/dataflow-diagnosis.json`,
|
|
279
|
-
JSON.stringify(diagnosisResult, null, 2));
|
|
280
|
-
|
|
281
|
-
return {
|
|
282
|
-
stateUpdates: {
|
|
283
|
-
'diagnosis.dataflow': diagnosisResult,
|
|
284
|
-
issues: [...state.issues, ...issues]
|
|
285
|
-
},
|
|
286
|
-
outputFiles: [`${workDir}/diagnosis/dataflow-diagnosis.json`],
|
|
287
|
-
summary: `Data flow diagnosis: ${issues.length} issues found (severity: ${severity})`
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
## State Updates
|
|
293
|
-
|
|
294
|
-
```javascript
|
|
295
|
-
return {
|
|
296
|
-
stateUpdates: {
|
|
297
|
-
'diagnosis.dataflow': {
|
|
298
|
-
status: 'completed',
|
|
299
|
-
issues_found: <count>,
|
|
300
|
-
severity: '<critical|high|medium|low|none>',
|
|
301
|
-
// ... full diagnosis result
|
|
302
|
-
},
|
|
303
|
-
issues: [...existingIssues, ...newIssues]
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
## Error Handling
|
|
309
|
-
|
|
310
|
-
| Error Type | Recovery |
|
|
311
|
-
|------------|----------|
|
|
312
|
-
| Glob pattern error | Use fallback patterns |
|
|
313
|
-
| File read error | Skip and continue |
|
|
314
|
-
|
|
315
|
-
## Next Actions
|
|
316
|
-
|
|
317
|
-
- Success: action-diagnose-agent (or next in focus_areas)
|
|
318
|
-
- Skipped: If 'dataflow' not in focus_areas
|
|
1
|
+
# Action: Diagnose Data Flow Issues
|
|
2
|
+
|
|
3
|
+
Analyze target skill for data flow disruption - state inconsistencies and format variations.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
- Detect inconsistent data formats between phases
|
|
8
|
+
- Identify scattered state storage
|
|
9
|
+
- Find missing data contracts
|
|
10
|
+
- Measure state transition integrity
|
|
11
|
+
|
|
12
|
+
## Preconditions
|
|
13
|
+
|
|
14
|
+
- [ ] state.status === 'running'
|
|
15
|
+
- [ ] state.target_skill.path is set
|
|
16
|
+
- [ ] 'dataflow' in state.focus_areas OR state.focus_areas is empty
|
|
17
|
+
|
|
18
|
+
## Detection Patterns
|
|
19
|
+
|
|
20
|
+
### Pattern 1: Multiple Storage Locations
|
|
21
|
+
|
|
22
|
+
```regex
|
|
23
|
+
# Data written to multiple paths without centralization
|
|
24
|
+
/Write\s*\(\s*[`'"][^`'"]+[`'"]/g
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Pattern 2: Inconsistent Field Names
|
|
28
|
+
|
|
29
|
+
```regex
|
|
30
|
+
# Same concept with different names: title/name, id/identifier
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Pattern 3: Missing Schema Validation
|
|
34
|
+
|
|
35
|
+
```regex
|
|
36
|
+
# Absence of validation before state write
|
|
37
|
+
# Look for lack of: validate, schema, check, verify
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Pattern 4: Format Transformation Without Normalization
|
|
41
|
+
|
|
42
|
+
```regex
|
|
43
|
+
# Direct JSON.parse without error handling or normalization
|
|
44
|
+
/JSON\.parse\([^)]+\)(?!\s*\|\|)/
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Execution
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
async function execute(state, workDir) {
|
|
51
|
+
const skillPath = state.target_skill.path;
|
|
52
|
+
const startTime = Date.now();
|
|
53
|
+
const issues = [];
|
|
54
|
+
const evidence = [];
|
|
55
|
+
|
|
56
|
+
console.log(`Diagnosing data flow in ${skillPath}...`);
|
|
57
|
+
|
|
58
|
+
// 1. Collect all Write operations to map data storage
|
|
59
|
+
const allFiles = Glob(`${skillPath}/**/*.md`);
|
|
60
|
+
const writeLocations = [];
|
|
61
|
+
const readLocations = [];
|
|
62
|
+
|
|
63
|
+
for (const file of allFiles) {
|
|
64
|
+
const content = Read(file);
|
|
65
|
+
const relativePath = file.replace(skillPath + '/', '');
|
|
66
|
+
|
|
67
|
+
// Find Write operations
|
|
68
|
+
const writeMatches = content.matchAll(/Write\s*\(\s*[`'"]([^`'"]+)[`'"]/g);
|
|
69
|
+
for (const match of writeMatches) {
|
|
70
|
+
writeLocations.push({
|
|
71
|
+
file: relativePath,
|
|
72
|
+
target: match[1],
|
|
73
|
+
isStateFile: match[1].includes('state.json') || match[1].includes('config.json')
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Find Read operations
|
|
78
|
+
const readMatches = content.matchAll(/Read\s*\(\s*[`'"]([^`'"]+)[`'"]/g);
|
|
79
|
+
for (const match of readMatches) {
|
|
80
|
+
readLocations.push({
|
|
81
|
+
file: relativePath,
|
|
82
|
+
source: match[1]
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// 2. Check for scattered state storage
|
|
88
|
+
const stateTargets = writeLocations
|
|
89
|
+
.filter(w => w.isStateFile)
|
|
90
|
+
.map(w => w.target);
|
|
91
|
+
|
|
92
|
+
const uniqueStateFiles = [...new Set(stateTargets)];
|
|
93
|
+
|
|
94
|
+
if (uniqueStateFiles.length > 2) {
|
|
95
|
+
issues.push({
|
|
96
|
+
id: `DF-${issues.length + 1}`,
|
|
97
|
+
type: 'dataflow_break',
|
|
98
|
+
severity: 'high',
|
|
99
|
+
location: { file: 'multiple' },
|
|
100
|
+
description: `State stored in ${uniqueStateFiles.length} different locations`,
|
|
101
|
+
evidence: uniqueStateFiles.slice(0, 5),
|
|
102
|
+
root_cause: 'No centralized state management',
|
|
103
|
+
impact: 'State inconsistency between phases',
|
|
104
|
+
suggested_fix: 'Centralize state to single state.json with state manager'
|
|
105
|
+
});
|
|
106
|
+
evidence.push({
|
|
107
|
+
file: 'multiple',
|
|
108
|
+
pattern: 'scattered_state',
|
|
109
|
+
context: uniqueStateFiles.join(', '),
|
|
110
|
+
severity: 'high'
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// 3. Check for inconsistent field naming
|
|
115
|
+
const fieldNamePatterns = {
|
|
116
|
+
'name_vs_title': [/\.name\b/, /\.title\b/],
|
|
117
|
+
'id_vs_identifier': [/\.id\b/, /\.identifier\b/],
|
|
118
|
+
'status_vs_state': [/\.status\b/, /\.state\b/],
|
|
119
|
+
'error_vs_errors': [/\.error\b/, /\.errors\b/]
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const fieldUsage = {};
|
|
123
|
+
|
|
124
|
+
for (const file of allFiles) {
|
|
125
|
+
const content = Read(file);
|
|
126
|
+
const relativePath = file.replace(skillPath + '/', '');
|
|
127
|
+
|
|
128
|
+
for (const [patternName, patterns] of Object.entries(fieldNamePatterns)) {
|
|
129
|
+
for (const pattern of patterns) {
|
|
130
|
+
if (pattern.test(content)) {
|
|
131
|
+
if (!fieldUsage[patternName]) fieldUsage[patternName] = [];
|
|
132
|
+
fieldUsage[patternName].push({
|
|
133
|
+
file: relativePath,
|
|
134
|
+
pattern: pattern.toString()
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
for (const [patternName, usages] of Object.entries(fieldUsage)) {
|
|
142
|
+
const uniquePatterns = [...new Set(usages.map(u => u.pattern))];
|
|
143
|
+
if (uniquePatterns.length > 1) {
|
|
144
|
+
issues.push({
|
|
145
|
+
id: `DF-${issues.length + 1}`,
|
|
146
|
+
type: 'dataflow_break',
|
|
147
|
+
severity: 'medium',
|
|
148
|
+
location: { file: 'multiple' },
|
|
149
|
+
description: `Inconsistent field naming: ${patternName.replace('_vs_', ' vs ')}`,
|
|
150
|
+
evidence: usages.slice(0, 3).map(u => `${u.file}: ${u.pattern}`),
|
|
151
|
+
root_cause: 'Same concept referred to with different field names',
|
|
152
|
+
impact: 'Data may be lost during field access',
|
|
153
|
+
suggested_fix: `Standardize to single field name, add normalization function`
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// 4. Check for missing schema validation
|
|
159
|
+
for (const file of allFiles) {
|
|
160
|
+
const content = Read(file);
|
|
161
|
+
const relativePath = file.replace(skillPath + '/', '');
|
|
162
|
+
|
|
163
|
+
// Find JSON.parse without validation
|
|
164
|
+
const unsafeParses = content.match(/JSON\.parse\s*\([^)]+\)(?!\s*\?\?|\s*\|\|)/g);
|
|
165
|
+
const hasValidation = /validat|schema|type.*check/i.test(content);
|
|
166
|
+
|
|
167
|
+
if (unsafeParses && unsafeParses.length > 0 && !hasValidation) {
|
|
168
|
+
issues.push({
|
|
169
|
+
id: `DF-${issues.length + 1}`,
|
|
170
|
+
type: 'dataflow_break',
|
|
171
|
+
severity: 'medium',
|
|
172
|
+
location: { file: relativePath },
|
|
173
|
+
description: 'JSON parsing without validation',
|
|
174
|
+
evidence: unsafeParses.slice(0, 2),
|
|
175
|
+
root_cause: 'No schema validation after parsing',
|
|
176
|
+
impact: 'Invalid data may propagate through phases',
|
|
177
|
+
suggested_fix: 'Add schema validation after JSON.parse'
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// 5. Check state schema if exists
|
|
183
|
+
const stateSchemaFile = Glob(`${skillPath}/phases/state-schema.md`)[0];
|
|
184
|
+
if (stateSchemaFile) {
|
|
185
|
+
const schemaContent = Read(stateSchemaFile);
|
|
186
|
+
|
|
187
|
+
// Check for type definitions
|
|
188
|
+
const hasTypeScript = /interface\s+\w+|type\s+\w+\s*=/i.test(schemaContent);
|
|
189
|
+
const hasValidationFunction = /function\s+validate|validateState/i.test(schemaContent);
|
|
190
|
+
|
|
191
|
+
if (hasTypeScript && !hasValidationFunction) {
|
|
192
|
+
issues.push({
|
|
193
|
+
id: `DF-${issues.length + 1}`,
|
|
194
|
+
type: 'dataflow_break',
|
|
195
|
+
severity: 'low',
|
|
196
|
+
location: { file: 'phases/state-schema.md' },
|
|
197
|
+
description: 'Type definitions without runtime validation',
|
|
198
|
+
evidence: ['TypeScript interfaces defined but no validation function'],
|
|
199
|
+
root_cause: 'Types are compile-time only, not enforced at runtime',
|
|
200
|
+
impact: 'Schema violations may occur at runtime',
|
|
201
|
+
suggested_fix: 'Add validateState() function using Zod or manual checks'
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
} else if (state.target_skill.execution_mode === 'autonomous') {
|
|
205
|
+
issues.push({
|
|
206
|
+
id: `DF-${issues.length + 1}`,
|
|
207
|
+
type: 'dataflow_break',
|
|
208
|
+
severity: 'high',
|
|
209
|
+
location: { file: 'phases/' },
|
|
210
|
+
description: 'Autonomous skill missing state-schema.md',
|
|
211
|
+
evidence: ['No state schema definition found'],
|
|
212
|
+
root_cause: 'State structure undefined for orchestrator',
|
|
213
|
+
impact: 'Inconsistent state handling across actions',
|
|
214
|
+
suggested_fix: 'Create phases/state-schema.md with explicit type definitions'
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// 6. Check read-write alignment
|
|
219
|
+
const writtenFiles = new Set(writeLocations.map(w => w.target));
|
|
220
|
+
const readFiles = new Set(readLocations.map(r => r.source));
|
|
221
|
+
|
|
222
|
+
const writtenButNotRead = [...writtenFiles].filter(f =>
|
|
223
|
+
!readFiles.has(f) && !f.includes('output') && !f.includes('report')
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
if (writtenButNotRead.length > 0) {
|
|
227
|
+
issues.push({
|
|
228
|
+
id: `DF-${issues.length + 1}`,
|
|
229
|
+
type: 'dataflow_break',
|
|
230
|
+
severity: 'low',
|
|
231
|
+
location: { file: 'multiple' },
|
|
232
|
+
description: 'Files written but never read',
|
|
233
|
+
evidence: writtenButNotRead.slice(0, 3),
|
|
234
|
+
root_cause: 'Orphaned output files',
|
|
235
|
+
impact: 'Wasted storage and potential confusion',
|
|
236
|
+
suggested_fix: 'Remove unused writes or add reads where needed'
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// 7. Calculate severity
|
|
241
|
+
const criticalCount = issues.filter(i => i.severity === 'critical').length;
|
|
242
|
+
const highCount = issues.filter(i => i.severity === 'high').length;
|
|
243
|
+
const severity = criticalCount > 0 ? 'critical' :
|
|
244
|
+
highCount > 1 ? 'high' :
|
|
245
|
+
highCount > 0 ? 'medium' :
|
|
246
|
+
issues.length > 0 ? 'low' : 'none';
|
|
247
|
+
|
|
248
|
+
// 8. Write diagnosis result
|
|
249
|
+
const diagnosisResult = {
|
|
250
|
+
status: 'completed',
|
|
251
|
+
issues_found: issues.length,
|
|
252
|
+
severity: severity,
|
|
253
|
+
execution_time_ms: Date.now() - startTime,
|
|
254
|
+
details: {
|
|
255
|
+
patterns_checked: [
|
|
256
|
+
'scattered_state',
|
|
257
|
+
'inconsistent_naming',
|
|
258
|
+
'missing_validation',
|
|
259
|
+
'read_write_alignment'
|
|
260
|
+
],
|
|
261
|
+
patterns_matched: evidence.map(e => e.pattern),
|
|
262
|
+
evidence: evidence,
|
|
263
|
+
data_flow_map: {
|
|
264
|
+
write_locations: writeLocations.length,
|
|
265
|
+
read_locations: readLocations.length,
|
|
266
|
+
unique_state_files: uniqueStateFiles.length
|
|
267
|
+
},
|
|
268
|
+
recommendations: [
|
|
269
|
+
uniqueStateFiles.length > 2 ? 'Implement centralized state manager' : null,
|
|
270
|
+
issues.some(i => i.description.includes('naming'))
|
|
271
|
+
? 'Create normalization layer for field names' : null,
|
|
272
|
+
issues.some(i => i.description.includes('validation'))
|
|
273
|
+
? 'Add Zod or JSON Schema validation' : null
|
|
274
|
+
].filter(Boolean)
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
Write(`${workDir}/diagnosis/dataflow-diagnosis.json`,
|
|
279
|
+
JSON.stringify(diagnosisResult, null, 2));
|
|
280
|
+
|
|
281
|
+
return {
|
|
282
|
+
stateUpdates: {
|
|
283
|
+
'diagnosis.dataflow': diagnosisResult,
|
|
284
|
+
issues: [...state.issues, ...issues]
|
|
285
|
+
},
|
|
286
|
+
outputFiles: [`${workDir}/diagnosis/dataflow-diagnosis.json`],
|
|
287
|
+
summary: `Data flow diagnosis: ${issues.length} issues found (severity: ${severity})`
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## State Updates
|
|
293
|
+
|
|
294
|
+
```javascript
|
|
295
|
+
return {
|
|
296
|
+
stateUpdates: {
|
|
297
|
+
'diagnosis.dataflow': {
|
|
298
|
+
status: 'completed',
|
|
299
|
+
issues_found: <count>,
|
|
300
|
+
severity: '<critical|high|medium|low|none>',
|
|
301
|
+
// ... full diagnosis result
|
|
302
|
+
},
|
|
303
|
+
issues: [...existingIssues, ...newIssues]
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## Error Handling
|
|
309
|
+
|
|
310
|
+
| Error Type | Recovery |
|
|
311
|
+
|------------|----------|
|
|
312
|
+
| Glob pattern error | Use fallback patterns |
|
|
313
|
+
| File read error | Skip and continue |
|
|
314
|
+
|
|
315
|
+
## Next Actions
|
|
316
|
+
|
|
317
|
+
- Success: action-diagnose-agent (or next in focus_areas)
|
|
318
|
+
- Skipped: If 'dataflow' not in focus_areas
|