@the-librarian/cli 1.0.0-rc.5 → 1.0.0-rc.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +53 -7
  2. package/dist/archive.d.ts +15 -0
  3. package/dist/archive.d.ts.map +1 -0
  4. package/dist/archive.js +58 -0
  5. package/dist/archive.js.map +1 -0
  6. package/dist/harnesses/codex.d.ts +13 -0
  7. package/dist/harnesses/codex.d.ts.map +1 -1
  8. package/dist/harnesses/codex.js +210 -26
  9. package/dist/harnesses/codex.js.map +1 -1
  10. package/dist/harnesses/hermes.d.ts +1 -1
  11. package/dist/harnesses/hermes.d.ts.map +1 -1
  12. package/dist/harnesses/hermes.js +42 -23
  13. package/dist/harnesses/hermes.js.map +1 -1
  14. package/dist/harnesses/opencode.d.ts +12 -0
  15. package/dist/harnesses/opencode.d.ts.map +1 -1
  16. package/dist/harnesses/opencode.js +122 -5
  17. package/dist/harnesses/opencode.js.map +1 -1
  18. package/dist/paths.d.ts +16 -0
  19. package/dist/paths.d.ts.map +1 -1
  20. package/dist/paths.js +22 -0
  21. package/dist/paths.js.map +1 -1
  22. package/dist/runtime.d.ts +14 -0
  23. package/dist/runtime.d.ts.map +1 -1
  24. package/dist/runtime.js +230 -1
  25. package/dist/runtime.js.map +1 -1
  26. package/dist/server/admin.d.ts +31 -0
  27. package/dist/server/admin.d.ts.map +1 -0
  28. package/dist/server/admin.js +131 -0
  29. package/dist/server/admin.js.map +1 -0
  30. package/dist/server/autoupdate.d.ts +184 -0
  31. package/dist/server/autoupdate.d.ts.map +1 -0
  32. package/dist/server/autoupdate.js +794 -0
  33. package/dist/server/autoupdate.js.map +1 -0
  34. package/dist/server/boot.d.ts +51 -0
  35. package/dist/server/boot.d.ts.map +1 -0
  36. package/dist/server/boot.js +233 -0
  37. package/dist/server/boot.js.map +1 -0
  38. package/dist/server/deploy-state.d.ts +40 -0
  39. package/dist/server/deploy-state.d.ts.map +1 -0
  40. package/dist/server/deploy-state.js +89 -0
  41. package/dist/server/deploy-state.js.map +1 -0
  42. package/dist/server/docker.d.ts +53 -0
  43. package/dist/server/docker.d.ts.map +1 -0
  44. package/dist/server/docker.js +166 -0
  45. package/dist/server/docker.js.map +1 -0
  46. package/dist/server/down.d.ts +19 -0
  47. package/dist/server/down.d.ts.map +1 -0
  48. package/dist/server/down.js +62 -0
  49. package/dist/server/down.js.map +1 -0
  50. package/dist/server/index.d.ts +8 -0
  51. package/dist/server/index.d.ts.map +1 -0
  52. package/dist/server/index.js +50 -0
  53. package/dist/server/index.js.map +1 -0
  54. package/dist/server/logs.d.ts +50 -0
  55. package/dist/server/logs.d.ts.map +1 -0
  56. package/dist/server/logs.js +162 -0
  57. package/dist/server/logs.js.map +1 -0
  58. package/dist/server/preflight.d.ts +24 -0
  59. package/dist/server/preflight.d.ts.map +1 -0
  60. package/dist/server/preflight.js +58 -0
  61. package/dist/server/preflight.js.map +1 -0
  62. package/dist/server/redact.d.ts +2 -0
  63. package/dist/server/redact.d.ts.map +1 -0
  64. package/dist/server/redact.js +26 -0
  65. package/dist/server/redact.js.map +1 -0
  66. package/dist/server/status.d.ts +20 -0
  67. package/dist/server/status.d.ts.map +1 -0
  68. package/dist/server/status.js +103 -0
  69. package/dist/server/status.js.map +1 -0
  70. package/dist/server/up.d.ts +244 -0
  71. package/dist/server/up.d.ts.map +1 -0
  72. package/dist/server/up.js +758 -0
  73. package/dist/server/up.js.map +1 -0
  74. package/dist/server/update.d.ts +35 -0
  75. package/dist/server/update.d.ts.map +1 -0
  76. package/dist/server/update.js +313 -0
  77. package/dist/server/update.js.map +1 -0
  78. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/harnesses/hermes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/harnesses/hermes.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,15 @@
