@lore-co/cli 0.2.33 → 0.2.35

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 (43) hide show
  1. package/README.md +17 -8
  2. package/dist/capture-scope.d.ts +8 -1
  3. package/dist/capture-scope.d.ts.map +1 -1
  4. package/dist/capture-scope.js +14 -2
  5. package/dist/capture-scope.js.map +1 -1
  6. package/dist/cli.d.ts +8 -3
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +111 -19
  9. package/dist/cli.js.map +1 -1
  10. package/dist/connect-project.d.ts.map +1 -1
  11. package/dist/connect-project.js +3 -3
  12. package/dist/connect-project.js.map +1 -1
  13. package/dist/connections.d.ts +3 -0
  14. package/dist/connections.d.ts.map +1 -1
  15. package/dist/connections.js +20 -1
  16. package/dist/connections.js.map +1 -1
  17. package/dist/generated-assets.d.ts +5 -5
  18. package/dist/generated-assets.js +5 -5
  19. package/dist/generic-mcp.d.ts +4 -1
  20. package/dist/generic-mcp.d.ts.map +1 -1
  21. package/dist/generic-mcp.js +6 -2
  22. package/dist/generic-mcp.js.map +1 -1
  23. package/dist/mcp-config.d.ts +1 -1
  24. package/dist/mcp-config.d.ts.map +1 -1
  25. package/dist/mcp-config.js +6 -1
  26. package/dist/mcp-config.js.map +1 -1
  27. package/dist/runtime-redaction.d.ts.map +1 -1
  28. package/dist/runtime-redaction.js +53 -3
  29. package/dist/runtime-redaction.js.map +1 -1
  30. package/dist/runtime.d.ts +15 -1
  31. package/dist/runtime.d.ts.map +1 -1
  32. package/dist/runtime.js +70 -9
  33. package/dist/runtime.js.map +1 -1
  34. package/dist/self-host.d.ts +2 -2
  35. package/dist/self-host.d.ts.map +1 -1
  36. package/dist/self-host.js +5 -4
  37. package/dist/self-host.js.map +1 -1
  38. package/dist/skills.d.ts +5 -0
  39. package/dist/skills.d.ts.map +1 -1
  40. package/dist/skills.js +18 -4
  41. package/dist/skills.js.map +1 -1
  42. package/dist/update.js +3 -3
  43. package/package.json +4 -4
package/README.md CHANGED
@@ -28,9 +28,12 @@ lore doctor
28
28
 
29
29
  The package requires Node.js 22 or newer and installs the `lore` command.
30
30
 
31
+ For IBM Bob, run `lore connect --login --folder . --agent bob`, then restart
32
+ Bob. Bob Shell reads the same settings.
33
+
31
34
  In Connect, **This project** asks your agent to confirm the current folder. **Choose another project** offers a native folder picker, GitHub selection, and manual path entry. The CLI also supports `--current-project` (interactive confirmation), `--choose-folder` (a picker on this machine), and `--repository github.com/owner/repo` alongside a folder choice to verify its Git origin. Cancelling or choosing a mismatched checkout stops setup before recording. GitHub selection does not change workspace policy.
32
35
 
33
- Run setup from the project you want to record: `--folder .` includes that folder and its subfolders. Repeat `--folder <path>` for additional folders, or choose `--all-projects` explicitly. New connections stay paused without a capture choice; reconnecting without one preserves your existing rules. Existing exclusions remain in effect. Add `--no-capture` (or run `lore capture off`) for retrieval-only mode: context, Guard, `lore ask`, and `lore remember` without automatic turn recording; `lore capture on` turns it back on. Use `lore scope check <folder>` to verify. Learning repository scope controls where knowledge applies and is separate from capture scope.
36
+ Run setup from the project you want to record: `--folder .` includes that folder and its subfolders. In a Git worktree, Lore records the main checkout, which covers all of its worktrees. Run it again in each project you want Lore in: every `--folder` adds to the saved folders, `--replace-folders` records only in the folders given, and `--all-projects` records everywhere the workspace allows. New connections stay paused without a capture choice; reconnecting without one preserves your existing rules. Existing exclusions remain in effect. Add `--no-capture` (or run `lore capture off`) for retrieval-only mode: context, Guard, `lore ask`, and `lore remember` without automatic turn recording; `lore capture on` turns it back on. Use `lore scope check <folder>` to verify. Learning repository scope controls where knowledge applies and is separate from capture scope.
34
37
 
35
38
  ### Windows
36
39
 
@@ -111,7 +114,7 @@ incompatible servers leave local configuration untouched. Either
111
114
  `LORE_WORKSPACE_TOKEN` or the legacy `LORE_TOKEN` can provide the token; if
112
115
  both are set, they must match.
113
116
  New token connections default to `https://api.uselore.co` and use
114
- `https://uselore.co` for receipt links. Self-hosted deployments must pass
117
+ `https://app.uselore.co` for receipt links. Self-hosted deployments must pass
115
118
  `--url` and may pass `--dashboard-url`; reconnecting without a new token keeps
116
119
  the existing self-hosted endpoints.
117
120
  Manual `--token` and environment credentials remain supported for CI and
@@ -137,7 +140,7 @@ steps left for you:
137
140
 
138
141
  Next
139
142
  1. Restart the agents above.
140
- 2. In ~/acme, ask your agent anything, then check https://uselore.co/connect.
143
+ 2. In ~/acme, ask your agent anything, then check https://app.uselore.co/connect.
141
144
 
142
145
  Try: "Lore, has anything like this come up before?" · /recap to save a session
