@openacp/cli 0.6.4 → 0.6.6

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 (49) hide show
  1. package/dist/adapter-RKK7A5GI.js +798 -0
  2. package/dist/adapter-RKK7A5GI.js.map +1 -0
  3. package/dist/{chunk-DJIXG62C.js → chunk-3IRAWHMC.js} +3 -3
  4. package/dist/{chunk-L5KZXYJD.js → chunk-3ZO3MHZN.js} +21 -2
  5. package/dist/chunk-3ZO3MHZN.js.map +1 -0
  6. package/dist/chunk-4GQ3I65A.js +23 -0
  7. package/dist/chunk-4GQ3I65A.js.map +1 -0
  8. package/dist/{chunk-TNFXJQZP.js → chunk-7KZI2236.js} +2 -2
  9. package/dist/{chunk-E56PPPAE.js → chunk-AHPRT3RY.js} +382 -4034
  10. package/dist/chunk-AHPRT3RY.js.map +1 -0
  11. package/dist/{chunk-FMWSVLRM.js → chunk-FCLGYYTY.js} +1 -21
  12. package/dist/chunk-FCLGYYTY.js.map +1 -0
  13. package/dist/{chunk-TOQPQB5Q.js → chunk-PJVKOZTR.js} +2 -2
  14. package/dist/{chunk-DOCFD5JR.js → chunk-WVMSP4AF.js} +2 -2
  15. package/dist/{chunk-3CHBVO4T.js → chunk-XVL6AGMG.js} +2 -2
  16. package/dist/{chunk-N6E3HE42.js → chunk-ZKTIZME6.js} +2 -2
  17. package/dist/chunk-ZMVVW3BK.js +4771 -0
  18. package/dist/chunk-ZMVVW3BK.js.map +1 -0
  19. package/dist/cli.js +21 -21
  20. package/dist/{config-XDUOULXX.js → config-B26J3XXN.js} +2 -2
  21. package/dist/{config-editor-3GGBY7NL.js → config-editor-QTGUK3CD.js} +4 -4
  22. package/dist/{daemon-QY7WXHQ3.js → daemon-5DS5BQXJ.js} +3 -3
  23. package/dist/{discord-4DE22BQC.js → discord-QKT3JMRW.js} +14 -12
  24. package/dist/{discord-4DE22BQC.js.map → discord-QKT3JMRW.js.map} +1 -1
  25. package/dist/doctor-6SUCVUZB.js +9 -0
  26. package/dist/{doctor-D3YZ6VHJ.js → doctor-QQ3YZEYV.js} +4 -4
  27. package/dist/index.d.ts +246 -12
  28. package/dist/index.js +17 -10
  29. package/dist/{main-GVTLD7VI.js → main-B5L3DD3Y.js} +25 -17
  30. package/dist/main-B5L3DD3Y.js.map +1 -0
  31. package/dist/{setup-D6BU36ZL.js → setup-5ZKSUR26.js} +3 -3
  32. package/package.json +5 -1
  33. package/dist/chunk-E56PPPAE.js.map +0 -1
  34. package/dist/chunk-FMWSVLRM.js.map +0 -1
  35. package/dist/chunk-L5KZXYJD.js.map +0 -1
  36. package/dist/doctor-SNSQ5SS2.js +0 -9
  37. package/dist/main-GVTLD7VI.js.map +0 -1
  38. /package/dist/{chunk-DJIXG62C.js.map → chunk-3IRAWHMC.js.map} +0 -0
  39. /package/dist/{chunk-TNFXJQZP.js.map → chunk-7KZI2236.js.map} +0 -0
  40. /package/dist/{chunk-TOQPQB5Q.js.map → chunk-PJVKOZTR.js.map} +0 -0
  41. /package/dist/{chunk-DOCFD5JR.js.map → chunk-WVMSP4AF.js.map} +0 -0
  42. /package/dist/{chunk-3CHBVO4T.js.map → chunk-XVL6AGMG.js.map} +0 -0
  43. /package/dist/{chunk-N6E3HE42.js.map → chunk-ZKTIZME6.js.map} +0 -0
  44. /package/dist/{config-XDUOULXX.js.map → config-B26J3XXN.js.map} +0 -0
  45. /package/dist/{config-editor-3GGBY7NL.js.map → config-editor-QTGUK3CD.js.map} +0 -0
  46. /package/dist/{daemon-QY7WXHQ3.js.map → daemon-5DS5BQXJ.js.map} +0 -0
  47. /package/dist/{doctor-D3YZ6VHJ.js.map → doctor-6SUCVUZB.js.map} +0 -0
  48. /package/dist/{doctor-SNSQ5SS2.js.map → doctor-QQ3YZEYV.js.map} +0 -0
  49. /package/dist/{setup-D6BU36ZL.js.map → setup-5ZKSUR26.js.map} +0 -0
@@ -0,0 +1,9 @@
1
+ import {
2
+ DoctorEngine
3
+ } from "./chunk-PJVKOZTR.js";
4
+ import "./chunk-3ZO3MHZN.js";
5
+ import "./chunk-GAK6PIBW.js";
6
+ export {
7
+ DoctorEngine
8
+ };
9
+ //# sourceMappingURL=doctor-6SUCVUZB.js.map
@@ -2,13 +2,13 @@ import {
2
2
  handleDoctor,
3
3
  handleDoctorButton,
4
4
  runDoctorInline
5
- } from "./chunk-TNFXJQZP.js";
6
- import "./chunk-TOQPQB5Q.js";
7
- import "./chunk-L5KZXYJD.js";
5
+ } from "./chunk-7KZI2236.js";
6
+ import "./chunk-PJVKOZTR.js";
7
+ import "./chunk-3ZO3MHZN.js";
8
8
  import "./chunk-GAK6PIBW.js";
9
9
  export {
10
10
  handleDoctor,
11
11
  handleDoctorButton,
12
12
  runDoctorInline
13
13
  };
