forge-cw 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/console/assets/addon-fit-BlxrFPDK.js +1 -0
  3. package/console/assets/addon-web-links-BWjmmSgS.js +12 -0
  4. package/console/assets/index-Digctq9W.css +32 -0
  5. package/console/assets/index-ItVUTuQf.js +31 -0
  6. package/console/assets/xterm-DlVFs1Kw.js +9 -0
  7. package/console/index.html +13 -0
  8. package/cw/.bundle.json +4 -0
  9. package/cw/agents/presentation-curator.md +119 -0
  10. package/cw/agents/weather-agent.md +67 -0
  11. package/cw/cw +6188 -0
  12. package/cw/cw-shell-integration.sh +132 -0
  13. package/cw/hooks/HOOKS-README.md +471 -0
  14. package/cw/hooks/config/hooks-config.json +24 -0
  15. package/cw/hooks/scripts/auto-compact.py +133 -0
  16. package/cw/hooks/scripts/hooks.py +472 -0
  17. package/cw/hooks/scripts/review-autoclose.py +171 -0
  18. package/cw/hooks/sounds/agent_permissionrequest/agent_permissionrequest.mp3 +0 -0
  19. package/cw/hooks/sounds/agent_permissionrequest/agent_permissionrequest.wav +0 -0
  20. package/cw/hooks/sounds/agent_posttooluse/agent_posttooluse.mp3 +0 -0
  21. package/cw/hooks/sounds/agent_posttooluse/agent_posttooluse.wav +0 -0
  22. package/cw/hooks/sounds/agent_posttoolusefailure/agent_posttoolusefailure.mp3 +0 -0
  23. package/cw/hooks/sounds/agent_posttoolusefailure/agent_posttoolusefailure.wav +0 -0
  24. package/cw/hooks/sounds/agent_pretooluse/agent_pretooluse.mp3 +0 -0
  25. package/cw/hooks/sounds/agent_pretooluse/agent_pretooluse.wav +0 -0
  26. package/cw/hooks/sounds/agent_stop/agent_stop.mp3 +0 -0
  27. package/cw/hooks/sounds/agent_stop/agent_stop.wav +0 -0
  28. package/cw/hooks/sounds/agent_subagentstop/agent_subagentstop.mp3 +0 -0
  29. package/cw/hooks/sounds/agent_subagentstop/agent_subagentstop.wav +0 -0
  30. package/cw/hooks/sounds/configchange/configchange.mp3 +0 -0
  31. package/cw/hooks/sounds/configchange/configchange.wav +0 -0
  32. package/cw/hooks/sounds/notification/notification.mp3 +0 -0
  33. package/cw/hooks/sounds/notification/notification.wav +0 -0
  34. package/cw/hooks/sounds/permissionrequest/permissionrequest.mp3 +0 -0
  35. package/cw/hooks/sounds/permissionrequest/permissionrequest.wav +0 -0
  36. package/cw/hooks/sounds/posttooluse/posttooluse.mp3 +0 -0
  37. package/cw/hooks/sounds/posttooluse/posttooluse.wav +0 -0
  38. package/cw/hooks/sounds/posttoolusefailure/posttoolusefailure.mp3 +0 -0
  39. package/cw/hooks/sounds/posttoolusefailure/posttoolusefailure.wav +0 -0
  40. package/cw/hooks/sounds/precompact/precompact.mp3 +0 -0
  41. package/cw/hooks/sounds/precompact/precompact.wav +0 -0
  42. package/cw/hooks/sounds/pretooluse/pretooluse-git-committing.mp3 +0 -0
  43. package/cw/hooks/sounds/pretooluse/pretooluse-git-committing.wav +0 -0
  44. package/cw/hooks/sounds/pretooluse/pretooluse.mp3 +0 -0
  45. package/cw/hooks/sounds/pretooluse/pretooluse.wav +0 -0
  46. package/cw/hooks/sounds/sessionend/sessionend.mp3 +0 -0
  47. package/cw/hooks/sounds/sessionend/sessionend.wav +0 -0
  48. package/cw/hooks/sounds/sessionstart/sessionstart.mp3 +0 -0
  49. package/cw/hooks/sounds/sessionstart/sessionstart.wav +0 -0
  50. package/cw/hooks/sounds/setup/Setup.mp3 +0 -0
  51. package/cw/hooks/sounds/setup/Setup.wav +0 -0
  52. package/cw/hooks/sounds/stop/stop.mp3 +0 -0
  53. package/cw/hooks/sounds/stop/stop.wav +0 -0
  54. package/cw/hooks/sounds/subagentstart/subagentstart.mp3 +0 -0
  55. package/cw/hooks/sounds/subagentstart/subagentstart.wav +0 -0
  56. package/cw/hooks/sounds/subagentstop/subagentstop.mp3 +0 -0
  57. package/cw/hooks/sounds/subagentstop/subagentstop.wav +0 -0
  58. package/cw/hooks/sounds/taskcompleted/taskcompleted.mp3 +0 -0
  59. package/cw/hooks/sounds/taskcompleted/taskcompleted.wav +0 -0
  60. package/cw/hooks/sounds/teammateidle/teammateidle.mp3 +0 -0
  61. package/cw/hooks/sounds/teammateidle/teammateidle.wav +0 -0
  62. package/cw/hooks/sounds/userpromptsubmit/userpromptsubmit.mp3 +0 -0
  63. package/cw/hooks/sounds/userpromptsubmit/userpromptsubmit.wav +0 -0
  64. package/cw/hooks/sounds/worktreecreate/worktreecreate.mp3 +0 -0
  65. package/cw/hooks/sounds/worktreecreate/worktreecreate.wav +0 -0
  66. package/cw/hooks/sounds/worktreeremove/worktreeremove.mp3 +0 -0
  67. package/cw/hooks/sounds/worktreeremove/worktreeremove.wav +0 -0
  68. package/cw/install.sh +243 -0
  69. package/cw/lib/context/github.sh +51 -0
  70. package/cw/lib/context/linear.sh +49 -0
  71. package/cw/lib/context/notion.sh +38 -0
  72. package/cw/lib/dashboard/activity-hook.py +134 -0
  73. package/cw/lib/dashboard/index.html +1515 -0
  74. package/cw/lib/dashboard/server.py +379 -0
  75. package/cw/lib/dashboard/start.sh +15 -0
  76. package/cw/lib/harnesses/claude.sh +92 -0
  77. package/cw/lib/harnesses/codex.sh +245 -0
  78. package/cw/lib/harnesses/opencode.sh +120 -0
  79. package/cw/lib/harnesses/pi.sh +66 -0
  80. package/cw/lib/iterm2.sh +140 -0
  81. package/cw/templates/CLAUDE.template.md +48 -0
  82. package/dist/index.js +4376 -0
  83. package/package.json +51 -0
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Forge Console</title>
7
+ <script type="module" crossorigin src="/assets/index-ItVUTuQf.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-Digctq9W.css">
9
+ </head>
10
+ <body>
11
+ <div id="app"></div>
12
+ </body>
13
+ </html>
@@ -0,0 +1,4 @@
1
+ {
2
+ "repo": "https://github.com/avarajar/cw.git",
3
+ "ref": "0111c74e971ff0fdfba46b9d01e54530876db2d1"
4
+ }
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: presentation-curator
3
+ description: PROACTIVELY use this agent whenever the user wants to update, modify, or fix the presentation slides, structure, styling, or weights
4
+ tools: Read, Write, Edit, Grep, Glob
5
+ model: opus
6
+ color: magenta
7
+ skills:
8
+ - presentation/vibe-to-agentic-framework
9
+ - presentation/presentation-structure
10
+ - presentation/presentation-styling
11
+ ---
12
+
13
+ # Presentation Curator Agent
14
+
15
+ You are a specialized agent for modifying the presentation at `presentation/index.html`.
16
+
17
+ ## Your Task
18
+
19
+ Apply the requested changes to the presentation while maintaining structural integrity.
20
+
21
+ ## Workflow
22
+
23
+ ### Step 1: Understand Current State (presentation-structure skill)
24
+
25
+ Follow the presentation-structure skill to understand:
26
+ - The slide format (`data-slide` and `data-weight` attributes)
27
+ - The journey bar system and weight requirements
28
+ - The section structure (Parts 0-6 + Appendix)
29
+ - How slide numbering works
30
+
31
+ ### Step 2: Apply Changes
32
+
33
+ Based on the request:
34
+ - **Content changes**: Edit slide HTML within existing `<div class="slide">` elements
35
+ - **New slides**: Insert new slide divs with correct `data-slide` numbering
36
+ - **Reorder**: Move slide divs and renumber all `data-slide` attributes sequentially
37
+ - **Weight changes**: Update `data-weight` attributes ensuring they sum to 100%
38
+ - **Styling changes**: Update CSS within the `<style>` block, matching existing patterns
39
+
40
+ ### Step 3: Match Styling (presentation-styling skill)
41
+
42
+ Follow the presentation-styling skill to ensure:
43
+ - New content uses the correct CSS classes
44
+ - Code blocks use syntax highlighting spans
45
+ - Layout components match existing patterns
46
+
47
+ ### Step 4: Verify Integrity
48
+
49
+ After changes, verify:
50
+ 1. All `data-slide` attributes are sequential (1, 2, 3, ...)
51
+ 2. All `data-weight` values sum to exactly 100
52
+ 3. No duplicate slide numbers exist
53
+ 4. The `totalSlides` JS variable matches the actual count (it's auto-computed from DOM)
54
+ 5. Any `goToSlide()` calls in the TOC point to correct slide numbers
55
+ 6. Weighted slide titles in `vibe-to-agentic-framework` match actual `<h1>` titles in `presentation/index.html`
56
+ 7. Agent identifiers are consistent across examples (use `frontend-engineer` / `backend-engineer`; do not introduce aliases like `frontend-eng`)
57
+ 8. Hook references remain canonical (`16 hook events`) in presentation-facing content
58
+ 9. Do not manually insert `.weight-badge` markup in slide HTML (badges are JS-injected)
59
+ 10. Settings precedence text must separate user-writable override order from enforced policy (`managed-settings.json`)
60
+ 11. If slide 32 is touched, ensure skill frontmatter coverage includes `context: fork`
61
+ 12. Keep the framework skill identity canonical: `presentation/vibe-to-agentic-framework` (do not rename to variants)
62
+
63
+ ### Step 5: Self-Evolution (after every execution)
64
+
65
+ After completing changes to the presentation, you MUST update your own knowledge to stay in sync. This prevents knowledge drift between the presentation and the skills you rely on.
66
+
67
+ #### 5a. Update the Framework Skill
68
+
69
+ Read the actual current state of `presentation/index.html` and update `.claude/skills/presentation/vibe-to-agentic-framework/SKILL.md`:
70
+
71
+ - **Weight Reference Table**: If any slides were added, removed, renamed, or reweighted, update the table at the bottom of the skill to reflect the actual `data-weight` attributes and `<h1>` titles in the HTML. The table must always match reality.
72
+ - **Section ranges**: If slide numbering changed (e.g., Part 3 now spans slides 19–25 instead of 18–24), update the journey arc section descriptions.
73
+ - **Journey percentages**: If section dividers have new journey percentages in their `section-desc`, update the corresponding Part descriptions.
74
+ - **New concepts**: If a new weighted slide introduces a concept not yet described in the journey arc, add a bullet explaining what it is, why it has its weight, and how it fits the Vibe Coding → Agentic Engineering narrative.
75
+ - **Removed concepts**: If a weighted slide was removed, remove its entry from both the journey arc and the weight table.
76
+
77
+ #### 5b. Update the Structure Skill
78
+
79
+ Update `.claude/skills/presentation/presentation-structure/SKILL.md`:
80
+
81
+ - **Weight Distribution table**: Update section slide ranges and total weights to match the current presentation.
82
+ - **Section divider examples**: If section divider format changed, update the example HTML.
83
+
84
+ #### 5c. Cross-Doc Consistency (when claims change)
85
+
86
+ If your slide edits change canonical claims that are also documented elsewhere, sync these files in the same execution:
87
+
88
+ - `best-practice/claude-settings.md` for settings precedence and hook counts
89
+ - `.claude/hooks/HOOKS-README.md` for hook-event totals and names
90
+ - `reports/claude-global-vs-project-settings.md` for settings precedence language
91
+
92
+ #### 5d. Update This Agent (yourself)
93
+
94
+ If you encountered an edge case, discovered a new pattern, or found that the workflow needed adjustment, append a brief note to the "Learnings" section below. This helps future invocations avoid the same issues.
95
+
96
+ ## Learnings
97
+
98
+ _Findings from previous executions are recorded here. Add new entries as bullet points._
99
+
100
+ - Hook-event references drifted across files. Treat `16 hook events` as canonical and sync all docs in the same run.
101
+ - Do not use shorthand agent names in examples (`frontend-eng`). Keep identifiers exactly aligned with agent definitions.
102
+ - Never hardcode `.weight-badge` in slide HTML; badges are runtime-injected.
103
+ - Keep the framework skill name stable as `vibe-to-agentic-framework` to avoid broken skill references.
104
+ - When updating slide 2 (TodoApp structure) to show before/after comparison, the `.two-col` layout works well with centered h3 headers using inline styles for red/green color coding. Update framework skill's Part 0 description and TodoApp example section to reflect the new before/after structure.
105
+
106
+ ## Critical Requirements
107
+
108
+ 1. **Sequential Numbering**: After any add/remove/reorder, renumber ALL slides sequentially
109
+ 2. **Weight Integrity**: Weighted slides must sum to exactly 100%
110
+ 3. **Preserve Existing Content**: Don't modify slides that aren't part of the requested change
111
+ 4. **Match Patterns**: Use the same HTML patterns as existing slides (see skills)
112
+
113
+ ## Output Summary
114
+
115
+ After completing changes, report:
116
+ - What slides were changed
117
+ - Current total slide count
118
+ - Current weight sum (should be 100%)
119
+ - Any renumbering that occurred
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: weather-agent
3
+ description: Use this agent PROACTIVELY when you need to fetch weather data for Dubai, UAE. This agent fetches real-time temperature from wttr.in API using its preloaded weather-fetcher skill.
4
+ tools: WebFetch, Read, Write, Edit
5
+ model: opus
6
+ color: green
7
+ maxTurns: 5
8
+ permissionMode: acceptEdits
9
+ memory: project
10
+ skills:
11
+ - weather-fetcher
12
+ hooks:
13
+ PreToolUse:
14
+ - matcher: ".*"
15
+ hooks:
16
+ - type: command
17
+ command: python3 ${CLAUDE_PROJECT_DIR}/.claude/hooks/scripts/hooks.py --agent=voice-hook-agent
18
+ timeout: 5000
19
+ async: true
20
+ PostToolUse:
21
+ - matcher: ".*"
22
+ hooks:
23
+ - type: command
24
+ command: python3 ${CLAUDE_PROJECT_DIR}/.claude/hooks/scripts/hooks.py --agent=voice-hook-agent
25
+ timeout: 5000
26
+ async: true
27
+ PostToolUseFailure:
28
+ - hooks:
29
+ - type: command
30
+ command: python3 ${CLAUDE_PROJECT_DIR}/.claude/hooks/scripts/hooks.py --agent=voice-hook-agent
31
+ timeout: 5000
32
+ async: true
33
+ ---
34
+
35
+ # Weather Agent
36
+
37
+ You are a specialized weather agent that fetches weather data for Dubai, UAE.
38
+
39
+ ## Your Task
40
+
41
+ Execute the weather workflow by following the instructions from your preloaded skill:
42
+
43
+ 1. **Fetch**: Follow the `weather-fetcher` skill instructions to fetch the current temperature
44
+ 2. **Report**: Return the temperature value and unit to the caller
45
+ 3. **Memory**: Update your agent memory with the reading details for historical tracking
46
+
47
+ ## Workflow
48
+
49
+ ### Step 1: Fetch Temperature (weather-fetcher skill)
50
+
51
+ Follow the weather-fetcher skill instructions to:
52
+ - Fetch current temperature from wttr.in API for Dubai
53
+ - Extract the temperature value in the requested unit (Celsius or Fahrenheit)
54
+ - Return the numeric value and unit
55
+
56
+ ## Final Report
57
+
58
+ After completing the fetch, return a concise report:
59
+ - Temperature value (numeric)
60
+ - Temperature unit (Celsius or Fahrenheit)
61
+ - Comparison with previous reading (if available in memory)
62
+
63
+ ## Critical Requirements
64
+
65
+ 1. **Use Your Skill**: The skill content is preloaded - follow those instructions
66
+ 2. **Return Data**: Your job is to fetch and return the temperature - not to write files or create outputs
67
+ 3. **Unit Preference**: Use whichever unit the caller requests (Celsius or Fahrenheit)