143
146
  ```
@@ -282,7 +285,8 @@ your agent afterwards. Setup replaces the previous `lore-remember` skill with
282
285
  Claude Code also supports `/lore`; Codex supports `$lore`.
283
286
 
284
287
  The skill is installed in `~/.agents/skills/lore` for Codex, Cursor, Copilot and
285
- OpenCode, and in the configured Claude directory's `skills/lore`. Cowork and
288
+ OpenCode, in the configured Claude directory's `skills/lore`, and in
289
+ `~/.bob/skills/lore` for IBM Bob, where `/recap` is also available. Cowork and
286
290
  Copilot bundles include it too. Polytoken does not receive a skill installation.
287
291
 
288
292
  Installation paths follow the official [Codex](https://developers.openai.com/codex/skills),
@@ -321,6 +325,11 @@ OpenCode now also registers the Lore MCP server (`~/.copilot/mcp-config.json`,
321
325
  `mcp.lore` in `opencode.json`) so the agent has its tools. See
322
326
  [Lore as an agent](../../docs/guides/lore-agent.md).
323
327
 
328
+ VS Code 1.143 and later runs Copilot chat through the Copilot CLI, which loads
329
+ the Copilot CLI hooks together with a repository's `.github/hooks`. On a machine
330
+ with Copilot CLI connected, the `copilot-vscode` repository hook stands down so
331
+ each prompt reaches Lore once, and `lore doctor` says so.
332
+
324
333
  ## Save knowledge manually
325
334
 
326
335
  ```sh
@@ -427,7 +436,7 @@ content-free `guard_check` audit event.
427
436
 
428
437
  ```sh
429
438
  lore update
430
- lore update --version v0.2.33
439
+ lore update --version v0.2.35
431
440
  ```
432
441
 
433
442
  `update` resolves the latest release to an exact tag, or uses the exact
@@ -450,7 +459,7 @@ receive timestamped backups, and customer-edited skill files are preserved with
450
459
  a warning. The report is by agent and lists only what you need to do:
451
460
 
452
461
  ```text
453
- ✓ Lore 0.2.33 is installed
462
+ ✓ Lore 0.2.35 is installed
454
463
  ✓ Updated Lore for Claude Code and Codex
455
464
 
456
465
  Next
@@ -823,7 +832,7 @@ same-repository, non-draft pull requests bearing the corresponding
823
832
  `lore:codex-review` or `lore:devin-review` label.
824
833
 
825
834
  Generated jobs require a published standalone binary release and default to
826
- `treadiehq/lore-releases` at `v0.2.33`. Set `LORE_CLI_REPOSITORY` to the publicly
835
+ `treadiehq/lore-releases` at `v0.2.35`. Set `LORE_CLI_REPOSITORY` to the publicly
827
836
  readable `owner/repository` and `LORE_CLI_VERSION` to an existing release tag
828
837
  when using another release source.
829
838
 
@@ -870,7 +879,7 @@ MCP exposes the read-only `share_lore` tool with `kind`, `id`, and optional
870
879
  resource using the current credential before returning a link. They do not
871
880
  publish content or grant access; recipients must sign in to the same workspace.
872
881
 
873
- Hosted connections use `https://uselore.co`. For self-hosting, connect with
882
+ Hosted connections use `https://app.uselore.co`. For self-hosting, connect with
874
883
  `--dashboard-url https://lore.example.com`, set `LORE_DASHBOARD_URL` for MCP,
875
884
  or pass `dashboardUrl` to the SDK. The URL must be an HTTP(S) origin.
876
885
 
@@ -1,11 +1,18 @@
1
- import type { DirectoryRules } from "./directory-policy.js";
1
+ import { type DirectoryRules } from "./directory-policy.js";
2
2
  export interface CaptureScopeOptions {
3
3
  folders?: readonly string[];
4
4
  allProjects?: boolean;
5
5
  repository?: string;
6
+ /** --replace-folders: record only in the folders given, dropping the saved ones. Without it, --folder adds to them. */
7
+ replaceFolders?: boolean;
6
8
  }
7
9
  /** Validate the choice on the recording machine before installing any hooks. */
8
10
  export declare function captureDirectories(options: CaptureScopeOptions, home: string, cwd?: string): Promise<DirectoryRules | null | undefined>;
11
+ /**
12
+ * A folder in a linked Git worktree becomes the same folder in its main
13
+ * checkout, whose rule covers every worktree, not just this one.
14
+ */
15
+ export declare function checkoutFolder(path: string, home: string): Promise<string>;
9
16
  /** Ignore inherited Git location overrides: inspect the selected folder itself. */
10
17
  export declare function captureGit(folder: string, args: string[]): Promise<string>;
