cli-jaw 1.7.20 → 1.7.21

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 (69) hide show
  1. package/README.md +5 -2
  2. package/dist/bin/commands/dispatch.js +1 -1
  3. package/dist/bin/commands/dispatch.js.map +1 -1
  4. package/dist/bin/commands/doctor.js +47 -11
  5. package/dist/bin/commands/doctor.js.map +1 -1
  6. package/dist/bin/commands/serve.js +4 -3
  7. package/dist/bin/commands/serve.js.map +1 -1
  8. package/dist/server.js +14 -6
  9. package/dist/server.js.map +1 -1
  10. package/dist/src/agent/events.js +1 -0
  11. package/dist/src/agent/events.js.map +1 -1
  12. package/dist/src/agent/spawn.js +16 -0
  13. package/dist/src/agent/spawn.js.map +1 -1
  14. package/dist/src/cli/registry.js +1 -0
  15. package/dist/src/cli/registry.js.map +1 -1
  16. package/dist/src/core/claude-install.js +33 -0
  17. package/dist/src/core/claude-install.js.map +1 -0
  18. package/dist/src/core/db.js +1 -0
  19. package/dist/src/core/db.js.map +1 -1
  20. package/dist/src/core/employees.js +0 -1
  21. package/dist/src/core/employees.js.map +1 -1
  22. package/dist/src/core/runtime-path.js +3 -0
  23. package/dist/src/core/runtime-path.js.map +1 -1
  24. package/dist/src/discord/bot.js +123 -107
  25. package/dist/src/discord/bot.js.map +1 -1
  26. package/dist/src/orchestrator/distribute.js +1 -2
  27. package/dist/src/orchestrator/distribute.js.map +1 -1
  28. package/dist/src/orchestrator/pipeline.js +3 -15
  29. package/dist/src/orchestrator/pipeline.js.map +1 -1
  30. package/dist/src/orchestrator/scope.js +9 -3
  31. package/dist/src/orchestrator/scope.js.map +1 -1
  32. package/dist/src/orchestrator/state-machine.js +12 -3
  33. package/dist/src/orchestrator/state-machine.js.map +1 -1
  34. package/dist/src/prompt/builder.js +0 -4
  35. package/dist/src/prompt/builder.js.map +1 -1
  36. package/dist/src/prompt/templates/a1-system.md +2 -2
  37. package/dist/src/prompt/templates/worker-context.md +2 -2
  38. package/dist/src/routes/orchestrate.js +6 -1
  39. package/dist/src/routes/orchestrate.js.map +1 -1
  40. package/dist/src/telegram/bot.js +37 -3
  41. package/dist/src/telegram/bot.js.map +1 -1
  42. package/package.json +1 -1
  43. package/public/dist/assets/{constants-Bzu8ZQYX.js → constants-DGOVap6o.js} +1 -1
  44. package/public/dist/assets/{employees-BbOvchcS.js → employees-C0yujZsW.js} +1 -1
  45. package/public/dist/assets/{index-BG6dRmXR.js → index-BWcXMhOZ.js} +4 -4
  46. package/public/dist/assets/{memory-ZuWr4pMd.js → memory-FFmqjyCC.js} +1 -1
  47. package/public/dist/assets/memory-irEuKgdV.js +1 -0
  48. package/public/dist/assets/{render-DJB99y40.js → render-D1FcBRwU.js} +1 -1
  49. package/public/dist/assets/{settings-D1g7w3t4.js → settings-MICU1hXS.js} +1 -1
  50. package/public/dist/assets/settings-my0MZC-q.js +1 -0
  51. package/public/dist/assets/skills--Z8gqYp5.js +1 -0
  52. package/public/dist/assets/{skills-C5kJQVkS.js → skills-BzRE-_tP.js} +1 -1
  53. package/public/dist/assets/{slash-commands-ByfeM4Ot.js → slash-commands-DH53hTco.js} +1 -1
  54. package/public/dist/assets/slash-commands-u5fbLK7K.js +1 -0
  55. package/public/dist/assets/ui-CfUxt-FY.js +1 -0
  56. package/public/dist/assets/{ui-BR_M9U08.js → ui-DZb07Luj.js} +2 -2
  57. package/public/dist/assets/{ws-BgwVESAY.js → ws-PsjiwLxs.js} +2 -2
  58. package/public/dist/index.html +1 -1
  59. package/public/js/constants.ts +0 -1
  60. package/public/js/features/employees.ts +0 -2
  61. package/public/locales/en.json +1 -2
  62. package/public/locales/ko.json +1 -2
  63. package/scripts/install.sh +175 -3
  64. package/dist/src/prompt/templates/research-worker.md +0 -37
  65. package/public/dist/assets/memory-BLIJdS7I.js +0 -1
  66. package/public/dist/assets/settings-DRL_RTEF.js +0 -1
  67. package/public/dist/assets/skills-DDi6QuNI.js +0 -1
  68. package/public/dist/assets/slash-commands-Ds50o_kN.js +0 -1
  69. package/public/dist/assets/ui-hKRh1sfy.js +0 -1
