vibe-forge 0.4.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/.claude/commands/clear-attention.md +63 -63
  2. package/.claude/commands/compact-context.md +52 -0
  3. package/.claude/commands/configure-vcs.md +5 -5
  4. package/.claude/commands/forge.md +50 -3
  5. package/.claude/commands/need-help.md +77 -77
  6. package/.claude/commands/update-status.md +64 -64
  7. package/.claude/commands/worker-loop.md +106 -106
  8. package/.claude/hooks/worker-loop.js +37 -4
  9. package/.claude/scripts/setup-worker-loop.sh +45 -45
  10. package/.claude/settings.json +89 -0
  11. package/LICENSE +21 -21
  12. package/README.md +211 -232
  13. package/agents/aegis/personality.md +35 -1
  14. package/agents/anvil/personality.md +39 -1
  15. package/agents/architect/personality.md +26 -0
  16. package/agents/crucible/personality.md +54 -1
  17. package/agents/crucible-x/personality.md +210 -0
  18. package/agents/ember/personality.md +29 -1
  19. package/agents/flux/personality.md +248 -0
  20. package/agents/furnace/personality.md +52 -1
  21. package/agents/herald/personality.md +3 -1
  22. package/agents/loki/personality.md +108 -0
  23. package/agents/oracle/personality.md +284 -0
  24. package/agents/pixel/personality.md +140 -0
  25. package/agents/planning-hub/personality.md +222 -0
  26. package/agents/scribe/personality.md +3 -1
  27. package/agents/slag/personality.md +268 -0
  28. package/agents/{sentinel → temper}/personality.md +85 -9
  29. package/bin/cli.js +77 -30
  30. package/bin/dashboard/api/agents.js +333 -0
  31. package/bin/dashboard/api/dispatch.js +507 -0
  32. package/bin/dashboard/api/tasks.js +416 -0
  33. package/bin/dashboard/public/assets/index-BpHfsx1r.js +2 -0
  34. package/bin/dashboard/public/assets/index-QODv4Zn9.css +1 -0
  35. package/bin/dashboard/public/index.html +14 -0
  36. package/bin/dashboard/server.js +645 -0
  37. package/bin/forge-daemon.sh +176 -550
  38. package/bin/forge-setup.sh +28 -11
  39. package/bin/forge-spawn.sh +5 -5
  40. package/bin/forge.cmd +83 -83
  41. package/bin/forge.sh +210 -31
  42. package/config/agent-manifest.yaml +237 -243
  43. package/config/agents.json +207 -132
  44. package/config/task-types.yaml +111 -106
  45. package/context/agent-overrides/README.md +41 -0
  46. package/context/architecture.md +42 -0
  47. package/context/modern-conventions.md +129 -129
  48. package/docs/agents.md +473 -409
  49. package/docs/architecture.md +194 -162
  50. package/docs/commands.md +451 -388
  51. package/docs/security.md +195 -144
  52. package/package.json +38 -11
  53. package/src/lib/check-aliases.js +50 -0
  54. package/{bin → src}/lib/colors.sh +2 -1
  55. package/src/lib/config.sh +347 -0
  56. package/{bin → src}/lib/constants.sh +48 -13
  57. package/src/lib/daemon/budgets.sh +107 -0
  58. package/src/lib/daemon/dependencies.sh +146 -0
  59. package/src/lib/daemon/display.sh +128 -0
  60. package/src/lib/daemon/notifications.sh +273 -0
  61. package/src/lib/daemon/routing.sh +93 -0
  62. package/src/lib/daemon/state.sh +163 -0
  63. package/src/lib/daemon/sync.sh +103 -0
  64. package/{bin → src}/lib/database.sh +52 -0
  65. package/src/lib/frontmatter.js +106 -0
  66. package/src/lib/heimdall-setup.js +113 -0
  67. package/src/lib/heimdall.js +265 -0
  68. package/src/lib/index.sh +25 -0
  69. package/{bin → src}/lib/json.sh +7 -1
  70. package/{bin → src}/lib/terminal.js +7 -1
  71. package/.claude/settings.local.json +0 -33
  72. package/agents/forge-master/capabilities.md +0 -144
  73. package/agents/forge-master/context-template.md +0 -128
  74. package/agents/forge-master/personality.md +0 -138
  75. package/bin/lib/config.sh +0 -313
  76. package/config/task-template.md +0 -87
  77. package/context/forge-state.yaml +0 -19
  78. package/docs/TODO.md +0 -150
  79. package/docs/getting-started.md +0 -243
  80. package/docs/npm-publishing.md +0 -95
  81. package/docs/workflows/README.md +0 -32
  82. package/docs/workflows/azure-devops.md +0 -108
  83. package/docs/workflows/bitbucket.md +0 -104
  84. package/docs/workflows/git-only.md +0 -130
  85. package/docs/workflows/gitea.md +0 -168
  86. package/docs/workflows/github.md +0 -103
  87. package/docs/workflows/gitlab.md +0 -105
  88. package/docs/workflows.md +0 -454
  89. package/tasks/completed/ARCH-001-duplicate-agent-config.md +0 -121
  90. package/tasks/completed/ARCH-002-mixed-bash-node-implementation.md +0 -88
  91. package/tasks/completed/ARCH-003-worker-loop-hook-duplication.md +0 -77
  92. package/tasks/completed/ARCH-009-test-organization.md +0 -78
  93. package/tasks/completed/ARCH-011-jq-vs-nodejs-json.md +0 -94
  94. package/tasks/completed/ARCH-012-tmp-files-in-root.md +0 -71
  95. package/tasks/completed/ARCH-013-exit-code-constants.md +0 -65
  96. package/tasks/completed/ARCH-014-sed-incompatibility.md +0 -96
  97. package/tasks/completed/ARCH-015-docs-todo-tracking.md +0 -83
  98. package/tasks/completed/CLEAN-001.md +0 -38
  99. package/tasks/completed/CLEAN-003.md +0 -47
  100. package/tasks/completed/CLEAN-004.md +0 -56
  101. package/tasks/completed/CLEAN-005.md +0 -75
  102. package/tasks/completed/CLEAN-006.md +0 -47
  103. package/tasks/completed/CLEAN-007.md +0 -34
  104. package/tasks/completed/CLEAN-008.md +0 -49
  105. package/tasks/completed/CLEAN-012.md +0 -58
  106. package/tasks/completed/CLEAN-013.md +0 -45
  107. package/tasks/completed/SEC-001-sql-injection-fix.md +0 -58
  108. package/tasks/completed/SEC-002-notification-injection-fix.md +0 -45
  109. package/tasks/completed/SEC-003-eval-injection-fix.md +0 -54
  110. package/tasks/completed/SEC-004-pid-race-condition-fix.md +0 -49
  111. package/tasks/completed/SEC-005-worker-loop-path-fix.md +0 -51
  112. package/tasks/completed/SEC-006-eval-agent-names.md +0 -55
  113. package/tasks/completed/SEC-007-spawn-escaping.md +0 -67
  114. package/tasks/pending/ARCH-004-git-bash-detection-duplication.md +0 -72
  115. package/tasks/pending/ARCH-005-missing-src-directory.md +0 -95
  116. package/tasks/pending/ARCH-006-task-template-location.md +0 -64
  117. package/tasks/pending/ARCH-007-daemon-monolith.md +0 -91
  118. package/tasks/pending/ARCH-008-forge-master-vs-hub.md +0 -81
  119. package/tasks/pending/ARCH-010-missing-index-files.md +0 -84
  120. package/tasks/pending/CLEAN-002.md +0 -29
  121. package/tasks/pending/CLEAN-009.md +0 -31
  122. package/tasks/pending/CLEAN-010.md +0 -30
  123. package/tasks/pending/CLEAN-011.md +0 -30
  124. package/tasks/pending/CLEAN-014.md +0 -32
  125. package/tasks/review/task-001.md +0 -78
  126. /package/{bin → src}/lib/agents.sh +0 -0
  127. /package/{bin → src}/lib/util.sh +0 -0
  128. /package/{bin → src}/lib/vcs.js +0 -0
  129. /package/{context → templates}/project-context-template.md +0 -0
