@chrisromp/copilot-bridge 0.6.0-dev.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 (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/bin/copilot-bridge.js +61 -0
  4. package/config.sample.json +100 -0
  5. package/dist/channels/mattermost/adapter.d.ts +55 -0
  6. package/dist/channels/mattermost/adapter.d.ts.map +1 -0
  7. package/dist/channels/mattermost/adapter.js +524 -0
  8. package/dist/channels/mattermost/adapter.js.map +1 -0
  9. package/dist/channels/mattermost/streaming.d.ts +29 -0
  10. package/dist/channels/mattermost/streaming.d.ts.map +1 -0
  11. package/dist/channels/mattermost/streaming.js +151 -0
  12. package/dist/channels/mattermost/streaming.js.map +1 -0
  13. package/dist/config.d.ts +107 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +817 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/core/bridge.d.ts +73 -0
  18. package/dist/core/bridge.d.ts.map +1 -0
  19. package/dist/core/bridge.js +166 -0
  20. package/dist/core/bridge.js.map +1 -0
  21. package/dist/core/channel-idle.d.ts +40 -0
  22. package/dist/core/channel-idle.d.ts.map +1 -0
  23. package/dist/core/channel-idle.js +120 -0
  24. package/dist/core/channel-idle.js.map +1 -0
  25. package/dist/core/command-handler.d.ts +51 -0
  26. package/dist/core/command-handler.d.ts.map +1 -0
  27. package/dist/core/command-handler.js +393 -0
  28. package/dist/core/command-handler.js.map +1 -0
  29. package/dist/core/inter-agent.d.ts +52 -0
  30. package/dist/core/inter-agent.d.ts.map +1 -0
  31. package/dist/core/inter-agent.js +179 -0
  32. package/dist/core/inter-agent.js.map +1 -0
  33. package/dist/core/onboarding.d.ts +44 -0
  34. package/dist/core/onboarding.d.ts.map +1 -0
  35. package/dist/core/onboarding.js +205 -0
  36. package/dist/core/onboarding.js.map +1 -0
  37. package/dist/core/scheduler.d.ts +38 -0
  38. package/dist/core/scheduler.d.ts.map +1 -0
  39. package/dist/core/scheduler.js +253 -0
  40. package/dist/core/scheduler.js.map +1 -0
  41. package/dist/core/session-manager.d.ts +166 -0
  42. package/dist/core/session-manager.d.ts.map +1 -0
  43. package/dist/core/session-manager.js +1732 -0
  44. package/dist/core/session-manager.js.map +1 -0
  45. package/dist/core/stream-formatter.d.ts +14 -0
  46. package/dist/core/stream-formatter.d.ts.map +1 -0
  47. package/dist/core/stream-formatter.js +198 -0
  48. package/dist/core/stream-formatter.js.map +1 -0
  49. package/dist/core/thread-utils.d.ts +22 -0
  50. package/dist/core/thread-utils.d.ts.map +1 -0
  51. package/dist/core/thread-utils.js +44 -0
  52. package/dist/core/thread-utils.js.map +1 -0
  53. package/dist/core/workspace-manager.d.ts +38 -0
  54. package/dist/core/workspace-manager.d.ts.map +1 -0
  55. package/dist/core/workspace-manager.js +230 -0
  56. package/dist/core/workspace-manager.js.map +1 -0
  57. package/dist/index.d.ts +2 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +1286 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/logger.d.ts +9 -0
  62. package/dist/logger.d.ts.map +1 -0
  63. package/dist/logger.js +34 -0
  64. package/dist/logger.js.map +1 -0
  65. package/dist/state/store.d.ts +124 -0
  66. package/dist/state/store.d.ts.map +1 -0
  67. package/dist/state/store.js +523 -0
  68. package/dist/state/store.js.map +1 -0
  69. package/dist/types.d.ts +185 -0
  70. package/dist/types.d.ts.map +1 -0
  71. package/dist/types.js +2 -0
  72. package/dist/types.js.map +1 -0
  73. package/package.json +61 -0
  74. package/scripts/check.ts +267 -0
  75. package/scripts/com.copilot-bridge.plist +41 -0
  76. package/scripts/copilot-bridge.service +30 -0
  77. package/scripts/init.ts +250 -0
  78. package/scripts/install-service.ts +123 -0
  79. package/scripts/lib/config-gen.ts +129 -0
  80. package/scripts/lib/mattermost.ts +109 -0
  81. package/scripts/lib/output.ts +69 -0
  82. package/scripts/lib/prerequisites.ts +86 -0
  83. package/scripts/lib/prompts.ts +65 -0
  84. package/scripts/lib/service.ts +191 -0
  85. package/scripts/uninstall-service.ts +90 -0
  86. package/templates/admin/AGENTS.md +325 -0
  87. package/templates/admin/MEMORY.md +4 -0
  88. package/templates/agents/AGENTS.md +97 -0
  89. package/templates/agents/MEMORY.md +4 -0
@@ -0,0 +1,166 @@
1
+ import { CopilotBridge } from './bridge.js';
2
+ import { type ChannelPrefs } from '../state/store.js';
3
+ import { type InterAgentContext } from './inter-agent.js';
4
+ import type { McpServerInfo } from './command-handler.js';
5
+ import type { ChannelAdapter } from '../types.js';
6
+ /** Custom tools auto-approved without interactive prompt (they enforce workspace boundaries internally). */
7
+ export declare const BRIDGE_CUSTOM_TOOLS: string[];
8
+ type SessionEventHandler = (sessionId: string, channelId: string, event: any) => void;
9
+ export declare function extractCommandPatterns(input: unknown): string[];
10
+ export declare class SessionManager {
11
+ private bridge;
12
+ private channelSessions;
13
+ private sessionChannels;
14
+ private sessionUnsubscribes;
15
+ private eventHandler;
16
+ private mcpServers;
17
+ private pendingPermissions;
18
+ private pendingUserInput;
19
+ private contextUsage;
20
+ private lastMessageUserIds;
21
+ private sendFileHandler;
22
+ private getAdapterForChannel;
23
+ constructor(bridge: CopilotBridge);
24
+ /** Register a handler for session events (streaming, tool calls, etc.) */
25
+ onSessionEvent(handler: SessionEventHandler): void;
26
+ /** Register handler for the send_file custom tool. */
27
+ onSendFile(handler: (channelId: string, filePath: string, message?: string) => Promise<string>): void;
28
+ /** Register adapter resolver for onboarding tools. */
29
+ onGetAdapter(resolver: (channelId: string) => ChannelAdapter | null): void;
30
+ /**
31
+ * Resolve MCP servers for a workspace: workspace config (highest priority)
32
+ * merged on top of global servers (plugin + user config).
33
+ */
34
+ private resolveMcpServers;
35
+ /** Get annotated MCP server info for a channel, showing which layer each server came from. */
36
+ getMcpServerInfo(channelId: string): McpServerInfo[];
37
+ /** Get skill info for a channel — discovers skills and reads their descriptions from SKILL.md frontmatter. */
38
+ getSkillInfo(channelId: string): {
39
+ name: string;
40
+ description: string;
41
+ source: string;
42
+ }[];
43
+ /** Get or create a session for a channel. */
44
+ ensureSession(channelId: string): Promise<{
45
+ sessionId: string;
46
+ isNew: boolean;
47
+ }>;
48
+ /** Create a brand new session for a channel (used by /new command). */
49
+ newSession(channelId: string): Promise<string>;
50
+ /** Reload the current session — detach and re-attach to pick up AGENTS.md / config changes. */
51
+ reloadSession(channelId: string): Promise<string>;
52
+ /** Resume a specific past session by ID. */
53
+ resumeToSession(channelId: string, targetSessionId: string): Promise<string>;
54
+ /** Send a message to a channel's session. Returns immediately; responses come via events. */
55
+ sendMessage(channelId: string, text: string, attachments?: Array<{
56
+ type: 'file';
57
+ path: string;
58
+ displayName?: string;
59
+ }>, userId?: string): Promise<string>;
60
+ /** Send a mid-turn message to an active session using immediate mode (steering).
61
+ * Throws if no active session exists or if send fails. */
62
+ sendMidTurn(channelId: string, text: string, userId?: string): Promise<string>;
63
+ /** Deny all pending permissions for a channel (e.g., when user sends a new message instead). */
64
+ private clearPendingPermissions;
65
+ /** Switch the model for a channel's session. */
66
+ switchModel(channelId: string, model: string): Promise<void>;
67
+ /** Switch the agent for a channel's session. */
68
+ switchAgent(channelId: string, agent: string | null): Promise<void>;
69
+ /** Get effective preferences for a channel (config merged with runtime overrides). */
70
+ getEffectivePrefs(channelId: string): ChannelPrefs & {
71
+ model: string;
72
+ verbose: boolean;
73
+ threadedReplies: boolean;
74
+ permissionMode: string;
75
+ triggerMode: 'mention' | 'all';
76
+ };
77
+ /** Get model info (for checking capabilities like reasoning effort). */
78
+ getModelInfo(modelId: string): Promise<any | null>;
79
+ /** List all available models. */
80
+ listModels(): Promise<any[]>;
81
+ /** Check if the Copilot CLI is authenticated. */
82
+ getAuthStatus(): Promise<{
83
+ isAuthenticated: boolean;
84
+ statusMessage?: string;
85
+ login?: string;
86
+ }>;
87
+ /** Resolve a pending permission request (first in queue). */
88
+ resolvePermission(channelId: string, allow: boolean, remember?: boolean): boolean;
89
+ /** Resolve a pending user input request (first in queue). */
90
+ resolveUserInput(channelId: string, answer: string): boolean;
91
+ /** Check if channel has a pending permission request. */
92
+ hasPendingPermission(channelId: string): boolean;
93
+ /** Get the current session ID for a channel (if any). */
94
+ getSessionId(channelId: string): string | undefined;
95
+ /** Abort the current turn for a channel's session. */
96
+ abortSession(channelId: string): Promise<void>;
97
+ /** Check if channel has a pending user input request. */
98
+ hasPendingUserInput(channelId: string): boolean;
99
+ /** Get info about the current session for a channel. */
100
+ getSessionInfo(channelId: string): {
101
+ sessionId: string;
102
+ model: string;
103
+ agent: string | null;
104
+ } | null;
105
+ /** Get cached context window usage for a channel. */
106
+ getContextUsage(channelId: string): {
107
+ currentTokens: number;
108
+ tokenLimit: number;
109
+ } | null;
110
+ /** List past sessions for this channel's working directory. */
111
+ listChannelSessions(channelId: string): Promise<Array<{
112
+ sessionId: string;
113
+ startTime: Date;
114
+ modifiedTime: Date;
115
+ summary?: string;
116
+ isCurrent: boolean;
117
+ }>>;
118
+ /** Resolve working directory: SQLite workspace override → channel config → default workspace path. */
119
+ private resolveWorkingDirectory;
120
+ private createNewSession;
121
+ private attachSession;
122
+ /**
123
+ * Execute an ephemeral inter-agent call: create a fresh session for the target bot,
124
+ * send the message, collect the response, and tear down.
125
+ */
126
+ executeEphemeralCall(opts: {
127
+ callerBot: string;
128
+ targetBot: string;
129
+ message: string;
130
+ context: InterAgentContext;
131
+ agent?: string;
132
+ timeout?: number;
133
+ autopilot?: boolean;
134
+ denyTools?: string[];
135
+ grantTools?: string[];
136
+ callerChannelId: string;
137
+ }): Promise<{
138
+ success: true;
139
+ response: string;
140
+ } | {
141
+ success: false;
142
+ error: string;
143
+ detail: string;
144
+ }>;
145
+ /** Send a message to a session and wait for session.idle, collecting streamed response text. */
146
+ private sendAndWaitForIdle;
147
+ /** Build a permission handler for ephemeral sessions with merged caller+target rules. */
148
+ private buildEphemeralPermissionHandler;
149
+ /** Build custom tools for an ephemeral inter-agent session. */
150
+ private buildEphemeralTools;
151
+ /** Get target bot config across all platforms. */
152
+ private getTargetBotConfig;
153
+ /** Build the ask_agent tool definition (shared by normal and ephemeral sessions).
154
+ * When callerBotDirect is true, channelIdOrBot is the bot name directly (for ephemeral sessions). */
155
+ private buildAskAgentToolDef;
156
+ /** Build custom tool definitions to pass to SDK session creation. */
157
+ private buildCustomTools;
158
+ /** Build the schedule tool definition for creating/managing scheduled tasks. */
159
+ private buildScheduleToolDef;
160
+ private attachSessionEvents;
161
+ private handlePermissionRequest;
162
+ private handleUserInputRequest;
163
+ shutdown(): Promise<void>;
164
+ }
165
+ export {};
166
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}