@openacp/cli 2026.330.3 → 2026.331.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.
- package/README.md +19 -1
- package/dist/cli.d.ts +11 -0
- package/dist/cli.js +25134 -278
- package/dist/cli.js.map +1 -1
- package/dist/data/registry-snapshot.json +1 -1
- package/dist/index.d.ts +259 -30
- package/dist/index.js +17632 -404
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/adapter-AWSI4GML.js +0 -13
- package/dist/adapter-AWSI4GML.js.map +0 -1
- package/dist/agent-catalog-SZQQERV7.js +0 -10
- package/dist/agent-catalog-SZQQERV7.js.map +0 -1
- package/dist/agent-dependencies-ED2ZTUHG.js +0 -23
- package/dist/agent-dependencies-ED2ZTUHG.js.map +0 -1
- package/dist/agent-registry-YOGP656W.js +0 -8
- package/dist/agent-registry-YOGP656W.js.map +0 -1
- package/dist/agent-store-5UHZH2XI.js +0 -8
- package/dist/agent-store-5UHZH2XI.js.map +0 -1
- package/dist/api-client-XTLRRFPX.js +0 -13
- package/dist/api-client-XTLRRFPX.js.map +0 -1
- package/dist/api-server-5VNYFWJE.js +0 -7
- package/dist/api-server-5VNYFWJE.js.map +0 -1
- package/dist/api-server-JLBDKCU4.js +0 -10
- package/dist/api-server-JLBDKCU4.js.map +0 -1
- package/dist/autostart-CUPZMKKC.js +0 -22
- package/dist/autostart-CUPZMKKC.js.map +0 -1
- package/dist/chunk-237WYH6H.js +0 -235
- package/dist/chunk-237WYH6H.js.map +0 -1
- package/dist/chunk-2HEFALTZ.js +0 -44
- package/dist/chunk-2HEFALTZ.js.map +0 -1
- package/dist/chunk-2KT6TROD.js +0 -129
- package/dist/chunk-2KT6TROD.js.map +0 -1
- package/dist/chunk-2R5XM3ES.js +0 -154
- package/dist/chunk-2R5XM3ES.js.map +0 -1
- package/dist/chunk-3EWTPOF7.js +0 -51
- package/dist/chunk-3EWTPOF7.js.map +0 -1
- package/dist/chunk-3NAFXVQM.js +0 -67
- package/dist/chunk-3NAFXVQM.js.map +0 -1
- package/dist/chunk-4WXALZA3.js +0 -45
- package/dist/chunk-4WXALZA3.js.map +0 -1
- package/dist/chunk-566W6INH.js +0 -83
- package/dist/chunk-566W6INH.js.map +0 -1
- package/dist/chunk-5HKQCYOI.js +0 -145
- package/dist/chunk-5HKQCYOI.js.map +0 -1
- package/dist/chunk-5OCGO27U.js +0 -125
- package/dist/chunk-5OCGO27U.js.map +0 -1
- package/dist/chunk-5WGVYX3C.js +0 -55
- package/dist/chunk-5WGVYX3C.js.map +0 -1
- package/dist/chunk-7ZCQF6QM.js +0 -27
- package/dist/chunk-7ZCQF6QM.js.map +0 -1
- package/dist/chunk-AFKX424Q.js +0 -92
- package/dist/chunk-AFKX424Q.js.map +0 -1
- package/dist/chunk-APS6UEFU.js +0 -259
- package/dist/chunk-APS6UEFU.js.map +0 -1
- package/dist/chunk-BTJHGSLM.js +0 -1116
- package/dist/chunk-BTJHGSLM.js.map +0 -1
- package/dist/chunk-CDAUYTVP.js +0 -41
- package/dist/chunk-CDAUYTVP.js.map +0 -1
- package/dist/chunk-FCTC7KDT.js +0 -101
- package/dist/chunk-FCTC7KDT.js.map +0 -1
- package/dist/chunk-FNRSWA2K.js +0 -1
- package/dist/chunk-FNRSWA2K.js.map +0 -1
- package/dist/chunk-GEOXPGCO.js +0 -650
- package/dist/chunk-GEOXPGCO.js.map +0 -1
- package/dist/chunk-IZ5UEZF7.js +0 -138
- package/dist/chunk-IZ5UEZF7.js.map +0 -1
- package/dist/chunk-KDU3ZEWT.js +0 -97
- package/dist/chunk-KDU3ZEWT.js.map +0 -1
- package/dist/chunk-LGFWH3AE.js +0 -26
- package/dist/chunk-LGFWH3AE.js.map +0 -1
- package/dist/chunk-MITTQMGZ.js +0 -543
- package/dist/chunk-MITTQMGZ.js.map +0 -1
- package/dist/chunk-MLF4W5R6.js +0 -101
- package/dist/chunk-MLF4W5R6.js.map +0 -1
- package/dist/chunk-MPGEHTGE.js +0 -679
- package/dist/chunk-MPGEHTGE.js.map +0 -1
- package/dist/chunk-OYSAN7UX.js +0 -15
- package/dist/chunk-OYSAN7UX.js.map +0 -1
- package/dist/chunk-PA6MNBG4.js +0 -190
- package/dist/chunk-PA6MNBG4.js.map +0 -1
- package/dist/chunk-QWVHCTCA.js +0 -172
- package/dist/chunk-QWVHCTCA.js.map +0 -1
- package/dist/chunk-R6KZYF7D.js +0 -231
- package/dist/chunk-R6KZYF7D.js.map +0 -1
- package/dist/chunk-S64CB6J3.js +0 -98
- package/dist/chunk-S64CB6J3.js.map +0 -1
- package/dist/chunk-TMVTSWVH.js +0 -228
- package/dist/chunk-TMVTSWVH.js.map +0 -1
- package/dist/chunk-UCIZM5SW.js +0 -3917
- package/dist/chunk-UCIZM5SW.js.map +0 -1
- package/dist/chunk-UWH7KIAA.js +0 -701
- package/dist/chunk-UWH7KIAA.js.map +0 -1
- package/dist/chunk-V2YZWYXT.js +0 -484
- package/dist/chunk-V2YZWYXT.js.map +0 -1
- package/dist/chunk-W26AUH5B.js +0 -61
- package/dist/chunk-W26AUH5B.js.map +0 -1
- package/dist/chunk-W4LK6WJP.js +0 -446
- package/dist/chunk-W4LK6WJP.js.map +0 -1
- package/dist/chunk-WQCJTU2C.js +0 -84
- package/dist/chunk-WQCJTU2C.js.map +0 -1
- package/dist/chunk-XBZIHNKV.js +0 -6410
- package/dist/chunk-XBZIHNKV.js.map +0 -1
- package/dist/chunk-ZSLHHQPQ.js +0 -282
- package/dist/chunk-ZSLHHQPQ.js.map +0 -1
- package/dist/config-KN6NKKPF.js +0 -20
- package/dist/config-KN6NKKPF.js.map +0 -1
- package/dist/config-editor-76RVZS4B.js +0 -10
- package/dist/config-editor-76RVZS4B.js.map +0 -1
- package/dist/config-registry-ZXAIJNYB.js +0 -17
- package/dist/config-registry-ZXAIJNYB.js.map +0 -1
- package/dist/context-NXXW62NJ.js +0 -9
- package/dist/context-NXXW62NJ.js.map +0 -1
- package/dist/core-plugins-BPZY7SEB.js +0 -22
- package/dist/core-plugins-BPZY7SEB.js.map +0 -1
- package/dist/daemon-XFEMMJSZ.js +0 -29
- package/dist/daemon-XFEMMJSZ.js.map +0 -1
- package/dist/dev-loader-7P3HZCIA.js +0 -37
- package/dist/dev-loader-7P3HZCIA.js.map +0 -1
- package/dist/doctor-AV6AUO22.js +0 -9
- package/dist/doctor-AV6AUO22.js.map +0 -1
- package/dist/file-service-HHB3JQIO.js +0 -8
- package/dist/file-service-HHB3JQIO.js.map +0 -1
- package/dist/install-cloudflared-JRJ4BSOM.js +0 -32
- package/dist/install-cloudflared-JRJ4BSOM.js.map +0 -1
- package/dist/install-context-EHYV5WRY.js +0 -77
- package/dist/install-context-EHYV5WRY.js.map +0 -1
- package/dist/install-jq-ISTGT263.js +0 -31
- package/dist/install-jq-ISTGT263.js.map +0 -1
- package/dist/integrate-JIEZYDOR.js +0 -371
- package/dist/integrate-JIEZYDOR.js.map +0 -1
- package/dist/log-YZ243M5G.js +0 -25
- package/dist/log-YZ243M5G.js.map +0 -1
- package/dist/main-VEJCG5PY.js +0 -654
- package/dist/main-VEJCG5PY.js.map +0 -1
- package/dist/menu-ALFN37IR.js +0 -15
- package/dist/menu-ALFN37IR.js.map +0 -1
- package/dist/notifications-MO23S7S3.js +0 -8
- package/dist/notifications-MO23S7S3.js.map +0 -1
- package/dist/plugin-create-EHL76ZZG.js +0 -966
- package/dist/plugin-create-EHL76ZZG.js.map +0 -1
- package/dist/plugin-installer-VSTYZSXC.js +0 -9
- package/dist/plugin-installer-VSTYZSXC.js.map +0 -1
- package/dist/plugin-registry-6J3YSFHF.js +0 -7
- package/dist/plugin-registry-6J3YSFHF.js.map +0 -1
- package/dist/plugin-search-MGKAL5JM.js +0 -39
- package/dist/plugin-search-MGKAL5JM.js.map +0 -1
- package/dist/post-upgrade-Y26S2ZQ7.js +0 -79
- package/dist/post-upgrade-Y26S2ZQ7.js.map +0 -1
- package/dist/read-text-file-DJBTITIB.js +0 -7
- package/dist/read-text-file-DJBTITIB.js.map +0 -1
- package/dist/registry-client-GTBWLXYU.js +0 -7
- package/dist/registry-client-GTBWLXYU.js.map +0 -1
- package/dist/security-2BA265LN.js +0 -8
- package/dist/security-2BA265LN.js.map +0 -1
- package/dist/settings-manager-B4UN2LAC.js +0 -7
- package/dist/settings-manager-B4UN2LAC.js.map +0 -1
- package/dist/setup-DISPNDEK.js +0 -802
- package/dist/setup-DISPNDEK.js.map +0 -1
- package/dist/speech-SG62JYIF.js +0 -9
- package/dist/speech-SG62JYIF.js.map +0 -1
- package/dist/suggest-RST5VOHB.js +0 -36
- package/dist/suggest-RST5VOHB.js.map +0 -1
- package/dist/telegram-L3YM6SQJ.js +0 -7
- package/dist/telegram-L3YM6SQJ.js.map +0 -1
- package/dist/tunnel-HWJ27WDH.js +0 -7
- package/dist/tunnel-HWJ27WDH.js.map +0 -1
- package/dist/tunnel-service-ZMO4THKE.js +0 -1261
- package/dist/tunnel-service-ZMO4THKE.js.map +0 -1
- package/dist/validators-GITLOFXC.js +0 -11
- package/dist/validators-GITLOFXC.js.map +0 -1
- package/dist/version-AXXV6IV2.js +0 -15
- package/dist/version-AXXV6IV2.js.map +0 -1
package/dist/chunk-2R5XM3ES.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createChildLogger
|
|
3
|
-
} from "./chunk-R6KZYF7D.js";
|
|
4
|
-
|
|
5
|
-
// src/cli/autostart.ts
|
|
6
|
-
import { execFileSync } from "child_process";
|
|
7
|
-
import * as fs from "fs";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
import * as os from "os";
|
|
10
|
-
var log = createChildLogger({ module: "autostart" });
|
|
11
|
-
var LAUNCHD_LABEL = "com.openacp.daemon";
|
|
12
|
-
var LAUNCHD_PLIST_PATH = path.join(os.homedir(), "Library", "LaunchAgents", `${LAUNCHD_LABEL}.plist`);
|
|
13
|
-
var SYSTEMD_SERVICE_PATH = path.join(os.homedir(), ".config", "systemd", "user", "openacp.service");
|
|
14
|
-
function isAutoStartSupported() {
|
|
15
|
-
return process.platform === "darwin" || process.platform === "linux";
|
|
16
|
-
}
|
|
17
|
-
function escapeXml(str) {
|
|
18
|
-
return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
19
|
-
}
|
|
20
|
-
function escapeSystemdValue(str) {
|
|
21
|
-
const escaped = str.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\$/g, "$$$$").replace(/%/g, "%%");
|
|
22
|
-
return `"${escaped}"`;
|
|
23
|
-
}
|
|
24
|
-
function generateLaunchdPlist(nodePath, cliPath, logDir) {
|
|
25
|
-
const logFile = path.join(logDir, "openacp.log");
|
|
26
|
-
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
27
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
28
|
-
<plist version="1.0">
|
|
29
|
-
<dict>
|
|
30
|
-
<key>Label</key>
|
|
31
|
-
<string>${LAUNCHD_LABEL}</string>
|
|
32
|
-
<key>ProgramArguments</key>
|
|
33
|
-
<array>
|
|
34
|
-
<string>${escapeXml(nodePath)}</string>
|
|
35
|
-
<string>${escapeXml(cliPath)}</string>
|
|
36
|
-
<string>--daemon-child</string>
|
|
37
|
-
</array>
|
|
38
|
-
<key>RunAtLoad</key>
|
|
39
|
-
<true/>
|
|
40
|
-
<key>KeepAlive</key>
|
|
41
|
-
<dict>
|
|
42
|
-
<key>SuccessfulExit</key>
|
|
43
|
-
<false/>
|
|
44
|
-
</dict>
|
|
45
|
-
<key>StandardOutPath</key>
|
|
46
|
-
<string>${escapeXml(logFile)}</string>
|
|
47
|
-
<key>StandardErrorPath</key>
|
|
48
|
-
<string>${escapeXml(logFile)}</string>
|
|
49
|
-
</dict>
|
|
50
|
-
</plist>
|
|
51
|
-
`;
|
|
52
|
-
}
|
|
53
|
-
function generateSystemdUnit(nodePath, cliPath) {
|
|
54
|
-
return `[Unit]
|
|
55
|
-
Description=OpenACP Daemon
|
|
56
|
-
|
|
57
|
-
[Service]
|
|
58
|
-
ExecStart=${escapeSystemdValue(nodePath)} ${escapeSystemdValue(cliPath)} --daemon-child
|
|
59
|
-
Restart=on-failure
|
|
60
|
-
|
|
61
|
-
[Install]
|
|
62
|
-
WantedBy=default.target
|
|
63
|
-
`;
|
|
64
|
-
}
|
|
65
|
-
function installAutoStart(logDir) {
|
|
66
|
-
if (!isAutoStartSupported()) {
|
|
67
|
-
return { success: false, error: "Auto-start not supported on this platform" };
|
|
68
|
-
}
|
|
69
|
-
const nodePath = process.execPath;
|
|
70
|
-
const cliPath = path.resolve(process.argv[1]);
|
|
71
|
-
const resolvedLogDir = logDir.startsWith("~") ? path.join(os.homedir(), logDir.slice(1)) : logDir;
|
|
72
|
-
try {
|
|
73
|
-
if (process.platform === "darwin") {
|
|
74
|
-
const plist = generateLaunchdPlist(nodePath, cliPath, resolvedLogDir);
|
|
75
|
-
const dir = path.dirname(LAUNCHD_PLIST_PATH);
|
|
76
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
77
|
-
fs.writeFileSync(LAUNCHD_PLIST_PATH, plist);
|
|
78
|
-
execFileSync("launchctl", ["load", LAUNCHD_PLIST_PATH], { stdio: "pipe" });
|
|
79
|
-
log.info("LaunchAgent installed");
|
|
80
|
-
return { success: true };
|
|
81
|
-
}
|
|
82
|
-
if (process.platform === "linux") {
|
|
83
|
-
const unit = generateSystemdUnit(nodePath, cliPath);
|
|
84
|
-
const dir = path.dirname(SYSTEMD_SERVICE_PATH);
|
|
85
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
86
|
-
fs.writeFileSync(SYSTEMD_SERVICE_PATH, unit);
|
|
87
|
-
execFileSync("systemctl", ["--user", "daemon-reload"], { stdio: "pipe" });
|
|
88
|
-
execFileSync("systemctl", ["--user", "enable", "openacp"], { stdio: "pipe" });
|
|
89
|
-
log.info("systemd user service installed");
|
|
90
|
-
return { success: true };
|
|
91
|
-
}
|
|
92
|
-
return { success: false, error: "Unsupported platform" };
|
|
93
|
-
} catch (e) {
|
|
94
|
-
const msg = e.message;
|
|
95
|
-
log.error({ err: msg }, "Failed to install auto-start");
|
|
96
|
-
return { success: false, error: msg };
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
function uninstallAutoStart() {
|
|
100
|
-
if (!isAutoStartSupported()) {
|
|
101
|
-
return { success: false, error: "Auto-start not supported on this platform" };
|
|
102
|
-
}
|
|
103
|
-
try {
|
|
104
|
-
if (process.platform === "darwin") {
|
|
105
|
-
if (fs.existsSync(LAUNCHD_PLIST_PATH)) {
|
|
106
|
-
try {
|
|
107
|
-
execFileSync("launchctl", ["unload", LAUNCHD_PLIST_PATH], { stdio: "pipe" });
|
|
108
|
-
} catch {
|
|
109
|
-
}
|
|
110
|
-
fs.unlinkSync(LAUNCHD_PLIST_PATH);
|
|
111
|
-
log.info("LaunchAgent removed");
|
|
112
|
-
}
|
|
113
|
-
return { success: true };
|
|
114
|
-
}
|
|
115
|
-
if (process.platform === "linux") {
|
|
116
|
-
if (fs.existsSync(SYSTEMD_SERVICE_PATH)) {
|
|
117
|
-
try {
|
|
118
|
-
execFileSync("systemctl", ["--user", "disable", "openacp"], { stdio: "pipe" });
|
|
119
|
-
} catch {
|
|
120
|
-
}
|
|
121
|
-
fs.unlinkSync(SYSTEMD_SERVICE_PATH);
|
|
122
|
-
execFileSync("systemctl", ["--user", "daemon-reload"], { stdio: "pipe" });
|
|
123
|
-
log.info("systemd user service removed");
|
|
124
|
-
}
|
|
125
|
-
return { success: true };
|
|
126
|
-
}
|
|
127
|
-
return { success: false, error: "Unsupported platform" };
|
|
128
|
-
} catch (e) {
|
|
129
|
-
const msg = e.message;
|
|
130
|
-
log.error({ err: msg }, "Failed to uninstall auto-start");
|
|
131
|
-
return { success: false, error: msg };
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function isAutoStartInstalled() {
|
|
135
|
-
if (process.platform === "darwin") {
|
|
136
|
-
return fs.existsSync(LAUNCHD_PLIST_PATH);
|
|
137
|
-
}
|
|
138
|
-
if (process.platform === "linux") {
|
|
139
|
-
return fs.existsSync(SYSTEMD_SERVICE_PATH);
|
|
140
|
-
}
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export {
|
|
145
|
-
isAutoStartSupported,
|
|
146
|
-
escapeXml,
|
|
147
|
-
escapeSystemdValue,
|
|
148
|
-
generateLaunchdPlist,
|
|
149
|
-
generateSystemdUnit,
|
|
150
|
-
installAutoStart,
|
|
151
|
-
uninstallAutoStart,
|
|
152
|
-
isAutoStartInstalled
|
|
153
|
-
};
|
|
154
|
-
//# sourceMappingURL=chunk-2R5XM3ES.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/autostart.ts"],"sourcesContent":["import { execFileSync } from 'node:child_process'\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport * as os from 'node:os'\nimport { createChildLogger } from '../core/utils/log.js'\n\nconst log = createChildLogger({ module: 'autostart' })\n\nconst LAUNCHD_LABEL = 'com.openacp.daemon'\nconst LAUNCHD_PLIST_PATH = path.join(os.homedir(), 'Library', 'LaunchAgents', `${LAUNCHD_LABEL}.plist`)\nconst SYSTEMD_SERVICE_PATH = path.join(os.homedir(), '.config', 'systemd', 'user', 'openacp.service')\n\nexport function isAutoStartSupported(): boolean {\n return process.platform === 'darwin' || process.platform === 'linux'\n}\n\nexport function escapeXml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n\nexport function escapeSystemdValue(str: string): string {\n const escaped = str\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\$/g, '$$$$')\n .replace(/%/g, '%%')\n return `\"${escaped}\"`\n}\n\nexport function generateLaunchdPlist(nodePath: string, cliPath: string, logDir: string): string {\n const logFile = path.join(logDir, 'openacp.log')\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${LAUNCHD_LABEL}</string>\n <key>ProgramArguments</key>\n <array>\n <string>${escapeXml(nodePath)}</string>\n <string>${escapeXml(cliPath)}</string>\n <string>--daemon-child</string>\n </array>\n <key>RunAtLoad</key>\n <true/>\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key>\n <false/>\n </dict>\n <key>StandardOutPath</key>\n <string>${escapeXml(logFile)}</string>\n <key>StandardErrorPath</key>\n <string>${escapeXml(logFile)}</string>\n</dict>\n</plist>\n`\n}\n\nexport function generateSystemdUnit(nodePath: string, cliPath: string): string {\n return `[Unit]\nDescription=OpenACP Daemon\n\n[Service]\nExecStart=${escapeSystemdValue(nodePath)} ${escapeSystemdValue(cliPath)} --daemon-child\nRestart=on-failure\n\n[Install]\nWantedBy=default.target\n`\n}\n\nexport function installAutoStart(logDir: string): { success: boolean; error?: string } {\n if (!isAutoStartSupported()) {\n return { success: false, error: 'Auto-start not supported on this platform' }\n }\n\n const nodePath = process.execPath\n const cliPath = path.resolve(process.argv[1])\n const resolvedLogDir = logDir.startsWith('~')\n ? path.join(os.homedir(), logDir.slice(1))\n : logDir\n\n try {\n if (process.platform === 'darwin') {\n const plist = generateLaunchdPlist(nodePath, cliPath, resolvedLogDir)\n const dir = path.dirname(LAUNCHD_PLIST_PATH)\n fs.mkdirSync(dir, { recursive: true })\n fs.writeFileSync(LAUNCHD_PLIST_PATH, plist)\n execFileSync('launchctl', ['load', LAUNCHD_PLIST_PATH], { stdio: 'pipe' })\n log.info('LaunchAgent installed')\n return { success: true }\n }\n\n if (process.platform === 'linux') {\n const unit = generateSystemdUnit(nodePath, cliPath)\n const dir = path.dirname(SYSTEMD_SERVICE_PATH)\n fs.mkdirSync(dir, { recursive: true })\n fs.writeFileSync(SYSTEMD_SERVICE_PATH, unit)\n execFileSync('systemctl', ['--user', 'daemon-reload'], { stdio: 'pipe' })\n execFileSync('systemctl', ['--user', 'enable', 'openacp'], { stdio: 'pipe' })\n log.info('systemd user service installed')\n return { success: true }\n }\n\n return { success: false, error: 'Unsupported platform' }\n } catch (e) {\n const msg = (e as Error).message\n log.error({ err: msg }, 'Failed to install auto-start')\n return { success: false, error: msg }\n }\n}\n\nexport function uninstallAutoStart(): { success: boolean; error?: string } {\n if (!isAutoStartSupported()) {\n return { success: false, error: 'Auto-start not supported on this platform' }\n }\n\n try {\n if (process.platform === 'darwin') {\n if (fs.existsSync(LAUNCHD_PLIST_PATH)) {\n try {\n execFileSync('launchctl', ['unload', LAUNCHD_PLIST_PATH], { stdio: 'pipe' })\n } catch {\n // may already be unloaded\n }\n fs.unlinkSync(LAUNCHD_PLIST_PATH)\n log.info('LaunchAgent removed')\n }\n return { success: true }\n }\n\n if (process.platform === 'linux') {\n if (fs.existsSync(SYSTEMD_SERVICE_PATH)) {\n try {\n execFileSync('systemctl', ['--user', 'disable', 'openacp'], { stdio: 'pipe' })\n } catch {\n // may already be disabled\n }\n fs.unlinkSync(SYSTEMD_SERVICE_PATH)\n execFileSync('systemctl', ['--user', 'daemon-reload'], { stdio: 'pipe' })\n log.info('systemd user service removed')\n }\n return { success: true }\n }\n\n return { success: false, error: 'Unsupported platform' }\n } catch (e) {\n const msg = (e as Error).message\n log.error({ err: msg }, 'Failed to uninstall auto-start')\n return { success: false, error: msg }\n }\n}\n\nexport function isAutoStartInstalled(): boolean {\n if (process.platform === 'darwin') {\n return fs.existsSync(LAUNCHD_PLIST_PATH)\n }\n if (process.platform === 'linux') {\n return fs.existsSync(SYSTEMD_SERVICE_PATH)\n }\n return false\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-3EWTPOF7.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
NotificationManager
|
|
3
|
-
} from "./chunk-7ZCQF6QM.js";
|
|
4
|
-
|
|
5
|
-
// src/plugins/notifications/index.ts
|
|
6
|
-
function createNotificationsPlugin() {
|
|
7
|
-
return {
|
|
8
|
-
name: "@openacp/notifications",
|
|
9
|
-
version: "1.0.0",
|
|
10
|
-
description: "Cross-session notification routing",
|
|
11
|
-
essential: false,
|
|
12
|
-
pluginDependencies: { "@openacp/security": "^1.0.0" },
|
|
13
|
-
permissions: ["services:register", "kernel:access"],
|
|
14
|
-
async install(ctx) {
|
|
15
|
-
const { settings, terminal } = ctx;
|
|
16
|
-
await settings.setAll({ enabled: true });
|
|
17
|
-
terminal.log.success("Notifications defaults saved");
|
|
18
|
-
},
|
|
19
|
-
async configure(ctx) {
|
|
20
|
-
const { terminal, settings } = ctx;
|
|
21
|
-
const current = await settings.getAll();
|
|
22
|
-
const toggle = await terminal.confirm({
|
|
23
|
-
message: `Notifications are ${current.enabled !== false ? "enabled" : "disabled"}. Toggle?`,
|
|
24
|
-
initialValue: false
|
|
25
|
-
});
|
|
26
|
-
if (toggle) {
|
|
27
|
-
const newState = current.enabled === false;
|
|
28
|
-
await settings.set("enabled", newState);
|
|
29
|
-
terminal.log.success(`Notifications ${newState ? "enabled" : "disabled"}`);
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
async uninstall(ctx, opts) {
|
|
33
|
-
if (opts.purge) {
|
|
34
|
-
await ctx.settings.clear();
|
|
35
|
-
ctx.terminal.log.success("Notifications settings cleared");
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
async setup(ctx) {
|
|
39
|
-
const core = ctx.core;
|
|
40
|
-
const manager = new NotificationManager(core.adapters);
|
|
41
|
-
ctx.registerService("notifications", manager);
|
|
42
|
-
ctx.log.info("Notifications service ready");
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
var notifications_default = createNotificationsPlugin();
|
|
47
|
-
|
|
48
|
-
export {
|
|
49
|
-
notifications_default
|
|
50
|
-
};
|
|
51
|
-
//# sourceMappingURL=chunk-3EWTPOF7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/notifications/index.ts"],"sourcesContent":["import type { OpenACPPlugin, InstallContext, CoreAccess } from '../../core/plugin/types.js'\nimport { NotificationManager } from './notification.js'\n\nfunction createNotificationsPlugin(): OpenACPPlugin {\n return {\n name: '@openacp/notifications',\n version: '1.0.0',\n description: 'Cross-session notification routing',\n essential: false,\n pluginDependencies: { '@openacp/security': '^1.0.0' },\n permissions: ['services:register', 'kernel:access'],\n\n async install(ctx: InstallContext) {\n const { settings, terminal } = ctx\n\n // No interactive prompts needed — save defaults\n await settings.setAll({ enabled: true })\n terminal.log.success('Notifications defaults saved')\n },\n\n async configure(ctx: InstallContext) {\n const { terminal, settings } = ctx\n const current = await settings.getAll()\n\n const toggle = await terminal.confirm({\n message: `Notifications are ${current.enabled !== false ? 'enabled' : 'disabled'}. Toggle?`,\n initialValue: false,\n })\n if (toggle) {\n const newState = current.enabled === false\n await settings.set('enabled', newState)\n terminal.log.success(`Notifications ${newState ? 'enabled' : 'disabled'}`)\n }\n },\n\n async uninstall(ctx: InstallContext, opts: { purge: boolean }) {\n if (opts.purge) {\n await ctx.settings.clear()\n ctx.terminal.log.success('Notifications settings cleared')\n }\n },\n\n async setup(ctx) {\n // NotificationManager needs the live adapters Map from core\n const core = ctx.core as CoreAccess\n const manager = new NotificationManager(core.adapters)\n ctx.registerService('notifications', manager)\n ctx.log.info('Notifications service ready')\n },\n }\n}\n\nexport default createNotificationsPlugin()\n"],"mappings":";;;;;AAGA,SAAS,4BAA2C;AAClD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,oBAAoB,EAAE,qBAAqB,SAAS;AAAA,IACpD,aAAa,CAAC,qBAAqB,eAAe;AAAA,IAElD,MAAM,QAAQ,KAAqB;AACjC,YAAM,EAAE,UAAU,SAAS,IAAI;AAG/B,YAAM,SAAS,OAAO,EAAE,SAAS,KAAK,CAAC;AACvC,eAAS,IAAI,QAAQ,8BAA8B;AAAA,IACrD;AAAA,IAEA,MAAM,UAAU,KAAqB;AACnC,YAAM,EAAE,UAAU,SAAS,IAAI;AAC/B,YAAM,UAAU,MAAM,SAAS,OAAO;AAEtC,YAAM,SAAS,MAAM,SAAS,QAAQ;AAAA,QACpC,SAAS,qBAAqB,QAAQ,YAAY,QAAQ,YAAY,UAAU;AAAA,QAChF,cAAc;AAAA,MAChB,CAAC;AACD,UAAI,QAAQ;AACV,cAAM,WAAW,QAAQ,YAAY;AACrC,cAAM,SAAS,IAAI,WAAW,QAAQ;AACtC,iBAAS,IAAI,QAAQ,iBAAiB,WAAW,YAAY,UAAU,EAAE;AAAA,MAC3E;AAAA,IACF;AAAA,IAEA,MAAM,UAAU,KAAqB,MAA0B;AAC7D,UAAI,KAAK,OAAO;AACd,cAAM,IAAI,SAAS,MAAM;AACzB,YAAI,SAAS,IAAI,QAAQ,gCAAgC;AAAA,MAC3D;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,KAAK;AAEf,YAAM,OAAO,IAAI;AACjB,YAAM,UAAU,IAAI,oBAAoB,KAAK,QAAQ;AACrD,UAAI,gBAAgB,iBAAiB,OAAO;AAC5C,UAAI,IAAI,KAAK,6BAA6B;AAAA,IAC5C;AAAA,EACF;AACF;AAEA,IAAO,wBAAQ,0BAA0B;","names":[]}
|
package/dist/chunk-3NAFXVQM.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
FileService
|
|
3
|
-
} from "./chunk-IZ5UEZF7.js";
|
|
4
|
-
|
|
5
|
-
// src/plugins/file-service/index.ts
|
|
6
|
-
import path from "path";
|
|
7
|
-
import os from "os";
|
|
8
|
-
function createFileServicePlugin() {
|
|
9
|
-
return {
|
|
10
|
-
name: "@openacp/file-service",
|
|
11
|
-
version: "1.0.0",
|
|
12
|
-
description: "File storage and management for session attachments",
|
|
13
|
-
essential: false,
|
|
14
|
-
permissions: ["services:register"],
|
|
15
|
-
async install(ctx) {
|
|
16
|
-
const { settings, legacyConfig, terminal } = ctx;
|
|
17
|
-
if (legacyConfig) {
|
|
18
|
-
const filesCfg = legacyConfig.files;
|
|
19
|
-
if (filesCfg) {
|
|
20
|
-
await settings.setAll({
|
|
21
|
-
baseDir: filesCfg.baseDir ?? path.join(os.homedir(), ".openacp", "files")
|
|
22
|
-
});
|
|
23
|
-
terminal.log.success("File service settings migrated from legacy config");
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
await settings.setAll({
|
|
28
|
-
baseDir: path.join(os.homedir(), ".openacp", "files")
|
|
29
|
-
});
|
|
30
|
-
terminal.log.success("File service defaults saved");
|
|
31
|
-
},
|
|
32
|
-
async configure(ctx) {
|
|
33
|
-
const { terminal, settings } = ctx;
|
|
34
|
-
const current = await settings.getAll();
|
|
35
|
-
const val = await terminal.text({
|
|
36
|
-
message: "File storage directory:",
|
|
37
|
-
defaultValue: current.baseDir ?? path.join(os.homedir(), ".openacp", "files")
|
|
38
|
-
});
|
|
39
|
-
await settings.set("baseDir", val.trim());
|
|
40
|
-
terminal.log.success("File storage directory updated");
|
|
41
|
-
},
|
|
42
|
-
async uninstall(ctx, opts) {
|
|
43
|
-
if (opts.purge) {
|
|
44
|
-
await ctx.settings.clear();
|
|
45
|
-
ctx.terminal.log.success("File service settings cleared");
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
async setup(ctx) {
|
|
49
|
-
const config = ctx.pluginConfig;
|
|
50
|
-
const baseDir = config.baseDir ?? path.join(os.homedir(), ".openacp", "files");
|
|
51
|
-
const retentionDays = config.retentionDays ?? 30;
|
|
52
|
-
const service = new FileService(baseDir);
|
|
53
|
-
ctx.registerService("file-service", service);
|
|
54
|
-
service.cleanupOldFiles(retentionDays).then((count) => {
|
|
55
|
-
if (count > 0) ctx.log.info(`Cleaned up ${count} old session files`);
|
|
56
|
-
}).catch(() => {
|
|
57
|
-
});
|
|
58
|
-
ctx.log.info("File service ready");
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
var file_service_default = createFileServicePlugin();
|
|
63
|
-
|
|
64
|
-
export {
|
|
65
|
-
file_service_default
|
|
66
|
-
};
|
|
67
|
-
//# sourceMappingURL=chunk-3NAFXVQM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/file-service/index.ts"],"sourcesContent":["import type { OpenACPPlugin, InstallContext } from '../../core/plugin/types.js'\nimport { FileService } from './file-service.js'\nimport path from 'node:path'\nimport os from 'node:os'\n\nfunction createFileServicePlugin(): OpenACPPlugin {\n return {\n name: '@openacp/file-service',\n version: '1.0.0',\n description: 'File storage and management for session attachments',\n essential: false,\n permissions: ['services:register'],\n\n async install(ctx: InstallContext) {\n const { settings, legacyConfig, terminal } = ctx\n\n // Migrate from legacy config if present\n if (legacyConfig) {\n const filesCfg = legacyConfig.files as Record<string, unknown> | undefined\n if (filesCfg) {\n await settings.setAll({\n baseDir: filesCfg.baseDir ?? path.join(os.homedir(), '.openacp', 'files'),\n })\n terminal.log.success('File service settings migrated from legacy config')\n return\n }\n }\n\n // Save defaults\n await settings.setAll({\n baseDir: path.join(os.homedir(), '.openacp', 'files'),\n })\n terminal.log.success('File service defaults saved')\n },\n\n async configure(ctx: InstallContext) {\n const { terminal, settings } = ctx\n const current = await settings.getAll()\n\n const val = await terminal.text({\n message: 'File storage directory:',\n defaultValue: (current.baseDir as string) ?? path.join(os.homedir(), '.openacp', 'files'),\n })\n await settings.set('baseDir', val.trim())\n terminal.log.success('File storage directory updated')\n },\n\n async uninstall(ctx: InstallContext, opts: { purge: boolean }) {\n if (opts.purge) {\n await ctx.settings.clear()\n ctx.terminal.log.success('File service settings cleared')\n }\n },\n\n async setup(ctx) {\n const config = ctx.pluginConfig as Record<string, unknown>\n const baseDir = (config.baseDir as string) ?? path.join(os.homedir(), '.openacp', 'files')\n const retentionDays = (config.retentionDays as number) ?? 30\n const service = new FileService(baseDir)\n ctx.registerService('file-service', service)\n // Cleanup old session files in background (fire-and-forget)\n service.cleanupOldFiles(retentionDays).then((count) => {\n if (count > 0) ctx.log.info(`Cleaned up ${count} old session files`)\n }).catch(() => {})\n ctx.log.info('File service ready')\n },\n }\n}\n\nexport default createFileServicePlugin()\n"],"mappings":";;;;;AAEA,OAAO,UAAU;AACjB,OAAO,QAAQ;AAEf,SAAS,0BAAyC;AAChD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa,CAAC,mBAAmB;AAAA,IAEjC,MAAM,QAAQ,KAAqB;AACjC,YAAM,EAAE,UAAU,cAAc,SAAS,IAAI;AAG7C,UAAI,cAAc;AAChB,cAAM,WAAW,aAAa;AAC9B,YAAI,UAAU;AACZ,gBAAM,SAAS,OAAO;AAAA,YACpB,SAAS,SAAS,WAAW,KAAK,KAAK,GAAG,QAAQ,GAAG,YAAY,OAAO;AAAA,UAC1E,CAAC;AACD,mBAAS,IAAI,QAAQ,mDAAmD;AACxE;AAAA,QACF;AAAA,MACF;AAGA,YAAM,SAAS,OAAO;AAAA,QACpB,SAAS,KAAK,KAAK,GAAG,QAAQ,GAAG,YAAY,OAAO;AAAA,MACtD,CAAC;AACD,eAAS,IAAI,QAAQ,6BAA6B;AAAA,IACpD;AAAA,IAEA,MAAM,UAAU,KAAqB;AACnC,YAAM,EAAE,UAAU,SAAS,IAAI;AAC/B,YAAM,UAAU,MAAM,SAAS,OAAO;AAEtC,YAAM,MAAM,MAAM,SAAS,KAAK;AAAA,QAC9B,SAAS;AAAA,QACT,cAAe,QAAQ,WAAsB,KAAK,KAAK,GAAG,QAAQ,GAAG,YAAY,OAAO;AAAA,MAC1F,CAAC;AACD,YAAM,SAAS,IAAI,WAAW,IAAI,KAAK,CAAC;AACxC,eAAS,IAAI,QAAQ,gCAAgC;AAAA,IACvD;AAAA,IAEA,MAAM,UAAU,KAAqB,MAA0B;AAC7D,UAAI,KAAK,OAAO;AACd,cAAM,IAAI,SAAS,MAAM;AACzB,YAAI,SAAS,IAAI,QAAQ,+BAA+B;AAAA,MAC1D;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,KAAK;AACf,YAAM,SAAS,IAAI;AACnB,YAAM,UAAW,OAAO,WAAsB,KAAK,KAAK,GAAG,QAAQ,GAAG,YAAY,OAAO;AACzF,YAAM,gBAAiB,OAAO,iBAA4B;AAC1D,YAAM,UAAU,IAAI,YAAY,OAAO;AACvC,UAAI,gBAAgB,gBAAgB,OAAO;AAE3C,cAAQ,gBAAgB,aAAa,EAAE,KAAK,CAAC,UAAU;AACrD,YAAI,QAAQ,EAAG,KAAI,IAAI,KAAK,cAAc,KAAK,oBAAoB;AAAA,MACrE,CAAC,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AACjB,UAAI,IAAI,KAAK,oBAAoB;AAAA,IACnC;AAAA,EACF;AACF;AAEA,IAAO,uBAAQ,wBAAwB;","names":[]}
|
package/dist/chunk-4WXALZA3.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// src/cli/api-client.ts
|
|
2
|
-
import * as fs from "fs";
|
|
3
|
-
import * as path from "path";
|
|
4
|
-
import * as os from "os";
|
|
5
|
-
var DEFAULT_PORT_FILE = path.join(os.homedir(), ".openacp", "api.port");
|
|
6
|
-
var DEFAULT_SECRET_FILE = path.join(os.homedir(), ".openacp", "api-secret");
|
|
7
|
-
function readApiPort(portFilePath = DEFAULT_PORT_FILE) {
|
|
8
|
-
try {
|
|
9
|
-
const content = fs.readFileSync(portFilePath, "utf-8").trim();
|
|
10
|
-
const port = parseInt(content, 10);
|
|
11
|
-
return isNaN(port) ? null : port;
|
|
12
|
-
} catch {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function readApiSecret(secretFilePath = DEFAULT_SECRET_FILE) {
|
|
17
|
-
try {
|
|
18
|
-
const content = fs.readFileSync(secretFilePath, "utf-8").trim();
|
|
19
|
-
return content || null;
|
|
20
|
-
} catch {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function removeStalePortFile(portFilePath = DEFAULT_PORT_FILE) {
|
|
25
|
-
try {
|
|
26
|
-
fs.unlinkSync(portFilePath);
|
|
27
|
-
} catch {
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async function apiCall(port, urlPath, options) {
|
|
31
|
-
const secret = readApiSecret();
|
|
32
|
-
const headers = new Headers(options?.headers);
|
|
33
|
-
if (secret) {
|
|
34
|
-
headers.set("Authorization", `Bearer ${secret}`);
|
|
35
|
-
}
|
|
36
|
-
return fetch(`http://127.0.0.1:${port}${urlPath}`, { ...options, headers });
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export {
|
|
40
|
-
readApiPort,
|
|
41
|
-
readApiSecret,
|
|
42
|
-
removeStalePortFile,
|
|
43
|
-
apiCall
|
|
44
|
-
};
|
|
45
|
-
//# sourceMappingURL=chunk-4WXALZA3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/api-client.ts"],"sourcesContent":["import * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport * as os from 'node:os'\n\nconst DEFAULT_PORT_FILE = path.join(os.homedir(), '.openacp', 'api.port')\nconst DEFAULT_SECRET_FILE = path.join(os.homedir(), '.openacp', 'api-secret')\n\nexport function readApiPort(portFilePath: string = DEFAULT_PORT_FILE): number | null {\n try {\n const content = fs.readFileSync(portFilePath, 'utf-8').trim()\n const port = parseInt(content, 10)\n return isNaN(port) ? null : port\n } catch {\n return null\n }\n}\n\nexport function readApiSecret(secretFilePath: string = DEFAULT_SECRET_FILE): string | null {\n try {\n const content = fs.readFileSync(secretFilePath, 'utf-8').trim()\n return content || null\n } catch {\n return null\n }\n}\n\nexport function removeStalePortFile(portFilePath: string = DEFAULT_PORT_FILE): void {\n try {\n fs.unlinkSync(portFilePath)\n } catch {\n // ignore\n }\n}\n\nexport async function apiCall(\n port: number,\n urlPath: string,\n options?: RequestInit,\n): Promise<Response> {\n const secret = readApiSecret()\n const headers = new Headers(options?.headers)\n if (secret) {\n headers.set('Authorization', `Bearer ${secret}`)\n }\n return fetch(`http://127.0.0.1:${port}${urlPath}`, { ...options, headers })\n}\n"],"mappings":";AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AAEpB,IAAM,oBAAyB,UAAQ,WAAQ,GAAG,YAAY,UAAU;AACxE,IAAM,sBAA2B,UAAQ,WAAQ,GAAG,YAAY,YAAY;AAErE,SAAS,YAAY,eAAuB,mBAAkC;AACnF,MAAI;AACF,UAAM,UAAa,gBAAa,cAAc,OAAO,EAAE,KAAK;AAC5D,UAAM,OAAO,SAAS,SAAS,EAAE;AACjC,WAAO,MAAM,IAAI,IAAI,OAAO;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,cAAc,iBAAyB,qBAAoC;AACzF,MAAI;AACF,UAAM,UAAa,gBAAa,gBAAgB,OAAO,EAAE,KAAK;AAC9D,WAAO,WAAW;AAAA,EACpB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,oBAAoB,eAAuB,mBAAyB;AAClF,MAAI;AACF,IAAG,cAAW,YAAY;AAAA,EAC5B,QAAQ;AAAA,EAER;AACF;AAEA,eAAsB,QACpB,MACA,SACA,SACmB;AACnB,QAAM,SAAS,cAAc;AAC7B,QAAM,UAAU,IAAI,QAAQ,SAAS,OAAO;AAC5C,MAAI,QAAQ;AACV,YAAQ,IAAI,iBAAiB,UAAU,MAAM,EAAE;AAAA,EACjD;AACA,SAAO,MAAM,oBAAoB,IAAI,GAAG,OAAO,IAAI,EAAE,GAAG,SAAS,QAAQ,CAAC;AAC5E;","names":[]}
|
package/dist/chunk-566W6INH.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createChildLogger
|
|
3
|
-
} from "./chunk-R6KZYF7D.js";
|
|
4
|
-
|
|
5
|
-
// src/core/agents/agent-store.ts
|
|
6
|
-
import * as fs from "fs";
|
|
7
|
-
import * as path from "path";
|
|
8
|
-
import * as os from "os";
|
|
9
|
-
import { z } from "zod";
|
|
10
|
-
var log = createChildLogger({ module: "agent-store" });
|
|
11
|
-
var InstalledAgentSchema = z.object({
|
|
12
|
-
registryId: z.string().nullable(),
|
|
13
|
-
name: z.string(),
|
|
14
|
-
version: z.string(),
|
|
15
|
-
distribution: z.enum(["npx", "uvx", "binary", "custom"]),
|
|
16
|
-
command: z.string(),
|
|
17
|
-
args: z.array(z.string()).default([]),
|
|
18
|
-
env: z.record(z.string(), z.string()).default({}),
|
|
19
|
-
workingDirectory: z.string().optional(),
|
|
20
|
-
installedAt: z.string(),
|
|
21
|
-
binaryPath: z.string().nullable().default(null)
|
|
22
|
-
});
|
|
23
|
-
var AgentStoreSchema = z.object({
|
|
24
|
-
version: z.number().default(1),
|
|
25
|
-
installed: z.record(z.string(), InstalledAgentSchema).default({})
|
|
26
|
-
});
|
|
27
|
-
var AgentStore = class {
|
|
28
|
-
data = { version: 1, installed: {} };
|
|
29
|
-
filePath;
|
|
30
|
-
constructor(filePath) {
|
|
31
|
-
this.filePath = filePath ?? path.join(os.homedir(), ".openacp", "agents.json");
|
|
32
|
-
}
|
|
33
|
-
load() {
|
|
34
|
-
fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
|
|
35
|
-
if (!fs.existsSync(this.filePath)) {
|
|
36
|
-
this.data = { version: 1, installed: {} };
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
const raw = JSON.parse(fs.readFileSync(this.filePath, "utf-8"));
|
|
41
|
-
const result = AgentStoreSchema.safeParse(raw);
|
|
42
|
-
if (result.success) {
|
|
43
|
-
this.data = result.data;
|
|
44
|
-
} else {
|
|
45
|
-
log.warn({ errors: result.error.issues }, "Invalid agents.json, starting fresh");
|
|
46
|
-
this.data = { version: 1, installed: {} };
|
|
47
|
-
}
|
|
48
|
-
} catch (err) {
|
|
49
|
-
log.warn({ err }, "Failed to read agents.json, starting fresh");
|
|
50
|
-
this.data = { version: 1, installed: {} };
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
exists() {
|
|
54
|
-
return fs.existsSync(this.filePath);
|
|
55
|
-
}
|
|
56
|
-
getInstalled() {
|
|
57
|
-
return this.data.installed;
|
|
58
|
-
}
|
|
59
|
-
getAgent(key) {
|
|
60
|
-
return this.data.installed[key];
|
|
61
|
-
}
|
|
62
|
-
addAgent(key, agent) {
|
|
63
|
-
this.data.installed[key] = agent;
|
|
64
|
-
this.save();
|
|
65
|
-
}
|
|
66
|
-
removeAgent(key) {
|
|
67
|
-
delete this.data.installed[key];
|
|
68
|
-
this.save();
|
|
69
|
-
}
|
|
70
|
-
hasAgent(key) {
|
|
71
|
-
return key in this.data.installed;
|
|
72
|
-
}
|
|
73
|
-
save() {
|
|
74
|
-
const tmpPath = this.filePath + ".tmp";
|
|
75
|
-
fs.writeFileSync(tmpPath, JSON.stringify(this.data, null, 2));
|
|
76
|
-
fs.renameSync(tmpPath, this.filePath);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
export {
|
|
81
|
-
AgentStore
|
|
82
|
-
};
|
|
83
|
-
//# sourceMappingURL=chunk-566W6INH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/agents/agent-store.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport { z } from \"zod\";\nimport type { InstalledAgent } from \"../types.js\";\nimport { createChildLogger } from \"../utils/log.js\";\n\nconst log = createChildLogger({ module: \"agent-store\" });\n\nconst InstalledAgentSchema = z.object({\n registryId: z.string().nullable(),\n name: z.string(),\n version: z.string(),\n distribution: z.enum([\"npx\", \"uvx\", \"binary\", \"custom\"]),\n command: z.string(),\n args: z.array(z.string()).default([]),\n env: z.record(z.string(), z.string()).default({}),\n workingDirectory: z.string().optional(),\n installedAt: z.string(),\n binaryPath: z.string().nullable().default(null),\n});\n\nconst AgentStoreSchema = z.object({\n version: z.number().default(1),\n installed: z.record(z.string(), InstalledAgentSchema).default({}),\n});\n\ntype AgentStoreData = z.infer<typeof AgentStoreSchema>;\n\nexport class AgentStore {\n private data: AgentStoreData = { version: 1, installed: {} };\n private filePath: string;\n\n constructor(filePath?: string) {\n this.filePath = filePath ?? path.join(os.homedir(), \".openacp\", \"agents.json\");\n }\n\n load(): void {\n fs.mkdirSync(path.dirname(this.filePath), { recursive: true });\n\n if (!fs.existsSync(this.filePath)) {\n this.data = { version: 1, installed: {} };\n return;\n }\n\n try {\n const raw = JSON.parse(fs.readFileSync(this.filePath, \"utf-8\") as string);\n const result = AgentStoreSchema.safeParse(raw);\n if (result.success) {\n this.data = result.data;\n } else {\n log.warn({ errors: result.error.issues }, \"Invalid agents.json, starting fresh\");\n this.data = { version: 1, installed: {} };\n }\n } catch (err) {\n log.warn({ err }, \"Failed to read agents.json, starting fresh\");\n this.data = { version: 1, installed: {} };\n }\n }\n\n exists(): boolean {\n return fs.existsSync(this.filePath);\n }\n\n getInstalled(): Record<string, InstalledAgent> {\n return this.data.installed;\n }\n\n getAgent(key: string): InstalledAgent | undefined {\n return this.data.installed[key];\n }\n\n addAgent(key: string, agent: InstalledAgent): void {\n this.data.installed[key] = agent;\n this.save();\n }\n\n removeAgent(key: string): void {\n delete this.data.installed[key];\n this.save();\n }\n\n hasAgent(key: string): boolean {\n return key in this.data.installed;\n }\n\n private save(): void {\n const tmpPath = this.filePath + \".tmp\";\n fs.writeFileSync(tmpPath, JSON.stringify(this.data, null, 2));\n fs.renameSync(tmpPath, this.filePath);\n }\n}\n"],"mappings":";;;;;AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,SAAS,SAAS;AAIlB,IAAM,MAAM,kBAAkB,EAAE,QAAQ,cAAc,CAAC;AAEvD,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,MAAM,EAAE,OAAO;AAAA,EACf,SAAS,EAAE,OAAO;AAAA,EAClB,cAAc,EAAE,KAAK,CAAC,OAAO,OAAO,UAAU,QAAQ,CAAC;AAAA,EACvD,SAAS,EAAE,OAAO;AAAA,EAClB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAChD,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAa,EAAE,OAAO;AAAA,EACtB,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAChD,CAAC;AAED,IAAM,mBAAmB,EAAE,OAAO;AAAA,EAChC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,EAC7B,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,oBAAoB,EAAE,QAAQ,CAAC,CAAC;AAClE,CAAC;AAIM,IAAM,aAAN,MAAiB;AAAA,EACd,OAAuB,EAAE,SAAS,GAAG,WAAW,CAAC,EAAE;AAAA,EACnD;AAAA,EAER,YAAY,UAAmB;AAC7B,SAAK,WAAW,YAAiB,UAAQ,WAAQ,GAAG,YAAY,aAAa;AAAA,EAC/E;AAAA,EAEA,OAAa;AACX,IAAG,aAAe,aAAQ,KAAK,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAE7D,QAAI,CAAI,cAAW,KAAK,QAAQ,GAAG;AACjC,WAAK,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC,EAAE;AACxC;AAAA,IACF;AAEA,QAAI;AACF,YAAM,MAAM,KAAK,MAAS,gBAAa,KAAK,UAAU,OAAO,CAAW;AACxE,YAAM,SAAS,iBAAiB,UAAU,GAAG;AAC7C,UAAI,OAAO,SAAS;AAClB,aAAK,OAAO,OAAO;AAAA,MACrB,OAAO;AACL,YAAI,KAAK,EAAE,QAAQ,OAAO,MAAM,OAAO,GAAG,qCAAqC;AAC/E,aAAK,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC,EAAE;AAAA,MAC1C;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,KAAK,EAAE,IAAI,GAAG,4CAA4C;AAC9D,WAAK,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC,EAAE;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,SAAkB;AAChB,WAAU,cAAW,KAAK,QAAQ;AAAA,EACpC;AAAA,EAEA,eAA+C;AAC7C,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,SAAS,KAAyC;AAChD,WAAO,KAAK,KAAK,UAAU,GAAG;AAAA,EAChC;AAAA,EAEA,SAAS,KAAa,OAA6B;AACjD,SAAK,KAAK,UAAU,GAAG,IAAI;AAC3B,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,YAAY,KAAmB;AAC7B,WAAO,KAAK,KAAK,UAAU,GAAG;AAC9B,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,SAAS,KAAsB;AAC7B,WAAO,OAAO,KAAK,KAAK;AAAA,EAC1B;AAAA,EAEQ,OAAa;AACnB,UAAM,UAAU,KAAK,WAAW;AAChC,IAAG,iBAAc,SAAS,KAAK,UAAU,KAAK,MAAM,MAAM,CAAC,CAAC;AAC5D,IAAG,cAAW,SAAS,KAAK,QAAQ;AAAA,EACtC;AACF;","names":[]}
|
package/dist/chunk-5HKQCYOI.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
// src/core/config/config-registry.ts
|
|
2
|
-
import * as fs from "fs";
|
|
3
|
-
import * as path from "path";
|
|
4
|
-
import * as os from "os";
|
|
5
|
-
var CONFIG_REGISTRY = [
|
|
6
|
-
{
|
|
7
|
-
path: "defaultAgent",
|
|
8
|
-
displayName: "Default Agent",
|
|
9
|
-
group: "agent",
|
|
10
|
-
type: "select",
|
|
11
|
-
options: (config) => {
|
|
12
|
-
try {
|
|
13
|
-
const agentsPath = path.join(os.homedir(), ".openacp", "agents.json");
|
|
14
|
-
if (fs.existsSync(agentsPath)) {
|
|
15
|
-
const data = JSON.parse(fs.readFileSync(agentsPath, "utf-8"));
|
|
16
|
-
return Object.keys(data.installed ?? {});
|
|
17
|
-
}
|
|
18
|
-
} catch {
|
|
19
|
-
}
|
|
20
|
-
return Object.keys(config.agents ?? {});
|
|
21
|
-
},
|
|
22
|
-
scope: "safe",
|
|
23
|
-
hotReload: true
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
path: "channels.telegram.displayVerbosity",
|
|
27
|
-
displayName: "Telegram Verbosity",
|
|
28
|
-
group: "display",
|
|
29
|
-
type: "select",
|
|
30
|
-
options: ["low", "medium", "high"],
|
|
31
|
-
scope: "safe",
|
|
32
|
-
hotReload: true
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
path: "channels.discord.displayVerbosity",
|
|
36
|
-
displayName: "Discord Verbosity",
|
|
37
|
-
group: "display",
|
|
38
|
-
type: "select",
|
|
39
|
-
options: ["low", "medium", "high"],
|
|
40
|
-
scope: "safe",
|
|
41
|
-
hotReload: true
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
path: "logging.level",
|
|
45
|
-
displayName: "Log Level",
|
|
46
|
-
group: "logging",
|
|
47
|
-
type: "select",
|
|
48
|
-
options: ["silent", "debug", "info", "warn", "error", "fatal"],
|
|
49
|
-
scope: "safe",
|
|
50
|
-
hotReload: true
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
path: "tunnel.enabled",
|
|
54
|
-
displayName: "Tunnel",
|
|
55
|
-
group: "tunnel",
|
|
56
|
-
type: "toggle",
|
|
57
|
-
scope: "safe",
|
|
58
|
-
hotReload: false
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
path: "security.maxConcurrentSessions",
|
|
62
|
-
displayName: "Max Concurrent Sessions",
|
|
63
|
-
group: "security",
|
|
64
|
-
type: "number",
|
|
65
|
-
scope: "safe",
|
|
66
|
-
hotReload: true
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
path: "security.sessionTimeoutMinutes",
|
|
70
|
-
displayName: "Session Timeout (min)",
|
|
71
|
-
group: "security",
|
|
72
|
-
type: "number",
|
|
73
|
-
scope: "safe",
|
|
74
|
-
hotReload: true
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
path: "workspace.baseDir",
|
|
78
|
-
displayName: "Workspace Directory",
|
|
79
|
-
group: "workspace",
|
|
80
|
-
type: "string",
|
|
81
|
-
scope: "safe",
|
|
82
|
-
hotReload: true
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
path: "sessionStore.ttlDays",
|
|
86
|
-
displayName: "Session Store TTL (days)",
|
|
87
|
-
group: "storage",
|
|
88
|
-
type: "number",
|
|
89
|
-
scope: "safe",
|
|
90
|
-
hotReload: true
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
path: "speech.stt.provider",
|
|
94
|
-
displayName: "Speech to Text",
|
|
95
|
-
group: "speech",
|
|
96
|
-
type: "select",
|
|
97
|
-
options: ["groq"],
|
|
98
|
-
scope: "safe",
|
|
99
|
-
hotReload: true
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
path: "speech.stt.apiKey",
|
|
103
|
-
displayName: "STT API Key",
|
|
104
|
-
group: "speech",
|
|
105
|
-
type: "string",
|
|
106
|
-
scope: "sensitive",
|
|
107
|
-
hotReload: true
|
|
108
|
-
}
|
|
109
|
-
];
|
|
110
|
-
function getFieldDef(path2) {
|
|
111
|
-
return CONFIG_REGISTRY.find((f) => f.path === path2);
|
|
112
|
-
}
|
|
113
|
-
function getSafeFields() {
|
|
114
|
-
return CONFIG_REGISTRY.filter((f) => f.scope === "safe");
|
|
115
|
-
}
|
|
116
|
-
function isHotReloadable(path2) {
|
|
117
|
-
const def = getFieldDef(path2);
|
|
118
|
-
return def?.hotReload ?? false;
|
|
119
|
-
}
|
|
120
|
-
function resolveOptions(def, config) {
|
|
121
|
-
if (!def.options) return void 0;
|
|
122
|
-
return typeof def.options === "function" ? def.options(config) : def.options;
|
|
123
|
-
}
|
|
124
|
-
function getConfigValue(config, path2) {
|
|
125
|
-
const parts = path2.split(".");
|
|
126
|
-
let current = config;
|
|
127
|
-
for (const part of parts) {
|
|
128
|
-
if (current && typeof current === "object" && part in current) {
|
|
129
|
-
current = current[part];
|
|
130
|
-
} else {
|
|
131
|
-
return void 0;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return current;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export {
|
|
138
|
-
CONFIG_REGISTRY,
|
|
139
|
-
getFieldDef,
|
|
140
|
-
getSafeFields,
|
|
141
|
-
isHotReloadable,
|
|
142
|
-
resolveOptions,
|
|
143
|
-
getConfigValue
|
|
144
|
-
};
|
|
145
|
-
//# sourceMappingURL=chunk-5HKQCYOI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/config/config-registry.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport type { Config } from \"./config.js\";\n\nexport interface ConfigFieldDef {\n path: string;\n displayName: string;\n group: string;\n type: \"toggle\" | \"select\" | \"number\" | \"string\";\n options?: string[] | ((config: Config) => string[]);\n scope: \"safe\" | \"sensitive\";\n hotReload: boolean;\n}\n\nexport const CONFIG_REGISTRY: ConfigFieldDef[] = [\n {\n path: \"defaultAgent\",\n displayName: \"Default Agent\",\n group: \"agent\",\n type: \"select\",\n options: (config) => {\n try {\n const agentsPath = path.join(os.homedir(), \".openacp\", \"agents.json\");\n if (fs.existsSync(agentsPath)) {\n const data = JSON.parse(fs.readFileSync(agentsPath, \"utf-8\"));\n return Object.keys(data.installed ?? {});\n }\n } catch {\n /* fallback */\n }\n return Object.keys(config.agents ?? {});\n },\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"channels.telegram.displayVerbosity\",\n displayName: \"Telegram Verbosity\",\n group: \"display\",\n type: \"select\",\n options: [\"low\", \"medium\", \"high\"],\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"channels.discord.displayVerbosity\",\n displayName: \"Discord Verbosity\",\n group: \"display\",\n type: \"select\",\n options: [\"low\", \"medium\", \"high\"],\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"logging.level\",\n displayName: \"Log Level\",\n group: \"logging\",\n type: \"select\",\n options: [\"silent\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\"],\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"tunnel.enabled\",\n displayName: \"Tunnel\",\n group: \"tunnel\",\n type: \"toggle\",\n scope: \"safe\",\n hotReload: false,\n },\n {\n path: \"security.maxConcurrentSessions\",\n displayName: \"Max Concurrent Sessions\",\n group: \"security\",\n type: \"number\",\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"security.sessionTimeoutMinutes\",\n displayName: \"Session Timeout (min)\",\n group: \"security\",\n type: \"number\",\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"workspace.baseDir\",\n displayName: \"Workspace Directory\",\n group: \"workspace\",\n type: \"string\",\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"sessionStore.ttlDays\",\n displayName: \"Session Store TTL (days)\",\n group: \"storage\",\n type: \"number\",\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"speech.stt.provider\",\n displayName: \"Speech to Text\",\n group: \"speech\",\n type: \"select\",\n options: [\"groq\"],\n scope: \"safe\",\n hotReload: true,\n },\n {\n path: \"speech.stt.apiKey\",\n displayName: \"STT API Key\",\n group: \"speech\",\n type: \"string\",\n scope: \"sensitive\",\n hotReload: true,\n },\n];\n\nexport function getFieldDef(path: string): ConfigFieldDef | undefined {\n return CONFIG_REGISTRY.find((f) => f.path === path);\n}\n\nexport function getSafeFields(): ConfigFieldDef[] {\n return CONFIG_REGISTRY.filter((f) => f.scope === \"safe\");\n}\n\nexport function isHotReloadable(path: string): boolean {\n const def = getFieldDef(path);\n return def?.hotReload ?? false;\n}\n\nexport function resolveOptions(\n def: ConfigFieldDef,\n config: Config,\n): string[] | undefined {\n if (!def.options) return undefined;\n return typeof def.options === \"function\" ? def.options(config) : def.options;\n}\n\nexport function getConfigValue(config: Config, path: string): unknown {\n const parts = path.split(\".\");\n let current: unknown = config;\n for (const part of parts) {\n if (current && typeof current === \"object\" && part in current) {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return current;\n}\n"],"mappings":"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","names":["path"]}
|