subconscious-cli 6.0.0 → 6.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 (76) hide show
  1. package/README.md +135 -2
  2. package/bin/agent-data.js +242 -0
  3. package/bin/agent-help.js +106 -0
  4. package/bin/agent-install.js +354 -0
  5. package/bin/agent-launch.js +199 -0
  6. package/bin/agent-spawn.js +137 -0
  7. package/bin/agents.js +284 -840
  8. package/bin/auth.js +89 -33
  9. package/bin/branding.js +3 -1
  10. package/bin/claude-picker.js +143 -0
  11. package/bin/cli.js +87 -20
  12. package/bin/clipboard-image.js +24 -5
  13. package/bin/colors.js +1 -1
  14. package/bin/feedback.js +71 -21
  15. package/bin/harness-manifest.js +286 -0
  16. package/bin/headless-args.js +35 -0
  17. package/bin/launch-values.js +25 -0
  18. package/bin/model-capabilities.js +12 -8
  19. package/bin/models.js +35 -19
  20. package/bin/native/subc-tui-darwin-amd64 +0 -0
  21. package/bin/native/subc-tui-darwin-arm64 +0 -0
  22. package/bin/native/subc-tui-linux-amd64 +0 -0
  23. package/bin/native/subc-tui-linux-arm64 +0 -0
  24. package/bin/native/subc-tui-windows-amd64.exe +0 -0
  25. package/bin/native/subc-tui-windows-arm64.exe +0 -0
  26. package/bin/opencode-provider.js +48 -5
  27. package/bin/profile-settings.js +129 -0
  28. package/bin/profiles.js +136 -449
  29. package/bin/runbook/README.md +66 -23
  30. package/bin/runbook/claude-code/agent.json +300 -0
  31. package/bin/runbook/claude-code/install.sh +9 -252
  32. package/bin/runbook/codex/agent.json +461 -0
  33. package/bin/runbook/codex/hooks-lib.sh +17 -4
  34. package/bin/runbook/codex/install.sh +0 -4
  35. package/bin/runbook/codex/run.sh +16 -235
  36. package/bin/runbook/copilot/agent.json +185 -0
  37. package/bin/runbook/copilot/install.sh +45 -63
  38. package/bin/runbook/cursor/agent.json +137 -0
  39. package/bin/runbook/cursor/install.sh +8 -35
  40. package/bin/runbook/deepseek-harness/agent.json +163 -0
  41. package/bin/runbook/deepseek-harness/run.sh +20 -59
  42. package/bin/runbook/image-window/index.ts +14 -0
  43. package/bin/runbook/image-window/window.d.ts +19 -0
  44. package/bin/runbook/image-window/window.js +140 -0
  45. package/bin/runbook/lib.sh +41 -0
  46. package/bin/runbook/opencode/agent.json +158 -0
  47. package/bin/runbook/opencode/install.sh +9 -183
  48. package/bin/runbook/opencode/opencode-plugin.d.ts +16 -0
  49. package/bin/runbook/opencode/subconscious-image-window.ts +24 -0
  50. package/bin/runbook/pi/agent.json +216 -0
  51. package/bin/runbook/pi/install.sh +18 -44
  52. package/bin/runbook/pi/run.sh +6 -18
  53. package/bin/runbook/pi/subconscious-compaction.ts +71 -49
  54. package/bin/runbook/shared.json +58 -0
  55. package/bin/runbook/subconscious-code/agent.json +156 -0
  56. package/bin/sessions.js +173 -58
  57. package/bin/tui.js +104 -32
  58. package/bin/update-check.js +54 -21
  59. package/bin/upgrade.js +67 -43
  60. package/bin/usage.js +47 -24
  61. package/bin/windows/agents.js +141 -37
  62. package/bin/windows/common.js +36 -25
  63. package/bin/windows/install.js +116 -34
  64. package/bin/windows/launch.js +260 -77
  65. package/bin/windows/pi-compaction.ts +68 -13
  66. package/bin/windows/process.js +210 -57
  67. package/bin/windows/setup.js +251 -56
  68. package/package.json +9 -4
  69. package/bin/registry.generated.json +0 -406
  70. package/bin/runbook/claude-code/run.sh +0 -254
  71. package/bin/runbook/model-capabilities.generated.sh +0 -9
  72. package/bin/runbook/opencode/provider.sh +0 -93
  73. package/bin/runbook/opencode/run.sh +0 -99
  74. package/bin/runbook/opencode/subconscious-compaction.ts +0 -100
  75. package/bin/runbook/subconscious-code/run.sh +0 -21
  76. package/bin/windows/claude.js +0 -71
