shadok-ai 0.17.42 → 0.17.43

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.
@@ -124,21 +124,34 @@ export declare function rewriteCronCheckHome(check: string, oldHome: string, new
124
124
  */
125
125
  export declare const SHADOK_INTERNAL_DIRS: readonly string[];
126
126
  /**
127
- * The `~/.shadok-ai/<dir>` script directories a cron `check` references under the
128
- * OLD commons HOME (`oldHome`, i.e. `/root`). These are operator/agent-authored
129
- * monitoring scripts dropped straight under the data dir — a DIFFERENT location
130
- * from `~/.claude/skills` (#419) that the HOME move also stranded: a dropped `main`
131
- * guard cannot traverse `/root` (0700), so `/root/.shadok-ai/checks/x.sh` is
132
- * unreadable exactly like a `/root/.claude` one, and the guard dies `check-failed`
133
- * in silence.
127
+ * The `~/.claude/<dir>` subtrees NEVER carried by the heal. `.credentials` is a
128
+ * FILE, not a dir, so it can't match anyway — the real entries are the big
129
+ * already-migrated trees (`migChownTreeToCommons` copies `projects`/`todos`/
130
+ * `shell-snapshots`/`file-history`) and the caches (`statsig`/`plugins`/`ide`):
131
+ * re-copying them would be wasteful, and they are not scripts a guard runs.
132
+ * `skills` and `scripts` (and any custom dir) are deliberately NOT here — those
133
+ * are where an agent keeps the monitoring scripts it authored.
134
+ */
135
+ export declare const CLAUDE_INTERNAL_DIRS: readonly string[];
136
+ /**
137
+ * The home-rooted `<top>/<sub>` script directories a cron `check` names, that the
138
+ * HOME move off `/root` stranded. A dropped `main` guard cannot traverse `/root`
139
+ * (0700), so ANY `/root/<top>/<sub>/…` path it names — a script or its sibling
140
+ * state file — is unreachable and the guard dies `check-failed` in silence. #419
141
+ * relocated only `.claude/skills`; this generalises the discovery so `.claude/scripts`
142
+ * (seen on the biosense cockpit), every `.shadok-ai/<dir>` (the dogfood instance),
143
+ * and any future script dir are all carried across — the trap is not one directory,
144
+ * it is "any `/root` path a check names".
134
145
  *
135
- * Returns the distinct RELATIVE prefixes (`".shadok-ai/checks"`, …), deduped and
136
- * ready to feed `rewriteCronCheckHome`'s extra prefixes and `path.join`. Only the
137
- * `<dir>/<something>` shape is matched (a segment that is a DIRECTORY, with a path
138
- * component after it), so a top-level FILE (`/root/.shadok-ai/secrets.json`) is
139
- * never caught; a dir on `SHADOK_INTERNAL_DIRS` is refused outright. Pure.
146
+ * Matches an absolute `oldHome` reference AND a `$HOME`/`${HOME}`/`~`-relative one
147
+ * (a portable check still needs its dir to EXIST in the new HOME). Only the 2-level
148
+ * `<top>/<sub>` unit is relocated, with `<top>` restricted to the two script homes
149
+ * and `<sub>` refused when it is shadok's own state/credentials or a big
150
+ * already-migrated `.claude` tree (`RELOCATABLE_TOPS`). Returns distinct RELATIVE
151
+ * prefixes (`".claude/scripts"`, `".shadok-ai/checks"`, …), ready to feed
152
+ * `rewriteCronCheckHome` and `path.join`. Pure.
140
153
  */
141
- export declare function shadokScriptDirs(check: string, oldHome: string): string[];
154
+ export declare function strandedCheckDirs(check: string, oldHome: string): string[];
142
155
  /**
143
156
  * The running agents to respawn, as session ids — deduped, order preserved so
144
157
  * the caller cycles them ONE AT A TIME (the OAuth refresh-token race,
@@ -161,30 +161,61 @@ export const SHADOK_INTERNAL_DIRS = [
161
161
  "wt",
162
162
  ];
163
163
  /**
164
- * The `~/.shadok-ai/<dir>` script directories a cron `check` references under the
165
- * OLD commons HOME (`oldHome`, i.e. `/root`). These are operator/agent-authored
166
- * monitoring scripts dropped straight under the data dir — a DIFFERENT location
167
- * from `~/.claude/skills` (#419) that the HOME move also stranded: a dropped `main`
168
- * guard cannot traverse `/root` (0700), so `/root/.shadok-ai/checks/x.sh` is
169
- * unreadable exactly like a `/root/.claude` one, and the guard dies `check-failed`
170
- * in silence.
164
+ * The `~/.claude/<dir>` subtrees NEVER carried by the heal. `.credentials` is a
165
+ * FILE, not a dir, so it can't match anyway — the real entries are the big
166
+ * already-migrated trees (`migChownTreeToCommons` copies `projects`/`todos`/
167
+ * `shell-snapshots`/`file-history`) and the caches (`statsig`/`plugins`/`ide`):
168
+ * re-copying them would be wasteful, and they are not scripts a guard runs.
169
+ * `skills` and `scripts` (and any custom dir) are deliberately NOT here — those
170
+ * are where an agent keeps the monitoring scripts it authored.
171
+ */
172
+ export const CLAUDE_INTERNAL_DIRS = [
173
+ "projects",
174
+ "todos",
175
+ "shell-snapshots",
176
+ "file-history",
177
+ "statsig",
178
+ "plugins",
179
+ "ide",
180
+ ];
181
+ /** The two home subtrees under which an agent/operator legitimately drops a
182
+ * script a cron guard runs. An ALLOWLIST of TOPS (safe — scripts never live
183
+ * anywhere else under the HOME) combined with a per-top DENYLIST of SUBS (so a
184
+ * custom-named script dir still heals). */
185
+ const RELOCATABLE_TOPS = {
186
+ ".claude": CLAUDE_INTERNAL_DIRS,
187
+ ".shadok-ai": SHADOK_INTERNAL_DIRS,
188
+ };
189
+ /**
190
+ * The home-rooted `<top>/<sub>` script directories a cron `check` names, that the
191
+ * HOME move off `/root` stranded. A dropped `main` guard cannot traverse `/root`
192
+ * (0700), so ANY `/root/<top>/<sub>/…` path it names — a script or its sibling
193
+ * state file — is unreachable and the guard dies `check-failed` in silence. #419
194
+ * relocated only `.claude/skills`; this generalises the discovery so `.claude/scripts`
195
+ * (seen on the biosense cockpit), every `.shadok-ai/<dir>` (the dogfood instance),
196
+ * and any future script dir are all carried across — the trap is not one directory,
197
+ * it is "any `/root` path a check names".
171
198
  *
172
- * Returns the distinct RELATIVE prefixes (`".shadok-ai/checks"`, …), deduped and
173
- * ready to feed `rewriteCronCheckHome`'s extra prefixes and `path.join`. Only the
174
- * `<dir>/<something>` shape is matched (a segment that is a DIRECTORY, with a path
175
- * component after it), so a top-level FILE (`/root/.shadok-ai/secrets.json`) is
176
- * never caught; a dir on `SHADOK_INTERNAL_DIRS` is refused outright. Pure.
199
+ * Matches an absolute `oldHome` reference AND a `$HOME`/`${HOME}`/`~`-relative one
200
+ * (a portable check still needs its dir to EXIST in the new HOME). Only the 2-level
201
+ * `<top>/<sub>` unit is relocated, with `<top>` restricted to the two script homes
202
+ * and `<sub>` refused when it is shadok's own state/credentials or a big
203
+ * already-migrated `.claude` tree (`RELOCATABLE_TOPS`). Returns distinct RELATIVE
204
+ * prefixes (`".claude/scripts"`, `".shadok-ai/checks"`, …), ready to feed
205
+ * `rewriteCronCheckHome` and `path.join`. Pure.
177
206
  */
178
- export function shadokScriptDirs(check, oldHome) {
207
+ export function strandedCheckDirs(check, oldHome) {
179
208
  if (!check || !oldHome)
180
209
  return [];
181
- const re = new RegExp(escapeRegExp(oldHome + "/.shadok-ai/") + "([^/\\s'\"]+)/", "g");
210
+ const homeAlt = [escapeRegExp(oldHome), "\\$HOME", "\\$\\{HOME\\}", "~"].join("|");
211
+ const tops = Object.keys(RELOCATABLE_TOPS).map((t) => escapeRegExp(t)).join("|");
212
+ const re = new RegExp("(?:" + homeAlt + ")/(" + tops + ")/([^/\\s'\"]+)/", "g");
182
213
  const out = new Set();
183
214
  for (let m = re.exec(check); m; m = re.exec(check)) {
184
- const seg = m[1];
185
- if (SHADOK_INTERNAL_DIRS.includes(seg))
215
+ const [, top, sub] = m;
216
+ if (RELOCATABLE_TOPS[top]?.includes(sub))
186
217
  continue;
187
- out.add(".shadok-ai/" + seg);
218
+ out.add(top + "/" + sub);
188
219
  }
189
220
  return [...out];
190
221
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-groups.js","sourceRoot":"","sources":["../src/migrate-groups.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate-groups.js","sourceRoot":"","sources":["../src/migrate-groups.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -34,7 +34,7 @@ import { readGroundAt } from "./ground.js";
34
34
  import { homeGreetingBrief } from "./greeting.js";
35
35
  import { ensureSshIdentity } from "./ssh.js";
36
36
  import { accountsEnabled, deploymentMode, probeCanProvision } from "./capability.js";
37
- import { migrationPlan, runMigration, respawnPlan, commonsOsUser, COMMONS_USER, MIGRATION_MARKER_FILE, rewriteCronCheckHome, shadokScriptDirs, } from "./migrate-groups.js";
37
+ import { migrationPlan, runMigration, respawnPlan, commonsOsUser, COMMONS_USER, MIGRATION_MARKER_FILE, rewriteCronCheckHome, strandedCheckDirs, } from "./migrate-groups.js";
38
38
  import { relayOAuthCallback } from "./oauth-relay.js";
39
39
  import { openBrowser } from "./open-browser.js";
40
40
  import { parseSkillMeta, prepromptParts, prepromptFingerprint, stalenessReasons, LEGACY_FINGERPRINT, } from "./preprompt.js";
@@ -3024,13 +3024,16 @@ async function ensureGroupsProvisioned() {
3024
3024
  * crons stuck, "son script est sous /root"). New agents are fine (their HOME is
3025
3025
  * already `/home/main`); this is the one-way carry for what predates the move.
3026
3026
  *
3027
- * Two kinds of stranded location, both relocated here and then repointed:
3028
- * 1. `~/.claude/skills` — the subtree `migChownTreeToCommons` skipped, where an
3029
- * agent keeps the custom monitoring scripts it authored (#419).
3030
- * 2. `~/.shadok-ai/<dir>` — operator/agent script dirs dropped straight under the
3031
- * data dir (`checks`, `scripts`, `marketing`, …), discovered from the cron
3032
- * checks that name them. `shadokScriptDirs` denylists shadok's own state and
3033
- * credential stores, so a key/secret dir is NEVER copied into `/home/main`.
3027
+ * What is relocated here and then repointed:
3028
+ * 1. `~/.claude/skills` — ALWAYS, the subtree `migChownTreeToCommons` skipped,
3029
+ * where an agent keeps the custom skills it authored even when no guard names
3030
+ * them (#419).
3031
+ * 2. Every home-rooted `<top>/<sub>` script dir a cron check NAMES — `.claude/scripts`
3032
+ * (seen on the biosense cockpit), any `.shadok-ai/<dir>` (the dogfood instance),
3033
+ * and any future one — discovered by `strandedCheckDirs`. The trap is not one
3034
+ * directory, it is "any `/root` path a check names". Its denylist refuses shadok's
3035
+ * own state/credential stores and the big already-migrated `.claude` trees, so a
3036
+ * key/secret dir is NEVER copied into `/home/main`.
3034
3037
  *
3035
3038
  * Runs on EVERY capable boot, independent of the migration marker (the twin of
3036
3039
  * the reprovision reconciler above), so an ALREADY-migrated instance self-heals on
@@ -3068,14 +3071,16 @@ async function healCommonsStrandedScripts() {
3068
3071
  catch (e) {
3069
3072
  console.error(`heal: reading crons failed (best-effort): ${e?.message ?? e}`);
3070
3073
  }
3071
- // The ~/.shadok-ai/<dir> script dirs the guards name, deduped (never a
3072
- // credential/state dir — shadokScriptDirs denylists those).
3074
+ // The home-rooted <top>/<sub> script dirs the guards name (.claude/scripts,
3075
+ // .shadok-ai/<dir>, …), deduped — never a credential/state dir, strandedCheckDirs
3076
+ // denylists those.
3073
3077
  const scriptDirs = [
3074
- ...new Set(crons.flatMap((c) => (c.check ? shadokScriptDirs(c.check, oldHome) : []))),
3078
+ ...new Set(crons.flatMap((c) => (c.check ? strandedCheckDirs(c.check, oldHome) : []))),
3075
3079
  ];
3076
- // 1) Relocate the skills subtree the migration skipped, plus every discovered
3077
- // ~/.shadok-ai script dir. Each copy is independent and best-effort.
3078
- for (const rel of [path.join(".claude", "skills"), ...scriptDirs]) {
3080
+ // 1) Relocate ~/.claude/skills unconditionally (the subtree the migration skipped,
3081
+ // where an agent's custom skills live even when no guard names them), plus every
3082
+ // discovered script dir. Deduped; each copy is independent and best-effort.
3083
+ for (const rel of [...new Set([path.join(".claude", "skills"), ...scriptDirs])]) {
3079
3084
  try {
3080
3085
  await copyTree(rel);
3081
3086
  }
@@ -3083,8 +3088,10 @@ async function healCommonsStrandedScripts() {
3083
3088
  console.error(`heal: relocating commons ~/${rel} failed (best-effort): ${e?.message ?? e}`);
3084
3089
  }
3085
3090
  }
3086
- // 2) Repoint this instance's cron guards: the .claude base AND the relocated
3087
- // ~/.shadok-ai script dirs. A /root path that was NOT relocated stays intact.
3091
+ // 2) Repoint this instance's cron guards: the .claude base (covers any .claude/*
3092
+ // path) AND every relocated .shadok-ai/<dir>. A /root path NOT relocated (a
3093
+ // denylisted or unknown dir) stays intact — surfaced as a check-failed, not
3094
+ // silently repointed to a place nothing was copied.
3088
3095
  try {
3089
3096
  let changed = false;
3090
3097
  for (const c of crons) {