1
1
  import type { HarnessModule } from "./types.js";
2
+ export declare const OPENCODE_CAPTURE_PINNED_REF: string;
3
+ /**
4
+ * Fetches the OpenCode capture integration for a pinned ref and returns the
5
+ * absolute path to a directory whose contents ARE the integration (the equivalent
6
+ * of `integrations/opencode/`, i.e. holding `plugin/**`). The caller copies from
7
+ * there. Injectable so tests substitute a local fixture instead of the network.
8
+ */
9
+ export type CaptureFetcher = (ref: string) => Promise<string>;
10
+ /** Override the capture-adapter fetcher (tests inject a local-fixture fetcher). */
11
+ export declare function setOpencodeCaptureFetcher(next: CaptureFetcher): void;
12
+ /** Restore the default (network) capture-adapter fetcher (tests). */
13
+ export declare function resetOpencodeCaptureFetcher(): void;
2
14
  export declare const opencode: HarnessModule;
3
15
  //# sourceMappingURL=opencode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/harnesses/opencode.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;AA4E/D,eAAO,MAAM,QAAQ,EAAE,aAuEtB,CAAC"}
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/harnesses/opencode.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;AAyB/D,eAAO,MAAM,2BAA2B,QAAqB,CAAC;AA+E9D;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AA0B9D,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAEpE;AAED,qEAAqE;AACrE,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAiDD,eAAO,MAAM,QAAQ,EAAE,aAoFtB,CAAC"}
@@ -2,13 +2,18 @@
2
2
  //
3
3
  // OpenCode has no native install command, so we edit its global config
4
4
  // (`~/.config/opencode/opencode.json`) idempotently, preserving every key
5
- // the user already had. We add exactly two things:
5
+ // the user already had. We add three things:
6
6
  //
7
7
  // - `mcp.librarian`: a remote MCP block (type/url/enabled/headers). The
8
8
  // Authorization header references the env var, not the token value —
9
9
  // `Bearer {env:LIBRARIAN_AGENT_TOKEN}` — so the secret never lands in
10
10
  // the file (spec §9).
11
11
  // - the primer entry `<serverUrl>/primer.md` in the `instructions` array.
12
+ // - the per-turn auto-capture PLUGIN (spec 2026-06-16-harness-auto-capture,
13
+ // Phase 2A): the OpenCode integration's `plugin/` tree is fetched from the
14
+ // pinned release tarball into `~/.librarian/opencode-capture` (exactly like
15
+ // the Codex/Hermes adapters), and the entry's absolute path is registered in
16
+ // opencode.json's `plugin` array so OpenCode loads it at startup.
12
17
  //
13
18
  // We stamp a managed version marker (`mcp.librarian._librarianVersion`) so
14
19
  // detect can report a version, plus the EXACT primer URL we added
@@ -17,15 +22,39 @@
17
22
  // `mcp.librarian` present. uninstall removes only the keys/entries we added,
18
23
  // leaving the rest of the JSON intact.
19
24
  import fs from "node:fs";
25
+ import os from "node:os";
20
26
  import path from "node:path";
21
- import { opencodeConfigPath } from "../paths.js";
27
+ import { extractAdapterSubtree } from "../archive.js";
28
+ import { opencodeCaptureDir, opencodeConfigPath } from "../paths.js";
29
+ import { cliVersion } from "../version.js";
22
30
  const SERVER_ID = "librarian";
23
31
  const TOKEN_ENV_VAR = "LIBRARIAN_AGENT_TOKEN";
24
- const MANAGED_VERSION = "1.0.0";
32
+ // Stamp the CLI's own version into the managed block (DERIVED, not hardcoded)
33
+ // so `librarian status`/`update` can compare installed-vs-latest honestly. A
34
+ // static literal would freeze the label and — since semver ranks `1.0.0` above
35
+ // `1.0.0-rc.N` — make status report "no update" against a newer pre-release.
36
+ const MANAGED_VERSION = cliVersion();
25
37
  const VERSION_KEY = "_librarianVersion";
26
38
  // The exact primer instruction we added, stamped into the managed block so
27
39
  // uninstall can target only it (and not a foreign `…/primer.md`).
28
40
  const PRIMER_KEY = "_librarianPrimer";