@@ -1,125 +1,21 @@
1
1
  #!/usr/bin/env bash
2
- # ── Subconscious API Gateway — Claude Code setup ──────────────────────────────
3
- # Point Claude Code at your gateway. Claude reads env vars, so the "install"
4
- # writes them to ~/.claude/subconscious-gateway.env and `use` launches claude.
2
+ # ── Subconscious API Gateway — Claude Code leftovers ──────────────────────────
3
+ # Claude Code is launch-only: `subc claude` passes everything as env and flags
4
+ # and writes nothing. Older persistent setups wrote
5
+ # ~/.claude/subconscious-gateway.env; this script reports and removes it.
5
6
  #
6
- # Quick start:
7
- # ./install.sh --gateway-url https://your-gateway.example --api-key sk-gw-...
8
- # ./install.sh use # launches claude with gateway env loaded
9
- # ./install.sh use -- --continue # pass args through to claude
10
- #
11
- # Or source env into your shell:
12
- # source <(./install.sh env) # load ANTHROPIC_BASE_URL etc.
13
- # source <(./install.sh unset) # remove ANTHROPIC_BASE_URL etc.
14
- #
15
- # ./install.sh status # show current config
16
- # ./install.sh uninstall # remove env file
17
- #
18
- # ── What this does under the hood ────────────────────────────────────────────
19
- # Equivalent manual setup (no script needed):
20
- #
21
- # export ANTHROPIC_BASE_URL=https://your-gateway.example
22
- # export ANTHROPIC_AUTH_TOKEN=sk-gw-...
23
- # export ANTHROPIC_MODEL=subconscious/glm-5.3-marathon
24
- # export ANTHROPIC_SMALL_FAST_MODEL=subconscious/glm-5.3-marathon
25
- # export CLAUDE_CODE_SUBAGENT_MODEL=subconscious/glm-5.3-marathon
26
- # export CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS=4
27
- # export CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1
28
- # export CLAUDE_CODE_AUTO_COMPACT_WINDOW=1000000
29
- # export CLAUDE_CODE_MAX_CONTEXT_TOKENS=3000000
30
- # # AUTO_COMPACT_WINDOW range 100000–1000000 (leave on; TIMRUN keys rarely hit it):
31
- # # https://code.claude.com/docs/en/env-vars
32
- # # https://code.claude.com/docs/en/context-window#set-the-auto-compact-window
33
- # export CLAUDE_CODE_ENABLE_TELEMETRY=1
34
- # export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
35
- # export OTEL_LOGS_EXPORTER=otlp
36
- # export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
37
- # export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://your-gateway.example/v1/logs
38
- # export OTEL_EXPORTER_OTLP_HEADERS="x-api-key=sk-gw-..."
39
- # export OTEL_EXPORTER_OTLP_TIMEOUT=2000
40
- # export OTEL_LOGS_EXPORT_INTERVAL=2000
41
- # claude
7
+ # subc claude status
8
+ # subc claude uninstall
42
9
  #
43
10
  # Claude Code sends native x-claude-code-session-id headers, so the gateway
44
- # correlates requests automatically. OTEL api_request logs → Claude Code-only
45
- # POST /v1/logs back-fill query_source (not a general logs API):
46
- # https://code.claude.com/docs/en/monitoring-usage#api-request-event
11
+ # correlates requests without help from subc.
47
12
  # ─────────────────────────────────────────────────────────────────────────────
48
13
 
49
14
  set -euo pipefail
50
15
 
51
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
52
-
53
- # Load shared env from SUBC_ENV_FILE, or a sibling .env / env.example.
54
- SHARED_ENV="${SUBC_ENV_FILE:-${SCRIPT_DIR}/../.env}"
55
- [[ -f "$SHARED_ENV" ]] || SHARED_ENV="${SCRIPT_DIR}/../env.example"
56
- if [[ -f "$SHARED_ENV" ]]; then set -a; source "$SHARED_ENV"; set +a; fi
57
-
58
16
  CLAUDE_DIR="${HOME}/.claude"
