@bookedsolid/reagent 0.14.0 → 0.14.2

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 (58) hide show
  1. package/README.md +147 -1
  2. package/dist/cli/commands/init/index.d.ts.map +1 -1
  3. package/dist/cli/commands/init/index.js +8 -1
  4. package/dist/cli/commands/init/index.js.map +1 -1
  5. package/dist/cli/commands/init/mcp-config.js +6 -6
  6. package/dist/cli/commands/init/mcp-config.js.map +1 -1
  7. package/dist/cli/commands/init/obsidian.d.ts +16 -0
  8. package/dist/cli/commands/init/obsidian.d.ts.map +1 -0
  9. package/dist/cli/commands/init/obsidian.js +95 -0
  10. package/dist/cli/commands/init/obsidian.js.map +1 -0
  11. package/dist/cli/commands/init/policy.d.ts.map +1 -1
  12. package/dist/cli/commands/init/policy.js +10 -1
  13. package/dist/cli/commands/init/policy.js.map +1 -1
  14. package/dist/cli/commands/obsidian.d.ts +2 -0
  15. package/dist/cli/commands/obsidian.d.ts.map +1 -0
  16. package/dist/cli/commands/obsidian.js +187 -0
  17. package/dist/cli/commands/obsidian.js.map +1 -0
  18. package/dist/cli/commands/upgrade-policy.d.ts +17 -0
  19. package/dist/cli/commands/upgrade-policy.d.ts.map +1 -0
  20. package/dist/cli/commands/upgrade-policy.js +123 -0
  21. package/dist/cli/commands/upgrade-policy.js.map +1 -0
  22. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  23. package/dist/cli/commands/upgrade.js +8 -26
  24. package/dist/cli/commands/upgrade.js.map +1 -1
  25. package/dist/cli/index.js +9 -0
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/gateway/native-tools.d.ts.map +1 -1
  28. package/dist/gateway/native-tools.js +39 -0
  29. package/dist/gateway/native-tools.js.map +1 -1
  30. package/dist/obsidian/cli.d.ts +49 -0
  31. package/dist/obsidian/cli.d.ts.map +1 -0
  32. package/dist/obsidian/cli.js +128 -0
  33. package/dist/obsidian/cli.js.map +1 -0
  34. package/dist/obsidian/index.d.ts +7 -0
  35. package/dist/obsidian/index.d.ts.map +1 -0
  36. package/dist/obsidian/index.js +5 -0
  37. package/dist/obsidian/index.js.map +1 -0
  38. package/dist/obsidian/kanban-generator.d.ts +9 -0
  39. package/dist/obsidian/kanban-generator.d.ts.map +1 -0
  40. package/dist/obsidian/kanban-generator.js +63 -0
  41. package/dist/obsidian/kanban-generator.js.map +1 -0
  42. package/dist/obsidian/vault-config.d.ts +142 -0
  43. package/dist/obsidian/vault-config.d.ts.map +1 -0
  44. package/dist/obsidian/vault-config.js +92 -0
  45. package/dist/obsidian/vault-config.js.map +1 -0
  46. package/dist/obsidian/vault-writer.d.ts +52 -0
  47. package/dist/obsidian/vault-writer.d.ts.map +1 -0
  48. package/dist/obsidian/vault-writer.js +166 -0
  49. package/dist/obsidian/vault-writer.js.map +1 -0
  50. package/dist/types/policy.d.ts +4 -0
  51. package/dist/types/policy.d.ts.map +1 -1
  52. package/hooks/dangerous-bash-interceptor.sh +43 -0
  53. package/hooks/reagent-obsidian-journal.sh +69 -0
  54. package/hooks/reagent-obsidian-precompact.sh +88 -0
  55. package/hooks/reagent-obsidian-tasks.sh +126 -0
  56. package/package.json +1 -1
  57. package/profiles/bst-internal.json +1 -1
  58. package/profiles/client-engagement.json +1 -1
package/README.md CHANGED
@@ -374,6 +374,143 @@ the task board from within Claude Code conversations.
374
374
  {"id":"T-001","type":"completed","title":"Implement login flow","commit_refs":["abc1234"],"pr_ref":"#42","timestamp":"2026-04-01T14:30:00.000Z"}
