@cocorograph/hub-agent 0.5.25 → 0.5.26

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocorograph/hub-agent",
3
- "version": "0.5.25",
3
+ "version": "0.5.26",
4
4
  "description": "Hub Hosted Cockpit のローカル常駐 agent。Hub と outbound WSS で接続し、ローカルの tmux/pty を中継する。",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -41,11 +41,43 @@ async function readTemplate(name) {
41
41
  return fs.readFile(p, "utf-8")
42
42
  }
43
43
 
44
+ function escapeXmlText(s) {
45
+ // plist の <string> 中身を埋めるための最小エスケープ。
46
+ // パスに XML 特殊文字が入っているケースは現実にはほぼ無いが、念のため。
47
+ return String(s)
48
+ .replaceAll("&", "&amp;")
49
+ .replaceAll("<", "&lt;")
50
+ .replaceAll(">", "&gt;")
51
+ }
52
+
44
53
  function expandTemplate(text, hubAgentBin) {
54
+ // hub-agent デーモンの runtime 環境に必須な追加 env を、各プラットフォームの
55
+ // 起動ファイル形式 (plist / systemd) に合わせて差し込むためのプレースホルダ展開。
56
+ //
57
+ // NODE_EXTRA_CA_CERTS: install.sh の TLS pre-flight で OS Keychain → PEM
58
+ // エクスポート経由で設定された場合 (e.g. MITM 環境)、シェル profile の export
59
+ // だけだと launchd / systemd には届かない。install-service 実行時の env に
60
+ // 残っている値を plist/unit に永続化する。未 set なら関連行を空に置換するので
61
+ // 通常環境への副作用はゼロ。
62
+ const nodeExtraCa = process.env.NODE_EXTRA_CA_CERTS || ""
63
+ let plistEntry = ""
64
+ let systemdLine = ""
65
+ if (nodeExtraCa) {
66
+ // plist 側: EnvironmentVariables dict の inside に <key>...</key><string>...</string>
67
+ // 2 行を追加 (インデント 4 スペースは既存 PATH/HOME と揃える)。末尾に \n を付けて
68
+ // テンプレートの "__...__\n" を綺麗に消費する。
69
+ plistEntry =
70
+ ` <key>NODE_EXTRA_CA_CERTS</key>\n` +
71
+ ` <string>${escapeXmlText(nodeExtraCa)}</string>\n`
72
+ // systemd 側: Environment=KEY=VALUE の 1 行。末尾 \n でテンプレ "__...__\n" を吸収。
73
+ systemdLine = `Environment=NODE_EXTRA_CA_CERTS=${nodeExtraCa}\n`
74
+ }
45
75
  return text
46
76
  .replaceAll("__HUB_AGENT_BIN__", hubAgentBin)
47
77
  .replaceAll("__HOME__", os.homedir())
48
78
  .replaceAll("__PATH__", process.env.PATH || "/usr/local/bin:/usr/bin:/bin")
79
+ .replaceAll("__NODE_EXTRA_CA_CERTS_PLIST_ENTRY__", plistEntry)
80
+ .replaceAll("__NODE_EXTRA_CA_CERTS_SYSTEMD_LINE__", systemdLine)
49
81
  }
50
82
 
51
83
  async function ensureDir(p) {
@@ -31,13 +31,21 @@
31
31
  <key>WorkingDirectory</key>
32
32
  <string>__HOME__</string>
33
33
 
34
+ <!--
35
+ EnvironmentVariables は launchd 起動時の env を完全に置き換える (ログイン
36
+ シェルや .zprofile の export を継承しない)。シェル profile に export した
37
+ cert 系 env 等を agent デーモンに届けるには plist に明示する必要がある。
38
+ 下の placeholder 行は install-service 実行時に expandTemplate() が「env が
39
+ set されていれば NODE_EXTRA_CA_CERTS entry に、未 set なら空文字列に」展開する。
40
+ 未 set 時は当該行ごと消えるので、通常環境への副作用はゼロ。
41
+ -->
34
42
  <key>EnvironmentVariables</key>
35
43
  <dict>
36
44
  <key>PATH</key>
37
45
  <string>__PATH__</string>
38
46
  <key>HOME</key>
39
47
  <string>__HOME__</string>
40
- </dict>
48
+ __NODE_EXTRA_CA_CERTS_PLIST_ENTRY__ </dict>
41
49
 
42
50
  <!-- KeepAlive で過剰再起動した時に 10 秒スロットルする -->
43
51
  <key>ThrottleInterval</key>
@@ -5,9 +5,14 @@ Wants=network-online.target
5
5
 
6
6
  [Service]
7
7
  Type=simple
8
+ # Environment は systemd ユニット起動時の env を明示指定する (ログインシェルや
9
+ # .bashrc / .profile の export を継承しないため、agent デーモンに必要な env は
10
+ # ここに書く必要がある)。下の placeholder 行は install-service 実行時に
11
+ # expandTemplate() が「env が set されていれば Environment=NODE_EXTRA_CA_CERTS=...
12
+ # 行に、未 set なら空文字列に」展開する。
8
13
  Environment=PATH=__PATH__
9
14
  Environment=HOME=__HOME__
10
- WorkingDirectory=__HOME__
15
+ __NODE_EXTRA_CA_CERTS_SYSTEMD_LINE__WorkingDirectory=__HOME__
11
16
  ExecStart=__HUB_AGENT_BIN__ start
12
17
  Restart=always
13
18
  RestartSec=10