@@ -0,0 +1 @@
1
+ :root{--bg-primary: #0D1117;--bg-secondary: #161B22;--bg-tertiary: #21262D;--bg-hover: #30363D;--bg-active: #484F58;--border-default: #30363D;--border-muted: #21262D;--text-primary: #F0F6FC;--text-secondary: #8B949E;--text-muted: #6E7681;--text-link: #58A6FF;--accent-primary: #238636;--accent-secondary: #1F6FEB;--danger: #F85149;--warning: #D29922;--success: #3FB950;--info: #58A6FF;--agent-hub: #A371F7;--agent-anvil: #58A6FF;--agent-furnace: #F0883E;--agent-crucible: #3FB950;--agent-scribe: #56D4DD;--agent-sentinel: #D29922;--agent-ember: #F85149;--agent-architect: #DB61A2;--agent-aegis: #E3B341;--agent-pixel: #F778BA;--priority-critical: #F85149;--priority-high: #F0883E;--priority-medium: #D29922;--priority-low: #58A6FF;--issue-doc: #A371F7;--issue-test: #F85149;--issue-sec: #F85149;--issue-cov: #D29922;--issue-todo: #58A6FF;--issue-review: #F0883E;--transition-fast: .15s;--transition-normal: .2s;--transition-slow: .3s;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 20px rgba(0, 0, 0, .5);--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;--font-mono: "SF Mono", "Consolas", "Liberation Mono", Menlo, monospace;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-md: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--header-height: 60px;--footer-height: 32px;--mobile-tab-height: 56px}[data-theme=light]{--bg-primary: #FFFFFF;--bg-secondary: #F6F8FA;--bg-tertiary: #FFFFFF;--bg-hover: #F3F4F6;--bg-active: #EAEEF2;--border-default: #D0D7DE;--border-muted: #D8DEE4;--text-primary: #1F2328;--text-secondary: #656D76;--text-muted: #8C959F;--text-link: #0969DA;--accent-primary: #1A7F37;--accent-secondary: #0969DA;--danger: #CF222E;--warning: #9A6700;--success: #1A7F37;--info: #0969DA;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 20px rgba(0, 0, 0, .15)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--font-sans);font-size:var(--font-size-md);line-height:1.5;color:var(--text-primary);background-color:var(--bg-primary);min-height:100vh;display:flex;flex-direction:column;overflow-x:hidden}#app{display:flex;flex-direction:column;min-height:100vh}body,.panel,.header,.footer,.modal-content,.card,.btn{transition:background-color var(--transition-normal) ease,color var(--transition-normal) ease,border-color var(--transition-normal) ease}.skip-link{position:absolute;top:-100px;left:0;background:var(--accent-secondary);color:var(--text-primary);padding:var(--spacing-sm) var(--spacing-md);z-index:1000;text-decoration:none;border-radius:var(--radius-sm)}.skip-link:focus{top:var(--spacing-sm);left:var(--spacing-sm)}.connection-banner{position:fixed;top:0;left:0;right:0;background:var(--warning);color:#000;padding:var(--spacing-sm) var(--spacing-md);display:flex;align-items:center;justify-content:center;gap:var(--spacing-md);z-index:1000;font-weight:500}.banner-icon{width:24px;height:24px;background:#000;color:var(--warning);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700}.banner-retry{background:#0003;border:1px solid rgba(0,0,0,.3);color:#000;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-sm);cursor:pointer;font-weight:500}.banner-retry:hover{background:#0000004d}.header{position:sticky;top:0;height:var(--header-height);background:var(--bg-secondary);border-bottom:1px solid var(--border-default);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);z-index:100}.header-left{display:flex;align-items:center}.logo-btn{display:flex;align-items:center;gap:var(--spacing-sm);background:none;border:none;color:var(--text-primary);cursor:pointer;padding:var(--spacing-sm);border-radius:var(--radius-sm)}.logo-btn:hover{background:var(--bg-hover)}.logo-btn:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.logo-icon{font-size:1.5rem}.logo-text{font-size:var(--font-size-lg);font-weight:600;letter-spacing:.5px}.header-right{display:flex;align-items:center;gap:var(--spacing-sm)}.header-btn{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-sm)}.header-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.header-btn:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.header-btn .icon{width:20px;height:20px}[data-theme=dark] .sun-icon{display:block}[data-theme=dark] .moon-icon,[data-theme=light] .sun-icon{display:none}[data-theme=light] .moon-icon{display:block}#theme-toggle{transition:transform var(--transition-normal) ease}#theme-toggle:active{transform:rotate(180deg)}#voice-toggle{transition:color var(--transition-normal) ease}#voice-toggle.active{color:var(--accent-secondary)}#voice-toggle.speaking{color:var(--accent-primary);animation:voice-pulse 1s ease-in-out infinite}@keyframes voice-pulse{0%,to{opacity:1}50%{opacity:.4}}.main{flex:1;padding:var(--spacing-lg);display:flex;flex-direction:column;gap:var(--spacing-lg);max-width:1800px;margin:0 auto;width:100%;min-height:calc(100vh - var(--header-height) - var(--footer-height))}.panels-top{display:grid;grid-template-columns:4fr 3fr 3fr;gap:var(--spacing-lg);flex:.6;min-height:0}.panels-bottom{display:grid;grid-template-columns:3fr 2fr;gap:var(--spacing-lg);flex:.4;min-height:0}.panel{background:var(--bg-secondary);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;flex-direction:column;overflow:hidden}.panel:focus{outline:none}.panel:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md);border-bottom:1px solid var(--border-muted);flex-shrink:0}.panel-title{font-size:var(--font-size-sm);font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-primary)}.panel-subtitle{font-weight:400;color:var(--text-muted);text-transform:none}.panel-actions{display:flex;align-items:center;gap:var(--spacing-xs)}.panel-refresh,.panel-collapse,.panel-clear{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-sm)}.panel-clear{width:auto;padding:0 var(--spacing-sm);font-size:var(--font-size-xs)}.panel-refresh:hover,.panel-collapse:hover,.panel-clear:hover{background:var(--bg-hover);color:var(--text-primary)}.panel-refresh:focus-visible,.panel-collapse:focus-visible,.panel-clear:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.panel-refresh .icon,.panel-collapse .icon{width:16px;height:16px}.panel-refresh.loading .icon{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.panel-content{flex:1;overflow-y:auto;padding:var(--spacing-md);display:flex;flex-direction:column;gap:var(--spacing-sm)}.issues-panel{flex:.4}.issues-panel.collapsed .panel-content,.issues-panel.collapsed .empty-state,.issues-panel.collapsed .loading-state,.issues-panel.collapsed .error-state{display:none}.issues-panel.collapsed{flex:0}.issues-panel .panel-collapse .icon{transition:transform var(--transition-normal) ease}.issues-panel.collapsed .panel-collapse .icon{transform:rotate(180deg)}.tasks-filters{display:flex;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid var(--border-muted);flex-shrink:0;overflow-x:auto}.filter-tab{padding:var(--spacing-xs) var(--spacing-sm);background:none;border:none;color:var(--text-secondary);font-size:var(--font-size-sm);cursor:pointer;border-radius:var(--radius-sm);white-space:nowrap;display:flex;align-items:center;gap:var(--spacing-xs)}.filter-tab:hover{background:var(--bg-hover);color:var(--text-primary)}.filter-tab:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.filter-tab.active{background:var(--bg-tertiary);color:var(--text-primary);font-weight:500}.filter-count{background:var(--bg-hover);padding:2px 6px;border-radius:10px;font-size:var(--font-size-xs);min-width:20px;text-align:center}.filter-tab.active .filter-count{background:var(--accent-secondary);color:#fff}.card{background:var(--bg-tertiary);border:1px solid var(--border-muted);border-radius:var(--radius-md);padding:var(--spacing-md);cursor:pointer;transition:background var(--transition-fast) ease,border-color var(--transition-fast) ease,transform var(--transition-fast) ease}.card:hover{background:var(--bg-hover);border-color:var(--border-default)}.card:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.card.selected{border-color:var(--accent-secondary);background:var(--bg-hover)}.task-card{display:flex;flex-direction:column;gap:var(--spacing-sm)}.task-card-header{display:flex;align-items:center;gap:var(--spacing-sm)}.priority-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.priority-dot.critical{background:var(--priority-critical)}.priority-dot.high{background:var(--priority-high)}.priority-dot.medium{background:var(--priority-medium)}.priority-dot.low{background:var(--priority-low)}.task-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-muted)}.task-title{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-meta{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-xs);color:var(--text-muted)}.task-agent{display:flex;align-items:center;gap:var(--spacing-xs)}.agent-badge{padding:2px 6px;border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:500}.agent-badge.hub{background:#a371f733;color:var(--agent-hub)}.agent-badge.anvil{background:#58a6ff33;color:var(--agent-anvil)}.agent-badge.furnace{background:#f0883e33;color:var(--agent-furnace)}.agent-badge.crucible{background:#3fb95033;color:var(--agent-crucible)}.agent-badge.scribe{background:#56d4dd33;color:var(--agent-scribe)}.agent-badge.sentinel{background:#d2992233;color:var(--agent-sentinel)}.agent-badge.ember{background:#f8514933;color:var(--agent-ember)}.agent-badge.architect{background:#db61a233;color:var(--agent-architect)}.agent-badge.aegis{background:#e3b34133;color:var(--agent-aegis)}.agent-badge.pixel{background:#f778ba33;color:var(--agent-pixel)}.task-card.expanded{background:var(--bg-hover)}.task-expanded-content{margin-top:var(--spacing-sm);padding-top:var(--spacing-sm);border-top:1px solid var(--border-muted);display:none}.task-card.expanded .task-expanded-content{display:block}.task-description{font-size:var(--font-size-sm);color:var(--text-secondary);margin-bottom:var(--spacing-sm)}.task-actions{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-sm)}.agent-card{display:flex;align-items:flex-start;gap:var(--spacing-md)}.agent-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:var(--font-size-md);flex-shrink:0}.agent-avatar.hub{background:#a371f733;color:var(--agent-hub)}.agent-avatar.anvil{background:#58a6ff33;color:var(--agent-anvil)}.agent-avatar.furnace{background:#f0883e33;color:var(--agent-furnace)}.agent-avatar.crucible{background:#3fb95033;color:var(--agent-crucible)}.agent-avatar.scribe{background:#56d4dd33;color:var(--agent-scribe)}.agent-avatar.sentinel{background:#d2992233;color:var(--agent-sentinel)}.agent-avatar.ember{background:#f8514933;color:var(--agent-ember)}.agent-avatar.architect{background:#db61a233;color:var(--agent-architect)}.agent-avatar.aegis{background:#e3b34133;color:var(--agent-aegis)}.agent-avatar.pixel{background:#f778ba33;color:var(--agent-pixel)}.agent-info{flex:1;min-width:0}.agent-name{font-weight:600;font-size:var(--font-size-sm);color:var(--text-primary)}.agent-status{display:flex;align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:2px}.status-indicator{width:8px;height:8px;border-radius:50%}.status-indicator.idle{background:var(--success)}.status-indicator.working{background:var(--info);animation:pulse 2s infinite}.status-indicator.blocked{background:var(--warning)}.status-indicator.error{background:var(--danger)}.status-indicator.offline{background:var(--text-muted)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.agent-task{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-muted);margin-top:var(--spacing-xs)}.agent-progress{margin-top:var(--spacing-xs);height:4px;background:var(--bg-primary);border-radius:2px;overflow:hidden}.agent-progress-bar{height:100%;background:var(--info);border-radius:2px;transition:width var(--transition-normal) ease}.notification-card{display:flex;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md)}.notification-icon{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);flex-shrink:0}.notification-icon.success{background:#3fb95033;color:var(--success)}.notification-icon.info{background:#58a6ff33;color:var(--info)}.notification-icon.warning{background:#d2992233;color:var(--warning)}.notification-icon.attention{background:#f0883e33;color:var(--agent-furnace)}.notification-icon.error{background:#f8514933;color:var(--danger)}.notification-content{flex:1;min-width:0}.notification-title{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.notification-desc{font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:2px}.notification-time{font-size:var(--font-size-xs);color:var(--text-muted);margin-top:var(--spacing-xs)}.notification-actions{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-sm)}.notification-dismiss{background:none;border:none;color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm)}.notification-dismiss:hover{background:var(--bg-hover);color:var(--text-secondary)}.notification-group-header{font-size:var(--font-size-xs);font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;padding:var(--spacing-xs) 0;margin-top:var(--spacing-sm)}.notification-group-header:first-child{margin-top:0}.issue-card{display:flex;align-items:flex-start;gap:var(--spacing-md);padding:var(--spacing-md)}.issue-category{width:40px;height:40px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:var(--font-size-md);flex-shrink:0}.issue-category.doc{background:#a371f733;color:var(--issue-doc)}.issue-category.test,.issue-category.sec{background:#f8514933;color:var(--issue-test)}.issue-category.cov{background:#d2992233;color:var(--issue-cov)}.issue-category.todo{background:#58a6ff33;color:var(--issue-todo)}.issue-category.review{background:#f0883e33;color:var(--issue-review)}.issue-content{flex:1;min-width:0}.issue-header{display:flex;align-items:center;gap:var(--spacing-sm)}.issue-badge{font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;padding:2px 6px;border-radius:var(--radius-sm)}.issue-badge.doc{background:#a371f733;color:var(--issue-doc)}.issue-badge.test{background:#f8514933;color:var(--issue-test)}.issue-badge.sec{background:#f8514933;color:var(--issue-sec)}.issue-badge.cov{background:#d2992233;color:var(--issue-cov)}.issue-badge.todo{background:#58a6ff33;color:var(--issue-todo)}.issue-badge.review{background:#f0883e33;color:var(--issue-review)}.issue-title{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.issue-details{font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:var(--spacing-xs)}.issue-meta{font-size:var(--font-size-xs);color:var(--text-muted);margin-top:var(--spacing-xs)}.issue-dispatch{flex-shrink:0}.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);font-weight:500;border-radius:var(--radius-sm);cursor:pointer;border:1px solid transparent;transition:background var(--transition-fast) ease,border-color var(--transition-fast) ease,color var(--transition-fast) ease}.btn:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent-primary);color:#fff;border-color:var(--accent-primary)}.btn-primary:hover:not(:disabled){background:#2ea043;border-color:#2ea043}.btn-secondary{background:var(--bg-tertiary);color:var(--text-primary);border-color:var(--border-default)}.btn-secondary:hover:not(:disabled){background:var(--bg-hover);border-color:var(--text-muted)}.btn-dispatch{background:transparent;color:var(--accent-secondary);border-color:var(--accent-secondary);padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs)}.btn-dispatch:hover:not(:disabled){background:var(--accent-secondary);color:#fff}.btn-dispatch .btn-arrow{transition:transform var(--transition-fast) ease}.btn-dispatch:hover .btn-arrow{transform:translate(2px)}.btn-spinner{width:14px;height:14px;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:spin .8s linear infinite}.btn.loading .btn-text{visibility:hidden}.btn.loading .btn-spinner{display:block;position:absolute}.empty-state,.loading-state,.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--spacing-xl);text-align:center}.empty-icon,.error-icon{font-size:2.5rem;margin-bottom:var(--spacing-md);opacity:.7}.error-icon{width:48px;height:48px;background:#f8514933;color:var(--danger);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700}.empty-title,.error-title{font-size:var(--font-size-md);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-xs)}.empty-subtitle{font-size:var(--font-size-sm);color:var(--text-secondary)}.error-message{font-size:var(--font-size-sm);color:var(--text-muted);margin-bottom:var(--spacing-md)}.empty-state.celebration .empty-icon{animation:bounce 1s ease infinite}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.skeleton-card,.skeleton-issue{background:linear-gradient(90deg,var(--bg-tertiary) 25%,var(--bg-hover) 50%,var(--bg-tertiary) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:var(--radius-md)}.skeleton-card{height:80px}.skeleton-issue{height:100px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.footer{height:var(--footer-height);background:var(--bg-secondary);border-top:1px solid var(--border-default);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);font-size:var(--font-size-xs);color:var(--text-muted)}.footer-left,.footer-right{display:flex;align-items:center;gap:var(--spacing-sm)}.connection-status{display:flex;align-items:center;gap:var(--spacing-xs)}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--danger)}.status-dot.connected{background:var(--success);animation:pulse 2s infinite}.status-dot.disconnected{background:var(--danger)}.separator{color:var(--border-default)}.keyboard-help-btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:var(--bg-tertiary);border:1px solid var(--border-default);color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--font-size-xs);font-weight:600}.keyboard-help-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.keyboard-help-btn:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:var(--spacing-lg)}.modal-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000080;animation:fadeIn var(--transition-normal) ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{position:relative;background:var(--bg-secondary);border:1px solid var(--border-default);border-radius:var(--radius-lg);max-width:500px;width:100%;max-height:90vh;overflow:auto;animation:slideIn var(--transition-normal) ease;box-shadow:var(--shadow-lg)}@keyframes slideIn{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-muted)}.modal-title{font-size:var(--font-size-lg);font-weight:600;color:var(--text-primary)}.modal-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-muted);font-size:1.5rem;cursor:pointer;border-radius:var(--radius-sm)}.modal-close:hover{background:var(--bg-hover);color:var(--text-primary)}.modal-close:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.modal-body{padding:var(--spacing-lg)}.modal-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-muted)}.modal-error{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-lg);background:#f851491a;color:var(--danger);font-size:var(--font-size-sm)}.modal-error .error-icon{width:20px;height:20px;font-size:var(--font-size-xs);margin-bottom:0}.dispatch-info{background:var(--bg-tertiary);border-radius:var(--radius-md);padding:var(--spacing-md);margin-bottom:var(--spacing-md)}.info-row{display:flex;gap:var(--spacing-sm);margin-bottom:var(--spacing-xs)}.info-row:last-child{margin-bottom:0}.info-label{font-size:var(--font-size-sm);color:var(--text-muted);min-width:60px}.info-value{font-size:var(--font-size-sm);color:var(--text-primary)}.dispatch-preview{margin-top:var(--spacing-md)}.preview-label{font-size:var(--font-size-sm);color:var(--text-secondary);margin-bottom:var(--spacing-sm)}.task-preview{background:var(--bg-tertiary);border:1px solid var(--border-default);border-radius:var(--radius-md);padding:var(--spacing-md)}.preview-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-muted);margin-bottom:var(--spacing-xs)}.preview-title{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary);margin-bottom:var(--spacing-sm)}.preview-meta{display:flex;gap:var(--spacing-md);font-size:var(--font-size-xs);color:var(--text-secondary)}.preview-meta strong{color:var(--text-primary)}.keyboard-help{max-width:550px}.shortcut-section{margin-bottom:var(--spacing-lg)}.shortcut-section:last-child{margin-bottom:0}.shortcut-section h4{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm);padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--border-muted)}.shortcut-list{display:flex;flex-direction:column;gap:var(--spacing-sm)}.shortcut{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-sm);color:var(--text-secondary)}.shortcut span{flex:1}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 var(--spacing-xs);background:var(--bg-tertiary);border:1px solid var(--border-default);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-primary);box-shadow:0 1px 0 var(--border-default)}.toast-container{position:fixed;bottom:calc(var(--footer-height) + var(--spacing-md));right:var(--spacing-md);display:flex;flex-direction:column;gap:var(--spacing-sm);z-index:1001;max-width:400px}.toast{background:var(--bg-secondary);border:1px solid var(--border-default);border-radius:var(--radius-md);padding:var(--spacing-md);display:flex;align-items:flex-start;gap:var(--spacing-sm);box-shadow:var(--shadow-lg);animation:slideInRight var(--transition-normal) ease}@keyframes slideInRight{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.toast.removing{animation:slideOutRight var(--transition-normal) ease forwards}@keyframes slideOutRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.toast-icon{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);flex-shrink:0}.toast.success .toast-icon{background:#3fb95033;color:var(--success)}.toast.error .toast-icon{background:#f8514933;color:var(--danger)}.toast.info .toast-icon{background:#58a6ff33;color:var(--info)}.toast.warning .toast-icon{background:#d2992233;color:var(--warning)}.toast-content{flex:1}.toast-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary)}.toast-message{font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:2px}.toast-actions{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-sm)}.toast-action{background:none;border:none;color:var(--text-link);font-size:var(--font-size-xs);cursor:pointer;padding:0}.toast-action:hover{text-decoration:underline}.toast-close{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);font-size:var(--font-size-md)}.toast-close:hover{background:var(--bg-hover);color:var(--text-primary)}.mobile-tabs{display:none;position:fixed;bottom:0;left:0;right:0;height:var(--mobile-tab-height);background:var(--bg-secondary);border-top:1px solid var(--border-default);z-index:100}.mobile-tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:none;border:none;color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;padding:var(--spacing-xs)}.mobile-tab:hover{color:var(--text-secondary)}.mobile-tab.active{color:var(--accent-secondary)}.mobile-tab:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:-2px}.tab-icon{width:20px;height:20px}@media (max-width: 1199px){.panels-top{grid-template-columns:1fr 1fr}.notifications-panel{grid-column:span 2}.logo-text{font-size:var(--font-size-md)}}@media (max-width: 767px){:root{--spacing-lg: 16px}.header{padding:0 var(--spacing-md)}.logo-text{display:none}.main{padding:var(--spacing-md);padding-bottom:calc(var(--mobile-tab-height) + var(--spacing-md))}.panels-top{display:flex;flex-direction:column}.panel{display:none}.panel.mobile-active{display:flex;flex:1}.issues-panel{display:flex;flex:none;max-height:300px}.issues-panel.mobile-active{flex:1;max-height:none}.mobile-tabs{display:flex}.footer{display:none}.toast-container{bottom:calc(var(--mobile-tab-height) + var(--spacing-md));left:var(--spacing-md);right:var(--spacing-md);max-width:none}.modal-content{margin:var(--spacing-md);max-height:calc(100vh - var(--spacing-xl) * 2)}.shortcut{flex-wrap:wrap}.shortcut kbd{margin-right:var(--spacing-xs)}}@media (max-width: 374px){.filter-tab{padding:var(--spacing-xs);font-size:var(--font-size-xs)}.filter-count{display:none}.filter-tab.active .filter-count{display:inline-block}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:focus:not(:focus-visible){outline:none}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--border-default);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}::selection{background:var(--accent-secondary);color:#fff}@media print{.header,.footer,.mobile-tabs,.modal,.toast-container{display:none!important}.main{padding:0}.panel{break-inside:avoid}}.activity-panel.svelte-93r9wd{display:flex;flex-direction:column;height:100%}.activity-list.svelte-93r9wd{overflow-y:auto;flex:1}.activity-event.svelte-93r9wd{display:flex;align-items:center;gap:.5rem;padding:.4rem .75rem;border-bottom:1px solid var(--border-subtle, rgba(255,255,255,.06));font-size:.8rem}.activity-icon.svelte-93r9wd{flex-shrink:0;width:1.2rem;text-align:center}.activity-agent.svelte-93r9wd{font-weight:600;color:var(--text-primary, #e0e0e0);min-width:5rem}.activity-status.svelte-93r9wd{color:var(--text-secondary, #999)}.activity-task.svelte-93r9wd{color:var(--accent, #ff6b35);font-family:monospace;font-size:.75rem}.activity-time.svelte-93r9wd{margin-left:auto;color:var(--text-muted, #666);font-size:.7rem;white-space:nowrap}.hidden.svelte-p4t6ev{visibility:hidden}
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-theme="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>&#x1F525;</text></svg>">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Vibe Forge Dashboard</title>
8
+ <script type="module" crossorigin src="/assets/index-BpHfsx1r.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-QODv4Zn9.css">
10
+ </head>
11
+ <body>
12
+ <div id="app"></div>
13
+ </body>
14
+ </html>