@@ -35,8 +35,6 @@ const LEGACY_MAP: Record<string, string> = {
35
35
  '문서화, README, API docs': 'docs',
36
36
  'UI/UX, CSS, components': 'frontend',
37
37
  'API, DB, server logic': 'backend',
38
- 'Search, codebase exploration, uncertainty reduction, read-only reports': 'research',
39
- 'Search, codebase exploration, uncertainty reduction, read-only': 'research',
40
38
  'Data pipeline, analysis, ML': 'data',
41
39
  'Documentation, README, API docs': 'docs',
42
40
  };
@@ -159,7 +159,6 @@
159
159
  "emp.customModel": "Enter manually...",
160
160
  "role.label.frontend": "Frontend",
161
161
  "role.label.backend": "Backend",
162
- "role.label.research": "Research",
163
162
  "role.label.data": "Data",
164
163
  "role.label.docs": "Docs",
165
164
  "role.label.custom": "Custom...",
@@ -259,4 +258,4 @@
259
258
  "cmd.ide.popToggled": "IDE popup toggled",
260
259
  "cmd.ide.usage": "Usage: /ide [pop|on|off]",
261
260
  "label.mentionOnly": "Mention Only"
262
- }
261
+ }
@@ -159,7 +159,6 @@
159
159
  "emp.customModel": "직접 입력...",
160
160
  "role.label.frontend": "프런트엔드",
161
161
  "role.label.backend": "백엔드",
162
- "role.label.research": "리서치",
163
162
  "role.label.data": "데이터",
164
163
  "role.label.docs": "문서작성",
165
164
  "role.label.custom": "커스텀...",
@@ -259,4 +258,4 @@
259
258
  "cmd.ide.popToggled": "IDE 팝업을 전환했습니다",
260
259
  "cmd.ide.usage": "/ide [pop|on|off]",
261
260
  "label.mentionOnly": "@멘션 시에만 응답"
262
- }
261
+ }
@@ -33,6 +33,133 @@ echo ""
33
33
 
34
34
  NODE_MAJOR=22
35
35
 
