@openacp/cli 2026.328.2 → 2026.330.2

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 (85) hide show
  1. package/dist/{adapter-HGJENQCN.js → adapter-4U6MC5ZS.js} +4 -4
  2. package/dist/api-server-5VNYFWJE.js +7 -0
  3. package/dist/{api-server-WFB5K6FP.js → api-server-JLBDKCU4.js} +2 -2
  4. package/dist/{chunk-I53NEV3S.js → chunk-5WGVYX3C.js} +13 -3
  5. package/dist/chunk-5WGVYX3C.js.map +1 -0
  6. package/dist/{chunk-RXMWJHWH.js → chunk-5ZNBNIK3.js} +723 -217
  7. package/dist/chunk-5ZNBNIK3.js.map +1 -0
  8. package/dist/{chunk-6VR4GWOO.js → chunk-7RKPIM3E.js} +247 -70
  9. package/dist/chunk-7RKPIM3E.js.map +1 -0
  10. package/dist/{chunk-IXMIC4GQ.js → chunk-BTJHGSLM.js} +2 -2
  11. package/dist/{chunk-5TCXYDLR.js → chunk-CFUJGWOP.js} +2 -2
  12. package/dist/{chunk-43JVXFYP.js → chunk-GEOXPGCO.js} +2 -2
  13. package/dist/{chunk-JUFN4XMB.js → chunk-KDU3ZEWT.js} +2 -2
  14. package/dist/{chunk-QWP76EBW.js → chunk-MITTQMGZ.js} +16 -9
  15. package/dist/chunk-MITTQMGZ.js.map +1 -0
  16. package/dist/{chunk-QBEQJFGL.js → chunk-MPGEHTGE.js} +3 -3
  17. package/dist/{chunk-4B6PCWQP.js → chunk-PA6MNBG4.js} +6 -2
  18. package/dist/chunk-PA6MNBG4.js.map +1 -0
  19. package/dist/{chunk-VD3QSMVY.js → chunk-QWVHCTCA.js} +2 -2
  20. package/dist/{chunk-NT6FYV27.js → chunk-TMVTSWVH.js} +2 -2
  21. package/dist/chunk-UWH7KIAA.js +701 -0
  22. package/dist/chunk-UWH7KIAA.js.map +1 -0
  23. package/dist/{chunk-JOMDPFQ2.js → chunk-W4LK6WJP.js} +29 -4
  24. package/dist/chunk-W4LK6WJP.js.map +1 -0
  25. package/dist/{chunk-E2SLHZAC.js → chunk-YIGBJFJL.js} +6 -6
  26. package/dist/cli.js +63 -68
  27. package/dist/cli.js.map +1 -1
  28. package/dist/config-KN6NKKPF.js +20 -0
  29. package/dist/{config-editor-OU6PUY66.js → config-editor-76RVZS4B.js} +3 -3
  30. package/dist/context-NXXW62NJ.js +9 -0
  31. package/dist/{core-plugins-R2EVZAJV.js → core-plugins-OCHKGCIZ.js} +9 -9
  32. package/dist/{daemon-DTA6KYYY.js → daemon-XFEMMJSZ.js} +3 -3
  33. package/dist/doctor-AV6AUO22.js +9 -0
  34. package/dist/index.d.ts +104 -42
  35. package/dist/index.js +8 -8
  36. package/dist/{main-RRSX5SRL.js → main-L2M4NTJY.js} +38 -30
  37. package/dist/main-L2M4NTJY.js.map +1 -0
  38. package/dist/{plugin-installer-5XHORMLS.js → plugin-installer-VSTYZSXC.js} +2 -2
  39. package/dist/{setup-OI6A3OXW.js → setup-E6BNEYCS.js} +4 -5
  40. package/dist/setup-E6BNEYCS.js.map +1 -0
  41. package/dist/speech-SG62JYIF.js +9 -0
  42. package/dist/telegram-EAVRDNFU.js +7 -0
  43. package/dist/tunnel-HWJ27WDH.js +7 -0
  44. package/dist/{tunnel-service-I2NFUX3V.js → tunnel-service-ZMO4THKE.js} +88 -8
  45. package/dist/tunnel-service-ZMO4THKE.js.map +1 -0
  46. package/package.json +1 -1
  47. package/dist/api-server-DSUW637I.js +0 -7
  48. package/dist/chunk-4B6PCWQP.js.map +0 -1
  49. package/dist/chunk-6VR4GWOO.js.map +0 -1
  50. package/dist/chunk-I53NEV3S.js.map +0 -1
  51. package/dist/chunk-JOMDPFQ2.js.map +0 -1
  52. package/dist/chunk-QWP76EBW.js.map +0 -1
  53. package/dist/chunk-RXMWJHWH.js.map +0 -1
  54. package/dist/chunk-ZHGPZBS4.js +0 -49
  55. package/dist/chunk-ZHGPZBS4.js.map +0 -1
  56. package/dist/config-UCAFCS5W.js +0 -14
  57. package/dist/context-7MPU7RL5.js +0 -9
  58. package/dist/doctor-D723IB2I.js +0 -9
  59. package/dist/main-RRSX5SRL.js.map +0 -1
  60. package/dist/setup-OI6A3OXW.js.map +0 -1
  61. package/dist/speech-GB7PHVQZ.js +0 -9
  62. package/dist/telegram-UVIAXADE.js +0 -7
  63. package/dist/tunnel-4WNFC7GO.js +0 -7
  64. package/dist/tunnel-service-I2NFUX3V.js.map +0 -1
  65. /package/dist/{adapter-HGJENQCN.js.map → adapter-4U6MC5ZS.js.map} +0 -0
  66. /package/dist/{api-server-DSUW637I.js.map → api-server-5VNYFWJE.js.map} +0 -0
  67. /package/dist/{api-server-WFB5K6FP.js.map → api-server-JLBDKCU4.js.map} +0 -0
  68. /package/dist/{chunk-IXMIC4GQ.js.map → chunk-BTJHGSLM.js.map} +0 -0
  69. /package/dist/{chunk-5TCXYDLR.js.map → chunk-CFUJGWOP.js.map} +0 -0
  70. /package/dist/{chunk-43JVXFYP.js.map → chunk-GEOXPGCO.js.map} +0 -0
  71. /package/dist/{chunk-JUFN4XMB.js.map → chunk-KDU3ZEWT.js.map} +0 -0
  72. /package/dist/{chunk-QBEQJFGL.js.map → chunk-MPGEHTGE.js.map} +0 -0
  73. /package/dist/{chunk-VD3QSMVY.js.map → chunk-QWVHCTCA.js.map} +0 -0
  74. /package/dist/{chunk-NT6FYV27.js.map → chunk-TMVTSWVH.js.map} +0 -0
  75. /package/dist/{chunk-E2SLHZAC.js.map → chunk-YIGBJFJL.js.map} +0 -0
  76. /package/dist/{config-UCAFCS5W.js.map → config-KN6NKKPF.js.map} +0 -0
  77. /package/dist/{config-editor-OU6PUY66.js.map → config-editor-76RVZS4B.js.map} +0 -0
  78. /package/dist/{context-7MPU7RL5.js.map → context-NXXW62NJ.js.map} +0 -0
  79. /package/dist/{core-plugins-R2EVZAJV.js.map → core-plugins-OCHKGCIZ.js.map} +0 -0
  80. /package/dist/{daemon-DTA6KYYY.js.map → daemon-XFEMMJSZ.js.map} +0 -0
  81. /package/dist/{doctor-D723IB2I.js.map → doctor-AV6AUO22.js.map} +0 -0
  82. /package/dist/{plugin-installer-5XHORMLS.js.map → plugin-installer-VSTYZSXC.js.map} +0 -0
  83. /package/dist/{speech-GB7PHVQZ.js.map → speech-SG62JYIF.js.map} +0 -0
  84. /package/dist/{telegram-UVIAXADE.js.map → telegram-EAVRDNFU.js.map} +0 -0
  85. /package/dist/{tunnel-4WNFC7GO.js.map → tunnel-HWJ27WDH.js.map} +0 -0
