agent-transport-system 0.1.4 → 0.1.5

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/dist/ats.js CHANGED
@@ -17,7 +17,7 @@ import WebSocket from "ws";
17
17
  import { clearLine, createInterface, cursorTo, moveCursor } from "node:readline";
18
18
 
19
19
  //#region package.json
20
- var version$1 = "0.1.4";
20
+ var version$1 = "0.1.5";
21
21
  var package_default = {
22
22
  name: "agent-transport-system",
23
23
  version: version$1,
@@ -74,6 +74,857 @@ var package_default = {
74
74
  }
75
75
  };
76
76
 
77
+ //#endregion
78
+ //#region ../../config/agents/registry.json
79
+ var registry_default = {
80
+ schemaVersion: "1.0.0",
81
+ updatedAt: "2026-03-02T00:00:00.000Z",
82
+ metadata: {
83
+ "maintainer": "ATSD Team",
84
+ "purpose": "Single source of truth for agent detection, skills installability, and runtime support capability."
85
+ },
86
+ agents: [
87
+ {
88
+ "id": "amp",
89
+ "displayName": "Amp",
90
+ "category": "builtin",
91
+ "skillsDir": ".agents/skills",
92
+ "globalSkillsDir": "${XDG_CONFIG_HOME}/agents/skills",
93
+ "detection": {
94
+ "mode": "any",
95
+ "checks": [{
96
+ "kind": "pathExists",
97
+ "value": "${XDG_CONFIG_HOME}/amp"
98
+ }, {
99
+ "kind": "pathExists",
100
+ "value": "${HOME}/.config/amp"
101
+ }]
102
+ },
103
+ "service": { "skillsInstallable": true },
104
+ "runtime": {
105
+ "supported": false,
106
+ "adapters": []
107
+ }
108
+ },
109
+ {
110
+ "id": "adal",
111
+ "displayName": "AdaL",
112
+ "category": "builtin",
113
+ "skillsDir": ".adal/skills",
114
+ "globalSkillsDir": "${HOME}/.adal/skills",
115
+ "detection": {
116
+ "mode": "any",
117
+ "checks": [{
118
+ "kind": "pathExists",
119
+ "value": "${HOME}/.adal"
120
+ }]
121
+ },
122
+ "service": { "skillsInstallable": true },
123
+ "runtime": {
124
+ "supported": false,
125
+ "adapters": []
126
+ }
127
+ },
128
+ {
129
+ "id": "antigravity",
130
+ "displayName": "Antigravity",
131
+ "category": "builtin",
132
+ "skillsDir": ".agent/skills",
133
+ "globalSkillsDir": "${HOME}/.gemini/antigravity/skills",
134
+ "detection": {
135
+ "mode": "any",
136
+ "checks": [{
137
+ "kind": "pathExists",
138
+ "value": "${HOME}/.gemini/antigravity"
139
+ }]
140
+ },
141
+ "service": { "skillsInstallable": true },
142
+ "runtime": {
143
+ "supported": false,
144
+ "adapters": []
145
+ }
146
+ },
147
+ {
148
+ "id": "augment",
149
+ "displayName": "Augment",
150
+ "category": "builtin",
151
+ "skillsDir": ".augment/skills",
152
+ "globalSkillsDir": "${HOME}/.augment/skills",
153
+ "detection": {
154
+ "mode": "any",
155
+ "checks": [{
156
+ "kind": "pathExists",
157
+ "value": "${HOME}/.augment"
158
+ }]
159
+ },
160
+ "service": { "skillsInstallable": true },
161
+ "runtime": {
162
+ "supported": false,
163
+ "adapters": []
164
+ }
165
+ },
166
+ {
167
+ "id": "claude-code",
168
+ "displayName": "Claude Code",
169
+ "category": "builtin",
170
+ "skillsDir": ".claude/skills",
171
+ "globalSkillsDir": "${CLAUDE_CONFIG_DIR}/skills",
172
+ "detection": {
173
+ "mode": "any",
174
+ "checks": [{
175
+ "kind": "pathExists",
176
+ "value": "${HOME}/.claude"
177
+ }, {
178
+ "kind": "pathExists",
179
+ "value": "${CLAUDE_CONFIG_DIR}"
180
+ }]
181
+ },
182
+ "service": { "skillsInstallable": true },
183
+ "runtime": {
184
+ "supported": true,
185
+ "adapters": [{
186
+ "adapterId": "claude-code",
187
+ "controllerRefMatcher": {
188
+ "kind": "contains",
189
+ "values": ["claude", "claude-code"]
190
+ },
191
+ "transportModes": ["local-cli"]
192
+ }]
193
+ },
194
+ "sessionContinuation": { "commandTemplate": "claude --resume {sessionId}" },
195
+ "transportModes": ["local-cli"],
196
+ "defaultTransportMode": "local-cli",
197
+ "defaultStreamingMode": "final"
198
+ },
199
+ {
200
+ "id": "cline",
201
+ "displayName": "Cline",
202
+ "category": "builtin",
203
+ "skillsDir": ".agents/skills",
204
+ "globalSkillsDir": "${HOME}/.agents/skills",
205
+ "detection": {
206
+ "mode": "any",
207
+ "checks": [{
208
+ "kind": "pathExists",
209
+ "value": "${HOME}/.cline"
210
+ }]
211
+ },
212
+ "service": { "skillsInstallable": true },
213
+ "runtime": {
214
+ "supported": false,
215
+ "adapters": []
216
+ }
217
+ },
218
+ {
219
+ "id": "codex",
220
+ "aliases": ["builtin:codex"],
221
+ "displayName": "Codex",
222
+ "category": "builtin",
223
+ "skillsDir": ".agents/skills",
224
+ "globalSkillsDir": "${CODEX_HOME}/skills",
225
+ "detection": {
226
+ "mode": "any",
227
+ "checks": [
228
+ {
229
+ "kind": "pathExists",
230
+ "value": "${HOME}/.codex"
231
+ },
232
+ {
233
+ "kind": "pathExists",
234
+ "value": "${CODEX_HOME}"
235
+ },
236
+ {
237
+ "kind": "pathExists",
238
+ "value": "/etc/codex"
239
+ }
240
+ ]
241
+ },
242
+ "service": { "skillsInstallable": true },
243
+ "runtime": {
244
+ "supported": true,
245
+ "adapters": [{
246
+ "adapterId": "codex",
247
+ "controllerRefMatcher": {
248
+ "kind": "contains",
249
+ "values": ["codex"]
250
+ },
251
+ "transportModes": ["local-cli"]
252
+ }]
253
+ },
254
+ "sessionContinuation": { "commandTemplate": "codex resume {sessionId}" },
255
+ "notes": "Primary runnable agent in current environment.",
256
+ "transportModes": ["local-cli"],
257
+ "defaultTransportMode": "local-cli",
258
+ "defaultStreamingMode": "final"
259
+ },
260
+ {
261
+ "id": "command-code",
262
+ "displayName": "Command Code",
263
+ "category": "builtin",
264
+ "skillsDir": ".commandcode/skills",
265
+ "globalSkillsDir": "${HOME}/.commandcode/skills",
266
+ "detection": {
267
+ "mode": "any",
268
+ "checks": [{
269
+ "kind": "pathExists",
270
+ "value": "${HOME}/.commandcode"
271
+ }]
272
+ },
273
+ "service": { "skillsInstallable": true },
274
+ "runtime": {
275
+ "supported": false,
276
+ "adapters": []
277
+ }
278
+ },
279
+ {
280
+ "id": "codebuddy",
281
+ "displayName": "CodeBuddy",
282
+ "category": "builtin",
283
+ "skillsDir": ".codebuddy/skills",
284
+ "globalSkillsDir": "${HOME}/.codebuddy/skills",
285
+ "detection": {
286
+ "mode": "any",
287
+ "checks": [{
288
+ "kind": "pathExists",
289
+ "value": "${HOME}/.codebuddy"
290
+ }, {
291
+ "kind": "pathExists",
292
+ "value": "${CWD}/.codebuddy"
293
+ }]
294
+ },
295
+ "service": { "skillsInstallable": true },
296
+ "runtime": {
297
+ "supported": false,
298
+ "adapters": []
299
+ }
300
+ },
301
+ {
302
+ "id": "continue",
303
+ "displayName": "Continue",
304
+ "category": "builtin",
305
+ "skillsDir": ".continue/skills",
306
+ "globalSkillsDir": "${HOME}/.continue/skills",
307
+ "detection": {
308
+ "mode": "any",
309
+ "checks": [{
310
+ "kind": "pathExists",
311
+ "value": "${HOME}/.continue"
312
+ }, {
313
+ "kind": "pathExists",
314
+ "value": "${CWD}/.continue"
315
+ }]
316
+ },
317
+ "service": { "skillsInstallable": true },
318
+ "runtime": {
319
+ "supported": false,
320
+ "adapters": []
321
+ }
322
+ },
323
+ {
324
+ "id": "cortex",
325
+ "displayName": "Cortex Code",
326
+ "category": "builtin",
327
+ "skillsDir": ".cortex/skills",
328
+ "globalSkillsDir": "${HOME}/.snowflake/cortex/skills",
329
+ "detection": {
330
+ "mode": "any",
331
+ "checks": [{
332
+ "kind": "pathExists",
333
+ "value": "${HOME}/.snowflake/cortex"
334
+ }]
335
+ },
336
+ "service": { "skillsInstallable": true },
337
+ "runtime": {
338
+ "supported": false,
339
+ "adapters": []
340
+ }
341
+ },
342
+ {
343
+ "id": "crush",
344
+ "displayName": "Crush",
345
+ "category": "builtin",
346
+ "skillsDir": ".crush/skills",
347
+ "globalSkillsDir": "${HOME}/.config/crush/skills",
348
+ "detection": {
349
+ "mode": "any",
350
+ "checks": [{
351
+ "kind": "pathExists",
352
+ "value": "${HOME}/.config/crush"
353
+ }]
354
+ },
355
+ "service": { "skillsInstallable": true },
356
+ "runtime": {
357
+ "supported": false,
358
+ "adapters": []
359
+ }
360
+ },
361
+ {
362
+ "id": "cursor",
363
+ "displayName": "Cursor",
364
+ "category": "builtin",
365
+ "skillsDir": ".cursor/skills",
366
+ "globalSkillsDir": "${HOME}/.cursor/skills",
367
+ "detection": {
368
+ "mode": "any",
369
+ "checks": [{
370
+ "kind": "pathExists",
371
+ "value": "${HOME}/.cursor"
372
+ }]
373
+ },
374
+ "service": { "skillsInstallable": true },
375
+ "runtime": {
376
+ "supported": false,
377
+ "adapters": []
378
+ }
379
+ },
380
+ {
381
+ "id": "droid",
382
+ "displayName": "Droid",
383
+ "category": "builtin",
384
+ "skillsDir": ".factory/skills",
385
+ "globalSkillsDir": "${HOME}/.factory/skills",
386
+ "detection": {
387
+ "mode": "any",
388
+ "checks": [{
389
+ "kind": "pathExists",
390
+ "value": "${HOME}/.factory"
391
+ }]
392
+ },
393
+ "service": { "skillsInstallable": true },
394
+ "runtime": {
395
+ "supported": false,
396
+ "adapters": []
397
+ }
398
+ },
399
+ {
400
+ "id": "gemini-cli",
401
+ "displayName": "Gemini CLI",
402
+ "category": "builtin",
403
+ "skillsDir": ".agents/skills",
404
+ "globalSkillsDir": "${HOME}/.gemini/skills",
405
+ "detection": {
406
+ "mode": "any",
407
+ "checks": [{
408
+ "kind": "pathExists",
409
+ "value": "${HOME}/.gemini"
410
+ }]
411
+ },
412
+ "service": { "skillsInstallable": true },
413
+ "runtime": {
414
+ "supported": false,
415
+ "adapters": []
416
+ }
417
+ },
418
+ {
419
+ "id": "github-copilot",
420
+ "displayName": "GitHub Copilot",
421
+ "category": "builtin",
422
+ "skillsDir": ".agents/skills",
423
+ "globalSkillsDir": "${HOME}/.copilot/skills",
424
+ "detection": {
425
+ "mode": "any",
426
+ "checks": [{
427
+ "kind": "pathExists",
428
+ "value": "${HOME}/.copilot"
429
+ }]
430
+ },
431
+ "service": { "skillsInstallable": true },
432
+ "runtime": {
433
+ "supported": false,
434
+ "adapters": []
435
+ }
436
+ },
437
+ {
438
+ "id": "goose",
439
+ "displayName": "Goose",
440
+ "category": "builtin",
441
+ "skillsDir": ".goose/skills",
442
+ "globalSkillsDir": "${XDG_CONFIG_HOME}/goose/skills",
443
+ "detection": {
444
+ "mode": "any",
445
+ "checks": [{
446
+ "kind": "pathExists",
447
+ "value": "${XDG_CONFIG_HOME}/goose"
448
+ }, {
449
+ "kind": "pathExists",
450
+ "value": "${HOME}/.config/goose"
451
+ }]
452
+ },
453
+ "service": { "skillsInstallable": true },
454
+ "runtime": {
455
+ "supported": false,
456
+ "adapters": []
457
+ }
458
+ },
459
+ {
460
+ "id": "iflow-cli",
461
+ "displayName": "iFlow CLI",
462
+ "category": "builtin",
463
+ "skillsDir": ".iflow/skills",
464
+ "globalSkillsDir": "${HOME}/.iflow/skills",
465
+ "detection": {
466
+ "mode": "any",
467
+ "checks": [{
468
+ "kind": "pathExists",
469
+ "value": "${HOME}/.iflow"
470
+ }]
471
+ },
472
+ "service": { "skillsInstallable": true },
473
+ "runtime": {
474
+ "supported": false,
475
+ "adapters": []
476
+ }
477
+ },
478
+ {
479
+ "id": "junie",
480
+ "displayName": "Junie",
481
+ "category": "builtin",
482
+ "skillsDir": ".junie/skills",
483
+ "globalSkillsDir": "${HOME}/.junie/skills",
484
+ "detection": {
485
+ "mode": "any",
486
+ "checks": [{
487
+ "kind": "pathExists",
488
+ "value": "${HOME}/.junie"
489
+ }]
490
+ },
491
+ "service": { "skillsInstallable": true },
492
+ "runtime": {
493
+ "supported": false,
494
+ "adapters": []
495
+ }
496
+ },
497
+ {
498
+ "id": "kilo",
499
+ "displayName": "Kilo Code",
500
+ "category": "builtin",
501
+ "skillsDir": ".kilocode/skills",
502
+ "globalSkillsDir": "${HOME}/.kilocode/skills",
503
+ "detection": {
504
+ "mode": "any",
505
+ "checks": [{
506
+ "kind": "pathExists",
507
+ "value": "${HOME}/.kilocode"
508
+ }]
509
+ },
510
+ "service": { "skillsInstallable": true },
511
+ "runtime": {
512
+ "supported": false,
513
+ "adapters": []
514
+ }
515
+ },
516
+ {
517
+ "id": "kimi-cli",
518
+ "displayName": "Kimi Code CLI",
519
+ "category": "builtin",
520
+ "skillsDir": ".agents/skills",
521
+ "globalSkillsDir": "${HOME}/.config/agents/skills",
522
+ "detection": {
523
+ "mode": "any",
524
+ "checks": [{
525
+ "kind": "pathExists",
526
+ "value": "${HOME}/.kimi"
527
+ }]
528
+ },
529
+ "service": { "skillsInstallable": true },
530
+ "runtime": {
531
+ "supported": false,
532
+ "adapters": []
533
+ }
534
+ },
535
+ {
536
+ "id": "kiro-cli",
537
+ "displayName": "Kiro CLI",
538
+ "category": "builtin",
539
+ "skillsDir": ".kiro/skills",
540
+ "globalSkillsDir": "${HOME}/.kiro/skills",
541
+ "detection": {
542
+ "mode": "any",
543
+ "checks": [{
544
+ "kind": "pathExists",
545
+ "value": "${HOME}/.kiro"
546
+ }]
547
+ },
548
+ "service": { "skillsInstallable": true },
549
+ "runtime": {
550
+ "supported": false,
551
+ "adapters": []
552
+ }
553
+ },
554
+ {
555
+ "id": "kode",
556
+ "displayName": "Kode",
557
+ "category": "builtin",
558
+ "skillsDir": ".kode/skills",
559
+ "globalSkillsDir": "${HOME}/.kode/skills",
560
+ "detection": {
561
+ "mode": "any",
562
+ "checks": [{
563
+ "kind": "pathExists",
564
+ "value": "${HOME}/.kode"
565
+ }]
566
+ },
567
+ "service": { "skillsInstallable": true },
568
+ "runtime": {
569
+ "supported": false,
570
+ "adapters": []
571
+ }
572
+ },
573
+ {
574
+ "id": "mcpjam",
575
+ "displayName": "MCPJam",
576
+ "category": "builtin",
577
+ "skillsDir": ".mcpjam/skills",
578
+ "globalSkillsDir": "${HOME}/.mcpjam/skills",
579
+ "detection": {
580
+ "mode": "any",
581
+ "checks": [{
582
+ "kind": "pathExists",
583
+ "value": "${HOME}/.mcpjam"
584
+ }]
585
+ },
586
+ "service": { "skillsInstallable": true },
587
+ "runtime": {
588
+ "supported": false,
589
+ "adapters": []
590
+ }
591
+ },
592
+ {
593
+ "id": "mistral-vibe",
594
+ "displayName": "Mistral Vibe",
595
+ "category": "builtin",
596
+ "skillsDir": ".vibe/skills",
597
+ "globalSkillsDir": "${HOME}/.vibe/skills",
598
+ "detection": {
599
+ "mode": "any",
600
+ "checks": [{
601
+ "kind": "pathExists",
602
+ "value": "${HOME}/.vibe"
603
+ }]
604
+ },
605
+ "service": { "skillsInstallable": true },
606
+ "runtime": {
607
+ "supported": false,
608
+ "adapters": []
609
+ }
610
+ },
611
+ {
612
+ "id": "mux",
613
+ "displayName": "Mux",
614
+ "category": "builtin",
615
+ "skillsDir": ".mux/skills",
616
+ "globalSkillsDir": "${HOME}/.mux/skills",
617
+ "detection": {
618
+ "mode": "any",
619
+ "checks": [{
620
+ "kind": "pathExists",
621
+ "value": "${HOME}/.mux"
622
+ }]
623
+ },
624
+ "service": { "skillsInstallable": true },
625
+ "runtime": {
626
+ "supported": false,
627
+ "adapters": []
628
+ }
629
+ },
630
+ {
631
+ "id": "neovate",
632
+ "displayName": "Neovate",
633
+ "category": "builtin",
634
+ "skillsDir": ".neovate/skills",
635
+ "globalSkillsDir": "${HOME}/.neovate/skills",
636
+ "detection": {
637
+ "mode": "any",
638
+ "checks": [{
639
+ "kind": "pathExists",
640
+ "value": "${HOME}/.neovate"
641
+ }]
642
+ },
643
+ "service": { "skillsInstallable": true },
644
+ "runtime": {
645
+ "supported": false,
646
+ "adapters": []
647
+ }
648
+ },
649
+ {
650
+ "id": "opencode",
651
+ "displayName": "OpenCode",
652
+ "category": "builtin",
653
+ "skillsDir": ".agents/skills",
654
+ "globalSkillsDir": "${XDG_CONFIG_HOME}/opencode/skills",
655
+ "detection": {
656
+ "mode": "any",
657
+ "checks": [{
658
+ "kind": "pathExists",
659
+ "value": "${XDG_CONFIG_HOME}/opencode"
660
+ }, {
661
+ "kind": "pathExists",
662
+ "value": "${HOME}/.config/opencode"
663
+ }]
664
+ },
665
+ "service": { "skillsInstallable": true },
666
+ "runtime": {
667
+ "supported": false,
668
+ "adapters": []
669
+ }
670
+ },
671
+ {
672
+ "id": "openhands",
673
+ "displayName": "OpenHands",
674
+ "category": "builtin",
675
+ "skillsDir": ".openhands/skills",
676
+ "globalSkillsDir": "${HOME}/.openhands/skills",
677
+ "detection": {
678
+ "mode": "any",
679
+ "checks": [{
680
+ "kind": "pathExists",
681
+ "value": "${HOME}/.openhands"
682
+ }]
683
+ },
684
+ "service": { "skillsInstallable": true },
685
+ "runtime": {
686
+ "supported": false,
687
+ "adapters": []
688
+ }
689
+ },
690
+ {
691
+ "id": "openclaw",
692
+ "displayName": "OpenClaw",
693
+ "category": "builtin",
694
+ "skillsDir": "skills",
695
+ "globalSkillsDir": [
696
+ "${HOME}/.openclaw/skills",
697
+ "${HOME}/.clawdbot/skills",
698
+ "${HOME}/.moltbot/skills"
699
+ ],
700
+ "detection": {
701
+ "mode": "any",
702
+ "checks": [
703
+ {
704
+ "kind": "pathExists",
705
+ "value": "${HOME}/.openclaw"
706
+ },
707
+ {
708
+ "kind": "pathExists",
709
+ "value": "${HOME}/.clawdbot"
710
+ },
711
+ {
712
+ "kind": "pathExists",
713
+ "value": "${HOME}/.moltbot"
714
+ }
715
+ ]
716
+ },
717
+ "service": { "skillsInstallable": true },
718
+ "runtime": {
719
+ "supported": true,
720
+ "adapters": [{
721
+ "adapterId": "openclaw",
722
+ "controllerRefMatcher": {
723
+ "kind": "contains",
724
+ "values": ["openclaw", "claw"]
725
+ },
726
+ "transportModes": ["local-cli"]
727
+ }]
728
+ },
729
+ "sessionContinuation": { "commandTemplate": "openclaw agent --local --session-id {sessionId}" },
730
+ "transportModes": ["local-cli"],
731
+ "defaultTransportMode": "local-cli",
732
+ "defaultStreamingMode": "final"
733
+ },
734
+ {
735
+ "id": "pi",
736
+ "displayName": "Pi",
737
+ "category": "builtin",
738
+ "skillsDir": ".pi/skills",
739
+ "globalSkillsDir": "${HOME}/.pi/agent/skills",
740
+ "detection": {
741
+ "mode": "any",
742
+ "checks": [{
743
+ "kind": "pathExists",
744
+ "value": "${HOME}/.pi/agent"
745
+ }]
746
+ },
747
+ "service": { "skillsInstallable": true },
748
+ "runtime": {
749
+ "supported": false,
750
+ "adapters": []
751
+ }
752
+ },
753
+ {
754
+ "id": "pochi",
755
+ "displayName": "Pochi",
756
+ "category": "builtin",
757
+ "skillsDir": ".pochi/skills",
758
+ "globalSkillsDir": "${HOME}/.pochi/skills",
759
+ "detection": {
760
+ "mode": "any",
761
+ "checks": [{
762
+ "kind": "pathExists",
763
+ "value": "${HOME}/.pochi"
764
+ }]
765
+ },
766
+ "service": { "skillsInstallable": true },
767
+ "runtime": {
768
+ "supported": false,
769
+ "adapters": []
770
+ }
771
+ },
772
+ {
773
+ "id": "qoder",
774
+ "displayName": "Qoder",
775
+ "category": "builtin",
776
+ "skillsDir": ".qoder/skills",
777
+ "globalSkillsDir": "${HOME}/.qoder/skills",
778
+ "detection": {
779
+ "mode": "any",
780
+ "checks": [{
781
+ "kind": "pathExists",
782
+ "value": "${HOME}/.qoder"
783
+ }]
784
+ },
785
+ "service": { "skillsInstallable": true },
786
+ "runtime": {
787
+ "supported": false,
788
+ "adapters": []
789
+ }
790
+ },
791
+ {
792
+ "id": "qwen-code",
793
+ "displayName": "Qwen Code",
794
+ "category": "builtin",
795
+ "skillsDir": ".qwen/skills",
796
+ "globalSkillsDir": "${HOME}/.qwen/skills",
797
+ "detection": {
798
+ "mode": "any",
799
+ "checks": [{
800
+ "kind": "pathExists",
801
+ "value": "${HOME}/.qwen"
802
+ }]
803
+ },
804
+ "service": { "skillsInstallable": true },
805
+ "runtime": {
806
+ "supported": false,
807
+ "adapters": []
808
+ }
809
+ },
810
+ {
811
+ "id": "replit",
812
+ "displayName": "Replit",
813
+ "category": "builtin",
814
+ "skillsDir": ".agents/skills",
815
+ "globalSkillsDir": "${XDG_CONFIG_HOME}/agents/skills",
816
+ "detection": {
817
+ "mode": "any",
818
+ "checks": [{
819
+ "kind": "pathExists",
820
+ "value": "${CWD}/.replit"
821
+ }]
822
+ },
823
+ "service": { "skillsInstallable": true },
824
+ "runtime": {
825
+ "supported": false,
826
+ "adapters": []
827
+ },
828
+ "notes": "Keep detection close to upstream behavior; no universal list enforcement in this registry layer."
829
+ },
830
+ {
831
+ "id": "roo",
832
+ "displayName": "Roo Code",
833
+ "category": "builtin",
834
+ "skillsDir": ".roo/skills",
835
+ "globalSkillsDir": "${HOME}/.roo/skills",
836
+ "detection": {
837
+ "mode": "any",
838
+ "checks": [{
839
+ "kind": "pathExists",
840
+ "value": "${HOME}/.roo"
841
+ }]
842
+ },
843
+ "service": { "skillsInstallable": true },
844
+ "runtime": {
845
+ "supported": false,
846
+ "adapters": []
847
+ }
848
+ },
849
+ {
850
+ "id": "trae",
851
+ "displayName": "Trae",
852
+ "category": "builtin",
853
+ "skillsDir": ".trae/skills",
854
+ "globalSkillsDir": "${HOME}/.trae/skills",
855
+ "detection": {
856
+ "mode": "any",
857
+ "checks": [{
858
+ "kind": "pathExists",
859
+ "value": "${HOME}/.trae"
860
+ }]
861
+ },
862
+ "service": { "skillsInstallable": true },
863
+ "runtime": {
864
+ "supported": false,
865
+ "adapters": []
866
+ }
867
+ },
868
+ {
869
+ "id": "trae-cn",
870
+ "displayName": "Trae CN",
871
+ "category": "builtin",
872
+ "skillsDir": ".trae/skills",
873
+ "globalSkillsDir": "${HOME}/.trae-cn/skills",
874
+ "detection": {
875
+ "mode": "any",
876
+ "checks": [{
877
+ "kind": "pathExists",
878
+ "value": "${HOME}/.trae-cn"
879
+ }]
880
+ },
881
+ "service": { "skillsInstallable": true },
882
+ "runtime": {
883
+ "supported": false,
884
+ "adapters": []
885
+ }
886
+ },
887
+ {
888
+ "id": "windsurf",
889
+ "displayName": "Windsurf",
890
+ "category": "builtin",
891
+ "skillsDir": ".windsurf/skills",
892
+ "globalSkillsDir": "${HOME}/.codeium/windsurf/skills",
893
+ "detection": {
894
+ "mode": "any",
895
+ "checks": [{
896
+ "kind": "pathExists",
897
+ "value": "${HOME}/.codeium/windsurf"
898
+ }]
899
+ },
900
+ "service": { "skillsInstallable": true },
901
+ "runtime": {
902
+ "supported": false,
903
+ "adapters": []
904
+ }
905
+ },
906
+ {
907
+ "id": "zencoder",
908
+ "displayName": "Zencoder",
909
+ "category": "builtin",
910
+ "skillsDir": ".zencoder/skills",
911
+ "globalSkillsDir": "${HOME}/.zencoder/skills",
912
+ "detection": {
913
+ "mode": "any",
914
+ "checks": [{
915
+ "kind": "pathExists",
916
+ "value": "${HOME}/.zencoder"
917
+ }]
918
+ },
919
+ "service": { "skillsInstallable": true },
920
+ "runtime": {
921
+ "supported": false,
922
+ "adapters": []
923
+ }
924
+ }
925
+ ]
926
+ };
927
+
77
928
  //#endregion
