@openacp/cli 0.4.5 → 0.4.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.
- package/README.md +81 -15
- package/dist/agent-registry-7HC6D4CH.js +7 -0
- package/dist/{chunk-V5P3K4A5.js → chunk-2M4O7AFI.js} +753 -90
- package/dist/chunk-2M4O7AFI.js.map +1 -0
- package/dist/{chunk-BLVZFCKN.js → chunk-ARWC4S35.js} +19 -1
- package/dist/{chunk-BLVZFCKN.js.map → chunk-ARWC4S35.js.map} +1 -1
- package/dist/{chunk-WHKLPZGK.js → chunk-IUPHAXGA.js} +8 -8
- package/dist/chunk-VA2M52CM.js +15 -0
- package/dist/chunk-VA2M52CM.js.map +1 -0
- package/dist/cli.js +370 -26
- package/dist/cli.js.map +1 -1
- package/dist/{config-editor-IXL4BFG3.js → config-editor-EPOKAEP6.js} +4 -4
- package/dist/index.d.ts +93 -10
- package/dist/index.js +11 -8
- package/dist/integrate-HYDSHAF3.js +123 -0
- package/dist/integrate-HYDSHAF3.js.map +1 -0
- package/dist/{main-3CDOICYN.js → main-3POGUQPY.js} +21 -8
- package/dist/main-3POGUQPY.js.map +1 -0
- package/dist/{setup-JQZBPXWS.js → setup-CEDO6VWV.js} +2 -2
- package/dist/setup-CEDO6VWV.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-V5P3K4A5.js.map +0 -1
- package/dist/main-3CDOICYN.js.map +0 -1
- /package/dist/{config-editor-IXL4BFG3.js.map → agent-registry-7HC6D4CH.js.map} +0 -0
- /package/dist/{chunk-WHKLPZGK.js.map → chunk-IUPHAXGA.js.map} +0 -0
- /package/dist/{setup-JQZBPXWS.js.map → config-editor-EPOKAEP6.js.map} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runConfigEditor
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-BLVZFCKN.js";
|
|
3
|
+
} from "./chunk-IUPHAXGA.js";
|
|
4
|
+
import "./chunk-ARWC4S35.js";
|
|
6
5
|
import "./chunk-WF5XDN4D.js";
|
|
6
|
+
import "./chunk-MRKYJ422.js";
|
|
7
7
|
import "./chunk-LYKCQTH5.js";
|
|
8
8
|
export {
|
|
9
9
|
runConfigEditor
|
|
10
10
|
};
|
|
11
|
-
//# sourceMappingURL=config-editor-
|
|
11
|
+
//# sourceMappingURL=config-editor-EPOKAEP6.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -99,6 +99,7 @@ type SessionStatus = "initializing" | "active" | "cancelled" | "finished" | "err
|
|
|
99
99
|
interface SessionRecord<P = Record<string, unknown>> {
|
|
100
100
|
sessionId: string;
|
|
101
101
|
agentSessionId: string;
|
|
102
|
+
originalAgentSessionId?: string;
|
|
102
103
|
agentName: string;
|
|
103
104
|
workingDir: string;
|
|
104
105
|
channelId: string;
|
|
@@ -297,6 +298,10 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
297
298
|
} | undefined;
|
|
298
299
|
}>>;
|
|
299
300
|
}, "strip", z.ZodTypeAny, {
|
|
301
|
+
api: {
|
|
302
|
+
port: number;
|
|
303
|
+
host: string;
|
|
304
|
+
};
|
|
300
305
|
tunnel: {
|
|
301
306
|
options: Record<string, unknown>;
|
|
302
307
|
enabled: boolean;
|
|
@@ -336,10 +341,6 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
336
341
|
};
|
|
337
342
|
runMode: "foreground" | "daemon";
|
|
338
343
|
autoStart: boolean;
|
|
339
|
-
api: {
|
|
340
|
-
port: number;
|
|
341
|
-
host: string;
|
|
342
|
-
};
|
|
343
344
|
sessionStore: {
|
|
344
345
|
ttlDays: number;
|
|
345
346
|
};
|
|
@@ -355,6 +356,10 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
355
356
|
adapter: z.ZodOptional<z.ZodString>;
|
|
356
357
|
}, z.ZodTypeAny, "passthrough">>;
|
|
357
358
|
defaultAgent: string;
|
|
359
|
+
api?: {
|
|
360
|
+
port?: number | undefined;
|
|
361
|
+
host?: string | undefined;
|
|
362
|
+
} | undefined;
|
|
358
363
|
tunnel?: {
|
|
359
364
|
options?: Record<string, unknown> | undefined;
|
|
360
365
|
enabled?: boolean | undefined;
|
|
@@ -383,10 +388,6 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
383
388
|
} | undefined;
|
|
384
389
|
runMode?: "foreground" | "daemon" | undefined;
|
|
385
390
|
autoStart?: boolean | undefined;
|
|
386
|
-
api?: {
|
|
387
|
-
port?: number | undefined;
|
|
388
|
-
host?: string | undefined;
|
|
389
|
-
} | undefined;
|
|
390
391
|
sessionStore?: {
|
|
391
392
|
ttlDays?: number | undefined;
|
|
392
393
|
} | undefined;
|
|
@@ -438,6 +439,7 @@ interface IChannelAdapter {
|
|
|
438
439
|
sendNotification(notification: NotificationMessage): Promise<void>;
|
|
439
440
|
createSessionThread(sessionId: string, name: string): Promise<string>;
|
|
440
441
|
renameSessionThread(sessionId: string, newName: string): Promise<void>;
|
|
442
|
+
deleteSessionThread(sessionId: string): Promise<void>;
|
|
441
443
|
sendSkillCommands(sessionId: string, commands: AgentCommand[]): Promise<void>;
|
|
442
444
|
cleanupSkillCommands(sessionId: string): Promise<void>;
|
|
443
445
|
}
|
|
@@ -456,6 +458,7 @@ declare abstract class ChannelAdapter<TCore = unknown> implements IChannelAdapte
|
|
|
456
458
|
abstract sendNotification(notification: NotificationMessage): Promise<void>;
|
|
457
459
|
abstract createSessionThread(sessionId: string, name: string): Promise<string>;
|
|
458
460
|
abstract renameSessionThread(sessionId: string, newName: string): Promise<void>;
|
|
461
|
+
deleteSessionThread(_sessionId: string): Promise<void>;
|
|
459
462
|
sendSkillCommands(_sessionId: string, _commands: AgentCommand[]): Promise<void>;
|
|
460
463
|
cleanupSkillCommands(_sessionId: string): Promise<void>;
|
|
461
464
|
}
|
|
@@ -684,6 +687,7 @@ interface SessionStore {
|
|
|
684
687
|
save(record: SessionRecord): Promise<void>;
|
|
685
688
|
get(sessionId: string): SessionRecord | undefined;
|
|
686
689
|
findByPlatform(channelId: string, predicate: (platform: Record<string, unknown>) => boolean): SessionRecord | undefined;
|
|
690
|
+
findByAgentSessionId(agentSessionId: string): SessionRecord | undefined;
|
|
687
691
|
list(channelId?: string): SessionRecord[];
|
|
688
692
|
remove(sessionId: string): Promise<void>;
|
|
689
693
|
}
|
|
@@ -695,6 +699,8 @@ declare class SessionManager {
|
|
|
695
699
|
createSession(channelId: string, agentName: string, workingDirectory: string, agentManager: AgentManager): Promise<Session>;
|
|
696
700
|
getSession(sessionId: string): Session | undefined;
|
|
697
701
|
getSessionByThread(channelId: string, threadId: string): Session | undefined;
|
|
702
|
+
getSessionByAgentSessionId(agentSessionId: string): Session | undefined;
|
|
703
|
+
getRecordByAgentSessionId(agentSessionId: string): SessionRecord | undefined;
|
|
698
704
|
getRecordByThread(channelId: string, threadId: string): SessionRecord | undefined;
|
|
699
705
|
registerSession(session: Session): void;
|
|
700
706
|
updateSessionPlatform(sessionId: string, platform: Record<string, unknown>): Promise<void>;
|
|
@@ -705,6 +711,10 @@ declare class SessionManager {
|
|
|
705
711
|
getSessionRecord(sessionId: string): SessionRecord | undefined;
|
|
706
712
|
cancelSession(sessionId: string): Promise<void>;
|
|
707
713
|
listSessions(channelId?: string): Session[];
|
|
714
|
+
listRecords(filter?: {
|
|
715
|
+
statuses?: string[];
|
|
716
|
+
}): SessionRecord[];
|
|
717
|
+
removeRecord(sessionId: string): Promise<void>;
|
|
708
718
|
destroyAll(): Promise<void>;
|
|
709
719
|
}
|
|
710
720
|
|
|
@@ -728,6 +738,16 @@ declare class OpenACPCore {
|
|
|
728
738
|
stop(): Promise<void>;
|
|
729
739
|
handleMessage(message: IncomingMessage): Promise<void>;
|
|
730
740
|
handleNewSession(channelId: string, agentName?: string, workspacePath?: string): Promise<Session>;
|
|
741
|
+
adoptSession(agentName: string, agentSessionId: string, cwd: string): Promise<{
|
|
742
|
+
ok: true;
|
|
743
|
+
sessionId: string;
|
|
744
|
+
threadId: string;
|
|
745
|
+
status: "adopted" | "existing";
|
|
746
|
+
} | {
|
|
747
|
+
ok: false;
|
|
748
|
+
error: string;
|
|
749
|
+
message: string;
|
|
750
|
+
}>;
|
|
731
751
|
handleNewChat(channelId: string, currentThreadId: string): Promise<Session | null>;
|
|
732
752
|
private lazyResume;
|
|
733
753
|
wireSessionEvents(session: Session, adapter: ChannelAdapter): void;
|
|
@@ -771,6 +791,51 @@ declare function isAutoStartInstalled(): boolean;
|
|
|
771
791
|
|
|
772
792
|
declare function runConfigEditor(configManager: ConfigManager): Promise<void>;
|
|
773
793
|
|
|
794
|
+
interface TopicInfo {
|
|
795
|
+
sessionId: string;
|
|
796
|
+
topicId: number | null;
|
|
797
|
+
name: string | null;
|
|
798
|
+
status: string;
|
|
799
|
+
agentName: string;
|
|
800
|
+
lastActiveAt: string;
|
|
801
|
+
}
|
|
802
|
+
interface DeleteTopicResult {
|
|
803
|
+
ok: boolean;
|
|
804
|
+
needsConfirmation?: boolean;
|
|
805
|
+
topicId?: number | null;
|
|
806
|
+
session?: {
|
|
807
|
+
id: string;
|
|
808
|
+
name: string | null;
|
|
809
|
+
status: string;
|
|
810
|
+
};
|
|
811
|
+
error?: string;
|
|
812
|
+
}
|
|
813
|
+
interface CleanupResult {
|
|
814
|
+
deleted: string[];
|
|
815
|
+
failed: {
|
|
816
|
+
sessionId: string;
|
|
817
|
+
error: string;
|
|
818
|
+
}[];
|
|
819
|
+
}
|
|
820
|
+
interface SystemTopicIds {
|
|
821
|
+
notificationTopicId: number | null;
|
|
822
|
+
assistantTopicId: number | null;
|
|
823
|
+
}
|
|
824
|
+
declare class TopicManager {
|
|
825
|
+
private sessionManager;
|
|
826
|
+
private adapter;
|
|
827
|
+
private systemTopicIds;
|
|
828
|
+
constructor(sessionManager: SessionManager, adapter: IChannelAdapter | null, systemTopicIds: SystemTopicIds);
|
|
829
|
+
listTopics(filter?: {
|
|
830
|
+
statuses?: string[];
|
|
831
|
+
}): TopicInfo[];
|
|
832
|
+
deleteTopic(sessionId: string, options?: {
|
|
833
|
+
confirmed?: boolean;
|
|
834
|
+
}): Promise<DeleteTopicResult>;
|
|
835
|
+
cleanup(statuses?: string[]): Promise<CleanupResult>;
|
|
836
|
+
private isSystemTopic;
|
|
837
|
+
}
|
|
838
|
+
|
|
774
839
|
interface ApiConfig {
|
|
775
840
|
port: number;
|
|
776
841
|
host: string;
|
|
@@ -778,10 +843,12 @@ interface ApiConfig {
|
|
|
778
843
|
declare class ApiServer {
|
|
779
844
|
private core;
|
|
780
845
|
private config;
|
|
846
|
+
private topicManager?;
|
|
781
847
|
private server;
|
|
782
848
|
private actualPort;
|
|
783
849
|
private portFilePath;
|
|
784
|
-
|
|
850
|
+
private startedAt;
|
|
851
|
+
constructor(core: OpenACPCore, config: ApiConfig, portFilePath?: string, topicManager?: TopicManager | undefined);
|
|
785
852
|
start(): Promise<void>;
|
|
786
853
|
stop(): Promise<void>;
|
|
787
854
|
getPort(): number;
|
|
@@ -789,10 +856,25 @@ declare class ApiServer {
|
|
|
789
856
|
private removePortFile;
|
|
790
857
|
private handleRequest;
|
|
791
858
|
private handleCreateSession;
|
|
859
|
+
private handleSendPrompt;
|
|
860
|
+
private handleGetSession;
|
|
861
|
+
private handleToggleDangerous;
|
|
862
|
+
private handleHealth;
|
|
863
|
+
private handleVersion;
|
|
864
|
+
private handleGetConfig;
|
|
865
|
+
private handleUpdateConfig;
|
|
866
|
+
private handleListAdapters;
|
|
867
|
+
private handleTunnelStatus;
|
|
868
|
+
private handleNotify;
|
|
869
|
+
private handleRestart;
|
|
792
870
|
private handleCancelSession;
|
|
793
871
|
private handleListSessions;
|
|
872
|
+
private handleAdoptSession;
|
|
794
873
|
private handleListAgents;
|
|
795
874
|
private sendJson;
|
|
875
|
+
private handleListTopics;
|
|
876
|
+
private handleDeleteTopic;
|
|
877
|
+
private handleCleanupTopics;
|
|
796
878
|
private readBody;
|
|
797
879
|
}
|
|
798
880
|
|
|
@@ -828,9 +910,10 @@ declare class TelegramAdapter extends ChannelAdapter<OpenACPCore> {
|
|
|
828
910
|
sendNotification(notification: NotificationMessage): Promise<void>;
|
|
829
911
|
createSessionThread(sessionId: string, name: string): Promise<string>;
|
|
830
912
|
renameSessionThread(sessionId: string, newName: string): Promise<void>;
|
|
913
|
+
deleteSessionThread(sessionId: string): Promise<void>;
|
|
831
914
|
sendSkillCommands(sessionId: string, commands: AgentCommand[]): Promise<void>;
|
|
832
915
|
cleanupSkillCommands(sessionId: string): Promise<void>;
|
|
833
916
|
private finalizeDraft;
|
|
834
917
|
}
|
|
835
918
|
|
|
836
|
-
export { type AdapterFactory, type AgentCommand, type AgentDefinition, type AgentEvent, AgentInstance, AgentManager, type ApiConfig, ApiServer, ChannelAdapter, type ChannelConfig, type Config, ConfigManager, type IChannelAdapter, type IncomingMessage, type Logger, type LoggingConfig, MessageTransformer, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, PromptQueue, Session, type SessionEvents, SessionManager, type SessionRecord, type SessionStatus, StderrCapture, TelegramAdapter, type TelegramPlatformData, TypedEmitter, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getPidPath, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, runConfigEditor, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
|
|
919
|
+
export { type AdapterFactory, type AgentCommand, type AgentDefinition, type AgentEvent, AgentInstance, AgentManager, type ApiConfig, ApiServer, ChannelAdapter, type ChannelConfig, type CleanupResult, type Config, ConfigManager, type DeleteTopicResult, type IChannelAdapter, type IncomingMessage, type Logger, type LoggingConfig, MessageTransformer, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, PromptQueue, Session, type SessionEvents, SessionManager, type SessionRecord, type SessionStatus, StderrCapture, TelegramAdapter, type TelegramPlatformData, type TopicInfo, TopicManager, TypedEmitter, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getPidPath, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, runConfigEditor, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
|
package/dist/index.js
CHANGED
|
@@ -12,13 +12,16 @@ import {
|
|
|
12
12
|
SessionManager,
|
|
13
13
|
StderrCapture,
|
|
14
14
|
TelegramAdapter,
|
|
15
|
+
TopicManager,
|
|
15
16
|
TypedEmitter,
|
|
16
17
|
nodeToWebReadable,
|
|
17
18
|
nodeToWebWritable
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-2M4O7AFI.js";
|
|
19
20
|
import {
|
|
20
21
|
runConfigEditor
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-IUPHAXGA.js";
|
|
23
|
+
import "./chunk-ARWC4S35.js";
|
|
24
|
+
import "./chunk-VA2M52CM.js";
|
|
22
25
|
import {
|
|
23
26
|
installPlugin,
|
|
24
27
|
listPlugins,
|
|
@@ -31,18 +34,17 @@ import {
|
|
|
31
34
|
startDaemon,
|
|
32
35
|
stopDaemon
|
|
33
36
|
} from "./chunk-3QACY5E3.js";
|
|
37
|
+
import {
|
|
38
|
+
ConfigManager,
|
|
39
|
+
PLUGINS_DIR,
|
|
40
|
+
expandHome
|
|
41
|
+
} from "./chunk-WF5XDN4D.js";
|
|
34
42
|
import {
|
|
35
43
|
installAutoStart,
|
|
36
44
|
isAutoStartInstalled,
|
|
37
45
|
isAutoStartSupported,
|
|
38
46
|
uninstallAutoStart
|
|
39
47
|
} from "./chunk-MRKYJ422.js";
|
|
40
|
-
import "./chunk-BLVZFCKN.js";
|
|
41
|
-
import {
|
|
42
|
-
ConfigManager,
|
|
43
|
-
PLUGINS_DIR,
|
|
44
|
-
expandHome
|
|
45
|
-
} from "./chunk-WF5XDN4D.js";
|
|
46
48
|
import {
|
|
47
49
|
cleanupOldSessionLogs,
|
|
48
50
|
createChildLogger,
|
|
@@ -67,6 +69,7 @@ export {
|
|
|
67
69
|
SessionManager,
|
|
68
70
|
StderrCapture,
|
|
69
71
|
TelegramAdapter,
|
|
72
|
+
TopicManager,
|
|
70
73
|
TypedEmitter,
|
|
71
74
|
cleanupOldSessionLogs,
|
|
72
75
|
createChildLogger,
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// src/cli/integrate.ts
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, chmodSync } from "fs";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
var CLAUDE_DIR = join(homedir(), ".claude");
|
|
6
|
+
var HOOKS_DIR = join(CLAUDE_DIR, "hooks");
|
|
7
|
+
var COMMANDS_DIR = join(CLAUDE_DIR, "commands");
|
|
8
|
+
var SETTINGS_FILE = join(CLAUDE_DIR, "settings.json");
|
|
9
|
+
var INJECT_HOOK_FILE = join(HOOKS_DIR, "openacp-inject-session.sh");
|
|
10
|
+
var HANDOFF_SCRIPT_FILE = join(HOOKS_DIR, "openacp-handoff.sh");
|
|
11
|
+
var HANDOFF_COMMAND_FILE = join(COMMANDS_DIR, "openacp:handoff.md");
|
|
12
|
+
var INJECT_HOOK_CONTENT = `#!/bin/bash
|
|
13
|
+
INPUT=$(cat)
|
|
14
|
+
SESSION_ID=$(echo "$INPUT" | jq -r '.session_id')
|
|
15
|
+
CWD=$(echo "$INPUT" | jq -r '.cwd')
|
|
16
|
+
|
|
17
|
+
echo "CLAUDE_SESSION_ID: $SESSION_ID"
|
|
18
|
+
echo "CLAUDE_WORKING_DIR: $CWD"
|
|
19
|
+
|
|
20
|
+
exit 0
|
|
21
|
+
`;
|
|
22
|
+
var HANDOFF_SCRIPT_CONTENT = `#!/bin/bash
|
|
23
|
+
SESSION_ID=$1
|
|
24
|
+
CWD=$2
|
|
25
|
+
|
|
26
|
+
if [ -z "$SESSION_ID" ]; then
|
|
27
|
+
echo "Usage: openacp-handoff.sh <session_id> [cwd]"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
openacp adopt claude "$SESSION_ID" \${CWD:+--cwd "$CWD"}
|
|
32
|
+
`;
|
|
33
|
+
var HANDOFF_COMMAND_CONTENT = `---
|
|
34
|
+
description: Hand off current session to OpenACP (Telegram)
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
Look at the context injected at the start of this message to find
|
|
38
|
+
CLAUDE_SESSION_ID and CLAUDE_WORKING_DIR, then run:
|
|
39
|
+
|
|
40
|
+
bash ~/.claude/hooks/openacp-handoff.sh <CLAUDE_SESSION_ID> <CLAUDE_WORKING_DIR>
|
|
41
|
+
`;
|
|
42
|
+
var HOOK_MARKER = "openacp-inject-session.sh";
|
|
43
|
+
var ClaudeIntegration = class {
|
|
44
|
+
async install() {
|
|
45
|
+
mkdirSync(HOOKS_DIR, { recursive: true });
|
|
46
|
+
mkdirSync(COMMANDS_DIR, { recursive: true });
|
|
47
|
+
writeFileSync(INJECT_HOOK_FILE, INJECT_HOOK_CONTENT);
|
|
48
|
+
chmodSync(INJECT_HOOK_FILE, 493);
|
|
49
|
+
console.log(` Created ${INJECT_HOOK_FILE}`);
|
|
50
|
+
writeFileSync(HANDOFF_SCRIPT_FILE, HANDOFF_SCRIPT_CONTENT);
|
|
51
|
+
chmodSync(HANDOFF_SCRIPT_FILE, 493);
|
|
52
|
+
console.log(` Created ${HANDOFF_SCRIPT_FILE}`);
|
|
53
|
+
writeFileSync(HANDOFF_COMMAND_FILE, HANDOFF_COMMAND_CONTENT);
|
|
54
|
+
console.log(` Created ${HANDOFF_COMMAND_FILE}`);
|
|
55
|
+
this.mergeSettings();
|
|
56
|
+
console.log(` Updated ${SETTINGS_FILE}`);
|
|
57
|
+
}
|
|
58
|
+
async uninstall() {
|
|
59
|
+
for (const file of [INJECT_HOOK_FILE, HANDOFF_SCRIPT_FILE, HANDOFF_COMMAND_FILE]) {
|
|
60
|
+
if (existsSync(file)) {
|
|
61
|
+
unlinkSync(file);
|
|
62
|
+
console.log(` Removed ${file}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this.removeFromSettings();
|
|
66
|
+
console.log(` Updated ${SETTINGS_FILE}`);
|
|
67
|
+
}
|
|
68
|
+
mergeSettings() {
|
|
69
|
+
let settings = {};
|
|
70
|
+
if (existsSync(SETTINGS_FILE)) {
|
|
71
|
+
const raw = readFileSync(SETTINGS_FILE, "utf-8");
|
|
72
|
+
writeFileSync(`${SETTINGS_FILE}.bak`, raw);
|
|
73
|
+
settings = JSON.parse(raw);
|
|
74
|
+
}
|
|
75
|
+
const hooks = settings.hooks ?? {};
|
|
76
|
+
settings.hooks = hooks;
|
|
77
|
+
const userPromptSubmit = hooks.UserPromptSubmit ?? [];
|
|
78
|
+
hooks.UserPromptSubmit = userPromptSubmit;
|
|
79
|
+
const alreadyInstalled = userPromptSubmit.some(
|
|
80
|
+
(group) => group.hooks?.some((h) => h.command?.includes(HOOK_MARKER))
|
|
81
|
+
);
|
|
82
|
+
if (!alreadyInstalled) {
|
|
83
|
+
userPromptSubmit.push({
|
|
84
|
+
hooks: [
|
|
85
|
+
{
|
|
86
|
+
type: "command",
|
|
87
|
+
command: INJECT_HOOK_FILE
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2) + "\n");
|
|
93
|
+
}
|
|
94
|
+
removeFromSettings() {
|
|
95
|
+
if (!existsSync(SETTINGS_FILE)) return;
|
|
96
|
+
const raw = readFileSync(SETTINGS_FILE, "utf-8");
|
|
97
|
+
const settings = JSON.parse(raw);
|
|
98
|
+
const hooks = settings.hooks;
|
|
99
|
+
if (!hooks?.UserPromptSubmit) return;
|
|
100
|
+
hooks.UserPromptSubmit = hooks.UserPromptSubmit.filter(
|
|
101
|
+
(group) => !group.hooks?.some((h) => h.command?.includes("openacp-"))
|
|
102
|
+
);
|
|
103
|
+
if (hooks.UserPromptSubmit.length === 0) {
|
|
104
|
+
delete hooks.UserPromptSubmit;
|
|
105
|
+
}
|
|
106
|
+
writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2) + "\n");
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
var integrations = {
|
|
110
|
+
claude: new ClaudeIntegration()
|
|
111
|
+
};
|
|
112
|
+
function getIntegration(agentName) {
|
|
113
|
+
return integrations[agentName];
|
|
114
|
+
}
|
|
115
|
+
function listIntegrations() {
|
|
116
|
+
return Object.keys(integrations);
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
ClaudeIntegration,
|
|
120
|
+
getIntegration,
|
|
121
|
+
listIntegrations
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=integrate-HYDSHAF3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/integrate.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, chmodSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nexport interface AgentIntegration {\n install(): Promise<void>;\n uninstall(): Promise<void>;\n}\n\nconst CLAUDE_DIR = join(homedir(), \".claude\");\nconst HOOKS_DIR = join(CLAUDE_DIR, \"hooks\");\nconst COMMANDS_DIR = join(CLAUDE_DIR, \"commands\");\nconst SETTINGS_FILE = join(CLAUDE_DIR, \"settings.json\");\n\nconst INJECT_HOOK_FILE = join(HOOKS_DIR, \"openacp-inject-session.sh\");\nconst HANDOFF_SCRIPT_FILE = join(HOOKS_DIR, \"openacp-handoff.sh\");\nconst HANDOFF_COMMAND_FILE = join(COMMANDS_DIR, \"openacp:handoff.md\");\n\nconst INJECT_HOOK_CONTENT = `#!/bin/bash\nINPUT=$(cat)\nSESSION_ID=$(echo \"$INPUT\" | jq -r '.session_id')\nCWD=$(echo \"$INPUT\" | jq -r '.cwd')\n\necho \"CLAUDE_SESSION_ID: $SESSION_ID\"\necho \"CLAUDE_WORKING_DIR: $CWD\"\n\nexit 0\n`;\n\nconst HANDOFF_SCRIPT_CONTENT = `#!/bin/bash\nSESSION_ID=$1\nCWD=$2\n\nif [ -z \"$SESSION_ID\" ]; then\n echo \"Usage: openacp-handoff.sh <session_id> [cwd]\"\n exit 1\nfi\n\nopenacp adopt claude \"$SESSION_ID\" \\${CWD:+--cwd \"$CWD\"}\n`;\n\nconst HANDOFF_COMMAND_CONTENT = `---\ndescription: Hand off current session to OpenACP (Telegram)\n---\n\nLook at the context injected at the start of this message to find\nCLAUDE_SESSION_ID and CLAUDE_WORKING_DIR, then run:\n\nbash ~/.claude/hooks/openacp-handoff.sh <CLAUDE_SESSION_ID> <CLAUDE_WORKING_DIR>\n`;\n\nconst HOOK_MARKER = \"openacp-inject-session.sh\";\n\nexport class ClaudeIntegration implements AgentIntegration {\n async install(): Promise<void> {\n mkdirSync(HOOKS_DIR, { recursive: true });\n mkdirSync(COMMANDS_DIR, { recursive: true });\n\n writeFileSync(INJECT_HOOK_FILE, INJECT_HOOK_CONTENT);\n chmodSync(INJECT_HOOK_FILE, 0o755);\n console.log(` Created ${INJECT_HOOK_FILE}`);\n\n writeFileSync(HANDOFF_SCRIPT_FILE, HANDOFF_SCRIPT_CONTENT);\n chmodSync(HANDOFF_SCRIPT_FILE, 0o755);\n console.log(` Created ${HANDOFF_SCRIPT_FILE}`);\n\n writeFileSync(HANDOFF_COMMAND_FILE, HANDOFF_COMMAND_CONTENT);\n console.log(` Created ${HANDOFF_COMMAND_FILE}`);\n\n this.mergeSettings();\n console.log(` Updated ${SETTINGS_FILE}`);\n }\n\n async uninstall(): Promise<void> {\n for (const file of [INJECT_HOOK_FILE, HANDOFF_SCRIPT_FILE, HANDOFF_COMMAND_FILE]) {\n if (existsSync(file)) {\n unlinkSync(file);\n console.log(` Removed ${file}`);\n }\n }\n\n this.removeFromSettings();\n console.log(` Updated ${SETTINGS_FILE}`);\n }\n\n private mergeSettings(): void {\n let settings: Record<string, unknown> = {};\n\n if (existsSync(SETTINGS_FILE)) {\n const raw = readFileSync(SETTINGS_FILE, \"utf-8\");\n writeFileSync(`${SETTINGS_FILE}.bak`, raw);\n settings = JSON.parse(raw);\n }\n\n const hooks = (settings.hooks ?? {}) as Record<string, unknown[]>;\n settings.hooks = hooks;\n\n const userPromptSubmit = (hooks.UserPromptSubmit ?? []) as Array<{ hooks?: Array<{ type?: string; command?: string }> }>;\n hooks.UserPromptSubmit = userPromptSubmit;\n\n const alreadyInstalled = userPromptSubmit.some((group) =>\n group.hooks?.some((h) => h.command?.includes(HOOK_MARKER)),\n );\n\n if (!alreadyInstalled) {\n userPromptSubmit.push({\n hooks: [\n {\n type: \"command\",\n command: INJECT_HOOK_FILE,\n },\n ],\n });\n }\n\n writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2) + \"\\n\");\n }\n\n private removeFromSettings(): void {\n if (!existsSync(SETTINGS_FILE)) return;\n\n const raw = readFileSync(SETTINGS_FILE, \"utf-8\");\n const settings = JSON.parse(raw);\n\n const hooks = settings.hooks as Record<string, unknown[]> | undefined;\n if (!hooks?.UserPromptSubmit) return;\n\n hooks.UserPromptSubmit = (hooks.UserPromptSubmit as Array<{ hooks?: Array<{ command?: string }> }>).filter(\n (group) => !group.hooks?.some((h) => h.command?.includes(\"openacp-\")),\n );\n\n if (hooks.UserPromptSubmit.length === 0) {\n delete hooks.UserPromptSubmit;\n }\n\n writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2) + \"\\n\");\n }\n}\n\nconst integrations: Record<string, AgentIntegration> = {\n claude: new ClaudeIntegration(),\n};\n\nexport function getIntegration(agentName: string): AgentIntegration | undefined {\n return integrations[agentName];\n}\n\nexport function listIntegrations(): string[] {\n return Object.keys(integrations);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
import {
|
|
3
3
|
ApiServer,
|
|
4
4
|
OpenACPCore,
|
|
5
|
-
TelegramAdapter
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
TelegramAdapter,
|
|
6
|
+
TopicManager
|
|
7
|
+
} from "./chunk-2M4O7AFI.js";
|
|
8
|
+
import "./chunk-IUPHAXGA.js";
|
|
9
|
+
import "./chunk-ARWC4S35.js";
|
|
10
|
+
import "./chunk-VA2M52CM.js";
|
|
8
11
|
import {
|
|
9
12
|
loadAdapterFactory
|
|
10
13
|
} from "./chunk-2SY7Y2VB.js";
|
|
11
14
|
import "./chunk-3QACY5E3.js";
|
|
12
|
-
import "./chunk-MRKYJ422.js";
|
|
13
|
-
import "./chunk-BLVZFCKN.js";
|
|
14
15
|
import {
|
|
15
16
|
ConfigManager
|
|
16
17
|
} from "./chunk-WF5XDN4D.js";
|
|
18
|
+
import "./chunk-MRKYJ422.js";
|
|
17
19
|
import {
|
|
18
20
|
cleanupOldSessionLogs,
|
|
19
21
|
initLogger,
|
|
@@ -45,7 +47,7 @@ async function startServer() {
|
|
|
45
47
|
const configManager = new ConfigManager();
|
|
46
48
|
const configExists = await configManager.exists();
|
|
47
49
|
if (!configExists) {
|
|
48
|
-
const { runSetup } = await import("./setup-
|
|
50
|
+
const { runSetup } = await import("./setup-CEDO6VWV.js");
|
|
49
51
|
const shouldStart = await runSetup(configManager);
|
|
50
52
|
if (!shouldStart) process.exit(0);
|
|
51
53
|
}
|
|
@@ -151,7 +153,18 @@ async function startServer() {
|
|
|
151
153
|
log.error({ err }, "Unhandled rejection");
|
|
152
154
|
});
|
|
153
155
|
await core.start();
|
|
154
|
-
|
|
156
|
+
const updatedConfig = core.configManager.get();
|
|
157
|
+
const telegramAdapter = core.adapters.get("telegram") ?? null;
|
|
158
|
+
const telegramCfg = updatedConfig.channels?.telegram;
|
|
159
|
+
const topicManager = new TopicManager(
|
|
160
|
+
core.sessionManager,
|
|
161
|
+
telegramAdapter,
|
|
162
|
+
{
|
|
163
|
+
notificationTopicId: telegramCfg?.notificationTopicId ?? null,
|
|
164
|
+
assistantTopicId: telegramCfg?.assistantTopicId ?? null
|
|
165
|
+
}
|
|
166
|
+
);
|
|
167
|
+
apiServer = new ApiServer(core, config.api, void 0, topicManager);
|
|
155
168
|
await apiServer.start();
|
|
156
169
|
const agents = Object.keys(config.agents);
|
|
157
170
|
log.info({ agents }, "OpenACP started");
|
|
@@ -168,4 +181,4 @@ export {
|
|
|
168
181
|
RESTART_EXIT_CODE,
|
|
169
182
|
startServer
|
|
170
183
|
};
|
|
171
|
-
//# sourceMappingURL=main-
|
|
184
|
+
//# sourceMappingURL=main-3POGUQPY.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 } from './core/log.js'\nimport { TelegramAdapter } 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.info({ configPath: configManager.getConfigPath() }, 'Config loaded')\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 any))\n log.info({ adapter: 'telegram' }, '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 const telegramCfg = updatedConfig.channels?.telegram as any\n const topicManager = new TopicManager(\n core.sessionManager,\n telegramAdapter,\n {\n notificationTopicId: telegramCfg?.notificationTopicId ?? null,\n assistantTopicId: telegramCfg?.assistantTopicId ?? null,\n },\n )\n\n apiServer = new ApiServer(core, config.api, undefined, topicManager)\n await apiServer.start()\n\n // 6. Log ready\n const agents = Object.keys(config.agents)\n log.info({ agents }, 'OpenACP started')\n log.info('Press Ctrl+C to stop')\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":[]}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
validateBotAdmin,
|
|
10
10
|
validateBotToken,
|
|
11
11
|
validateChatId
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ARWC4S35.js";
|
|
13
13
|
import "./chunk-WF5XDN4D.js";
|
|
14
14
|
import "./chunk-LYKCQTH5.js";
|
|
15
15
|
export {
|
|
@@ -24,4 +24,4 @@ export {
|
|
|
24
24
|
validateBotToken,
|
|
25
25
|
validateChatId
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=setup-
|
|
27
|
+
//# sourceMappingURL=setup-CEDO6VWV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|