375
375
  ```
376
376
 
377
+ ## Obsidian vault integration
378
+
379
+ reagent can integrate with [Obsidian](https://obsidian.md) vaults for project knowledge
380
+ management. Session journaling, task sync, knowledge extraction before context compaction,
381
+ and vault health monitoring — all driven by hooks and the CLI.
382
+
383
+ The integration is **opt-in by default**. Nothing Obsidian-related activates unless you
384
+ explicitly configure it. Every Obsidian operation is fail-silent: if the CLI is missing,
385
+ the vault path is wrong, or a sync target is disabled, reagent exits cleanly with no
386
+ errors and no blocked operations.
387
+
388
+ ### Prerequisites
389
+
390
+ - **Obsidian CLI** installed at `/usr/local/bin/obsidian`
391
+ - An Obsidian vault directory for each project you want to integrate
392
+
393
+ ### Setup
394
+
395
+ Enable the integration during init:
396
+
397
+ ```bash
398
+ reagent init --obsidian --vault-path /path/to/vault
399
+ ```
400
+
401
+ Or set the vault path via environment variable:
402
+
403
+ ```bash
404
+ export REAGENT_OBSIDIAN_VAULT=/path/to/vault
405
+ ```
406
+
407
+ Both methods write an `obsidian_vault` block to `.reagent/gateway.yaml`:
408
+
409
+ ```yaml
410
+ obsidian_vault:
411
+ enabled: true
412
+ vault_path: '/path/to/vault'
413
+ vault_name: 'MyProject'
414
+ paths:
415
+ root: 'Projects/Reagent'
416
+ kanban: 'Projects/Reagent/Kanban.md'
417
+ sources: 'Projects/Reagent/Sources'
418
+ wiki: 'Projects/Reagent/Auto'
419
+ tasks: 'Tasks'
420
+ sessions: 'Wiki/Sessions'
421
+ sync:
422
+ kanban: false
423
+ context_dump: false
424
+ wiki_refresh: false
425
+ journal: true # Tier 1 — on by default when integration is enabled
426
+ precompact: false # Tier 2 — opt-in
427
+ tasks: true # Tier 3 — on by default when integration is enabled
428
+ precompact:
429
+ engine: 'claude' # 'claude' or 'ollama'
430
+ model: null # null = use default model for the engine
431
+ ```
432
+
433
+ Vault path resolution order:
434
+
435
+ 1. `REAGENT_OBSIDIAN_VAULT` environment variable (absolute path)
436
+ 2. `obsidian_vault.vault_path` in `gateway.yaml`
437
+ 3. Not set — integration disabled
438
+
439
+ ### Three-tier hook architecture
440
+
441
+ Obsidian sync is organized into three tiers, each backed by a dedicated Claude Code hook.
442
+ Each tier operates independently and can be enabled or disabled individually.
443
+
444
+ **Tier 1 — Session Journal** (`reagent-obsidian-journal.sh`)
445
+
446
+ Fires when a Claude Code session ends. Appends a session summary to the daily note in
447
+ your vault via `obsidian daily:append`. The summary includes the project name, a session
448
+ identifier, timestamp, and task state counts (completed, in progress, blocked, backlog)
449
+ pulled from `.reagent/tasks.jsonl`.
450
+
451
+ Enable: `sync.journal: true` (default when integration is enabled).
452
+
453
+ **Tier 2 — PreCompact Knowledge Extraction** (`reagent-obsidian-precompact.sh`)
454
+
455
+ Fires before Claude Code compacts context. Creates a session knowledge note in
456
+ `Wiki/Sessions/` (or your configured `paths.sessions` directory) with frontmatter
457
+ tagging the project, date, session ID, and extraction engine.
458
+
459
+ This tier is a stub — the knowledge extraction engine is not yet fully implemented.
460
+ The hook creates a structured placeholder note with sections for Decisions, Discoveries,
461
+ and Open Questions. The `precompact.engine` field (`claude` or `ollama`) determines which
462
+ backend will perform extraction when the implementation is complete.
463
+
464
+ Enable: `sync.precompact: true` (disabled by default).
465
+
466
+ **Tier 3 — Task Materialization** (`reagent-obsidian-tasks.sh`)
467
+
468
+ Fires after `task_create` and `task_update` MCP tool calls. Materializes each task as an
469
+ individual Obsidian note in the `Tasks/` directory with typed frontmatter:
470
+
471
+ ```yaml
472
+ ---
473
+ reagent_managed: true
474
+ task_id: T-001
475
+ project: my-project
476
+ status: started
477
+ urgency: critical
478
+ assignee: frontend-specialist
479
+ ---
480
+ ```
481
+
482
+ Sync is one-way: JSONL to Obsidian. The hook extracts the task ID from the tool result,
483
+ reads the latest event for that task from `.reagent/tasks.jsonl`, and creates or overwrites
484
+ the corresponding note.
485
+
486
+ Enable: `sync.tasks: true` (default when integration is enabled).
487
+
488
+ ### CLI commands
489
+
490
+ ```
491
+ reagent obsidian sync [--target kanban|context|wiki|tasks] [--dry-run]
492
+ Sync enabled targets to the Obsidian vault. Without --target, syncs all
493
+ enabled targets. --dry-run previews what would be written.
494
+
495
+ reagent obsidian status
496
+ Show current Obsidian configuration: vault path, CLI availability,
497
+ configured paths, and which sync targets are enabled or disabled.
498
+
499
+ reagent obsidian health
500
+ Show vault health metrics: orphan notes, unresolved links, and dead ends.
501
+ Requires vault_name set in gateway.yaml and the Obsidian CLI installed.
502
+
503
+ reagent obsidian journal
504
+ Manually trigger a session journal entry in the daily note. Useful for
505
+ ad-hoc journaling outside of the automatic session-end hook.
506
+ ```
507
+
508
+ ### Vault-per-project mapping
509
+
510
+ Each project maps to its own Obsidian vault. The vault path is resolved per-project from
511
+ that project's `.reagent/gateway.yaml` or `REAGENT_OBSIDIAN_VAULT` environment variable.
512
+ There is no global vault registry — each project is self-contained.
513
+
377
514
  ## CLI reference
378
515
 
379
516
  ```
