pi-courier 0.1.39 → 0.1.40

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/dist/cli.js CHANGED
@@ -24,6 +24,7 @@ import { fileURLToPath } from "node:url";
24
24
  import { loadConfig } from "./config.js";
25
25
  import { buildLogFilterArgs } from "./log-filter.js";
26
26
  import { projectLabelOf } from "./project-labels.js";
27
+ import { busFailureHint, dirOwnerUid } from "./systemd-hint.js";
27
28
  import { suppressKnownWarnings } from "./warnings.js";
28
29
  suppressKnownWarnings();
29
30
  const SERVICE_NAME = "pi-courier";
@@ -142,17 +143,58 @@ function cmdEnable() {
142
143
  fs.mkdirSync(path.dirname(unitPath), { recursive: true });
143
144
  fs.writeFileSync(unitPath, unit);
144
145
  console.log(`📝 已写入 ${unitPath}`);
145
- runSystemctl(["daemon-reload"]);
146
- runSystemctl(["enable", "--now", SERVICE_NAME]);
146
+ // Issue #60: daemon-reload and enable --now are independent steps — failing
147
+ // one must not hide whether the other ran, and the user must never be left
148
+ // guessing whether the service is actually enabled.
149
+ const failed = [];
150
+ if (systemctlUser(["daemon-reload"]) !== 0)
151
+ failed.push("daemon-reload");
152
+ if (systemctlUser(["enable", "--now", SERVICE_NAME]) !== 0)
153
+ failed.push(`enable --now ${SERVICE_NAME}`);
154
+ if (failed.length > 0) {
155
+ console.error(`❌ 服务未能启用(unit 文件已写入,但 systemd 操作失败: ${failed.join(", ")})。`);
156
+ process.exit(1);
157
+ }
147
158
  console.log("✅ 服务已启用并启动(开机自启)。");
148
159
  console.log(` 日志: journalctl --user -u ${SERVICE_NAME} -f`);
149
160
  }