14
- //# sourceMappingURL=doctor-D3YZ6VHJ.js.map
14
+ //# sourceMappingURL=doctor-QQ3YZEYV.js.map
package/dist/index.d.ts CHANGED
@@ -322,7 +322,130 @@ declare const UsageSchema: z.ZodDefault<z.ZodObject<{
322
322
  }>>;
323
323
  type UsageConfig = z.infer<typeof UsageSchema>;
324
324
  declare const ConfigSchema: z.ZodObject<{
325
- channels: z.ZodRecord<z.ZodString, z.ZodObject<{
325
+ channels: z.ZodObject<{
326
+ slack: z.ZodOptional<z.ZodObject<{
327
+ enabled: z.ZodDefault<z.ZodBoolean>;
328
+ adapter: z.ZodOptional<z.ZodLiteral<"slack">>;
329
+ botToken: z.ZodOptional<z.ZodString>;
330
+ appToken: z.ZodOptional<z.ZodString>;
331
+ signingSecret: z.ZodOptional<z.ZodString>;
332
+ notificationChannelId: z.ZodOptional<z.ZodString>;
333
+ allowedUserIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
334
+ channelPrefix: z.ZodDefault<z.ZodString>;
335
+ autoCreateSession: z.ZodDefault<z.ZodBoolean>;
336
+ startupChannelId: z.ZodOptional<z.ZodString>;
337
+ }, "strip", z.ZodTypeAny, {
338
+ enabled: boolean;
339
+ allowedUserIds: string[];
340
+ channelPrefix: string;
341
+ autoCreateSession: boolean;
342
+ adapter?: "slack" | undefined;
343
+ botToken?: string | undefined;
344
+ appToken?: string | undefined;
345
+ signingSecret?: string | undefined;
346
+ notificationChannelId?: string | undefined;
347
+ startupChannelId?: string | undefined;
348
+ }, {
349
+ enabled?: boolean | undefined;
350
+ adapter?: "slack" | undefined;
351
+ botToken?: string | undefined;
352
+ appToken?: string | undefined;
353
+ signingSecret?: string | undefined;
354
+ notificationChannelId?: string | undefined;
355
+ allowedUserIds?: string[] | undefined;
356
+ channelPrefix?: string | undefined;
357
+ autoCreateSession?: boolean | undefined;
358
+ startupChannelId?: string | undefined;
359
+ }>>;
360
+ }, "strip", z.ZodObject<{
361
+ enabled: z.ZodDefault<z.ZodBoolean>;
362
+ adapter: z.ZodOptional<z.ZodString>;
363
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
364
+ enabled: z.ZodDefault<z.ZodBoolean>;
365
+ adapter: z.ZodOptional<z.ZodString>;
366
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
367
+ enabled: z.ZodDefault<z.ZodBoolean>;
368
+ adapter: z.ZodOptional<z.ZodString>;
369
+ }, z.ZodTypeAny, "passthrough">>, z.objectOutputType<{
370
+ slack: z.ZodOptional<z.ZodObject<{
371
+ enabled: z.ZodDefault<z.ZodBoolean>;
372
+ adapter: z.ZodOptional<z.ZodLiteral<"slack">>;
373
+ botToken: z.ZodOptional<z.ZodString>;
374
+ appToken: z.ZodOptional<z.ZodString>;
375
+ signingSecret: z.ZodOptional<z.ZodString>;
376
+ notificationChannelId: z.ZodOptional<z.ZodString>;
377
+ allowedUserIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
378
+ channelPrefix: z.ZodDefault<z.ZodString>;
379
+ autoCreateSession: z.ZodDefault<z.ZodBoolean>;
380
+ startupChannelId: z.ZodOptional<z.ZodString>;
381
+ }, "strip", z.ZodTypeAny, {
382
+ enabled: boolean;
383
+ allowedUserIds: string[];
384
+ channelPrefix: string;
385
+ autoCreateSession: boolean;
386
+ adapter?: "slack" | undefined;
387
+ botToken?: string | undefined;
388
+ appToken?: string | undefined;
389
+ signingSecret?: string | undefined;
390
+ notificationChannelId?: string | undefined;
391
+ startupChannelId?: string | undefined;
392
+ }, {
393
+ enabled?: boolean | undefined;
394
+ adapter?: "slack" | undefined;
395
+ botToken?: string | undefined;
396
+ appToken?: string | undefined;
397
+ signingSecret?: string | undefined;
398
+ notificationChannelId?: string | undefined;
399
+ allowedUserIds?: string[] | undefined;
400
+ channelPrefix?: string | undefined;
401
+ autoCreateSession?: boolean | undefined;
402
+ startupChannelId?: string | undefined;
403
+ }>>;
404
+ }, z.ZodObject<{
405
+ enabled: z.ZodDefault<z.ZodBoolean>;
406
+ adapter: z.ZodOptional<z.ZodString>;
407
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
408
+ enabled: z.ZodDefault<z.ZodBoolean>;
409
+ adapter: z.ZodOptional<z.ZodString>;
410
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
411
+ enabled: z.ZodDefault<z.ZodBoolean>;
412
+ adapter: z.ZodOptional<z.ZodString>;
413
+ }, z.ZodTypeAny, "passthrough">>, "strip">, z.objectInputType<{
414
+ slack: z.ZodOptional<z.ZodObject<{
415
+ enabled: z.ZodDefault<z.ZodBoolean>;
416
+ adapter: z.ZodOptional<z.ZodLiteral<"slack">>;
417
+ botToken: z.ZodOptional<z.ZodString>;
418
+ appToken: z.ZodOptional<z.ZodString>;
419
+ signingSecret: z.ZodOptional<z.ZodString>;
420
+ notificationChannelId: z.ZodOptional<z.ZodString>;
421
+ allowedUserIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
422
+ channelPrefix: z.ZodDefault<z.ZodString>;
423
+ autoCreateSession: z.ZodDefault<z.ZodBoolean>;
424
+ startupChannelId: z.ZodOptional<z.ZodString>;
425
+ }, "strip", z.ZodTypeAny, {
426
+ enabled: boolean;
427
+ allowedUserIds: string[];
428
+ channelPrefix: string;
429
+ autoCreateSession: boolean;
430
+ adapter?: "slack" | undefined;
431
+ botToken?: string | undefined;
432
+ appToken?: string | undefined;
433
+ signingSecret?: string | undefined;
434
+ notificationChannelId?: string | undefined;
435
+ startupChannelId?: string | undefined;
436
+ }, {
437
+ enabled?: boolean | undefined;
438
+ adapter?: "slack" | undefined;
439
+ botToken?: string | undefined;
440
+ appToken?: string | undefined;
441
+ signingSecret?: string | undefined;
442
+ notificationChannelId?: string | undefined;
443
+ allowedUserIds?: string[] | undefined;
444
+ channelPrefix?: string | undefined;
445
+ autoCreateSession?: boolean | undefined;
446
+ startupChannelId?: string | undefined;
447
+ }>>;
448
+ }, z.ZodObject<{
326
449
  enabled: z.ZodDefault<z.ZodBoolean>;
327
450
  adapter: z.ZodOptional<z.ZodString>;
328
451
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
@@ -331,7 +454,7 @@ declare const ConfigSchema: z.ZodObject<{
331
454
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
332
455
  enabled: z.ZodDefault<z.ZodBoolean>;
333
456
  adapter: z.ZodOptional<z.ZodString>;
334
- }, z.ZodTypeAny, "passthrough">>>;
457
+ }, z.ZodTypeAny, "passthrough">>, "strip">>;
335
458
  agents: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
336
459
  command: z.ZodString;
337
460
  args: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -581,10 +704,25 @@ declare const ConfigSchema: z.ZodObject<{
581
704
  token?: string | undefined;
582
705
  };
583
706
  };
584
- channels: Record<string, z.objectOutputType<{
585
- enabled: z.ZodDefault<z.ZodBoolean>;
586
- adapter: z.ZodOptional<z.ZodString>;
587
- }, z.ZodTypeAny, "passthrough">>;
707
+ channels: {
708
+ slack?: {
709
+ enabled: boolean;
710
+ allowedUserIds: string[];
711
+ channelPrefix: string;
712
+ autoCreateSession: boolean;
713
+ adapter?: "slack" | undefined;
714
+ botToken?: string | undefined;
715
+ appToken?: string | undefined;
716
+ signingSecret?: string | undefined;
717
+ notificationChannelId?: string | undefined;
718
+ startupChannelId?: string | undefined;
719
+ } | undefined;
720
+ } & {
721
+ [k: string]: z.objectOutputType<{
722
+ enabled: z.ZodDefault<z.ZodBoolean>;
723
+ adapter: z.ZodOptional<z.ZodString>;
724
+ }, z.ZodTypeAny, "passthrough">;
725
+ };
588
726
  defaultAgent: string;
589
727
  workspace: {
590
728
  baseDir: string;
@@ -634,10 +772,25 @@ declare const ConfigSchema: z.ZodObject<{
634
772
  };
635
773
  };
636
774
  }, {
637
- channels: Record<string, z.objectInputType<{
638
- enabled: z.ZodDefault<z.ZodBoolean>;
639
- adapter: z.ZodOptional<z.ZodString>;
640
- }, z.ZodTypeAny, "passthrough">>;
775
+ channels: {
776
+ slack?: {
777
+ enabled?: boolean | undefined;
778
+ adapter?: "slack" | undefined;
779
+ botToken?: string | undefined;
780
+ appToken?: string | undefined;
781
+ signingSecret?: string | undefined;
782
+ notificationChannelId?: string | undefined;
783
+ allowedUserIds?: string[] | undefined;
784
+ channelPrefix?: string | undefined;
785
+ autoCreateSession?: boolean | undefined;
786
+ startupChannelId?: string | undefined;
787
+ } | undefined;
788
+ } & {
789
+ [k: string]: z.objectInputType<{
790
+ enabled: z.ZodDefault<z.ZodBoolean>;
791
+ adapter: z.ZodOptional<z.ZodString>;
792
+ }, z.ZodTypeAny, "passthrough">;
793
+ };
641
794
  defaultAgent: string;
642
795
  api?: {
643
796
  port?: number | undefined;
@@ -1030,6 +1183,7 @@ declare class Session extends TypedEmitter<SessionEvents> {
1030
1183
  readonly permissionGate: PermissionGate;
1031
1184
  private readonly queue;
1032
1185
  private speechService?;
1186
+ private pendingContext;
1033
1187
  constructor(opts: {
1034
1188
  id?: string;
1035
1189
  channelId: string;
@@ -1051,6 +1205,7 @@ declare class Session extends TypedEmitter<SessionEvents> {
1051
1205
  /** Number of prompts waiting in queue */
1052
1206
  get queueDepth(): number;
1053
1207
  get promptRunning(): boolean;
1208
+ setContext(markdown: string): void;
1054
1209
  setVoiceMode(mode: "off" | "next" | "on"): void;
1055
1210
  enqueuePrompt(text: string, attachments?: Attachment[]): Promise<void>;
1056
1211
  private processPrompt;
@@ -1329,6 +1484,61 @@ declare class SessionFactory {
1329
1484
  wireSideEffects(session: Session, deps: SideEffectDeps): void;
1330
1485
  }
1331
1486
 
1487
+ interface ContextProvider {
1488
+ readonly name: string;
1489
+ isAvailable(repoPath: string): Promise<boolean>;
1490
+ listSessions(query: ContextQuery): Promise<SessionListResult>;
1491
+ buildContext(query: ContextQuery, options?: ContextOptions): Promise<ContextResult>;
1492
+ }
1493
+ interface ContextQuery {
1494
+ repoPath: string;
1495
+ type: "branch" | "commit" | "pr" | "latest" | "checkpoint" | "session";
1496
+ value: string;
1497
+ }
1498
+ interface ContextOptions {
1499
+ maxTokens?: number;
1500
+ limit?: number;
1501
+ }
1502
+ interface SessionInfo {
1503
+ checkpointId: string;
1504
+ sessionIndex: string;
1505
+ transcriptPath: string;
1506
+ createdAt: string;
1507
+ endedAt: string;
1508
+ branch: string;
1509
+ agent: string;
1510
+ turnCount: number;
1511
+ filesTouched: string[];
1512
+ sessionId: string;
1513
+ }
1514
+ interface SessionListResult {
1515
+ sessions: SessionInfo[];
1516
+ estimatedTokens: number;
1517
+ }
1518
+ type ContextMode = "full" | "balanced" | "compact";
1519
+ interface ContextResult {
1520
+ markdown: string;
1521
+ tokenEstimate: number;
1522
+ sessionCount: number;
1523
+ totalTurns: number;
1524
+ mode: ContextMode;
1525
+ truncated: boolean;
1526
+ timeRange: {
1527
+ start: string;
1528
+ end: string;
1529
+ };
1530
+ }
1531
+
1532
+ declare class ContextManager {
1533
+ private providers;
1534
+ private cache;
1535
+ constructor();
1536
+ register(provider: ContextProvider): void;
1537
+ getProvider(repoPath: string): Promise<ContextProvider | null>;
1538
+ listSessions(query: ContextQuery): Promise<SessionListResult | null>;
1539
+ buildContext(query: ContextQuery, options?: ContextOptions): Promise<ContextResult | null>;
1540
+ }
1541
+
1332
1542
  declare class OpenACPCore {
1333
1543
  configManager: ConfigManager;
1334
1544
  agentCatalog: AgentCatalog;
@@ -1349,6 +1559,7 @@ declare class OpenACPCore {
1349
1559
  sessionFactory: SessionFactory;
1350
1560
  readonly usageStore: UsageStore | null;
1351
1561
  readonly usageBudget: UsageBudget | null;
1562
+ readonly contextManager: ContextManager;
1352
1563
  constructor(configManager: ConfigManager);
1353
1564
  get tunnelService(): TunnelService | undefined;
1354
1565
  set tunnelService(service: TunnelService | undefined);
@@ -1372,7 +1583,9 @@ declare class OpenACPCore {
1372
1583
  createThread?: boolean;
1373
1584
  initialName?: string;
1374
1585
  }): Promise<Session>;
1375
- handleNewSession(channelId: string, agentName?: string, workspacePath?: string): Promise<Session>;
1586
+ handleNewSession(channelId: string, agentName?: string, workspacePath?: string, options?: {
1587
+ createThread?: boolean;
1588
+ }): Promise<Session>;
1376
1589
  adoptSession(agentName: string, agentSessionId: string, cwd: string, channelId?: string): Promise<{
1377
1590
  ok: true;
1378
1591
  sessionId: string;
@@ -1384,6 +1597,17 @@ declare class OpenACPCore {
1384
1597
  message: string;
1385
1598
  }>;
1386
1599
  handleNewChat(channelId: string, currentThreadId: string): Promise<Session | null>;
1600
+ createSessionWithContext(params: {
1601
+ channelId: string;
1602
+ agentName: string;
1603
+ workingDirectory: string;
1604
+ contextQuery: ContextQuery;
1605
+ contextOptions?: ContextOptions;
1606
+ createThread?: boolean;
1607
+ }): Promise<{
1608
+ session: Session;
1609
+ contextResult: ContextResult | null;
1610
+ }>;
1387
1611
  /**
1388
1612
  * Get active session by thread, or attempt lazy resume from store.
1389
1613
  * Used by adapter command handlers that need a session but don't go through handleMessage().
@@ -1550,6 +1774,16 @@ declare function isHotReloadable(path: string): boolean;
1550
1774
  declare function resolveOptions(def: ConfigFieldDef, config: Config): string[] | undefined;
1551
1775
  declare function getConfigValue(config: Config, path: string): unknown;
1552
1776
 
1777
+ declare class EntireProvider implements ContextProvider {
1778
+ readonly name = "entire";
1779
+ isAvailable(repoPath: string): Promise<boolean>;
1780
+ listSessions(query: ContextQuery): Promise<SessionListResult>;
1781
+ buildContext(query: ContextQuery, options?: ContextOptions): Promise<ContextResult>;
1782
+ private buildSessionMarkdowns;
1783
+ private resolveSessions;
1784
+ private buildTitle;
1785
+ }
1786
+
1553
1787
  interface TelegramChannelConfig extends ChannelConfig {
1554
1788
  botToken: string;
1555
1789
  chatId: number;
@@ -1593,4 +1827,4 @@ declare class TelegramAdapter extends ChannelAdapter<OpenACPCore> {
1593
1827
  } | null>;
1594
1828
  }
1595
1829
 
1596
- export { type AdapterFactory, AgentCatalog, type AgentCommand, type AgentDefinition, type AgentDistribution, type AgentEvent, AgentInstance, type AgentListItem, AgentManager, AgentStore, type ApiConfig, ApiServer, type Attachment, type AvailabilityResult, type BridgeDeps, CONFIG_REGISTRY, ChannelAdapter, type ChannelConfig, type CleanupResult, type Config, type ConfigFieldDef, ConfigManager, type DeleteTopicResult, type DiscordPlatformData, EventBus, type EventBusEvents, FileService, GroqSTT, type IChannelAdapter, type IncomingMessage, type InstallProgress, type InstallResult, type InstalledAgent, type Logger, type LoggingConfig, MessageTransformer, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, PromptQueue, type RegistryAgent, type RegistryBinaryTarget, type RegistryDistribution, SSEManager, type STTOptions, type STTProvider, type STTResult, SecurityGuard, Session, SessionBridge, type SessionCreateParams, type SessionEvents, SessionFactory, SessionManager, type SessionRecord, type SessionStatus, type SideEffectDeps, type SpeechProviderConfig, SpeechService, type SpeechServiceConfig, StaticServer, StderrCapture, type TTSOptions, type TTSProvider, type TTSResult, TelegramAdapter, type TelegramPlatformData, type TopicInfo, TopicManager, TypedEmitter, UsageBudget, type UsageConfig, type UsageRecord, UsageStore, type UsageSummary, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getConfigValue, getFieldDef, getPidPath, getSafeFields, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, isHotReloadable, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, resolveOptions, runConfigEditor, setLogLevel, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
1830
+ export { type AdapterFactory, AgentCatalog, type AgentCommand, type AgentDefinition, type AgentDistribution, type AgentEvent, AgentInstance, type AgentListItem, AgentManager, AgentStore, type ApiConfig, ApiServer, type Attachment, type AvailabilityResult, type BridgeDeps, CONFIG_REGISTRY, ChannelAdapter, type ChannelConfig, type CleanupResult, type Config, type ConfigFieldDef, ConfigManager, ContextManager, type ContextOptions, type ContextProvider, type ContextQuery, type ContextResult, type SessionInfo as ContextSessionInfo, type DeleteTopicResult, type DiscordPlatformData, EntireProvider, EventBus, type EventBusEvents, FileService, GroqSTT, type IChannelAdapter, type IncomingMessage, type InstallProgress, type InstallResult, type InstalledAgent, type Logger, type LoggingConfig, MessageTransformer, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, PromptQueue, type RegistryAgent, type RegistryBinaryTarget, type RegistryDistribution, SSEManager, type STTOptions, type STTProvider, type STTResult, SecurityGuard, Session, SessionBridge, type SessionCreateParams, type SessionEvents, SessionFactory, type SessionListResult, SessionManager, type SessionRecord, type SessionStatus, type SideEffectDeps, type SpeechProviderConfig, SpeechService, type SpeechServiceConfig, StaticServer, StderrCapture, type TTSOptions, type TTSProvider, type TTSResult, TelegramAdapter, type TelegramPlatformData, type TopicInfo, TopicManager, TypedEmitter, UsageBudget, type UsageConfig, type UsageRecord, UsageStore, type UsageSummary, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getConfigValue, getFieldDef, getPidPath, getSafeFields, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, isHotReloadable, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, resolveOptions, runConfigEditor, setLogLevel, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
package/dist/index.js CHANGED
@@ -1,7 +1,15 @@
1
+ import {
2
+ TelegramAdapter
3
+ } from "./chunk-AHPRT3RY.js";
4
+ import "./chunk-FCLGYYTY.js";
5
+ import "./chunk-PJVKOZTR.js";
6
+ import "./chunk-7QJS2XBD.js";
1
7
  import {
2
8
  AgentInstance,
3
9
  AgentManager,
4
10
  ApiServer,
11
+ ContextManager,
12
+ EntireProvider,
5
13
  EventBus,
6
14
  FileService,
7
15
  GroqSTT,
@@ -19,26 +27,23 @@ import {
19
27
  SpeechService,
20
28
  StaticServer,
21
29
  StderrCapture,
22
- TelegramAdapter,
23
30
  TopicManager,
24
31
  TypedEmitter,
25
32
  UsageBudget,
26
33
  UsageStore,
27
34
  nodeToWebReadable,
28
35
  nodeToWebWritable
29
- } from "./chunk-E56PPPAE.js";
36
+ } from "./chunk-ZMVVW3BK.js";
30
37
  import {
31
38
  ChannelAdapter
32
- } from "./chunk-FMWSVLRM.js";
33
- import "./chunk-TOQPQB5Q.js";
39
+ } from "./chunk-4GQ3I65A.js";
34
40
  import "./chunk-NAMYZIS5.js";
35
- import "./chunk-7QJS2XBD.js";
36
41
  import {
37
42
  getPidPath,
38
43
  getStatus,
39
44
  startDaemon,
40
45
  stopDaemon
41
- } from "./chunk-DOCFD5JR.js";
46
+ } from "./chunk-WVMSP4AF.js";
42
47
  import {
43
48
  AgentCatalog
44
49
  } from "./chunk-UKT3G5IA.js";
@@ -47,21 +52,21 @@ import {
47
52
  } from "./chunk-34M4OS5P.js";
48
53
  import {
49
54
  runConfigEditor
50
- } from "./chunk-DJIXG62C.js";
55
+ } from "./chunk-3IRAWHMC.js";
51
56
  import {
52
57
  installAutoStart,
53
58
  isAutoStartInstalled,
54
59
  isAutoStartSupported,
55
60
  uninstallAutoStart
56
61
  } from "./chunk-2CJ46J3C.js";
57
- import "./chunk-N6E3HE42.js";
62
+ import "./chunk-ZKTIZME6.js";
58
63
  import "./chunk-JKBFUAJK.js";
59
64
  import {
60
65
  installPlugin,
61
66
  listPlugins,
62
67
  loadAdapterFactory,
63
68
  uninstallPlugin
64
- } from "./chunk-3CHBVO4T.js";
69
+ } from "./chunk-XVL6AGMG.js";
65
70
  import {
66
71
  CONFIG_REGISTRY,
67
72
  getConfigValue,
@@ -74,7 +79,7 @@ import {
74
79
  ConfigManager,
75
80
  PLUGINS_DIR,
76
81
  expandHome
77
- } from "./chunk-L5KZXYJD.js";
82
+ } from "./chunk-3ZO3MHZN.js";
78
83
  import {
79
84
  cleanupOldSessionLogs,
80
85
  createChildLogger,
@@ -93,6 +98,8 @@ export {
93
98
  CONFIG_REGISTRY,
94
99
  ChannelAdapter,
95
100
  ConfigManager,
101
+ ContextManager,
102
+ EntireProvider,
96
103
  EventBus,
97
104
  FileService,
98
105
  GroqSTT,
@@ -1,28 +1,31 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ TelegramAdapter
4
+ } from "./chunk-AHPRT3RY.js";
5
+ import "./chunk-FCLGYYTY.js";
6
+ import "./chunk-PJVKOZTR.js";
7
+ import "./chunk-7QJS2XBD.js";
2
8
  import {
3
9
  ApiServer,
4
10
  OpenACPCore,
5
- TelegramAdapter,
6
11
  TopicManager
7
- } from "./chunk-E56PPPAE.js";
8
- import "./chunk-FMWSVLRM.js";
9
- import "./chunk-TOQPQB5Q.js";
12
+ } from "./chunk-ZMVVW3BK.js";
13
+ import "./chunk-4GQ3I65A.js";
10
14
  import "./chunk-NAMYZIS5.js";
11
- import "./chunk-7QJS2XBD.js";
12
- import "./chunk-DOCFD5JR.js";
15
+ import "./chunk-WVMSP4AF.js";
13
16
  import "./chunk-UKT3G5IA.js";
14
17
  import "./chunk-34M4OS5P.js";
15
- import "./chunk-DJIXG62C.js";
18
+ import "./chunk-3IRAWHMC.js";
16
19
  import "./chunk-2CJ46J3C.js";
17
- import "./chunk-N6E3HE42.js";
20
+ import "./chunk-ZKTIZME6.js";
18
21
  import "./chunk-JKBFUAJK.js";
19
22
  import {
20
23
  loadAdapterFactory
21
- } from "./chunk-3CHBVO4T.js";
24
+ } from "./chunk-XVL6AGMG.js";
22
25
  import "./chunk-F3AICYO4.js";
23
26
  import {
24
27
  ConfigManager
25
- } from "./chunk-L5KZXYJD.js";
28
+ } from "./chunk-3ZO3MHZN.js";
26
29
  import {
27
30
  cleanupOldSessionLogs,
28
31
  initLogger,
@@ -37,7 +40,7 @@ var RESTART_EXIT_CODE = 75;
37
40
  var shuttingDown = false;
38
41
  async function startServer() {
39
42
  if (process.argv.includes("--daemon-child")) {
40
- const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-QY7WXHQ3.js");
43
+ const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-5DS5BQXJ.js");
41
44
  if (!shouldAutoStart()) {
42
45
  process.exit(0);
43
46
  }
@@ -56,7 +59,7 @@ async function startServer() {
56
59
  const configManager = new ConfigManager();
57
60
  const configExists = await configManager.exists();
58
61
  if (!configExists) {
59
- const { runSetup } = await import("./setup-D6BU36ZL.js");
62
+ const { runSetup } = await import("./setup-5ZKSUR26.js");
60
63
  const shouldStart = await runSetup(configManager);
61
64
  if (!shouldStart) process.exit(0);
62
65
  }
@@ -66,7 +69,7 @@ async function startServer() {
66
69
  log.debug({ configPath: configManager.getConfigPath() }, "Config loaded");
67
70
  const isForegroundTTY = !!(process.stdout.isTTY && !process.env.NO_COLOR && config.runMode !== "daemon");
68
71
  if (isForegroundTTY) {
69
- const { printStartBanner } = await import("./setup-D6BU36ZL.js");
72
+ const { printStartBanner } = await import("./setup-5ZKSUR26.js");
70
73
  await printStartBanner();
71
74
  }
72
75
  let spinner;
@@ -98,8 +101,13 @@ async function startServer() {
98
101
  if (channelName === "telegram") {
99
102
  core.registerAdapter("telegram", new TelegramAdapter(core, channelConfig));
100
103
  log.info({ adapter: "telegram" }, "Adapter registered");
104
+ } else if (channelName === "slack") {
105
+ const { SlackAdapter } = await import("./adapter-RKK7A5GI.js");
106
+ const slackConfig = channelConfig;
107
+ core.registerAdapter("slack", new SlackAdapter(core, slackConfig));
108
+ log.info({ adapter: "slack" }, "Adapter registered");
101
109
  } else if (channelName === "discord") {
102
- const { DiscordAdapter } = await import("./discord-4DE22BQC.js");
110
+ const { DiscordAdapter } = await import("./discord-QKT3JMRW.js");
103
111
  const discordConfig = channelConfig;
104
112
  core.registerAdapter("discord", new DiscordAdapter(core, discordConfig));
105
113
  log.info({ adapter: "discord" }, "Adapter registered");
@@ -136,13 +144,13 @@ async function startServer() {
136
144
  }
137
145
  const isDaemon = process.argv.includes("--daemon-child");
138
146
  if (isDaemon) {
139
- const { removePidFile, getPidPath } = await import("./daemon-QY7WXHQ3.js");
147
+ const { removePidFile, getPidPath } = await import("./daemon-5DS5BQXJ.js");
140
148
  removePidFile(getPidPath());
141
149
  }
142
150
  if (exitCode === RESTART_EXIT_CODE) {
143
151
  if (isDaemon) {
144
152
  const { spawn: spawnChild } = await import("child_process");
145
- const { expandHome } = await import("./config-XDUOULXX.js");
153
+ const { expandHome } = await import("./config-B26J3XXN.js");
146
154
  const fs = await import("fs");
147
155
  const pathMod = await import("path");
148
156
  const cliPath = pathMod.resolve(process.argv[1]);
@@ -226,4 +234,4 @@ export {
226
234
  RESTART_EXIT_CODE,
227
235
  startServer
228
236
  };
229
- //# sourceMappingURL=main-GVTLD7VI.js.map
237
+ //# sourceMappingURL=main-B5L3DD3Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/main.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { ConfigManager } from './core/config.js'\nimport { OpenACPCore } from './core/core.js'\nimport { loadAdapterFactory } from './core/plugin-manager.js'\nimport { initLogger, shutdownLogger, cleanupOldSessionLogs, log, muteLogger, unmuteLogger } from './core/log.js'\nimport { TelegramAdapter } from './adapters/telegram/index.js'\nimport type { TelegramChannelConfig } from './adapters/telegram/index.js'\nimport { ApiServer } from './core/api-server.js'\nimport { TopicManager } from './core/topic-manager.js'\n\nexport const RESTART_EXIT_CODE = 75\nlet shuttingDown = false\n\nexport async function startServer() {\n // 0. If running as daemon child, check state and write PID file\n if (process.argv.includes('--daemon-child')) {\n const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import('./core/daemon.js')\n\n // Only auto-start if the daemon was previously running (user started it)\n if (!shouldAutoStart()) {\n process.exit(0)\n }\n\n const pidPath = getPidPath()\n const existingPid = readPidFile(pidPath)\n if (existingPid !== null && existingPid !== process.pid) {\n try {\n process.kill(existingPid, 0)\n console.error(`Another OpenACP instance is already running (PID ${existingPid}). Exiting.`)\n process.exit(1)\n } catch {\n // Stale PID file — safe to overwrite\n }\n }\n writePidFile(pidPath, process.pid)\n }\n\n // 1. Check config exists, run setup if not\n const configManager = new ConfigManager()\n const configExists = await configManager.exists()\n\n if (!configExists) {\n const { runSetup } = await import('./core/setup.js')\n const shouldStart = await runSetup(configManager)\n if (!shouldStart) process.exit(0)\n }\n\n // 2. Load config (validates with Zod)\n await configManager.load()\n const config = configManager.get()\n initLogger(config.logging)\n log.debug({ configPath: configManager.getConfigPath() }, 'Config loaded')\n\n // Show banner in foreground TTY mode (not daemon, not piped)\n const isForegroundTTY = !!(process.stdout.isTTY && !process.env.NO_COLOR && config.runMode !== 'daemon')\n if (isForegroundTTY) {\n const { printStartBanner } = await import('./core/setup.js')\n await printStartBanner()\n }\n\n // Mute pino during startup, show spinner instead\n let spinner: ReturnType<typeof import('ora').default> | undefined\n if (isForegroundTTY) {\n muteLogger()\n const ora = (await import('ora')).default\n spinner = ora({ text: 'Starting OpenACP...', spinner: 'dots' }).start()\n }\n\n // Post-upgrade dependency check (blocking — must complete before server start)\n try {\n const { runPostUpgradeChecks } = await import('./core/post-upgrade.js')\n await runPostUpgradeChecks(config)\n } catch (err) {\n log.warn({ err }, 'Post-upgrade check failed')\n }\n\n // Async cleanup of old session logs (non-blocking)\n cleanupOldSessionLogs(config.logging.sessionLogRetentionDays).catch(err =>\n log.warn({ err }, 'Session log cleanup failed')\n )\n\n // 3. Create core\n const core = new OpenACPCore(configManager)\n\n // 3.5 Start tunnel if configured\n let tunnelService: import('./tunnel/tunnel-service.js').TunnelService | undefined\n if (config.tunnel.enabled) {\n const { TunnelService } = await import('./tunnel/tunnel-service.js')\n tunnelService = new TunnelService(config.tunnel)\n const publicUrl = await tunnelService.start()\n core.tunnelService = tunnelService\n log.info({ publicUrl }, 'Tunnel started')\n }\n\n // 4. Register adapters from config\n for (const [channelName, channelConfig] of Object.entries(config.channels)) {\n if (!channelConfig.enabled) continue\n\n if (channelName === 'telegram') {\n core.registerAdapter('telegram', new TelegramAdapter(core, channelConfig as TelegramChannelConfig))\n log.info({ adapter: 'telegram' }, 'Adapter registered')\n } else if (channelName === 'slack') {\n const { SlackAdapter } = await import('./adapters/slack/adapter.js')\n const slackConfig = channelConfig as import('./adapters/slack/types.js').SlackChannelConfig\n core.registerAdapter('slack', new SlackAdapter(core, slackConfig))\n log.info({ adapter: 'slack' }, 'Adapter registered')\n } else if (channelName === 'discord') {\n const { DiscordAdapter } = await import('./adapters/discord/index.js')\n const discordConfig = channelConfig as import('./adapters/discord/types.js').DiscordChannelConfig\n core.registerAdapter('discord', new DiscordAdapter(core, discordConfig))\n log.info({ adapter: 'discord' }, 'Adapter registered')\n } else if (channelConfig.adapter) {\n // Plugin adapter\n const factory = await loadAdapterFactory(channelConfig.adapter)\n if (factory) {\n const adapter = factory.createAdapter(core, channelConfig)\n core.registerAdapter(channelName, adapter)\n log.info({ adapter: channelName, plugin: channelConfig.adapter }, 'Adapter registered')\n } else {\n const name = channelName\n const err = channelConfig.adapter\n log.error({ adapter: name, err }, 'Failed to load adapter')\n }\n } else {\n log.error({ adapter: channelName }, 'Channel has no built-in adapter; set \"adapter\" field to a plugin package')\n }\n }\n\n if (core.adapters.size === 0) {\n log.error('No channels enabled. Enable at least one channel in config.')\n process.exit(1)\n }\n\n // 5. Start\n let apiServer: ApiServer | undefined\n\n const shutdown = async (signal: string, exitCode = 0) => {\n if (shuttingDown) return\n shuttingDown = true\n log.info({ signal, exitCode }, 'Signal received, shutting down')\n\n try {\n if (apiServer) await apiServer.stop()\n await core.stop()\n if (tunnelService) await tunnelService.stop()\n } catch (err) {\n log.error({ err }, 'Error during shutdown')\n }\n\n const isDaemon = process.argv.includes('--daemon-child')\n\n // Clean up PID file if running as daemon\n if (isDaemon) {\n const { removePidFile, getPidPath } = await import('./core/daemon.js')\n removePidFile(getPidPath())\n }\n\n // Self-respawn on restart\n if (exitCode === RESTART_EXIT_CODE) {\n if (isDaemon) {\n // Daemon mode: spawn detached child writing to log file\n const { spawn: spawnChild } = await import('node:child_process')\n const { expandHome } = await import('./core/config.js')\n const fs = await import('node:fs')\n const pathMod = await import('node:path')\n\n const cliPath = pathMod.resolve(process.argv[1])\n const resolvedLogDir = expandHome(config.logging.logDir)\n fs.mkdirSync(resolvedLogDir, { recursive: true })\n const logFile = pathMod.join(resolvedLogDir, 'openacp.log')\n const out = fs.openSync(logFile, 'a')\n const err = fs.openSync(logFile, 'a')\n\n const child = spawnChild(process.execPath, [cliPath, '--daemon-child'], {\n detached: true,\n stdio: ['ignore', out, err],\n env: { ...process.env, OPENACP_SKIP_UPDATE_CHECK: '1' },\n })\n fs.closeSync(out)\n fs.closeSync(err)\n child.unref()\n log.info({ newPid: child.pid }, 'Respawned daemon for restart')\n } else if (!process.env.OPENACP_DEV_LOOP) {\n // Foreground production mode: spawn replacement process with inherited stdio\n const { spawn: spawnChild } = await import('node:child_process')\n const child = spawnChild(process.execPath, process.argv.slice(1), {\n stdio: 'inherit',\n env: { ...process.env, OPENACP_SKIP_UPDATE_CHECK: '1' },\n })\n await shutdownLogger()\n child.on('exit', (code) => process.exit(code ?? 0))\n return\n }\n }\n\n await shutdownLogger()\n process.exit(exitCode)\n }\n\n // Expose restart trigger for adapters (e.g. /restart command)\n core.requestRestart = () => shutdown('restart', RESTART_EXIT_CODE)\n\n process.on('SIGINT', () => shutdown('SIGINT'))\n process.on('SIGTERM', () => shutdown('SIGTERM'))\n\n process.on('uncaughtException', (err) => {\n log.error({ err }, 'Uncaught exception')\n })\n\n process.on('unhandledRejection', (err) => {\n log.error({ err }, 'Unhandled rejection')\n })\n\n await core.start()\n\n const updatedConfig = core.configManager.get()\n const telegramAdapter = core.adapters.get('telegram') ?? null\n let topicManager: TopicManager | undefined\n if (telegramAdapter) {\n const telegramCfg = updatedConfig.channels?.telegram as TelegramChannelConfig | undefined\n topicManager = new TopicManager(\n core.sessionManager,\n telegramAdapter,\n {\n notificationTopicId: telegramCfg?.notificationTopicId ?? null,\n assistantTopicId: telegramCfg?.assistantTopicId ?? null,\n },\n )\n }\n\n apiServer = new ApiServer(core, config.api, undefined, topicManager)\n await apiServer.start()\n\n // 6. Log ready\n if (isForegroundTTY) {\n if (spinner) spinner.stop()\n const ok = (msg: string) => console.log(`\\x1b[32m✓\\x1b[0m ${msg}`)\n ok('Config loaded')\n ok('Dependencies checked')\n if (tunnelService) ok(`Tunnel ready → ${tunnelService.getPublicUrl()}`)\n for (const [name] of core.adapters) ok(`${name.charAt(0).toUpperCase() + name.slice(1)} connected`)\n if (apiServer) ok(`API server on port ${config.api.port}`)\n console.log(`\\nOpenACP is running. Press Ctrl+C to stop.\\n`)\n unmuteLogger()\n }\n log.debug({ agents: Object.keys(config.agents) }, 'OpenACP started')\n}\n\n// Direct execution for dev (node dist/main.js)\nconst isDirectExecution = process.argv[1]?.endsWith('main.js')\nif (isDirectExecution) {\n startServer().catch((err) => {\n log.error({ err }, 'Fatal error')\n process.exit(1)\n })\n}\n"],"mappings":"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","names":[]}
@@ -12,9 +12,9 @@ import {
12
12
  validateBotToken,
13
13
  validateChatId,
14
14
  validateDiscordToken
15
- } from "./chunk-N6E3HE42.js";
15
+ } from "./chunk-ZKTIZME6.js";
16
16
  import "./chunk-JKBFUAJK.js";
17
- import "./chunk-L5KZXYJD.js";
17
+ import "./chunk-3ZO3MHZN.js";
18
18
  import "./chunk-GAK6PIBW.js";
19
19
  export {
20
20
  detectAgents,
@@ -31,4 +31,4 @@ export {
31
31
  validateChatId,
32
32
  validateDiscordToken
33
33
  };
34
- //# sourceMappingURL=setup-D6BU36ZL.js.map
34
+ //# sourceMappingURL=setup-5ZKSUR26.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openacp/cli",
3
- "version": "0.6.4",
3
+ "version": "0.6.6",
4
4
  "description": "Self-hosted bridge for AI coding agents via ACP protocol",
5
5
  "type": "module",
6
6
  "bin": {
@@ -25,10 +25,13 @@
25
25
  "@agentclientprotocol/sdk": "^0.16.0",
26
26
  "@clack/prompts": "^1.1.0",
27
27
  "@hono/node-server": "^1.19.11",
28
+ "@inquirer/prompts": "^8.3.2",
29
+ "@slack/web-api": "7.15.0",
28
30
  "@zed-industries/claude-agent-acp": "^0.22.2",
29
31
  "diff": "^8.0.3",
30
32
  "discord.js": "^14.25.1",
31
33
  "fastest-levenshtein": "^1.0.16",
34
+ "@slack/bolt": "^4.6.0",
32
35
  "grammy": "^1.41.1",
33
36
  "hono": "^4.12.8",
34
37
  "msedge-tts": "^2.0.4",
@@ -36,6 +39,7 @@
36
39
  "node-wav": "^0.0.2",
37
40
  "ogg-opus-decoder": "^1.7.3",
38
41
  "ora": "^9.3.0",
42
+ "p-queue": "^9.1.0",
39
43
  "pino": "^10.3.1",
40
44
  "pino-pretty": "^13.1.3",
41
45
  "pino-roll": "^4.0.0",