59
17
  ENV_FILE="${CLAUDE_DIR}/subconscious-gateway.env"
60
- DEFAULT_MODEL="subconscious/glm-5.3-marathon"
61
- DEFAULT_COMPACT_WINDOW="1000000"
62
- DEFAULT_MAX_CONTEXT_TOKENS="3000000"
63
- DEFAULT_MAX_CONCURRENT_SUBAGENTS="4"
64
- DEFAULT_MAX_SUBAGENT_SPAWN_DEPTH="1"
65
-
66
- GATEWAY_URL="${GATEWAY_URL:-}"
67
- API_KEY="${CLAUDE_CODE_API_KEY:-${API_KEY:-}}"
68
- MODEL="${MODEL:-$DEFAULT_MODEL}"
69
- COMPACT_WINDOW="${CLAUDE_CODE_AUTO_COMPACT_WINDOW:-${COMPACT_WINDOW:-$DEFAULT_COMPACT_WINDOW}}"
70
- MAX_CONTEXT_TOKENS="${CLAUDE_CODE_MAX_CONTEXT_TOKENS:-${MAX_CONTEXT_TOKENS:-$DEFAULT_MAX_CONTEXT_TOKENS}}"
71
- MAX_CONCURRENT_SUBAGENTS="${MAX_CONCURRENT_SUBAGENTS:-$DEFAULT_MAX_CONCURRENT_SUBAGENTS}"
72
- MAX_SUBAGENT_SPAWN_DEPTH="${MAX_SUBAGENT_SPAWN_DEPTH:-$DEFAULT_MAX_SUBAGENT_SPAWN_DEPTH}"
73
-
74
- PICKER_MODELS=()
75
- if [[ -n "${SUBCONSCIOUS_MODELS:-}" ]]; then
76
- while IFS= read -r picker_model; do
77
- [[ -n "$picker_model" ]] && PICKER_MODELS+=("$picker_model")
78
- done <<< "$SUBCONSCIOUS_MODELS"
79
- fi
80
-
81
- picker_model_at() {
82
- local index="$1"
83
- local count="${#PICKER_MODELS[@]}"
84
- if [[ "$count" -eq 0 ]]; then
85
- printf '%s' "$MODEL"
86
- return
87
- fi
88
- if [[ "$index" -ge "$count" ]]; then
89
- index=$((count - 1))
90
- fi
91
- printf '%s' "${PICKER_MODELS[$index]}"
92
- }
93
-
94
- in_picker_catalog() {
95
- local candidate="$1" existing
96
- [[ -z "$candidate" ]] && return 1
97
- [[ "${#PICKER_MODELS[@]}" -eq 0 ]] && return 0
98
- for existing in "${PICKER_MODELS[@]}"; do
99
- [[ "$existing" == "$candidate" ]] && return 0
100
- done
101
- return 1
102
- }
103
-
104
- if [[ "${#PICKER_MODELS[@]}" -gt 0 ]]; then
105
- in_picker_catalog "${ANTHROPIC_DEFAULT_OPUS_MODEL:-}" || ANTHROPIC_DEFAULT_OPUS_MODEL=""
106
- in_picker_catalog "${ANTHROPIC_DEFAULT_SONNET_MODEL:-}" || ANTHROPIC_DEFAULT_SONNET_MODEL=""
107
- in_picker_catalog "${ANTHROPIC_DEFAULT_HAIKU_MODEL:-}" || ANTHROPIC_DEFAULT_HAIKU_MODEL=""
108
- fi
109
-
110
- DEFAULT_OPUS_MODEL="$(picker_model_at 0)"
111
- DEFAULT_SONNET_MODEL="$(picker_model_at 1)"
112
- DEFAULT_HAIKU_MODEL="$(picker_model_at 2)"
113
- OPUS_MODEL="${ANTHROPIC_DEFAULT_OPUS_MODEL:-$DEFAULT_OPUS_MODEL}"
114
- OPUS_MODEL_NAME="${ANTHROPIC_DEFAULT_OPUS_MODEL_NAME:-$OPUS_MODEL}"
115
- OPUS_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION:-Subconscious model ${OPUS_MODEL}}"
116
- SONNET_MODEL="${ANTHROPIC_DEFAULT_SONNET_MODEL:-$DEFAULT_SONNET_MODEL}"
117
- SONNET_MODEL_NAME="${ANTHROPIC_DEFAULT_SONNET_MODEL_NAME:-$SONNET_MODEL}"
118
- SONNET_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION:-Subconscious model ${SONNET_MODEL}}"
119
- HAIKU_MODEL="${ANTHROPIC_DEFAULT_HAIKU_MODEL:-$DEFAULT_HAIKU_MODEL}"
120
- HAIKU_MODEL_NAME="${ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME:-$HAIKU_MODEL}"
121
- HAIKU_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION:-Subconscious model ${HAIKU_MODEL}}"
122
- COMMAND="install"
18
+ COMMAND="status"
123
19
 