@@ -0,0 +1,20 @@
1
+ import {
2
+ ConfigManager,
3
+ ConfigSchema,
4
+ OPENACP_DIR,
5
+ PLUGINS_DATA_DIR,
6
+ PLUGINS_DIR,
7
+ REGISTRY_PATH,
8
+ expandHome
9
+ } from "./chunk-W4LK6WJP.js";
10
+ import "./chunk-R6KZYF7D.js";
11
+ export {
12
+ ConfigManager,
13
+ ConfigSchema,
14
+ OPENACP_DIR,
15
+ PLUGINS_DATA_DIR,
16
+ PLUGINS_DIR,
17
+ REGISTRY_PATH,
18
+ expandHome
19
+ };
20
+ //# sourceMappingURL=config-KN6NKKPF.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  runConfigEditor
3
- } from "./chunk-QBEQJFGL.js";
3
+ } from "./chunk-MPGEHTGE.js";
4
4
  import "./chunk-2R5XM3ES.js";
5
- import "./chunk-JOMDPFQ2.js";
5
+ import "./chunk-W4LK6WJP.js";
6
6
  import "./chunk-R6KZYF7D.js";
7
7
  export {
8
8
  runConfigEditor
9
9
  };
10
- //# sourceMappingURL=config-editor-OU6PUY66.js.map
10
+ //# sourceMappingURL=config-editor-76RVZS4B.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ context_default
3
+ } from "./chunk-UWH7KIAA.js";
4
+ import "./chunk-MITTQMGZ.js";
5
+ import "./chunk-APS6UEFU.js";
6
+ export {
7
+ context_default as default
8
+ };
9
+ //# sourceMappingURL=context-NXXW62NJ.js.map
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  corePlugins
3
- } from "./chunk-E2SLHZAC.js";
4
- import "./chunk-5TCXYDLR.js";
3
+ } from "./chunk-YIGBJFJL.js";
4
+ import "./chunk-CFUJGWOP.js";
5
5
  import "./chunk-3EWTPOF7.js";