78
929
  //#region src/agents/registry-source.ts
79
930
  const SUPPORTED_DETECTION_MODES = new Set(["all", "any"]);
@@ -100,6 +951,7 @@ const SUPPORTED_RUNTIME_MATCHER_KINDS = new Set([
100
951
  const TEMPLATE_TOKEN_RE = /\$\{([A-Z0-9_]+)\}/g;
101
952
  const moduleDir = dirname(fileURLToPath(import.meta.url));
102
953
  const registryRelativePath = "config/agents/registry.json";
954
+ const embeddedRegistryDocument = parseAgentsRegistryDocument(registry_default, "embedded agents registry");
103
955
  let cachedRegistryPath = null;
104
956
  let cachedRegistryDocument = null;
105
957
  function resolveAgentsRegistryPath() {
@@ -110,8 +962,15 @@ function resolveAgentsRegistryPath() {
110
962
  function loadAgentsRegistryDocument() {
111
963
  const registryPath = resolveAgentsRegistryPath();
112
964
  if (cachedRegistryPath === registryPath && cachedRegistryDocument) return cachedRegistryDocument;
113
- const rawContent = readFileSync(registryPath, "utf8");
114
- const document = parseAgentsRegistryDocument(JSON.parse(rawContent), registryPath);
965
+ const hasPathOverride = Boolean(process.env.ATS_AGENTS_REGISTRY_PATH?.trim().length);
966
+ let document;
967
+ try {
968
+ const rawContent = readFileSync(registryPath, "utf8");
969
+ document = parseAgentsRegistryDocument(JSON.parse(rawContent), registryPath);
970
+ } catch (error) {
971
+ if (!hasPathOverride && isMissingFileError(error)) document = embeddedRegistryDocument;
972
+ else throw error;
973
+ }
115
974
  cachedRegistryPath = registryPath;
116
975
  cachedRegistryDocument = document;
117
976
  return document;
@@ -422,6 +1281,10 @@ function readOptionalStringOrStringArray(value, context) {
422
1281
  if (Array.isArray(value)) return value.map((item, index) => readStringValue(item, `${context}[${String(index)}]`));
423
1282
  throw new Error(`Expected string or string[] at ${context}`);
424
1283
  }
1284
+ function isMissingFileError(error) {
1285
+ if (!(error instanceof Error)) return false;
1286
+ return error.code === "ENOENT";
1287
+ }
425
1288
 
426
1289
  //#endregion
427
1290
  //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js
@@ -31920,6 +32783,68 @@ async function ensureDaemonInstalledForCliStartup(input) {
31920
32783
  state: installResult.state
31921
32784
  };
31922
32785
  }
32786
+ async function ensureDaemonVersionForCliStartup(input) {
32787
+ const mode = input.mode ?? "always";
32788
+ if (!input.installedState) return {
32789
+ status: "already_current",
32790
+ mode,
32791
+ outdatedBeforeCheck: false,
32792
+ autoUpdated: false,
32793
+ previousVersion: null,
32794
+ state: null
32795
+ };
32796
+ if (input.installedState.daemonVersion === input.daemonVersion) return {
32797
+ status: "already_current",
32798
+ mode,
32799
+ outdatedBeforeCheck: false,
32800
+ autoUpdated: false,
32801
+ previousVersion: input.installedState.daemonVersion,
32802
+ state: input.installedState
32803
+ };
32804
+ const outdatedBeforeCheck = true;
32805
+ const previousVersion = input.installedState.daemonVersion;
32806
+ if (mode === "never") return {
32807
+ status: "skipped",
32808
+ mode,
32809
+ outdatedBeforeCheck,
32810
+ autoUpdated: false,
32811
+ previousVersion,
32812
+ state: input.installedState
32813
+ };
32814
+ if (mode === "ask") {
32815
+ if (!(input.canPrompt && input.confirmUpdate)) return {
32816
+ status: "skipped",
32817
+ mode,
32818
+ outdatedBeforeCheck,
32819
+ autoUpdated: false,
32820
+ previousVersion,
32821
+ state: input.installedState
32822
+ };
32823
+ if (!await input.confirmUpdate({
32824
+ installedVersion: previousVersion,
32825
+ expectedVersion: input.daemonVersion
32826
+ })) return {
32827
+ status: "skipped",
32828
+ mode,
32829
+ outdatedBeforeCheck,
32830
+ autoUpdated: false,
32831
+ previousVersion,
32832
+ state: input.installedState
32833
+ };
32834
+ }
32835
+ const installResult = await installDaemon({
32836
+ daemonVersion: input.daemonVersion,
32837
+ source: "cli.auto_check"
32838
+ });
32839
+ return {
32840
+ status: installResult.status === "installed" ? "updated" : "already_current",
32841
+ mode,
32842
+ outdatedBeforeCheck,
32843
+ autoUpdated: installResult.status === "installed",
32844
+ previousVersion,
32845
+ state: installResult.state
32846
+ };
32847
+ }
31923
32848
 
31924
32849
  //#endregion
31925
32850
  //#region src/system/daemon-recommendation.ts
@@ -32632,14 +33557,28 @@ async function runDaemonStartupCheck(argv) {
32632
33557
  mode: autoInstallMode,
32633
33558
  view: runtime.resolvedView
32634
33559
  });
32635
- if (bootstrapResult.state && bootstrapResult.state.daemonVersion !== version$1) emitDaemonOutdatedRecommendation({
33560
+ const versionSyncResult = await ensureDaemonVersionForCliStartup({
33561
+ daemonVersion: version$1,
33562
+ installedState: bootstrapResult.state,
33563
+ mode: autoInstallMode,
33564
+ canPrompt,
33565
+ ...canPrompt ? { confirmUpdate: async ({ installedVersion, expectedVersion }) => {
33566
+ const selected = await confirm({
33567
+ message: `ATS background service update available (v${installedVersion} -> v${expectedVersion}). Install now and continue?`,
33568
+ initialValue: true
33569
+ });
33570
+ return !(isCancel(selected) || !selected);
33571
+ } } : {}
33572
+ });
33573
+ if (versionSyncResult.status === "skipped" && versionSyncResult.outdatedBeforeCheck && versionSyncResult.previousVersion) emitDaemonOutdatedRecommendation({
32636
33574
  view: runtime.resolvedView,
32637
- installedVersion: bootstrapResult.state.daemonVersion,
33575
+ installedVersion: versionSyncResult.previousVersion,
32638
33576
  expectedVersion: version$1
32639
33577
  });
33578
+ const daemonStateAfterBootstrap = versionSyncResult.state ?? bootstrapResult.state;
32640
33579
  if (process.env.ATS_DEV_MODE === "1" && runtime.resolvedView === "human" && runtime.interactive) await maybeRunDevAutoStartGuard({
32641
33580
  runtime,
32642
- bootstrapStateExists: bootstrapResult.state !== null,
33581
+ bootstrapStateExists: daemonStateAfterBootstrap !== null,
32643
33582
  bootstrapStatus: bootstrapResult.status
32644
33583
  });
32645
33584
  const runtimeProjection = await syncDeviceRuntimeStateProjection({ mode: "repair" }).catch(() => null);
@@ -32741,8 +33680,8 @@ function emitDaemonOutdatedRecommendation(input) {
32741
33680
  });
32742
33681
  return;
32743
33682
  }
32744
- outLine("Quick update needed before you continue.");
32745
- outLine("Run `ats service install`, then run your command again.");
33683
+ outLine(`ATS background service update recommended (installed v${input.installedVersion}, expected v${input.expectedVersion}).`);
33684
+ outLine("Run `ats service install` now, or re-run command with `--service-auto-install always`.");
32746
33685
  }
32747
33686
  function emitRuntimeProjectionStartupNotice(input) {
32748
33687
  const repairedIds = input.projection.repairedControllerIds;