124
20
  usage() {
125
21
  cat <<'EOF'
@@ -135,38 +31,14 @@ EOF
135
31
 
136
32
  while [[ $# -gt 0 ]]; do
137
33
  case "$1" in
138
- install|use|env|unset|uninstall|status|help)
34
+ uninstall|status|help)
139
35
  COMMAND="$1"
140
36
  shift
141
37
  ;;
142
- --gateway-url)
143
- GATEWAY_URL="${2:-}"
144
- shift 2
145
- ;;
146
- --api-key)
147
- API_KEY="${2:-}"
148
- shift 2
149
- ;;
150
- --model)
151
- MODEL="${2:-}"
152
- shift 2
153
- ;;
154
- --compact-window)
155
- COMPACT_WINDOW="${2:-}"
156
- shift 2
157
- ;;
158
- --max-context-tokens)
159
- MAX_CONTEXT_TOKENS="${2:-}"
160
- shift 2
161
- ;;
162
38
  -h|--help)
163
39
  usage
164
40
  exit 0
165
41
  ;;
166
- --)
167
- shift
168
- break
169
- ;;
170
42
  *)
171
43
  echo "unknown argument: $1" >&2
172
44
  usage >&2
@@ -175,92 +47,6 @@ while [[ $# -gt 0 ]]; do
175
47
  esac
176
48
  done
177
49
 
178
- # Optional CLAUDE_GATEWAY_URL in shared .env overrides GATEWAY_URL for Claude only.
179
- resolve_claude_gateway_url() {
180
- printf '%s' "${CLAUDE_GATEWAY_URL:-$GATEWAY_URL}"
181
- }
182
-
183
- write_env() {
184
- local effective_gateway_url
185
- effective_gateway_url="$(resolve_claude_gateway_url)"
186
- mkdir -p "$CLAUDE_DIR"
187
- umask 077
188
- cat >"$ENV_FILE" <<EOF
189
- # Generated by subc — do not commit secrets.
190
- export ANTHROPIC_BASE_URL="${effective_gateway_url}"
191
- export ANTHROPIC_AUTH_TOKEN="${API_KEY}"
192
- export ANTHROPIC_MODEL="${MODEL}"
193
- export ANTHROPIC_SMALL_FAST_MODEL="${MODEL}"
194
- export ANTHROPIC_DEFAULT_OPUS_MODEL="${OPUS_MODEL}"
195
- export ANTHROPIC_DEFAULT_OPUS_MODEL_NAME="${OPUS_MODEL_NAME}"
196
- export ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION="${OPUS_MODEL_DESCRIPTION}"
197
- export ANTHROPIC_DEFAULT_SONNET_MODEL="${SONNET_MODEL}"
198
- export ANTHROPIC_DEFAULT_SONNET_MODEL_NAME="${SONNET_MODEL_NAME}"
199
- export ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION="${SONNET_MODEL_DESCRIPTION}"
200
- export ANTHROPIC_DEFAULT_HAIKU_MODEL="${HAIKU_MODEL}"
201
- export ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME="${HAIKU_MODEL_NAME}"
202
- export ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION="${HAIKU_MODEL_DESCRIPTION}"
203
- export CLAUDE_CODE_SUBAGENT_MODEL="${CLAUDE_CODE_SUBAGENT_MODEL:-$MODEL}"
204
- export CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS="${MAX_CONCURRENT_SUBAGENTS}"
205
- export CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH="${MAX_SUBAGENT_SPAWN_DEPTH}"
206
- export CLAUDE_CODE_AUTO_COMPACT_WINDOW="${COMPACT_WINDOW}"
207
- export CLAUDE_CODE_MAX_CONTEXT_TOKENS="${MAX_CONTEXT_TOKENS}"
208
- export CLAUDE_CODE_ENABLE_TELEMETRY=1
209
- export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
210
- export ENABLE_CLAUDEAI_MCP_SERVERS=false
211
- # Claude Code purpose attribution only (api_request → /v1/logs):
212
- # https://code.claude.com/docs/en/monitoring-usage#api-request-event
213
- export OTEL_LOGS_EXPORTER=otlp
214
- export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
215
- export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="${effective_gateway_url%/}/v1/logs"
216
- export OTEL_EXPORTER_OTLP_HEADERS="x-api-key=${API_KEY}"
217
- export OTEL_EXPORTER_OTLP_TIMEOUT=2000
218
- export OTEL_LOGS_EXPORT_INTERVAL=2000
219
- EOF
220
- chmod 600 "$ENV_FILE"
221
- }
222
-
223
- print_env_exports() {
224
- if [[ ! -f "$ENV_FILE" ]]; then
225
- echo "env file not found: $ENV_FILE" >&2
226
- echo "Launch Claude with: subc claude" >&2
227
- return 1
228
- fi
229
- cat "$ENV_FILE"
230
- }
231
-
232
- print_env_unsets() {
233
- cat <<'EOF'
234
- unset ANTHROPIC_BASE_URL
235
- unset ANTHROPIC_AUTH_TOKEN
236
- unset ANTHROPIC_MODEL
237
- unset ANTHROPIC_SMALL_FAST_MODEL
238
- unset ANTHROPIC_DEFAULT_OPUS_MODEL
239
- unset ANTHROPIC_DEFAULT_OPUS_MODEL_NAME
240
- unset ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION
241
- unset ANTHROPIC_DEFAULT_SONNET_MODEL
242
- unset ANTHROPIC_DEFAULT_SONNET_MODEL_NAME
243
- unset ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION
244
- unset ANTHROPIC_DEFAULT_HAIKU_MODEL
245
- unset ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME
246
- unset ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION
247
- unset CLAUDE_CODE_SUBAGENT_MODEL
248
- unset CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS
249
- unset CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH
250
- unset CLAUDE_CODE_AUTO_COMPACT_WINDOW
251
- unset CLAUDE_CODE_MAX_CONTEXT_TOKENS
252
- unset CLAUDE_CODE_ENABLE_TELEMETRY
253
- unset CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC
254
- unset ENABLE_CLAUDEAI_MCP_SERVERS
255
- unset OTEL_LOGS_EXPORTER
256
- unset OTEL_EXPORTER_OTLP_PROTOCOL
257
- unset OTEL_EXPORTER_OTLP_LOGS_ENDPOINT
258
- unset OTEL_EXPORTER_OTLP_HEADERS
259
- unset OTEL_EXPORTER_OTLP_TIMEOUT
260
- unset OTEL_LOGS_EXPORT_INTERVAL
261
- EOF
262
- }
263
-
264
50
  status() {
265
51
  echo "scope: user"
266
52
  echo "claude dir: $CLAUDE_DIR"
@@ -287,35 +73,6 @@ status() {
287
73
  }
288
74
 
289
75
  case "$COMMAND" in
290
- install)
291
- if [[ -z "$GATEWAY_URL" || -z "$API_KEY" ]]; then
292
- echo "--gateway-url and --api-key are required for install" >&2
293
- exit 1
294
- fi
295
- write_env
296
- echo "Wrote leftover env file $ENV_FILE"
297
- echo "Launch Claude with: subc claude"
298
- ;;
299
- use)
300
- if [[ ! -f "$ENV_FILE" ]]; then
301
- echo "env file not found: $ENV_FILE" >&2
302
- echo "Launch Claude with: subc claude" >&2
303
- exit 1
304
- fi
305
- # shellcheck disable=SC1090
306
- source "$ENV_FILE"
307
- if ! command -v claude >/dev/null 2>&1; then
308
- echo "claude CLI not found in PATH" >&2
309
- exit 1
310
- fi
311
- exec claude "$@"
312
- ;;
313
- env)
314
- print_env_exports
315
- ;;
316
- unset)
317
- print_env_unsets
318
- ;;
319
76
  uninstall)
320
77
  rm -f "$ENV_FILE"
321
78
  echo "Removed $ENV_FILE"