@@ -388,6 +525,8 @@ reagent init [options]
388
525
  --tasks-channel <id> Discord channel ID for task events
389
526
  --releases-channel Discord channel ID for release events
390
527
  --dev-channel <id> Discord channel ID for dev activity
528
+ --obsidian Enable Obsidian vault integration in gateway.yaml
529
+ --vault-path <path> Absolute path to the Obsidian vault directory
391
530
 
392
531
  reagent serve
393
532
  Starts the MCP server on stdio. Loaded by Claude Code via .mcp.json.
@@ -408,12 +547,19 @@ reagent catalyze [targetDir]
408
547
  --audit Compare current state against the last plan and show drift
409
548
  --dry-run Print analysis without writing files
410
549
 
411
- reagent upgrade [--dry-run]
550
+ reagent upgrade [--dry-run] [--clean-blocked-paths]
412
551
  Re-syncs installed hooks from the current package version and updates the
413
552
  version stamp in policy.yaml. Run after upgrading the reagent package.
553
+ --clean-blocked-paths replaces the blanket '.reagent/' blocked path with
554
+ granular entries, allowing agents to write to operational files (tasks,
555
+ review cache) while keeping policy and audit files protected.
414
556
 
415
557
  reagent cache <set|get|del> <key> [value]
416
558
  Manages the review cache used by commit-review-gate and push-review-gate.
