@openacp/cli 0.4.11 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +41 -3
  2. package/dist/agent-catalog-LAAVBVLY.js +10 -0
  3. package/dist/agent-dependencies-FCLRGMZM.js +23 -0
  4. package/dist/agent-registry-KZANAFXQ.js +8 -0
  5. package/dist/agent-store-ZBXGOFPH.js +8 -0
  6. package/dist/chunk-5HGXUCMX.js +83 -0
  7. package/dist/chunk-5HGXUCMX.js.map +1 -0
  8. package/dist/chunk-5MH66WUY.js +424 -0
  9. package/dist/chunk-5MH66WUY.js.map +1 -0
  10. package/dist/{chunk-FKOARMAE.js → chunk-776VAU3T.js} +3 -3
  11. package/dist/chunk-GUHCS6X7.js +282 -0
  12. package/dist/chunk-GUHCS6X7.js.map +1 -0
  13. package/dist/{chunk-3DIPXFZJ.js → chunk-IRGYTNLP.js} +2 -2
  14. package/dist/chunk-IURZ4QHG.js +91 -0
  15. package/dist/chunk-IURZ4QHG.js.map +1 -0
  16. package/dist/{chunk-WYZFGHHI.js → chunk-JRF4G4X7.js} +60 -24
  17. package/dist/chunk-JRF4G4X7.js.map +1 -0
  18. package/dist/chunk-NAMYZIS5.js +1 -0
  19. package/dist/{chunk-ZW444AQY.js → chunk-NDR5JCS7.js} +2 -2
  20. package/dist/{chunk-66RVSUAR.js → chunk-PHC67OP4.js} +567 -103
  21. package/dist/chunk-PHC67OP4.js.map +1 -0
  22. package/dist/{chunk-W7QQA6CW.js → chunk-QODDJ4PH.js} +83 -36
  23. package/dist/chunk-QODDJ4PH.js.map +1 -0
  24. package/dist/{chunk-YRJEZD7R.js → chunk-VBEWSWVL.js} +2 -2
  25. package/dist/{chunk-C33LTDZV.js → chunk-Z46LGZ7R.js} +21 -8
  26. package/dist/chunk-Z46LGZ7R.js.map +1 -0
  27. package/dist/cli.js +440 -64
  28. package/dist/cli.js.map +1 -1
  29. package/dist/{config-XURP6B3S.js → config-PCPIBPUA.js} +2 -2
  30. package/dist/config-editor-RGV6VKPZ.js +12 -0
  31. package/dist/{config-registry-OGX4YM2U.js → config-registry-SNKA2EH2.js} +2 -2
  32. package/dist/{daemon-GWJM2S4A.js → daemon-JZLFRUW6.js} +3 -3
  33. package/dist/daemon-JZLFRUW6.js.map +1 -0
  34. package/dist/data/registry-snapshot.json +876 -0
  35. package/dist/doctor-N2HKKUUQ.js +9 -0
  36. package/dist/doctor-N2HKKUUQ.js.map +1 -0
  37. package/dist/index.d.ts +138 -17
  38. package/dist/index.js +24 -15
  39. package/dist/integrate-X7LI6MUO.js +257 -0
  40. package/dist/integrate-X7LI6MUO.js.map +1 -0
  41. package/dist/{main-2QKD2EI2.js → main-DSQBCJHR.js} +18 -15
  42. package/dist/{main-2QKD2EI2.js.map → main-DSQBCJHR.js.map} +1 -1
  43. package/dist/{menu-CARRTW2F.js → menu-J5YVH665.js} +2 -4
  44. package/dist/menu-J5YVH665.js.map +1 -0
  45. package/dist/{setup-TTOL7XAN.js → setup-3A3XDGCM.js} +4 -3
  46. package/dist/setup-3A3XDGCM.js.map +1 -0
  47. package/dist/suggest-RST5VOHB.js +36 -0
  48. package/dist/suggest-RST5VOHB.js.map +1 -0
  49. package/package.json +11 -2
  50. package/dist/agent-registry-7HC6D4CH.js +0 -7
  51. package/dist/chunk-66RVSUAR.js.map +0 -1
  52. package/dist/chunk-BGKQHQB4.js +0 -276
  53. package/dist/chunk-BGKQHQB4.js.map +0 -1
  54. package/dist/chunk-C33LTDZV.js.map +0 -1
  55. package/dist/chunk-VA2M52CM.js +0 -15
  56. package/dist/chunk-VA2M52CM.js.map +0 -1
  57. package/dist/chunk-W7QQA6CW.js.map +0 -1
  58. package/dist/chunk-WYZFGHHI.js.map +0 -1
  59. package/dist/config-editor-AALY3URF.js +0 -11
  60. package/dist/doctor-X477CVZN.js +0 -9
  61. package/dist/integrate-WUPLRJD3.js +0 -145
  62. package/dist/integrate-WUPLRJD3.js.map +0 -1
  63. /package/dist/{agent-registry-7HC6D4CH.js.map → agent-catalog-LAAVBVLY.js.map} +0 -0
  64. /package/dist/{config-XURP6B3S.js.map → agent-dependencies-FCLRGMZM.js.map} +0 -0
  65. /package/dist/{config-editor-AALY3URF.js.map → agent-registry-KZANAFXQ.js.map} +0 -0
  66. /package/dist/{config-registry-OGX4YM2U.js.map → agent-store-ZBXGOFPH.js.map} +0 -0
  67. /package/dist/{chunk-FKOARMAE.js.map → chunk-776VAU3T.js.map} +0 -0
  68. /package/dist/{chunk-3DIPXFZJ.js.map → chunk-IRGYTNLP.js.map} +0 -0
  69. /package/dist/{daemon-GWJM2S4A.js.map → chunk-NAMYZIS5.js.map} +0 -0
  70. /package/dist/{chunk-ZW444AQY.js.map → chunk-NDR5JCS7.js.map} +0 -0
  71. /package/dist/{chunk-YRJEZD7R.js.map → chunk-VBEWSWVL.js.map} +0 -0
  72. /package/dist/{doctor-X477CVZN.js.map → config-PCPIBPUA.js.map} +0 -0
  73. /package/dist/{menu-CARRTW2F.js.map → config-editor-RGV6VKPZ.js.map} +0 -0
  74. /package/dist/{setup-TTOL7XAN.js.map → config-registry-SNKA2EH2.js.map} +0 -0
