@profoundlogic/coderflow-server 0.6.2 → 0.6.4

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 (179) hide show
  1. package/dist/base-image/Dockerfile +4 -2
  2. package/dist/base-image/agent-wrapper.sh +32 -4
  3. package/dist/base-image/entrypoint.sh +3 -0
  4. package/dist/coder-server.js +1 -1
  5. package/dist/config/cli-models.json +12 -0
  6. package/dist/config.js +1 -1
  7. package/dist/lib/agent-keepalive.js +1 -1
  8. package/dist/lib/agent-models.js +1 -1
  9. package/dist/lib/api-keys.js +1 -1
  10. package/dist/lib/apiKeys.js +1 -1
  11. package/dist/lib/app-server-ports.js +1 -1
  12. package/dist/lib/auto-judge.js +1 -1
  13. package/dist/lib/automation-service.js +1 -1
  14. package/dist/lib/basic-auth.js +1 -1
  15. package/dist/lib/bindings.js +1 -1
  16. package/dist/lib/build-history.js +1 -1
  17. package/dist/lib/build-output-service.js +1 -1
  18. package/dist/lib/build-scheduler.js +1 -1
  19. package/dist/lib/build-service.js +1 -1
  20. package/dist/lib/ca-certificates.js +1 -1
  21. package/dist/lib/claude-oauth-refresh.js +1 -1
  22. package/dist/lib/cli/build.js +1 -1
  23. package/dist/lib/cli/cleanup-users.js +1 -1
  24. package/dist/lib/cli/config-command.js +1 -1
  25. package/dist/lib/cli/config.js +1 -1
  26. package/dist/lib/cli/create-user.js +1 -1
  27. package/dist/lib/cli/grant-admin.js +1 -1
  28. package/dist/lib/cli/init.js +1 -1
  29. package/dist/lib/cli/jira.js +1 -1
  30. package/dist/lib/cli/license.js +1 -1
  31. package/dist/lib/cli/list-roles.js +1 -1
  32. package/dist/lib/cli/list-users.js +1 -1
  33. package/dist/lib/cli/server-manager.js +1 -1
  34. package/dist/lib/cli/set-password.js +1 -1
  35. package/dist/lib/config-migration.js +1 -1
  36. package/dist/lib/container-credential-sync.js +1 -1
  37. package/dist/lib/container-tokens.js +1 -1
  38. package/dist/lib/data-dir.js +1 -1
  39. package/dist/lib/deployment-history.js +1 -1
  40. package/dist/lib/deployment-service.js +1 -1
  41. package/dist/lib/docker-utils.js +1 -1
  42. package/dist/lib/email.js +1 -1
  43. package/dist/lib/emailTemplates.js +1 -1
  44. package/dist/lib/entitlement.js +1 -1
  45. package/dist/lib/external-connections.js +1 -1
  46. package/dist/lib/fetch-utils.js +1 -1
  47. package/dist/lib/git-commit-details-route.js +1 -1
  48. package/dist/lib/git-history-diff-guardrails.js +1 -1
  49. package/dist/lib/git-provider-service.js +1 -1
  50. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  51. package/dist/lib/git-provider-setup/index.js +1 -1
  52. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  53. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  54. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  55. package/dist/lib/git-providers/github-app-provider.js +1 -1
  56. package/dist/lib/git-providers/index.js +1 -1
  57. package/dist/lib/git-providers/provider-factory.js +1 -1
  58. package/dist/lib/git-providers/provider-interface.js +1 -1
  59. package/dist/lib/github-urls.js +1 -1
  60. package/dist/lib/group-objective-linking.js +1 -1
  61. package/dist/lib/ibmi-sync.js +1 -1
  62. package/dist/lib/jira-client.js +1 -1
  63. package/dist/lib/judge-blinding.js +1 -1
  64. package/dist/lib/logger.js +1 -1
  65. package/dist/lib/migration-to-scoped-rbac.js +1 -1
  66. package/dist/lib/model-fetcher.js +1 -1
  67. package/dist/lib/notifications.js +1 -1
  68. package/dist/lib/objective-context.js +1 -1
  69. package/dist/lib/oidc-auth.js +1 -1
  70. package/dist/lib/oidc-device-flow.js +1 -1
  71. package/dist/lib/passwordTokens.js +1 -1
  72. package/dist/lib/permission-resolver.js +1 -1
  73. package/dist/lib/pin-cascade.js +1 -1
  74. package/dist/lib/provider-accounts.js +1 -1
  75. package/dist/lib/provider-oauth.js +1 -1
  76. package/dist/lib/provider-profile.js +1 -1
  77. package/dist/lib/provider-token-refresh.js +1 -1
  78. package/dist/lib/rbac-user-state.js +1 -1
  79. package/dist/lib/request-url.js +1 -1
  80. package/dist/lib/rewind.js +1 -1
  81. package/dist/lib/role-definitions.js +1 -1
  82. package/dist/lib/roles.js +1 -1
  83. package/dist/lib/secrets.js +1 -1
  84. package/dist/lib/setup-repo-git-auth.js +1 -1
  85. package/dist/lib/state-capture.js +1 -1
  86. package/dist/lib/static-files.js +1 -1
  87. package/dist/lib/task-name-format.js +1 -1
  88. package/dist/lib/task-name-generator.js +1 -1
  89. package/dist/lib/task-source-metadata.js +1 -1
  90. package/dist/lib/teams.js +1 -1
  91. package/dist/lib/user-git-oauth.js +1 -1
  92. package/dist/lib/user-git-tokens.js +1 -1
  93. package/dist/lib/users.js +1 -1
  94. package/dist/middleware/requireAuth.js +1 -1
  95. package/dist/middleware/requireInit.js +1 -1
  96. package/dist/middleware/requirePermission.js +1 -1
  97. package/dist/package.json +1 -1
  98. package/dist/playwright.config.js +1 -1
  99. package/dist/playwright.task-terminal.config.js +1 -1
  100. package/dist/routes/apiKeys.js +1 -1
  101. package/dist/routes/auth-oidc.js +1 -1
  102. package/dist/routes/auth.js +1 -1
  103. package/dist/routes/automations.js +1 -1
  104. package/dist/routes/bindings.js +1 -1
  105. package/dist/routes/build.js +1 -1
  106. package/dist/routes/containers.js +1 -1
  107. package/dist/routes/deploy-task.js +1 -1
  108. package/dist/routes/environment-management.js +1 -1
  109. package/dist/routes/environments.js +1 -1
  110. package/dist/routes/external-skills.js +1 -1
  111. package/dist/routes/git-credentials.js +1 -1
  112. package/dist/routes/git-oauth.js +1 -1
  113. package/dist/routes/git-provider-setup.js +1 -1
  114. package/dist/routes/health.js +1 -1
  115. package/dist/routes/jira.js +1 -1
  116. package/dist/routes/objective-management.js +1 -1
  117. package/dist/routes/password.js +1 -1
  118. package/dist/routes/prompt.js +1 -1
  119. package/dist/routes/provider-auth.js +1 -1
  120. package/dist/routes/qa.js +1 -1
  121. package/dist/routes/roles.js +1 -1
  122. package/dist/routes/settings.js +1 -1
  123. package/dist/routes/skill-management.js +1 -1
  124. package/dist/routes/skills.js +1 -1
  125. package/dist/routes/tasks.js +1 -1
  126. package/dist/routes/teams.js +1 -1
  127. package/dist/routes/templates.js +1 -1
  128. package/dist/routes/test-task.js +1 -1
  129. package/dist/routes/test.js +1 -1
  130. package/dist/routes/users.js +1 -1
  131. package/dist/routes/visualizations.js +1 -1
  132. package/dist/scripts/create-user.js +1 -1
  133. package/dist/scripts/migrate-config-to-data-dir.js +1 -1
  134. package/dist/start.js +1 -1
  135. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  136. package/dist/web-ui/public/activity-feed.js +1 -1
  137. package/dist/web-ui/public/activity-formatters.js +1 -1
  138. package/dist/web-ui/public/agent-event-parser.js +1 -1
  139. package/dist/web-ui/public/app.js +1 -1
  140. package/dist/web-ui/public/approve-dialog.js +1 -1
  141. package/dist/web-ui/public/automation-links.js +1 -1
  142. package/dist/web-ui/public/automation-schedule.js +1 -1
  143. package/dist/web-ui/public/comments-widget.js +1 -1
  144. package/dist/web-ui/public/diff-utils.js +1 -1
  145. package/dist/web-ui/public/environments.js +1 -1
  146. package/dist/web-ui/public/feedback-widget.js +1 -1
  147. package/dist/web-ui/public/file-selection-tree.js +1 -1
  148. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  149. package/dist/web-ui/public/git-history.js +1 -1
  150. package/dist/web-ui/public/git-status.js +1 -1
  151. package/dist/web-ui/public/ibmi-file-filter.js +1 -1
  152. package/dist/web-ui/public/index.html +39 -0
  153. package/dist/web-ui/public/index.js +1 -1
  154. package/dist/web-ui/public/login.js +1 -1
  155. package/dist/web-ui/public/markdown-editor.js +1 -1
  156. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  157. package/dist/web-ui/public/modal-maximize.js +1 -1
  158. package/dist/web-ui/public/notifications.js +1 -1
  159. package/dist/web-ui/public/permissions.js +1 -1
  160. package/dist/web-ui/public/pr-dialog.js +1 -1
  161. package/dist/web-ui/public/roles.js +1 -1
  162. package/dist/web-ui/public/server-health.js +1 -1
  163. package/dist/web-ui/public/settings.html +23 -0
  164. package/dist/web-ui/public/settings.js +1 -1
  165. package/dist/web-ui/public/setup-password.js +1 -1
  166. package/dist/web-ui/public/skills.js +1 -1
  167. package/dist/web-ui/public/sse-client.js +1 -1
  168. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  169. package/dist/web-ui/public/styles.css +101 -1
  170. package/dist/web-ui/public/task.html +46 -1
  171. package/dist/web-ui/public/task.js +1 -1
  172. package/dist/web-ui/public/teams.js +1 -1
  173. package/dist/web-ui/public/terminal.js +1 -1
  174. package/dist/web-ui/public/theme.js +1 -1
  175. package/dist/web-ui/public/users.js +1 -1
  176. package/dist/web-ui/public/variant-grouping.js +1 -1
  177. package/package.json +1 -1
  178. package/dist/.claude/settings.local.json +0 -20
  179. package/dist/playwright-test-results/.last-run.json +0 -54
