claude-code-workflow 6.1.4 → 6.2.2
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 +10 -0
- package/.claude/agents/action-planning-agent.md +857 -778
- package/.claude/agents/cli-execution-agent.md +266 -269
- package/.claude/agents/cli-explore-agent.md +2 -2
- package/.claude/agents/cli-lite-planning-agent.md +142 -92
- package/.claude/agents/cli-planning-agent.md +4 -4
- package/.claude/agents/code-developer.md +7 -6
- package/.claude/agents/conceptual-planning-agent.md +2 -2
- package/.claude/agents/context-search-agent.md +31 -32
- package/.claude/agents/doc-generator.md +4 -4
- package/.claude/agents/memory-bridge.md +93 -93
- package/.claude/agents/test-context-search-agent.md +8 -7
- package/.claude/agents/test-fix-agent.md +7 -6
- package/.claude/commands/clean.md +516 -0
- package/.claude/commands/memory/compact.md +383 -0
- 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.md +5 -5
- package/.claude/commands/memory/tech-research-rules.md +310 -0
- package/.claude/commands/memory/update-full.md +332 -332
- package/.claude/commands/memory/workflow-skill-memory.md +4 -4
- package/.claude/commands/task/create.md +151 -151
- package/.claude/commands/version.md +254 -254
- package/.claude/commands/workflow/brainstorm/api-designer.md +587 -585
- package/.claude/commands/workflow/brainstorm/artifacts.md +1 -0
- package/.claude/commands/workflow/brainstorm/auto-parallel.md +443 -443
- 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 -387
- package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -221
- package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -221
- package/.claude/commands/workflow/debug.md +321 -0
- package/.claude/commands/workflow/execute.md +13 -0
- package/.claude/commands/workflow/init.md +165 -164
- package/.claude/commands/workflow/lite-execute.md +119 -13
- package/.claude/commands/workflow/lite-fix.md +623 -621
- package/.claude/commands/workflow/lite-plan.md +610 -592
- package/.claude/commands/workflow/plan.md +5 -5
- package/.claude/commands/workflow/review-module-cycle.md +2 -0
- package/.claude/commands/workflow/review-session-cycle.md +2 -0
- package/.claude/commands/workflow/review.md +297 -291
- package/.claude/commands/workflow/session/complete.md +153 -500
- package/.claude/commands/workflow/session/list.md +95 -95
- package/.claude/commands/workflow/session/resume.md +60 -60
- package/.claude/commands/workflow/session/start.md +199 -199
- package/.claude/commands/workflow/tdd-plan.md +3 -3
- package/.claude/commands/workflow/tdd-verify.md +23 -9
- package/.claude/commands/workflow/test-cycle-execute.md +2 -0
- package/.claude/commands/workflow/test-fix-gen.md +699 -699
- package/.claude/commands/workflow/tools/conflict-resolution.md +104 -18
- package/.claude/commands/workflow/tools/context-gather.md +436 -434
- package/.claude/commands/workflow/tools/task-generate-agent.md +490 -291
- package/.claude/commands/workflow/tools/task-generate-tdd.md +18 -10
- package/.claude/commands/workflow/tools/test-concept-enhanced.md +2 -1
- package/.claude/commands/workflow/tools/test-context-gather.md +1 -0
- package/.claude/commands/workflow/tools/test-task-generate.md +1 -0
- package/.claude/commands/workflow/ui-design/import-from-code.md +9 -6
- package/.claude/skills/command-guide/SKILL.md +5 -5
- package/.claude/skills/command-guide/index/all-commands.json +1 -1
- package/.claude/skills/command-guide/index/by-category.json +1 -1
- package/.claude/skills/command-guide/index/by-use-case.json +1 -1
- package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +857 -778
- package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +266 -269
- package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +2 -2
- package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +142 -92
- package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +4 -4
- package/.claude/skills/command-guide/reference/agents/code-developer.md +7 -6
- package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +2 -2
- package/.claude/skills/command-guide/reference/agents/context-search-agent.md +31 -32
- package/.claude/skills/command-guide/reference/agents/doc-generator.md +4 -4
- package/.claude/skills/command-guide/reference/agents/memory-bridge.md +93 -93
- package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +8 -7
- package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +7 -6
- package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -471
- package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -386
- package/.claude/skills/command-guide/reference/commands/memory/docs.md +17 -16
- package/.claude/skills/command-guide/reference/commands/memory/load.md +5 -5
- package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +194 -357
- package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -332
- package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +4 -4
- package/.claude/skills/command-guide/reference/commands/task/create.md +151 -151
- package/.claude/skills/command-guide/reference/commands/version.md +254 -254
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +585 -585
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +443 -443
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +220 -220
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +200 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +200 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +200 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +387 -387
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +221 -221
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +221 -221
- package/.claude/skills/command-guide/reference/commands/workflow/execute.md +25 -20
- package/.claude/skills/command-guide/reference/commands/workflow/init.md +164 -164
- package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +748 -686
- package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +664 -621
- package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +645 -592
- package/.claude/skills/command-guide/reference/commands/workflow/plan.md +5 -5
- package/.claude/skills/command-guide/reference/commands/workflow/review.md +25 -18
- package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +547 -500
- package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +45 -27
- package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +35 -19
- package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +90 -33
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +3 -3
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +23 -9
- package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +699 -699
- package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +103 -17
- package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -434
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +487 -291
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +17 -10
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +1 -1
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +6 -6
- package/.claude/workflows/chinese-response.md +38 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-api.txt +122 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-components.txt +122 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-config.txt +89 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-core.txt +60 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-patterns.txt +70 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-testing.txt +81 -0
- package/.claude/workflows/cli-templates/prompts/rules/tech-rules-agent-prompt.txt +89 -0
- package/.claude/workflows/cli-templates/prompts/workflow/gemini-solution-design.txt +131 -131
- package/.claude/workflows/cli-templates/prompts/workflow/skill-conflict-patterns.txt +5 -9
- package/.claude/workflows/cli-templates/prompts/workflow/skill-lessons-learned.txt +5 -9
- package/.claude/workflows/cli-templates/protocols/analysis-protocol.md +112 -0
- package/.claude/workflows/cli-templates/protocols/write-protocol.md +201 -0
- package/.claude/workflows/cli-templates/schemas/conflict-resolution-schema.json +137 -0
- package/.claude/workflows/cli-templates/schemas/debug-log-json-schema.json +127 -0
- package/.claude/workflows/cli-templates/schemas/fix-plan-json-schema.json +25 -0
- package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +25 -0
- package/.claude/workflows/cli-tools-usage.md +526 -0
- package/{CLAUDE.md → .claude/workflows/coding-philosophy.md} +24 -45
- package/.claude/workflows/context-tools.md +84 -0
- package/.claude/workflows/file-modification.md +64 -0
- package/.claude/workflows/tool-strategy.md +216 -79
- package/.claude/workflows/windows-platform.md +16 -0
- package/.claude/workflows/workflow-architecture.md +942 -942
- package/.codex/AGENTS.md +63 -330
- package/.codex/prompts/debug.md +318 -0
- package/.codex/prompts/execute.md +273 -0
- package/.codex/prompts/lite-execute.md +164 -0
- package/.codex/prompts/lite-plan.md +469 -0
- package/.codex/prompts.zip +0 -0
- package/.gemini/GEMINI.md +25 -164
- package/.qwen/QWEN.md +0 -139
- package/README.md +29 -9
- package/ccw/README.md +30 -6
- package/ccw/bin/ccw-mcp.js +7 -0
- package/ccw/bin/ccw.js +9 -9
- package/ccw/package.json +65 -47
- package/ccw/src/.workflow/.cli-history/history.db +0 -0
- package/ccw/src/.workflow/.cli-history/history.db-shm +0 -0
- package/ccw/src/.workflow/.cli-history/history.db-wal +0 -0
- package/ccw/src/cli.ts +244 -0
- package/ccw/src/commands/cli.ts +740 -0
- package/ccw/src/commands/core-memory.ts +770 -0
- package/ccw/src/commands/hook.ts +315 -0
- package/ccw/src/commands/install.ts +519 -0
- package/ccw/src/commands/{list.js → list.ts} +1 -1
- package/ccw/src/commands/memory.ts +1090 -0
- package/ccw/src/commands/{serve.js → serve.ts} +14 -5
- package/ccw/src/commands/session-path-resolver.ts +372 -0
- package/ccw/src/commands/session.ts +1141 -0
- package/ccw/src/commands/{stop.js → stop.ts} +16 -6
- package/ccw/src/commands/tool.ts +201 -0
- package/ccw/src/commands/{uninstall.js → uninstall.ts} +89 -40
- package/ccw/src/commands/{upgrade.js → upgrade.ts} +68 -23
- package/ccw/src/commands/{view.js → view.ts} +22 -8
- package/ccw/src/config/storage-paths.ts +670 -0
- package/ccw/src/core/cache-manager.ts +294 -0
- package/ccw/src/core/claude-freshness.ts +319 -0
- package/ccw/src/core/core-memory-store.ts +1528 -0
- package/ccw/src/core/{dashboard-generator-patch.js → dashboard-generator-patch.ts} +18 -0
- package/ccw/src/core/{dashboard-generator.js → dashboard-generator.ts} +69 -12
- package/ccw/src/core/data-aggregator.ts +584 -0
- package/ccw/src/core/history-importer.ts +625 -0
- package/ccw/src/core/{lite-scanner.js → lite-scanner-complete.ts} +162 -66
- package/ccw/src/core/lite-scanner.ts +469 -0
- package/ccw/src/core/{manifest.js → manifest.ts} +104 -34
- package/ccw/src/core/memory-embedder-bridge.ts +262 -0
- package/ccw/src/core/memory-store.ts +978 -0
- package/ccw/src/core/routes/ccw-routes.ts +96 -0
- package/ccw/src/core/routes/claude-routes.ts +1183 -0
- package/ccw/src/core/routes/cli-routes.ts +561 -0
- package/ccw/src/core/routes/codexlens-routes.ts +806 -0
- package/ccw/src/core/routes/core-memory-routes.ts +605 -0
- package/ccw/src/core/routes/files-routes.ts +428 -0
- package/ccw/src/core/routes/graph-routes.md +164 -0
- package/ccw/src/core/routes/graph-routes.ts +626 -0
- package/ccw/src/core/routes/help-routes.ts +308 -0
- package/ccw/src/core/routes/hooks-routes.ts +405 -0
- package/ccw/src/core/routes/mcp-routes.ts +1271 -0
- package/ccw/src/core/routes/mcp-routes.ts.backup +550 -0
- package/ccw/src/core/routes/mcp-templates-db.ts +268 -0
- package/ccw/src/core/routes/memory-routes.ts +1206 -0
- package/ccw/src/core/routes/rules-routes.ts +526 -0
- package/ccw/src/core/routes/session-routes.ts +467 -0
- package/ccw/src/core/routes/skills-routes.ts +599 -0
- package/ccw/src/core/routes/status-routes.ts +57 -0
- package/ccw/src/core/routes/system-routes.ts +427 -0
- package/ccw/src/core/server.ts +431 -0
- package/ccw/src/core/session-clustering-service.ts +1258 -0
- package/ccw/src/core/session-scanner.ts +283 -0
- package/ccw/src/core/websocket.ts +190 -0
- package/ccw/src/{index.js → index.ts} +1 -0
- package/ccw/src/mcp-server/index.ts +186 -0
- package/ccw/src/templates/assets/css/github-dark.min.css +10 -0
- package/ccw/src/templates/assets/css/github.min.css +10 -0
- package/ccw/src/templates/assets/js/cytoscape.min.js +32 -0
- package/ccw/src/templates/assets/js/d3.min.js +2 -0
- package/ccw/src/templates/assets/js/highlight.min.js +1244 -0
- package/ccw/src/templates/assets/js/lucide.min.js +12 -0
- package/ccw/src/templates/assets/js/marked.min.js +69 -0
- package/ccw/src/templates/assets/js/tailwind.js +83 -0
- package/ccw/src/templates/dashboard-css/01-base.css +11 -0
- package/ccw/src/templates/dashboard-css/02-session.css +22 -0
- package/ccw/src/templates/dashboard-css/04-lite-tasks.css +10 -0
- package/ccw/src/templates/dashboard-css/06-cards.css +10 -4
- package/ccw/src/templates/dashboard-css/07-managers.css +1178 -7
- package/ccw/src/templates/dashboard-css/09-explorer.css +23 -12
- package/ccw/src/templates/dashboard-css/10-cli-status.css +337 -0
- package/ccw/src/templates/dashboard-css/11-cli-history.css +271 -0
- package/ccw/src/templates/dashboard-css/12-cli-legacy.css +796 -0
- package/ccw/src/templates/dashboard-css/13-cli-ccw.css +199 -0
- package/ccw/src/templates/dashboard-css/14-cli-modals.css +258 -0
- package/ccw/src/templates/dashboard-css/15-cli-endpoints.css +305 -0
- package/ccw/src/templates/dashboard-css/16-cli-session.css +241 -0
- package/ccw/src/templates/dashboard-css/17-cli-conversation.css +283 -0
- package/ccw/src/templates/dashboard-css/18-cli-settings.css +160 -0
- package/ccw/src/templates/dashboard-css/19-cli-native-session.css +496 -0
- package/ccw/src/templates/dashboard-css/20-cli-taskqueue.css +188 -0
- package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +310 -0
- package/ccw/src/templates/dashboard-css/22-cli-semantic.css +240 -0
- package/ccw/src/templates/dashboard-css/23-memory.css +2390 -0
- package/ccw/src/templates/dashboard-css/24-prompt-history.css +1089 -0
- package/ccw/src/templates/dashboard-css/25-skills-rules.css +326 -0
- package/ccw/src/templates/dashboard-css/26-claude-manager.css +908 -0
- package/ccw/src/templates/dashboard-css/27-graph-explorer.css +1678 -0
- package/ccw/src/templates/dashboard-css/28-mcp-manager.css +748 -0
- package/ccw/src/templates/dashboard-css/29-help.css +264 -0
- package/ccw/src/templates/dashboard-css/30-core-memory.css +1700 -0
- package/ccw/src/templates/dashboard-js/api.js +162 -142
- package/ccw/src/templates/dashboard-js/components/carousel.js +4 -4
- package/ccw/src/templates/dashboard-js/components/cli-history.js +876 -0
- package/ccw/src/templates/dashboard-js/components/cli-status.js +978 -0
- package/ccw/src/templates/dashboard-js/components/global-notifications.js +508 -219
- package/ccw/src/templates/dashboard-js/components/hook-manager.js +1277 -282
- package/ccw/src/templates/dashboard-js/components/index-manager.js +302 -0
- package/ccw/src/templates/dashboard-js/components/mcp-manager.js +718 -27
- package/ccw/src/templates/dashboard-js/components/modals.js +66 -0
- package/ccw/src/templates/dashboard-js/components/navigation.js +80 -12
- package/ccw/src/templates/dashboard-js/components/notifications.js +758 -194
- package/ccw/src/templates/dashboard-js/components/storage-manager.js +478 -0
- package/ccw/src/templates/dashboard-js/components/tabs-other.js +157 -6
- package/ccw/src/templates/dashboard-js/components/task-queue-sidebar.js +716 -0
- package/ccw/src/templates/dashboard-js/help-i18n.js +272 -0
- package/ccw/src/templates/dashboard-js/i18n.js +2807 -0
- package/ccw/src/templates/dashboard-js/main.js +15 -0
- package/ccw/src/templates/dashboard-js/state.js +243 -42
- package/ccw/src/templates/dashboard-js/utils.js +47 -1
- package/ccw/src/templates/dashboard-js/views/claude-manager.js +912 -0
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +2272 -0
- package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +964 -0
- package/ccw/src/templates/dashboard-js/views/core-memory-clusters.js +503 -0
- package/ccw/src/templates/dashboard-js/views/core-memory.js +782 -0
- package/ccw/src/templates/dashboard-js/views/explorer.js +888 -852
- package/ccw/src/templates/dashboard-js/views/graph-explorer.js +1157 -0
- package/ccw/src/templates/dashboard-js/views/help.js +856 -0
- package/ccw/src/templates/dashboard-js/views/history.js +337 -0
- package/ccw/src/templates/dashboard-js/views/home.js +61 -15
- package/ccw/src/templates/dashboard-js/views/hook-manager.js +311 -43
- package/ccw/src/templates/dashboard-js/views/lite-tasks.js +204 -28
- package/ccw/src/templates/dashboard-js/views/mcp-manager.js +2187 -411
- package/ccw/src/templates/dashboard-js/views/mcp-manager.js.backup +1729 -0
- package/ccw/src/templates/dashboard-js/views/mcp-manager.js.new +928 -0
- package/ccw/src/templates/dashboard-js/views/memory.js +1221 -0
- package/ccw/src/templates/dashboard-js/views/prompt-history.js +713 -0
- package/ccw/src/templates/dashboard-js/views/rules-manager.js +828 -0
- package/ccw/src/templates/dashboard-js/views/session-detail.js +54 -53
- package/ccw/src/templates/dashboard-js/views/skills-manager.js +819 -0
- package/ccw/src/templates/dashboard.html +185 -85
- package/ccw/src/templates/hooks-config-example.json +60 -0
- package/ccw/src/tools/classify-folders.ts +245 -0
- package/ccw/src/tools/cli-config-manager.ts +268 -0
- package/ccw/src/tools/cli-executor.ts +2014 -0
- package/ccw/src/tools/cli-history-store.ts +1195 -0
- package/ccw/src/tools/codex-lens.ts +1141 -0
- package/ccw/src/tools/{convert-tokens-to-css.js → convert-tokens-to-css.ts} +73 -23
- package/ccw/src/tools/core-memory.ts +444 -0
- package/ccw/src/tools/detect-changed-modules.ts +325 -0
- package/ccw/src/tools/{discover-design-files.js → discover-design-files.ts} +74 -24
- package/ccw/src/tools/edit-file.ts +568 -0
- package/ccw/src/tools/{generate-module-docs.js → generate-module-docs.ts} +207 -185
- package/ccw/src/tools/{get-modules-by-depth.js → get-modules-by-depth.ts} +120 -79
- package/ccw/src/tools/index.ts +370 -0
- package/ccw/src/tools/native-session-discovery.ts +795 -0
- package/ccw/src/tools/notifier.ts +129 -0
- package/ccw/src/tools/read-file.ts +410 -0
- package/ccw/src/tools/resume-strategy.ts +345 -0
- package/ccw/src/tools/session-content-parser.ts +619 -0
- package/ccw/src/tools/session-manager.ts +1026 -0
- package/ccw/src/tools/smart-context.ts +228 -0
- package/ccw/src/tools/smart-search.ts +2065 -0
- package/ccw/src/tools/smart-search.ts.backup +1233 -0
- package/ccw/src/tools/storage-manager.ts +455 -0
- package/ccw/src/tools/write-file.ts +222 -0
- package/ccw/src/types/config.ts +11 -0
- package/ccw/src/types/index.ts +3 -0
- package/ccw/src/types/session.ts +25 -0
- package/ccw/src/types/tool.ts +41 -0
- package/ccw/src/utils/{browser-launcher.js → browser-launcher.ts} +10 -8
- package/ccw/src/utils/file-utils.ts +48 -0
- package/ccw/src/utils/{path-resolver.js → path-resolver.ts} +114 -78
- package/ccw/src/utils/path-validator.ts +153 -0
- package/ccw/src/utils/{ui.js → ui.ts} +32 -25
- package/codex-lens/pyproject.toml +48 -0
- package/codex-lens/src/codexlens/.workflow/.cli-history/history.db +0 -0
- package/codex-lens/src/codexlens/__init__.py +28 -0
- package/codex-lens/src/codexlens/__main__.py +14 -0
- package/codex-lens/src/codexlens/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/__main__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/errors.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__init__.py +27 -0
- package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/commands.py +1931 -0
- package/codex-lens/src/codexlens/cli/embedding_manager.py +620 -0
- package/codex-lens/src/codexlens/cli/model_manager.py +289 -0
- package/codex-lens/src/codexlens/cli/output.py +124 -0
- package/codex-lens/src/codexlens/config.py +201 -0
- package/codex-lens/src/codexlens/entities.py +121 -0
- package/codex-lens/src/codexlens/errors.py +55 -0
- package/codex-lens/src/codexlens/indexing/README.md +77 -0
- package/codex-lens/src/codexlens/indexing/__init__.py +4 -0
- package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/indexing/symbol_extractor.py +243 -0
- package/codex-lens/src/codexlens/parsers/__init__.py +8 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/encoding.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/encoding.py +202 -0
- package/codex-lens/src/codexlens/parsers/factory.py +256 -0
- package/codex-lens/src/codexlens/parsers/tokenizer.py +98 -0
- package/codex-lens/src/codexlens/parsers/treesitter_parser.py +335 -0
- package/codex-lens/src/codexlens/search/__init__.py +15 -0
- package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/query_parser.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/chain_search.py +647 -0
- package/codex-lens/src/codexlens/search/enrichment.py +150 -0
- package/codex-lens/src/codexlens/search/hybrid_search.py +313 -0
- package/codex-lens/src/codexlens/search/query_parser.py +242 -0
- package/codex-lens/src/codexlens/search/ranking.py +274 -0
- package/codex-lens/src/codexlens/semantic/__init__.py +39 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/code_extractor.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/graph_analyzer.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/llm_enhancer.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/ann_index.py +414 -0
- package/codex-lens/src/codexlens/semantic/chunker.py +448 -0
- package/codex-lens/src/codexlens/semantic/code_extractor.py +274 -0
- package/codex-lens/src/codexlens/semantic/embedder.py +185 -0
- package/codex-lens/src/codexlens/semantic/vector_store.py +955 -0
- package/codex-lens/src/codexlens/storage/__init__.py +29 -0
- package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/file_cache.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/migration_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/dir_index.py +1850 -0
- package/codex-lens/src/codexlens/storage/file_cache.py +32 -0
- package/codex-lens/src/codexlens/storage/index_tree.py +776 -0
- package/codex-lens/src/codexlens/storage/migration_manager.py +154 -0
- package/codex-lens/src/codexlens/storage/migrations/__init__.py +1 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_001_normalize_keywords.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_002_add_token_metadata.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_003_code_relationships.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_004_dual_fts.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_005_cleanup_unused_fields.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_001_normalize_keywords.py +123 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_002_add_token_metadata.py +48 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_004_dual_fts.py +232 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_005_cleanup_unused_fields.py +196 -0
- package/codex-lens/src/codexlens/storage/path_mapper.py +274 -0
- package/codex-lens/src/codexlens/storage/registry.py +670 -0
- package/codex-lens/src/codexlens/storage/sqlite_store.py +576 -0
- package/codex-lens/src/codexlens/storage/sqlite_utils.py +64 -0
- package/package.json +4 -1
- package/.claude/commands/memory/tech-research.md +0 -477
- package/.claude/scripts/classify-folders.sh +0 -39
- package/.claude/scripts/convert_tokens_to_css.sh +0 -229
- package/.claude/scripts/detect_changed_modules.sh +0 -161
- package/.claude/scripts/discover-design-files.sh +0 -87
- package/.claude/scripts/extract-animations.js +0 -243
- package/.claude/scripts/extract-computed-styles.js +0 -118
- package/.claude/scripts/extract-layout-structure.js +0 -411
- package/.claude/scripts/generate_module_docs.sh +0 -717
- package/.claude/scripts/get_modules_by_depth.sh +0 -170
- package/.claude/scripts/ui-generate-preview.sh +0 -395
- package/.claude/scripts/ui-instantiate-prototypes.sh +0 -815
- package/.claude/scripts/update_module_claude.sh +0 -337
- package/.claude/workflows/context-search-strategy.md +0 -77
- package/.claude/workflows/intelligent-tools-strategy.md +0 -662
- package/ccw/src/cli.js +0 -119
- package/ccw/src/commands/install.js +0 -324
- package/ccw/src/commands/tool.js +0 -138
- package/ccw/src/core/data-aggregator.js +0 -409
- package/ccw/src/core/server.js +0 -2063
- package/ccw/src/core/session-scanner.js +0 -235
- package/ccw/src/tools/classify-folders.js +0 -204
- package/ccw/src/tools/detect-changed-modules.js +0 -288
- package/ccw/src/tools/edit-file.js +0 -266
- package/ccw/src/tools/index.js +0 -176
- package/ccw/src/utils/file-utils.js +0 -48
|
@@ -5,6 +5,9 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|
|
5
5
|
// Initialize Lucide icons (must be first to render SVG icons)
|
|
6
6
|
try { lucide.createIcons(); } catch (e) { console.error('Lucide icons init failed:', e); }
|
|
7
7
|
|
|
8
|
+
// Initialize i18n (must be early to translate static content)
|
|
9
|
+
try { initI18n(); } catch (e) { console.error('I18n init failed:', e); }
|
|
10
|
+
|
|
8
11
|
// Initialize components with error handling to prevent cascading failures
|
|
9
12
|
try { initTheme(); } catch (e) { console.error('Theme init failed:', e); }
|
|
10
13
|
try { initSidebar(); } catch (e) { console.error('Sidebar init failed:', e); }
|
|
@@ -15,7 +18,9 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|
|
15
18
|
try { initCarousel(); } catch (e) { console.error('Carousel init failed:', e); }
|
|
16
19
|
try { initMcpManager(); } catch (e) { console.error('MCP Manager init failed:', e); }
|
|
17
20
|
try { initHookManager(); } catch (e) { console.error('Hook Manager init failed:', e); }
|
|
21
|
+
try { initCliStatus(); } catch (e) { console.error('CLI Status init failed:', e); }
|
|
18
22
|
try { initGlobalNotifications(); } catch (e) { console.error('Global notifications init failed:', e); }
|
|
23
|
+
try { initTaskQueueSidebar(); } catch (e) { console.error('Task queue sidebar init failed:', e); }
|
|
19
24
|
try { initVersionCheck(); } catch (e) { console.error('Version check init failed:', e); }
|
|
20
25
|
|
|
21
26
|
// Initialize real-time features (WebSocket + auto-refresh)
|
|
@@ -67,6 +72,16 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|
|
67
72
|
if (typeof closeHookCreateModal === 'function') {
|
|
68
73
|
closeHookCreateModal();
|
|
69
74
|
}
|
|
75
|
+
|
|
76
|
+
// Close notification sidebar if open
|
|
77
|
+
if (isNotificationPanelVisible && typeof toggleNotifSidebar === 'function') {
|
|
78
|
+
toggleNotifSidebar();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Close task queue sidebar if open
|
|
82
|
+
if (isTaskQueueSidebarVisible && typeof toggleTaskQueueSidebar === 'function') {
|
|
83
|
+
toggleTaskQueueSidebar();
|
|
84
|
+
}
|
|
70
85
|
}
|
|
71
86
|
});
|
|
72
87
|
});
|
|
@@ -1,42 +1,243 @@
|
|
|
1
|
-
// ========================================
|
|
2
|
-
// State Management
|
|
3
|
-
// ========================================
|
|
4
|
-
// Global state variables and template placeholders
|
|
5
|
-
// This module must be loaded first as other modules depend on these variables
|
|
6
|
-
|
|
7
|
-
// ========== Data Placeholders ==========
|
|
8
|
-
// These placeholders are replaced by the dashboard generator at build time
|
|
9
|
-
let workflowData = {{WORKFLOW_DATA}};
|
|
10
|
-
let projectPath = '{{PROJECT_PATH}}';
|
|
11
|
-
let recentPaths = {{RECENT_PATHS}};
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
// ========================================
|
|
2
|
+
// State Management
|
|
3
|
+
// ========================================
|
|
4
|
+
// Global state variables and template placeholders
|
|
5
|
+
// This module must be loaded first as other modules depend on these variables
|
|
6
|
+
|
|
7
|
+
// ========== Data Placeholders ==========
|
|
8
|
+
// These placeholders are replaced by the dashboard generator at build time
|
|
9
|
+
let workflowData = {{WORKFLOW_DATA}};
|
|
10
|
+
let projectPath = '{{PROJECT_PATH}}';
|
|
11
|
+
let recentPaths = {{RECENT_PATHS}};
|
|
12
|
+
|
|
13
|
+
// Platform detection for cross-platform MCP command generation
|
|
14
|
+
// 'win32' for Windows, 'darwin' for macOS, 'linux' for Linux
|
|
15
|
+
const serverPlatform = '{{SERVER_PLATFORM}}';
|
|
16
|
+
const isWindowsPlatform = serverPlatform === 'win32';
|
|
17
|
+
|
|
18
|
+
// ========== Application State ==========
|
|
19
|
+
// Current filter for session list view ('all', 'active', 'archived')
|
|
20
|
+
let currentFilter = 'all';
|
|
21
|
+
|
|
22
|
+
// Current lite task type ('lite-plan', 'lite-fix', or null)
|
|
23
|
+
let currentLiteType = null;
|
|
24
|
+
|
|
25
|
+
// Current view mode ('sessions', 'liteTasks', 'project-overview', 'sessionDetail', 'liteTaskDetail')
|
|
26
|
+
let currentView = 'sessions';
|
|
27
|
+
|
|
28
|
+
// Current session detail key (null when not in detail view)
|
|
29
|
+
let currentSessionDetailKey = null;
|
|
30
|
+
|
|
31
|
+
// ========== Data Stores ==========
|
|
32
|
+
// Store session data for modal/detail access
|
|
33
|
+
// Key: session key, Value: session data object
|
|
34
|
+
const sessionDataStore = {};
|
|
35
|
+
|
|
36
|
+
// Store lite task session data for detail page access
|
|
37
|
+
// Key: session key, Value: lite session data object
|
|
38
|
+
const liteTaskDataStore = {};
|
|
39
|
+
|
|
40
|
+
// Store task JSON data in a global map instead of inline script tags
|
|
41
|
+
// Key: unique task ID, Value: raw task JSON data
|
|
42
|
+
const taskJsonStore = {};
|
|
43
|
+
|
|
44
|
+
// ========== Global Notification Queue ==========
|
|
45
|
+
// Notification queue visible from any view (persisted to localStorage)
|
|
46
|
+
const NOTIFICATION_STORAGE_KEY = 'ccw_notifications';
|
|
47
|
+
const NOTIFICATION_MAX_STORED = 100;
|
|
48
|
+
|
|
49
|
+
// Load notifications from localStorage on init
|
|
50
|
+
let globalNotificationQueue = loadNotificationsFromStorage();
|
|
51
|
+
let isNotificationPanelVisible = false;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Load notifications from localStorage
|
|
55
|
+
* @returns {Array} Notification array
|
|
56
|
+
*/
|
|
57
|
+
function loadNotificationsFromStorage() {
|
|
58
|
+
try {
|
|
59
|
+
const stored = localStorage.getItem(NOTIFICATION_STORAGE_KEY);
|
|
60
|
+
if (stored) {
|
|
61
|
+
const parsed = JSON.parse(stored);
|
|
62
|
+
// Filter out notifications older than 7 days
|
|
63
|
+
const sevenDaysAgo = Date.now() - (7 * 24 * 60 * 60 * 1000);
|
|
64
|
+
return parsed.filter(n => new Date(n.timestamp).getTime() > sevenDaysAgo);
|
|
65
|
+
}
|
|
66
|
+
} catch (e) {
|
|
67
|
+
console.error('[Notifications] Failed to load from storage:', e);
|
|
68
|
+
}
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Save notifications to localStorage
|
|
74
|
+
*/
|
|
75
|
+
function saveNotificationsToStorage() {
|
|
76
|
+
try {
|
|
77
|
+
// Keep only the last N notifications
|
|
78
|
+
const toSave = globalNotificationQueue.slice(0, NOTIFICATION_MAX_STORED);
|
|
79
|
+
localStorage.setItem(NOTIFICATION_STORAGE_KEY, JSON.stringify(toSave));
|
|
80
|
+
} catch (e) {
|
|
81
|
+
console.error('[Notifications] Failed to save to storage:', e);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ========== Event Handler ==========
|
|
85
|
+
/**
|
|
86
|
+
* Handle granular workflow events from CLI
|
|
87
|
+
* @param {Object} event - Event object with type, sessionId, payload
|
|
88
|
+
*/
|
|
89
|
+
function handleWorkflowEvent(event) {
|
|
90
|
+
const { type, payload, sessionId, entityId } = event;
|
|
91
|
+
|
|
92
|
+
switch(type) {
|
|
93
|
+
case 'SESSION_CREATED':
|
|
94
|
+
// Add to activeSessions array
|
|
95
|
+
if (payload) {
|
|
96
|
+
const sessionData = {
|
|
97
|
+
session_id: sessionId,
|
|
98
|
+
...(payload.metadata || { status: 'planning', created_at: new Date().toISOString() }),
|
|
99
|
+
location: 'active'
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// Add to store
|
|
103
|
+
const key = `session-${sessionId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
104
|
+
sessionDataStore[key] = sessionData;
|
|
105
|
+
|
|
106
|
+
// Add to workflowData
|
|
107
|
+
if (!workflowData.activeSessions) workflowData.activeSessions = [];
|
|
108
|
+
workflowData.activeSessions.push(sessionData);
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
|
|
112
|
+
case 'SESSION_ARCHIVED':
|
|
113
|
+
// Move from active to archived
|
|
114
|
+
if (!workflowData.activeSessions) workflowData.activeSessions = [];
|
|
115
|
+
if (!workflowData.archivedSessions) workflowData.archivedSessions = [];
|
|
116
|
+
|
|
117
|
+
const activeIndex = workflowData.activeSessions.findIndex(s => s.session_id === sessionId);
|
|
118
|
+
if (activeIndex !== -1) {
|
|
119
|
+
const session = workflowData.activeSessions.splice(activeIndex, 1)[0];
|
|
120
|
+
session.location = 'archived';
|
|
121
|
+
if (payload && payload.metadata) {
|
|
122
|
+
Object.assign(session, payload.metadata);
|
|
123
|
+
}
|
|
124
|
+
workflowData.archivedSessions.push(session);
|
|
125
|
+
|
|
126
|
+
// Update store
|
|
127
|
+
const key = `session-${sessionId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
128
|
+
sessionDataStore[key] = session;
|
|
129
|
+
}
|
|
130
|
+
break;
|
|
131
|
+
|
|
132
|
+
case 'TASK_UPDATED':
|
|
133
|
+
// Find task in session and merge payload
|
|
134
|
+
const taskSessionKey = `session-${sessionId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
135
|
+
const taskSession = sessionDataStore[taskSessionKey];
|
|
136
|
+
if (taskSession && taskSession.tasks) {
|
|
137
|
+
const task = taskSession.tasks.find(t => t.task_id === entityId);
|
|
138
|
+
if (task && payload) {
|
|
139
|
+
Object.assign(task, payload);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
break;
|
|
143
|
+
|
|
144
|
+
case 'SESSION_UPDATED':
|
|
145
|
+
// Update session metadata
|
|
146
|
+
const sessionKey = `session-${sessionId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
147
|
+
const session = sessionDataStore[sessionKey];
|
|
148
|
+
if (session && payload) {
|
|
149
|
+
Object.assign(session, payload);
|
|
150
|
+
|
|
151
|
+
// Update in workflowData arrays
|
|
152
|
+
const activeSession = workflowData.activeSessions?.find(s => s.session_id === sessionId);
|
|
153
|
+
const archivedSession = workflowData.archivedSessions?.find(s => s.session_id === sessionId);
|
|
154
|
+
if (activeSession) Object.assign(activeSession, payload);
|
|
155
|
+
if (archivedSession) Object.assign(archivedSession, payload);
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
|
|
159
|
+
case 'TASK_CREATED':
|
|
160
|
+
// Add new task to session
|
|
161
|
+
const tcSessionKey = `session-${sessionId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
162
|
+
const tcSession = sessionDataStore[tcSessionKey];
|
|
163
|
+
if (tcSession) {
|
|
164
|
+
if (!tcSession.tasks) tcSession.tasks = [];
|
|
165
|
+
// Check if task already exists (by entityId or task_id in payload)
|
|
166
|
+
const taskId = entityId || (payload && payload.task_id);
|
|
167
|
+
const existingTask = tcSession.tasks.find(t => t.task_id === taskId);
|
|
168
|
+
if (!existingTask && payload) {
|
|
169
|
+
tcSession.tasks.push(payload);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
|
|
174
|
+
case 'SUMMARY_WRITTEN':
|
|
175
|
+
// Update session summary count or mark task as having summary
|
|
176
|
+
const swSessionKey = `session-${sessionId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
177
|
+
const swSession = sessionDataStore[swSessionKey];
|
|
178
|
+
if (swSession) {
|
|
179
|
+
if (!swSession.summaries) swSession.summaries = [];
|
|
180
|
+
swSession.summaries.push({ task_id: entityId, content: payload });
|
|
181
|
+
// Update task status if found
|
|
182
|
+
if (swSession.tasks && entityId) {
|
|
183
|
+
const task = swSession.tasks.find(t => t.task_id === entityId);
|
|
184
|
+
if (task) task.has_summary = true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
|
|
189
|
+
case 'PLAN_UPDATED':
|
|
190
|
+
// Update session plan reference
|
|
191
|
+
const puSessionKey = `session-${sessionId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
192
|
+
const puSession = sessionDataStore[puSessionKey];
|
|
193
|
+
if (puSession) {
|
|
194
|
+
puSession.has_plan = true;
|
|
195
|
+
puSession.plan_updated_at = new Date().toISOString();
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
|
|
199
|
+
case 'REVIEW_UPDATED':
|
|
200
|
+
// Update session review data
|
|
201
|
+
const ruSessionKey = `session-${sessionId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
202
|
+
const ruSession = sessionDataStore[ruSessionKey];
|
|
203
|
+
if (ruSession) {
|
|
204
|
+
if (!ruSession.review) ruSession.review = { dimensions: [], iterations: [], fixes: [] };
|
|
205
|
+
// Track review updates by type based on entityId pattern (prevent duplicates)
|
|
206
|
+
if (event.contentType === 'review-dim') {
|
|
207
|
+
if (!ruSession.review.dimensions.includes(entityId)) ruSession.review.dimensions.push(entityId);
|
|
208
|
+
} else if (event.contentType === 'review-iter') {
|
|
209
|
+
if (!ruSession.review.iterations.includes(entityId)) ruSession.review.iterations.push(entityId);
|
|
210
|
+
} else if (event.contentType === 'review-fix') {
|
|
211
|
+
if (!ruSession.review.fixes.includes(entityId)) ruSession.review.fixes.push(entityId);
|
|
212
|
+
}
|
|
213
|
+
ruSession.has_review = true;
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
|
|
217
|
+
case 'CONTENT_WRITTEN':
|
|
218
|
+
// Generic content write - just log for debugging
|
|
219
|
+
console.log(`[State] Content written: ${event.contentType} for ${sessionId}`);
|
|
220
|
+
break;
|
|
221
|
+
|
|
222
|
+
case 'FILE_DELETED':
|
|
223
|
+
// File deleted from session - log and trigger refresh
|
|
224
|
+
console.log(`[State] File deleted: ${payload?.file_path || payload?.deleted} from ${sessionId}`);
|
|
225
|
+
break;
|
|
226
|
+
|
|
227
|
+
case 'DIRECTORY_CREATED':
|
|
228
|
+
// Directory created in session - log and trigger refresh
|
|
229
|
+
console.log(`[State] Directory created: ${payload?.directories?.join(', ') || 'unknown'} in ${sessionId}`);
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Trigger UI updates
|
|
234
|
+
if (typeof updateStats === 'function') updateStats();
|
|
235
|
+
if (typeof updateBadges === 'function') updateBadges();
|
|
236
|
+
if (typeof updateCarousel === 'function') updateCarousel();
|
|
237
|
+
if (typeof refreshTaskQueue === 'function') refreshTaskQueue();
|
|
238
|
+
|
|
239
|
+
// Re-render current view if needed
|
|
240
|
+
if (currentView === 'sessions' && typeof renderSessions === 'function') {
|
|
241
|
+
renderSessions();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
@@ -5,6 +5,37 @@
|
|
|
5
5
|
|
|
6
6
|
// ========== HTML/Text Processing ==========
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Encode JSON config data to Base64 for safe HTML attribute storage
|
|
10
|
+
* @param {Object} config - Configuration object to encode
|
|
11
|
+
* @returns {string} Base64 encoded JSON string
|
|
12
|
+
*/
|
|
13
|
+
function encodeConfigData(config) {
|
|
14
|
+
try {
|
|
15
|
+
const jsonStr = JSON.stringify(config);
|
|
16
|
+
return btoa(encodeURIComponent(jsonStr));
|
|
17
|
+
} catch (err) {
|
|
18
|
+
console.error('[Utils] Error encoding config data:', err);
|
|
19
|
+
return '';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Decode Base64 config data back to JSON object
|
|
25
|
+
* @param {string} encoded - Base64 encoded string
|
|
26
|
+
* @returns {Object|null} Decoded configuration object or null on error
|
|
27
|
+
*/
|
|
28
|
+
function decodeConfigData(encoded) {
|
|
29
|
+
try {
|
|
30
|
+
if (!encoded) return null;
|
|
31
|
+
const jsonStr = decodeURIComponent(atob(encoded));
|
|
32
|
+
return JSON.parse(jsonStr);
|
|
33
|
+
} catch (err) {
|
|
34
|
+
console.error('[Utils] Error decoding config data:', err);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
8
39
|
/**
|
|
9
40
|
* Escape HTML special characters to prevent XSS attacks
|
|
10
41
|
* @param {string} str - String to escape
|
|
@@ -20,6 +51,21 @@ function escapeHtml(str) {
|
|
|
20
51
|
.replace(/'/g, ''');
|
|
21
52
|
}
|
|
22
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Unescape HTML entities back to original characters
|
|
56
|
+
* @param {string} str - String with HTML entities
|
|
57
|
+
* @returns {string} String with entities decoded
|
|
58
|
+
*/
|
|
59
|
+
function unescapeHtml(str) {
|
|
60
|
+
if (typeof str !== 'string') return str;
|
|
61
|
+
return str
|
|
62
|
+
.replace(/"/g, '"')
|
|
63
|
+
.replace(/'/g, "'")
|
|
64
|
+
.replace(/</g, '<')
|
|
65
|
+
.replace(/>/g, '>')
|
|
66
|
+
.replace(/&/g, '&');
|
|
67
|
+
}
|
|
68
|
+
|
|
23
69
|
/**
|
|
24
70
|
* Truncate text to specified maximum length
|
|
25
71
|
* @param {string} text - Text to truncate
|
|
@@ -140,7 +186,7 @@ function toggleSection(header) {
|
|
|
140
186
|
function initCollapsibleSections(container) {
|
|
141
187
|
setTimeout(() => {
|
|
142
188
|
const headers = container.querySelectorAll('.collapsible-header');
|
|
143
|
-
headers.forEach(header => {
|
|
189
|
+
headers.forEach((header) => {
|
|
144
190
|
if (!header._clickBound) {
|
|
145
191
|
header._clickBound = true;
|
|
146
192
|
header.addEventListener('click', function(e) {
|