150
- function runSystemctl(args) {
151
- const res = spawnSync("systemctl", ["--user", ...args], { stdio: "inherit" });
152
- if (res.status !== 0) {
153
- console.error(`❌ systemctl ${args.join(" ")} 失败(退出码 ${res.status})`);
154
- process.exit(res.status ?? 1);
161
+ /** Issue #59: append the targeted `su`-trap hint when a systemctl failure
162
+ * looks like the bus-owner mismatch (XDG_RUNTIME_DIR inherited from another
163
+ * user via `su` without `-`). No-op for every other failure. */
164
+ function printBusHint(stderr) {
165
+ const hint = busFailureHint({
166
+ euid: typeof process.getuid === "function" ? process.getuid() : -1,
167
+ xdgRuntimeDir: process.env.XDG_RUNTIME_DIR,
168
+ xdgOwnerUid: dirOwnerUid(process.env.XDG_RUNTIME_DIR),
169
+ stderr,
170
+ });
171
+ if (hint)
172
+ console.error(hint);
173
+ }
174
+ /** Spawn `systemctl --user ...` with stderr captured (but still echoed).
175
+ * Shared by every caller so the su-trap hint always has stderr to inspect. */
176
+ function spawnSystemctlUser(args) {
177
+ const res = spawnSync("systemctl", ["--user", ...args], { stdio: ["inherit", "inherit", "pipe"] });
178
+ const stderr = res.stderr?.toString() ?? "";
179
+ if (stderr)
180
+ process.stderr.write(stderr);
181
+ return { status: res.status ?? 1, stderr };
182
+ }
183
+ /** Run `systemctl --user ...`, appending the targeted su-trap hint on
184
+ * failure (issue #59). Returns the exit code (0 = ok). */
185
+ function systemctlUser(args) {
186
+ const { status, stderr } = spawnSystemctlUser(args);
187
+ if (status !== 0) {
188
+ console.error(`❌ systemctl ${args.join(" ")} 失败(退出码 ${status})`);
189
+ printBusHint(stderr);
155
190
  }
191
+ return status;
192
+ }
193
+ /** systemctlUser + exit-on-failure — the historical runSystemctl contract. */
194
+ function runSystemctl(args) {
195
+ const code = systemctlUser(args);
196
+ if (code !== 0)
197
+ process.exit(code);
156
198
  }
157
199
  /** Project labels from the config (the single source `log-filter` matches against). */
158
200
  function projectLabels() {
@@ -169,7 +211,13 @@ function cmdService(action, args = []) {
169
211
  if (action === "logs" || action === "status") {
170
212
  // status first shows the unit itself (systemctl), then the log window.
171
213
  if (action === "status") {
172
- spawnSync("systemctl", ["--user", "status", SERVICE_NAME], { stdio: "inherit" });
214
+ const st = spawnSystemctlUser(["status", SERVICE_NAME]);
215
+ if (st.status !== 0) {
216
+ // Issue #61: the journal window below shows HISTORY — without this
217
+ // line a dead service's old logs read like "the service is running".
218
+ console.error(`⚠️ 服务状态查询失败(退出码 ${st.status})——以下为 journald 历史日志,不代表服务当前在运行。`);
219
+ printBusHint(st.stderr);
220
+ }
173
221
  }
174
222
  // Split args: `--level <lvl>` option vs positional project labels.
175
223
  let level = "info";
@@ -209,9 +257,10 @@ function cmdService(action, args = []) {
209
257
  return;
210
258
  }
211
259
  const cmd = ["systemctl", "--user", action, SERVICE_NAME];
212
- const res = spawnSync(cmd[0], cmd.slice(1), { stdio: "inherit" });
213
- if (res.status !== 0) {
214
- process.exit(res.status ?? 1);
260
+ const { status, stderr } = spawnSystemctlUser(cmd.slice(2));
261
+ if (status !== 0) {
262
+ printBusHint(stderr);
263
+ process.exit(status);
215
264
  }
216
265
  }
217
266
  function cmdDisable() {
@@ -221,7 +270,11 @@ function cmdDisable() {
221
270
  process.exit(1);
222
271
  }
223
272
  // Stop + remove from autostart, then delete the unit file (full uninstall).
224
- runSystemctl(["disable", "--now", SERVICE_NAME]);
273
+ if (systemctlUser(["disable", "--now", SERVICE_NAME]) !== 0) {
274
+ // Issue #60: the failure path must not delete the unit — say so explicitly.
275
+ console.error("ℹ️ unit 文件已保留,修复环境后可再次 `pi-courier disable` 或直接 `pi-courier enable`。");
276
+ process.exit(1);
277
+ }
225
278
  fs.rmSync(unitPath, { force: true });
226
279
  runSystemctl(["daemon-reload"]);
227
280
  console.log("✅ 服务已停止并卸载。以后要恢复:`pi-courier enable`(配置不受影响)。");
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,qBAAqB,EAAE,CAAC;AAExB,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,YAAY,GAAG,GAAG,YAAY,UAAU,CAAC;AAE/C,+DAA+D;AAC/D,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAyB,CAAC;QAClH,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB;IAC5B,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IACjG,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,0BAA0B,CAAC,CAAC;IAC7F,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;UAiBJ,CAAC,CAAC;AACZ,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,KAAK,UAAU,QAAQ;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,MAAM;AACN,8EAA8E;AAE9E,KAAK,UAAU,MAAM,CAAC,IAAc;IAClC,8EAA8E;IAC9E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACjD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IACjC,2EAA2E;IAC3E,wEAAwE;IACxE,yDAAyD;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,+DAA+D;IAC/D,yEAAyE;IACzE,6EAA6E;IAC7E,OAAO;;;;;;mBAMU,OAAO;mBACP,OAAO;;YAEd,OAAO,IAAI,OAAO;;;;;;;;CAQ7B,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,QAAQ,CAAC,IAAI,qDAAqD,CAAC,CAAC;IAC/G,CAAC;IAED,iFAAiF;IACjF,UAAU,EAAE,CAAC;IACb,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;IAElC,4EAA4E;IAC5E,2EAA2E;IAC3E,oDAAoD;IACpD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzE,IAAI,aAAa,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;IACxG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,uCAAuC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,+BAA+B,YAAY,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;iEAEiE;AACjE,SAAS,YAAY,CAAC,MAAe;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC;QAC1B,IAAI,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QAC1C,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACrD,MAAM;KACP,CAAC,CAAC;IACH,IAAI,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;+EAC+E;AAC/E,SAAS,kBAAkB,CAAC,IAAc;IACxC,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED;2DAC2D;AAC3D,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC;QACjE,YAAY,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,SAAS,YAAY,CAAC,IAAc;IAClC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,uFAAuF;AACvF,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;AACvH,CAAC;AAED,SAAS,UAAU,CAAC,MAAwD,EAAE,OAAiB,EAAE;IAC/F,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7C,uEAAuE;QACvE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,kBAAkB,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACxD,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpB,mEAAmE;gBACnE,qEAAqE;gBACrE,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,MAAM,kCAAkC,CAAC,CAAC;gBAC9E,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,mEAAmE;QACnE,IAAI,KAAK,GAAG,MAAM,CAAC;QACnB,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;;gBAC9C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAAC;QACjD,0EAA0E;QAC1E,kEAAkE;QAClE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAAC;YAChC,IAAI,EAAE,YAAY;YAClB,eAAe,EAAE,MAAM;YACvB,iBAAiB,EAAE,UAAU;YAC7B,KAAK;YACL,MAAM,EAAE,MAAM,KAAK,MAAM;YACzB,SAAS,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACvF,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACvE,2EAA2E;QAC3E,kEAAkE;QAClE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,4EAA4E;IAC5E,IAAI,aAAa,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,4EAA4E;QAC5E,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,eAAe,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAEnE,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACpG,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC;IACrD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,YAAY,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,uBAAuB;IACvB,IAAI,eAAe,EAAE,CAAC;QACpB,gEAAgE;QAChE,qEAAqE;QACrE,kEAAkE;QAClE,wEAAwE;QACxE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;QAC/E,sEAAsE;QACtE,yEAAyE;QACzE,sEAAsE;QACtE,oEAAoE;QACpE,IAAI,qBAAqB,EAAE,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;YACpC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,uDAAuD;QACvD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI;YACxB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;YACjB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;YACpB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACjB,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACrE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,6CAA6C;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,YAAY,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,MAAM,QAAQ,EAAE,CAAC;YACjB,MAAM;QACR,KAAK,KAAK;YACR,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM;QACR,KAAK,QAAQ;YACX,SAAS,EAAE,CAAC;YACZ,MAAM;QACR,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS;YACZ,UAAU,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtB,MAAM;QACR,KAAK,SAAS;YACZ,UAAU,EAAE,CAAC;YACb,MAAM;QACR,KAAK,QAAQ;YACX,SAAS,EAAE,CAAC;YACZ,MAAM;QACR,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,KAAK,EAAE,CAAC;YACR,MAAM;QACR,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;YAC9B,MAAM;QACR;YACE,KAAK,EAAE,CAAC;YACR,IAAI,GAAG;gBAAE,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/space.d.ts CHANGED
@@ -79,11 +79,12 @@ export declare function healTrustedPowerLevels(roomOps: RoomOps, store: ConfigSt
79
79
  * succeeded. The caller names the target (the /revoke effect or a stale
80
80
  * book entry) — this never picks victims on its own. */
81
81
  export declare function demoteTrustedUserEverywhere(roomOps: RoomOps, store: ConfigStore, namespacedUser: string): Promise<boolean>;
82
- /** Fire-once space invite for ONE namespaced user: space.invitedUsers records
83
- * every user we have invited (decliners included) so nobody is pinged twice.
84
- * A failed invite is NOT recorded — the startup ensure self-heals it.
85
- * Single implementation shared by the router's spaceInvite effect and the
86
- * ensure's self-heal pass. Returns true when the invite went out. */
82
+ /** Fire-once space invite for ONE namespaced user. Bookkeeping: space.
83
+ * invitedUsers — every user we have invited (decliners included) so nobody
84
+ * is pinged twice. A failed invite is NOT recorded — the startup ensure
85
+ * self-heals it. Single implementation shared by the router's spaceInvite
86
+ * effect and the ensure's self-heal pass. Returns true when the invite
87
+ * went out (or was already effectively done — issue #62). */
87
88
  export declare function inviteUserToSpaceOnce(roomOps: RoomOps, store: ConfigStore, namespacedUser: string): Promise<boolean>;
88
89
  /** Fire-once management-room invite for ONE namespaced user — the issue #43
89
90
  * twin of inviteUserToSpaceOnce: the management room is where /pmctl lives,
@@ -95,4 +96,8 @@ export declare function inviteUserToSpaceOnce(roomOps: RoomOps, store: ConfigSto
95
96
  * recorded — the startup ensure self-heals it. Returns true when the invite
96
97
  * went out. */
97
98
  export declare function inviteUserToManagementRoomOnce(roomOps: RoomOps, store: ConfigStore, namespacedUser: string): Promise<boolean>;
99
+ /** Issue #62: an M_FORBIDDEN "already in the room" rejection means the
100
+ * invite's goal is already met — the user is in. Treating it as a failure
101
+ * made the startup self-heal re-invite (and fail) on every boot. */
102
+ export declare function isAlreadyInRoomError(err: unknown): boolean;
98
103
  //# sourceMappingURL=space.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,EAAqB,KAAK,WAAW,EAAgD,MAAM,aAAa,CAAC;AAGhH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE;4CAC4C;AAC5C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkGpG;AAED;;;;;;;;;6BAS6B;AAC7B,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BnB;AAED;;;+CAG+C;AAC/C,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CAQ7D;AAED;;;;;;;gCAOgC;AAChC,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhG;AAED;;;;;;;;yDAQyD;AACzD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED;;;;sEAIsE;AACtE,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED;;;;;;;;gBAQgB;AAChB,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,EAAqB,KAAK,WAAW,EAAgD,MAAM,aAAa,CAAC;AAGhH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE;4CAC4C;AAC5C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkGpG;AAED;;;;;;;;;6BAS6B;AAC7B,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BnB;AAED;;;+CAG+C;AAC/C,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CAQ7D;AAED;;;;;;;gCAOgC;AAChC,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhG;AAED;;;;;;;;yDAQyD;AACzD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAyBD;;;;;8DAK8D;AAC9D,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;;;;;;gBAQgB;AAChB,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED;;qEAEqE;AACrE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG1D"}
package/dist/space.js CHANGED
@@ -234,11 +234,25 @@ export async function demoteTrustedUserEverywhere(roomOps, store, namespacedUser
234
234
  }
235
235
  return true;
236
236
  }
237
- /** Fire-once space invite for ONE namespaced user: space.invitedUsers records
238
- * every user we have invited (decliners included) so nobody is pinged twice.
239
- * A failed invite is NOT recorded — the startup ensure self-heals it.
240
- * Single implementation shared by the router's spaceInvite effect and the
241
- * ensure's self-heal pass. Returns true when the invite went out. */
237
+ /** Shared invite outcome (issue #62): whether the invite went out or the
238
+ * user was already in the room, the bookkeeping write is the same — one
239
+ * list key gets the user appended. Already-in-room logs at info with its
240
+ * own phrasing so the two cases stay distinguishable in the journal. */
241
+ function recordInvited(store, listKey, invited, namespacedUser, already, where) {
242
+ store.update({
243
+ space: { ...(store.get().space ?? {}), [listKey]: [...invited, namespacedUser] },
244
+ });
245
+ logger.info(already
246
+ ? `[space] ${namespacedUser} 已在${where},无需重复邀请`
247
+ : `[space] 信任用户已邀请进${where}: ${namespacedUser}`);
248
+ return true;
249
+ }
250
+ /** Fire-once space invite for ONE namespaced user. Bookkeeping: space.
251
+ * invitedUsers — every user we have invited (decliners included) so nobody
252
+ * is pinged twice. A failed invite is NOT recorded — the startup ensure
253
+ * self-heals it. Single implementation shared by the router's spaceInvite
254
+ * effect and the ensure's self-heal pass. Returns true when the invite
255
+ * went out (or was already effectively done — issue #62). */
242
256
  export async function inviteUserToSpaceOnce(roomOps, store, namespacedUser) {
243
257
  const spaceId = activeSpaceRoomId(store.get());
244
258
  if (!spaceId)
@@ -248,13 +262,14 @@ export async function inviteUserToSpaceOnce(roomOps, store, namespacedUser) {
248
262
  return false;
249
263
  try {
250
264
  await roomOps.inviteUser(spaceId, nativeMxid(namespacedUser));
251
- store.update({
252
- space: { ...(store.get().space ?? {}), roomId: spaceId, invitedUsers: [...invited, namespacedUser] },
253
- });
254
- logger.info(`[space] 信任用户已邀请进空间: ${namespacedUser}`);
255
- return true;
265
+ return recordInvited(store, "invitedUsers", invited, namespacedUser, false, "空间");
256
266
  }
257
267
  catch (err) {
268
+ if (isAlreadyInRoomError(err)) {
269
+ // Issue #62: the invite's goal state is already reached — record it so
270
+ // the startup self-heal stops re-inviting (and failing) on every boot.
271
+ return recordInvited(store, "invitedUsers", invited, namespacedUser, true, "空间");
272
+ }
258
273
  logger.warn(`[space] 邀请 ${namespacedUser} 进空间失败(下次启动自愈): ${err.message}`);
259
274
  return false;
260
275
  }
@@ -280,15 +295,22 @@ export async function inviteUserToManagementRoomOnce(roomOps, store, namespacedU
280
295
  return false;
281
296
  try {
282
297
  await roomOps.inviteUser(managementRoomId, nativeMxid(namespacedUser));
283
- store.update({
284
- space: { ...(store.get().space ?? {}), managementInvitedUsers: [...invited, namespacedUser] },
285
- });
286
- logger.info(`[space] 信任用户已邀请进管理房间: ${namespacedUser}`);
287
- return true;
298
+ return recordInvited(store, "managementInvitedUsers", invited, namespacedUser, false, "管理房间");
288
299
  }
289
300
  catch (err) {
301
+ if (isAlreadyInRoomError(err)) {
302
+ // Issue #62: same as the space twin — already in the room means done.
303
+ return recordInvited(store, "managementInvitedUsers", invited, namespacedUser, true, "管理房间");
304
+ }
290
305
  logger.warn(`[space] 邀请 ${namespacedUser} 进管理房间失败(下次启动自愈): ${err.message}`);
291
306
  return false;
292
307
  }
293
308
  }
309
+ /** Issue #62: an M_FORBIDDEN "already in the room" rejection means the
310
+ * invite's goal is already met — the user is in. Treating it as a failure
311
+ * made the startup self-heal re-invite (and fail) on every boot. */
312
+ export function isAlreadyInRoomError(err) {
313
+ const message = err instanceof Error ? err.message : String(err);
314
+ return /M_FORBIDDEN/.test(message) && /already in the room/i.test(message);
315
+ }
294
316
  //# sourceMappingURL=space.js.map
package/dist/space.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Targeted hint for the `su`-without-`-` trap (issue #59, observed live on
3
+ * the 2026-09-06 deployment): switching users with `su <user>` inherits the
4
+ * ORIGINAL user's XDG_RUNTIME_DIR, so every `systemctl --user` then tries to
5
+ * connect to another user's bus socket (mode 0700) and fails with
6
+ * "Operation not permitted ... to connect to bus of other user". The stock
7
+ * error never says what to do — this hint does.
8
+ */
9
+ /** Decision input; xdgOwnerUid comes from dirOwnerUid (null = unresolvable). */
10
+ export interface BusFailureHintInput {
11
+ euid: number;
12
+ xdgRuntimeDir?: string;
13
+ xdgOwnerUid?: number | null;
14
+ stderr?: string;
15
+ }
16
+ /** Pure decision: is this systemctl failure the bus-owner trap, and if so,
17
+ * what should the user do? Returns null for everything else — the generic
18
+ * error output already printed is then the whole story.
19
+ *
20
+ * Two corroborated shapes (issue #59 acceptance: unrelated failures like a
21
+ * missing unit must NOT get this hint):
22
+ * - XDG_RUNTIME_DIR is owned by another user AND stderr shows the EPERM
23
+ * connect failure (on such a machine connect always fails first);
24
+ * - stderr itself carries the connect signature (XDG_RUNTIME_DIR unset or
25
+ * unresolvable — e.g. a shell without a full login session). */
26
+ export declare function busFailureHint(input: BusFailureHintInput): string | null;
27
+ /** Owning uid of dir, or null when it cannot be resolved (missing/unreachable). */
28
+ export declare function dirOwnerUid(dir: string | undefined): number | null;
29
+ //# sourceMappingURL=systemd-hint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemd-hint.d.ts","sourceRoot":"","sources":["../src/systemd-hint.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;oEASoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CA6BxE;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAOlE"}
@@ -0,0 +1,51 @@
1
+ import * as fs from "node:fs";
2
+ /** Pure decision: is this systemctl failure the bus-owner trap, and if so,
3
+ * what should the user do? Returns null for everything else — the generic
4
+ * error output already printed is then the whole story.
5
+ *
6
+ * Two corroborated shapes (issue #59 acceptance: unrelated failures like a
7
+ * missing unit must NOT get this hint):
8
+ * - XDG_RUNTIME_DIR is owned by another user AND stderr shows the EPERM
9
+ * connect failure (on such a machine connect always fails first);
10
+ * - stderr itself carries the connect signature (XDG_RUNTIME_DIR unset or
11
+ * unresolvable — e.g. a shell without a full login session). */
12
+ export function busFailureHint(input) {
13
+ const { euid, xdgRuntimeDir, xdgOwnerUid, stderr } = input;
14
+ const stderrText = typeof stderr === "string" ? stderr : undefined;
15
+ const stderrPointsAtBus = !!stderrText &&
16
+ (/connect to bus of other user/i.test(stderrText) ||
17
+ (/user scope bus/i.test(stderrText) && /not permitted/i.test(stderrText)));
18
+ const ownerMismatchWithEperm = typeof xdgOwnerUid === "number" &&
19
+ xdgOwnerUid !== euid &&
20
+ !!stderrText &&
21
+ /not permitted|EPERM/i.test(stderrText);
22
+ if (!stderrPointsAtBus && !ownerMismatchWithEperm)
23
+ return null;
24
+ const tail = [
25
+ " 常见原因:用 `su <用户>`(不带 -)切换用户时继承了原用户的环境,或当前 shell 缺少完整登录会话。",
26
+ " 解决:export XDG_RUNTIME_DIR=/run/user/$(id -u) 后重试,或改用 `su - <用户>` 重新切换;",
27
+ " 若 /run/user/$(id -u) 不存在,请以该用户登录一次,或由 root 执行 loginctl enable-linger <用户>。",
28
+ ];
29
+ if (typeof xdgOwnerUid === "number" && xdgOwnerUid !== euid) {
30
+ return [
31
+ `💡 检测到 XDG_RUNTIME_DIR=${xdgRuntimeDir ?? "(未设置)"}(属主 uid ${xdgOwnerUid})指向其他用户的会话总线,而当前用户是 uid ${euid}。`,
32
+ ...tail,
33
+ ].join("\n");
34
+ }
35
+ return [
36
+ `💡 未能连接到当前用户的 systemd 会话总线(XDG_RUNTIME_DIR=${xdgRuntimeDir ?? "未设置"})。`,
37
+ ...tail,
38
+ ].join("\n");
39
+ }
40
+ /** Owning uid of dir, or null when it cannot be resolved (missing/unreachable). */
41
+ export function dirOwnerUid(dir) {
42
+ if (!dir)
43
+ return null;
44
+ try {
45
+ return fs.statSync(dir).uid;
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ //# sourceMappingURL=systemd-hint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemd-hint.js","sourceRoot":"","sources":["../src/systemd-hint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAmB9B;;;;;;;;;oEASoE;AACpE,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC3D,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,iBAAiB,GACrB,CAAC,CAAC,UAAU;QACZ,CAAC,+BAA+B,CAAC,IAAI,CAAC,UAAU,CAAC;YAC/C,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,sBAAsB,GAC1B,OAAO,WAAW,KAAK,QAAQ;QAC/B,WAAW,KAAK,IAAI;QACpB,CAAC,CAAC,UAAU;QACZ,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,iBAAiB,IAAI,CAAC,sBAAsB;QAAE,OAAO,IAAI,CAAC;IAE/D,MAAM,IAAI,GAAG;QACX,6DAA6D;QAC7D,2EAA2E;QAC3E,+EAA+E;KAChF,CAAC;IACF,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC5D,OAAO;YACL,0BAA0B,aAAa,IAAI,OAAO,WAAW,WAAW,2BAA2B,IAAI,GAAG;YAC1G,GAAG,IAAI;SACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,8CAA8C,aAAa,IAAI,KAAK,IAAI;QACxE,GAAG,IAAI;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAC,GAAuB;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-courier",
3
- "version": "0.1.39",
3
+ "version": "0.1.40",
4
4
  "description": "Run pi coding agent from Matrix. Slash commands, skills and prompts fully work from messengers via the RPC protocol.",
5
5
  "type": "module",
6
6
  "main": "dist/standalone.js",