41
+ // ── Auto-capture plugin wiring (spec 2026-06-16-harness-auto-capture, Phase 2A) ─
42
+ // The capture-adapter source (integrations/opencode/plugin/**) does NOT ship with
43
+ // the published installer (it ships only dist/), so — exactly like the
44
+ // Codex/Hermes adapters — we FETCH it from the pinned release tarball and copy it
45
+ // under ~/.librarian/opencode-capture; opencode.json's `plugin` array points at
46
+ // the entry there. SC1 (true e2e against a running OpenCode) is DEFERRED — there
47
+ // is no `opencode` CLI on the build machine to confirm a live turn.
48
+ // The pinned monorepo release we fetch the adapter from: the tag matching this
49
+ // CLI's own version. DERIVED (not hardcoded) so it can't drift — same rationale
50
+ // as the Codex/Hermes adapters' pinned refs.
51
+ export const OPENCODE_CAPTURE_PINNED_REF = `v${cliVersion()}`;
52
+ /** The capture plugin entry, relative to the fetched integration / install dir. */
53
+ const PLUGIN_ENTRY_REL = path.join("plugin", "librarian-capture.ts");
54
+ /** Absolute path of the installed capture-plugin entry (what `plugin[]` points at). */
55
+ function pluginEntryPath() {
56
+ return path.join(opencodeCaptureDir(), PLUGIN_ENTRY_REL);
57
+ }
29
58
  /** The primer instruction entry derived from the server URL. */
30
59
  function primerEntry(serverUrl) {
31
60
  return `${serverUrl.replace(/\/+$/, "")}/primer.md`;
@@ -74,6 +103,83 @@ function getMcpEntry(config) {
74
103
  }
75
104
  return undefined;
76
105
  }
106
+ /** The default fetcher: codeload tarball → `tar` extract → integration dir. */
107
+ const defaultCaptureFetcher = async (ref) => {
108
+ const url = `https://codeload.github.com/JimJafar/the-librarian/tar.gz/refs/tags/${ref}`;
109
+ const work = fs.mkdtempSync(path.join(os.tmpdir(), "librarian-opencode-fetch-"));
110
+ const tarball = path.join(work, "src.tar.gz");
111
+ const res = await fetch(url, { redirect: "error" });
112
+ if (!res.ok) {
113
+ throw new Error(`Failed to fetch OpenCode capture adapter (${ref}): HTTP ${res.status}`);
114
+ }
115
+ const buf = Buffer.from(await res.arrayBuffer());
116
+ fs.writeFileSync(tarball, buf);
117
+ // codeload nests the integration at `the-librarian-<ref>/integrations/opencode/**`;
118
+ // the returned dir holds its contents (`plugin/`), which is what the caller
119
+ // copies into ~/.librarian/.
120
+ try {
121
+ return await extractAdapterSubtree(tarball, work, "integrations/opencode");
122
+ }
123
+ catch (err) {
124
+ const msg = err instanceof Error ? err.message : String(err);
125
+ throw new Error(`Failed to extract OpenCode capture adapter: ${msg}`);
126
+ }
127
+ };
128
+ let captureFetcher = defaultCaptureFetcher;
129
+ /** Override the capture-adapter fetcher (tests inject a local-fixture fetcher). */
130
+ export function setOpencodeCaptureFetcher(next) {
131
+ captureFetcher = next;
132
+ }
133
+ /** Restore the default (network) capture-adapter fetcher (tests). */
134
+ export function resetOpencodeCaptureFetcher() {
135
+ captureFetcher = defaultCaptureFetcher;
136
+ }
137
+ /** Recursively copy a directory tree, overwriting any prior copy (idempotent). */
138
+ function copyDir(from, to) {
139
+ fs.rmSync(to, { recursive: true, force: true });
140
+ fs.mkdirSync(path.dirname(to), { recursive: true });
141
+ fs.cpSync(from, to, { recursive: true });
142
+ }
143
+ /**
144
+ * Fetch + copy the capture plugin under ~/.librarian/opencode-capture, then
145
+ * register the entry's absolute path in opencode.json's `plugin` array
146
+ * (idempotent — never a duplicate, preserving any foreign plugins). Mutates +
147
+ * returns `config` so the caller writes it once alongside the mcp/primer edits.
148
+ */
149
+ async function installCapturePlugin(config) {
150
+ const integrationDir = await captureFetcher(OPENCODE_CAPTURE_PINNED_REF);
151
+ copyDir(integrationDir, opencodeCaptureDir());
152
+ const entry = pluginEntryPath();
153
+ const existing = Array.isArray(config.plugin)
154
+ ? config.plugin.filter((x) => typeof x === "string")
155
+ : [];
156
+ if (!existing.includes(entry))
157
+ existing.push(entry);
158
+ config.plugin = existing;
159
+ return config;
160
+ }
161
+ /**
162
+ * Remove our capture wiring: strip ONLY our `plugin` entry (preserving foreigns,
163
+ * dropping an emptied array) and delete the scripts dir. Mutates `config`; returns
164
+ * whether anything changed so the caller can decide to write.
165
+ */
166
+ function uninstallCapturePlugin(config) {
167
+ let changed = false;
168
+ const ours = pluginEntryPath();
169
+ if (Array.isArray(config.plugin)) {
170
+ const before = config.plugin;
171
+ const kept = before.filter((x) => x !== ours);
172
+ if (kept.length !== before.length) {
173
+ changed = true;
174
+ if (kept.length === 0)
175
+ delete config.plugin;
176
+ else
177
+ config.plugin = kept;
178
+ }
179
+ }
180
+ fs.rmSync(opencodeCaptureDir(), { recursive: true, force: true });
181
+ return changed;
182
+ }
77
183
  export const opencode = {
78
184
  id: "opencode",
79
185
  displayName: "OpenCode",
@@ -100,12 +206,19 @@ export const opencode = {
100
206
  if (!existing.includes(entry))
101
207
  existing.push(entry);
102
208
  config.instructions = existing;
209
+ // plugin — fetch + copy the per-turn capture plugin and register its entry in
210
+ // the `plugin` array (idempotent). Mutates `config`; written once below.
211
+ await installCapturePlugin(config);
103
212
  writeConfig(config);
104
213
  },
105
214
  async uninstall() {
106
215
  const config = readConfig();
107
- if (!config)
108
- return; // nothing to do — no-op when absent
216
+ if (!config) {
217
+ // No config to edit — but still remove the fetched capture scripts dir so an
218
+ // uninstall always cleans ~/.librarian/opencode-capture (mirrors Codex).
219
+ fs.rmSync(opencodeCaptureDir(), { recursive: true, force: true });
220
+ return;
221
+ }
109
222
  let changed = false;
110
223
  // Read the EXACT primer entry we stamped before removing our block, so we
111
224
  // can target only our own instruction and never a foreign `…/primer.md`.
@@ -131,6 +244,10 @@ export const opencode = {
131
244
  config.instructions = kept;
132
245
  }
133
246
  }
247
+ // Remove our capture-plugin entry + delete the fetched scripts dir (always —
248
+ // the dir removal is independent of whether the config carried our entry).
249
+ if (uninstallCapturePlugin(config))
250
+ changed = true;
134
251
  if (changed)
135
252
  writeConfig(config);
136
253
  },
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/harnesses/opencode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/harnesses/opencode.ts"],"names":[],"mappings":"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"}
package/dist/paths.d.ts CHANGED
@@ -21,8 +21,24 @@ export declare function bashRcPath(home?: string): string;
21
21
  export declare function zshRcPath(home?: string): string;
