@openagents-org/agent-launcher 0.2.173 → 0.2.175
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.
- package/icons/commandcode.svg +3 -0
- package/package.json +1 -1
- package/registry.json +259 -35
- package/src/adapters/base.js +19 -0
- package/src/adapters/codex.js +41 -1
- package/src/adapters/commandcode-stream.js +405 -0
- package/src/adapters/commandcode.js +853 -0
- package/src/adapters/hermes.js +56 -0
- package/src/adapters/index.js +4 -1
- package/src/adapters/kimi-stream.js +360 -0
- package/src/adapters/kimi.js +724 -13
- package/src/adapters/openclaw.js +28 -2
- package/src/adapters/opencode.js +86 -0
- package/src/adapters/pi-stream.js +28 -0
- package/src/adapters/pi.js +21 -2
- package/src/adapters/workspace-prompt.js +42 -8
- package/src/cli.js +182 -6
- package/src/config.js +13 -2
- package/src/daemon.js +192 -59
- package/src/env.js +22 -2
- package/src/index.js +13 -0
- package/src/installer.js +69 -1
- package/src/paths.js +315 -11
- package/src/probe.js +29 -8
- package/src/registry.js +4 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 137 137" role="img" style="flex:none;line-height:1">
|
|
2
|
+
<title>Command Code</title>
|
|
3
|
+
<path d="m0 66.7959c0-31.4879 0-47.2318 9.78204-57.01386 9.78206-9.78204 25.52596-9.78204 57.01396-9.78204h2.5357c31.4883 0 47.2323 0 57.0143 9.78204 9.782 9.78206 9.782 25.52596 9.782 57.01396v2.5357c0 31.4883 0 47.2323-9.782 57.0143s-25.526 9.782-57.0144 9.782h-2.5357c-31.4879 0-47.2318 0-57.01386-9.782-9.78204-9.782-9.78204-25.526-9.78204-57.0144z" fill="#000"/><path d="m69.3317 5.56633h-2.5357c-15.9014 0-27.2674.01182-35.905 1.17312-8.4775 1.13977-13.4886 3.29415-17.173 6.97855s-5.83878 8.6955-6.97855 17.173c-1.1613 8.6376-1.17312 20.0036-1.17312 35.9049v2.5357c0 15.9014.01182 27.2674 1.17312 35.9054 1.13977 8.477 3.29415 13.488 6.97855 17.173 3.6844 3.684 8.6955 5.838 17.173 6.978 8.6376 1.161 20.0036 1.173 35.9049 1.173h2.5357c15.9014 0 27.2674-.012 35.9054-1.173 8.477-1.14 13.488-3.294 17.173-6.978 3.684-3.685 5.838-8.696 6.978-17.173 1.161-8.638 1.173-20.004 1.173-35.9053v-2.5357c0-15.9014-.012-27.2674-1.173-35.905-1.14-8.4775-3.294-13.4886-6.978-17.173-3.685-3.6844-8.696-5.83878-17.173-6.97855-8.638-1.1613-20.004-1.17312-35.9053-1.17312zm-59.54966 4.21571c-9.78204 9.78206-9.78204 25.52596-9.78204 57.01386v2.5357c0 31.4884 0 47.2324 9.78204 57.0144 9.78206 9.782 25.52596 9.782 57.01386 9.782h2.5357c31.4884 0 47.2324 0 57.0144-9.782s9.782-25.526 9.782-57.0143v-2.5357c0-31.488 0-47.2319-9.782-57.01396-9.782-9.78204-25.526-9.78204-57.0143-9.78204h-2.5357c-31.488 0-47.2319 0-57.01396 9.78204z" fill="#000" fill-rule="evenodd"/><path d="m93.6604 26.1784c-8.982 0-16.2887 7.3067-16.2887 16.2888v6.9809h-18.6158v-6.9809c0-8.9821-7.3067-16.2888-16.2887-16.2888-8.9821 0-16.2888 7.3067-16.2888 16.2888s7.3067 16.2887 16.2888 16.2887h6.9809v18.6158h-6.9809c-8.9821 0-16.2888 7.3067-16.2888 16.2888 0 8.9825 7.3067 16.2885 16.2888 16.2885 8.982 0 16.2887-7.306 16.2887-16.2885v-6.981h18.6158v6.981c0 8.9825 7.3067 16.2885 16.2887 16.2885 8.9826 0 16.2886-7.306 16.2886-16.2885 0-8.9821-7.306-16.2888-16.2886-16.2888h-6.9809v-18.6158h6.9809c8.9826 0 16.2886-7.3066 16.2886-16.2887s-7.306-16.2888-16.2886-16.2888zm-6.9809 23.2697v-6.9809c0-3.8628 3.1182-6.9809 6.9809-6.9809 3.8628 0 6.9806 3.1181 6.9806 6.9809 0 3.8627-3.1178 6.9809-6.9806 6.9809zm-44.2123 0c-3.8628 0-6.9809-3.1182-6.9809-6.9809 0-3.8628 3.1181-6.9809 6.9809-6.9809 3.8627 0 6.9809 3.1181 6.9809 6.9809v6.9809zm16.2887 27.9236v-18.6158h18.6158v18.6158zm34.9045 23.2693c-3.8627 0-6.9809-3.1178-6.9809-6.9805v-6.981h6.9809c3.8628 0 6.9806 3.1182 6.9806 6.981 0 3.8627-3.1178 6.9805-6.9806 6.9805zm-51.1932 0c-3.8628 0-6.9809-3.1178-6.9809-6.9805 0-3.8628 3.1181-6.981 6.9809-6.981h6.9809v6.981c0 3.8627-3.1182 6.9805-6.9809 6.9805z" fill="#fff"/></svg>
|
package/package.json
CHANGED
package/registry.json
CHANGED
|
@@ -10,7 +10,11 @@
|
|
|
10
10
|
"open-source"
|
|
11
11
|
],
|
|
12
12
|
"builtin": true,
|
|
13
|
-
"support": {
|
|
13
|
+
"support": {
|
|
14
|
+
"install": true,
|
|
15
|
+
"workspace": true,
|
|
16
|
+
"collaboration": true
|
|
17
|
+
},
|
|
14
18
|
"install": {
|
|
15
19
|
"binary": "aider",
|
|
16
20
|
"macos": "curl -LsSf https://aider.chat/install.sh | sh",
|
|
@@ -75,7 +79,11 @@
|
|
|
75
79
|
"vscode"
|
|
76
80
|
],
|
|
77
81
|
"builtin": true,
|
|
78
|
-
"support": {
|
|
82
|
+
"support": {
|
|
83
|
+
"install": true,
|
|
84
|
+
"workspace": true,
|
|
85
|
+
"collaboration": true
|
|
86
|
+
},
|
|
79
87
|
"install": {
|
|
80
88
|
"binary": "amp",
|
|
81
89
|
"macos": "curl -fsSL https://ampcode.com/install.sh | bash",
|
|
@@ -119,7 +127,11 @@
|
|
|
119
127
|
],
|
|
120
128
|
"featured": true,
|
|
121
129
|
"order": 1,
|
|
122
|
-
"support": {
|
|
130
|
+
"support": {
|
|
131
|
+
"install": true,
|
|
132
|
+
"workspace": true,
|
|
133
|
+
"collaboration": true
|
|
134
|
+
},
|
|
123
135
|
"builtin": true,
|
|
124
136
|
"install": {
|
|
125
137
|
"binary": "claude",
|
|
@@ -143,7 +155,8 @@
|
|
|
143
155
|
},
|
|
144
156
|
"check_ready": {
|
|
145
157
|
"env_vars": [
|
|
146
|
-
"ANTHROPIC_API_KEY"
|
|
158
|
+
"ANTHROPIC_API_KEY",
|
|
159
|
+
"ANTHROPIC_AUTH_TOKEN"
|
|
147
160
|
],
|
|
148
161
|
"creds_file": "~/.claude/sessions",
|
|
149
162
|
"creds_key": null,
|
|
@@ -152,8 +165,37 @@
|
|
|
152
165
|
"login_command": "claude login",
|
|
153
166
|
"alt_check": "claude --print hi"
|
|
154
167
|
},
|
|
155
|
-
"probe": {
|
|
156
|
-
|
|
168
|
+
"probe": {
|
|
169
|
+
"args": [
|
|
170
|
+
"--print",
|
|
171
|
+
"hi"
|
|
172
|
+
],
|
|
173
|
+
"timeout_s": 120
|
|
174
|
+
},
|
|
175
|
+
"env_config": [],
|
|
176
|
+
"resolve_env": {
|
|
177
|
+
"rules": [
|
|
178
|
+
{
|
|
179
|
+
"from": "LLM_API_KEY",
|
|
180
|
+
"to": "ANTHROPIC_AUTH_TOKEN",
|
|
181
|
+
"if_base_url_contains": "://"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"from": "LLM_API_KEY",
|
|
185
|
+
"to": "ANTHROPIC_API_KEY",
|
|
186
|
+
"unless_base_url_contains": "://"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"from": "LLM_BASE_URL",
|
|
190
|
+
"to": "ANTHROPIC_BASE_URL"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"from": "LLM_MODEL",
|
|
194
|
+
"to": "ANTHROPIC_MODEL"
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
"protocol": "anthropic"
|
|
157
199
|
},
|
|
158
200
|
{
|
|
159
201
|
"name": "cline",
|
|
@@ -166,7 +208,11 @@
|
|
|
166
208
|
"autonomous"
|
|
167
209
|
],
|
|
168
210
|
"builtin": true,
|
|
169
|
-
"support": {
|
|
211
|
+
"support": {
|
|
212
|
+
"install": true,
|
|
213
|
+
"workspace": true,
|
|
214
|
+
"collaboration": false
|
|
215
|
+
},
|
|
170
216
|
"install": {
|
|
171
217
|
"binary": "cline",
|
|
172
218
|
"requires": [
|
|
@@ -230,7 +276,11 @@
|
|
|
230
276
|
],
|
|
231
277
|
"featured": true,
|
|
232
278
|
"order": 3,
|
|
233
|
-
"support": {
|
|
279
|
+
"support": {
|
|
280
|
+
"install": true,
|
|
281
|
+
"workspace": true,
|
|
282
|
+
"collaboration": true
|
|
283
|
+
},
|
|
234
284
|
"builtin": true,
|
|
235
285
|
"install": {
|
|
236
286
|
"binary": "codex",
|
|
@@ -305,7 +355,11 @@
|
|
|
305
355
|
"cli"
|
|
306
356
|
],
|
|
307
357
|
"order": 9,
|
|
308
|
-
"support": {
|
|
358
|
+
"support": {
|
|
359
|
+
"install": true,
|
|
360
|
+
"workspace": true,
|
|
361
|
+
"collaboration": false
|
|
362
|
+
},
|
|
309
363
|
"builtin": true,
|
|
310
364
|
"install": {
|
|
311
365
|
"binary": "copilot",
|
|
@@ -400,7 +454,11 @@
|
|
|
400
454
|
],
|
|
401
455
|
"check_ready": {
|
|
402
456
|
"binary": "agent",
|
|
403
|
-
"not_ready_message": "Cursor
|
|
457
|
+
"not_ready_message": "Cursor is installed but not signed in — run `cursor-agent login` on the device, or set a CURSOR_API_KEY from cursor.com/settings. Third-party or relay API keys do not work with Cursor.",
|
|
458
|
+
"env_vars": [
|
|
459
|
+
"CURSOR_API_KEY"
|
|
460
|
+
],
|
|
461
|
+
"login_command": "cursor-agent login"
|
|
404
462
|
},
|
|
405
463
|
"resolve_env": {
|
|
406
464
|
"rules": [
|
|
@@ -413,7 +471,8 @@
|
|
|
413
471
|
"to": "CURSOR_MODEL"
|
|
414
472
|
}
|
|
415
473
|
]
|
|
416
|
-
}
|
|
474
|
+
},
|
|
475
|
+
"provider_locked": true
|
|
417
476
|
},
|
|
418
477
|
{
|
|
419
478
|
"name": "gemini",
|
|
@@ -427,7 +486,11 @@
|
|
|
427
486
|
"cli"
|
|
428
487
|
],
|
|
429
488
|
"builtin": true,
|
|
430
|
-
"support": {
|
|
489
|
+
"support": {
|
|
490
|
+
"install": true,
|
|
491
|
+
"workspace": true,
|
|
492
|
+
"collaboration": true
|
|
493
|
+
},
|
|
431
494
|
"install": {
|
|
432
495
|
"binary": "gemini",
|
|
433
496
|
"requires": [
|
|
@@ -470,7 +533,13 @@
|
|
|
470
533
|
"api_key": "API key detected"
|
|
471
534
|
}
|
|
472
535
|
},
|
|
473
|
-
"probe": {
|
|
536
|
+
"probe": {
|
|
537
|
+
"args": [
|
|
538
|
+
"-p",
|
|
539
|
+
"hi"
|
|
540
|
+
],
|
|
541
|
+
"timeout_s": 120
|
|
542
|
+
},
|
|
474
543
|
"env_config": []
|
|
475
544
|
},
|
|
476
545
|
{
|
|
@@ -484,7 +553,11 @@
|
|
|
484
553
|
"cli"
|
|
485
554
|
],
|
|
486
555
|
"builtin": true,
|
|
487
|
-
"support": {
|
|
556
|
+
"support": {
|
|
557
|
+
"install": true,
|
|
558
|
+
"workspace": true,
|
|
559
|
+
"collaboration": true
|
|
560
|
+
},
|
|
488
561
|
"install": {
|
|
489
562
|
"binary": "agy",
|
|
490
563
|
"macos": "curl -fsSL https://antigravity.google/cli/install.sh | bash",
|
|
@@ -586,7 +659,7 @@
|
|
|
586
659
|
{
|
|
587
660
|
"name": "nanoclaw",
|
|
588
661
|
"label": "NanoClaw",
|
|
589
|
-
"description": "Containerized agent runtime
|
|
662
|
+
"description": "Containerized agent runtime — each Agent Group runs in its own Docker container (Claude Agent SDK). Bridged to the Workspace via a native OpenAgents channel.",
|
|
590
663
|
"homepage": "https://github.com/nanocoai/nanoclaw",
|
|
591
664
|
"tags": [
|
|
592
665
|
"coding",
|
|
@@ -596,7 +669,11 @@
|
|
|
596
669
|
"open-source"
|
|
597
670
|
],
|
|
598
671
|
"builtin": true,
|
|
599
|
-
"support": {
|
|
672
|
+
"support": {
|
|
673
|
+
"install": true,
|
|
674
|
+
"workspace": true,
|
|
675
|
+
"collaboration": false
|
|
676
|
+
},
|
|
600
677
|
"install": {
|
|
601
678
|
"binary": "ncl",
|
|
602
679
|
"requires": [
|
|
@@ -632,7 +709,7 @@
|
|
|
632
709
|
"NANOCLAW_AGENT_GROUP"
|
|
633
710
|
],
|
|
634
711
|
"saved_env_key": "NANOCLAW_AGENT_GROUP",
|
|
635
|
-
"not_ready_message": "Set NANOCLAW_AGENT_GROUP (and NANOCLAW_HOME)
|
|
712
|
+
"not_ready_message": "Set NANOCLAW_AGENT_GROUP (and NANOCLAW_HOME) — press e to configure"
|
|
636
713
|
}
|
|
637
714
|
},
|
|
638
715
|
{
|
|
@@ -646,7 +723,11 @@
|
|
|
646
723
|
],
|
|
647
724
|
"featured": true,
|
|
648
725
|
"order": 2,
|
|
649
|
-
"support": {
|
|
726
|
+
"support": {
|
|
727
|
+
"install": true,
|
|
728
|
+
"workspace": true,
|
|
729
|
+
"collaboration": true
|
|
730
|
+
},
|
|
650
731
|
"builtin": true,
|
|
651
732
|
"install": {
|
|
652
733
|
"binary": "openclaw",
|
|
@@ -716,7 +797,7 @@
|
|
|
716
797
|
"OPENAI_API_KEY"
|
|
717
798
|
],
|
|
718
799
|
"saved_env_key": "LLM_API_KEY",
|
|
719
|
-
"not_ready_message": "Not configured
|
|
800
|
+
"not_ready_message": "Not configured — press e to configure"
|
|
720
801
|
}
|
|
721
802
|
},
|
|
722
803
|
{
|
|
@@ -790,14 +871,14 @@
|
|
|
790
871
|
],
|
|
791
872
|
"saved_env_key": "LLM_API_KEY",
|
|
792
873
|
"min_version": "1.17.0",
|
|
793
|
-
"not_ready_message": "Not configured
|
|
874
|
+
"not_ready_message": "Not configured — press e to configure"
|
|
794
875
|
}
|
|
795
876
|
},
|
|
796
877
|
{
|
|
797
878
|
"name": "kimi",
|
|
798
879
|
"label": "Kimi",
|
|
799
|
-
"description": "Kimi
|
|
800
|
-
"homepage": "https://
|
|
880
|
+
"description": "Kimi Code CLI — Moonshot AI's terminal coding agent.",
|
|
881
|
+
"homepage": "https://moonshotai.github.io/kimi-code",
|
|
801
882
|
"tags": [
|
|
802
883
|
"coding",
|
|
803
884
|
"moonshot",
|
|
@@ -805,14 +886,22 @@
|
|
|
805
886
|
],
|
|
806
887
|
"featured": true,
|
|
807
888
|
"order": 7,
|
|
808
|
-
"support": {
|
|
889
|
+
"support": {
|
|
890
|
+
"install": true,
|
|
891
|
+
"workspace": true,
|
|
892
|
+
"collaboration": true
|
|
893
|
+
},
|
|
809
894
|
"builtin": true,
|
|
810
895
|
"install": {
|
|
811
896
|
"binary": "kimi",
|
|
812
|
-
"
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
"
|
|
897
|
+
"requires": [
|
|
898
|
+
"nodejs"
|
|
899
|
+
],
|
|
900
|
+
"verify": "kimi --version",
|
|
901
|
+
"verify_win": "kimi --version",
|
|
902
|
+
"macos": "npm install -g @moonshot-ai/kimi-code",
|
|
903
|
+
"linux": "npm install -g @moonshot-ai/kimi-code",
|
|
904
|
+
"windows": "npm install -g @moonshot-ai/kimi-code"
|
|
816
905
|
},
|
|
817
906
|
"adapter": {
|
|
818
907
|
"module": "openagents.adapters.kimi",
|
|
@@ -824,8 +913,8 @@
|
|
|
824
913
|
"env_config": [
|
|
825
914
|
{
|
|
826
915
|
"name": "KIMI_API_KEY",
|
|
827
|
-
"description": "Moonshot/Kimi API key (also accepts MOONSHOT_API_KEY
|
|
828
|
-
"required":
|
|
916
|
+
"description": "Moonshot/Kimi API key (also accepts MOONSHOT_API_KEY). Leave blank to use `kimi login`.",
|
|
917
|
+
"required": false,
|
|
829
918
|
"password": true
|
|
830
919
|
},
|
|
831
920
|
{
|
|
@@ -849,8 +938,10 @@
|
|
|
849
938
|
"MOONSHOT_API_KEY"
|
|
850
939
|
],
|
|
851
940
|
"saved_env_key": "KIMI_API_KEY",
|
|
852
|
-
"
|
|
853
|
-
|
|
941
|
+
"login_command": "kimi login",
|
|
942
|
+
"not_ready_message": "Not configured — set an API key (press e) or run: kimi login"
|
|
943
|
+
},
|
|
944
|
+
"tagline": "Moonshot AI's Kimi Code CLI coding agent."
|
|
854
945
|
},
|
|
855
946
|
{
|
|
856
947
|
"name": "hermes",
|
|
@@ -865,11 +956,18 @@
|
|
|
865
956
|
],
|
|
866
957
|
"featured": true,
|
|
867
958
|
"order": 6,
|
|
868
|
-
"support": {
|
|
959
|
+
"support": {
|
|
960
|
+
"install": true,
|
|
961
|
+
"workspace": true,
|
|
962
|
+
"collaboration": true
|
|
963
|
+
},
|
|
869
964
|
"builtin": true,
|
|
870
965
|
"install": {
|
|
871
966
|
"binary": "hermes",
|
|
872
|
-
"requires": [
|
|
967
|
+
"requires": [
|
|
968
|
+
"python3",
|
|
969
|
+
"git"
|
|
970
|
+
],
|
|
873
971
|
"macos": "curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash -s -- --skip-setup",
|
|
874
972
|
"linux": "curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash -s -- --skip-setup",
|
|
875
973
|
"windows": "\"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoProfile -ExecutionPolicy Bypass -Command \"Invoke-RestMethod -UseBasicParsing 'https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1' | Invoke-Expression\""
|
|
@@ -882,7 +980,38 @@
|
|
|
882
980
|
"creds_no_parse": true,
|
|
883
981
|
"status_command": "hermes status",
|
|
884
982
|
"login_command": "hermes setup",
|
|
885
|
-
"not_ready_message": "Hermes not configured — run: hermes setup"
|
|
983
|
+
"not_ready_message": "Hermes not configured — run: hermes setup",
|
|
984
|
+
"env_vars": [
|
|
985
|
+
"OPENAI_API_KEY"
|
|
986
|
+
],
|
|
987
|
+
"saved_env_key": "LLM_API_KEY"
|
|
988
|
+
},
|
|
989
|
+
"env_config": [
|
|
990
|
+
{
|
|
991
|
+
"name": "LLM_API_KEY",
|
|
992
|
+
"description": "API key for a custom OpenAI-compatible endpoint (optional if you sign in with `hermes setup`)",
|
|
993
|
+
"required": false,
|
|
994
|
+
"password": true
|
|
995
|
+
},
|
|
996
|
+
{
|
|
997
|
+
"name": "LLM_BASE_URL",
|
|
998
|
+
"description": "Custom OpenAI-compatible base URL (leave empty to use Hermes's own provider login)",
|
|
999
|
+
"required": false,
|
|
1000
|
+
"placeholder": "https://api.openai.com/v1"
|
|
1001
|
+
},
|
|
1002
|
+
{
|
|
1003
|
+
"name": "LLM_MODEL",
|
|
1004
|
+
"description": "Model name served by the endpoint above",
|
|
1005
|
+
"required": false
|
|
1006
|
+
}
|
|
1007
|
+
],
|
|
1008
|
+
"resolve_env": {
|
|
1009
|
+
"rules": [
|
|
1010
|
+
{
|
|
1011
|
+
"from": "LLM_API_KEY",
|
|
1012
|
+
"to": "OPENAI_API_KEY"
|
|
1013
|
+
}
|
|
1014
|
+
]
|
|
886
1015
|
}
|
|
887
1016
|
},
|
|
888
1017
|
{
|
|
@@ -1136,7 +1265,11 @@
|
|
|
1136
1265
|
"headless"
|
|
1137
1266
|
],
|
|
1138
1267
|
"builtin": true,
|
|
1139
|
-
"support": {
|
|
1268
|
+
"support": {
|
|
1269
|
+
"install": true,
|
|
1270
|
+
"workspace": true,
|
|
1271
|
+
"collaboration": true
|
|
1272
|
+
},
|
|
1140
1273
|
"install": {
|
|
1141
1274
|
"binary": "dsh",
|
|
1142
1275
|
"npm_package": "@deepseek-ai/dsh",
|
|
@@ -1212,5 +1345,96 @@
|
|
|
1212
1345
|
}
|
|
1213
1346
|
]
|
|
1214
1347
|
}
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
"name": "commandcode",
|
|
1351
|
+
"label": "Command Code",
|
|
1352
|
+
"description": "Terminal coding agent that learns your coding taste, driven headlessly for workspace tasks",
|
|
1353
|
+
"homepage": "https://commandcode.ai",
|
|
1354
|
+
"tags": [
|
|
1355
|
+
"coding",
|
|
1356
|
+
"cli",
|
|
1357
|
+
"terminal",
|
|
1358
|
+
"headless"
|
|
1359
|
+
],
|
|
1360
|
+
"builtin": true,
|
|
1361
|
+
"support": {
|
|
1362
|
+
"install": true,
|
|
1363
|
+
"workspace": true,
|
|
1364
|
+
"collaboration": true
|
|
1365
|
+
},
|
|
1366
|
+
"install": {
|
|
1367
|
+
"binary": "command-code",
|
|
1368
|
+
"binary_aliases": [
|
|
1369
|
+
"commandcode",
|
|
1370
|
+
"cmdc"
|
|
1371
|
+
],
|
|
1372
|
+
"npm_package": "command-code",
|
|
1373
|
+
"requires": [
|
|
1374
|
+
"nodejs"
|
|
1375
|
+
],
|
|
1376
|
+
"verify": "command-code --version",
|
|
1377
|
+
"verify_win": "command-code --version",
|
|
1378
|
+
"macos": "npm install -g command-code",
|
|
1379
|
+
"linux": "npm install -g command-code",
|
|
1380
|
+
"windows": "npm install -g command-code"
|
|
1381
|
+
},
|
|
1382
|
+
"adapter": {
|
|
1383
|
+
"module": "openagents.adapters.commandcode",
|
|
1384
|
+
"class": "CommandCodeAdapter"
|
|
1385
|
+
},
|
|
1386
|
+
"launch": null,
|
|
1387
|
+
"env_config": [
|
|
1388
|
+
{
|
|
1389
|
+
"name": "COMMAND_CODE_API_KEY",
|
|
1390
|
+
"description": "Command Code API key for headless/CI auth. Optional — leave blank if you signed in with `command-code login` instead.",
|
|
1391
|
+
"required": false,
|
|
1392
|
+
"password": true
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
"name": "COMMANDCODE_MODEL",
|
|
1396
|
+
"description": "Model id to run on. Leave empty for the account default; BYOK models are prefixed with their provider (for example openrouter/deepseek-v4-flash).",
|
|
1397
|
+
"required": false,
|
|
1398
|
+
"placeholder": "claude-sonnet-4-6"
|
|
1399
|
+
},
|
|
1400
|
+
{
|
|
1401
|
+
"name": "COMMANDCODE_EFFORT",
|
|
1402
|
+
"description": "Reasoning effort for each run. Leave empty for the model default.",
|
|
1403
|
+
"required": false,
|
|
1404
|
+
"options": [
|
|
1405
|
+
"low",
|
|
1406
|
+
"medium",
|
|
1407
|
+
"high"
|
|
1408
|
+
]
|
|
1409
|
+
},
|
|
1410
|
+
{
|
|
1411
|
+
"name": "COMMANDCODE_MAX_TURNS",
|
|
1412
|
+
"description": "Maximum tool-use turns per message. Leave empty for the CLI default of 100; a run that hits the limit still returns its partial answer.",
|
|
1413
|
+
"required": false,
|
|
1414
|
+
"placeholder": "100"
|
|
1415
|
+
}
|
|
1416
|
+
],
|
|
1417
|
+
"check_ready": {
|
|
1418
|
+
"min_version": "1.0.0",
|
|
1419
|
+
"env_vars": [
|
|
1420
|
+
"COMMAND_CODE_API_KEY"
|
|
1421
|
+
],
|
|
1422
|
+
"saved_env_key": "COMMAND_CODE_API_KEY",
|
|
1423
|
+
"login_command": "command-code login",
|
|
1424
|
+
"not_ready_message": "Not configured — sign in with `command-code login`, or set COMMAND_CODE_API_KEY (press e)",
|
|
1425
|
+
"unreadable_message": "Command Code credentials could not be read. Sign in again with `command-code login`, or re-enter COMMAND_CODE_API_KEY in the Configure screen."
|
|
1426
|
+
},
|
|
1427
|
+
"resolve_env": {
|
|
1428
|
+
"rules": [
|
|
1429
|
+
{
|
|
1430
|
+
"from": "LLM_API_KEY",
|
|
1431
|
+
"to": "COMMAND_CODE_API_KEY"
|
|
1432
|
+
},
|
|
1433
|
+
{
|
|
1434
|
+
"from": "LLM_MODEL",
|
|
1435
|
+
"to": "COMMANDCODE_MODEL"
|
|
1436
|
+
}
|
|
1437
|
+
]
|
|
1438
|
+
}
|
|
1215
1439
|
}
|
|
1216
1440
|
]
|
package/src/adapters/base.js
CHANGED
|
@@ -30,6 +30,7 @@ const {
|
|
|
30
30
|
REASON,
|
|
31
31
|
classifyJoinError,
|
|
32
32
|
classifyHeartbeatError,
|
|
33
|
+
httpStatusOf,
|
|
33
34
|
} = require('./health-status');
|
|
34
35
|
|
|
35
36
|
const DEFAULT_ENDPOINT = 'https://workspace-endpoint.openagents.org';
|
|
@@ -661,11 +662,29 @@ class BaseAdapter {
|
|
|
661
662
|
messages = result.messages;
|
|
662
663
|
rawCursor = result.cursor;
|
|
663
664
|
composingActive = !!result.composing;
|
|
665
|
+
this._pollAuthFailStreak = 0;
|
|
664
666
|
if (pollCount <= 3 || pollCount % 20 === 0) {
|
|
665
667
|
this._log(`Poll #${pollCount}: ${messages.length} messages, cursor=${rawCursor || 'none'}${composingActive ? ' composing' : ''}`);
|
|
666
668
|
}
|
|
667
669
|
} catch (e) {
|
|
668
670
|
this._log(`Poll #${pollCount} failed: ${e.message} \nStack: ${e.stack}`);
|
|
671
|
+
// A rejected credential never heals by retrying with the same token —
|
|
672
|
+
// it means the device was re-paired/unpaired and this adapter is
|
|
673
|
+
// running on a revoked one. After a few consecutive rejections (not
|
|
674
|
+
// one: a server redeploy can 401 transiently), surface a hard error
|
|
675
|
+
// so status/heartbeat stop claiming "running" while nothing works.
|
|
676
|
+
// The daemon's credential watch restarts the adapter when a fresh
|
|
677
|
+
// token lands on disk, which also clears this state.
|
|
678
|
+
const sc = httpStatusOf(e);
|
|
679
|
+
if (sc === 401 || sc === 403 || /invalid workspace credentials/i.test(e.message || '')) {
|
|
680
|
+
this._pollAuthFailStreak = (this._pollAuthFailStreak || 0) + 1;
|
|
681
|
+
if (this._pollAuthFailStreak >= 3) {
|
|
682
|
+
this._reportStatus(
|
|
683
|
+
REASON.WORKSPACE_JOIN_FAILED,
|
|
684
|
+
'Workspace rejected this agent\'s credentials — re-pair the device or reconnect the agent to the workspace',
|
|
685
|
+
);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
669
688
|
await this._sleep(5000);
|
|
670
689
|
continue;
|
|
671
690
|
}
|
package/src/adapters/codex.js
CHANGED
|
@@ -490,7 +490,47 @@ class CodexAdapter extends BaseAdapter {
|
|
|
490
490
|
const raw = String(errorMessage || '').trim()
|
|
491
491
|
|| stderrTail
|
|
492
492
|
|| (exitCode ? `codex exited with code ${exitCode}` : '');
|
|
493
|
-
|
|
493
|
+
const detail = CodexAdapter._explain(CodexAdapter._unwrap(raw));
|
|
494
|
+
return CodexAdapter._redact(detail).slice(0, 500).trim();
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* Unwrap the API's JSON error envelope so the user reads the sentence, not
|
|
499
|
+
* the transport. The backend rejects a run with a body like
|
|
500
|
+
* `{"detail":"The 'gpt-5.6-sol' model requires a newer version of Codex."}`
|
|
501
|
+
* and it was surfaced verbatim, braces and all (#649).
|
|
502
|
+
*/
|
|
503
|
+
static _unwrap(raw) {
|
|
504
|
+
const text = String(raw || '').trim();
|
|
505
|
+
if (!text.startsWith('{') && !text.startsWith('[')) return text;
|
|
506
|
+
try {
|
|
507
|
+
const parsed = JSON.parse(text);
|
|
508
|
+
for (const key of ['detail', 'message', 'error']) {
|
|
509
|
+
const v = parsed && parsed[key];
|
|
510
|
+
if (typeof v === 'string' && v.trim()) return v.trim();
|
|
511
|
+
// OpenAI also nests as { error: { message } }.
|
|
512
|
+
if (v && typeof v.message === 'string' && v.message.trim()) return v.message.trim();
|
|
513
|
+
}
|
|
514
|
+
} catch {}
|
|
515
|
+
return text;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Add the missing half of a backend rejection: what to actually do about it.
|
|
520
|
+
*
|
|
521
|
+
* "Please upgrade to the latest app or CLI" is true but unactionable inside a
|
|
522
|
+
* workspace chat — the user is not at a terminal and does not necessarily
|
|
523
|
+
* know the CLI is theirs to update. Name where the update button lives. The
|
|
524
|
+
* match is on the backend's own wording, so an unrelated failure is passed
|
|
525
|
+
* through untouched.
|
|
526
|
+
*/
|
|
527
|
+
static _explain(detail) {
|
|
528
|
+
if (!/requires a newer version|upgrade to the latest (app|version)/i.test(detail)) {
|
|
529
|
+
return detail;
|
|
530
|
+
}
|
|
531
|
+
return `${detail}\n\nUpdate the Codex CLI from OpenAgents Launcher ` +
|
|
532
|
+
'(Agents → Codex → Update), or run `npm install -g @openai/codex@latest`, ' +
|
|
533
|
+
'then try again. Picking an older model also works around it for now.';
|
|
494
534
|
}
|
|
495
535
|
|
|
496
536
|
/** Redact secrets (keys, tokens, bearer/authorization, query secrets) from diagnostics. */
|