@rubytech/create-realagent-code 0.1.11 → 0.1.12

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": "@rubytech/create-realagent-code",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "Install Real Agent — Built for agents. By agents.",
5
5
  "bin": {
6
6
  "create-realagent-code": "./dist/index.js"
@@ -1,6 +1,7 @@
1
1
  // Enumerate ended sessions from claude's per-session JSONL transcripts on
2
- // disk. Claude writes `~/.claude/projects/<project-slug>/<id>.jsonl` for
3
- // every session it spawns (see `jsonl-path.ts` for the path derivation).
2
+ // disk. Claude writes `${CLAUDE_CONFIG_DIR or ~/.claude}/projects/<slug>/<id>.jsonl`
3
+ // for every session it spawns (see `jsonl-path.ts` for the path derivation,
4
+ // which now honours CLAUDE_CONFIG_DIR for brand isolation per Task 019).
4
5
  // After the manager restarts, every prior session lives in this directory
5
6
  // even though the in-memory SessionStore is empty. This enumerator surfaces
6
7
  // those files so the sidebar list survives restarts and the Resume action
@@ -10,9 +11,8 @@
10
11
  // size. Parsing is the UI's job via GET /:sessionId/log when the operator
11
12
  // opens a row.
12
13
  import { existsSync, readdirSync, statSync } from 'node:fs';
13
- import { homedir } from 'node:os';
14
14
  import { join } from 'node:path';
15
- import { projectSlugForCwd } from './jsonl-path.js';
15
+ import { claudeStateRoot, projectSlugForCwd } from './jsonl-path.js';
16
16
  /**
17
17
  * List every JSONL file under `~/.claude/projects/<slug>/` where `<slug>`
18
18
  * is derived from the manager's spawnCwd. Returns newest-first by mtime.
@@ -21,7 +21,7 @@ import { projectSlugForCwd } from './jsonl-path.js';
21
21
  */
22
22
  export function listJsonlSessions(spawnCwd) {
23
23
  const slug = projectSlugForCwd(spawnCwd);
24
- const projectsDir = join(homedir(), '.claude', 'projects', slug);
24
+ const projectsDir = join(claudeStateRoot(), 'projects', slug);
25
25
  if (!existsSync(projectsDir))
26
26
  return [];
27
27
  const out = [];
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-enumerator.js","sourceRoot":"","sources":["../src/jsonl-enumerator.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,4EAA4E;AAC5E,0EAA0E;AAC1E,4BAA4B;AAC5B,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,eAAe;AAEf,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAanD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAChE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,MAAM,GAAG,GAAwB,EAAE,CAAA;IACnC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,SAAQ;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAQ;QAC5C,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC7D,IAAI,CAAC,eAAe;YAAE,SAAQ;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,IAAI,CAAA;QACR,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,eAAe;YACf,SAAS;YACT,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,CAAC,IAAI;SACrB,CAAC,CAAA;IACJ,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"jsonl-enumerator.js","sourceRoot":"","sources":["../src/jsonl-enumerator.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qFAAqF;AACrF,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,4EAA4E;AAC5E,0EAA0E;AAC1E,4BAA4B;AAC5B,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,eAAe;AAEf,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAapE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAC7D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,MAAM,GAAG,GAAwB,EAAE,CAAA;IACnC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,SAAQ;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAQ;QAC5C,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC7D,IAAI,CAAC,eAAe;YAAE,SAAQ;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,IAAI,CAAA;QACR,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,eAAe;YACf,SAAS;YACT,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,CAAC,IAAI;SACrB,CAAC,CAAA;IACJ,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1,3 +1,4 @@
1
+ export declare function claudeStateRoot(env?: NodeJS.ProcessEnv): string;
1
2
  export declare function projectSlugForCwd(cwd: string): string;
2
3
  export declare function claudeSessionIdFromUrl(url: string): string | null;
3
4
  export declare function deriveJsonlPath(cwd: string, url: string): string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-path.d.ts","sourceRoot":"","sources":["../src/jsonl-path.ts"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvE"}
1
+ {"version":3,"file":"jsonl-path.d.ts","sourceRoot":"","sources":["../src/jsonl-path.ts"],"names":[],"mappings":"AAwBA,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE5E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvE"}
@@ -2,18 +2,27 @@
2
2
  //
3
3
  // Claude Code writes one JSONL file per session at
4
4
  //
5
- // ~/.claude/projects/<project-slug>/<claude-session-id>.jsonl
5
+ // ${CLAUDE_CONFIG_DIR or ~/.claude}/projects/<project-slug>/<claude-session-id>.jsonl
6
6
  //
7
7
  // where <project-slug> is the cwd at spawn time with every '/' replaced
8
8
  // by '-' (leading slash included, so /home/foo becomes -home-foo), and
9
9
  // <claude-session-id> is the UUID encoded into the /remote-control URL
10
10
  // after the `session_` prefix.
11
11
  //
12
+ // Task 019 set CLAUDE_CONFIG_DIR on the manager unit so brand isolation
13
+ // holds for credentials and onboarding state. claude honours that env var
14
+ // for ALL of its on-disk state, including the projects/ directory, so the
15
+ // JSONL path must read CLAUDE_CONFIG_DIR too. Hardcoding `~/.claude/`
16
+ // missed every JSONL written after Task 019 deployed.
17
+ //
12
18
  // The PRD names this file as the canonical per-session forensic surface;
13
19
  // the manager records the path on every spawn so the operator can
14
20
  // `tail -f` it directly.
15
21
  import { homedir } from 'node:os';
16
22
  import { join } from 'node:path';
23
+ export function claudeStateRoot(env = process.env) {
24
+ return env.CLAUDE_CONFIG_DIR ?? join(homedir(), '.claude');
25
+ }
17
26
  export function projectSlugForCwd(cwd) {
18
27
  return cwd.replace(/\//g, '-');
19
28
  }
@@ -26,6 +35,6 @@ export function deriveJsonlPath(cwd, url) {
26
35
  if (!claudeId)
27
36
  return null;
28
37
  const slug = projectSlugForCwd(cwd);
29
- return join(homedir(), '.claude', 'projects', slug, `${claudeId}.jsonl`);
38
+ return join(claudeStateRoot(), 'projects', slug, `${claudeId}.jsonl`);
30
39
  }
31
40
  //# sourceMappingURL=jsonl-path.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-path.js","sourceRoot":"","sources":["../src/jsonl-path.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,mDAAmD;AACnD,EAAE;AACF,kEAAkE;AAClE,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,+BAA+B;AAC/B,EAAE;AACF,yEAAyE;AACzE,kEAAkE;AAClE,yBAAyB;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACnD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,GAAW;IACtD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACnC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,QAAQ,QAAQ,CAAC,CAAA;AAC1E,CAAC"}
1
+ {"version":3,"file":"jsonl-path.js","sourceRoot":"","sources":["../src/jsonl-path.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,mDAAmD;AACnD,EAAE;AACF,0FAA0F;AAC1F,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,+BAA+B;AAC/B,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,sEAAsE;AACtE,sDAAsD;AACtD,EAAE;AACF,yEAAyE;AACzE,kEAAkE;AAClE,yBAAyB;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,eAAe,CAAC,MAAyB,OAAO,CAAC,GAAG;IAClE,OAAO,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACnD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,GAAW;IACtD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACnC,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,QAAQ,QAAQ,CAAC,CAAA;AACvE,CAAC"}