vibe-forge 0.4.0 → 0.8.1

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 +102 -102
  4. package/.claude/commands/forge.md +218 -171
  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 +217 -187
  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 +253 -232
  13. package/agents/aegis/personality.md +303 -269
  14. package/agents/anvil/personality.md +278 -240
  15. package/agents/architect/personality.md +260 -234
  16. package/agents/crucible/personality.md +362 -309
  17. package/agents/crucible-x/personality.md +210 -0
  18. package/agents/ember/personality.md +293 -265
  19. package/agents/flux/personality.md +248 -0
  20. package/agents/furnace/personality.md +342 -291
  21. package/agents/herald/personality.md +249 -247
  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 +473 -251
  26. package/agents/scribe/personality.md +253 -251
  27. package/agents/slag/personality.md +268 -0
  28. package/agents/temper/personality.md +270 -0
  29. package/bin/cli.js +372 -325
  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 +477 -851
  38. package/bin/forge-setup.sh +661 -645
  39. package/bin/forge-spawn.sh +164 -164
  40. package/bin/forge.cmd +83 -83
  41. package/bin/forge.sh +566 -387
  42. package/bin/lib/agents.sh +177 -177
  43. package/bin/lib/check-aliases.js +50 -0
  44. package/bin/lib/colors.sh +44 -44
  45. package/bin/lib/config.sh +347 -313
  46. package/bin/lib/constants.sh +241 -206
  47. package/bin/lib/daemon/budgets.sh +107 -0
  48. package/bin/lib/daemon/dependencies.sh +146 -0
  49. package/bin/lib/daemon/display.sh +128 -0
  50. package/bin/lib/daemon/notifications.sh +273 -0
  51. package/bin/lib/daemon/routing.sh +93 -0
  52. package/bin/lib/daemon/state.sh +163 -0
  53. package/bin/lib/daemon/sync.sh +103 -0
  54. package/bin/lib/database.sh +357 -305
  55. package/bin/lib/frontmatter.js +106 -0
  56. package/bin/lib/heimdall-setup.js +113 -0
  57. package/bin/lib/heimdall.js +265 -0
  58. package/bin/lib/json.sh +264 -258
  59. package/bin/lib/terminal.js +452 -446
  60. package/bin/lib/util.sh +126 -126
  61. package/bin/lib/vcs.js +349 -349
  62. package/config/agent-manifest.yaml +237 -243
  63. package/config/agents.json +207 -132
  64. package/config/task-template.md +159 -87
  65. package/config/task-types.yaml +111 -106
  66. package/config/templates/handoff-template.md +40 -0
  67. package/context/agent-overrides/README.md +41 -0
  68. package/context/architecture.md +42 -0
  69. package/context/modern-conventions.md +129 -129
  70. package/context/project-context-template.md +122 -122
  71. package/docs/agents.md +473 -409
  72. package/docs/architecture.md +194 -162
  73. package/docs/commands.md +451 -388
  74. package/docs/security.md +195 -144
  75. package/package.json +77 -50
  76. package/.claude/settings.local.json +0 -33
  77. package/agents/forge-master/capabilities.md +0 -144
  78. package/agents/forge-master/context-template.md +0 -128
  79. package/agents/forge-master/personality.md +0 -138
  80. package/agents/sentinel/personality.md +0 -194
  81. package/context/forge-state.yaml +0 -19
  82. package/docs/TODO.md +0 -150
  83. package/docs/getting-started.md +0 -243
  84. package/docs/npm-publishing.md +0 -95
  85. package/docs/workflows/README.md +0 -32
  86. package/docs/workflows/azure-devops.md +0 -108
  87. package/docs/workflows/bitbucket.md +0 -104
  88. package/docs/workflows/git-only.md +0 -130
  89. package/docs/workflows/gitea.md +0 -168
  90. package/docs/workflows/github.md +0 -103
  91. package/docs/workflows/gitlab.md +0 -105
  92. package/docs/workflows.md +0 -454
  93. package/tasks/completed/ARCH-001-duplicate-agent-config.md +0 -121
  94. package/tasks/completed/ARCH-002-mixed-bash-node-implementation.md +0 -88
  95. package/tasks/completed/ARCH-003-worker-loop-hook-duplication.md +0 -77
  96. package/tasks/completed/ARCH-009-test-organization.md +0 -78
  97. package/tasks/completed/ARCH-011-jq-vs-nodejs-json.md +0 -94
  98. package/tasks/completed/ARCH-012-tmp-files-in-root.md +0 -71
  99. package/tasks/completed/ARCH-013-exit-code-constants.md +0 -65
  100. package/tasks/completed/ARCH-014-sed-incompatibility.md +0 -96
  101. package/tasks/completed/ARCH-015-docs-todo-tracking.md +0 -83
  102. package/tasks/completed/CLEAN-001.md +0 -38
  103. package/tasks/completed/CLEAN-003.md +0 -47
  104. package/tasks/completed/CLEAN-004.md +0 -56
  105. package/tasks/completed/CLEAN-005.md +0 -75
  106. package/tasks/completed/CLEAN-006.md +0 -47
  107. package/tasks/completed/CLEAN-007.md +0 -34
  108. package/tasks/completed/CLEAN-008.md +0 -49
  109. package/tasks/completed/CLEAN-012.md +0 -58
  110. package/tasks/completed/CLEAN-013.md +0 -45
  111. package/tasks/completed/SEC-001-sql-injection-fix.md +0 -58
  112. package/tasks/completed/SEC-002-notification-injection-fix.md +0 -45
  113. package/tasks/completed/SEC-003-eval-injection-fix.md +0 -54
  114. package/tasks/completed/SEC-004-pid-race-condition-fix.md +0 -49
  115. package/tasks/completed/SEC-005-worker-loop-path-fix.md +0 -51
  116. package/tasks/completed/SEC-006-eval-agent-names.md +0 -55
  117. package/tasks/completed/SEC-007-spawn-escaping.md +0 -67
  118. package/tasks/pending/ARCH-004-git-bash-detection-duplication.md +0 -72
  119. package/tasks/pending/ARCH-005-missing-src-directory.md +0 -95
  120. package/tasks/pending/ARCH-006-task-template-location.md +0 -64
  121. package/tasks/pending/ARCH-007-daemon-monolith.md +0 -91
  122. package/tasks/pending/ARCH-008-forge-master-vs-hub.md +0 -81
  123. package/tasks/pending/ARCH-010-missing-index-files.md +0 -84
  124. package/tasks/pending/CLEAN-002.md +0 -29
  125. package/tasks/pending/CLEAN-009.md +0 -31
  126. package/tasks/pending/CLEAN-010.md +0 -30
  127. package/tasks/pending/CLEAN-011.md +0 -30
  128. package/tasks/pending/CLEAN-014.md +0 -32
  129. package/tasks/review/task-001.md +0 -78
