@cocorograph/hub-agent 0.6.18 → 0.6.19
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/package.json
CHANGED
package/src/service-install.mjs
CHANGED
|
@@ -15,6 +15,8 @@ import path from "node:path"
|
|
|
15
15
|
import { spawnSync } from "node:child_process"
|
|
16
16
|
import { fileURLToPath } from "node:url"
|
|
17
17
|
|
|
18
|
+
import { readConfig } from "./config.mjs"
|
|
19
|
+
|
|
18
20
|
const PLIST_LABEL = "co.cocorograph.hub-agent"
|
|
19
21
|
const SYSTEMD_UNIT_NAME = "hub-agent.service"
|
|
20
22
|
|
|
@@ -50,7 +52,7 @@ function escapeXmlText(s) {
|
|
|
50
52
|
.replaceAll(">", ">")
|
|
51
53
|
}
|
|
52
54
|
|
|
53
|
-
function expandTemplate(text, hubAgentBin) {
|
|
55
|
+
function expandTemplate(text, hubAgentBin, opts = {}) {
|
|
54
56
|
// hub-agent デーモンの runtime 環境に必須な追加 env を、各プラットフォームの
|
|
55
57
|
// 起動ファイル形式 (plist / systemd) に合わせて差し込むためのプレースホルダ展開。
|
|
56
58
|
//
|
|
@@ -72,12 +74,43 @@ function expandTemplate(text, hubAgentBin) {
|
|
|
72
74
|
// systemd 側: Environment=KEY=VALUE の 1 行。末尾 \n でテンプレ "__...__\n" を吸収。
|
|
73
75
|
systemdLine = `Environment=NODE_EXTRA_CA_CERTS=${nodeExtraCa}\n`
|
|
74
76
|
}
|
|
77
|
+
|
|
78
|
+
// 多端末共有チャット (HUB_AGENT_CHAT_SHARED)。NODE_EXTRA_CA_CERTS と同じ仕組みで
|
|
79
|
+
// plist / systemd の EnvironmentVariables に焼き込む。値ソースは (a) installService
|
|
80
|
+
// が agent.json.chat_shared を読んで渡す opts.chatShared、または (b) install-service
|
|
81
|
+
// 実行時の process.env.HUB_AGENT_CHAT_SHARED。これにより agent 更新で install-service
|
|
82
|
+
// が plist を再生成しても、agent.json に chat_shared=true があればフラグが維持される
|
|
83
|
+
// (旧実装は手動 plist 追記が再生成で消える事故があった。2026-05-30)。
|
|
84
|
+
const chatShared =
|
|
85
|
+
opts.chatShared === true || process.env.HUB_AGENT_CHAT_SHARED === "1"
|
|
86
|
+
let chatPlistEntry = ""
|
|
87
|
+
let chatSystemdLine = ""
|
|
88
|
+
if (chatShared) {
|
|
89
|
+
chatPlistEntry =
|
|
90
|
+
` <key>HUB_AGENT_CHAT_SHARED</key>\n` +
|
|
91
|
+
` <string>1</string>\n`
|
|
92
|
+
chatSystemdLine = `Environment=HUB_AGENT_CHAT_SHARED=1\n`
|
|
93
|
+
}
|
|
94
|
+
|
|
75
95
|
return text
|
|
76
96
|
.replaceAll("__HUB_AGENT_BIN__", hubAgentBin)
|
|
77
97
|
.replaceAll("__HOME__", os.homedir())
|
|
78
98
|
.replaceAll("__PATH__", process.env.PATH || "/usr/local/bin:/usr/bin:/bin")
|
|
79
99
|
.replaceAll("__NODE_EXTRA_CA_CERTS_PLIST_ENTRY__", plistEntry)
|
|
80
100
|
.replaceAll("__NODE_EXTRA_CA_CERTS_SYSTEMD_LINE__", systemdLine)
|
|
101
|
+
.replaceAll("__HUB_AGENT_CHAT_SHARED_PLIST_ENTRY__", chatPlistEntry)
|
|
102
|
+
.replaceAll("__HUB_AGENT_CHAT_SHARED_SYSTEMD_LINE__", chatSystemdLine)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** agent.json から多端末共有フラグ (chat_shared) を読む。読めなければ false。
|
|
106
|
+
* install-service 時に plist/systemd へ焼き込む値ソースに使う (env 併用は expandTemplate 側)。 */
|
|
107
|
+
async function readChatSharedFromConfig() {
|
|
108
|
+
try {
|
|
109
|
+
const config = await readConfig()
|
|
110
|
+
return config?.chat_shared === true
|
|
111
|
+
} catch {
|
|
112
|
+
return false
|
|
113
|
+
}
|
|
81
114
|
}
|
|
82
115
|
|
|
83
116
|
async function ensureDir(p) {
|
|
@@ -156,9 +189,12 @@ export async function installService({ bin } = {}) {
|
|
|
156
189
|
const hubAgentBin = bin || detectHubAgentBin()
|
|
157
190
|
await ensureLogFile()
|
|
158
191
|
|
|
192
|
+
// agent.json の永続フラグを読み、テンプレ展開に渡す (再生成でも維持されるように)。
|
|
193
|
+
const chatShared = await readChatSharedFromConfig()
|
|
194
|
+
|
|
159
195
|
if (process.platform === "darwin") {
|
|
160
196
|
const tpl = await readTemplate("co.cocorograph.hub-agent.plist")
|
|
161
|
-
const expanded = expandTemplate(tpl, hubAgentBin)
|
|
197
|
+
const expanded = expandTemplate(tpl, hubAgentBin, { chatShared })
|
|
162
198
|
const dest = macPlistPath()
|
|
163
199
|
await ensureDir(path.dirname(dest))
|
|
164
200
|
await fs.writeFile(dest, expanded, { mode: 0o644 })
|
|
@@ -173,7 +209,7 @@ export async function installService({ bin } = {}) {
|
|
|
173
209
|
|
|
174
210
|
if (process.platform === "linux") {
|
|
175
211
|
const tpl = await readTemplate("hub-agent.service")
|
|
176
|
-
const expanded = expandTemplate(tpl, hubAgentBin)
|
|
212
|
+
const expanded = expandTemplate(tpl, hubAgentBin, { chatShared })
|
|
177
213
|
const dest = linuxUnitPath()
|
|
178
214
|
await ensureDir(path.dirname(dest))
|
|
179
215
|
await fs.writeFile(dest, expanded, { mode: 0o644 })
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
<string>__PATH__</string>
|
|
53
53
|
<key>HOME</key>
|
|
54
54
|
<string>__HOME__</string>
|
|
55
|
-
|
|
55
|
+
__NODE_EXTRA_CA_CERTS_PLIST_ENTRY____HUB_AGENT_CHAT_SHARED_PLIST_ENTRY__ </dict>
|
|
56
56
|
|
|
57
57
|
<!-- KeepAlive で過剰再起動した時に 10 秒スロットルする -->
|
|
58
58
|
<key>ThrottleInterval</key>
|
|
@@ -12,7 +12,7 @@ Type=simple
|
|
|
12
12
|
# 行に、未 set なら空文字列に」展開する。
|
|
13
13
|
Environment=PATH=__PATH__
|
|
14
14
|
Environment=HOME=__HOME__
|
|
15
|
-
|
|
15
|
+
__NODE_EXTRA_CA_CERTS_SYSTEMD_LINE____HUB_AGENT_CHAT_SHARED_SYSTEMD_LINE__WorkingDirectory=__HOME__
|
|
16
16
|
ExecStart=__HUB_AGENT_BIN__ start
|
|
17
17
|
Restart=always
|
|
18
18
|
RestartSec=10
|