6
- import "./chunk-4B6PCWQP.js";
7
- import "./chunk-JUFN4XMB.js";
6
+ import "./chunk-PA6MNBG4.js";
7
+ import "./chunk-KDU3ZEWT.js";
8
8
  import "./chunk-5OCGO27U.js";
9
9
  import "./chunk-3NAFXVQM.js";
10
- import "./chunk-ZHGPZBS4.js";
11
- import "./chunk-NT6FYV27.js";
12
- import "./chunk-I53NEV3S.js";
10
+ import "./chunk-UWH7KIAA.js";
11
+ import "./chunk-TMVTSWVH.js";
12
+ import "./chunk-5WGVYX3C.js";
13
13
  import "./chunk-7ZCQF6QM.js";
14
14
  import "./chunk-LGFWH3AE.js";
15
15
  import "./chunk-IZ5UEZF7.js";
16
- import "./chunk-QWP76EBW.js";
16
+ import "./chunk-MITTQMGZ.js";
17
17
  import "./chunk-APS6UEFU.js";
18
18
  import "./chunk-2KT6TROD.js";
19
19
  export {
20
20
  corePlugins
21
21
  };
22
- //# sourceMappingURL=core-plugins-R2EVZAJV.js.map
22
+ //# sourceMappingURL=core-plugins-OCHKGCIZ.js.map
@@ -10,8 +10,8 @@ import {
10
10
  startDaemon,
11
11
  stopDaemon,
12
12
  writePidFile
13
- } from "./chunk-VD3QSMVY.js";
14
- import "./chunk-JOMDPFQ2.js";
13
+ } from "./chunk-QWVHCTCA.js";
14
+ import "./chunk-W4LK6WJP.js";
15
15
  import "./chunk-R6KZYF7D.js";
16
16
  export {
17
17
  clearRunning,
@@ -26,4 +26,4 @@ export {
26
26
  stopDaemon,
27
27
  writePidFile
28
28
  };
29
- //# sourceMappingURL=daemon-DTA6KYYY.js.map
29
+ //# sourceMappingURL=daemon-XFEMMJSZ.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ DoctorEngine
3
+ } from "./chunk-GEOXPGCO.js";
4
+ import "./chunk-W4LK6WJP.js";
5
+ import "./chunk-R6KZYF7D.js";
6
+ export {
7
+ DoctorEngine
8
+ };
9
+ //# sourceMappingURL=doctor-AV6AUO22.js.map
package/dist/index.d.ts CHANGED
@@ -5,6 +5,32 @@ import { EventEmitter } from 'node:events';
5
5
  import { SetSessionConfigOptionResponse, ListSessionsResponse, LoadSessionResponse, ForkSessionResponse, PromptResponse as PromptResponse$1 } from '@agentclientprotocol/sdk';
6
6
  import * as http from 'node:http';
7
7
 
8
+ type OutputMode = "low" | "medium" | "high";
9
+ /** @deprecated Use OutputMode instead */
10
+ type DisplayVerbosity = OutputMode;
11
+ declare const STATUS_ICONS: Record<string, string>;
12
+ declare const KIND_ICONS: Record<string, string>;
13
+ interface ViewerLinks {
14
+ file?: string;
15
+ diff?: string;
16
+ }
17
+ interface ToolCallMeta {
18
+ id: string;
19
+ name: string;
20
+ kind?: string;
21
+ status?: string;
22
+ content?: unknown;
23
+ rawInput?: unknown;
24
+ viewerLinks?: ViewerLinks;
25
+ viewerFilePath?: string;
26
+ displaySummary?: string;
27
+ displayTitle?: string;
28
+ displayKind?: string;
29
+ }
30
+ interface ToolUpdateMeta extends ToolCallMeta {
31
+ status: string;
32
+ }
33
+
8
34
  interface Attachment {
9
35
  type: 'image' | 'audio' | 'file';
10
36
  filePath: string;
@@ -244,6 +270,7 @@ interface SessionRecord<P = Record<string, unknown>> {
244
270
  lastActiveAt: string;
245
271
  name?: string;
246
272
  dangerousMode?: boolean;
273
+ outputMode?: OutputMode;
247
274
  platform: P;
248
275
  }
249
276
  interface TelegramPlatformData {
@@ -514,39 +541,48 @@ declare const ConfigSchema: z.ZodObject<{
514
541
  channels: z.ZodObject<{}, "strip", z.ZodObject<{
515
542
  enabled: z.ZodDefault<z.ZodBoolean>;
516
543
  adapter: z.ZodOptional<z.ZodString>;
517
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
544
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
545
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
518
546
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
519
547
  enabled: z.ZodDefault<z.ZodBoolean>;
520
548
  adapter: z.ZodOptional<z.ZodString>;
521
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
549
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
550
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
522
551
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
523
552
  enabled: z.ZodDefault<z.ZodBoolean>;
524
553
  adapter: z.ZodOptional<z.ZodString>;
525
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
554
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
555
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
526
556
  }, z.ZodTypeAny, "passthrough">>, z.objectOutputType<{}, z.ZodObject<{
527
557
  enabled: z.ZodDefault<z.ZodBoolean>;
528
558
  adapter: z.ZodOptional<z.ZodString>;
529
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
559
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
560
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
530
561
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
531
562
  enabled: z.ZodDefault<z.ZodBoolean>;
532
563
  adapter: z.ZodOptional<z.ZodString>;
533
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
564
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
565
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
534
566
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
535
567
  enabled: z.ZodDefault<z.ZodBoolean>;
536
568
  adapter: z.ZodOptional<z.ZodString>;
537
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
569
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
570
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
538
571
  }, z.ZodTypeAny, "passthrough">>, "strip">, z.objectInputType<{}, z.ZodObject<{
539
572
  enabled: z.ZodDefault<z.ZodBoolean>;
540
573
  adapter: z.ZodOptional<z.ZodString>;
541
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
574
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
575
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
542
576
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
543
577
  enabled: z.ZodDefault<z.ZodBoolean>;
544
578
  adapter: z.ZodOptional<z.ZodString>;
545
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
579
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
580
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
546
581
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
547
582
  enabled: z.ZodDefault<z.ZodBoolean>;
548
583
  adapter: z.ZodOptional<z.ZodString>;
549
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
584
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
585
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
550
586
  }, z.ZodTypeAny, "passthrough">>, "strip">>;
551
587
  agents: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
552
588
  command: z.ZodString;
@@ -774,6 +810,7 @@ declare const ConfigSchema: z.ZodObject<{
774
810
  }, z.ZodTypeAny, "passthrough">> | undefined;
775
811
  } | undefined;
776
812
  }>>>;
813
+ outputMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
777
814
  }, "strip", z.ZodTypeAny, {
778
815
  api: {
779
816
  port: number;
@@ -801,7 +838,8 @@ declare const ConfigSchema: z.ZodObject<{
801
838
  [k: string]: z.objectOutputType<{
802
839
  enabled: z.ZodDefault<z.ZodBoolean>;
803
840
  adapter: z.ZodOptional<z.ZodString>;
804
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
841
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
842
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
805
843
  }, z.ZodTypeAny, "passthrough">;
806
844
  };
807
845
  defaultAgent: string;
@@ -852,12 +890,14 @@ declare const ConfigSchema: z.ZodObject<{
852
890
  }, z.ZodTypeAny, "passthrough">>;
853
891
  };
854
892
  };