559
+
560
+ reagent obsidian <sync|status|health|journal>
561
+ Obsidian vault integration commands. See the Obsidian vault integration
562
+ section above for full documentation.
417
563
  ```
418
564
 
419
565
  ## Configuration
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/index.ts"],"names":[],"mappings":"AAmBA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAyL5C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/index.ts"],"names":[],"mappings":"AAoBA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgM5C"}
@@ -15,12 +15,14 @@ import { installPm } from './pm.js';
15
15
  import { installGitHub } from './github.js';
16
16
  import { installProfile, listTechProfiles } from './profiles.js';
17
17
  import { installDiscord, parseDiscordArgs } from './discord.js';
18
+ import { installObsidian, parseObsidianArgs } from './obsidian.js';
18
19
  export function runInit(args) {
19
20
  const profileName = parseFlag(args, '--profile') || 'client-engagement';
20
21
  const targetDir = process.cwd();
21
22
  const dryRun = args.includes('--dry-run');
22
23
  const withGitHub = args.includes('--github');
23
24
  const withDiscord = args.includes('--discord');
25
+ const withObsidian = args.includes('--obsidian');
24
26
  const PKG_VERSION = getPkgVersion();
25
27
  // --preflight-cmd overrides lockfile detection; used to inject a custom preflight command
26
28
  const preflightCmdOverride = parseFlag(args, '--preflight-cmd');
@@ -135,7 +137,12 @@ export function runInit(args) {
135
137
  const discordOpts = parseDiscordArgs(args);
136
138
  results.push(...installDiscord(targetDir, discordOpts, dryRun));
137
139
  }
138
- // Step 15: Tech profile overlay (hooks, gates, agents) — runs after base init
140
+ // Step 15: Obsidian vault integration (opt-in via --obsidian flag)
141
+ if (withObsidian) {
142
+ const obsidianOpts = parseObsidianArgs(args);
143
+ results.push(...installObsidian(targetDir, obsidianOpts, dryRun));
144
+ }
145
+ // Step 16: Tech profile overlay (hooks, gates, agents) — runs after base init
139
146
  if (isTechProfile) {
140
147
  const profileResult = installProfile(profileName, targetDir, dryRun);
141
148
  results.push(...profileResult.results);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/index.ts"],"names":[],"mappings":"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"}
@@ -6,17 +6,17 @@ import path from 'node:path';
6
6
  * Uses stdio transport so Claude Code spawns `reagent serve` directly —
7
7
  * no daemon required, works immediately after `reagent init`.
8
8
  *
9
- * `npx reagent serve` resolves in order:
10
- * 1. ./node_modules/.bin/reagent (local install)
11
- * 2. PATH reagent (global install)
9
+ * `npx @bookedsolid/reagent serve` resolves in order:
10
+ * 1. ./node_modules/.bin/reagent (local install — npx checks here first)
11
+ * 2. npm registry fetch (npx auto-installs if not found locally)
12
12
  *
13
- * This means the committed .mcp.json works on any machine regardless of
14
- * whether reagent was installed locally or globally.
13
+ * Using the scoped package name ensures npx can always resolve the binary,
14
+ * whether reagent is installed locally, globally, or fetched on demand.
15
15
  */
16
16
  const REAGENT_MCP_ENTRY = {
17
17
  type: 'stdio',
18
18
  command: 'npx',
19
- args: ['reagent', 'serve'],
19
+ args: ['@bookedsolid/reagent', 'serve'],
20
20
  };
21
21
  /**
22
22
  * Write (or merge into) .mcp.json in `targetDir` with a reagent stdio entry.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/mcp-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;;;;;;;;;;GAYG;AACH,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;CAClB,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,MAAe;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAElD,4DAA4D;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,QAAkD,CAAC;QACvD,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAErD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;YACzD,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YACjC,sCAAsC;YACtC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,qCAAqC;QACrC,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,UAAU,CAAC,OAAO,GAAG,iBAAiB,CAAC;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,yCAAyC;IACzC,MAAM,MAAM,GAAG;QACb,UAAU,EAAE;YACV,OAAO,EAAE,iBAAiB;SAC3B;KACF,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/mcp-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;;;;;;;;;;GAYG;AACH,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,sBAAsB,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,MAAe;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAElD,4DAA4D;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,QAAkD,CAAC;QACvD,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAErD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;YACzD,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YACjC,sCAAsC;YACtC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,qCAAqC;QACrC,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,UAAU,CAAC,OAAO,GAAG,iBAAiB,CAAC;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,yCAAyC;IACzC,MAAM,MAAM,GAAG;QACb,UAAU,EAAE;YACV,OAAO,EAAE,iBAAiB;SAC3B;KACF,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { InstallResult } from './types.js';
2
+ export interface ObsidianInitOptions {
3
+ vaultPath?: string;
4
+ }
5
+ /**
6
+ * Install or update the obsidian_vault section in .reagent/gateway.yaml.
7
+ *
8
+ * Wired into `reagent init --obsidian`.
9
+ * Non-interactive: reads opts from args.
10
+ */
11
+ export declare function installObsidian(targetDir: string, opts: ObsidianInitOptions, dryRun: boolean): InstallResult[];
12
+ /**
13
+ * Parse --obsidian flags from CLI args.
14
+ */
15
+ export declare function parseObsidianArgs(args: string[]): ObsidianInitOptions;
16
+ //# sourceMappingURL=obsidian.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/obsidian.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoCD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,OAAO,GACd,aAAa,EAAE,CAmDjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAMrE"}
@@ -0,0 +1,95 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { parse as parseYaml } from 'yaml';
4
+ /**
5
+ * Generate the obsidian_vault YAML block to append to gateway.yaml.
6
+ * Always installs as disabled — user must explicitly enable.
7
+ */
8
+ function buildObsidianVaultYaml(opts) {
9
+ return `
10
+ # Optional: Obsidian vault integration
11
+ # Syncs task state, context, and wiki pages to an Obsidian vault as plain markdown.
12
+ # Set REAGENT_OBSIDIAN_VAULT env var to your vault root path, or set vault_path below.
13
+ # All sync targets are opt-in and disabled by default.
14
+ obsidian_vault:
15
+ enabled: false
16
+ vault_path: '${opts.vaultPath || ''}'
17
+ vault_name: ''
18
+ paths:
19
+ root: 'Projects/Reagent'
20
+ kanban: 'Projects/Reagent/Kanban.md'
21
+ sources: 'Projects/Reagent/Sources'
22
+ wiki: 'Projects/Reagent/Auto'
23
+ tasks: 'Tasks'
24
+ sessions: 'Wiki/Sessions'
25
+ sync:
26
+ kanban: false
27
+ context_dump: false
28
+ wiki_refresh: false
29
+ journal: true
30
+ precompact: false
31
+ tasks: true
32
+ precompact:
33
+ engine: 'claude'
34
+ model: null
35
+ `;
36
+ }
37
+ /**
38
+ * Install or update the obsidian_vault section in .reagent/gateway.yaml.
39
+ *
40
+ * Wired into `reagent init --obsidian`.
41
+ * Non-interactive: reads opts from args.
42
+ */
43
+ export function installObsidian(targetDir, opts, dryRun) {
44
+ const results = [];
45
+ const gatewayPath = path.join(targetDir, '.reagent', 'gateway.yaml');
46
+ if (!fs.existsSync(gatewayPath)) {
47
+ return [{ file: '.reagent/gateway.yaml (not found — run reagent init first)', status: 'warn' }];
48
+ }
49
+ const raw = fs.readFileSync(gatewayPath, 'utf8');
50
+ let parsed;
51
+ try {
52
+ parsed = parseYaml(raw);
53
+ }
54
+ catch {
55
+ return [{ file: '.reagent/gateway.yaml (YAML parse error)', status: 'warn' }];
56
+ }
57
+ if ('obsidian_vault' in parsed) {
58
+ return [
59
+ {
60
+ file: '.reagent/gateway.yaml (obsidian_vault already configured)',
61
+ status: 'skipped',
62
+ },
63
+ ];
64
+ }
65
+ const obsidianYaml = buildObsidianVaultYaml(opts);
66
+ if (!dryRun) {
67
+ fs.appendFileSync(gatewayPath, obsidianYaml, 'utf8');
68
+ }
69
+ results.push({ file: '.reagent/gateway.yaml (+obsidian_vault)', status: 'updated' });
70
+ if (!dryRun) {
71
+ console.log('');
72
+ console.log('Obsidian vault integration configured (disabled by default).');
73
+ console.log('');
74
+ console.log('To enable:');
75
+ console.log(' 1. Set your vault path:');
76
+ console.log(' export REAGENT_OBSIDIAN_VAULT="~/path/to/your/vault"');
77
+ console.log('');
78
+ console.log(' 2. Enable in .reagent/gateway.yaml:');
79
+ console.log(' obsidian_vault.enabled: true');
80
+ console.log(' obsidian_vault.sync.kanban: true');
81
+ console.log('');
82
+ console.log(' 3. Sync: reagent obsidian sync');
83
+ console.log('');
84
+ }
85
+ return results;
86
+ }
87
+ /**
88
+ * Parse --obsidian flags from CLI args.
89
+ */
90
+ export function parseObsidianArgs(args) {
91
+ const idx = args.indexOf('--vault-path');
92
+ const vaultPath = idx !== -1 && args[idx + 1] && !args[idx + 1].startsWith('--') ? args[idx + 1] : undefined;
93
+ return { vaultPath };
94
+ }
95
+ //# sourceMappingURL=obsidian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/obsidian.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/policy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,EAAE,CAkFjB"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/policy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,EAAE,CA2FjB"}
@@ -18,7 +18,6 @@ export function installPolicy(targetDir, profileName, profile, dryRun, techProfi
18
18
  const blockedPaths = profile.blockedPaths ?? [
19
19
  '.reagent/policy.yaml',
20
20
  '.reagent/HALT',
21
- '.reagent/review-cache.json',
22
21
  '.github/workflows/',
23
22
  '.env',
24
23
  '.env.*',
@@ -76,6 +75,16 @@ coverage:
76
75
  # disabled — no gate (not recommended)
77
76
  security:
78
77
  disclosure_mode: "${disclosureMode}"
78
+
79
+ # Context protection — commands that must run in subagents, never in coordinator
80
+ # The dangerous-bash-interceptor hook blocks these commands when run directly.
81
+ # Prevents context window exhaustion from verbose test/build output.
82
+ context_protection:
83
+ delegate_to_subagent:
84
+ - "pnpm run preflight"
85
+ - "pnpm run test"
86
+ - "pnpm run build"
87
+ max_bash_output_lines: 100
79
88
  `;