22
22
  /** `~/.codex/config.toml` — Codex's MCP-server config. */
23
23
  export declare function codexConfigPath(home?: string): string;
24
+ /** `~/.codex/hooks.json` — Codex's lifecycle-hooks config (merged into, not owned). */
25
+ export declare function codexHooksPath(home?: string): string;
26
+ /**
27
+ * `~/.librarian/codex-capture` — where the Codex auto-capture adapter scripts are
28
+ * installed (fetched from the pinned release tarball, like the Hermes adapter).
29
+ * The merged `~/.codex/hooks.json` entries point their `${LIBRARIAN_CODEX_ROOT}`
30
+ * here. Kept under `~/.librarian/` so an uninstall can remove it cleanly.
31
+ */
32
+ export declare function codexCaptureDir(home?: string): string;
24
33
  /** `~/.config/opencode/opencode.json` — OpenCode's global config. */
25
34
  export declare function opencodeConfigPath(home?: string): string;
35
+ /**
36
+ * `~/.librarian/opencode-capture` — where the OpenCode auto-capture plugin is
37
+ * installed (fetched from the pinned release tarball, like the Codex/Hermes
38
+ * adapters). opencode.json's `plugin` array points at the entry under here. Kept
39
+ * under `~/.librarian/` so an uninstall can remove it cleanly.
40
+ */
41
+ export declare function opencodeCaptureDir(home?: string): string;
26
42
  /** `~/.hermes` — Hermes's home (plugins + config live under here). */
27
43
  export declare function hermesHomeDir(home?: string): string;