@@ -81,7 +81,8 @@ RUN userdel -r node 2>/dev/null || true
81
81
  RUN groupadd -g ${USER_GID} coder && \
82
82
  useradd -m -u ${USER_UID} -g ${USER_GID} -s /bin/bash coder && \
83
83
  mkdir -p /home/coder/.ssh /home/coder/.claude /home/coder/.codex \
84
- /home/coder/.config/google-generative-ai /home/coder/.gemini && \
84
+ /home/coder/.config/google-generative-ai /home/coder/.gemini \
85
+ /home/coder/.bob && \
85
86
  chown -R coder:coder /home/coder
86
87
 
87
88
  # Configure git for root user (used during docker builds with BuildKit secrets)
@@ -118,8 +119,9 @@ RUN chmod 644 /etc/ssh/ssh_config.d/10-github-multiplexing.conf
118
119
  RUN sed -i '/^# If not running interactively/i # Source environment variables from setup.sh\nif [ -f ~/.bash_env ]; then\n . ~/.bash_env\nfi\n' /home/coder/.bashrc && \
119
120
  printf '\n# Source environment variables from setup.sh\nif [ -f ~/.bash_env ]; then\n . ~/.bash_env\nfi\n' >> /home/coder/.profile
120
121
 
121
- # Install Claude Code, Codex, and Gemini CLI globally
122
+ # Install Claude Code, Codex, Gemini CLI, and Bob-Shell globally
122
123
  RUN npm install -g @openai/codex @google/gemini-cli && \