package/bin/lib/util.sh CHANGED
@@ -1,126 +1,126 @@
1
- #!/usr/bin/env bash
2
- #
3
- # Vibe Forge - Cross-Platform Utilities
4
- # Source this file in other scripts: source "$SCRIPT_DIR/lib/util.sh"
5
- #
6
- # Contains cross-platform helper functions that abstract away differences
7
- # between macOS/BSD, Linux, and Windows (Git Bash).
8
- #
9
-
10
- # =============================================================================
11
- # Cross-Platform sed In-Place Editing
12
- # =============================================================================
13
- # macOS/BSD sed requires `sed -i ''` (empty string for backup extension)
14
- # Linux/GNU sed requires `sed -i` (no argument after -i)
15
- # Windows Git Bash uses GNU sed, so same as Linux
16
- #
17
- # Usage:
18
- # sed_inplace 's/foo/bar/' file.txt
19
- # sed_inplace 's/foo/bar/g' file.txt
20
- #
21
- # Arguments:
22
- # $1 - sed expression (the pattern to apply)
23
- # $2 - file to edit
24
- #
25
- # Returns:
26
- # 0 on success, non-zero on failure
27
- #
28
- # Example:
29
- # sed_inplace 's/"validated": false/"validated": true/' "$config_file"
30
-
31
- sed_inplace() {
32
- local pattern="$1"
33
- local file="$2"
34
-
35
- # Validate arguments
36
- if [[ -z "$pattern" ]]; then
37
- echo "sed_inplace: error: pattern argument required" >&2
38
- return 1
39
- fi
40
-
41
- if [[ -z "$file" ]]; then
42
- echo "sed_inplace: error: file argument required" >&2
43
- return 1
44
- fi
45
-
46
- if [[ ! -f "$file" ]]; then
47
- echo "sed_inplace: error: file does not exist: $file" >&2
48
- return 1
49
- fi
50
-
51
- # SECURITY: Refuse to edit symlinks to prevent symlink attacks
52
- if [[ -L "$file" ]]; then
53
- echo "sed_inplace: error: refusing to edit symlink: $file" >&2
54
- return 1
55
- fi
56
-
57
- # Platform-specific sed invocation
58
- if [[ "$(uname)" == "Darwin" ]]; then
59
- # macOS/BSD sed requires empty string after -i
60
- sed -i '' "$pattern" "$file"
61
- else
62
- # Linux and Windows (Git Bash) use GNU sed
63
- sed -i "$pattern" "$file"
64
- fi
65
- }
66
-
67
- # =============================================================================
68
- # Detect Platform
69
- # =============================================================================
70
- # Returns a normalized platform name
71
- #
72
- # Usage:
73
- # platform=$(get_platform)
74
- # if [[ "$platform" == "macos" ]]; then ...
75
- #
76
- # Returns:
77
- # "windows" - Windows (detected via MINGW/MSYS/Cygwin environment)
78
- # "macos" - macOS (Darwin)
79
- # "linux" - Linux
80
- # "unknown" - Unrecognized platform
81
-
82
- get_platform() {
83
- case "$(uname -s)" in
84
- MINGW*|MSYS*|CYGWIN*)
85
- echo "windows"
86
- ;;
87
- Darwin)
88
- echo "macos"
89
- ;;
90
- Linux)
91
- echo "linux"
92
- ;;
93
- *)
94
- echo "unknown"
95
- ;;
96
- esac
97
- }
98
-
99
- # =============================================================================
100
- # Check if running in Git Bash on Windows
101
- # =============================================================================
102
- # Useful for Windows-specific behavior that differs from Linux
103
-
104
- is_git_bash() {
105
- [[ "$(uname -s)" == MINGW* ]] || [[ "$(uname -s)" == MSYS* ]]
106
- }
107
-
108
- # =============================================================================
109
- # Cross-Platform stat for File Size
110
- # =============================================================================
111
- # macOS uses `stat -f%z` while Linux uses `stat --format=%s`
112
- #
113
- # Usage:
114
- # size=$(get_file_size file.txt)
115
-
116
- get_file_size() {
117
- local file="$1"
118
-
119
- if [[ ! -f "$file" ]]; then
120
- echo 0
121
- return 1
122
- fi
123
-
124
- # Try macOS/BSD syntax first, fall back to GNU syntax
125
- stat -f%z "$file" 2>/dev/null || stat --format=%s "$file" 2>/dev/null || echo 0
126
- }
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Vibe Forge - Cross-Platform Utilities
4
+ # Source this file in other scripts: source "$SCRIPT_DIR/lib/util.sh"
5
+ #
6
+ # Contains cross-platform helper functions that abstract away differences
7
+ # between macOS/BSD, Linux, and Windows (Git Bash).
8
+ #
9
+
10
+ # =============================================================================
11
+ # Cross-Platform sed In-Place Editing
12
+ # =============================================================================
13
+ # macOS/BSD sed requires `sed -i ''` (empty string for backup extension)
14
+ # Linux/GNU sed requires `sed -i` (no argument after -i)
15
+ # Windows Git Bash uses GNU sed, so same as Linux
16
+ #
17
+ # Usage:
18
+ # sed_inplace 's/foo/bar/' file.txt
19
+ # sed_inplace 's/foo/bar/g' file.txt
20
+ #
21
+ # Arguments:
22
+ # $1 - sed expression (the pattern to apply)
23
+ # $2 - file to edit
24
+ #
25
+ # Returns:
26
+ # 0 on success, non-zero on failure
27
+ #
28
+ # Example:
29
+ # sed_inplace 's/"validated": false/"validated": true/' "$config_file"
30
+
31
+ sed_inplace() {
32
+ local pattern="$1"
33
+ local file="$2"
34
+
35
+ # Validate arguments
36
+ if [[ -z "$pattern" ]]; then
37
+ echo "sed_inplace: error: pattern argument required" >&2
38
+ return 1
39
+ fi
40
+
41
+ if [[ -z "$file" ]]; then
42
+ echo "sed_inplace: error: file argument required" >&2
43
+ return 1
44
+ fi
45
+
46
+ if [[ ! -f "$file" ]]; then
47
+ echo "sed_inplace: error: file does not exist: $file" >&2
48
+ return 1
49
+ fi
50
+
51
+ # SECURITY: Refuse to edit symlinks to prevent symlink attacks
52
+ if [[ -L "$file" ]]; then
53
+ echo "sed_inplace: error: refusing to edit symlink: $file" >&2
54
+ return 1
55
+ fi
56
+
57
+ # Platform-specific sed invocation
58
+ if [[ "$(uname)" == "Darwin" ]]; then
59
+ # macOS/BSD sed requires empty string after -i
60
+ sed -i '' "$pattern" "$file"
61
+ else
62
+ # Linux and Windows (Git Bash) use GNU sed
63
+ sed -i "$pattern" "$file"
64
+ fi
65
+ }
66
+
67
+ # =============================================================================
68
+ # Detect Platform
69
+ # =============================================================================
70
+ # Returns a normalized platform name
71
+ #
72
+ # Usage:
73
+ # platform=$(get_platform)
74
+ # if [[ "$platform" == "macos" ]]; then ...
75
+ #
76
+ # Returns:
77
+ # "windows" - Windows (detected via MINGW/MSYS/Cygwin environment)
78
+ # "macos" - macOS (Darwin)
79
+ # "linux" - Linux
80
+ # "unknown" - Unrecognized platform
81
+
82
+ get_platform() {
83
+ case "$(uname -s)" in
84
+ MINGW*|MSYS*|CYGWIN*)
85
+ echo "windows"
86
+ ;;
87
+ Darwin)
88
+ echo "macos"
89
+ ;;
90
+ Linux)
91
+ echo "linux"
92
+ ;;
93
+ *)
94
+ echo "unknown"
95
+ ;;
96
+ esac
97
+ }
98
+
99
+ # =============================================================================
100
+ # Check if running in Git Bash on Windows
101
+ # =============================================================================
102
+ # Useful for Windows-specific behavior that differs from Linux
103
+
104
+ is_git_bash() {
105
+ [[ "$(uname -s)" == MINGW* ]] || [[ "$(uname -s)" == MSYS* ]]
106
+ }
107
+
108
+ # =============================================================================
109
+ # Cross-Platform stat for File Size
110
+ # =============================================================================
111
+ # macOS uses `stat -f%z` while Linux uses `stat --format=%s`
112
+ #
113
+ # Usage:
114
+ # size=$(get_file_size file.txt)
115
+
116
+ get_file_size() {
117
+ local file="$1"
118
+
119
+ if [[ ! -f "$file" ]]; then
120
+ echo 0
121
+ return 1
122
+ fi
123
+
124
+ # Try macOS/BSD syntax first, fall back to GNU syntax
125
+ stat -f%z "$file" 2>/dev/null || stat --format=%s "$file" 2>/dev/null || echo 0
126
+ }