80
89
  fs.writeFileSync(policyPath, content, 'utf8');
81
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,WAAmB,EACnB,OAAsB,EACtB,MAAe,EACf,WAAoB;IAEpB,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAExD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC;QAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,cAAc,IAAI,UAAU,CAAC;QACtE,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;QAC3D,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC;QAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI;YAC3C,sBAAsB;YACtB,eAAe;YACf,4BAA4B;YAC5B,oBAAoB;YACpB,MAAM;YACN,QAAQ;SACT,CAAC;QACF,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM;YAC1C,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACjE,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,OAAO,GAAG,+DAA+D,WAAW;;;;;YAKlF,WAAW;EACrB,WAAW,CAAC,CAAC,CAAC,kBAAkB,WAAW,KAAK,CAAC,CAAC,CAAC,EAAE,0BAA0B,WAAW;iBAC3E,GAAG;;;;;;;;;;;;;;;;;;wBAkBI,gBAAgB;;;gBAGxB,gBAAgB;;;;;;;;;;;;aAYnB,eAAe;eACb,iBAAiB;;;;;;;;sBAQV,cAAc;CACnC,CAAC;QACE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,WAAmB,EACnB,OAAsB,EACtB,MAAe,EACf,WAAoB;IAEpB,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAExD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC;QAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,cAAc,IAAI,UAAU,CAAC;QACtE,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;QAC3D,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC;QAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI;YAC3C,sBAAsB;YACtB,eAAe;YACf,oBAAoB;YACpB,MAAM;YACN,QAAQ;SACT,CAAC;QACF,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM;YAC1C,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACjE,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,OAAO,GAAG,+DAA+D,WAAW;;;;;YAKlF,WAAW;EACrB,WAAW,CAAC,CAAC,CAAC,kBAAkB,WAAW,KAAK,CAAC,CAAC,CAAC,EAAE,0BAA0B,WAAW;iBAC3E,GAAG;;;;;;;;;;;;;;;;;;wBAkBI,gBAAgB;;;gBAGxB,gBAAgB;;;;;;;;;;;;aAYnB,eAAe;eACb,iBAAiB;;;;;;;;sBAQV,cAAc;;;;;;;;;;;CAWnC,CAAC;QACE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runObsidian(args: string[]): void;
2
+ //# sourceMappingURL=obsidian.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/obsidian.ts"],"names":[],"mappings":"AAOA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA0BhD"}
@@ -0,0 +1,187 @@
1
+ import { VaultWriter } from '../../obsidian/vault-writer.js';
2
+ import { ObsidianCli } from '../../obsidian/cli.js';
3
+ import { parseFlag } from '../utils.js';
4
+ const VALID_TARGETS = ['kanban', 'context', 'wiki', 'tasks'];
5
+ export function runObsidian(args) {
6
+ const subcommand = args[0];
7
+ if (!subcommand || subcommand === 'help' || subcommand === '--help') {
8
+ printObsidianHelp();
9
+ return;
10
+ }
11
+ switch (subcommand) {
12
+ case 'sync':
13
+ runObsidianSync(args.slice(1));
14
+ break;
15
+ case 'status':
16
+ runObsidianStatus();
17
+ break;
18
+ case 'health':
19
+ runObsidianHealth();
20
+ break;
21
+ case 'journal':
22
+ runObsidianJournal();
23
+ break;
24
+ default:
25
+ console.error(`Unknown obsidian subcommand: ${subcommand}`);
26
+ printObsidianHelp();
27
+ process.exit(1);
28
+ }
29
+ }
30
+ function runObsidianSync(args) {
31
+ const dryRun = args.includes('--dry-run');
32
+ const targetFlag = parseFlag(args, '--target');
33
+ if (targetFlag && !VALID_TARGETS.includes(targetFlag)) {
34
+ console.error(`Invalid sync target: ${targetFlag}`);
35
+ console.error(`Valid targets: ${VALID_TARGETS.join(', ')}`);
36
+ process.exit(1);
37
+ }
38
+ const writer = new VaultWriter(process.cwd());
39
+ if (!writer.isEnabled()) {
40
+ console.log('Obsidian vault integration is not configured or disabled.');
41
+ console.log('');
42
+ console.log('To enable:');
43
+ console.log(' 1. Set REAGENT_OBSIDIAN_VAULT env var to your vault path');
44
+ console.log(' 2. Run: reagent init --obsidian');
45
+ console.log(' 3. Set obsidian_vault.enabled: true in .reagent/gateway.yaml');
46
+ return;
47
+ }
48
+ if (dryRun) {
49
+ console.log('Dry run — no files will be written.\n');
50
+ }
51
+ if (targetFlag) {
52
+ const result = targetFlag === 'kanban'
53
+ ? writer.syncKanban(dryRun)
54
+ : targetFlag === 'context'
55
+ ? writer.syncContextDump(dryRun)
56
+ : targetFlag === 'wiki'
57
+ ? writer.syncWiki(dryRun)
58
+ : writer.syncTasks(dryRun);
59
+ printSyncResult(result);
60
+ }
61
+ else {
62
+ const results = writer.syncAll(dryRun);
63
+ for (const result of results) {
64
+ printSyncResult(result);
65
+ }
66
+ }
67
+ }
68
+ function runObsidianStatus() {
69
+ const writer = new VaultWriter(process.cwd());
70
+ const config = writer.getConfig();
71
+ if (!config) {
72
+ console.log('Obsidian vault: not configured');
73
+ return;
74
+ }
75
+ console.log('Obsidian vault: enabled');
76
+ console.log(` Vault path: ${config.vault_path}`);
77
+ if (config.vault_name) {
78
+ console.log(` Vault name: ${config.vault_name}`);
79
+ }
80
+ // CLI availability
81
+ const cliAvailable = ObsidianCli.isAvailable();
82
+ console.log(` Obsidian CLI: ${cliAvailable ? 'available' : 'not found'}`);
83
+ console.log(' Paths:');
84
+ console.log(` root: ${config.paths.root}`);
85
+ console.log(` kanban: ${config.paths.kanban}`);
86
+ console.log(` sources: ${config.paths.sources}`);
87
+ console.log(` wiki: ${config.paths.wiki}`);
88
+ console.log(` tasks: ${config.paths.tasks}`);
89
+ console.log(` sessions: ${config.paths.sessions}`);
90
+ console.log(' Sync targets:');
91
+ console.log(` kanban: ${config.sync.kanban ? 'enabled' : 'disabled'}`);
92
+ console.log(` context_dump: ${config.sync.context_dump ? 'enabled' : 'disabled'}`);
93
+ console.log(` wiki_refresh: ${config.sync.wiki_refresh ? 'enabled' : 'disabled'}`);
94
+ console.log(` journal: ${config.sync.journal ? 'enabled' : 'disabled'}`);
95
+ console.log(` precompact: ${config.sync.precompact ? 'enabled' : 'disabled'}`);
96
+ console.log(` tasks: ${config.sync.tasks ? 'enabled' : 'disabled'}`);
97
+ }
98
+ function runObsidianHealth() {
99
+ const writer = new VaultWriter(process.cwd());
100
+ const config = writer.getConfig();
101
+ if (!config) {
102
+ console.log('Obsidian vault: not configured');
103
+ return;
104
+ }
105
+ if (!ObsidianCli.isAvailable()) {
106
+ console.log('Obsidian CLI not found at /usr/local/bin/obsidian');
107
+ return;
108
+ }
109
+ if (!config.vault_name) {
110
+ console.log('vault_name not set in gateway.yaml — required for CLI commands');
111
+ return;
112
+ }
113
+ const cli = new ObsidianCli(config.vault_name);
114
+ const health = cli.vaultHealth();
115
+ if (!health) {
116
+ console.log('Failed to get vault health metrics');
117
+ return;
118
+ }
119
+ console.log(`Vault health — ${config.vault_name}:`);
120
+ console.log(` Orphans: ${health.orphans}`);
121
+ console.log(` Unresolved: ${health.unresolved}`);
122
+ console.log(` Dead ends: ${health.deadends}`);
123
+ }
124
+ function runObsidianJournal() {
125
+ const writer = new VaultWriter(process.cwd());
126
+ const config = writer.getConfig();
127
+ if (!config) {
128
+ console.log('Obsidian vault: not configured');
129
+ return;
130
+ }
131
+ if (!ObsidianCli.isAvailable()) {
132
+ console.log('Obsidian CLI not found at /usr/local/bin/obsidian');
133
+ return;
134
+ }
135
+ if (!config.vault_name) {
136
+ console.log('vault_name not set in gateway.yaml — required for CLI commands');
137
+ return;
138
+ }
139
+ if (!config.sync.journal) {
140
+ console.log('Journal sync not enabled in gateway.yaml');
141
+ return;
142
+ }
143
+ const cli = new ObsidianCli(config.vault_name);
144
+ const projectName = process.cwd().split('/').pop() || 'unknown';
145
+ const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 16);
146
+ const content = `### ${projectName} — Manual journal entry (${timestamp})\n\n- Triggered via \`reagent obsidian journal\`\n\n---\n`;
147
+ const success = cli.dailyAppend(content);
148
+ if (success) {
149
+ console.log('Session journal entry appended to daily note');
150
+ }
151
+ else {
152
+ console.log('Failed to append journal entry');
153
+ }
154
+ }
155
+ function printSyncResult(result) {
156
+ if (result.written) {
157
+ console.log(` [synced] ${result.target} → ${result.path}`);
158
+ }
159
+ else if (result.error) {
160
+ console.log(` [skip] ${result.target}: ${result.error}`);
161
+ }
162
+ else {
163
+ console.log(` [skip] ${result.target}: not configured`);
164
+ }
165
+ }
166
+ function printObsidianHelp() {
167
+ console.log(`
168
+ reagent obsidian — Obsidian vault integration
169
+
170
+ Usage:
171
+ reagent obsidian sync [--target kanban|context|wiki|tasks] [--dry-run]
172
+ reagent obsidian status
173
+ reagent obsidian health
174
+ reagent obsidian journal
175
+
176
+ Commands:
177
+ sync Sync enabled targets to the Obsidian vault
178
+ status Show current Obsidian configuration and CLI availability
179
+ health Show vault health metrics (orphans, unresolved links, dead ends)
180
+ journal Manually trigger a session journal entry in the daily note
181
+
182
+ Options:
183
+ --target <name> Sync a specific target only (kanban, context, wiki, tasks)
184
+ --dry-run Preview what would be written without writing files
185
+ `);
186
+ }
187
+ //# sourceMappingURL=obsidian.js.map