36
+ extract_semver() {
37
+ printf '%s' "${1:-}" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' | head -n1 || true
38
+ }
39
+
40
+ resolve_cmd() {
41
+ command -v "$1" 2>/dev/null || true
42
+ }
43
+
44
+ get_installed_jaw_binary() {
45
+ local jaw_bin
46
+ jaw_bin="$(resolve_cmd jaw)"
47
+ if [ -n "$jaw_bin" ]; then
48
+ printf '%s\n' "$jaw_bin"
49
+ return 0
50
+ fi
51
+
52
+ local cli_jaw_bin
53
+ cli_jaw_bin="$(resolve_cmd cli-jaw)"
54
+ if [ -n "$cli_jaw_bin" ]; then
55
+ printf '%s\n' "$cli_jaw_bin"
56
+ return 0
57
+ fi
58
+
59
+ return 1
60
+ }
61
+
62
+ get_binary_version() {
63
+ local bin_path="${1:-}"
64
+ if [ -z "$bin_path" ]; then
65
+ return 0
66
+ fi
67
+ extract_semver "$("$bin_path" --version 2>/dev/null | head -n1)"
68
+ }
69
+
70
+ get_latest_cli_jaw_version() {
71
+ extract_semver "$(npm view cli-jaw version 2>/dev/null || true)"
72
+ }
73
+
74
+ realpath_fallback() {
75
+ local target="${1:-}"
76
+ if [ -z "$target" ]; then
77
+ return 0
78
+ fi
79
+ node -e "const fs=require('fs');const p=process.argv[1];try{console.log(fs.realpathSync(p));}catch{console.log(p)}" "$target" 2>/dev/null || printf '%s\n' "$target"
80
+ }
81
+
82
+ # Shell-level Claude install classifier — mirrors src/core/claude-install.ts
83
+ # Returns: native | node-managed | unknown
84
+ classify_claude_install_sh() {
85
+ local bin_path="${1:-}"
86
+ local real_path="${2:-}"
87
+ if [ -z "$bin_path" ]; then
88
+ echo "unknown"
89
+ return 0
90
+ fi
91
+
92
+ # Check native paths
93
+ case "$bin_path" in
94
+ "$HOME/.local/bin/claude"|"$HOME/.claude/local/bin/claude")
95
+ echo "native"
96
+ return 0
97
+ ;;
98
+ esac
99
+
100
+ # Check realpath for node_modules or native
101
+ if [ -n "$real_path" ]; then
102
+ case "$real_path" in
103
+ */node_modules/@anthropic-ai/claude-code/*)
104
+ echo "node-managed"
105
+ return 0
106
+ ;;
107
+ */.claude/local/*)
108
+ echo "native"
109
+ return 0
110
+ ;;
111
+ esac
112
+ fi
113
+
114
+ # Check bun bin
115
+ case "$bin_path" in
116
+ */.bun/bin/claude)
117
+ echo "node-managed"
118
+ return 0
119
+ ;;
120
+ esac
121
+
122
+ echo "unknown"
123
+ }
124
+
125
+ print_cli_dependency_guidance() {
126
+ echo ""
127
+ info "CLI dependency guidance"
128
+
129
+ warn "Claude Code users who need computer-use MCP should prefer Anthropic's native installer:"
130
+ echo -e "${DIM} curl -fsSL https://claude.ai/install.sh | bash${NC}"
131
+ echo -e "${DIM} or run: claude install${NC}"
132
+
133
+ local claude_bin claude_real claude_kind
134
+ claude_bin="$(resolve_cmd claude)"
135
+ if [ -n "$claude_bin" ]; then
136
+ claude_real="$(realpath_fallback "$claude_bin")"
137
+ claude_kind="$(classify_claude_install_sh "$claude_bin" "$claude_real")"
138
+ case "$claude_kind" in
139
+ native)
140
+ ok "Claude CLI looks native (${claude_bin})"
141
+ ;;
142
+ node-managed)
143
+ warn "Claude CLI appears npm/bun-managed (${claude_bin})"
144
+ warn "For computer-use MCP, reinstall Claude natively or run: claude install"
145
+ ;;
146
+ *)
147
+ warn "Claude CLI detected at ${claude_bin} — verify it is native if you need computer-use MCP"
148
+ ;;
149
+ esac
150
+ else
151
+ warn "Claude CLI not detected — install only if you plan to use Claude"
152
+ fi
153
+
154
+ local codex_bin
155
+ codex_bin="$(resolve_cmd codex)"
156
+ if [ -n "$codex_bin" ]; then
157
+ ok "Codex CLI detected (${codex_bin}) — npm/bun/global installs are fine"
158
+ else
159
+ info "Optional: install Codex with npm or bun if you want OpenAI as a backend"
160
+ fi
161
+ }
162
+
36
163
  # ═══════════════════════════════════════
37
164
  # Step 1: Ensure Node.js ≥ 22
38
165
  # ═══════════════════════════════════════