11
18
  export declare function verifyCaptureRepository(folder: string, repository: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"capture-scope.d.ts","sourceRoot":"","sources":["../src/capture-scope.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAAG,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AAEhH,gFAAgF;AAChF,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC,CAgBpJ;AAID,mFAAmF;AACnF,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F"}
1
+ {"version":3,"file":"capture-scope.d.ts","sourceRoot":"","sources":["../src/capture-scope.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uHAAuH;IACvH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,gFAAgF;AAChF,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC,CAkBpJ;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAID,mFAAmF;AACnF,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F"}
@@ -4,12 +4,15 @@ import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
5
5
  import { repositoryIdentity } from "@lore-co/core";
6
6
  import { systemCommand } from "@lore-co/core/system-command";
7
+ import { linkedWorktreeSourcePath } from "./directory-policy.js";
7
8
  /** Validate the choice on the recording machine before installing any hooks. */
8
9
  export async function captureDirectories(options, home, cwd = process.cwd()) {
9
10
  if (options.repository !== undefined && (!/^github\.com\/[^/]+\/[^/]+$/u.test(repositoryIdentity(options.repository) ?? "") || options.allProjects || !options.folders?.length))
10
11
  throw new Error("--repository needs a GitHub repository and a local --folder or --choose-folder selection.");
11
12
  if (options.allProjects && options.folders !== undefined)
12
13
  throw new Error("Use --folder or --all-projects, not both.");
14
+ if (options.replaceFolders && (options.allProjects || options.folders === undefined))
15
+ throw new Error("--replace-folders needs --folder, --current-project, or --choose-folder.");
13
16
  if (options.allProjects)
14
17
  return null;
15
18
  if (options.folders === undefined)
@@ -24,12 +27,21 @@ export async function captureDirectories(options, home, cwd = process.cwd()) {
24
27
  const path = await realpath(expanded).catch(() => { throw new Error(`Folder does not exist: ${folder}`); });
25
28
  if (!(await stat(path)).isDirectory())
26
29
  throw new Error(`Not a folder: ${folder}`);
30
+ const chosen = await checkoutFolder(path, home);
27
31
  if (options.repository !== undefined)
28
- await verifyCaptureRepository(path, options.repository);
29
- include.push(path);
32
+ await verifyCaptureRepository(chosen, options.repository);
33
+ include.push(chosen);
30
34
  }
31
35
  return { include: [...new Set(include)], exclude: [] };
32
36
  }
37
+ /**
38
+ * A folder in a linked Git worktree becomes the same folder in its main
39
+ * checkout, whose rule covers every worktree, not just this one.
40
+ */
41
+ export async function checkoutFolder(path, home) {
42
+ const checkout = await linkedWorktreeSourcePath(path, home);
43
+ return checkout === undefined ? path : await realpath(checkout).catch(() => resolve(checkout));
44
+ }
33
45
  const runGit = promisify(execFile);
34
46
  /** Ignore inherited Git location overrides: inspect the selected folder itself. */
35
47
  export async function captureGit(folder, args) {
@@ -1 +1 @@
1
- {"version":3,"file":"capture-scope.js","sourceRoot":"","sources":["../src/capture-scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-scope.js","sourceRoot":"","sources":["../src/capture-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAuB,MAAM,uBAAuB,CAAC;AAUtF,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA4B,EAAE,IAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACtG,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,8BAA8B,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;IAC9R,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACvH,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAClL,IAAI,OAAO,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAChI,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC9K,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7H,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5G,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IAC7D,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEnC,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,IAAc;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACpN,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAc,EAAE,UAAkB;IAC9E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7G,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,iEAAiE,CAAC,CAAC;AACvL,CAAC"}
package/dist/cli.d.ts CHANGED
@@ -10,10 +10,12 @@ import { type OutputStyle } from "./terminal-output.js";
10
10
  import { type ReliabilityStoreInspection } from "./reliability-store.js";
11
11
  export declare const LORE_OPENCODE_PLUGIN = "@lore-co/opencode";
12
12
  export declare const DEFAULT_HOSTED_API_URL = "https://api.uselore.co";
13
- export declare const DEFAULT_HOSTED_DASHBOARD_URL = "https://uselore.co";
14
- declare const CONFIGURED_AGENT_NAMES: readonly ["claude", "codex", "copilot-cli", "copilot-vscode", "cursor", "opencode", "polytoken"];
13
+ export declare const DEFAULT_HOSTED_DASHBOARD_URL = "https://app.uselore.co";
14
+ declare const CONFIGURED_AGENT_NAMES: readonly ["bob", "claude", "codex", "copilot-cli", "copilot-vscode", "cursor", "opencode", "polytoken"];
15
15
  export type ConfiguredAgentName = (typeof CONFIGURED_AGENT_NAMES)[number];
16
16
  export type ConnectAgentName = ConfiguredAgentName | "copilot" | "cowork" | "devin" | "generic" | "t3code";
17
+ /** Agents whose hooks file takes Claude Code's `hooks` shape. */
18
+ type ClaudeShapedHookAgent = Extract<CommandHookAgentName, "bob" | "claude" | "codex" | "copilot-vscode">;
17
19
  /** Capture mode of a connection: absent means on. */
18
20
  export declare function captureEnabled(config: Pick<ConnectorConfig, "capture"> | null | undefined): boolean;
19
21
  export interface LorePaths {
@@ -31,6 +33,7 @@ export interface LorePaths {
31
33
  runtimePackage: string;
32
34
  state: string;
33
35
  queue: string;
36
+ bobSettings: string;
34
37
  codexHooks: string;
35
38
  copilotCliHooks: string;
36
39
  copilotVscodeHooks: string;
@@ -87,7 +90,7 @@ interface ExternalSurfaceStatus {
87
90
  capabilities: DeepReadonly<ReliabilityIntegrationManifest["capabilities"]>;
88
91
  }
89
92
  export declare function getLorePaths(home?: string, environment?: NodeJS.ProcessEnv, cwd?: string): LorePaths;
90
- export declare function mergeLoreHooks(input: Record<string, unknown>, agent: CommandHookAgentName, paths: LorePaths, capture?: boolean): Record<string, unknown>;
93
+ export declare function mergeLoreHooks(input: Record<string, unknown>, agent: ClaudeShapedHookAgent, paths: LorePaths, capture?: boolean): Record<string, unknown>;
91
94
  export declare function removeLoreHooks(input: Record<string, unknown>): Record<string, unknown>;
92
95
  export declare function countLoreHooks(input: Record<string, unknown>): number;
93
96
  export declare function mergeLoreCursorMcp(input: unknown, paths: LorePaths): Record<string, unknown>;
@@ -192,6 +195,8 @@ export interface ConnectResult {
192
195
  mode: "on" | "off";
193
196
  folders: string[] | null;
194
197
  excludedFolders: string[];
198
+ /** Set when this run chose folders for a saved connection: its folders before, null for all projects. */
199
+ previousFolders?: string[] | null;
195
200
  };
196
201
  skillFiles: string[];
197
202
  /** Lore agent definitions installed for the connected harnesses. */
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -22,7 +22,7 @@ import { basename, dirname, resolve, sep } from "node:path";
22
22
  import { homedir, hostname, platform } from "node:os";
23
23
  import { setTimeout as delay } from "node:timers/promises";
24
24
  import { fileURLToPath, pathToFileURL } from "node:url";
25
- import { CLAUDE_RELIABILITY_INTEGRATION, CODEX_RELIABILITY_INTEGRATION, COPILOT_CLI_RELIABILITY_INTEGRATION, COPILOT_CLOUD_MCP_RELIABILITY_INTEGRATION, COPILOT_VSCODE_PREVIEW_RELIABILITY_INTEGRATION, CreateDeviceAuthorizationResponseSchema, CURSOR_RELIABILITY_INTEGRATION, NATIVE_CODING_AGENT_NAMES, OPENCODE_RELIABILITY_INTEGRATION, OperationalMetricsResponseSchema, PollDeviceAuthorizationResponseSchema, POLYTOKEN_RELIABILITY_INTEGRATION, RELIABILITY_INTEGRATION_CONTRACT_VERSION, ReliabilityInvocationRecordSchema, WorkspaceIdentityResponseSchema, canonicalJson, deriveReliabilityInvocationHealth, isNativeCodingAgent, } from "@lore-co/core";
25
+ import { BOB_RELIABILITY_INTEGRATION, CLAUDE_RELIABILITY_INTEGRATION, CODEX_RELIABILITY_INTEGRATION, COPILOT_CLI_RELIABILITY_INTEGRATION, COPILOT_CLOUD_MCP_RELIABILITY_INTEGRATION, COPILOT_VSCODE_PREVIEW_RELIABILITY_INTEGRATION, CreateDeviceAuthorizationResponseSchema, CURSOR_RELIABILITY_INTEGRATION, NATIVE_CODING_AGENT_NAMES, OPENCODE_RELIABILITY_INTEGRATION, OperationalMetricsResponseSchema, PollDeviceAuthorizationResponseSchema, POLYTOKEN_RELIABILITY_INTEGRATION, RELIABILITY_INTEGRATION_CONTRACT_VERSION, ReliabilityInvocationRecordSchema, WorkspaceIdentityResponseSchema, canonicalJson, deriveReliabilityInvocationHealth, isNativeCodingAgent, } from "@lore-co/core";
26
26
  import { runHook, } from "./runtime.js";
27
27
  import { readInvocationHealthWriteInput, runInvocationHealthWrite, } from "./invocation-health-writer.js";
28
28
  import { runAskCommand } from "./ask.js";
@@ -56,10 +56,11 @@ import { runSelfHostCommand } from "./self-host.js";
56
56
  import { ReliabilityStore, ReliabilityStoreError, integrationInvocationStateKey, } from "./reliability-store.js";
57
57
  import { IS_STANDALONE_BINARY, LORE_VERSION } from "./version.js";
58
58
  import { openNoFollow } from "@lore-co/core/no-follow";
59
+ import { HOSTED_LORE_DASHBOARD_URL, currentDashboardUrl } from "@lore-co/sdk";
59
60
  const LORE_OWNER_ARGUMENT = "--owner lore";
60
61
  export const LORE_OPENCODE_PLUGIN = "@lore-co/opencode";
61
62
  export const DEFAULT_HOSTED_API_URL = "https://api.uselore.co";
62
- export const DEFAULT_HOSTED_DASHBOARD_URL = "https://uselore.co";
63
+ export const DEFAULT_HOSTED_DASHBOARD_URL = HOSTED_LORE_DASHBOARD_URL;
63
64
  const CONFIGURED_AGENT_NAMES = NATIVE_CODING_AGENT_NAMES;
64
65
  /** Agents that only need the saved credential: no hooks or agent config are written. */
65
66
  const CREDENTIAL_ONLY_AGENTS = ["cowork", "devin"];
@@ -69,6 +70,11 @@ const HOOK_EVENTS = [
69
70
  "Stop",
70
71
  "SessionEnd",
71
72
  ];
73
+ /** IBM Bob's lifecycle hooks: the Claude Code shape, without SessionEnd. */
74
+ const BOB_HOOK_EVENTS = ["UserPromptSubmit", "PreToolUse", "Stop"];
75
+ function claudeShapedHookEvents(agent) {
76
+ return agent === "bob" ? BOB_HOOK_EVENTS : HOOK_EVENTS;
77
+ }
72
78
  /**
73
79
  * Hook events that exist only to record turns. Retrieval-only mode leaves them
74
80
  * uninstalled, so the agent never hands a response to Lore at all.
@@ -85,6 +91,11 @@ export function captureEnabled(config) {
85
91
  }
86
92
  /** Tools the Context Guard PreToolUse hook cares about (regex matcher). */
87
93
  const GUARD_TOOL_MATCHER = "Edit|Write|MultiEdit|NotebookEdit|ApplyPatch|apply_patch|edit|write|patch|str_replace_editor|Bash|bash|Shell|shell|exec_command|shell_command|run_terminal_cmd";
94
+ /** IBM Bob's file-writing and command tools (extension 2.2.3); Bob matches the regex against the tool name. */
95
+ const BOB_GUARD_TOOL_MATCHER = "^(write_file|apply_diff|insert_content|search_and_replace|execute_command)$";
96
+ function guardToolMatcher(agent) {
97
+ return agent === "bob" ? BOB_GUARD_TOOL_MATCHER : GUARD_TOOL_MATCHER;
98
+ }
88
99
  const CURSOR_HOOK_EVENTS = [
89
100
  "sessionStart",
90
101
  "beforeSubmitPrompt",
@@ -115,6 +126,7 @@ const EXTERNAL_SURFACES = [
115
126
  const AGENT_MANIFESTS = {
116
127
  claude: CLAUDE_RELIABILITY_INTEGRATION,
117
128
  codex: CODEX_RELIABILITY_INTEGRATION,
129
+ bob: BOB_RELIABILITY_INTEGRATION,
118
130
  "copilot-cli": COPILOT_CLI_RELIABILITY_INTEGRATION,
119
131
  "copilot-vscode": COPILOT_VSCODE_PREVIEW_RELIABILITY_INTEGRATION,
120
132
  cursor: CURSOR_RELIABILITY_INTEGRATION,
@@ -133,16 +145,17 @@ Options:
133
145
  --current-project Confirm and record the current Git project
134
146
  --choose-folder Open a folder picker on this machine
135
147
  --repository <repo> Verify the selected folder matches this GitHub repository
136
- --folder <path> Record only in this folder and subfolders (repeatable)
148
+ --folder <path> Also record in this folder and subfolders (repeatable)
149
+ --replace-folders With --folder: record only in the folders given, dropping saved ones
137
150
  --all-projects Record in all projects allowed by your workspace
138
151
  --no-capture Retrieval-only mode: context, guard, and manual saves, no turn recording
139
152
  --capture Turn automatic turn recording back on
140
153
  --url <url> Lore API base URL (default: https://api.uselore.co)
141
- --dashboard-url <url> Lore dashboard URL (default: https://uselore.co for hosted Lore)
154
+ --dashboard-url <url> Lore dashboard URL (default: https://app.uselore.co for hosted Lore)
142
155
  --login Approve access securely in the Lore dashboard
143
156
  --no-open Print the approval URL without opening a browser
144
157
  --token <token> Workspace bearer token (or LORE_WORKSPACE_TOKEN/LORE_TOKEN)
145
- --agent <name> claude, codex, copilot, copilot-cli, copilot-vscode, cowork, cursor, devin, generic, opencode, polytoken, or t3code
158
+ --agent <name> bob, claude, codex, copilot, copilot-cli, copilot-vscode, cowork, cursor, devin, generic, opencode, polytoken, or t3code
146
159
  --agent-id <id> With --agent generic: credit MCP saves to this agent (default: generic)
147
160
  --write With --agent generic: let the agent save through MCP (saves stay proposals)
148
161
  --timeout-ms <ms> Hook request timeout, 250-10000 (default: 2500)
@@ -153,6 +166,8 @@ Options:
153
166
  --help Show this command's help
154
167
 
155
168
  New connections stay paused until you choose a project, a folder, or --all-projects.
169
+ Each --folder adds to the folders the connection records. Only --replace-folders
170
+ drops saved folders, and the summary names each one it dropped.
156
171
  Reconnecting without a capture option keeps your saved folder rules and capture mode.
157
172
  Folder choices control where Lore runs; learning scope controls where knowledge applies.
158
173
  With --no-capture, Lore installs no Stop or SessionEnd hooks and sends no turns.
@@ -261,6 +276,7 @@ export function getLorePaths(home, environment = process.env, cwd = process.cwd(
261
276
  runtimePackage: resolve(loreDirectory, "bin", "package.json"),
262
277
  state: resolve(loreDirectory, "state"),
263
278
  queue: resolve(loreDirectory, "queue"),
279
+ bobSettings: resolve(resolvedHome, ".bob", "settings", "settings.json"),
264
280
  codexHooks: resolve(resolvedHome, ".codex", "hooks.json"),
265
281
  copilotCliHooks: resolve(copilotHome, "hooks", "lore.json"),
266
282
  copilotVscodeHooks: resolve(environment.LORE_COPILOT_VSCODE_HOOKS?.trim() ||
@@ -347,6 +363,9 @@ function hookTimeout(seconds) {
347
363
  return isWindows() ? Math.max(seconds, 10) : seconds;
348
364
  }
349
365
  function eventHandler(agent, event, paths) {
366
+ // Bob documents only type, command, matcher and timeout, and drops a hooks
367
+ // file its schema rejects, so its entries carry nothing undocumented.
368
+ const documented = agent === "bob";
350
369
  return {
351
370
  type: "command",
352
371
  command: hookCommand(agent, paths),
@@ -357,10 +376,10 @@ function eventHandler(agent, event, paths) {
357
376
  : event === "PreToolUse"
358
377
  ? 10
359
378
  : 25),
360
- ...(event === "UserPromptSubmit"
379
+ ...(event === "UserPromptSubmit" && !documented
361
380
  ? { statusMessage: "Loading Lore context" }
362
381
  : {}),
363
- ...(event === "PreToolUse"
382
+ ...(event === "PreToolUse" && !documented
364
383
  ? { statusMessage: "Checking Lore guard" }
365
384
  : {}),
366
385
  };
@@ -371,7 +390,7 @@ export function mergeLoreHooks(input, agent, paths, capture = true) {
371
390
  throw new Error("Agent configuration field \"hooks\" must be a JSON object");
372
391
  }
373
392
  const hooks = isObject(result.hooks) ? { ...result.hooks } : {};
374
- const installed = installedEvents(HOOK_EVENTS, capture);
393
+ const installed = installedEvents(claudeShapedHookEvents(agent), capture);
375
394
  for (const event of HOOK_EVENTS) {
376
395
  if (hooks[event] !== undefined && !Array.isArray(hooks[event])) {
377
396
  throw new Error(`Agent hook event "${event}" must be a JSON array`);
@@ -380,7 +399,7 @@ export function mergeLoreHooks(input, agent, paths, capture = true) {
380
399
  ...stripLoreFromEvent(hooks[event]),
381
400
  ...(installed.includes(event) ? [{
382
401
  // Guard checks run only for mutation-shaped tools.
383
- ...(event === "PreToolUse" ? { matcher: GUARD_TOOL_MATCHER } : {}),
402
+ ...(event === "PreToolUse" ? { matcher: guardToolMatcher(agent) } : {}),
384
403
  hooks: [eventHandler(agent, event, paths)],
385
404
  }] : []),
386
405
  ];
@@ -492,6 +511,9 @@ function loreMcpInvocation() {
492
511
  export function mcpConfigPath(agent, hooksPath) {
493
512
  const directory = dirname(hooksPath);
494
513
  switch (agent) {
514
+ case "bob":
515
+ // ~/.bob/settings/settings.json pairs with ~/.bob/settings/mcp.json.
516
+ return resolve(directory, "mcp.json");
495
517
  case "claude":
496
518
  // ~/.claude/settings.json pairs with ~/.claude.json; a CLAUDE_CONFIG_DIR keeps both inside it.
497
519
  return basename(directory) === ".claude"
@@ -888,14 +910,14 @@ function commandHookInstallationUnits(input, agent, paths, index, total, capture
888
910
  throw new Error(`${agent} configuration field "hooks" must be an object`);
889
911
  }
890
912
  const hooks = isObject(configuration.hooks) ? configuration.hooks : {};
891
- return installedEvents(HOOK_EVENTS, capture).map((event) => {
913
+ return installedEvents(claudeShapedHookEvents(agent), capture).map((event) => {
892
914
  const groups = hooks[event];
893
915
  if (groups !== undefined && !Array.isArray(groups)) {
894
916
  throw new Error(`${agent} hook event "${event}" must be an array`);
895
917
  }
896
918
  const candidates = Array.isArray(groups) ? groups : [];
897
919
  const expected = {
898
- ...(event === "PreToolUse" ? { matcher: GUARD_TOOL_MATCHER } : {}),
920
+ ...(event === "PreToolUse" ? { matcher: guardToolMatcher(agent) } : {}),
899
921
  hooks: [eventHandler(agent, event, paths)],
900
922
  };
901
923
  const ownedCount = candidates.reduce((count, candidate) => {
@@ -1027,6 +1049,7 @@ function openCodeInstallationUnits(input, paths, index, total) {
1027
1049
  }
1028
1050
  function inspectInstallationUnits(input, agent, paths, index, total, capture) {
1029
1051
  switch (agent) {
1052
+ case "bob":
1030
1053
  case "claude":
1031
1054
  case "codex":
1032
1055
  return commandHookInstallationUnits(input, agent, paths, index, total, capture);
@@ -1169,7 +1192,7 @@ function parseConnectorConfig(value) {
1169
1192
  ? value.timeoutMs
1170
1193
  : 2_500;
1171
1194
  const dashboardUrl = typeof value.dashboardUrl === "string"
1172
- ? normalizeApiUrl(value.dashboardUrl)
1195
+ ? currentDashboardUrl(normalizeApiUrl(value.dashboardUrl))
1173
1196
  : undefined;
1174
1197
  const parsedWorkspaceId = WorkspaceIdentityResponseSchema.shape.workspaceId.safeParse(value.workspaceId);
1175
1198
  const workspaceId = parsedWorkspaceId.success
@@ -1347,6 +1370,26 @@ async function pathExists(path) {
1347
1370
  return false;
1348
1371
  }
1349
1372
  }
1373
+ /**
1374
+ * IBM Bob: the desktop app bundle, or the `bob` (Bob Shell) and `bobide`
1375
+ * launchers on PATH. Bob installs the app in the platform's applications
1376
+ * folder and does not document a launcher, so the bundle is checked too.
1377
+ */
1378
+ async function bobAvailable(paths) {
1379
+ if ((await commandExists("bob")) || (await commandExists("bobide")))
1380
+ return true;
1381
+ const environment = process.env;
1382
+ const candidates = platform() === "darwin"
1383
+ ? ["/Applications/IBM Bob.app", resolve(paths.home, "Applications", "IBM Bob.app")]
1384
+ : isWindows()
1385
+ ? [environment.LOCALAPPDATA, environment.ProgramFiles, environment["ProgramFiles(x86)"]]
1386
+ .flatMap((root) => root ? [resolve(root, "Programs", "IBM Bob"), resolve(root, "IBM Bob")] : [])
1387
+ : ["/usr/share/ibm-bob", "/usr/share/bob", "/opt/IBM Bob", "/opt/ibm-bob", "/usr/lib/ibm-bob"];
1388
+ for (const candidate of candidates)
1389
+ if (await pathExists(candidate))
1390
+ return true;
1391
+ return false;
1392
+ }
1350
1393
  async function cursorAvailable(paths) {
1351
1394
  return ((await commandExists("cursor")) ||
1352
1395
  (await pathExists(paths.cursorUserData)));
@@ -1358,6 +1401,21 @@ function objectConfiguration(input, agent) {
1358
1401
  return input;
1359
1402
  }
1360
1403
  const AGENT_TARGETS = {
1404
+ bob: {
1405
+ integration: "hooks",
1406
+ // Three native hooks plus the Lore MCP server entry.
1407
+ expected: (capture) => installedEvents(BOB_HOOK_EVENTS, capture).length + 1,
1408
+ runtimeRequired: true,
1409
+ emptyValue: () => ({}),
1410
+ configPath: (paths) => paths.bobSettings,
1411
+ // Bob creates ~/.bob/settings on its first run; the app bundle alone does
1412
+ // not mean it is used in this home.
1413
+ detect: async (paths) => (await commandExists("bob")) || (await commandExists("bobide")) || pathExists(dirname(paths.bobSettings)),
1414
+ executable: bobAvailable,
1415
+ merge: (input, paths, capture) => mergeLoreHooks(objectConfiguration(input, "bob"), "bob", paths, capture),
1416
+ remove: (input) => removeLoreHooks(objectConfiguration(input, "bob")),
1417
+ count: (input) => countLoreHooks(objectConfiguration(input, "bob")),
1418
+ },
1361
1419
  claude: {
1362
1420
  integration: "hooks",
1363
1421
  // Native hooks plus the Lore MCP server entry.
@@ -2043,6 +2101,10 @@ function parseConnectArguments(args) {
2043
2101
  parsed.allProjects = true;
2044
2102
  continue;
2045
2103
  }
2104
+ if (argument === "--replace-folders") {
2105
+ parsed.replaceFolders = true;
2106
+ continue;
2107
+ }
2046
2108
  if (argument === "--write") {
2047
2109
  parsed.writeTools = true;
2048
2110
  continue;
@@ -2098,7 +2160,7 @@ function parseConnectArguments(args) {
2098
2160
  parsed.agents.push(value);
2099
2161
  }
2100
2162
  else {
2101
- throw new Error("--agent must be claude, codex, copilot, copilot-cli, copilot-vscode, cowork, cursor, devin, generic, opencode, polytoken, or t3code");
2163
+ throw new Error("--agent must be bob, claude, codex, copilot, copilot-cli, copilot-vscode, cowork, cursor, devin, generic, opencode, polytoken, or t3code");
2102
2164
  }
2103
2165
  }
2104
2166
  validateConnectProjectOptions(parsed);
@@ -2170,7 +2232,7 @@ async function connectWithCredentialLocked(options, identity) {
2170
2232
  : await authenticatedIdentity(existing.apiUrl, existing.token, timeoutMs).catch(() => undefined)
2171
2233
  : undefined;
2172
2234
  const directories = await captureDirectories(options, paths.home, options.cwd);
2173
- const connection = await prepareConnection(paths, identity, { apiUrl, token, ...(directories === undefined ? {} : { directories }), ...(options.connectionName ? { connectionName: options.connectionName } : {}) }, previousIdentity);
2235
+ const connection = await prepareConnection(paths, identity, { apiUrl, token, ...(directories === undefined ? {} : { directories }), ...(options.replaceFolders ? { replaceFolders: true } : {}), ...(options.connectionName ? { connectionName: options.connectionName } : {}) }, previousIdentity);
2174
2236
  await secureWindowsDirectory(paths.loreDirectory);
2175
2237
  const recoveryEnv = options.home === undefined ? process.env : { ...process.env, ZDOTDIR: paths.home };
2176
2238
  let recoveryWarning;
@@ -2223,7 +2285,7 @@ async function connectWithCredentialLocked(options, identity) {
2223
2285
  // An MCP-only agent has no hooks or settings Lore can edit; it gets the skills and a printed entry.
2224
2286
  const genericAgent = options.agents.includes(GENERIC_AGENT) ? options.genericAgent ?? { id: GENERIC_AGENT, writeTools: false } : undefined;
2225
2287
  if (agents.length === 0 && credentialOnlyAgents.length === 0 && genericAgent === undefined) {
2226
- throw new Error("No Claude, Codex, Copilot CLI, Cursor, OpenCode, or Polytoken installation detected. Use --agent <name>; T3 Code users can use --agent t3code, and Devin CLI users --agent devin.");
2288
+ throw new Error("No Claude, Codex, Copilot CLI, Cursor, IBM Bob, OpenCode, or Polytoken installation detected. Use --agent <name>; T3 Code users can use --agent t3code, and Devin CLI users --agent devin.");
2227
2289
  }
2228
2290
  const now = new Date();
2229
2291
  // Reconnecting without a capture option keeps the saved mode, like folder rules.
@@ -2285,6 +2347,7 @@ async function connectWithCredentialLocked(options, identity) {
2285
2347
  const loreAgent = await installLoreAgent(paths, installations);
2286
2348
  if (genericAgent)
2287
2349
  await recordGenericAgent(paths.loreDirectory, genericAgent, now);
2350
+ const folder = await firstMessageFolder(options.cwd ?? process.cwd(), config.directories, paths.home);
2288
2351
  // An unchanged reconnect: same server, credential, and workspace, every
2289
2352
  // configured agent was already configured, and no agent file was rewritten.
2290
2353
  const alreadyConnected = existing !== null &&
@@ -2304,12 +2367,15 @@ async function connectWithCredentialLocked(options, identity) {
2304
2367
  const codexNeedsApproval = !installedAgents.includes("codex") &&
2305
2368
  changedHookFiles.some((path) => codexHookPaths.includes(path));
2306
2369
  return {
2307
- capture: { mode: capture ? "on" : "off", folders: config.directories?.include ?? null, excludedFolders: config.directories?.exclude ?? [] },
2370
+ capture: {
2371
+ mode: capture ? "on" : "off", folders: config.directories?.include ?? null, excludedFolders: config.directories?.exclude ?? [],
2372
+ ...(directories === undefined || connection.previousRules === undefined ? {} : { previousFolders: connection.previousRules === null ? null : connection.previousRules.include }),
2373
+ },
2308
2374
  skillFiles: skills.files,
2309
2375
  agentFiles: loreAgent.files,
2310
2376
  ...(genericAgent ? { genericAgent: {
2311
2377
  ...genericAgent,
2312
- mcpServers: genericMcpServers(loreMcpInvocation(), paths.home, genericAgent).mcpServers,
2378
+ mcpServers: genericMcpServers(loreMcpInvocation(), paths.home, genericAgent, folder).mcpServers,
2313
2379
  instructions: genericInstructions(genericAgent.id, skills.files.filter((file) => file.startsWith(resolve(paths.home, ".agents", "skills")))),
2314
2380
  } } : {}),
2315
2381
  connected: true,
@@ -2320,11 +2386,14 @@ async function connectWithCredentialLocked(options, identity) {
2320
2386
  keptAgents,
2321
2387
  alreadyConnected,
2322
2388
  ...(knownDashboardUrl === undefined ? {} : { dashboardUrl: knownDashboardUrl }),
2323
- folder: await firstMessageFolder(options.cwd ?? process.cwd(), config.directories, paths.home),
2389
+ folder,
2324
2390
  config: paths.config,
2325
2391
  changedHookFiles,
2326
2392
  backups,
2327
- warnings: [...skills.warnings, ...loreAgent.warnings, ...(connection.needsFolders ? [`Lore is off for ${config.connectionName} until you choose where to record. Reconnect with --folder <path> or --all-projects, or run lore config open --connection ${config.connectionName}.`] : []), ...requestedExpansion.warnings, ...hostRecoveryWarnings, ...(codexNeedsApproval
2393
+ warnings: [...skills.warnings, ...loreAgent.warnings, ...(connection.needsFolders ? [`Lore is off for ${config.connectionName} until you choose where to record. Reconnect with --folder <path> or --all-projects, or run lore config open --connection ${config.connectionName}.`] : []),
2394
+ // Folders chosen for a connection that already covers all projects change nothing.
2395
+ ...(directories && config.directories === undefined ? [`${config.connectionName} already covers all projects, including ${listText(directories.include)}. Add --replace-folders to record only there.`] : []),
2396
+ ...requestedExpansion.warnings, ...hostRecoveryWarnings, ...(codexNeedsApproval
2328
2397
  ? [CODEX_APPROVAL_WARNING]
2329
2398
  : [])],
2330
2399
  ...(recoveryNotice ? { recoveryNotice } : {}),
@@ -2476,6 +2545,8 @@ async function acknowledgeDeviceAuthorization(apiUrl, authorization) {
2476
2545
  /** The exact step each agent needs before Lore records its first turn. */
2477
2546
  export function connectNextStep(agent) {
2478
2547
  switch (agent) {
2548
+ case "bob":
2549
+ return "Restart IBM Bob.";
2479
2550
  case "claude":
2480
2551
  return "Restart Claude Code and allow the lore MCP server when it asks.";
2481
2552
  case "codex":
@@ -2514,6 +2585,7 @@ const CODEX_APPROVAL_WARNING = "Codex requires hook approval. Open /hooks in Cod
2514
2585
  /** Product names for human output; --json keeps the agent ids. */
2515
2586
  export function agentDisplayName(agent) {
2516
2587
  switch (agent) {
2588
+ case "bob": return "IBM Bob";
2517
2589
  case "claude": return "Claude Code";
2518
2590
  case "codex": return "Codex";
2519
2591
  case "copilot":
@@ -2569,6 +2641,11 @@ export function formatConnectResult(result, options = {}) {
2569
2641
  ? `Already connected to ${result.identity.workspaceName}, nothing changed`
2570
2642
  : `Connected to ${result.identity.workspaceName}`);
2571
2643
  out.note(`${records ? "Recording in" : "Lore runs in"} ${shownFolders}${excluded}${out.separator}${mode}`);
2644
+ // Folders this run stopped recording in, so a replaced list never turns Lore off somewhere silently.
2645
+ const previous = result.capture.previousFolders;
2646
+ const stopped = previous === undefined || folders === null ? [] : previous === null ? ["other projects"] : previous.filter((folder) => !folders.includes(folder)).map((folder) => out.path(folder));
2647
+ if (stopped.length)
2648
+ out.note(`${records ? "No longer recording in" : "Lore no longer runs in"} ${listText(stopped)}.`);
2572
2649
  if (generic !== undefined && !nothingRecords)
2573
2650
  out.note(`${generic.id} is MCP-only: Lore saves only what you ask it to.`);
2574
2651
  // One row per agent: set up in this run first, then the ones kept as they were.
@@ -3739,7 +3816,22 @@ async function doctorCommand(args) {
3739
3816
  detail: IS_STANDALONE_BINARY ? process.execPath : paths.runtime,
3740
3817
  });
3741
3818
  }
3819
+ // The Copilot runtime behind Copilot CLI and VS Code 1.143+ loads both the
3820
+ // user-level hooks and a repository's .github/hooks, so the repository hook
3821
+ // stands down wherever the CLI hooks file holds Lore hooks (the runtime's
3822
+ // copilotCliHooksServeHost check); their own row reports their health.
3823
+ const copilotCliHooks = status.agents.find((item) => item.agent === "copilot-cli");
3824
+ const copilotCliServesVsCode = copilotCliHooks?.configured === true &&
3825
+ !["missing", "invalid"].includes(copilotCliHooks.installation.state);
3742
3826
  for (const agent of status.agents.filter((item) => item.configured)) {
3827
+ if (agent.agent === "copilot-vscode" && copilotCliServesVsCode) {
3828
+ checks.push({
3829
+ name: "copilot-vscode-hooks",
3830
+ status: "ok",
3831
+ detail: "standing down: the Copilot CLI hooks on this machine handle VS Code too, so each prompt reaches Lore once",
3832
+ });
3833
+ continue;
3834
+ }
3743
3835
  checks.push({
3744
3836
  name: `${agent.agent}-executable`,
3745
3837
  status: agent.executable ? "ok" : "warning",