@openacp/cli 2026.330.2 → 2026.331.1

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 (145) hide show
  1. package/README.md +17 -0
  2. package/dist/adapter-ELG3VRZ3.js +14 -0
  3. package/dist/{agent-catalog-SZQQERV7.js → agent-catalog-UYD26QDK.js} +3 -3
  4. package/dist/{api-client-XTLRRFPX.js → api-client-PEMHYL5U.js} +2 -2
  5. package/dist/{api-server-JLBDKCU4.js → api-server-DATG2KBR.js} +3 -3
  6. package/dist/api-server-L5Z7XACW.js +7 -0
  7. package/dist/chunk-23SRIVG4.js +50 -0
  8. package/dist/chunk-23SRIVG4.js.map +1 -0
  9. package/dist/{chunk-YIGBJFJL.js → chunk-7GXEMMEV.js} +15 -15
  10. package/dist/{chunk-QWVHCTCA.js → chunk-7U6IZIJP.js} +37 -23
  11. package/dist/chunk-7U6IZIJP.js.map +1 -0
  12. package/dist/{chunk-FCTC7KDT.js → chunk-7YIKTRSM.js} +14 -10
  13. package/dist/chunk-7YIKTRSM.js.map +1 -0
  14. package/dist/{chunk-MITTQMGZ.js → chunk-BYCJQPMN.js} +5 -5
  15. package/dist/chunk-BYCJQPMN.js.map +1 -0
  16. package/dist/{chunk-5ZNBNIK3.js → chunk-EWVXSTQK.js} +193 -53
  17. package/dist/chunk-EWVXSTQK.js.map +1 -0
  18. package/dist/{chunk-UWH7KIAA.js → chunk-FPKQYCQS.js} +88 -13
  19. package/dist/chunk-FPKQYCQS.js.map +1 -0
  20. package/dist/{chunk-GEOXPGCO.js → chunk-K6UY5M75.js} +12 -9
  21. package/dist/chunk-K6UY5M75.js.map +1 -0
  22. package/dist/{chunk-KDU3ZEWT.js → chunk-KGAQW6F4.js} +12 -3
  23. package/dist/chunk-KGAQW6F4.js.map +1 -0
  24. package/dist/{chunk-7RKPIM3E.js → chunk-LRV56K2M.js} +205 -16
  25. package/dist/chunk-LRV56K2M.js.map +1 -0
  26. package/dist/{chunk-V2YZWYXT.js → chunk-MDJHCCFS.js} +18 -17
  27. package/dist/chunk-MDJHCCFS.js.map +1 -0
  28. package/dist/chunk-NHD5XDD2.js +686 -0
  29. package/dist/chunk-NHD5XDD2.js.map +1 -0
  30. package/dist/{chunk-APS6UEFU.js → chunk-NJX75BLK.js} +1 -1
  31. package/dist/chunk-NJX75BLK.js.map +1 -0
  32. package/dist/{chunk-5HKQCYOI.js → chunk-NOEAJNTK.js} +14 -3
  33. package/dist/chunk-NOEAJNTK.js.map +1 -0
  34. package/dist/chunk-ON7HB5O7.js +58 -0
  35. package/dist/chunk-ON7HB5O7.js.map +1 -0
  36. package/dist/{chunk-5OCGO27U.js → chunk-OSBZXY2W.js} +2 -1
  37. package/dist/chunk-OSBZXY2W.js.map +1 -0
  38. package/dist/{chunk-PA6MNBG4.js → chunk-P3HHJANC.js} +32 -13
  39. package/dist/chunk-P3HHJANC.js.map +1 -0
  40. package/dist/{chunk-BTJHGSLM.js → chunk-R2YLDQLI.js} +9 -10
  41. package/dist/chunk-R2YLDQLI.js.map +1 -0
  42. package/dist/{chunk-CFUJGWOP.js → chunk-SSLVNCEA.js} +27 -3
  43. package/dist/chunk-SSLVNCEA.js.map +1 -0
  44. package/dist/{chunk-MPGEHTGE.js → chunk-TGP34LQN.js} +9 -7
  45. package/dist/chunk-TGP34LQN.js.map +1 -0
  46. package/dist/{chunk-TMVTSWVH.js → chunk-VUSCVRJL.js} +2 -1
  47. package/dist/chunk-VUSCVRJL.js.map +1 -0
  48. package/dist/chunk-XRJUS6FE.js +53 -0
  49. package/dist/chunk-XRJUS6FE.js.map +1 -0
  50. package/dist/{chunk-W4LK6WJP.js → chunk-YZCKSNRN.js} +24 -17
  51. package/dist/chunk-YZCKSNRN.js.map +1 -0
  52. package/dist/{chunk-3NAFXVQM.js → chunk-ZIRH6QWW.js} +7 -5
  53. package/dist/chunk-ZIRH6QWW.js.map +1 -0
  54. package/dist/cli.d.ts +11 -0
  55. package/dist/cli.js +334 -140
  56. package/dist/cli.js.map +1 -1
  57. package/dist/config-X4UP7H6R.js +13 -0
  58. package/dist/config-editor-7BENRVG5.js +11 -0
  59. package/dist/{config-registry-ZXAIJNYB.js → config-registry-M3FFWEVM.js} +3 -2
  60. package/dist/context-FVGCU5TI.js +9 -0
  61. package/dist/core-plugins-JSY2I44L.js +25 -0
  62. package/dist/{daemon-XFEMMJSZ.js → daemon-UOSRDEXW.js} +8 -3
  63. package/dist/doctor-6DLACBR4.js +10 -0
  64. package/dist/{file-service-HHB3JQIO.js → file-service-FQQYME7M.js} +2 -2
  65. package/dist/index.d.ts +265 -32
  66. package/dist/index.js +44 -33
  67. package/dist/index.js.map +1 -1
  68. package/dist/{install-cloudflared-JRJ4BSOM.js → install-cloudflared-LNS5L5FR.js} +5 -4
  69. package/dist/install-cloudflared-LNS5L5FR.js.map +1 -0
  70. package/dist/{install-context-EHYV5WRY.js → install-context-KZO5FR4D.js} +4 -3
  71. package/dist/install-context-KZO5FR4D.js.map +1 -0
  72. package/dist/{install-jq-ISTGT263.js → install-jq-SN4IA5K4.js} +3 -3
  73. package/dist/instance-context-FLCE7VZ4.js +13 -0
  74. package/dist/instance-registry-SW5FWKHO.js +7 -0
  75. package/dist/{main-L2M4NTJY.js → main-D7M2AKRM.js} +91 -48
  76. package/dist/main-D7M2AKRM.js.map +1 -0
  77. package/dist/{plugin-create-EHL76ZZG.js → plugin-create-HFKS23JY.js} +4 -2
  78. package/dist/{plugin-create-EHL76ZZG.js.map → plugin-create-HFKS23JY.js.map} +1 -1
  79. package/dist/{post-upgrade-Y26S2ZQ7.js → post-upgrade-F4YPMTUT.js} +6 -6
  80. package/dist/{security-2BA265LN.js → security-O4XGN2CM.js} +2 -2
  81. package/dist/{setup-E6BNEYCS.js → setup-44WLBIOT.js} +209 -22
  82. package/dist/setup-44WLBIOT.js.map +1 -0
  83. package/dist/{speech-SG62JYIF.js → speech-GHTSWDAN.js} +2 -2
  84. package/dist/telegram-D7ASLVEB.js +7 -0
  85. package/dist/telegram-D7ASLVEB.js.map +1 -0
  86. package/dist/tunnel-ALJDPFDQ.js +10 -0
  87. package/dist/tunnel-ALJDPFDQ.js.map +1 -0
  88. package/dist/{tunnel-service-ZMO4THKE.js → tunnel-service-TBAHDXMF.js} +41 -547
  89. package/dist/tunnel-service-TBAHDXMF.js.map +1 -0
  90. package/package.json +1 -1
  91. package/dist/adapter-4U6MC5ZS.js +0 -13
  92. package/dist/api-server-5VNYFWJE.js +0 -7
  93. package/dist/chunk-3NAFXVQM.js.map +0 -1
  94. package/dist/chunk-4WXALZA3.js +0 -45
  95. package/dist/chunk-4WXALZA3.js.map +0 -1
  96. package/dist/chunk-5HKQCYOI.js.map +0 -1
  97. package/dist/chunk-5OCGO27U.js.map +0 -1
  98. package/dist/chunk-5ZNBNIK3.js.map +0 -1
  99. package/dist/chunk-7RKPIM3E.js.map +0 -1
  100. package/dist/chunk-APS6UEFU.js.map +0 -1
  101. package/dist/chunk-BTJHGSLM.js.map +0 -1
  102. package/dist/chunk-CFUJGWOP.js.map +0 -1
  103. package/dist/chunk-FCTC7KDT.js.map +0 -1
  104. package/dist/chunk-GEOXPGCO.js.map +0 -1
  105. package/dist/chunk-KDU3ZEWT.js.map +0 -1
  106. package/dist/chunk-MITTQMGZ.js.map +0 -1
  107. package/dist/chunk-MPGEHTGE.js.map +0 -1
  108. package/dist/chunk-PA6MNBG4.js.map +0 -1
  109. package/dist/chunk-QWVHCTCA.js.map +0 -1
  110. package/dist/chunk-TMVTSWVH.js.map +0 -1
  111. package/dist/chunk-UWH7KIAA.js.map +0 -1
  112. package/dist/chunk-V2YZWYXT.js.map +0 -1
  113. package/dist/chunk-W4LK6WJP.js.map +0 -1
  114. package/dist/config-KN6NKKPF.js +0 -20
  115. package/dist/config-editor-76RVZS4B.js +0 -10
  116. package/dist/context-NXXW62NJ.js +0 -9
  117. package/dist/core-plugins-OCHKGCIZ.js +0 -22
  118. package/dist/doctor-AV6AUO22.js +0 -9
  119. package/dist/install-cloudflared-JRJ4BSOM.js.map +0 -1
  120. package/dist/install-context-EHYV5WRY.js.map +0 -1
  121. package/dist/main-L2M4NTJY.js.map +0 -1
  122. package/dist/setup-E6BNEYCS.js.map +0 -1
  123. package/dist/telegram-EAVRDNFU.js +0 -7
  124. package/dist/tunnel-HWJ27WDH.js +0 -7
  125. package/dist/tunnel-service-ZMO4THKE.js.map +0 -1
  126. /package/dist/{adapter-4U6MC5ZS.js.map → adapter-ELG3VRZ3.js.map} +0 -0
  127. /package/dist/{agent-catalog-SZQQERV7.js.map → agent-catalog-UYD26QDK.js.map} +0 -0
  128. /package/dist/{api-client-XTLRRFPX.js.map → api-client-PEMHYL5U.js.map} +0 -0
  129. /package/dist/{api-server-5VNYFWJE.js.map → api-server-DATG2KBR.js.map} +0 -0
  130. /package/dist/{api-server-JLBDKCU4.js.map → api-server-L5Z7XACW.js.map} +0 -0
  131. /package/dist/{chunk-YIGBJFJL.js.map → chunk-7GXEMMEV.js.map} +0 -0
  132. /package/dist/{config-KN6NKKPF.js.map → config-X4UP7H6R.js.map} +0 -0
  133. /package/dist/{config-editor-76RVZS4B.js.map → config-editor-7BENRVG5.js.map} +0 -0
  134. /package/dist/{config-registry-ZXAIJNYB.js.map → config-registry-M3FFWEVM.js.map} +0 -0
  135. /package/dist/{context-NXXW62NJ.js.map → context-FVGCU5TI.js.map} +0 -0
  136. /package/dist/{core-plugins-OCHKGCIZ.js.map → core-plugins-JSY2I44L.js.map} +0 -0
  137. /package/dist/{daemon-XFEMMJSZ.js.map → daemon-UOSRDEXW.js.map} +0 -0
  138. /package/dist/{doctor-AV6AUO22.js.map → doctor-6DLACBR4.js.map} +0 -0
  139. /package/dist/{file-service-HHB3JQIO.js.map → file-service-FQQYME7M.js.map} +0 -0
  140. /package/dist/{install-jq-ISTGT263.js.map → install-jq-SN4IA5K4.js.map} +0 -0
  141. /package/dist/{security-2BA265LN.js.map → instance-context-FLCE7VZ4.js.map} +0 -0
  142. /package/dist/{speech-SG62JYIF.js.map → instance-registry-SW5FWKHO.js.map} +0 -0
  143. /package/dist/{post-upgrade-Y26S2ZQ7.js.map → post-upgrade-F4YPMTUT.js.map} +0 -0
  144. /package/dist/{telegram-EAVRDNFU.js.map → security-O4XGN2CM.js.map} +0 -0
  145. /package/dist/{tunnel-HWJ27WDH.js.map → speech-GHTSWDAN.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -258,6 +258,12 @@ interface InstallResult {
258
258
  setupSteps?: string[];
259
259
  }
260
260
  type SessionStatus = "initializing" | "active" | "cancelled" | "finished" | "error";
261
+ interface AgentSwitchEntry {
262
+ agentName: string;
263
+ agentSessionId: string;
264
+ switchedAt: string;
265
+ promptCount: number;
266
+ }
261
267
  interface SessionRecord<P = Record<string, unknown>> {
262
268
  sessionId: string;
263
269
  agentSessionId: string;
@@ -272,6 +278,9 @@ interface SessionRecord<P = Record<string, unknown>> {
272
278
  dangerousMode?: boolean;
273
279
  outputMode?: OutputMode;
274
280
  platform: P;
281
+ firstAgent?: string;
282
+ currentPromptCount?: number;
283
+ agentSwitchHistory?: AgentSwitchEntry[];
275
284
  }
276
285
  interface TelegramPlatformData {
277
286
  topicId: number;
@@ -455,7 +464,6 @@ type McpServerConfig = {
455
464
  headers?: Record<string, string>;
456
465
  };
457
466
 
458
- declare const PLUGINS_DIR: string;
459
467
  declare const LoggingSchema: z.ZodDefault<z.ZodObject<{
460
468
  level: z.ZodDefault<z.ZodEnum<["silent", "debug", "info", "warn", "error", "fatal"]>>;
461
469
  logDir: z.ZodDefault<z.ZodString>;
@@ -494,8 +502,8 @@ declare const TunnelSchema: z.ZodDefault<z.ZodObject<{
494
502
  token?: string | undefined;
495
503
  }>>;
496
504
  }, "strip", z.ZodTypeAny, {
497
- options: Record<string, unknown>;
498
505
  enabled: boolean;
506
+ options: Record<string, unknown>;
499
507
  port: number;
500
508
  provider: "cloudflare" | "ngrok" | "bore" | "tailscale";
501
509
  maxUserTunnels: number;
@@ -505,8 +513,8 @@ declare const TunnelSchema: z.ZodDefault<z.ZodObject<{
505
513
  token?: string | undefined;
506
514
  };
507
515
  }, {
508
- options?: Record<string, unknown> | undefined;
509
516
  enabled?: boolean | undefined;
517
+ options?: Record<string, unknown> | undefined;
510
518
  port?: number | undefined;
511
519
  provider?: "cloudflare" | "ngrok" | "bore" | "tailscale" | undefined;
512
520
  maxUserTunnels?: number | undefined;
@@ -538,6 +546,7 @@ declare const UsageSchema: z.ZodDefault<z.ZodObject<{
538
546
  }>>;
539
547
  type UsageConfig = z.infer<typeof UsageSchema>;
540
548
  declare const ConfigSchema: z.ZodObject<{
549
+ instanceName: z.ZodOptional<z.ZodString>;
541
550
  channels: z.ZodObject<{}, "strip", z.ZodObject<{
542
551
  enabled: z.ZodDefault<z.ZodBoolean>;
543
552
  adapter: z.ZodOptional<z.ZodString>;
@@ -677,8 +686,8 @@ declare const ConfigSchema: z.ZodObject<{
677
686
  token?: string | undefined;
678
687
  }>>;
679
688
  }, "strip", z.ZodTypeAny, {
680
- options: Record<string, unknown>;
681
689
  enabled: boolean;
690
+ options: Record<string, unknown>;
682
691
  port: number;
683
692
  provider: "cloudflare" | "ngrok" | "bore" | "tailscale";
684
693
  maxUserTunnels: number;
@@ -688,8 +697,8 @@ declare const ConfigSchema: z.ZodObject<{
688
697
  token?: string | undefined;
689
698
  };
690
699
  }, {
691
- options?: Record<string, unknown> | undefined;
692
700
  enabled?: boolean | undefined;
701
+ options?: Record<string, unknown> | undefined;
693
702
  port?: number | undefined;
694
703
  provider?: "cloudflare" | "ngrok" | "bore" | "tailscale" | undefined;
695
704
  maxUserTunnels?: number | undefined;
@@ -811,6 +820,13 @@ declare const ConfigSchema: z.ZodObject<{
811
820
  } | undefined;
812
821
  }>>>;
813
822
  outputMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
823
+ agentSwitch: z.ZodDefault<z.ZodObject<{
824
+ labelHistory: z.ZodDefault<z.ZodBoolean>;
825
+ }, "strip", z.ZodTypeAny, {
826
+ labelHistory: boolean;
827
+ }, {
828
+ labelHistory?: boolean | undefined;
829
+ }>>;
814
830
  }, "strip", z.ZodTypeAny, {
815
831
  api: {
816
832
  port: number;
@@ -823,8 +839,8 @@ declare const ConfigSchema: z.ZodObject<{
823
839
  workingDirectory?: string | undefined;
824
840
  }>;
825
841
  tunnel: {
826
- options: Record<string, unknown>;
827
842
  enabled: boolean;
843
+ options: Record<string, unknown>;
828
844
  port: number;
829
845
  provider: "cloudflare" | "ngrok" | "bore" | "tailscale";
830
846
  maxUserTunnels: number;
@@ -834,6 +850,13 @@ declare const ConfigSchema: z.ZodObject<{
834
850
  token?: string | undefined;
835
851
  };
836
852
  };
853
+ usage: {
854
+ enabled: boolean;
855
+ warningThreshold: number;
856
+ currency: string;
857
+ retentionDays: number;
858
+ monthlyBudget?: number | undefined;
859
+ };
837
860
  channels: {} & {
838
861
  [k: string]: z.objectOutputType<{
839
862
  enabled: z.ZodDefault<z.ZodBoolean>;
@@ -863,13 +886,6 @@ declare const ConfigSchema: z.ZodObject<{
863
886
  sessionStore: {
864
887
  ttlDays: number;
865
888
  };
866
- usage: {
867
- enabled: boolean;
868
- warningThreshold: number;
869
- currency: string;
870
- retentionDays: number;
871
- monthlyBudget?: number | undefined;
872
- };
873
889
  integrations: Record<string, {
874
890
  installed: boolean;
875
891
  installedAt?: string | undefined;
@@ -890,6 +906,10 @@ declare const ConfigSchema: z.ZodObject<{
890
906
  }, z.ZodTypeAny, "passthrough">>;
891
907
  };
892
908
  };
909
+ agentSwitch: {
910
+ labelHistory: boolean;
911
+ };
912
+ instanceName?: string | undefined;
893
913
  outputMode?: "low" | "medium" | "high" | undefined;
894
914
  }, {
895
915
  channels: {} & {
@@ -912,8 +932,8 @@ declare const ConfigSchema: z.ZodObject<{
912
932
  workingDirectory?: string | undefined;
913
933
  }> | undefined;
914
934
  tunnel?: {
915
- options?: Record<string, unknown> | undefined;
916
935
  enabled?: boolean | undefined;
936
+ options?: Record<string, unknown> | undefined;
917
937
  port?: number | undefined;
918
938
  provider?: "cloudflare" | "ngrok" | "bore" | "tailscale" | undefined;
919
939
  maxUserTunnels?: number | undefined;
@@ -923,6 +943,14 @@ declare const ConfigSchema: z.ZodObject<{
923
943
  token?: string | undefined;
924
944
  } | undefined;
925
945
  } | undefined;
946
+ usage?: {
947
+ enabled?: boolean | undefined;
948
+ monthlyBudget?: number | undefined;
949
+ warningThreshold?: number | undefined;
950
+ currency?: string | undefined;
951
+ retentionDays?: number | undefined;
952
+ } | undefined;
953
+ instanceName?: string | undefined;
926
954
  outputMode?: "low" | "medium" | "high" | undefined;
927
955
  workspace?: {
928
956
  baseDir?: string | undefined;
@@ -944,13 +972,6 @@ declare const ConfigSchema: z.ZodObject<{
944
972
  sessionStore?: {
945
973
  ttlDays?: number | undefined;
946
974
  } | undefined;
947
- usage?: {
948
- enabled?: boolean | undefined;
949
- monthlyBudget?: number | undefined;
950
- warningThreshold?: number | undefined;
951
- currency?: string | undefined;
952
- retentionDays?: number | undefined;
953
- } | undefined;
954
975
  integrations?: Record<string, {
955
976
  installed: boolean;
956
977
  installedAt?: string | undefined;
@@ -971,13 +992,16 @@ declare const ConfigSchema: z.ZodObject<{
971
992
  }, z.ZodTypeAny, "passthrough">> | undefined;
972
993
  } | undefined;
973
994
  } | undefined;
995
+ agentSwitch?: {
996
+ labelHistory?: boolean | undefined;
997
+ } | undefined;
974
998
  }>;
975
999
  type Config = z.infer<typeof ConfigSchema>;
976
1000
  declare function expandHome(p: string): string;
977
1001
  declare class ConfigManager$1 extends EventEmitter {
978
1002
  private config;
979
1003
  private configPath;
980
- constructor();
1004
+ constructor(configPath?: string);
981
1005
  load(): Promise<void>;
982
1006
  get(): Config;
983
1007
  save(updates: Record<string, unknown>, changePath?: string): Promise<void>;
@@ -1036,6 +1060,7 @@ interface IChannelAdapter {
1036
1060
  stripTTSBlock?(sessionId: string): Promise<void>;
1037
1061
  sendSkillCommands?(sessionId: string, commands: AgentCommand[]): Promise<void>;
1038
1062
  cleanupSkillCommands?(sessionId: string): Promise<void>;
1063
+ cleanupSessionState?(sessionId: string): Promise<void>;
1039
1064
  }
1040
1065
  /**
1041
1066
  * Base class providing default no-op implementations for optional methods.
@@ -1058,6 +1083,7 @@ declare abstract class ChannelAdapter<TCore = unknown> implements IChannelAdapte
1058
1083
  deleteSessionThread(_sessionId: string): Promise<void>;
1059
1084
  sendSkillCommands(_sessionId: string, _commands: AgentCommand[]): Promise<void>;
1060
1085
  cleanupSkillCommands(_sessionId: string): Promise<void>;
1086
+ cleanupSessionState(_sessionId: string): Promise<void>;
1061
1087
  archiveSessionTopic(_sessionId: string): Promise<string>;
1062
1088
  }
1063
1089
 
@@ -1213,7 +1239,8 @@ declare class AgentStore {
1213
1239
  declare class AgentCatalog {
1214
1240
  private store;
1215
1241
  private registryAgents;
1216
- constructor(store?: AgentStore);
1242
+ private cachePath;
1243
+ constructor(store?: AgentStore, cachePath?: string);
1217
1244
  load(): void;
1218
1245
  fetchRegistry(): Promise<void>;
1219
1246
  refreshRegistryIfStale(): Promise<void>;
@@ -1353,6 +1380,7 @@ interface SessionEvents {
1353
1380
  status_change: (from: SessionStatus, to: SessionStatus) => void;
1354
1381
  named: (name: string) => void;
1355
1382
  error: (error: Error) => void;
1383
+ prompt_count_changed: (count: number) => void;
1356
1384
  }
1357
1385
  declare class Session extends TypedEmitter<SessionEvents> {
1358
1386
  id: string;
@@ -1375,6 +1403,8 @@ declare class Session extends TypedEmitter<SessionEvents> {
1375
1403
  agentCapabilities?: AgentCapabilities;
1376
1404
  archiving: boolean;
1377
1405
  promptCount: number;
1406
+ firstAgent: string;
1407
+ agentSwitchHistory: AgentSwitchEntry[];
1378
1408
  log: Logger$1;
1379
1409
  middlewareChain?: MiddlewareChain;
1380
1410
  readonly permissionGate: PermissionGate;
@@ -1425,6 +1455,10 @@ declare class Session extends TypedEmitter<SessionEvents> {
1425
1455
  updateModel(modelId: string): Promise<void>;
1426
1456
  /** Cancel the current prompt and clear the queue. Stays in active state. */
1427
1457
  abortPrompt(): Promise<void>;
1458
+ /** Search backward through agentSwitchHistory for the last entry matching agentName */
1459
+ findLastSwitchEntry(agentName: string): AgentSwitchEntry | undefined;
1460
+ /** Switch the agent instance in-place, preserving session identity */
1461
+ switchAgent(agentName: string, createAgent: () => Promise<AgentInstance>): Promise<void>;
1428
1462
  destroy(): Promise<void>;
1429
1463
  }
1430
1464
 
@@ -1474,6 +1508,8 @@ interface OpenACPPlugin {
1474
1508
  migrate?(ctx: MigrateContext, oldSettings: unknown, oldVersion: string): Promise<unknown>;
1475
1509
  settingsSchema?: zod.ZodSchema;
1476
1510
  essential?: boolean;
1511
+ /** Settings keys that can be copied when creating a new instance from this one */
1512
+ inheritableKeys?: string[];
1477
1513
  }
1478
1514
  interface PluginStorage {
1479
1515
  get<T>(key: string): Promise<T | undefined>;
@@ -1545,6 +1581,8 @@ interface InstallContext {
1545
1581
  legacyConfig?: Record<string, unknown>;
1546
1582
  dataDir: string;
1547
1583
  log: Logger;
1584
+ /** Root of the OpenACP instance directory (e.g. ~/.openacp) */
1585
+ instanceRoot?: string;
1548
1586
  }
1549
1587
  interface MigrateContext {
1550
1588
  pluginName: string;
@@ -1672,6 +1710,11 @@ interface PluginContext {
1672
1710
  eventBus: EventBus$1;
1673
1711
  /** Direct access to OpenACPCore instance. Requires 'kernel:access'. */
1674
1712
  core: unknown;
1713
+ /**
1714
+ * Root directory for this OpenACP instance (default: ~/.openacp).
1715
+ * Plugins should derive file paths from this instead of hardcoding ~/.openacp.
1716
+ */
1717
+ instanceRoot: string;
1675
1718
  }
1676
1719
  interface MiddlewarePayloadMap {
1677
1720
  'message:incoming': {
@@ -1779,6 +1822,17 @@ interface MiddlewarePayloadMap {
1779
1822
  sessionId: string;
1780
1823
  reason?: string;
1781
1824
  };
1825
+ 'agent:beforeSwitch': {
1826
+ sessionId: string;
1827
+ fromAgent: string;
1828
+ toAgent: string;
1829
+ };
1830
+ 'agent:afterSwitch': {
1831
+ sessionId: string;
1832
+ fromAgent: string;
1833
+ toAgent: string;
1834
+ resumed: boolean;
1835
+ };
1782
1836
  }
1783
1837
  type MiddlewareHook = keyof MiddlewarePayloadMap;
1784
1838
  type MiddlewareFn<T> = (payload: T, next: () => Promise<T>) => Promise<T | null>;
@@ -2022,6 +2076,7 @@ declare class SessionBridge {
2022
2076
  private sessionEventHandler?;
2023
2077
  private statusChangeHandler?;
2024
2078
  private namedHandler?;
2079
+ private promptCountHandler?;
2025
2080
  constructor(session: Session, adapter: IChannelAdapter, deps: BridgeDeps);
2026
2081
  private get tracer();
2027
2082
  /** Send message to adapter, optionally running through message:outgoing middleware */
@@ -2043,6 +2098,7 @@ interface TunnelEntry {
2043
2098
  publicUrl?: string;
2044
2099
  sessionId?: string;
2045
2100
  status: 'stopped' | 'starting' | 'active' | 'failed';
2101
+ retryCount: number;
2046
2102
  createdAt: string;
2047
2103
  }
2048
2104
 
@@ -2080,7 +2136,7 @@ declare class TunnelService {
2080
2136
  private config;
2081
2137
  private systemPort;
2082
2138
  private startError;
2083
- constructor(config: TunnelConfig);
2139
+ constructor(config: TunnelConfig, registryPath?: string);
2084
2140
  start(): Promise<string>;
2085
2141
  stop(): Promise<void>;
2086
2142
  addTunnel(port: number, opts?: {
@@ -2209,6 +2265,8 @@ interface LifecycleManagerOpts {
2209
2265
  log?: Logger;
2210
2266
  settingsManager?: SettingsManager;
2211
2267
  pluginRegistry?: PluginRegistry;
2268
+ /** Root directory for this OpenACP instance (default: ~/.openacp) */
2269
+ instanceRoot?: string;
2212
2270
  }
2213
2271
  declare class LifecycleManager {
2214
2272
  readonly serviceRegistry: ServiceRegistry;
@@ -2220,8 +2278,9 @@ declare class LifecycleManager {
2220
2278
  private config;
2221
2279
  private core;
2222
2280
  private log;
2223
- private settingsManager;
2281
+ settingsManager: SettingsManager | undefined;
2224
2282
  private pluginRegistry;
2283
+ private instanceRoot;
2225
2284
  private contexts;
2226
2285
  private loadOrder;
2227
2286
  private _loaded;
@@ -2250,6 +2309,8 @@ interface ContextQuery {
2250
2309
  interface ContextOptions {
2251
2310
  maxTokens?: number;
2252
2311
  limit?: number;
2312
+ /** When true, insert `## [agentName]` headers at agent boundaries in merged history */
2313
+ labelAgent?: boolean;
2253
2314
  }
2254
2315
  interface SessionInfo {
2255
2316
  checkpointId: string;
@@ -2284,13 +2345,37 @@ interface ContextResult {
2284
2345
  declare class ContextManager {
2285
2346
  private providers;
2286
2347
  private cache;
2287
- constructor();
2348
+ constructor(cachePath?: string);
2288
2349
  register(provider: ContextProvider): void;
2289
2350
  getProvider(repoPath: string): Promise<ContextProvider | null>;
2290
2351
  listSessions(query: ContextQuery): Promise<SessionListResult | null>;
2291
2352
  buildContext(query: ContextQuery, options?: ContextOptions): Promise<ContextResult | null>;
2292
2353
  }
2293
2354
 
2355
+ interface InstanceContext {
2356
+ id: string;
2357
+ root: string;
2358
+ isGlobal: boolean;
2359
+ paths: {
2360
+ config: string;
2361
+ sessions: string;
2362
+ agents: string;
2363
+ registryCache: string;
2364
+ plugins: string;
2365
+ pluginsData: string;
2366
+ pluginRegistry: string;
2367
+ logs: string;
2368
+ pid: string;
2369
+ running: string;
2370
+ apiPort: string;
2371
+ apiSecret: string;
2372
+ bin: string;
2373
+ cache: string;
2374
+ tunnels: string;
2375
+ agentsDir: string;
2376
+ };
2377
+ }
2378
+
2294
2379
  declare class OpenACPCore {
2295
2380
  configManager: ConfigManager$1;
2296
2381
  agentCatalog: AgentCatalog;
@@ -2298,21 +2383,25 @@ declare class OpenACPCore {
2298
2383
  sessionManager: SessionManager;
2299
2384
  messageTransformer: MessageTransformer;
2300
2385
  adapters: Map<string, IChannelAdapter>;
2386
+ /** sessionId → SessionBridge — tracks active bridges for disconnect/reconnect during agent switch */
2387
+ private bridges;
2301
2388
  /** Set by main.ts — triggers graceful shutdown with restart exit code */
2302
2389
  requestRestart: (() => Promise<void>) | null;
2303
2390
  private _tunnelService?;
2304
2391
  private sessionStore;
2305
2392
  private resumeLocks;
2393
+ private switchingLocks;
2306
2394
  eventBus: EventBus;
2307
2395
  sessionFactory: SessionFactory;
2308
2396
  readonly lifecycleManager: LifecycleManager;
2397
+ readonly instanceContext?: InstanceContext;
2309
2398
  private getService;
2310
2399
  get securityGuard(): SecurityGuard;
2311
2400
  get notificationManager(): NotificationManager;
2312
2401
  get fileService(): FileServiceInterface;
2313
2402
  get speechService(): SpeechService;
2314
2403
  get contextManager(): ContextManager;
2315
- constructor(configManager: ConfigManager$1);
2404
+ constructor(configManager: ConfigManager$1, ctx?: InstanceContext);
2316
2405
  get tunnelService(): TunnelService | undefined;
2317
2406
  set tunnelService(service: TunnelService | undefined);
2318
2407
  registerAdapter(name: string, adapter: IChannelAdapter): void;
@@ -2361,6 +2450,10 @@ declare class OpenACPCore {
2361
2450
  session: Session;
2362
2451
  contextResult: ContextResult | null;
2363
2452
  }>;
2453
+ switchSessionAgent(sessionId: string, toAgent: string): Promise<{
2454
+ resumed: boolean;
2455
+ }>;
2456
+ private _doSwitchSessionAgent;
2364
2457
  /**
2365
2458
  * Get active session by thread, or attempt lazy resume from store.
2366
2459
  * Used by adapter command handlers that need a session but don't go through handleMessage().
@@ -2452,8 +2545,10 @@ interface PendingFix {
2452
2545
 
2453
2546
  declare class DoctorEngine {
2454
2547
  private dryRun;
2548
+ private dataDir;
2455
2549
  constructor(options?: {
2456
2550
  dryRun?: boolean;
2551
+ dataDir?: string;
2457
2552
  });
2458
2553
  runAll(): Promise<DoctorReport>;
2459
2554
  private buildContext;
@@ -2477,21 +2572,21 @@ declare function getConfigValue(config: Config, path: string): unknown;
2477
2572
 
2478
2573
  declare function runConfigEditor(configManager: ConfigManager$1, mode?: 'file' | 'api', apiPort?: number): Promise<void>;
2479
2574
 
2575
+ declare function getPidPath(root?: string): string;
2480
2576
  declare function getStatus(pidPath?: string): {
2481
2577
  running: boolean;
2482
2578
  pid?: number;
2483
2579
  };
2484
- declare function startDaemon(pidPath?: string, logDir?: string): {
2580
+ declare function startDaemon(pidPath?: string, logDir?: string, instanceRoot?: string): {
2485
2581
  pid: number;
2486
2582
  } | {
2487
2583
  error: string;
2488
2584
  };
2489
- declare function stopDaemon(pidPath?: string): Promise<{
2585
+ declare function stopDaemon(pidPath?: string, instanceRoot?: string): Promise<{
2490
2586
  stopped: boolean;
2491
2587
  pid?: number;
2492
2588
  error?: string;
2493
2589
  }>;
2494
- declare function getPidPath(): string;
2495
2590
 
2496
2591
  declare function isAutoStartSupported(): boolean;
2497
2592
  declare function installAutoStart(logDir: string): {
@@ -2870,6 +2965,125 @@ declare class ActivityTracker {
2870
2965
  private stopRefresh;
2871
2966
  }
2872
2967
 
2968
+ interface ToolEntry {
2969
+ id: string;
2970
+ name: string;
2971
+ kind: string;
2972
+ rawInput: unknown;
2973
+ content: string | null;
2974
+ status: string;
2975
+ viewerLinks?: ViewerLinks;
2976
+ diffStats?: {
2977
+ added: number;
2978
+ removed: number;
2979
+ };
2980
+ displaySummary?: string;
2981
+ displayTitle?: string;
2982
+ displayKind?: string;
2983
+ isNoise: boolean;
2984
+ }
2985
+ declare class ToolStateMap {
2986
+ private entries;
2987
+ private pendingUpdates;
2988
+ /**
2989
+ * Creates or updates an entry from a tool_call event.
2990
+ * If a pending update exists for this id, applies it immediately.
2991
+ */
2992
+ upsert(meta: ToolCallMeta, kind: string, rawInput: unknown): ToolEntry;
2993
+ /**
2994
+ * Updates an existing entry from a tool_call_update event.
2995
+ * If the entry doesn't exist yet (out-of-order delivery), buffers the update.
2996
+ */
2997
+ merge(id: string, status: string, rawInput?: unknown, content?: string | null, viewerLinks?: ViewerLinks, diffStats?: {
2998
+ added: number;
2999
+ removed: number;
3000
+ }): ToolEntry | undefined;
3001
+ private _applyUpdate;
3002
+ get(id: string): ToolEntry | undefined;
3003
+ clear(): void;
3004
+ }
3005
+ declare class ThoughtBuffer {
3006
+ private chunks;
3007
+ private sealed;
3008
+ append(chunk: string): void;
3009
+ seal(): string;
3010
+ getText(): string;
3011
+ isSealed(): boolean;
3012
+ reset(): void;
3013
+ }
3014
+
3015
+ interface ToolDisplaySpec {
3016
+ id: string;
3017
+ kind: string;
3018
+ icon: string;
3019
+ title: string;
3020
+ description: string | null;
3021
+ command: string | null;
3022
+ inputContent: string | null;
3023
+ outputSummary: string | null;
3024
+ outputContent: string | null;
3025
+ diffStats: {
3026
+ added: number;
3027
+ removed: number;
3028
+ } | null;
3029
+ viewerLinks?: ViewerLinks;
3030
+ outputViewerLink?: string;
3031
+ outputFallbackContent?: string;
3032
+ status: string;
3033
+ isNoise: boolean;
3034
+ isHidden: boolean;
3035
+ }
3036
+ interface ThoughtDisplaySpec {
3037
+ indicator: string;
3038
+ content: string | null;
3039
+ }
3040
+ declare class DisplaySpecBuilder {
3041
+ private tunnelService?;
3042
+ constructor(tunnelService?: TunnelServiceInterface | undefined);
3043
+ buildToolSpec(entry: ToolEntry, mode: OutputMode, sessionContext?: {
3044
+ id: string;
3045
+ workingDirectory: string;
3046
+ }): ToolDisplaySpec;
3047
+ buildThoughtSpec(content: string, mode: OutputMode): ThoughtDisplaySpec;
3048
+ }
3049
+
3050
+ interface UsageData {
3051
+ tokensUsed?: number;
3052
+ contextSize?: number;
3053
+ cost?: number;
3054
+ }
3055
+ interface ToolCardSnapshot {
3056
+ specs: ToolDisplaySpec[];
3057
+ planEntries?: PlanEntry[];
3058
+ usage?: UsageData;
3059
+ totalVisible: number;
3060
+ completedVisible: number;
3061
+ allComplete: boolean;
3062
+ }
3063
+ interface ToolCardStateConfig {
3064
+ onFlush: (snapshot: ToolCardSnapshot) => void;
3065
+ }
3066
+ declare class ToolCardState {
3067
+ private specs;
3068
+ private planEntries?;
3069
+ private usage?;
3070
+ private finalized;
3071
+ private isFirstFlush;
3072
+ private debounceTimer?;
3073
+ private onFlush;
3074
+ constructor(config: ToolCardStateConfig);
3075
+ updateFromSpec(spec: ToolDisplaySpec): void;
3076
+ updatePlan(entries: PlanEntry[]): void;
3077
+ appendUsage(usage: UsageData): void;
3078
+ finalize(): void;
3079
+ destroy(): void;
3080
+ hasContent(): boolean;
3081
+ private snapshot;
3082
+ private flush;
3083
+ private scheduleFlush;
3084
+ private clearDebounce;
3085
+ }
3086
+
2873
3087
  declare function progressBar(ratio: number, length?: number): string;
2874
3088
  declare function formatTokens(n: number): string;
2875
3089
  declare function stripCodeFences(text: string): string;
@@ -2885,6 +3099,20 @@ declare function resolveToolIcon(tool: {
2885
3099
  kind?: string;
2886
3100
  }): string;
2887
3101
 
3102
+ interface ConfigManagerLike {
3103
+ get(): Record<string, unknown>;
3104
+ }
3105
+ interface SessionManagerLike {
3106
+ getSession(id: string): {
3107
+ record?: {
3108
+ outputMode?: OutputMode;
3109
+ };
3110
+ } | undefined;
3111
+ }
3112
+ declare class OutputModeResolver {
3113
+ resolve(configManager: ConfigManagerLike, adapterName: string, sessionId?: string, sessionManager?: SessionManagerLike): OutputMode;
3114
+ }
3115
+
2888
3116
  /**
2889
3117
  * OpenACP Product Guide — comprehensive reference for the AI assistant.
2890
3118
  * The assistant reads this at runtime to answer user questions about features.
@@ -2905,6 +3133,7 @@ declare class TelegramAdapter extends MessagingAdapter {
2905
3133
  private core;
2906
3134
  private bot;
2907
3135
  private telegramConfig;
3136
+ private saveTopicIds?;
2908
3137
  private permissionHandler;
2909
3138
  private assistantSession;
2910
3139
  private assistantInitializing;
@@ -2921,7 +3150,10 @@ declare class TelegramAdapter extends MessagingAdapter {
2921
3150
  private callbackCounter;
2922
3151
  private getThreadId;
2923
3152
  private getOrCreateTracker;
2924
- constructor(core: OpenACPCore, config: TelegramChannelConfig);
3153
+ constructor(core: OpenACPCore, config: TelegramChannelConfig, saveTopicIds?: (updates: {
3154
+ notificationTopicId?: number;
3155
+ assistantTopicId?: number;
3156
+ }) => Promise<void>);
2925
3157
  start(): Promise<void>;
2926
3158
  stop(): Promise<void>;
2927
3159
  private renderCommandResponse;
@@ -2959,8 +3191,9 @@ declare class TelegramAdapter extends MessagingAdapter {
2959
3191
  private downloadTelegramFile;
2960
3192
  private handleIncomingMedia;
2961
3193
  cleanupSkillCommands(sessionId: string): Promise<void>;
3194
+ cleanupSessionState(sessionId: string): Promise<void>;
2962
3195
  stripTTSBlock(sessionId: string): Promise<void>;
2963
3196
  archiveSessionTopic(sessionId: string): Promise<string>;
2964
3197
  }
2965
3198
 
2966
- export { ActivityTracker, type AdapterCapabilities, type AgentCapabilities, AgentCatalog, type AgentCommand, type AgentDefinition, type AgentDistribution, type AgentEvent, AgentInstance, type AgentListItem, AgentManager, AgentStore, type ApiConfig, ApiServer, type Attachment, type AuthMethod, type AuthenticateRequest, type AvailabilityResult, BaseRenderer, type BridgeDeps, CONFIG_REGISTRY, ChannelAdapter, type ChannelConfig, type CleanupResult, type CommandArgs, type CommandDef, CommandRegistry, type CommandResponse, type Config, type ConfigFieldDef, ConfigManager$1 as ConfigManager, type ConfigOption, type ConfigSelectChoice, type ConfigSelectGroup, type ContentBlock, ContextManager, type ContextOptions, type ContextProvider, type ContextQuery, type ContextResult, type ContextService, type SessionInfo as ContextSessionInfo, type DeleteTopicResult, type DisplayVerbosity, DoctorEngine, type DoctorReport, DraftManager, EntireProvider, EventBus, type EventBusEvents, FileService, type FileServiceInterface, GroqSTT, type IChannelAdapter, type IRenderer, type IncomingMessage, type InstallContext, type InstallProgress, type InstallResult, type InstalledAgent, KIND_ICONS, type ListItem, type Logger$1 as Logger, type LoggingConfig, type McpServerConfig, type MenuOption, MessageTransformer, MessagingAdapter, type MessagingAdapterConfig, type MigrateContext, type ModelInfo, type NewSessionResponse, NotificationManager, type NotificationMessage, type NotificationService, OpenACPCore, type OpenACPPlugin, type OutgoingMessage, PLUGINS_DIR, PRODUCT_GUIDE, type PendingFix, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, type PluginContext, type PluginPermission, type PluginStorage, PromptQueue, type PromptResponse, type RegistryAgent, type RegistryBinaryTarget, type RegistryDistribution, type RenderedMessage, SSEManager, STATUS_ICONS, type STTOptions, type STTProvider$1 as STTProvider, type STTResult, SecurityGuard, type SecurityService, SendQueue, Session, SessionBridge, type SessionCreateParams, type SessionEvents, SessionFactory, type SessionListItem, type SessionListResponse, type SessionListResult, SessionManager, type SessionMode, type SessionModeState, type SessionModelState, type SessionRecord, type SessionStatus, type SetConfigOptionValue, type SettingsAPI, type SideEffectDeps, type SpeechProviderConfig, SpeechService, type SpeechServiceConfig, type SpeechServiceInterface, StaticServer, StderrCapture, type StopReason, StreamAdapter, type TTSOptions, type TTSProvider$1 as TTSProvider, type TTSResult, TelegramAdapter, type TelegramPlatformData, type TerminalIO, type ToolCallMeta, ToolCallTracker, type ToolUpdateMeta, type TopicInfo, TopicManager, type TunnelServiceInterface, TypedEmitter, type UsageConfig, type UsageRecord, type UsageRecordEvent, type UsageService, type ViewerLinks, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, extractContentText, formatTokens, formatToolSummary, formatToolTitle, getConfigValue, getFieldDef, getPidPath, getSafeFields, getStatus, initLogger, installAutoStart, isAutoStartInstalled, isAutoStartSupported, isHotReloadable, log, nodeToWebReadable, nodeToWebWritable, progressBar, resolveOptions, resolveToolIcon, runConfigEditor, setLogLevel, shutdownLogger, splitMessage, startDaemon, stopDaemon, stripCodeFences, truncateContent, uninstallAutoStart };
3199
+ export { ActivityTracker, type AdapterCapabilities, type AgentCapabilities, AgentCatalog, type AgentCommand, type AgentDefinition, type AgentDistribution, type AgentEvent, AgentInstance, type AgentListItem, AgentManager, AgentStore, type AgentSwitchEntry, type ApiConfig, ApiServer, type Attachment, type AuthMethod, type AuthenticateRequest, type AvailabilityResult, BaseRenderer, type BridgeDeps, CONFIG_REGISTRY, ChannelAdapter, type ChannelConfig, type CleanupResult, type CommandArgs, type CommandDef, CommandRegistry, type CommandResponse, type Config, type ConfigFieldDef, ConfigManager$1 as ConfigManager, type ConfigOption, type ConfigSelectChoice, type ConfigSelectGroup, type ContentBlock, ContextManager, type ContextOptions, type ContextProvider, type ContextQuery, type ContextResult, type ContextService, type SessionInfo as ContextSessionInfo, type DeleteTopicResult, DisplaySpecBuilder, type DisplayVerbosity, DoctorEngine, type DoctorReport, DraftManager, EntireProvider, EventBus, type EventBusEvents, FileService, type FileServiceInterface, GroqSTT, type IChannelAdapter, type IRenderer, type IncomingMessage, type InstallContext, type InstallProgress, type InstallResult, type InstalledAgent, KIND_ICONS, type ListItem, type Logger$1 as Logger, type LoggingConfig, type McpServerConfig, type MenuOption, MessageTransformer, MessagingAdapter, type MessagingAdapterConfig, type MigrateContext, type ModelInfo, type NewSessionResponse, NotificationManager, type NotificationMessage, type NotificationService, OpenACPCore, type OpenACPPlugin, type OutgoingMessage, type OutputMode, OutputModeResolver, PRODUCT_GUIDE, type PendingFix, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, type PluginContext, type PluginPermission, type PluginStorage, PromptQueue, type PromptResponse, type RegistryAgent, type RegistryBinaryTarget, type RegistryDistribution, type RenderedMessage, SSEManager, STATUS_ICONS, type STTOptions, type STTProvider$1 as STTProvider, type STTResult, SecurityGuard, type SecurityService, SendQueue, Session, SessionBridge, type SessionCreateParams, type SessionEvents, SessionFactory, type SessionListItem, type SessionListResponse, type SessionListResult, SessionManager, type SessionMode, type SessionModeState, type SessionModelState, type SessionRecord, type SessionStatus, type SetConfigOptionValue, type SettingsAPI, type SideEffectDeps, type SpeechProviderConfig, SpeechService, type SpeechServiceConfig, type SpeechServiceInterface, StaticServer, StderrCapture, type StopReason, StreamAdapter, type TTSOptions, type TTSProvider$1 as TTSProvider, type TTSResult, TelegramAdapter, type TelegramPlatformData, type TerminalIO, ThoughtBuffer, type ThoughtDisplaySpec, type ToolCallMeta, ToolCallTracker, type ToolCardSnapshot, ToolCardState, type ToolCardStateConfig, type ToolDisplaySpec, type ToolEntry, ToolStateMap, type ToolUpdateMeta, type TopicInfo, TopicManager, type TunnelServiceInterface, TypedEmitter, type UsageConfig, type UsageRecord, type UsageRecordEvent, type UsageService, type ViewerLinks, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, extractContentText, formatTokens, formatToolSummary, formatToolTitle, getConfigValue, getFieldDef, getPidPath, getSafeFields, getStatus, initLogger, installAutoStart, isAutoStartInstalled, isAutoStartSupported, isHotReloadable, log, nodeToWebReadable, nodeToWebWritable, progressBar, resolveOptions, resolveToolIcon, runConfigEditor, setLogLevel, shutdownLogger, splitMessage, startDaemon, stopDaemon, stripCodeFences, truncateContent, uninstallAutoStart };