124
+ npm install -g "https://ibm.biz/bob-shell-install" && \
123
125
  su - coder -c "curl -fsSL https://claude.ai/install.sh | bash"
124
126
 
125
127
  # Pre-install Playwright browser binaries (not the skill itself)
@@ -1,11 +1,12 @@
1
1
  #!/bin/bash
2
- # Wrapper script to run AI agents (Claude/Codex/Gemini) and output JSON statistics
2
+ # Wrapper script to run AI agents (Claude/Codex/Gemini/Bob) and output JSON statistics
3
3
  #
4
4
  # Model selection via environment variables:
5
5
  # CLAUDE_MODEL - Model for Claude (e.g., opus, sonnet, haiku)
6
6
  # CLAUDE_CODE_EFFORT_LEVEL - Effort level for Claude (low, medium, high, max)
7
7
  # OPENAI_MODEL - Model for Codex/OpenAI (e.g., gpt-5.4)
8
8
  # GEMINI_MODEL - Model for Gemini (e.g., gemini-2.5-pro)
9
+ # BOB_SHELL_MODEL - Model for Bob-Shell (e.g., bob-2.5-pro)
9
10
  # CODEX_REASONING_LEVEL - Reasoning level for Codex (low, medium, high, xhigh)
10
11
  # CODEX_MODEL_PROVIDER - Optional Codex model provider override (e.g., coderflow_managed_custom_endpoint)
11
12
  #
@@ -32,6 +33,10 @@ elif [[ "$AGENT_CMD" == *"gemini"* ]]; then
32
33
  if [[ -n "$GEMINI_MODEL" ]]; then
33
34
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] Model: $GEMINI_MODEL" >&2
34
35
  fi