893
+ outputMode?: "low" | "medium" | "high" | undefined;
855
894
  }, {
856
895
  channels: {} & {
857
896
  [k: string]: z.objectInputType<{
858
897
  enabled: z.ZodDefault<z.ZodBoolean>;
859
898
  adapter: z.ZodOptional<z.ZodString>;
860
- displayVerbosity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>>;
899
+ displayVerbosity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
900
+ outputMode: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
861
901
  }, z.ZodTypeAny, "passthrough">;
862
902
  };
863
903
  defaultAgent: string;
@@ -883,6 +923,7 @@ declare const ConfigSchema: z.ZodObject<{
883
923
  token?: string | undefined;
884
924
  } | undefined;
885
925
  } | undefined;
926
+ outputMode?: "low" | "medium" | "high" | undefined;
886
927
  workspace?: {
887
928
  baseDir?: string | undefined;
888
929
  } | undefined;
@@ -1097,6 +1138,26 @@ declare class MiddlewareChain {
1097
1138
  setErrorTracker(tracker: ErrorTracker): void;
1098
1139
  }
1099
1140
 
1141
+ type TraceLayer = "acp" | "core" | "telegram";
1142
+ /**
1143
+ * Per-session debug trace logger. Writes JSONL files to <workingDirectory>/.log/.
1144
+ * Only active when OPENACP_DEBUG=true. Zero overhead when disabled.
1145
+ *
1146
+ * Note: Uses appendFileSync for simplicity. This blocks the event loop briefly per write,
1147
+ * which is acceptable for a debug-only tool. The DEBUG_ENABLED guard ensures zero overhead
1148
+ * in production.
1149
+ */
1150
+ declare class DebugTracer {
1151
+ private sessionId;
1152
+ private workingDirectory;
1153
+ private dirCreated;
1154
+ private logDir;
1155
+ constructor(sessionId: string, workingDirectory: string);
1156
+ log(layer: TraceLayer, data: Record<string, unknown>): void;
1157
+ /** No-op cleanup — establishes the pattern for future async implementations */
1158
+ destroy(): void;
1159
+ }
1160
+
1100
1161
  interface AgentInstanceEvents {
1101
1162
  agent_event: (event: AgentEvent) => void;
1102
1163
  }
@@ -1114,6 +1175,7 @@ declare class AgentInstance extends TypedEmitter<AgentInstanceEvents> {
1114
1175
  audio?: boolean;
1115
1176
  };
1116
1177
  middlewareChain?: MiddlewareChain;
1178
+ debugTracer: DebugTracer | null;
1117
1179
  onPermissionRequest: (request: PermissionRequest) => Promise<string>;
1118
1180
  private constructor();
1119
1181
  private static spawnSubprocess;
