@winspan/claude-forge 8.54.4 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEVELOPMENT.md +649 -33
- package/README.md +154 -16
- package/dist/catalogs/agents.json +72 -0
- package/dist/catalogs/skills.json +194 -0
- package/dist/claudemd/claudemd-generator.d.ts +45 -45
- package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
- package/dist/claudemd/claudemd-generator.js +128 -449
- package/dist/claudemd/claudemd-generator.js.map +1 -1
- package/dist/claudemd/index.d.ts +14 -4
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js +15 -4
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/resume-manager.d.ts.map +1 -1
- package/dist/claudemd/resume-manager.js +37 -9
- package/dist/claudemd/resume-manager.js.map +1 -1
- package/dist/claudemd/templates/swarm-protocol.md +35 -186
- package/dist/claudemd/violations-manager.d.ts +40 -0
- package/dist/claudemd/violations-manager.d.ts.map +1 -0
- package/dist/claudemd/violations-manager.js +106 -0
- package/dist/claudemd/violations-manager.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +15 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +177 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +18 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +160 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/bypass.d.ts +18 -0
- package/dist/cli/commands/bypass.d.ts.map +1 -0
- package/dist/cli/commands/bypass.js +87 -0
- package/dist/cli/commands/bypass.js.map +1 -0
- package/dist/cli/commands/claudemd.d.ts +60 -0
- package/dist/cli/commands/claudemd.d.ts.map +1 -1
- package/dist/cli/commands/claudemd.js +174 -37
- package/dist/cli/commands/claudemd.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +94 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +39 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +167 -20
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +129 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +669 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +124 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/entropy.d.ts +35 -0
- package/dist/cli/commands/entropy.d.ts.map +1 -0
- package/dist/cli/commands/entropy.js +121 -0
- package/dist/cli/commands/entropy.js.map +1 -0
- package/dist/cli/commands/executions.d.ts +1 -0
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +10 -1
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/fix.d.ts +31 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +108 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/governance.d.ts +21 -0
- package/dist/cli/commands/governance.d.ts.map +1 -0
- package/dist/cli/commands/governance.js +60 -0
- package/dist/cli/commands/governance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +27 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +158 -146
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/insights-goal-check.d.ts +50 -0
- package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
- package/dist/cli/commands/insights-goal-check.js +318 -0
- package/dist/cli/commands/insights-goal-check.js.map +1 -0
- package/dist/cli/commands/insights.d.ts +15 -0
- package/dist/cli/commands/insights.d.ts.map +1 -0
- package/dist/cli/commands/insights.js +127 -0
- package/dist/cli/commands/insights.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +66 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +897 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +0 -12
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +11 -5
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/menu.d.ts.map +1 -1
- package/dist/cli/commands/menu.js +10 -184
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/commands/project.d.ts +98 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +382 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +14 -128
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +40 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +49 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +3 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +17 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/trace.d.ts.map +1 -1
- package/dist/cli/commands/trace.js +4 -9
- package/dist/cli/commands/trace.js.map +1 -1
- package/dist/cli/commands/violations.d.ts +14 -0
- package/dist/cli/commands/violations.d.ts.map +1 -0
- package/dist/cli/commands/violations.js +43 -0
- package/dist/cli/commands/violations.js.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +6 -0
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/cli/utils/resolve-session.d.ts +32 -0
- package/dist/cli/utils/resolve-session.d.ts.map +1 -0
- package/dist/cli/utils/resolve-session.js +39 -0
- package/dist/cli/utils/resolve-session.js.map +1 -0
- package/dist/core/config.d.ts +4 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +11 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +14 -13
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +20 -13
- package/dist/core/constants.js.map +1 -1
- package/dist/core/diagnostics/checks.d.ts +151 -0
- package/dist/core/diagnostics/checks.d.ts.map +1 -0
- package/dist/core/diagnostics/checks.js +765 -0
- package/dist/core/diagnostics/checks.js.map +1 -0
- package/dist/core/diagnostics/daemon-status.d.ts +77 -0
- package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
- package/dist/core/diagnostics/daemon-status.js +113 -0
- package/dist/core/diagnostics/daemon-status.js.map +1 -0
- package/dist/core/diagnostics/entropy-checks.d.ts +82 -0
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
- package/dist/core/diagnostics/entropy-checks.js +395 -0
- package/dist/core/diagnostics/entropy-checks.js.map +1 -0
- package/dist/core/diagnostics/fix-runner.d.ts +54 -0
- package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/fix-runner.js +90 -0
- package/dist/core/diagnostics/fix-runner.js.map +1 -0
- package/dist/core/diagnostics/knip-runner.d.ts +49 -0
- package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/knip-runner.js +100 -0
- package/dist/core/diagnostics/knip-runner.js.map +1 -0
- package/dist/core/diagnostics/markers.d.ts +96 -0
- package/dist/core/diagnostics/markers.d.ts.map +1 -0
- package/dist/core/diagnostics/markers.js +153 -0
- package/dist/core/diagnostics/markers.js.map +1 -0
- package/dist/core/governance/global-inject.d.ts +60 -0
- package/dist/core/governance/global-inject.d.ts.map +1 -0
- package/dist/core/governance/global-inject.js +129 -0
- package/dist/core/governance/global-inject.js.map +1 -0
- package/dist/core/queue/index.d.ts +16 -3
- package/dist/core/queue/index.d.ts.map +1 -1
- package/dist/core/queue/index.js +14 -3
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +158 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +570 -0
- package/dist/core/storage/base.js.map +1 -1
- package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
- package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
- package/dist/core/storage/codec/tool-input-codec.js +159 -0
- package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
- package/dist/core/storage/decisions.d.ts +362 -0
- package/dist/core/storage/decisions.d.ts.map +1 -0
- package/dist/core/storage/decisions.js +502 -0
- package/dist/core/storage/decisions.js.map +1 -0
- package/dist/core/storage/events.d.ts +112 -8
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +390 -39
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +131 -0
- package/dist/core/storage/feedback.d.ts.map +1 -0
- package/dist/core/storage/feedback.js +187 -0
- package/dist/core/storage/feedback.js.map +1 -0
- package/dist/core/storage/forge-config.d.ts +40 -0
- package/dist/core/storage/forge-config.d.ts.map +1 -0
- package/dist/core/storage/forge-config.js +65 -0
- package/dist/core/storage/forge-config.js.map +1 -0
- package/dist/core/storage/injections.d.ts +28 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +62 -5
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +106 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -0
- package/dist/core/storage/knowledge.js +202 -0
- package/dist/core/storage/knowledge.js.map +1 -0
- package/dist/core/storage/maintenance.d.ts +36 -9
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +56 -24
- package/dist/core/storage/maintenance.js.map +1 -1
- package/dist/core/storage/pipeline-rollup.d.ts +117 -0
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
- package/dist/core/storage/pipeline-rollup.js +471 -0
- package/dist/core/storage/pipeline-rollup.js.map +1 -0
- package/dist/core/storage/routing.d.ts +16 -3
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +39 -8
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +50 -7
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +302 -23
- package/dist/core/storage/sessions.d.ts +136 -0
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +351 -15
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +1 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +21 -6
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +253 -20
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +425 -16
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +474 -2
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +1213 -18
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/storage/tool-intercepts.d.ts +69 -0
- package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
- package/dist/core/storage/tool-intercepts.js +116 -0
- package/dist/core/storage/tool-intercepts.js.map +1 -0
- package/dist/core/storage/workflow-recommendations.d.ts +124 -0
- package/dist/core/storage/workflow-recommendations.d.ts.map +1 -0
- package/dist/core/storage/workflow-recommendations.js +274 -0
- package/dist/core/storage/workflow-recommendations.js.map +1 -0
- package/dist/core/types.d.ts +112 -17
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +12 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/backup.d.ts +81 -0
- package/dist/core/utils/backup.d.ts.map +1 -0
- package/dist/core/utils/backup.js +98 -0
- package/dist/core/utils/backup.js.map +1 -0
- package/dist/core/utils/binary-paths.d.ts +92 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -0
- package/dist/core/utils/binary-paths.js +166 -0
- package/dist/core/utils/binary-paths.js.map +1 -0
- package/dist/core/utils/bypass-token.d.ts +75 -0
- package/dist/core/utils/bypass-token.d.ts.map +1 -0
- package/dist/core/utils/bypass-token.js +133 -0
- package/dist/core/utils/bypass-token.js.map +1 -0
- package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
- package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
- package/dist/core/utils/cc-builtin-agents.js +29 -0
- package/dist/core/utils/cc-builtin-agents.js.map +1 -0
- package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
- package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-spawn.js +219 -0
- package/dist/core/utils/claude-cli-spawn.js.map +1 -0
- package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
- package/dist/core/utils/forge-resume-block.js +3 -2
- package/dist/core/utils/forge-resume-block.js.map +1 -1
- package/dist/core/utils/logger.d.ts +15 -3
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +20 -2
- package/dist/core/utils/logger.js.map +1 -1
- package/dist/core/utils/noise-prompt.d.ts +97 -0
- package/dist/core/utils/noise-prompt.d.ts.map +1 -0
- package/dist/core/utils/noise-prompt.js +127 -0
- package/dist/core/utils/noise-prompt.js.map +1 -0
- package/dist/core/utils/path.d.ts +0 -4
- package/dist/core/utils/path.d.ts.map +1 -1
- package/dist/core/utils/path.js +0 -7
- package/dist/core/utils/path.js.map +1 -1
- package/dist/core/utils/time.d.ts +41 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +114 -0
- package/dist/core/utils/time.js.map +1 -1
- package/dist/daemon/agent-sync.d.ts +24 -0
- package/dist/daemon/agent-sync.d.ts.map +1 -0
- package/dist/daemon/agent-sync.js +114 -0
- package/dist/daemon/agent-sync.js.map +1 -0
- package/dist/daemon/config-store.d.ts +55 -0
- package/dist/daemon/config-store.d.ts.map +1 -0
- package/dist/daemon/config-store.js +137 -0
- package/dist/daemon/config-store.js.map +1 -0
- package/dist/daemon/event-parser.d.ts +22 -0
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +49 -3
- package/dist/daemon/event-parser.js.map +1 -1
- package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
- package/dist/daemon/handlers/history-exporter.js +9 -8
- package/dist/daemon/handlers/history-exporter.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +58 -4
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +261 -8
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +156 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use.js +585 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
- package/dist/daemon/handlers/stop.d.ts +35 -7
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +157 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +36 -14
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +135 -48
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/hook-sync.d.ts.map +1 -1
- package/dist/daemon/hook-sync.js +2 -1
- package/dist/daemon/hook-sync.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +471 -43
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +48 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +98 -2
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/router.d.ts +4 -1
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +4 -2
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/rules/defaults.d.ts +20 -0
- package/dist/daemon/rules/defaults.d.ts.map +1 -0
- package/dist/daemon/rules/defaults.js +692 -0
- package/dist/daemon/rules/defaults.js.map +1 -0
- package/dist/daemon/rules/registry.d.ts +47 -0
- package/dist/daemon/rules/registry.d.ts.map +1 -0
- package/dist/daemon/rules/registry.js +84 -0
- package/dist/daemon/rules/registry.js.map +1 -0
- package/dist/daemon/rules/types.d.ts +170 -0
- package/dist/daemon/rules/types.d.ts.map +1 -0
- package/dist/daemon/rules/types.js +15 -0
- package/dist/daemon/rules/types.js.map +1 -0
- package/dist/daemon/rules/whitelist.d.ts +101 -0
- package/dist/daemon/rules/whitelist.d.ts.map +1 -0
- package/dist/daemon/rules/whitelist.js +210 -0
- package/dist/daemon/rules/whitelist.js.map +1 -0
- package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
- package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
- package/dist/daemon/rules/workflow-defaults.js +521 -0
- package/dist/daemon/rules/workflow-defaults.js.map +1 -0
- package/dist/daemon/server.d.ts +11 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +7 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/context-injector.d.ts +34 -0
- package/dist/daemon/services/context-injector.d.ts.map +1 -0
- package/dist/daemon/services/context-injector.js +61 -0
- package/dist/daemon/services/context-injector.js.map +1 -0
- package/dist/daemon/services/decision-hint.d.ts +203 -0
- package/dist/daemon/services/decision-hint.d.ts.map +1 -0
- package/dist/daemon/services/decision-hint.js +487 -0
- package/dist/daemon/services/decision-hint.js.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.js +123 -0
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
- package/dist/daemon/services/experience-extractor.d.ts +67 -0
- package/dist/daemon/services/experience-extractor.d.ts.map +1 -0
- package/dist/daemon/services/experience-extractor.js +323 -0
- package/dist/daemon/services/experience-extractor.js.map +1 -0
- package/dist/daemon/services/feedback-aggregator.d.ts +179 -0
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
- package/dist/daemon/services/feedback-aggregator.js +455 -0
- package/dist/daemon/services/feedback-aggregator.js.map +1 -0
- package/dist/daemon/services/heartbeat-writer.d.ts +55 -0
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
- package/dist/daemon/services/heartbeat-writer.js +111 -0
- package/dist/daemon/services/heartbeat-writer.js.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.js +94 -0
- package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
- package/dist/daemon/services/idle-task-budget.d.ts +50 -0
- package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
- package/dist/daemon/services/idle-task-budget.js +72 -0
- package/dist/daemon/services/idle-task-budget.js.map +1 -0
- package/dist/daemon/services/intercept-revive.d.ts +60 -0
- package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
- package/dist/daemon/services/intercept-revive.js +86 -0
- package/dist/daemon/services/intercept-revive.js.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.js +152 -0
- package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
- package/dist/daemon/services/kb-injector.d.ts +57 -0
- package/dist/daemon/services/kb-injector.d.ts.map +1 -0
- package/dist/daemon/services/kb-injector.js +140 -0
- package/dist/daemon/services/kb-injector.js.map +1 -0
- package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
- package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classification-service.js +214 -0
- package/dist/daemon/services/outcome-classification-service.js.map +1 -0
- package/dist/daemon/services/outcome-classifier.d.ts +136 -0
- package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classifier.js +178 -0
- package/dist/daemon/services/outcome-classifier.js.map +1 -0
- package/dist/daemon/services/outcome-nudge.d.ts +107 -0
- package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
- package/dist/daemon/services/outcome-nudge.js +242 -0
- package/dist/daemon/services/outcome-nudge.js.map +1 -0
- package/dist/daemon/services/spec-approval.d.ts +127 -0
- package/dist/daemon/services/spec-approval.d.ts.map +1 -0
- package/dist/daemon/services/spec-approval.js +216 -0
- package/dist/daemon/services/spec-approval.js.map +1 -0
- package/dist/daemon/services/spec-gate.d.ts +54 -0
- package/dist/daemon/services/spec-gate.d.ts.map +1 -0
- package/dist/daemon/services/spec-gate.js +113 -0
- package/dist/daemon/services/spec-gate.js.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.js +202 -0
- package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
- package/dist/daemon/services/task-segmenter.d.ts +219 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +481 -17
- package/dist/daemon/services/task-segmenter.js.map +1 -1
- package/dist/daemon/services/violation-reporter.d.ts +130 -0
- package/dist/daemon/services/violation-reporter.d.ts.map +1 -0
- package/dist/daemon/services/violation-reporter.js +339 -0
- package/dist/daemon/services/violation-reporter.js.map +1 -0
- package/dist/daemon/skill-sync.d.ts +7 -2
- package/dist/daemon/skill-sync.d.ts.map +1 -1
- package/dist/daemon/skill-sync.js +114 -9
- package/dist/daemon/skill-sync.js.map +1 -1
- package/dist/daemon/templates/agents/claudemd-writer.md +101 -0
- package/dist/daemon/templates/agents/coder.md +105 -0
- package/dist/daemon/templates/agents/decision-maker.md +460 -0
- package/dist/daemon/templates/agents/doc-reviewer.md +115 -0
- package/dist/daemon/templates/agents/harness-debug-full.md +114 -0
- package/dist/daemon/templates/agents/harness-hotfix.md +99 -0
- package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +104 -0
- package/dist/daemon/templates/agents/knowledge-builder.md +119 -0
- package/dist/daemon/templates/agents/patch-applier.md +144 -0
- package/dist/daemon/templates/agents/planner.md +165 -0
- package/dist/daemon/templates/agents/refactor-specialist.md +98 -0
- package/dist/daemon/templates/agents/skill-distiller.md +113 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +64 -0
- package/dist/daemon/templates/agents/verify-agent.md +136 -0
- package/dist/daemon/utils/inject-block.d.ts +39 -0
- package/dist/daemon/utils/inject-block.d.ts.map +1 -0
- package/dist/daemon/utils/inject-block.js +25 -0
- package/dist/daemon/utils/inject-block.js.map +1 -0
- package/dist/hooks/hook-lib.sh +8 -0
- package/dist/hooks/notification.sh +19 -8
- package/dist/hooks/post-tool-use.sh +41 -23
- package/dist/hooks/pre-tool-use.sh +54 -23
- package/dist/hooks/session-start.sh +68 -0
- package/dist/hooks/stop.sh +24 -10
- package/dist/hooks/user-prompt-submit.sh +37 -21
- package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
- package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/go-adapter.js +294 -0
- package/dist/knowledge/adapters/go-adapter.js.map +1 -0
- package/dist/knowledge/adapters/index.d.ts +41 -0
- package/dist/knowledge/adapters/index.d.ts.map +1 -0
- package/dist/knowledge/adapters/index.js +71 -0
- package/dist/knowledge/adapters/index.js.map +1 -0
- package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
- package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/java-adapter.js +260 -0
- package/dist/knowledge/adapters/java-adapter.js.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
- package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
- package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
- package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
- package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
- package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/python-adapter.js +358 -0
- package/dist/knowledge/adapters/python-adapter.js.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.js +329 -0
- package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
- package/dist/knowledge/adapters/types.d.ts +99 -0
- package/dist/knowledge/adapters/types.d.ts.map +1 -0
- package/dist/knowledge/adapters/types.js +17 -0
- package/dist/knowledge/adapters/types.js.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.js +171 -0
- package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
- package/dist/knowledge/audit-applier.d.ts +70 -0
- package/dist/knowledge/audit-applier.d.ts.map +1 -0
- package/dist/knowledge/audit-applier.js +251 -0
- package/dist/knowledge/audit-applier.js.map +1 -0
- package/dist/knowledge/builder.d.ts +261 -0
- package/dist/knowledge/builder.d.ts.map +1 -0
- package/dist/knowledge/builder.js +937 -0
- package/dist/knowledge/builder.js.map +1 -0
- package/dist/knowledge/cli-provider.d.ts +151 -0
- package/dist/knowledge/cli-provider.d.ts.map +1 -0
- package/dist/knowledge/cli-provider.js +313 -0
- package/dist/knowledge/cli-provider.js.map +1 -0
- package/dist/knowledge/constants.d.ts +73 -0
- package/dist/knowledge/constants.d.ts.map +1 -0
- package/dist/knowledge/constants.js +93 -0
- package/dist/knowledge/constants.js.map +1 -0
- package/dist/knowledge/cross-module.d.ts +139 -0
- package/dist/knowledge/cross-module.d.ts.map +1 -0
- package/dist/knowledge/cross-module.js +370 -0
- package/dist/knowledge/cross-module.js.map +1 -0
- package/dist/knowledge/git-hooks.d.ts +67 -0
- package/dist/knowledge/git-hooks.d.ts.map +1 -0
- package/dist/knowledge/git-hooks.js +258 -0
- package/dist/knowledge/git-hooks.js.map +1 -0
- package/dist/knowledge/module-hash.d.ts +88 -0
- package/dist/knowledge/module-hash.d.ts.map +1 -0
- package/dist/knowledge/module-hash.js +162 -0
- package/dist/knowledge/module-hash.js.map +1 -0
- package/dist/knowledge/project-detector.d.ts +101 -0
- package/dist/knowledge/project-detector.d.ts.map +1 -0
- package/dist/knowledge/project-detector.js +223 -0
- package/dist/knowledge/project-detector.js.map +1 -0
- package/dist/knowledge/prompt.d.ts +228 -0
- package/dist/knowledge/prompt.d.ts.map +1 -0
- package/dist/knowledge/prompt.js +404 -0
- package/dist/knowledge/prompt.js.map +1 -0
- package/dist/knowledge/query.d.ts +105 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +341 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/repo-map.d.ts +91 -0
- package/dist/knowledge/repo-map.d.ts.map +1 -0
- package/dist/knowledge/repo-map.js +408 -0
- package/dist/knowledge/repo-map.js.map +1 -0
- package/dist/knowledge/tools/index.d.ts +14 -0
- package/dist/knowledge/tools/index.d.ts.map +1 -0
- package/dist/knowledge/tools/index.js +11 -0
- package/dist/knowledge/tools/index.js.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.js +101 -0
- package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
- package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
- package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-query.js +104 -0
- package/dist/knowledge/tools/knowledge-query.js.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.js +82 -0
- package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
- package/dist/knowledge/types.d.ts +269 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +10 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/validator.d.ts +90 -0
- package/dist/knowledge/validator.d.ts.map +1 -0
- package/dist/knowledge/validator.js +288 -0
- package/dist/knowledge/validator.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +222 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/builtin-skills.d.ts +35 -0
- package/dist/skills/builtin-skills.d.ts.map +1 -0
- package/dist/skills/builtin-skills.js +68 -0
- package/dist/skills/builtin-skills.js.map +1 -0
- package/dist/skills/distill/attribution.d.ts +59 -0
- package/dist/skills/distill/attribution.d.ts.map +1 -0
- package/dist/skills/distill/attribution.js +101 -0
- package/dist/skills/distill/attribution.js.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts +26 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.js +115 -0
- package/dist/skills/distill/claude-cli-resolver.js.map +1 -0
- package/dist/skills/distill/distiller.d.ts +161 -0
- package/dist/skills/distill/distiller.d.ts.map +1 -0
- package/dist/skills/distill/distiller.js +461 -0
- package/dist/skills/distill/distiller.js.map +1 -0
- package/dist/skills/distill/index.d.ts +223 -0
- package/dist/skills/distill/index.d.ts.map +1 -0
- package/dist/skills/distill/index.js +466 -0
- package/dist/skills/distill/index.js.map +1 -0
- package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
- package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
- package/dist/skills/distill/project-anchor-guard.js +334 -0
- package/dist/skills/distill/project-anchor-guard.js.map +1 -0
- package/dist/skills/distill/topic-deduper.d.ts +77 -0
- package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
- package/dist/skills/distill/topic-deduper.js +119 -0
- package/dist/skills/distill/topic-deduper.js.map +1 -0
- package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
- package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
- package/dist/skills/distill/upstream-fetcher.js +202 -0
- package/dist/skills/distill/upstream-fetcher.js.map +1 -0
- package/dist/skills/distilled/distilled-api-design.md +491 -0
- package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
- package/dist/skills/distilled/distilled-creator.md +178 -0
- package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
- package/dist/skills/distilled/distilled-defi-amm-security.md +293 -0
- package/dist/skills/distilled/distilled-executing-plans.md +113 -0
- package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
- package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
- package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
- package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +306 -0
- package/dist/skills/distilled/distilled-verification-before-completion.md +203 -0
- package/dist/skills/keyword-score.d.ts +29 -0
- package/dist/skills/keyword-score.d.ts.map +1 -0
- package/dist/skills/keyword-score.js +54 -0
- package/dist/skills/keyword-score.js.map +1 -0
- package/dist/skills/registry.d.ts +64 -20
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +102 -105
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +14 -14
- package/dist/skills/tools/skill-invoke.d.ts +1 -1
- package/dist/skills/tools/skill-invoke.js +1 -1
- package/dist/web/routes/agent-content.d.ts +30 -0
- package/dist/web/routes/agent-content.d.ts.map +1 -0
- package/dist/web/routes/agent-content.js +139 -0
- package/dist/web/routes/agent-content.js.map +1 -0
- package/dist/web/routes/decisions.d.ts +15 -0
- package/dist/web/routes/decisions.d.ts.map +1 -0
- package/dist/web/routes/decisions.js +181 -0
- package/dist/web/routes/decisions.js.map +1 -0
- package/dist/web/routes/diagnostics.d.ts +61 -0
- package/dist/web/routes/diagnostics.d.ts.map +1 -0
- package/dist/web/routes/diagnostics.js +203 -0
- package/dist/web/routes/diagnostics.js.map +1 -0
- package/dist/web/routes/events.d.ts.map +1 -1
- package/dist/web/routes/events.js +24 -0
- package/dist/web/routes/events.js.map +1 -1
- package/dist/web/routes/health.d.ts +33 -0
- package/dist/web/routes/health.d.ts.map +1 -0
- package/dist/web/routes/health.js +37 -0
- package/dist/web/routes/health.js.map +1 -0
- package/dist/web/routes/insights.d.ts +0 -5
- package/dist/web/routes/insights.d.ts.map +1 -1
- package/dist/web/routes/insights.js +783 -2
- package/dist/web/routes/insights.js.map +1 -1
- package/dist/web/routes/knowledge.d.ts +16 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/knowledge.js +661 -0
- package/dist/web/routes/knowledge.js.map +1 -0
- package/dist/web/routes/patch.d.ts +60 -1
- package/dist/web/routes/patch.d.ts.map +1 -1
- package/dist/web/routes/patch.js +170 -64
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/pipeline.d.ts +37 -0
- package/dist/web/routes/pipeline.d.ts.map +1 -0
- package/dist/web/routes/pipeline.js +149 -0
- package/dist/web/routes/pipeline.js.map +1 -0
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +6 -1
- package/dist/web/routes/rules.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +9 -1
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-content.d.ts +30 -0
- package/dist/web/routes/skill-content.d.ts.map +1 -0
- package/dist/web/routes/skill-content.js +117 -0
- package/dist/web/routes/skill-content.js.map +1 -0
- package/dist/web/routes/skills-distill.d.ts +29 -0
- package/dist/web/routes/skills-distill.d.ts.map +1 -0
- package/dist/web/routes/skills-distill.js +552 -0
- package/dist/web/routes/skills-distill.js.map +1 -0
- package/dist/web/routes/skills.js +7 -7
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/task-timeline.d.ts +102 -0
- package/dist/web/routes/task-timeline.d.ts.map +1 -0
- package/dist/web/routes/task-timeline.js +274 -0
- package/dist/web/routes/task-timeline.js.map +1 -0
- package/dist/web/routes/tasks.d.ts.map +1 -1
- package/dist/web/routes/tasks.js +355 -8
- package/dist/web/routes/tasks.js.map +1 -1
- package/dist/web/routes/trace.d.ts.map +1 -1
- package/dist/web/routes/trace.js +3 -2
- package/dist/web/routes/trace.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -4
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/routes/violations.d.ts +14 -0
- package/dist/web/routes/violations.d.ts.map +1 -0
- package/dist/web/routes/violations.js +111 -0
- package/dist/web/routes/violations.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +79 -19
- package/dist/web/server.js.map +1 -1
- package/dist/web/services/build-manager.d.ts +72 -0
- package/dist/web/services/build-manager.d.ts.map +1 -0
- package/dist/web/services/build-manager.js +189 -0
- package/dist/web/services/build-manager.js.map +1 -0
- package/dist/web/services/distill-manager.d.ts +125 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -0
- package/dist/web/services/distill-manager.js +308 -0
- package/dist/web/services/distill-manager.js.map +1 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +2 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +1 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +2 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +1 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +3 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +1 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +2 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +1 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +2 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +1 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +2 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +1 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js +2 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +1 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +3 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +1 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +2 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +1 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js +3 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js.map +1 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js +2 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js.map +1 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +2 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +1 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +2 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +1 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +2 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +1 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +2 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +1 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +2 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +1 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +6 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +1 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +3 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +1 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js +14 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +1 -0
- package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js +37 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js.map +1 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
- package/dist/web/static/assets/index-7bl3kbcx.css +1 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js +4 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js.map +1 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js +2 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js.map +1 -0
- package/dist/web/static/assets/query-S6X1S7K9.js +2 -0
- package/dist/web/static/assets/{query-C99w429o.js.map → query-S6X1S7K9.js.map} +1 -1
- package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-JVUrkhdd.js} +3 -3
- package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-JVUrkhdd.js.map} +1 -1
- package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
- package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js +6 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js.map +1 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js +2 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +1 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js +65 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js.map +1 -0
- package/dist/web/static/index.html +12 -8
- package/package.json +14 -3
- package/dist/core/ai/provider.d.ts +0 -63
- package/dist/core/ai/provider.d.ts.map +0 -1
- package/dist/core/ai/provider.js +0 -241
- package/dist/core/ai/provider.js.map +0 -1
- package/dist/core/ai/types.d.ts +0 -43
- package/dist/core/ai/types.d.ts.map +0 -1
- package/dist/core/ai/types.js +0 -5
- package/dist/core/ai/types.js.map +0 -1
- package/dist/core/storage/token-usage.d.ts +0 -36
- package/dist/core/storage/token-usage.d.ts.map +0 -1
- package/dist/core/storage/token-usage.js +0 -59
- package/dist/core/storage/token-usage.js.map +0 -1
- package/dist/core/utils/token-tracker.d.ts +0 -39
- package/dist/core/utils/token-tracker.d.ts.map +0 -1
- package/dist/core/utils/token-tracker.js +0 -69
- package/dist/core/utils/token-tracker.js.map +0 -1
- package/dist/skills/index.d.ts +0 -3
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/matcher.d.ts +0 -26
- package/dist/skills/matcher.d.ts.map +0 -1
- package/dist/skills/matcher.js +0 -113
- package/dist/skills/matcher.js.map +0 -1
- package/dist/skills/official/code-simplifier.md +0 -52
- package/dist/skills/official/find-skills.md +0 -142
- package/dist/skills/official/official-api-design.md +0 -30
- package/dist/skills/official/official-architecture-decision.md +0 -41
- package/dist/skills/official/official-bmad.md +0 -118
- package/dist/skills/official/official-db-schema-design.md +0 -34
- package/dist/skills/official/official-debug.md +0 -25
- package/dist/skills/official/official-doc-driven.md +0 -31
- package/dist/skills/official/official-harness-engineering.md +0 -108
- package/dist/skills/official/official-openspec.md +0 -89
- package/dist/skills/official/official-performance-optimization.md +0 -30
- package/dist/skills/official/official-pr-review.md +0 -35
- package/dist/skills/official/official-release-checklist.md +0 -30
- package/dist/skills/official/official-security-hardening.md +0 -32
- package/dist/skills/official/official-spec-driven-design.md +0 -31
- package/dist/skills/official/planning-with-files.md +0 -241
- package/dist/skills/official/ui-ux-pro-max.md +0 -105
- package/dist/skills/official/webapp-testing.md +0 -96
- package/dist/skills/official-skills.d.ts +0 -26
- package/dist/skills/official-skills.d.ts.map +0 -1
- package/dist/skills/official-skills.js +0 -74
- package/dist/skills/official-skills.js.map +0 -1
- package/dist/skills/semantic-matcher.d.ts +0 -60
- package/dist/skills/semantic-matcher.d.ts.map +0 -1
- package/dist/skills/semantic-matcher.js +0 -192
- package/dist/skills/semantic-matcher.js.map +0 -1
- package/dist/skills/upgrade-engine.d.ts +0 -93
- package/dist/skills/upgrade-engine.d.ts.map +0 -1
- package/dist/skills/upgrade-engine.js +0 -447
- package/dist/skills/upgrade-engine.js.map +0 -1
- package/dist/skills/upgrade-prompt.d.ts +0 -20
- package/dist/skills/upgrade-prompt.d.ts.map +0 -1
- package/dist/skills/upgrade-prompt.js +0 -75
- package/dist/skills/upgrade-prompt.js.map +0 -1
- package/dist/web/routes/ai.d.ts +0 -10
- package/dist/web/routes/ai.d.ts.map +0 -1
- package/dist/web/routes/ai.js +0 -186
- package/dist/web/routes/ai.js.map +0 -1
- package/dist/web/routes/token-usage.d.ts +0 -7
- package/dist/web/routes/token-usage.d.ts.map +0 -1
- package/dist/web/routes/token-usage.js +0 -18
- package/dist/web/routes/token-usage.js.map +0 -1
- package/dist/web/ssrf-guard.d.ts +0 -35
- package/dist/web/ssrf-guard.d.ts.map +0 -1
- package/dist/web/ssrf-guard.js +0 -93
- package/dist/web/ssrf-guard.js.map +0 -1
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
- package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
- package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
- package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
- package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
- package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
- package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
- package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
- package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
- package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
- package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
- package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
- package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
- package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
- package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
- package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
- package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
- package/dist/web/static/assets/index-CBX47X8l.js +0 -3
- package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
- package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
- package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
- package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
- package/dist/web/static/assets/query-C99w429o.js +0 -2
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
- package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
- package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
- package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
- package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
- package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
- package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TaskDetail-BS8pYhaR.js","sources":["../../src/utils/navigation.ts","../../src/pages/TaskDetail.tsx"],"sourcesContent":["/**\n * Navigation helpers for react-router-based back-navigation with state preservation.\n */\n\n/**\n * Resolves the \"back\" URL from react-router navigation state.\n *\n * Usage in a detail page:\n * const location = useLocation()\n * const backTo = resolveBackTo(location.state)\n * // <Link to={backTo}>Back</Link>\n *\n * The navigation state is set by the list page when navigating forward:\n * navigate(`/tasks/${id}`, { state: { from: location.pathname + location.search } })\n *\n * @param state - location.state from react-router (typed as unknown for safety)\n * @param fallback - URL to use when state carries no valid `from` field (default: '/tasks')\n */\nexport function resolveBackTo(state: unknown, fallback = '/tasks'): string {\n if (state !== null && state !== undefined && typeof state === 'object' && 'from' in state) {\n const from = (state as { from?: unknown }).from\n if (typeof from === 'string' && from.length > 0) return from\n }\n return fallback\n}\n","import { useParams, Link, useLocation } from 'react-router-dom'\nimport { useQuery } from '@tanstack/react-query'\nimport { useState } from 'react'\nimport { format } from 'date-fns'\nimport { parseUTC } from '../utils/time'\nimport { resolveBackTo } from '../utils/navigation'\nimport {\n ArrowLeft,\n Clock,\n CheckCircle2,\n Loader2,\n ChevronDown,\n ChevronRight,\n FileText,\n Terminal,\n FileEdit,\n Bot,\n BookOpen,\n Syringe,\n FolderOpen,\n Eye,\n Pencil,\n Search,\n Globe,\n MessageSquare,\n} from 'lucide-react'\nimport clsx from 'clsx'\nimport { normalizeTaskTitle } from '../utils/task-title'\n\ninterface Injection {\n id: string\n injection_type: 'systemMessage' | 'additionalContext'\n source_handler: string\n content: string\n timestamp: string\n}\n\ninterface TimelineEvent {\n id: string\n timestamp: string\n tool_name: string\n hook_type: string\n input: unknown\n output: unknown\n is_agent_call: boolean\n agent_detail?: {\n subagent_type?: string\n name?: string\n prompt?: string\n }\n}\n\ninterface SkillInvocation {\n id: string\n skill_id: string\n reason: string\n workflow?: string\n phase?: string\n timestamp: string\n}\n\ninterface UserPrompt {\n timestamp: string\n content: string\n}\n\ninterface TaskDetailData {\n id: string\n title: string\n status: 'active' | 'completed' | 'abandoned'\n start_time: string\n end_time?: string\n event_count: number\n session_id: string\n userPrompts: UserPrompt[]\n injections: Injection[]\n timeline: TimelineEvent[]\n skillInvocations: SkillInvocation[]\n artifacts: string[]\n}\n\nasync function fetchTaskDetail(taskId: string): Promise<TaskDetailData> {\n const res = await fetch(`/api/tasks/${taskId}`)\n if (!res.ok) throw new Error('Failed to fetch task detail')\n const raw = await res.json()\n // API returns { task: {...}, injections, timeline, skillInvocations, artifacts }\n // Flatten task fields into top level for component consumption\n return {\n ...raw.task,\n userPrompts: raw.userPrompts ?? [],\n injections: raw.injections ?? [],\n timeline: (raw.timeline ?? []).map((e: any, idx: number) => ({\n id: `${e.timestamp}-${e.tool_name}-${idx}`,\n timestamp: e.timestamp,\n tool_name: e.tool_name,\n hook_type: e.hook_type,\n input: e.input,\n output: e.output,\n is_agent_call: e.is_agent_call,\n agent_detail: e.agent_detail,\n })),\n skillInvocations: raw.skillInvocations ?? [],\n artifacts: raw.artifacts ?? [],\n }\n}\n\nfunction getToolIcon(toolName: string) {\n switch (toolName) {\n case 'Read':\n return <Eye className=\"h-4 w-4 text-gray-500\" />\n case 'Edit':\n return <Pencil className=\"h-4 w-4 text-amber-600\" />\n case 'Write':\n return <FileEdit className=\"h-4 w-4 text-green-600\" />\n case 'Bash':\n return <Terminal className=\"h-4 w-4 text-orange-600\" />\n case 'Agent':\n case 'Task':\n return <Bot className=\"h-4 w-4 text-blue-600\" />\n case 'Grep':\n case 'Glob':\n return <Search className=\"h-4 w-4 text-purple-500\" />\n case 'WebSearch':\n case 'WebFetch':\n return <Globe className=\"h-4 w-4 text-cyan-600\" />\n default:\n return <Terminal className=\"h-4 w-4 text-gray-400\" />\n }\n}\n\nfunction getRelativeTime(eventTime: string, startTime: string): string {\n const diff = parseUTC(eventTime).getTime() - parseUTC(startTime).getTime()\n if (diff < 1000) return '+0s'\n if (diff < 60000) return `+${Math.floor(diff / 1000)}s`\n if (diff < 3600000) return `+${Math.floor(diff / 60000)}m${Math.floor((diff % 60000) / 1000)}s`\n return `+${Math.floor(diff / 3600000)}h${Math.floor((diff % 3600000) / 60000)}m`\n}\n\nexport default function TaskDetail() {\n const { taskId } = useParams<{ taskId: string }>()\n const location = useLocation()\n const backTo = resolveBackTo(location.state)\n const [expandedInjections, setExpandedInjections] = useState<Set<string>>(new Set())\n const [expandedEvents, setExpandedEvents] = useState<Set<number>>(new Set())\n const [showInjections, setShowInjections] = useState(true)\n\n const { data, isLoading, error } = useQuery({\n queryKey: ['task-detail', taskId],\n queryFn: () => fetchTaskDetail(taskId!),\n enabled: !!taskId,\n refetchInterval: 10000,\n })\n\n if (isLoading) {\n return (\n <div className=\"bg-white rounded-lg shadow p-6\">\n <p className=\"text-gray-600\">加载中...</p>\n </div>\n )\n }\n\n if (error || !data) {\n return (\n <div>\n <Link to={backTo} className=\"inline-flex items-center text-sm text-gray-500 hover:text-gray-700 mb-4\">\n <ArrowLeft className=\"h-4 w-4 mr-1\" />返回\n </Link>\n <div className=\"bg-white rounded-lg shadow p-6\">\n <p className=\"text-red-600\">加载失败: {(error as Error)?.message || '未知错误'}</p>\n </div>\n </div>\n )\n }\n\n const toggleInjection = (id: string) => {\n setExpandedInjections(prev => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n\n const toggleEvent = (idx: number) => {\n setExpandedEvents(prev => {\n const next = new Set(prev)\n if (next.has(idx)) next.delete(idx)\n else next.add(idx)\n return next\n })\n }\n\n const duration = data.end_time\n ? `${Math.round((parseUTC(data.end_time).getTime() - parseUTC(data.start_time).getTime()) / 1000)}s`\n : '进行中'\n\n return (\n <div>\n <Link to={backTo} className=\"inline-flex items-center text-sm text-gray-500 hover:text-gray-700 mb-4\">\n <ArrowLeft className=\"h-4 w-4 mr-1\" />返回任务列表\n </Link>\n\n {/* 区域 1:任务概览 */}\n <div className=\"bg-white rounded-lg shadow p-6 mb-6\">\n <div className=\"flex items-start justify-between mb-4\">\n <h1 className=\"text-xl font-bold text-gray-900\">{normalizeTaskTitle(data.title, data.userPrompts[0]?.content)}</h1>\n <span className={clsx(\n 'px-2 py-1 text-xs font-medium rounded-full',\n data.status === 'completed' && 'bg-green-100 text-green-700',\n data.status === 'active' && 'bg-blue-100 text-blue-700',\n data.status === 'abandoned' && 'bg-gray-100 text-gray-600'\n )}>\n {data.status === 'completed' && <CheckCircle2 className=\"h-3 w-3 inline mr-1\" />}\n {data.status === 'active' && <Loader2 className=\"h-3 w-3 inline mr-1 animate-spin\" />}\n {data.status}\n </span>\n </div>\n <div className=\"grid grid-cols-4 gap-4 text-sm\">\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">开始时间</div>\n <div className=\"text-gray-900\">\n {format(parseUTC(data.start_time), 'MM-dd HH:mm:ss')}\n </div>\n </div>\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">结束时间</div>\n <div className=\"text-gray-900\">\n {data.end_time ? format(parseUTC(data.end_time), 'MM-dd HH:mm:ss') : '-'}\n </div>\n </div>\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">持续时间</div>\n <div className=\"text-gray-900\">{duration}</div>\n </div>\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">事件数</div>\n <div className=\"text-gray-900\">{data.event_count}</div>\n </div>\n </div>\n </div>\n\n {/* 区域 1.5:用户消息 */}\n {data.userPrompts.length > 0 && (\n <div className=\"bg-white rounded-lg shadow p-6 mb-6\">\n <h2 className=\"text-base font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <MessageSquare className=\"h-4 w-4 text-purple-500\" />\n 用户消息\n <span className=\"text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded-full\">\n {data.userPrompts.length}\n </span>\n </h2>\n <div className=\"space-y-3\">\n {data.userPrompts.map((up, idx) => (\n <div key={idx} className=\"bg-purple-50 border border-purple-100 rounded-lg p-3\">\n <div className=\"text-xs text-gray-500 mb-1 font-mono\">\n {format(parseUTC(up.timestamp), 'HH:mm:ss')}\n </div>\n <div className=\"text-sm text-gray-800 whitespace-pre-wrap break-all\">{up.content}</div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* 空状态:所有详情区块都为空时的兜底提示 */}\n {data.userPrompts.length === 0 &&\n data.injections.length === 0 &&\n data.timeline.length === 0 &&\n data.skillInvocations.length === 0 &&\n data.artifacts.length === 0 && (\n <div className=\"bg-white rounded-lg shadow p-12 text-center\">\n <Clock className=\"h-12 w-12 text-gray-300 mx-auto mb-3\" />\n <p className=\"text-sm text-gray-500\">该任务暂无可展示的执行内容</p>\n <p className=\"text-xs text-gray-400 mt-1\">事件可能仍在记录中,稍后刷新查看</p>\n </div>\n )}\n\n {/* 区域 2:注入内容 */}\n {data.injections.length > 0 && (\n <div className=\"bg-white rounded-lg shadow mb-6\">\n <button\n onClick={() => setShowInjections(!showInjections)}\n className=\"w-full flex items-center justify-between p-4 text-left hover:bg-gray-50 rounded-t-lg\"\n >\n <div className=\"flex items-center gap-2\">\n <Syringe className=\"h-4 w-4 text-gray-500\" />\n <h2 className=\"text-base font-semibold text-gray-900\">注入内容</h2>\n <span className=\"text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded-full\">\n {data.injections.length}\n </span>\n </div>\n {showInjections ? <ChevronDown className=\"h-4 w-4 text-gray-400\" /> : <ChevronRight className=\"h-4 w-4 text-gray-400\" />}\n </button>\n {showInjections && (\n <div className=\"px-4 pb-4 space-y-2\">\n {data.injections.map((inj) => (\n <div key={inj.id} className=\"bg-gray-50 rounded-lg border border-gray-100\">\n <button\n onClick={() => toggleInjection(inj.id)}\n className=\"w-full flex items-center justify-between p-3 text-left\"\n >\n <div className=\"flex items-center gap-2 text-sm\">\n <span className={clsx(\n 'px-1.5 py-0.5 text-xs rounded font-mono',\n inj.injection_type === 'systemMessage' ? 'bg-blue-50 text-blue-700' : 'bg-amber-50 text-amber-700'\n )}>\n {inj.injection_type}\n </span>\n <span className=\"text-gray-600\">{inj.source_handler}</span>\n </div>\n {expandedInjections.has(inj.id) ? <ChevronDown className=\"h-3 w-3 text-gray-400\" /> : <ChevronRight className=\"h-3 w-3 text-gray-400\" />}\n </button>\n {expandedInjections.has(inj.id) && (\n <div className=\"px-3 pb-3\">\n <pre className=\"text-xs text-gray-700 bg-white border border-gray-200 rounded p-3 overflow-x-auto max-h-64 overflow-y-auto whitespace-pre-wrap\">\n {inj.content}\n </pre>\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* 区域 3:执行时间线 */}\n {data.timeline.length > 0 && (\n <div className=\"bg-white rounded-lg shadow p-6 mb-6\">\n <h2 className=\"text-base font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-gray-500\" />\n 执行时间线\n <span className=\"text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded-full\">\n {data.timeline.length}\n </span>\n </h2>\n <div className=\"relative\">\n {/* 竖线 */}\n <div className=\"absolute left-[19px] top-2 bottom-2 w-px bg-gray-200\" />\n <div className=\"space-y-0\">\n {data.timeline.map((event, idx) => {\n const isAgent = event.is_agent_call\n const isFileOp = event.tool_name === 'Edit' || event.tool_name === 'Write'\n const isExpanded = expandedEvents.has(idx)\n const input = event.input as Record<string, unknown> | null\n const filePath = input?.file_path as string | undefined\n const description = (input?.description || input?.command) as string | undefined\n\n return (\n <div key={event.id || idx} className={clsx(\n 'relative flex items-start gap-3 py-2 px-2 rounded-md cursor-pointer hover:bg-gray-50 transition-colors',\n isAgent && 'bg-blue-50 hover:bg-blue-100',\n )}\n onClick={() => toggleEvent(idx)}\n >\n <div className=\"relative z-10 flex-shrink-0 w-10 flex justify-center\">\n <div className={clsx(\n 'w-8 h-8 rounded-full flex items-center justify-center',\n isAgent ? 'bg-blue-100' : 'bg-white border border-gray-200'\n )}>\n {getToolIcon(event.tool_name)}\n </div>\n </div>\n <div className=\"flex-1 min-w-0 pt-1\">\n <div className=\"flex items-center gap-2\">\n <span className={clsx(\n 'text-sm font-medium',\n isAgent ? 'text-blue-700' : 'text-gray-900'\n )}>\n {event.tool_name}\n </span>\n {event.agent_detail?.subagent_type && (\n <span className=\"text-xs bg-blue-100 text-blue-700 px-1.5 py-0.5 rounded font-mono\">\n {event.agent_detail.subagent_type}\n </span>\n )}\n {event.agent_detail?.name && (\n <span className=\"text-xs text-blue-600\">\n {event.agent_detail.name}\n </span>\n )}\n <span className=\"text-xs text-gray-400 font-mono ml-auto flex items-center gap-1\">\n {getRelativeTime(event.timestamp, data.start_time)}\n {isExpanded ? <ChevronDown className=\"h-3 w-3\" /> : <ChevronRight className=\"h-3 w-3\" />}\n </span>\n </div>\n {!isExpanded && isFileOp && filePath && (\n <p className=\"text-xs text-green-700 font-mono mt-0.5 truncate\" title={filePath}>\n {filePath}\n </p>\n )}\n {!isExpanded && !isFileOp && description && (\n <p className=\"text-xs text-gray-500 mt-0.5 truncate\">{description}</p>\n )}\n {/* 展开的详细内容 */}\n {isExpanded && (\n <div className=\"mt-2 space-y-2 text-xs\" onClick={e => e.stopPropagation()}>\n {/* Agent 调用详情 */}\n {isAgent && event.agent_detail && (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-3 space-y-2\">\n {event.agent_detail.subagent_type && (\n <div>\n <span className=\"text-blue-600 font-medium\">subagent_type: </span>\n <span className=\"font-mono text-blue-800\">{event.agent_detail.subagent_type}</span>\n </div>\n )}\n {event.agent_detail.name && (\n <div>\n <span className=\"text-blue-600 font-medium\">name: </span>\n <span className=\"font-mono text-blue-800\">{event.agent_detail.name}</span>\n </div>\n )}\n {event.agent_detail.prompt && (\n <div>\n <span className=\"text-blue-600 font-medium\">prompt:</span>\n <pre className=\"mt-1 p-2 bg-white rounded border border-blue-100 text-gray-800 whitespace-pre-wrap break-words max-h-60 overflow-y-auto\">\n {event.agent_detail.prompt}\n </pre>\n </div>\n )}\n </div>\n )}\n {/* 文件操作详情 */}\n {isFileOp && filePath && (\n <div className=\"bg-green-50 border border-green-200 rounded-lg p-3\">\n <span className=\"text-green-700 font-medium\">file: </span>\n <span className=\"font-mono text-green-800\">{filePath}</span>\n </div>\n )}\n {/* 通用工具详情 */}\n {!isAgent && description && (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-3\">\n <pre className=\"text-gray-700 whitespace-pre-wrap break-words max-h-40 overflow-y-auto\">\n {description}\n </pre>\n </div>\n )}\n {/* 文件路径(非文件操作工具,如 Read) */}\n {!isAgent && !isFileOp && filePath && (\n <div className=\"text-gray-500\">\n <span className=\"font-medium\">path: </span>\n <span className=\"font-mono\">{filePath}</span>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )}\n\n {/* 区域 4:Skill 调用 */}\n {data.skillInvocations.length > 0 && (\n <div className=\"bg-white rounded-lg shadow p-6 mb-6\">\n <h2 className=\"text-base font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <BookOpen className=\"h-4 w-4 text-purple-500\" />\n Skill 调用\n <span className=\"text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded-full\">\n {data.skillInvocations.length}\n </span>\n </h2>\n <div className=\"space-y-3\">\n {data.skillInvocations.map((skill) => (\n <div key={skill.id} className=\"border border-purple-100 bg-purple-50 rounded-lg p-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n <span className=\"text-sm font-medium text-purple-800 font-mono\">\n {skill.skill_id}\n </span>\n {skill.workflow && (\n <span className=\"text-xs bg-purple-100 text-purple-700 px-1.5 py-0.5 rounded\">\n {skill.workflow}\n </span>\n )}\n {skill.phase && (\n <span className=\"text-xs bg-purple-100 text-purple-700 px-1.5 py-0.5 rounded\">\n phase: {skill.phase}\n </span>\n )}\n </div>\n <p className=\"text-xs text-purple-700\">{skill.reason}</p>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* 区域 5:产物 */}\n {data.artifacts.length > 0 && (\n <div className=\"bg-white rounded-lg shadow p-6 mb-6\">\n <h2 className=\"text-base font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <FolderOpen className=\"h-4 w-4 text-green-600\" />\n 产物\n <span className=\"text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded-full\">\n {data.artifacts.length} 个文件\n </span>\n </h2>\n <div className=\"space-y-1\">\n {data.artifacts.map((filePath) => (\n <div key={filePath} className=\"flex items-center gap-2 py-1.5 px-3 rounded hover:bg-green-50\">\n <FileText className=\"h-4 w-4 text-green-600 flex-shrink-0\" />\n <span className=\"text-sm text-gray-800 font-mono truncate\" title={filePath}>\n {filePath}\n </span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n"],"names":["resolveBackTo","state","fallback","from","fetchTaskDetail","taskId","res","raw","e","idx","getToolIcon","toolName","jsx","Eye","Pencil","FileEdit","Terminal","Bot","Search","Globe","getRelativeTime","eventTime","startTime","diff","parseUTC","TaskDetail","useParams","location","useLocation","backTo","expandedInjections","setExpandedInjections","useState","expandedEvents","setExpandedEvents","showInjections","setShowInjections","data","isLoading","error","useQuery","jsxs","Link","ArrowLeft","toggleInjection","id","prev","next","toggleEvent","duration","normalizeTaskTitle","_a","clsx","CheckCircle2","Loader2","format","MessageSquare","up","Clock","Syringe","ChevronDown","ChevronRight","inj","event","isAgent","isFileOp","isExpanded","input","filePath","description","_b","BookOpen","skill","FolderOpen","FileText"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as v,j as t}from"./react-vendor-CSp-GLFF.js";import{u as D}from"./query-C99w429o.js";import{b as Z,u as B,d as Q}from"./react-router-r79dBVy4.js";import{p as V}from"./time-Bxuk0M-C.js";import{S as H}from"./SearchInput-qCj_jAcf.js";import{d as u}from"./vendor-CMMjVdZs.js";import{n as J}from"./task-title-BhOcemuR.js";import{o as W,A as F,g as X,p as Y,q as ee,n as te,r as se}from"./lucide-Bs_edTLa.js";import{a as ae,z as re}from"./date-fns-CZ_bHujz.js";const A=[20,50,100],ne=50;function oe(s){const a=Date.now();return s==="1h"?new Date(a-36e5).toISOString():s==="24h"?new Date(a-864e5).toISOString():s==="7d"?new Date(a-7*864e5).toISOString():""}async function ie(s){const a=await fetch(`/api/tasks?${s.toString()}`);if(!a.ok)throw new Error("Failed to fetch tasks");return a.json()}async function ce(){const s=await fetch("/api/tasks/projects");if(!s.ok)throw new Error("Failed to fetch projects");return s.json()}function I(s){const a=s.replace(/\\/g,"/").split("/").filter(Boolean);return a.length<=2?s:"…/"+a.slice(-2).join("/")}function be(){const s=Z(),a=B(),[i,f]=Q(),l=Math.max(1,Number(i.get("page")??"1")),d=A.includes(Number(i.get("size")??""))?Number(i.get("size")):ne,r=i.getAll("project"),o=i.get("preset")??"",z=i.get("from")??"",L=i.get("to")??"",m=i.get("search")??"",[O,b]=v.useState(!1),x=v.useCallback(e=>{f(h=>{const c=new URLSearchParams(h);for(const[p,g]of Object.entries(e))g===null||g===""?c.delete(p):Array.isArray(g)?(c.delete(p),g.forEach(K=>c.append(p,K))):c.set(p,g);return c},{replace:!0})},[f]),j=o&&o!=="custom"?oe(o):z,y=o&&o!=="custom"?"":L,S=v.useMemo(()=>{const e=new URLSearchParams;return e.set("limit",String(d)),e.set("offset",String((l-1)*d)),r.forEach(h=>e.append("project",h)),j&&e.set("from",j),y&&e.set("to",y),m&&e.set("search",m),e},[l,d,r,j,y,m]),{data:n,isLoading:w,error:C}=D({queryKey:["tasks",S.toString()],queryFn:()=>ie(S),refetchInterval:15e3,placeholderData:e=>e}),{data:P=[]}=D({queryKey:["task-projects"],queryFn:ce,staleTime:6e4}),k=(n==null?void 0:n.items)??[],N=(n==null?void 0:n.total)??0,E=(n==null?void 0:n.has_more)??!1,_=Math.ceil(N/d)||1,q=e=>{x({search:e||null,page:"1"})},M=e=>{const h=r.includes(e)?r.filter(c=>c!==e):[...r,e];x({project:h.length?h:null,page:"1"})},R=()=>x({project:null,page:"1"}),U=e=>{x({preset:e||null,from:null,to:null,page:"1"})},$=e=>{x({size:String(e),page:"1"})},T=e=>{x({page:String(Math.max(1,Math.min(e,_)))})},G=e=>{switch(e){case"completed":return t.jsx(se,{className:"h-4 w-4 text-green-600"});case"active":return t.jsx(te,{className:"h-4 w-4 text-blue-600 animate-spin"});default:return t.jsx(F,{className:"h-4 w-4 text-gray-400"})}};return w&&!n?t.jsxs("div",{children:[t.jsx("h1",{className:"text-2xl font-bold text-gray-900 mb-6",children:"任务"}),t.jsx("div",{className:"bg-white rounded-lg shadow p-6",children:t.jsx("p",{className:"text-gray-600",children:"加载中..."})})]}):C?t.jsxs("div",{children:[t.jsx("h1",{className:"text-2xl font-bold text-gray-900 mb-6",children:"任务"}),t.jsx("div",{className:"bg-white rounded-lg shadow p-6",children:t.jsxs("p",{className:"text-red-600",children:["加载失败: ",C.message]})})]}):t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center justify-between mb-4 flex-wrap gap-3",children:[t.jsx("h1",{className:"text-2xl font-bold text-gray-900",children:"任务"}),t.jsx(H,{value:m,onChange:q,placeholder:"搜索任务标题...",className:"w-64"})]}),t.jsxs("div",{className:"flex flex-wrap items-center gap-2 mb-4",children:[["1h","24h","7d"].map(e=>t.jsx("button",{onClick:()=>U(o===e?"":e),className:u("px-3 py-1.5 text-xs font-medium rounded-md border transition-colors",o===e?"bg-indigo-600 text-white border-indigo-600":"bg-white text-gray-700 border-gray-300 hover:bg-gray-50"),children:e==="1h"?"近 1 小时":e==="24h"?"近 24 小时":"近 7 天"},e)),P.length>0&&t.jsxs("div",{className:"relative",children:[t.jsxs("button",{onClick:()=>b(e=>!e),className:u("inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md border transition-colors",r.length>0?"bg-indigo-50 text-indigo-700 border-indigo-300":"bg-white text-gray-700 border-gray-300 hover:bg-gray-50"),children:[t.jsx(W,{className:"h-3.5 w-3.5"}),r.length>0?`项目 (${r.length})`:"所有项目"]}),O&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"fixed inset-0 z-10",onClick:()=>b(!1)}),t.jsxs("div",{className:"absolute left-0 mt-1 w-72 bg-white border border-gray-200 rounded-md shadow-lg z-20 max-h-64 overflow-y-auto",children:[r.length>0&&t.jsx("button",{onClick:()=>{R(),b(!1)},className:"w-full text-left px-3 py-2 text-xs text-indigo-600 hover:bg-indigo-50 border-b border-gray-100",children:"清除筛选"}),P.map(e=>t.jsxs("label",{className:"flex items-center gap-2 px-3 py-2 text-sm text-gray-700 hover:bg-gray-50 cursor-pointer",children:[t.jsx("input",{type:"checkbox",className:"rounded text-indigo-600",checked:r.includes(e),onChange:()=>M(e)}),t.jsx("span",{className:"truncate font-mono text-xs",title:e,children:I(e)})]},e))]})]})]}),(r.length>0||o||m)&&t.jsx("button",{onClick:()=>f({},{replace:!0}),className:"px-2 py-1.5 text-xs text-gray-500 hover:text-gray-700 underline",children:"清除所有筛选"})]}),t.jsxs("div",{className:"flex items-center justify-between mb-3 text-sm text-gray-500",children:[t.jsxs("span",{children:["共 ",t.jsx("span",{className:"font-semibold text-gray-900",children:N})," 条",w&&t.jsx("span",{className:"ml-2 text-xs text-indigo-500",children:"刷新中..."})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs",children:"每页"}),A.map(e=>t.jsx("button",{onClick:()=>$(e),className:u("px-2 py-0.5 text-xs rounded border",d===e?"bg-indigo-600 text-white border-indigo-600":"bg-white text-gray-600 border-gray-300 hover:bg-gray-50"),children:e},e))]})]}),t.jsxs("div",{className:"grid gap-4",children:[k.map(e=>t.jsxs("div",{onClick:()=>s(`/tasks/${e.id}`,{state:{from:a.pathname+a.search}}),className:"bg-white rounded-lg shadow hover:shadow-md transition-shadow cursor-pointer p-5",children:[t.jsxs("div",{className:"flex items-start justify-between mb-3",children:[t.jsxs("div",{className:"flex items-start gap-3 flex-1 min-w-0",children:[t.jsx("div",{className:"mt-0.5 flex-shrink-0",children:G(e.status)}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("h3",{className:"text-base font-semibold text-gray-900 mb-1 truncate",children:J(e.title,e.first_prompt)}),e.project_path&&t.jsx("p",{className:"text-xs text-gray-400 font-mono truncate",title:e.project_path,children:I(e.project_path)})]})]}),t.jsx("span",{className:u("ml-3 flex-shrink-0 px-2 py-1 text-xs font-medium rounded-full whitespace-nowrap",e.status==="completed"&&"bg-green-100 text-green-700",e.status==="active"&&"bg-blue-100 text-blue-700",e.status==="abandoned"&&"bg-gray-100 text-gray-600"),children:e.status})]}),t.jsxs("div",{className:"flex items-center gap-6 text-sm text-gray-600",children:[t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(F,{className:"h-4 w-4"}),e.event_count," 个事件"]}),t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(X,{className:"h-4 w-4"}),e.start_time?ae(V(e.start_time),{addSuffix:!0,locale:re}):"-"]})]})]},e.id)),k.length===0&&!w&&t.jsx("div",{className:"bg-white rounded-lg shadow p-12 text-center text-gray-500",children:m||r.length>0||o?"无匹配结果":"暂无任务记录"})]}),N>d&&t.jsxs("div",{className:"flex items-center justify-between mt-6",children:[t.jsxs("button",{onClick:()=>T(l-1),disabled:l<=1,className:"inline-flex items-center gap-1 px-3 py-1.5 text-sm border rounded-md bg-white hover:bg-gray-50 disabled:opacity-40 disabled:cursor-not-allowed",children:[t.jsx(Y,{className:"h-4 w-4"}),"上一页"]}),t.jsxs("span",{className:"text-sm text-gray-500",children:["第 ",l," / ",_," 页",E?"":"(已到末页)"]}),t.jsxs("button",{onClick:()=>T(l+1),disabled:!E,className:"inline-flex items-center gap-1 px-3 py-1.5 text-sm border rounded-md bg-white hover:bg-gray-50 disabled:opacity-40 disabled:cursor-not-allowed",children:["下一页",t.jsx(ee,{className:"h-4 w-4"})]})]})]})}export{be as default};
|
|
2
|
-
//# sourceMappingURL=Tasks-CyuhizG8.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tasks-CyuhizG8.js","sources":["../../src/pages/Tasks.tsx"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { useState, useMemo, useCallback } from 'react'\nimport { useNavigate, useSearchParams, useLocation } from 'react-router-dom'\nimport { formatDistanceToNow } from 'date-fns'\nimport { parseUTC } from '../utils/time'\nimport { zhCN } from 'date-fns/locale'\nimport {\n Clock,\n Activity,\n CheckCircle2,\n Loader2,\n ChevronLeft,\n ChevronRight,\n FolderOpen,\n} from 'lucide-react'\nimport SearchInput from '../components/SearchInput'\nimport clsx from 'clsx'\nimport { normalizeTaskTitle } from '../utils/task-title'\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface Task {\n id: string\n title: string\n status: 'active' | 'completed' | 'abandoned'\n start_time: string\n end_time?: string\n event_count: number\n session_id: string\n project_path?: string\n first_prompt?: string | null\n}\n\ninterface TaskPage {\n items: Task[]\n total: number\n has_more: boolean\n}\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nconst PAGE_SIZES = [20, 50, 100] as const\nconst DEFAULT_PAGE_SIZE = 50\n\ntype TimePreset = '1h' | '24h' | '7d' | 'custom' | ''\n\nfunction presetToFrom(preset: TimePreset): string {\n const now = Date.now()\n if (preset === '1h') return new Date(now - 3600_000).toISOString()\n if (preset === '24h') return new Date(now - 86_400_000).toISOString()\n if (preset === '7d') return new Date(now - 7 * 86_400_000).toISOString()\n return ''\n}\n\n// ── Fetch ─────────────────────────────────────────────────────────────────────\n\nasync function fetchTasks(params: URLSearchParams): Promise<TaskPage> {\n const res = await fetch(`/api/tasks?${params.toString()}`)\n if (!res.ok) throw new Error('Failed to fetch tasks')\n return res.json() as Promise<TaskPage>\n}\n\nasync function fetchProjects(): Promise<string[]> {\n const res = await fetch('/api/tasks/projects')\n if (!res.ok) throw new Error('Failed to fetch projects')\n return res.json() as Promise<string[]>\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction shortPath(p: string): string {\n const parts = p.replace(/\\\\/g, '/').split('/').filter(Boolean)\n if (parts.length <= 2) return p\n return '…/' + parts.slice(-2).join('/')\n}\n\nexport default function Tasks() {\n const navigate = useNavigate()\n const location = useLocation()\n const [searchParams, setSearchParams] = useSearchParams()\n\n // ── URL-synced state ──────────────────────────────────────────────────────\n const page = Math.max(1, Number(searchParams.get('page') ?? '1'))\n const pageSize = (PAGE_SIZES as readonly number[]).includes(Number(searchParams.get('size') ?? ''))\n ? Number(searchParams.get('size'))\n : DEFAULT_PAGE_SIZE\n const selectedProjects = searchParams.getAll('project')\n const timePreset = (searchParams.get('preset') ?? '') as TimePreset\n const fromParam = searchParams.get('from') ?? ''\n const toParam = searchParams.get('to') ?? ''\n const searchVal = searchParams.get('search') ?? ''\n\n // ── Local state for project dropdown ─────────────────────────────────────\n const [projectDropdownOpen, setProjectDropdownOpen] = useState(false)\n\n // ── Patch URL helper ──────────────────────────────────────────────────────\n const patchSearch = useCallback((patch: Record<string, string | string[] | null>) => {\n setSearchParams(prev => {\n const next = new URLSearchParams(prev)\n for (const [k, v] of Object.entries(patch)) {\n if (v === null || v === '') {\n next.delete(k)\n } else if (Array.isArray(v)) {\n next.delete(k)\n v.forEach(val => next.append(k, val))\n } else {\n next.set(k, v)\n }\n }\n return next\n }, { replace: true })\n }, [setSearchParams])\n\n // ── Compute effective from/to ─────────────────────────────────────────────\n const effectiveFrom = timePreset && timePreset !== 'custom' ? presetToFrom(timePreset) : fromParam\n const effectiveTo = timePreset && timePreset !== 'custom' ? '' : toParam\n\n // ── Build query params for /api/tasks ────────────────────────────────────\n const queryParams = useMemo(() => {\n const p = new URLSearchParams()\n p.set('limit', String(pageSize))\n p.set('offset', String((page - 1) * pageSize))\n selectedProjects.forEach(pr => p.append('project', pr))\n if (effectiveFrom) p.set('from', effectiveFrom)\n if (effectiveTo) p.set('to', effectiveTo)\n if (searchVal) p.set('search', searchVal)\n return p\n }, [page, pageSize, selectedProjects, effectiveFrom, effectiveTo, searchVal])\n\n // ── Queries ───────────────────────────────────────────────────────────────\n const { data, isLoading, error } = useQuery<TaskPage>({\n queryKey: ['tasks', queryParams.toString()],\n queryFn: () => fetchTasks(queryParams),\n refetchInterval: 15_000,\n placeholderData: prev => prev,\n })\n\n const { data: projects = [] } = useQuery<string[]>({\n queryKey: ['task-projects'],\n queryFn: fetchProjects,\n staleTime: 60_000,\n })\n\n const tasks = data?.items ?? []\n const total = data?.total ?? 0\n const hasMore = data?.has_more ?? false\n const totalPages = Math.ceil(total / pageSize) || 1\n\n // ── Event handlers ────────────────────────────────────────────────────────\n const handleSearchChange = (val: string) => {\n patchSearch({ search: val || null, page: '1' })\n }\n\n const toggleProject = (proj: string) => {\n const next = selectedProjects.includes(proj)\n ? selectedProjects.filter(p => p !== proj)\n : [...selectedProjects, proj]\n patchSearch({ project: next.length ? next : null, page: '1' })\n }\n\n const clearProjects = () => patchSearch({ project: null, page: '1' })\n\n const handlePreset = (preset: TimePreset) => {\n patchSearch({ preset: preset || null, from: null, to: null, page: '1' })\n }\n\n const handlePageSize = (size: number) => {\n patchSearch({ size: String(size), page: '1' })\n }\n\n const goPage = (p: number) => {\n patchSearch({ page: String(Math.max(1, Math.min(p, totalPages))) })\n }\n\n // ── Status icon ───────────────────────────────────────────────────────────\n const getStatusIcon = (status: string) => {\n switch (status) {\n case 'completed':\n return <CheckCircle2 className=\"h-4 w-4 text-green-600\" />\n case 'active':\n return <Loader2 className=\"h-4 w-4 text-blue-600 animate-spin\" />\n default:\n return <Activity className=\"h-4 w-4 text-gray-400\" />\n }\n }\n\n // ── Loading / error states ────────────────────────────────────────────────\n if (isLoading && !data) {\n return (\n <div>\n <h1 className=\"text-2xl font-bold text-gray-900 mb-6\">任务</h1>\n <div className=\"bg-white rounded-lg shadow p-6\">\n <p className=\"text-gray-600\">加载中...</p>\n </div>\n </div>\n )\n }\n\n if (error) {\n return (\n <div>\n <h1 className=\"text-2xl font-bold text-gray-900 mb-6\">任务</h1>\n <div className=\"bg-white rounded-lg shadow p-6\">\n <p className=\"text-red-600\">加载失败: {(error as Error).message}</p>\n </div>\n </div>\n )\n }\n\n // ── Render ────────────────────────────────────────────────────────────────\n return (\n <div>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4 flex-wrap gap-3\">\n <h1 className=\"text-2xl font-bold text-gray-900\">任务</h1>\n <SearchInput\n value={searchVal}\n onChange={handleSearchChange}\n placeholder=\"搜索任务标题...\"\n className=\"w-64\"\n />\n </div>\n\n {/* Filters bar */}\n <div className=\"flex flex-wrap items-center gap-2 mb-4\">\n {/* Time presets */}\n {(['1h', '24h', '7d'] as TimePreset[]).map(preset => (\n <button\n key={preset}\n onClick={() => handlePreset(timePreset === preset ? '' : preset)}\n className={clsx(\n 'px-3 py-1.5 text-xs font-medium rounded-md border transition-colors',\n timePreset === preset\n ? 'bg-indigo-600 text-white border-indigo-600'\n : 'bg-white text-gray-700 border-gray-300 hover:bg-gray-50'\n )}\n >\n {preset === '1h' ? '近 1 小时' : preset === '24h' ? '近 24 小时' : '近 7 天'}\n </button>\n ))}\n\n {/* Project multi-select */}\n {projects.length > 0 && (\n <div className=\"relative\">\n <button\n onClick={() => setProjectDropdownOpen(v => !v)}\n className={clsx(\n 'inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md border transition-colors',\n selectedProjects.length > 0\n ? 'bg-indigo-50 text-indigo-700 border-indigo-300'\n : 'bg-white text-gray-700 border-gray-300 hover:bg-gray-50'\n )}\n >\n <FolderOpen className=\"h-3.5 w-3.5\" />\n {selectedProjects.length > 0\n ? `项目 (${selectedProjects.length})`\n : '所有项目'}\n </button>\n {projectDropdownOpen && (\n <>\n <div className=\"fixed inset-0 z-10\" onClick={() => setProjectDropdownOpen(false)} />\n <div className=\"absolute left-0 mt-1 w-72 bg-white border border-gray-200 rounded-md shadow-lg z-20 max-h-64 overflow-y-auto\">\n {selectedProjects.length > 0 && (\n <button\n onClick={() => { clearProjects(); setProjectDropdownOpen(false) }}\n className=\"w-full text-left px-3 py-2 text-xs text-indigo-600 hover:bg-indigo-50 border-b border-gray-100\"\n >\n 清除筛选\n </button>\n )}\n {projects.map(proj => (\n <label\n key={proj}\n className=\"flex items-center gap-2 px-3 py-2 text-sm text-gray-700 hover:bg-gray-50 cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n className=\"rounded text-indigo-600\"\n checked={selectedProjects.includes(proj)}\n onChange={() => toggleProject(proj)}\n />\n <span className=\"truncate font-mono text-xs\" title={proj}>\n {shortPath(proj)}\n </span>\n </label>\n ))}\n </div>\n </>\n )}\n </div>\n )}\n\n {/* Active filter summary */}\n {(selectedProjects.length > 0 || timePreset || searchVal) && (\n <button\n onClick={() => setSearchParams({}, { replace: true })}\n className=\"px-2 py-1.5 text-xs text-gray-500 hover:text-gray-700 underline\"\n >\n 清除所有筛选\n </button>\n )}\n </div>\n\n {/* Result count + page-size selector */}\n <div className=\"flex items-center justify-between mb-3 text-sm text-gray-500\">\n <span>\n 共 <span className=\"font-semibold text-gray-900\">{total}</span> 条\n {isLoading && <span className=\"ml-2 text-xs text-indigo-500\">刷新中...</span>}\n </span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs\">每页</span>\n {PAGE_SIZES.map(size => (\n <button\n key={size}\n onClick={() => handlePageSize(size)}\n className={clsx(\n 'px-2 py-0.5 text-xs rounded border',\n pageSize === size\n ? 'bg-indigo-600 text-white border-indigo-600'\n : 'bg-white text-gray-600 border-gray-300 hover:bg-gray-50'\n )}\n >\n {size}\n </button>\n ))}\n </div>\n </div>\n\n {/* Task list */}\n <div className=\"grid gap-4\">\n {tasks.map((task) => (\n <div\n key={task.id}\n onClick={() => navigate(`/tasks/${task.id}`, { state: { from: location.pathname + location.search } })}\n className=\"bg-white rounded-lg shadow hover:shadow-md transition-shadow cursor-pointer p-5\"\n >\n <div className=\"flex items-start justify-between mb-3\">\n <div className=\"flex items-start gap-3 flex-1 min-w-0\">\n <div className=\"mt-0.5 flex-shrink-0\">{getStatusIcon(task.status)}</div>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-base font-semibold text-gray-900 mb-1 truncate\">\n {normalizeTaskTitle(task.title, task.first_prompt)}\n </h3>\n {task.project_path && (\n <p className=\"text-xs text-gray-400 font-mono truncate\" title={task.project_path}>\n {shortPath(task.project_path)}\n </p>\n )}\n </div>\n </div>\n <span className={clsx(\n 'ml-3 flex-shrink-0 px-2 py-1 text-xs font-medium rounded-full whitespace-nowrap',\n task.status === 'completed' && 'bg-green-100 text-green-700',\n task.status === 'active' && 'bg-blue-100 text-blue-700',\n task.status === 'abandoned' && 'bg-gray-100 text-gray-600',\n )}>\n {task.status}\n </span>\n </div>\n\n <div className=\"flex items-center gap-6 text-sm text-gray-600\">\n <span className=\"inline-flex items-center gap-1\">\n <Activity className=\"h-4 w-4\" />\n {task.event_count} 个事件\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"h-4 w-4\" />\n {task.start_time\n ? formatDistanceToNow(parseUTC(task.start_time), {\n addSuffix: true,\n locale: zhCN,\n })\n : '-'}\n </span>\n </div>\n </div>\n ))}\n\n {tasks.length === 0 && !isLoading && (\n <div className=\"bg-white rounded-lg shadow p-12 text-center text-gray-500\">\n {searchVal || selectedProjects.length > 0 || timePreset\n ? '无匹配结果'\n : '暂无任务记录'}\n </div>\n )}\n </div>\n\n {/* Pagination */}\n {total > pageSize && (\n <div className=\"flex items-center justify-between mt-6\">\n <button\n onClick={() => goPage(page - 1)}\n disabled={page <= 1}\n className=\"inline-flex items-center gap-1 px-3 py-1.5 text-sm border rounded-md bg-white hover:bg-gray-50 disabled:opacity-40 disabled:cursor-not-allowed\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n 上一页\n </button>\n <span className=\"text-sm text-gray-500\">\n 第 {page} / {totalPages} 页\n {hasMore ? '' : '(已到末页)'}\n </span>\n <button\n onClick={() => goPage(page + 1)}\n disabled={!hasMore}\n className=\"inline-flex items-center gap-1 px-3 py-1.5 text-sm border rounded-md bg-white hover:bg-gray-50 disabled:opacity-40 disabled:cursor-not-allowed\"\n >\n 下一页\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["PAGE_SIZES","DEFAULT_PAGE_SIZE","presetToFrom","preset","now","fetchTasks","params","res","fetchProjects","shortPath","p","parts","Tasks","navigate","useNavigate","location","useLocation","searchParams","setSearchParams","useSearchParams","page","pageSize","selectedProjects","timePreset","fromParam","toParam","searchVal","projectDropdownOpen","setProjectDropdownOpen","useState","patchSearch","useCallback","patch","prev","next","k","v","val","effectiveFrom","effectiveTo","queryParams","useMemo","pr","data","isLoading","error","useQuery","projects","tasks","total","hasMore","totalPages","handleSearchChange","toggleProject","proj","clearProjects","handlePreset","handlePageSize","size","goPage","getStatusIcon","status","jsx","CheckCircle2","Loader2","Activity","jsxs","SearchInput","clsx","FolderOpen","Fragment","task","normalizeTaskTitle","Clock","formatDistanceToNow","parseUTC","zhCN","ChevronLeft","ChevronRight"],"mappings":"gdAyCA,MAAMA,EAAa,CAAC,GAAI,GAAI,GAAG,EACzBC,GAAoB,GAI1B,SAASC,GAAaC,EAA4B,CAChD,MAAMC,EAAM,KAAK,IAAA,EACjB,OAAID,IAAW,KAAc,IAAI,KAAKC,EAAM,IAAQ,EAAE,YAAA,EAClDD,IAAW,MAAc,IAAI,KAAKC,EAAM,KAAU,EAAE,YAAA,EACpDD,IAAW,KAAc,IAAI,KAAKC,EAAM,EAAI,KAAU,EAAE,YAAA,EACrD,EACT,CAIA,eAAeC,GAAWC,EAA4C,CACpE,MAAMC,EAAM,MAAM,MAAM,cAAcD,EAAO,SAAA,CAAU,EAAE,EACzD,GAAI,CAACC,EAAI,GAAI,MAAM,IAAI,MAAM,uBAAuB,EACpD,OAAOA,EAAI,KAAA,CACb,CAEA,eAAeC,IAAmC,CAChD,MAAMD,EAAM,MAAM,MAAM,qBAAqB,EAC7C,GAAI,CAACA,EAAI,GAAI,MAAM,IAAI,MAAM,0BAA0B,EACvD,OAAOA,EAAI,KAAA,CACb,CAIA,SAASE,EAAUC,EAAmB,CACpC,MAAMC,EAAQD,EAAE,QAAQ,MAAO,GAAG,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAC7D,OAAIC,EAAM,QAAU,EAAUD,EACvB,KAAOC,EAAM,MAAM,EAAE,EAAE,KAAK,GAAG,CACxC,CAEA,SAAwBC,IAAQ,CAC9B,MAAMC,EAAWC,EAAA,EACXC,EAAWC,EAAA,EACX,CAACC,EAAcC,CAAe,EAAIC,EAAA,EAGlCC,EAAW,KAAK,IAAI,EAAG,OAAOH,EAAa,IAAI,MAAM,GAAM,GAAG,CAAC,EAC/DI,EAAYrB,EAAiC,SAAS,OAAOiB,EAAa,IAAI,MAAM,GAAK,EAAE,CAAC,EAC9F,OAAOA,EAAa,IAAI,MAAM,CAAC,EAC/BhB,GACEqB,EAAmBL,EAAa,OAAO,SAAS,EAChDM,EAAcN,EAAa,IAAI,QAAQ,GAAK,GAC5CO,EAAaP,EAAa,IAAI,MAAM,GAAK,GACzCQ,EAAaR,EAAa,IAAI,IAAI,GAAO,GACzCS,EAAaT,EAAa,IAAI,QAAQ,GAAK,GAG3C,CAACU,EAAqBC,CAAsB,EAAIC,EAAAA,SAAS,EAAK,EAG9DC,EAAcC,cAAaC,GAAoD,CACnFd,EAAgBe,GAAQ,CACtB,MAAMC,EAAO,IAAI,gBAAgBD,CAAI,EACrC,SAAW,CAACE,EAAGC,CAAC,IAAK,OAAO,QAAQJ,CAAK,EACnCI,IAAM,MAAQA,IAAM,GACtBF,EAAK,OAAOC,CAAC,EACJ,MAAM,QAAQC,CAAC,GACxBF,EAAK,OAAOC,CAAC,EACbC,EAAE,QAAQC,GAAOH,EAAK,OAAOC,EAAGE,CAAG,CAAC,GAEpCH,EAAK,IAAIC,EAAGC,CAAC,EAGjB,OAAOF,CACT,EAAG,CAAE,QAAS,GAAM,CACtB,EAAG,CAAChB,CAAe,CAAC,EAGdoB,EAAgBf,GAAcA,IAAe,SAAWrB,GAAaqB,CAAU,EAAIC,EACnFe,EAAgBhB,GAAcA,IAAe,SAAW,GAAKE,EAG7De,EAAcC,EAAAA,QAAQ,IAAM,CAChC,MAAM/B,EAAI,IAAI,gBACd,OAAAA,EAAE,IAAI,QAAU,OAAOW,CAAQ,CAAC,EAChCX,EAAE,IAAI,SAAU,QAAQU,EAAO,GAAKC,CAAQ,CAAC,EAC7CC,EAAiB,QAAQoB,GAAMhC,EAAE,OAAO,UAAWgC,CAAE,CAAC,EAClDJ,GAAe5B,EAAE,IAAI,OAAQ4B,CAAa,EAC1CC,GAAe7B,EAAE,IAAI,KAAQ6B,CAAW,EACxCb,GAAehB,EAAE,IAAI,SAAUgB,CAAS,EACrChB,CACT,EAAG,CAACU,EAAMC,EAAUC,EAAkBgB,EAAeC,EAAab,CAAS,CAAC,EAGtE,CAAE,KAAAiB,EAAM,UAAAC,EAAW,MAAAC,CAAA,EAAUC,EAAmB,CACpD,SAAU,CAAC,QAASN,EAAY,UAAU,EAC1C,QAAS,IAAMnC,GAAWmC,CAAW,EACrC,gBAAiB,KACjB,gBAAiBP,GAAQA,CAAA,CAC1B,EAEK,CAAE,KAAMc,EAAW,CAAA,CAAC,EAAMD,EAAmB,CACjD,SAAU,CAAC,eAAe,EAC1B,QAAStC,GACT,UAAW,GAAA,CACZ,EAEKwC,GAAWL,GAAA,YAAAA,EAAM,QAAS,CAAA,EAC1BM,GAAWN,GAAA,YAAAA,EAAM,QAAS,EAC1BO,GAAWP,GAAA,YAAAA,EAAM,WAAY,GAC7BQ,EAAa,KAAK,KAAKF,EAAQ5B,CAAQ,GAAK,EAG5C+B,EAAsBf,GAAgB,CAC1CP,EAAY,CAAE,OAAQO,GAAO,KAAM,KAAM,IAAK,CAChD,EAEMgB,EAAiBC,GAAiB,CACtC,MAAMpB,EAAOZ,EAAiB,SAASgC,CAAI,EACvChC,EAAiB,OAAOZ,GAAKA,IAAM4C,CAAI,EACvC,CAAC,GAAGhC,EAAkBgC,CAAI,EAC9BxB,EAAY,CAAE,QAASI,EAAK,OAASA,EAAO,KAAM,KAAM,IAAK,CAC/D,EAEMqB,EAAgB,IAAMzB,EAAY,CAAE,QAAS,KAAM,KAAM,IAAK,EAE9D0B,EAAgBrD,GAAuB,CAC3C2B,EAAY,CAAE,OAAQ3B,GAAU,KAAM,KAAM,KAAM,GAAI,KAAM,KAAM,GAAA,CAAK,CACzE,EAEMsD,EAAkBC,GAAiB,CACvC5B,EAAY,CAAE,KAAM,OAAO4B,CAAI,EAAG,KAAM,IAAK,CAC/C,EAEMC,EAAUjD,GAAc,CAC5BoB,EAAY,CAAE,KAAM,OAAO,KAAK,IAAI,EAAG,KAAK,IAAIpB,EAAGyC,CAAU,CAAC,CAAC,EAAG,CACpE,EAGMS,EAAiBC,GAAmB,CACxC,OAAQA,EAAA,CACN,IAAK,YACH,OAAOC,EAAAA,IAACC,GAAA,CAAa,UAAU,wBAAA,CAAyB,EAC1D,IAAK,SACH,OAAOD,EAAAA,IAACE,GAAA,CAAQ,UAAU,oCAAA,CAAqC,EACjE,QACE,OAAOF,EAAAA,IAACG,EAAA,CAAS,UAAU,uBAAA,CAAwB,CAAA,CAEzD,EAGA,OAAIrB,GAAa,CAACD,SAEb,MAAA,CACC,SAAA,CAAAmB,EAAAA,IAAC,KAAA,CAAG,UAAU,wCAAwC,SAAA,KAAE,EACxDA,EAAAA,IAAC,OAAI,UAAU,iCACb,eAAC,IAAA,CAAE,UAAU,gBAAgB,SAAA,QAAA,CAAM,CAAA,CACrC,CAAA,EACF,EAIAjB,SAEC,MAAA,CACC,SAAA,CAAAiB,EAAAA,IAAC,KAAA,CAAG,UAAU,wCAAwC,SAAA,KAAE,QACvD,MAAA,CAAI,UAAU,iCACb,SAAAI,EAAAA,KAAC,IAAA,CAAE,UAAU,eAAe,SAAA,CAAA,SAAQrB,EAAgB,OAAA,CAAA,CAAQ,CAAA,CAC9D,CAAA,EACF,SAMD,MAAA,CAEC,SAAA,CAAAqB,EAAAA,KAAC,MAAA,CAAI,UAAU,yDACb,SAAA,CAAAJ,EAAAA,IAAC,KAAA,CAAG,UAAU,mCAAmC,SAAA,KAAE,EACnDA,EAAAA,IAACK,EAAA,CACC,MAAOzC,EACP,SAAU0B,EACV,YAAY,YACZ,UAAU,MAAA,CAAA,CACZ,EACF,EAGAc,EAAAA,KAAC,MAAA,CAAI,UAAU,yCAEX,SAAA,CAAA,CAAC,KAAM,MAAO,IAAI,EAAmB,IAAI/D,GACzC2D,EAAAA,IAAC,SAAA,CAEC,QAAS,IAAMN,EAAajC,IAAepB,EAAS,GAAKA,CAAM,EAC/D,UAAWiE,EACT,sEACA7C,IAAepB,EACX,6CACA,yDAAA,EAGL,SAAAA,IAAW,KAAO,SAAWA,IAAW,MAAQ,UAAY,OAAA,EATxDA,CAAA,CAWR,EAGA4C,EAAS,OAAS,GACjBmB,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,QAAS,IAAMtC,EAAuBQ,GAAK,CAACA,CAAC,EAC7C,UAAWgC,EACT,uGACA9C,EAAiB,OAAS,EACtB,iDACA,yDAAA,EAGN,SAAA,CAAAwC,EAAAA,IAACO,EAAA,CAAW,UAAU,aAAA,CAAc,EACnC/C,EAAiB,OAAS,EACvB,OAAOA,EAAiB,MAAM,IAC9B,MAAA,CAAA,CAAA,EAELK,GACCuC,EAAAA,KAAAI,WAAA,CACE,SAAA,CAAAR,MAAC,OAAI,UAAU,qBAAqB,QAAS,IAAMlC,EAAuB,EAAK,EAAG,EAClFsC,EAAAA,KAAC,MAAA,CAAI,UAAU,+GACZ,SAAA,CAAA5C,EAAiB,OAAS,GACzBwC,EAAAA,IAAC,SAAA,CACC,QAAS,IAAM,CAAEP,EAAA,EAAiB3B,EAAuB,EAAK,CAAE,EAChE,UAAU,iGACX,SAAA,MAAA,CAAA,EAIFmB,EAAS,IAAIO,GACZY,EAAAA,KAAC,QAAA,CAEC,UAAU,0FAEV,SAAA,CAAAJ,EAAAA,IAAC,QAAA,CACC,KAAK,WACL,UAAU,0BACV,QAASxC,EAAiB,SAASgC,CAAI,EACvC,SAAU,IAAMD,EAAcC,CAAI,CAAA,CAAA,EAEpCQ,MAAC,QAAK,UAAU,6BAA6B,MAAOR,EACjD,SAAA7C,EAAU6C,CAAI,CAAA,CACjB,CAAA,CAAA,EAXKA,CAAA,CAaR,CAAA,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EAEJ,GAIAhC,EAAiB,OAAS,GAAKC,GAAcG,IAC7CoC,EAAAA,IAAC,SAAA,CACC,QAAS,IAAM5C,EAAgB,CAAA,EAAI,CAAE,QAAS,GAAM,EACpD,UAAU,kEACX,SAAA,QAAA,CAAA,CAED,EAEJ,EAGAgD,EAAAA,KAAC,MAAA,CAAI,UAAU,+DACb,SAAA,CAAAA,OAAC,OAAA,CAAK,SAAA,CAAA,KACFJ,EAAAA,IAAC,OAAA,CAAK,UAAU,8BAA+B,SAAAb,EAAM,EAAO,KAC7DL,GAAakB,EAAAA,IAAC,OAAA,CAAK,UAAU,+BAA+B,SAAA,QAAA,CAAM,CAAA,EACrE,EACAI,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAJ,EAAAA,IAAC,OAAA,CAAK,UAAU,UAAU,SAAA,KAAE,EAC3B9D,EAAW,IAAI0D,GACdI,EAAAA,IAAC,SAAA,CAEC,QAAS,IAAML,EAAeC,CAAI,EAClC,UAAWU,EACT,qCACA/C,IAAaqC,EACT,6CACA,yDAAA,EAGL,SAAAA,CAAA,EATIA,CAAA,CAWR,CAAA,CAAA,CACH,CAAA,EACF,EAGAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,aACZ,SAAA,CAAAlB,EAAM,IAAKuB,GACVL,EAAAA,KAAC,MAAA,CAEC,QAAS,IAAMrD,EAAS,UAAU0D,EAAK,EAAE,GAAI,CAAE,MAAO,CAAE,KAAMxD,EAAS,SAAWA,EAAS,MAAA,EAAU,EACrG,UAAU,kFAEV,SAAA,CAAAmD,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAJ,MAAC,OAAI,UAAU,uBAAwB,SAAAF,EAAcW,EAAK,MAAM,EAAE,EAClEL,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAJ,EAAAA,IAAC,KAAA,CAAG,UAAU,sDACX,SAAAU,EAAmBD,EAAK,MAAOA,EAAK,YAAY,CAAA,CACnD,EACCA,EAAK,cACJT,EAAAA,IAAC,IAAA,CAAE,UAAU,2CAA2C,MAAOS,EAAK,aACjE,SAAA9D,EAAU8D,EAAK,YAAY,CAAA,CAC9B,CAAA,CAAA,CAEJ,CAAA,EACF,EACAT,MAAC,QAAK,UAAWM,EACf,kFACAG,EAAK,SAAW,aAAe,8BAC/BA,EAAK,SAAW,UAAe,4BAC/BA,EAAK,SAAW,aAAe,2BAAA,EAE9B,WAAK,MAAA,CACR,CAAA,EACF,EAEAL,EAAAA,KAAC,MAAA,CAAI,UAAU,gDACb,SAAA,CAAAA,EAAAA,KAAC,OAAA,CAAK,UAAU,iCACd,SAAA,CAAAJ,EAAAA,IAACG,EAAA,CAAS,UAAU,SAAA,CAAU,EAC7BM,EAAK,YAAY,MAAA,EACpB,EACAL,EAAAA,KAAC,OAAA,CAAK,UAAU,iCACd,SAAA,CAAAJ,EAAAA,IAACW,EAAA,CAAM,UAAU,SAAA,CAAU,EAC1BF,EAAK,WACFG,GAAoBC,EAASJ,EAAK,UAAU,EAAG,CAC7C,UAAW,GACX,OAAQK,EAAA,CACT,EACD,GAAA,CAAA,CACN,CAAA,CAAA,CACF,CAAA,CAAA,EA1CKL,EAAK,EAAA,CA4Cb,EAEAvB,EAAM,SAAW,GAAK,CAACJ,GACtBkB,EAAAA,IAAC,MAAA,CAAI,UAAU,4DACZ,YAAaxC,EAAiB,OAAS,GAAKC,EACzC,QACA,QAAA,CACN,CAAA,EAEJ,EAGC0B,EAAQ5B,GACP6C,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,QAAS,IAAMP,EAAOvC,EAAO,CAAC,EAC9B,SAAUA,GAAQ,EAClB,UAAU,iJAEV,SAAA,CAAA0C,EAAAA,IAACe,EAAA,CAAY,UAAU,SAAA,CAAU,EAAE,KAAA,CAAA,CAAA,EAGrCX,EAAAA,KAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,CAAA,KACnC9C,EAAK,MAAI+B,EAAW,KACtBD,EAAU,GAAK,QAAA,EAClB,EACAgB,EAAAA,KAAC,SAAA,CACC,QAAS,IAAMP,EAAOvC,EAAO,CAAC,EAC9B,SAAU,CAAC8B,EACX,UAAU,iJACX,SAAA,CAAA,MAECY,EAAAA,IAACgB,GAAA,CAAa,UAAU,SAAA,CAAU,CAAA,CAAA,CAAA,CACpC,CAAA,CACF,CAAA,EAEJ,CAEJ"}
|