36
+ elif [[ "$AGENT_CMD" == *"bob"* ]]; then
37
+ if [[ -n "$BOB_SHELL_MODEL" ]]; then
38
+ echo "[$(date +'%Y-%m-%d %H:%M:%S')] Model: $BOB_SHELL_MODEL" >&2
39
+ fi
35
40
  else
36
41
  if [[ -n "$CLAUDE_MODEL" ]]; then
37
42
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] Model: $CLAUDE_MODEL" >&2
@@ -141,6 +146,29 @@ elif [[ "$AGENT_CMD" == *"gemini"* ]]; then
141
146
  EXIT_CODE=$?
142
147
  fi
143
148
 
149
+ elif [[ "$AGENT_CMD" == *"bob"* ]]; then
150
+ # Bob-Shell is a Gemini CLI fork - uses BOB_SHELL_MODEL env var
151
+ # Only pass --model if explicitly configured; otherwise let Bob use its default
152
+ BOB_MODEL_ARG=""
153
+ if [[ -n "$BOB_SHELL_MODEL" ]]; then
154
+ BOB_MODEL_ARG="--model $BOB_SHELL_MODEL"
155
+ fi
156
+
157
+ # Same pattern as Gemini: stdin for instructions, --yolo for auto-approval
158
+ if [[ "$*" == *"--resume"* ]]; then
159
+ cat "$TEMP_INPUT" | "$AGENT_CMD" $BOB_MODEL_ARG --resume latest --yolo --include-directories /task-output --include-directories /workspace --output-format stream-json >> /task-output/debug-stream.jsonl 2>&1 &
160
+ AGENT_PID=$!
161
+ echo "$AGENT_PID" > "$AGENT_PID_FILE"
162
+ wait_for_agent
163
+ EXIT_CODE=$?
164
+ else
165
+ cat "$TEMP_INPUT" | "$AGENT_CMD" $BOB_MODEL_ARG --yolo --include-directories /task-output --include-directories /workspace --output-format stream-json "$@" >> /task-output/debug-stream.jsonl 2>&1 &
166
+ AGENT_PID=$!
167
+ echo "$AGENT_PID" > "$AGENT_PID_FILE"
168
+ wait_for_agent
169
+ EXIT_CODE=$?
170
+ fi
171
+
144
172
  else
145
173
  # Claude - pass model via --model flag if CLAUDE_MODEL is set
146
174
  MODEL_ARG=""
@@ -167,9 +195,9 @@ if [ -f /task-output/debug-stream.jsonl ] && [ $EXIT_CODE -eq 0 ]; then
167
195
  if [[ "$AGENT_CMD" == *"claude"* ]]; then
168
196
  # Claude: Look for last text block in assistant message
169
197
  RESPONSE=$(grep -a '"type":"assistant"' /task-output/debug-stream.jsonl | tail -1 | jq -r '.message.content[] | select(.type=="text") | .text' 2>/dev/null | head -20 || echo "")
170
- elif [[ "$AGENT_CMD" == *"gemini"* ]]; then
171
- # Gemini: Extract last assistant message content (the actual response)
172
- # Gemini format: {"type":"message","role":"assistant","content":"...","delta":true}
198
+ elif [[ "$AGENT_CMD" == *"gemini"* ]] || [[ "$AGENT_CMD" == *"bob"* ]]; then
199
+ # Gemini/Bob-Shell: Extract last assistant message content (the actual response)
200
+ # Format: {"type":"message","role":"assistant","content":"...","delta":true}
173
201
  RESPONSE=$(grep -a '"type":"message"' /task-output/debug-stream.jsonl | grep -a '"role":"assistant"' | tail -1 | jq -r '.content' 2>/dev/null || echo "")
174
202
  elif [[ "$AGENT_CMD" == *"codex"* ]]; then
175
203
  # Codex: Look for last agent_message or reasoning item
@@ -907,6 +907,9 @@ main() {
907
907
  elif [ "$AGENT" = "gemini" ]; then
908
908
  ln -sf /workspace/AGENTS.md /workspace/GEMINI.md
909
909
  log "AGENTS.md copied and GEMINI.md symlink created" >&2
910
+ elif [ "$AGENT" = "bob" ]; then
911
+ # Bob-Shell reads AGENTS.md directly (no agent-specific symlink needed)
912
+ log "AGENTS.md copied (Bob reads AGENTS.md directly)" >&2
910
913
  elif [ "$AGENT" = "codex" ]; then
911
914
  # Codex doesn't use agent-specific files, just AGENTS.md
912
915
  log "AGENTS.md copied (no agent-specific symlink for Codex)" >&2