@@ -1795,6 +1857,7 @@ interface ContextService {
1795
1857
  interface ViewerStoreInterface {
1796
1858
  storeFile(sessionId: string, filePath: string, content: string, workingDirectory: string): string | null;
1797
1859
  storeDiff(sessionId: string, filePath: string, oldContent: string, newContent: string, workingDirectory: string): string | null;
1860
+ storeOutput(sessionId: string, label: string, output: string): string | null;
1798
1861
  }
1799
1862
  interface TunnelServiceInterface {
1800
1863
  getPublicUrl(): string;
@@ -1803,15 +1866,22 @@ interface TunnelServiceInterface {
1803
1866
  getStore(): ViewerStoreInterface;
1804
1867
  fileUrl(entryId: string): string;
1805
1868
  diffUrl(entryId: string): string;
1869
+ outputUrl(entryId: string): string;
1806
1870
  }
1807
1871
 
1808
1872
  declare class MessageTransformer {
1809
- private tunnelService?;
1810
- constructor(tunnelService?: TunnelServiceInterface | undefined);
1873
+ tunnelService?: TunnelServiceInterface;
1874
+ /** Cache rawInput from tool_call so it's available in tool_update (which often lacks it) */
1875
+ private toolRawInputCache;
1876
+ /** Cache viewer links generated from intermediate updates so completion events carry them */
1877
+ private toolViewerCache;
1878
+ constructor(tunnelService?: TunnelServiceInterface);
1811
1879
  transform(event: AgentEvent, sessionContext?: {
1812
1880
  id: string;
1813
1881
  workingDirectory: string;
1814
1882
  }): OutgoingMessage;
1883
+ /** Check if rawInput is a non-empty object (not null, not {}) */
1884
+ private isNonEmptyInput;
1815
1885
  private enrichWithViewerLinks;
1816
1886
  }
1817
1887
 
@@ -1953,6 +2023,7 @@ declare class SessionBridge {
1953
2023
  private statusChangeHandler?;
1954
2024
  private namedHandler?;
1955
2025
  constructor(session: Session, adapter: IChannelAdapter, deps: BridgeDeps);
2026
+ private get tracer();
1956
2027
  /** Send message to adapter, optionally running through message:outgoing middleware */
1957
2028
  private sendMessage;
1958
2029
  connect(): void;
@@ -1977,7 +2048,7 @@ interface TunnelEntry {
1977
2048
 
1978
2049
  interface ViewerEntry {
1979
2050
  id: string;
1980
- type: 'file' | 'diff';
2051
+ type: 'file' | 'diff' | 'output';
1981
2052
  filePath?: string;
1982
2053
  content: string;
1983
2054
  oldContent?: string;
@@ -1994,6 +2065,7 @@ declare class ViewerStore {
1994
2065
  constructor(ttlMinutes?: number);
1995
2066
  storeFile(sessionId: string, filePath: string, content: string, workingDirectory: string): string | null;
1996
2067
  storeDiff(sessionId: string, filePath: string, oldContent: string, newContent: string, workingDirectory: string): string | null;
2068
+ storeOutput(sessionId: string, label: string, output: string): string | null;
1997
2069
  get(id: string): ViewerEntry | undefined;
1998
2070
  private cleanup;
1999
2071
  private isPathAllowed;
@@ -2007,6 +2079,7 @@ declare class TunnelService {
2007
2079
  private server;
2008
2080
  private config;
2009
2081
  private systemPort;
2082
+ private startError;
2010
2083
  constructor(config: TunnelConfig);
2011
2084
  start(): Promise<string>;
2012
2085
  stop(): Promise<void>;
@@ -2020,9 +2093,11 @@ declare class TunnelService {
2020
2093
  listTunnels(): TunnelEntry[];
2021
2094
  getTunnel(port: number): TunnelEntry | null;
2022
2095
  getPublicUrl(): string;
2096
+ getStartError(): string | undefined;
2023
2097
  getStore(): ViewerStore;
2024
2098
  fileUrl(entryId: string): string;
2025
2099
  diffUrl(entryId: string): string;
2100
+ outputUrl(entryId: string): string;
2026
2101
  }
2027
2102
 
2028
2103
  interface SessionCreateParams {
@@ -2570,30 +2645,6 @@ declare class EntireProvider implements ContextProvider {
2570
2645
  private buildTitle;
2571
2646
  }
2572
2647
 
2573
- type DisplayVerbosity = "low" | "medium" | "high";
2574
- declare const STATUS_ICONS: Record<string, string>;
2575
- declare const KIND_ICONS: Record<string, string>;
2576
- interface ViewerLinks {
2577
- file?: string;
2578
- diff?: string;
2579
- }
2580
- interface ToolCallMeta {
2581
- id: string;
2582
- name: string;
2583
- kind?: string;
2584
- status?: string;
2585
- content?: unknown;
2586
- rawInput?: unknown;
2587
- viewerLinks?: ViewerLinks;
2588
- viewerFilePath?: string;
2589
- displaySummary?: string;
2590
- displayTitle?: string;
2591
- displayKind?: string;
2592
- }
2593
- interface ToolUpdateMeta extends ToolCallMeta {
2594
- status: string;
2595
- }
2596
-
2597
2648
  interface RenderedMessage<TComponents = unknown> {
2598
2649
  body: string;
2599
2650
  format: "html" | "markdown" | "plain" | "structured";
@@ -2861,6 +2912,7 @@ declare class TelegramAdapter extends MessagingAdapter {
2861
2912
  private assistantTopicId;
2862
2913
  private sendQueue;
2863
2914
  private _sessionThreadIds;
2915
+ private outputModeResolver;
2864
2916
  private draftManager;
2865
2917
  private skillManager;
2866
2918
  private fileService;
@@ -2876,12 +2928,22 @@ declare class TelegramAdapter extends MessagingAdapter {
2876
2928
  private toCallbackData;
2877
2929
  private fromCallbackData;
2878
2930
  private setupRoutes;
2931
+ /**
2932
+ * Per-session serial dispatch queues.
2933
+ * SessionBridge fires sendMessage() as fire-and-forget, so multiple events
2934
+ * (tool_call, tool_update, text) can arrive concurrently. Without serialization,
2935
+ * fast handlers (tool_update) overtake slow ones (tool_call with draftManager.finalize),
2936
+ * causing out-of-order processing where a tool's completion update is processed before
2937
+ * its creation event. This queue ensures events are processed in the order they arrive.
2938
+ */
2939
+ private _dispatchQueues;
2940
+ private getTracer;
2879
2941
  sendMessage(sessionId: string, content: OutgoingMessage): Promise<void>;
2880
- protected handleThought(sessionId: string, _content: OutgoingMessage, _verbosity: DisplayVerbosity): Promise<void>;
2942
+ protected handleThought(sessionId: string, content: OutgoingMessage, _verbosity: DisplayVerbosity): Promise<void>;
2881
2943
  protected handleText(sessionId: string, content: OutgoingMessage): Promise<void>;
2882
- protected handleToolCall(sessionId: string, content: OutgoingMessage, verbosity: DisplayVerbosity): Promise<void>;
2883
- protected handleToolUpdate(sessionId: string, content: OutgoingMessage, verbosity: DisplayVerbosity): Promise<void>;
2884
- protected handlePlan(sessionId: string, content: OutgoingMessage, verbosity: DisplayVerbosity): Promise<void>;
2944
+ protected handleToolCall(sessionId: string, content: OutgoingMessage, _verbosity: DisplayVerbosity): Promise<void>;
2945
+ protected handleToolUpdate(sessionId: string, content: OutgoingMessage, _verbosity: DisplayVerbosity): Promise<void>;
2946
+ protected handlePlan(sessionId: string, content: OutgoingMessage, _verbosity: DisplayVerbosity): Promise<void>;
2885
2947
  protected handleUsage(sessionId: string, content: OutgoingMessage, verbosity: DisplayVerbosity): Promise<void>;
2886
2948
  protected handleAttachment(sessionId: string, content: OutgoingMessage): Promise<void>;
2887
2949
  protected handleSessionEnd(sessionId: string, _content: OutgoingMessage): Promise<void>;
package/dist/index.js CHANGED
@@ -15,16 +15,16 @@ import {
15
15
  TypedEmitter,
16
16
  nodeToWebReadable,
17
17
  nodeToWebWritable
18
- } from "./chunk-6VR4GWOO.js";
18
+ } from "./chunk-7RKPIM3E.js";
19
19
  import {
20
20
  getPidPath,
21
21
  getStatus,
22
22
  startDaemon,
23
23
  stopDaemon
24
- } from "./chunk-VD3QSMVY.js";
24
+ } from "./chunk-QWVHCTCA.js";
25
25
  import {
26
26
  runConfigEditor
27
- } from "./chunk-QBEQJFGL.js";
27
+ } from "./chunk-MPGEHTGE.js";
28
28
  import {
29
29
  installAutoStart,
30
30
  isAutoStartInstalled,
@@ -54,11 +54,11 @@ import {
54
54
  splitMessage,
55
55
  stripCodeFences,
56
56
  truncateContent
57
- } from "./chunk-RXMWJHWH.js";
57
+ } from "./chunk-5ZNBNIK3.js";
58
58
  import "./chunk-AFKX424Q.js";
59
59
  import {
60
60
  DoctorEngine
61
- } from "./chunk-43JVXFYP.js";
61
+ } from "./chunk-GEOXPGCO.js";
62
62
  import {
63
63
  NotificationManager
64
64
  } from "./chunk-7ZCQF6QM.js";
@@ -66,7 +66,7 @@ import {
66
66
  ApiServer,
67
67
  SSEManager,
68
68
  StaticServer
69
- } from "./chunk-IXMIC4GQ.js";
69
+ } from "./chunk-BTJHGSLM.js";
70
70
  import "./chunk-FNRSWA2K.js";
71
71
  import "./chunk-ZSLHHQPQ.js";
72
72
  import {
@@ -79,7 +79,7 @@ import {
79
79
  import {
80
80
  ContextManager,
81
81
  EntireProvider
82
- } from "./chunk-QWP76EBW.js";
82
+ } from "./chunk-MITTQMGZ.js";
83
83
  import "./chunk-APS6UEFU.js";
84
84
  import {
85
85
  GroqSTT,
@@ -97,7 +97,7 @@ import {
97
97
  ConfigManager,
98
98
  PLUGINS_DIR,
99
99
  expandHome
100
- } from "./chunk-JOMDPFQ2.js";
100
+ } from "./chunk-W4LK6WJP.js";
101
101
  import {
102
102
  cleanupOldSessionLogs,
103
103
  createChildLogger,
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  corePlugins
4
- } from "./chunk-E2SLHZAC.js";
5
- import "./chunk-5TCXYDLR.js";
4
+ } from "./chunk-YIGBJFJL.js";
5
+ import "./chunk-CFUJGWOP.js";
6
6
  import {
7
7
  SettingsManager
8
8
  } from "./chunk-MLF4W5R6.js";
9
9
  import "./chunk-3EWTPOF7.js";
10
- import "./chunk-4B6PCWQP.js";
11
- import "./chunk-JUFN4XMB.js";
10
+ import "./chunk-PA6MNBG4.js";
11
+ import "./chunk-KDU3ZEWT.js";
12
12
  import "./chunk-5OCGO27U.js";
13
13
  import "./chunk-3NAFXVQM.js";
14
- import "./chunk-ZHGPZBS4.js";
15
- import "./chunk-NT6FYV27.js";
16
- import "./chunk-I53NEV3S.js";
14
+ import "./chunk-UWH7KIAA.js";
15
+ import "./chunk-TMVTSWVH.js";
16
+ import "./chunk-5WGVYX3C.js";
17
17
  import {
18
18
  CommandRegistry,
19
19
  OpenACPCore
20
- } from "./chunk-6VR4GWOO.js";
20
+ } from "./chunk-7RKPIM3E.js";
21
21
  import "./chunk-V2YZWYXT.js";
22
22
  import "./chunk-566W6INH.js";
23
23
  import "./chunk-7ZCQF6QM.js";
@@ -26,12 +26,15 @@ import "./chunk-ZSLHHQPQ.js";
26
26
  import "./chunk-LGFWH3AE.js";
27
27
  import "./chunk-OYSAN7UX.js";
28
28
  import "./chunk-IZ5UEZF7.js";
29
- import "./chunk-QWP76EBW.js";
29
+ import "./chunk-MITTQMGZ.js";
30
30
  import "./chunk-APS6UEFU.js";
31
31
  import "./chunk-2KT6TROD.js";
32
32
  import {
33
- ConfigManager
34
- } from "./chunk-JOMDPFQ2.js";
33
+ ConfigManager,
34
+ OPENACP_DIR,
35
+ PLUGINS_DATA_DIR,
36
+ REGISTRY_PATH
37
+ } from "./chunk-W4LK6WJP.js";
35
38
  import {
36
39
  cleanupOldSessionLogs,
37
40
  initLogger,
@@ -44,6 +47,9 @@ import {
44
47
  PluginRegistry
45
48
  } from "./chunk-W26AUH5B.js";
46
49
 
50
+ // src/main.ts
51
+ import path from "path";
52
+
47
53
  // src/core/commands/session.ts
48
54
  function registerSessionCommands(registry, _core) {
49
55
  registry.register({
@@ -267,16 +273,11 @@ function registerSystemCommands(registry, core) {
267
273
 
268
274
  // src/main.ts
269
275
  import fs from "fs";
270
- import path from "path";
271
- import os from "os";
272
276
  var RESTART_EXIT_CODE = 75;
273
277
  var shuttingDown = false;
274
- var OPENACP_DIR = path.join(os.homedir(), ".openacp");
275
- var PLUGINS_DATA_DIR = path.join(OPENACP_DIR, "plugins", "data");
276
- var REGISTRY_PATH = path.join(OPENACP_DIR, "plugins.json");
277
278
  async function startServer(opts) {
278
279
  if (process.argv.includes("--daemon-child")) {
279
- const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-DTA6KYYY.js");
280
+ const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-XFEMMJSZ.js");
280
281
  if (!shouldAutoStart()) {
281
282
  process.exit(0);
282
283
  }
@@ -298,7 +299,7 @@ async function startServer(opts) {
298
299
  const configManager = new ConfigManager();
299
300
  const configExists = await configManager.exists();
300
301
  if (!configExists) {
301
- const { runSetup } = await import("./setup-OI6A3OXW.js");
302
+ const { runSetup } = await import("./setup-E6BNEYCS.js");
302
303
  const shouldStart = await runSetup(configManager, { settingsManager, pluginRegistry });
303
304
  if (!shouldStart) process.exit(0);
304
305
  }
@@ -311,7 +312,7 @@ async function startServer(opts) {
311
312
  }
312
313
  const isForegroundTTY = !!(process.stdout.isTTY && !process.env.NO_COLOR && config.runMode !== "daemon");
313
314
  if (isForegroundTTY) {
314
- const { printStartBanner } = await import("./setup-OI6A3OXW.js");
315
+ const { printStartBanner } = await import("./setup-E6BNEYCS.js");
315
316
  await printStartBanner();
316
317
  }
317
318
  let spinner;
@@ -358,7 +359,7 @@ async function startServer(opts) {
358
359
  let pkgDir = path.join(nodeModulesDir, name);
359
360
  if (!fs.existsSync(path.join(pkgDir, "package.json"))) {
360
361
  let found = false;
361
- const scopes = fs.readdirSync(nodeModulesDir).filter((d) => d.startsWith("@"));
362
+ const scopes = fs.existsSync(nodeModulesDir) ? fs.readdirSync(nodeModulesDir).filter((d) => d.startsWith("@")) : [];
362
363
  for (const scope of scopes) {
363
364
  const scopeDir = path.join(nodeModulesDir, scope);
364
365
  const pkgs = fs.readdirSync(scopeDir);
@@ -485,13 +486,13 @@ async function startServer(opts) {
485
486
  }
486
487
  const isDaemon = process.argv.includes("--daemon-child");
487
488
  if (isDaemon) {
488
- const { removePidFile, getPidPath } = await import("./daemon-DTA6KYYY.js");
489
+ const { removePidFile, getPidPath } = await import("./daemon-XFEMMJSZ.js");
489
490
  removePidFile(getPidPath());
490
491
  }
491
492
  if (exitCode === RESTART_EXIT_CODE) {
492
493
  if (isDaemon) {
493
494
  const { spawn: spawnChild } = await import("child_process");
494
- const { expandHome } = await import("./config-UCAFCS5W.js");
495
+ const { expandHome } = await import("./config-KN6NKKPF.js");
495
496
  const fs2 = await import("fs");
496
497
  const pathMod = await import("path");
497
498
  const cliPath = pathMod.resolve(process.argv[1]);
@@ -539,7 +540,15 @@ async function startServer(opts) {
539
540
  ok("Config loaded");
540
541
  ok("Dependencies checked");
541
542
  const tunnelSvc = core.lifecycleManager.serviceRegistry.get("tunnel");
542
- if (tunnelSvc) ok(`Tunnel ready \u2192 ${tunnelSvc.getPublicUrl()}`);
543
+ if (tunnelSvc) {
544
+ const tunnelUrl = tunnelSvc.getPublicUrl();
545
+ const tunnelErr = tunnelSvc.getStartError();
546
+ if (tunnelErr) {
547
+ console.log(`\x1B[33m\u26A0\x1B[0m Tunnel failed (${tunnelErr}) \u2014 viewer links unavailable`);
548
+ } else {
549
+ ok(`Tunnel ready \u2192 ${tunnelUrl}`);
550
+ }
551
+ }
543
552
  for (const [name] of core.adapters) ok(`${name.charAt(0).toUpperCase() + name.slice(1)} connected`);
544
553
  const apiPort = config.api?.port ?? 21420;
545
554
  if (core.lifecycleManager.serviceRegistry.get("api-server")) ok(`API server on port ${apiPort}`);
@@ -555,7 +564,6 @@ async function autoRegisterBuiltinPlugins(settingsManager, pluginRegistry, confi
555
564
  { name: "@openacp/security", version: "1.0.0", description: "User access control and session limits" },
556
565
  { name: "@openacp/file-service", version: "1.0.0", description: "File storage and management" },
557
566
  { name: "@openacp/context", version: "1.0.0", description: "Conversation context management" },
558
- { name: "@openacp/usage", version: "1.0.0", description: "Token usage tracking and budget enforcement" },
559
567
  { name: "@openacp/speech", version: "1.0.0", description: "Text-to-speech and speech-to-text" },
560
568
  { name: "@openacp/notifications", version: "1.0.0", description: "Cross-session notification routing" },
561
569
  { name: "@openacp/tunnel", version: "1.0.0", description: "Expose local services via tunnel" },
@@ -574,12 +582,12 @@ async function autoRegisterBuiltinPlugins(settingsManager, pluginRegistry, confi
574
582
  const pluginModules = await Promise.allSettled([
575
583
  import("./security-2BA265LN.js"),
576
584
  import("./file-service-HHB3JQIO.js"),
577
- import("./context-7MPU7RL5.js"),
578
- import("./speech-GB7PHVQZ.js"),
585
+ import("./context-NXXW62NJ.js"),
586
+ import("./speech-SG62JYIF.js"),
579
587
  import("./notifications-MO23S7S3.js"),
580
- import("./tunnel-4WNFC7GO.js"),
581
- import("./api-server-DSUW637I.js"),
582
- import("./telegram-UVIAXADE.js")
588
+ import("./tunnel-HWJ27WDH.js"),
589
+ import("./api-server-5VNYFWJE.js"),
590
+ import("./telegram-EAVRDNFU.js")
583
591
  ]);
584
592
  for (const result of pluginModules) {
585
593
  if (result.status !== "fulfilled") continue;
@@ -643,4 +651,4 @@ export {
643
651
  RESTART_EXIT_CODE,
644
652
  startServer
645
653
  };
646
- //# sourceMappingURL=main-RRSX5SRL.js.map
654
+ //# sourceMappingURL=main-L2M4NTJY.js.map