@@ -97,9 +224,53 @@ ensure_node() {
97
224
  # Step 2: Install CLI-JAW
98
225
  # ═══════════════════════════════════════
99
226
  install_cli_jaw() {
100
- info "Installing CLI-JAW..."
101
- npm install -g cli-jaw
102
- ok "CLI-JAW $(jaw --version 2>/dev/null || echo '') installed"
227
+ local installed_bin installed_version latest_version
228
+ installed_bin="$(get_installed_jaw_binary || true)"
229
+ installed_version="$(get_binary_version "$installed_bin")"
230
+ latest_version="$(get_latest_cli_jaw_version)"
231
+
232
+ # If npm view failed (network issue) and we already have a working install, skip
233
+ if [ -z "$latest_version" ] && [ -n "$installed_bin" ] && [ -n "$installed_version" ]; then
234
+ warn "Could not fetch latest version (network issue?) — keeping existing ${installed_version}"
235
+ ok "CLI-JAW ${installed_version} at ${installed_bin} — skipping update"
236
+ return 0
237
+ fi
238
+
239
+ if [ -n "$installed_bin" ] && [ -n "$installed_version" ] && [ -n "$latest_version" ] && [ "$installed_version" = "$latest_version" ]; then
240
+ ok "CLI-JAW ${installed_version} already installed at ${installed_bin} — skipping npm install"
241
+ return 0
242
+ fi
243
+
244
+ # Detect package manager from existing install path to avoid shared-path contamination
245
+ local pkg_cmd="npm install -g cli-jaw"
246
+ if [ -n "$installed_bin" ]; then
247
+ case "$installed_bin" in
248
+ *"/.bun/bin/"*)
249
+ pkg_cmd="bun add -g cli-jaw"
250
+ info "Detected bun-managed install — using bun"
251
+ ;;
252
+ *)
253
+ info "Using npm for global install"
254
+ ;;
255
+ esac
256
+ fi
257
+
258
+ if [ -n "$installed_bin" ] && [ -n "$installed_version" ]; then
259
+ info "Updating CLI-JAW ${installed_version} → ${latest_version:-latest}"
260
+ else
261
+ info "Installing CLI-JAW..."
262
+ fi
263
+ eval "$pkg_cmd"
264
+
265
+ # Post-install verification: re-resolve and check version
266
+ local new_bin new_ver
267
+ new_bin="$(get_installed_jaw_binary || true)"
268
+ new_ver="$(get_binary_version "$new_bin")"
269
+ if [ -n "$new_bin" ] && [ -n "$new_ver" ]; then
270
+ ok "CLI-JAW ${new_ver} installed at ${new_bin}"
271
+ else
272
+ warn "CLI-JAW install completed but binary not responding — check your PATH"
273
+ fi
103
274
  }
104
275
 
105
276
  # ═══════════════════════════════════════
@@ -190,6 +361,7 @@ install_browser_deps() {
190
361
  ensure_node
191
362
  install_cli_jaw
192
363
  install_browser_deps
364
+ print_cli_dependency_guidance
193
365
 
194
366
  echo ""
195
367
  echo -e "${GREEN}${BOLD} 🎉 All done!${NC}"
@@ -1,37 +0,0 @@
1
- ## Phase 1 — Research
2
- You are a RESEARCH employee. Your sole job is to investigate, explore, and report.
3
-
4
- ### What You Do
5
- - Search the codebase (files, imports, exports, function signatures)
6
- - Read worklog, memory, and devlog for historical context
7
- - Use web search or documentation lookup when needed
8
- - Produce a structured Research Report
9
-
10
- ### Output Format (REQUIRED)
11
- ```markdown
12
- ## Research Report
13
- ### Context
14
- (Background information gathered)
15
-
16
- ### Options
17
- (Numbered list of approaches or answers)
18
-
19
- ### Recommendation
20
- (Your recommended approach with reasoning)
21
-
22
- ### Unknowns
23
- (Things you could not determine)
24
- ```
25
-
26
- ### ⛔ Rules (MANDATORY)
27
- - Do NOT create, modify, or delete ANY files
28
- - Do NOT write implementation code or diffs
29
- - Do NOT suggest specific code changes (describe approaches instead)
30
- - Do NOT execute destructive commands (rm, git reset, etc.)
31
- - You are READ-ONLY. Observe and report only.
32
-
33
- ### Search Priority Order
34
- 1. Local codebase (grep, glob, file reads)
35
- 2. Memory / worklog / devlog
36
- 3. External documentation (Context7, web search)
37
- 4. Package registries (version checks)
@@ -1 +0,0 @@
1
- import{a as e}from"./memory-ZuWr4pMd.js";export{e as refreshMemorySidebar};
@@ -1 +0,0 @@
1
- import{b as e,m as t,v as n}from"./settings-D1g7w3t4.js";export{t as loadSettings,n as savePerCli,e as updateSettings};
@@ -1 +0,0 @@
1
- import{n as e}from"./skills-C5kJQVkS.js";export{e as loadSkills};
@@ -1 +0,0 @@
1
- import{a as e}from"./slash-commands-ByfeM4Ot.js";export{e as loadCommands};
@@ -1 +0,0 @@
1
- import{a as e,g as t,u as n}from"./ui-BR_M9U08.js";export{e as cleanupToolActivity,n as loadMessages,t as updateQueueBadge};