@@ -1,145 +0,0 @@
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: Transfer 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
- function mergeClaudeSettings() {
44
- let settings = {};
45
- if (existsSync(SETTINGS_FILE)) {
46
- const raw = readFileSync(SETTINGS_FILE, "utf-8");
47
- writeFileSync(`${SETTINGS_FILE}.bak`, raw);
48
- settings = JSON.parse(raw);
49
- }
50
- const hooks = settings.hooks ?? {};
51
- settings.hooks = hooks;
52
- const userPromptSubmit = hooks.UserPromptSubmit ?? [];
53
- hooks.UserPromptSubmit = userPromptSubmit;
54
- const alreadyInstalled = userPromptSubmit.some(
55
- (group) => group.hooks?.some((h) => h.command?.includes(HOOK_MARKER))
56
- );
57
- if (!alreadyInstalled) {
58
- userPromptSubmit.push({
59
- hooks: [
60
- {
61
- type: "command",
62
- command: INJECT_HOOK_FILE
63
- }
64
- ]
65
- });
66
- }
67
- writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2) + "\n");
68
- }
69
- function removeClaudeSettings() {
70
- if (!existsSync(SETTINGS_FILE)) return;
71
- const raw = readFileSync(SETTINGS_FILE, "utf-8");
72
- const settings = JSON.parse(raw);
73
- const hooks = settings.hooks;
74
- if (!hooks?.UserPromptSubmit) return;
75
- hooks.UserPromptSubmit = hooks.UserPromptSubmit.filter(
76
- (group) => !group.hooks?.some((h) => h.command?.includes("openacp-"))
77
- );
78
- if (hooks.UserPromptSubmit.length === 0) {
79
- delete hooks.UserPromptSubmit;
80
- }
81
- writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2) + "\n");
82
- }
83
- var claudeHandoffItem = {
84
- id: "handoff",
85
- name: "Handoff",
86
- description: "Transfer sessions between terminal and Telegram",
87
- isInstalled() {
88
- return existsSync(INJECT_HOOK_FILE) && existsSync(HANDOFF_SCRIPT_FILE) && existsSync(HANDOFF_COMMAND_FILE);
89
- },
90
- async install() {
91
- const logs = [];
92
- try {
93
- mkdirSync(HOOKS_DIR, { recursive: true });
94
- mkdirSync(COMMANDS_DIR, { recursive: true });
95
- writeFileSync(INJECT_HOOK_FILE, INJECT_HOOK_CONTENT);
96
- chmodSync(INJECT_HOOK_FILE, 493);
97
- logs.push(`Created ${INJECT_HOOK_FILE}`);
98
- writeFileSync(HANDOFF_SCRIPT_FILE, HANDOFF_SCRIPT_CONTENT);
99
- chmodSync(HANDOFF_SCRIPT_FILE, 493);
100
- logs.push(`Created ${HANDOFF_SCRIPT_FILE}`);
101
- writeFileSync(HANDOFF_COMMAND_FILE, HANDOFF_COMMAND_CONTENT);
102
- logs.push(`Created ${HANDOFF_COMMAND_FILE}`);
103
- mergeClaudeSettings();
104
- logs.push(`Updated ${SETTINGS_FILE}`);
105
- return { success: true, logs };
106
- } catch (err) {
107
- logs.push(`Error: ${err instanceof Error ? err.message : String(err)}`);
108
- return { success: false, logs };
109
- }
110
- },
111
- async uninstall() {
112
- const logs = [];
113
- try {
114
- for (const file of [INJECT_HOOK_FILE, HANDOFF_SCRIPT_FILE, HANDOFF_COMMAND_FILE]) {
115
- if (existsSync(file)) {
116
- unlinkSync(file);
117
- logs.push(`Removed ${file}`);
118
- }
119
- }
120
- removeClaudeSettings();
121
- logs.push(`Updated ${SETTINGS_FILE}`);
122
- return { success: true, logs };
123
- } catch (err) {
124
- logs.push(`Error: ${err instanceof Error ? err.message : String(err)}`);
125
- return { success: false, logs };
126
- }
127
- }
128
- };
129
- var claudeIntegration = {
130
- items: [claudeHandoffItem]
131
- };
132
- var integrations = {
133
- claude: claudeIntegration
134
- };
135
- function getIntegration(agentName) {
136
- return integrations[agentName];
137
- }
138
- function listIntegrations() {
139
- return Object.keys(integrations);
140
- }
141
- export {
142
- getIntegration,
143
- listIntegrations
144
- };
145
- //# sourceMappingURL=integrate-WUPLRJD3.js.map
@@ -1 +0,0 @@
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 IntegrationResult {\n success: boolean;\n logs: string[];\n}\n\nexport interface IntegrationItem {\n id: string;\n name: string;\n description: string;\n isInstalled(): boolean;\n install(): Promise<IntegrationResult>;\n uninstall(): Promise<IntegrationResult>;\n}\n\nexport interface AgentIntegration {\n items: IntegrationItem[];\n}\n\n// --- Claude integration ---\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: Transfer 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\nfunction mergeClaudeSettings(): 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\nfunction removeClaudeSettings(): 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\nconst claudeHandoffItem: IntegrationItem = {\n id: \"handoff\",\n name: \"Handoff\",\n description: \"Transfer sessions between terminal and Telegram\",\n\n isInstalled(): boolean {\n return (\n existsSync(INJECT_HOOK_FILE) &&\n existsSync(HANDOFF_SCRIPT_FILE) &&\n existsSync(HANDOFF_COMMAND_FILE)\n );\n },\n\n async install(): Promise<IntegrationResult> {\n const logs: string[] = [];\n try {\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 logs.push(`Created ${INJECT_HOOK_FILE}`);\n\n writeFileSync(HANDOFF_SCRIPT_FILE, HANDOFF_SCRIPT_CONTENT);\n chmodSync(HANDOFF_SCRIPT_FILE, 0o755);\n logs.push(`Created ${HANDOFF_SCRIPT_FILE}`);\n\n writeFileSync(HANDOFF_COMMAND_FILE, HANDOFF_COMMAND_CONTENT);\n logs.push(`Created ${HANDOFF_COMMAND_FILE}`);\n\n mergeClaudeSettings();\n logs.push(`Updated ${SETTINGS_FILE}`);\n\n return { success: true, logs };\n } catch (err) {\n logs.push(`Error: ${err instanceof Error ? err.message : String(err)}`);\n return { success: false, logs };\n }\n },\n\n async uninstall(): Promise<IntegrationResult> {\n const logs: string[] = [];\n try {\n for (const file of [INJECT_HOOK_FILE, HANDOFF_SCRIPT_FILE, HANDOFF_COMMAND_FILE]) {\n if (existsSync(file)) {\n unlinkSync(file);\n logs.push(`Removed ${file}`);\n }\n }\n\n removeClaudeSettings();\n logs.push(`Updated ${SETTINGS_FILE}`);\n\n return { success: true, logs };\n } catch (err) {\n logs.push(`Error: ${err instanceof Error ? err.message : String(err)}`);\n return { success: false, logs };\n }\n },\n};\n\nconst claudeIntegration: AgentIntegration = {\n items: [claudeHandoffItem],\n};\n\n// --- Registry ---\n\nconst integrations: Record<string, AgentIntegration> = {\n claude: 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":[]}