28
44
  /** `~/.hermes/plugins/librarian` — where the Hermes adapter is installed. */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAkBA,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE9D;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,mBAAmB;AACnB,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,kBAAkB;AAClB,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAkBA,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE9D;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,mBAAmB;AACnB,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,kBAAkB;AAClB,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD"}
package/dist/paths.js CHANGED
@@ -56,10 +56,32 @@ export function zshRcPath(home) {
56
56
  export function codexConfigPath(home) {
57
57
  return path.join(homeDir(home), ".codex", "config.toml");
58
58
  }
59
+ /** `~/.codex/hooks.json` — Codex's lifecycle-hooks config (merged into, not owned). */
60
+ export function codexHooksPath(home) {
61
+ return path.join(homeDir(home), ".codex", "hooks.json");
62
+ }
63
+ /**
64
+ * `~/.librarian/codex-capture` — where the Codex auto-capture adapter scripts are
65
+ * installed (fetched from the pinned release tarball, like the Hermes adapter).
66
+ * The merged `~/.codex/hooks.json` entries point their `${LIBRARIAN_CODEX_ROOT}`
67
+ * here. Kept under `~/.librarian/` so an uninstall can remove it cleanly.
68
+ */
69
+ export function codexCaptureDir(home) {
70
+ return path.join(librarianDir(home), "codex-capture");
71
+ }
59
72
  /** `~/.config/opencode/opencode.json` — OpenCode's global config. */
60
73
  export function opencodeConfigPath(home) {
61
74
  return path.join(homeDir(home), ".config", "opencode", "opencode.json");
62
75
  }
76
+ /**
77
+ * `~/.librarian/opencode-capture` — where the OpenCode auto-capture plugin is
78
+ * installed (fetched from the pinned release tarball, like the Codex/Hermes
79
+ * adapters). opencode.json's `plugin` array points at the entry under here. Kept
80
+ * under `~/.librarian/` so an uninstall can remove it cleanly.
81
+ */
82
+ export function opencodeCaptureDir(home) {
83
+ return path.join(librarianDir(home), "opencode-capture");
84
+ }
63
85
  /** `~/.hermes` — Hermes's home (plugins + config live under here). */
64
86
  export function hermesHomeDir(home) {
65
87
  return path.join(homeDir(home), ".hermes");
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,oEAAoE;AACpE,kEAAkE;AAClE,qEAAqE;AACrE,mEAAmE;AACnE,yCAAyC;AAEzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,sEAAsE;AACtE,uEAAuE;AACvE,2EAA2E;AAC3E,yEAAyE;AACzE,gCAAgC;AAChC,IAAI,YAAgC,CAAC;AAErC,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,iBAAiB;IAC/B,YAAY,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAa;IACnC,OAAO,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;AACrD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACjF,CAAC;AAED,mBAAmB;AACnB,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAC1E,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAChE,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -18,6 +18,20 @@ export interface RuntimeOptions {
18
18
  * token. Defaults to `process.env` in `runInstall`.
19
19
  */
20
20
  env?: NodeJS.ProcessEnv;
21
+ /**
22
+ * Whether the run is interactive (a TTY is attached). Gates `server up`'s
23
+ * best-effort offers (the Tailscale offer; the `0.0.0.0` confirm). Defaults
24
+ * to `process.stdin.isTTY` — a non-interactive run never silently exposes the
25
+ * server beyond localhost (it keeps `127.0.0.1`). Injectable for tests.
26
+ */
27
+ interactive?: boolean;
28
+ /**
29
+ * The host platform, defaulting to `process.platform`. Threads into the
30
+ * `server` ops that branch on it: preflight's daemon hint and boot
31
+ * persistence (Linux systemd vs the macOS deferred notice). Injectable so the
32
+ * darwin path is testable from a Linux host.
33
+ */
34
+ platform?: NodeJS.Platform;
21
35
  }
22
36
  /**
23
37
  * The CLI entrypoint. Dispatches to the command handlers and — crucially —
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI/E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAID;;;;;;GAMG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAY7F;AAgID,wBAAgB,KAAK,IAAI,MAAM,CAwB9B"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmB/E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAID;;;;;;GAMG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAY7F;AAoXD,wBAAgB,KAAK,IAAI,MAAM,CAyB9B"}
package/dist/runtime.js CHANGED
@@ -15,8 +15,17 @@ import { formatConfig, readConfig, redact, setConfig } from "./config.js";
15
15
  import { doctor } from "./doctor.js";
16
16
  import { detectShell } from "./env.js";
17
17
  import { allHarnesses } from "./harnesses/index.js";
18
- import { flagString, parseArgs } from "./parse-args.js";
18
+ import { flagBool, flagString, parseArgs } from "./parse-args.js";
19
19
  import { createPrompter, MissingValueError } from "./prompt.js";
20
+ import { runAdmin } from "./server/admin.js";
21
+ import { autoUpdateStatus, disableAutoUpdate, enableAutoUpdate, runAutoUpdate, uninstallAutoUpdate, } from "./server/autoupdate.js";
22
+ import { disableBoot, enableBoot } from "./server/boot.js";
23
+ import { runDown } from "./server/down.js";
24
+ import { serverUsage } from "./server/index.js";
25
+ import { runLogs } from "./server/logs.js";
26
+ import { serverStatus } from "./server/status.js";
27
+ import { runUp } from "./server/up.js";
28
+ import { runUpdate as runServerUpdate } from "./server/update.js";
20
29
  import { status } from "./status.js";
21
30
  import { cliVersion } from "./version.js";
22
31
  const PHASE_2_STUBS = new Set(["report", "self-update"]);
@@ -66,6 +75,9 @@ async function dispatch(argv, options) {
66
75
  // Diagnostic: exits 0 even when it flags problems.
67
76
  return ok(await doctor(options.home));
68
77
  }
78
+ if (command === "server") {
79
+ return runServerCommand(rest, options);
80
+ }
69
81
  if (PHASE_2_STUBS.has(command)) {
70
82
  return runPhase2Stub(command);
71
83
  }
@@ -139,6 +151,222 @@ async function runUpdateCommand(rest, options) {
139
151
  const outcome = await runUpdate(positionals, { home: options.home });
140
152
  return outcome.failed.length > 0 ? errOut(outcome.output) : ok(outcome.output);
141
153
  }
154
+ // --- server command group (self-host) ------------------------------------
155
+ /**
156
+ * `librarian server [subcommand]`. With no subcommand (or `--help`/`-h`) it
157
+ * prints the command surface (§4). Implemented: `up` (S2/S3), `down` / `logs` /
158
+ * `status` (S4), `update` (S5), `enable-boot` / `disable-boot` (S6), `admin`
159
+ * (S7a). An unknown subcommand errors with the surface. Preflight + the
160
+ * `docker.ts` seam (S1) back every container op.
161
+ */
162
+ async function runServerCommand(rest, options) {
163
+ const [subcommand, ...subRest] = rest;
164
+ if (!subcommand || subcommand === "--help" || subcommand === "-h") {
165
+ return ok(serverUsage());
166
+ }
167
+ if (subcommand === "up") {
168
+ return runServerUpCommand(subRest, options);
169
+ }
170
+ if (subcommand === "update") {
171
+ return runServerUpdateCommand(subRest, options);
172
+ }
173
+ if (subcommand === "down") {
174
+ return runServerDownCommand();
175
+ }
176
+ if (subcommand === "logs") {
177
+ return runServerLogsCommand(subRest);
178
+ }
179
+ if (subcommand === "status") {
180
+ return runServerStatusCommand(subRest, options);
181
+ }
182
+ if (subcommand === "enable-boot") {
183
+ return runServerEnableBootCommand(options);
184
+ }
185
+ if (subcommand === "disable-boot") {
186
+ return runServerDisableBootCommand(options);
187
+ }
188
+ if (subcommand === "autoupdate") {
189
+ return runServerAutoUpdateCommand(subRest, options);
190
+ }
191
+ if (subcommand === "admin") {
192
+ return runServerAdminCommand(subRest, options);
193
+ }
194
+ return err(`Unknown server subcommand: ${subcommand}\n\n${serverUsage()}`);
195
+ }
196
+ /**
197
+ * `librarian server up [flags]` (S2, localhost path). Parses the flags, builds
198
+ * a prompter (for the loop-closer env offer), and runs the orchestrated flow.
199
+ * A failure surfaces as one clean stderr line via the top-level catch — no
200
+ * stack trace, and the master key (carried only on the success stdout) never
201
+ * reaches an error path.
202
+ */
203
+ async function runServerUpCommand(rest, options) {
204
+ const { flags } = parseArgs(rest);
205
+ const prompter = options.prompter ?? createPrompter();
206
+ // Interactivity gates the best-effort offers (Tailscale; the `0.0.0.0`
207
+ // confirm). Explicit override wins; otherwise a TTY means interactive. A
208
+ // non-interactive run never silently exposes the server beyond localhost.
209
+ const interactive = options.interactive ?? Boolean(process.stdin.isTTY);
210
+ try {
211
+ const result = await runUp({
212
+ ref: flagString(flags.ref),
213
+ dir: flagString(flags.dir),
214
+ host: flagString(flags.host),
215
+ dataVolume: flagString(flags["data-volume"]),
216
+ dataDir: flagString(flags["data-dir"]),
217
+ enableBoot: flagBool(flags["enable-boot"]),
218
+ yes: flagBool(flags.yes),
219
+ }, {
220
+ home: options.home,
221
+ prompter,
222
+ interactive,
223
+ ...(options.platform ? { platform: options.platform } : {}),
224
+ });
225
+ return ok(result.output);
226
+ }
227
+ finally {
228
+ prompter.close();
229
+ }
230
+ }
231
+ /**
232
+ * `librarian server enable-boot` (S6). On Linux, installs + enables the systemd
233
+ * unit that starts the existing named container on boot (the unit references the
234
+ * container by name and carries NO secret). On macOS, prints the deferred notice
235
+ * and exits 0 (NOT an error). A real failure surfaces as one clean stderr line.
236
+ */
237
+ async function runServerEnableBootCommand(options) {
238
+ const result = await enableBoot(options.platform ? { platform: options.platform } : {});
239
+ return ok(result.output);
240
+ }
241
+ /**
242
+ * `librarian server disable-boot` (S6). On Linux, disables + removes the systemd
243
+ * unit and reloads systemd; safe if already disabled/absent (a teaching message,
244
+ * no crash). On macOS, prints the deferred notice and exits 0.
245
+ */
246
+ async function runServerDisableBootCommand(options) {
247
+ const result = await disableBoot(options.platform ? { platform: options.platform } : {});
248
+ return ok(result.output);
249
+ }
250
+ /**
251
+ * `librarian server autoupdate <enable|disable|uninstall|status> [--cadence …]`
252
+ * and the internal `--run` (T3). `enable` installs a host scheduler (systemd timer
253
+ * / cron fallback) that fires hourly and runs `--run`, plus writes enabled+cadence
254
+ * into the running server (so the dashboard reflects it). `disable` flips the
255
+ * setting off (timer stays). `uninstall` removes the timer/cron. `status` reports
256
+ * timer-installed + the server's enabled/cadence/last-run + up-to-date. `--run` is
257
+ * the wrapper the timer calls: it reads the settings from the running server,
258
+ * applies the due-check, and conditionally runs `server update` — FULLY fail-soft
259
+ * (never throws out of the timer). A real failure on the operator-facing verbs
260
+ * surfaces as one clean stderr line via the top-level catch.
261
+ */
262
+ async function runServerAutoUpdateCommand(subRest, options) {
263
+ const { positionals, flags } = parseArgs(subRest);
264
+ const platformOpt = options.platform ? { platform: options.platform } : {};
265
+ const base = { home: options.home, dir: flagString(flags.dir), ...platformOpt };
266
+ // `--run` is the timer's wrapper. It is fail-soft by construction (it never
267
+ // throws) and always exits 0 so the timer's unit never fails; its one-line
268
+ // outcome is its stdout.
269
+ if (flagBool(flags.run)) {
270
+ const result = await runAutoUpdate(base);
271
+ return ok(result.output);
272
+ }
273
+ const [verb] = positionals;
274
+ if (verb === "enable") {
275
+ const result = await enableAutoUpdate({ ...base, cadence: flagString(flags.cadence) });
276
+ return ok(result.output);
277
+ }
278
+ if (verb === "disable") {
279
+ return ok((await disableAutoUpdate(base)).output);
280
+ }
281
+ if (verb === "uninstall") {
282
+ return ok((await uninstallAutoUpdate(base)).output);
283
+ }
284
+ if (verb === "status" || verb === undefined) {
285
+ return ok((await autoUpdateStatus(base)).output);
286
+ }
287
+ return err(`Unknown autoupdate subcommand: ${verb}\n\n` +
288
+ "Usage: librarian server autoupdate <enable|disable|uninstall|status> [--cadence daily|weekly]");
289
+ }
290
+ /**
291
+ * `librarian server admin <backup|restore|auth|rebuild> [args…]` (S7a). Runs a
292
+ * curated admin verb inside the running container via
293
+ * `docker exec [-it] the-librarian the-librarian <verb> [args…]` (spec §7). The
294
+ * args are passed through VERBATIM — so we do NOT run them through `parseArgs`
295
+ * (that would reorder/strip flags); the in-container CLI parses them. An
296
+ * interactive run adds `-it` so the CLI can prompt (e.g. `restore`'s
297
+ * `--secret-key`). A rejected verb or a down container surfaces as one clean
298
+ * stderr line via the top-level catch, with no `docker exec`.
299
+ */
300
+ async function runServerAdminCommand(subRest, options) {
301
+ const interactive = options.interactive ?? Boolean(process.stdin.isTTY);
302
+ const result = await runAdmin(subRest, {
303
+ interactive,
304
+ ...(options.platform ? { platform: options.platform } : {}),
305
+ });
306
+ return ok(result.output);
307
+ }
308
+ /**
309
+ * `librarian server update [--ref <tag|main>] [--yes]` (S5). Re-pins the deploy
310
+ * dir to the resolved ref, rebuilds the image, recreates the container
311
+ * (PRESERVING the data volume), waits for health (rolling back on failure), and
312
+ * applies pending data-dir migrations. Idempotent: already at the ref + healthy
313
+ * → a clean no-op. The agent token is reused from the running container (clients
314
+ * keep working) and never reaches an error path or a file. A failure surfaces as
315
+ * one clean stderr line via the top-level catch (already secret-redacted).
316
+ */
317
+ async function runServerUpdateCommand(rest, options) {
318
+ const { flags } = parseArgs(rest);
319
+ const result = await runServerUpdate({
320
+ ref: flagString(flags.ref),
321
+ dir: flagString(flags.dir),
322
+ yes: flagBool(flags.yes),
323
+ home: options.home,
324
+ });
325
+ return ok(result.output);
326
+ }
327
+ /**
328
+ * `librarian server down` (S4). Stops the container — DATA SACRED (it issues
329
+ * only `docker stop`, never any `rm`/volume op). A not-running container is a
330
+ * friendly success; a real failure surfaces via the top-level catch as one
331
+ * clean stderr line. No flags today.
332
+ */
333
+ async function runServerDownCommand() {
334
+ const result = await runDown({});
335
+ return ok(result.output);
336
+ }
337
+ /**
338
+ * `librarian server logs [-f] [--service mcp|dashboard|all]` (S4). `-f` is a
339
+ * short flag the tiny parser treats as a positional, so we accept it there (or
340
+ * `--follow`). `--service` selects which of the two co-located services to show
341
+ * (filtered from the combined stream). A bad `--service` value is a teaching
342
+ * error via the top-level catch.
343
+ *
344
+ * A FOLLOW (`-f`) streams its lines straight to `process.stdout` LIVE inside
345
+ * `runLogs` (a tail never closes on its own — buffering it to return here is the
346
+ * old hang), so there's no captured `output` to print; we just propagate the
347
+ * followed process's exit code. The one-shot path returns its captured output.
348
+ */
349
+ async function runServerLogsCommand(rest) {
350
+ const { positionals, flags } = parseArgs(rest);
351
+ const follow = positionals.includes("-f") || flagBool(flags.follow) || flagBool(flags.f);
352
+ const result = await runLogs({ follow, service: flagString(flags.service) });
353
+ if (follow) {
354
+ // Lines already streamed live; pass through the follow's exit code.
355
+ return { stdout: "", stderr: "", exitCode: result.exitCode ?? 0 };
356
+ }
357
+ return ok(result.output);
358
+ }
359
+ /**
360
+ * `librarian server status` (S4). Reports running/health (from `docker inspect`)
361
+ * and the deployed-vs-latest badge (deploy-state ref vs `fetchLatestVersion`).
362
+ * Offline/unknown degrades to `unknown`/`?` and still exits 0 — only a missing
363
+ * docker (preflight) makes it non-zero, via the top-level catch.
364
+ */
365
+ async function runServerStatusCommand(rest, options) {
366
+ const { flags } = parseArgs(rest);
367
+ const result = await serverStatus({ home: options.home, dir: flagString(flags.dir) });
368
+ return ok(result.output);
369
+ }
142
370
  // --- Phase 2 stubs (friendly "coming later") -----------------------------
143
371
  function runPhase2Stub(command) {
144
372
  const detail = command === "report"
@@ -159,6 +387,7 @@ export function usage() {
159
387
  " status Live table of harness / installed / version",
160
388
  " doctor Diagnose token, server reachability, harness CLIs",
161
389
  " config Show or set MCP URL, token, server URL",
390
+ " server Self-host the Librarian server (run `server` for its commands)",
162
391
  " self-update Update the librarian CLI itself",
163
392
  " report Push this machine's state to the server",
164
393
  "",