@bookedsolid/reagent 0.13.2 → 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.
- package/README.md +149 -6
- package/dist/cli/commands/init/claude-md.d.ts +5 -0
- package/dist/cli/commands/init/claude-md.d.ts.map +1 -1
- package/dist/cli/commands/init/claude-md.js +21 -1
- package/dist/cli/commands/init/claude-md.js.map +1 -1
- package/dist/cli/commands/init/index.d.ts.map +1 -1
- package/dist/cli/commands/init/index.js +16 -4
- package/dist/cli/commands/init/index.js.map +1 -1
- package/dist/cli/commands/init/mcp-config.js +6 -6
- package/dist/cli/commands/init/mcp-config.js.map +1 -1
- package/dist/cli/commands/init/obsidian.d.ts +16 -0
- package/dist/cli/commands/init/obsidian.d.ts.map +1 -0
- package/dist/cli/commands/init/obsidian.js +95 -0
- package/dist/cli/commands/init/obsidian.js.map +1 -0
- package/dist/cli/commands/init/policy.d.ts.map +1 -1
- package/dist/cli/commands/init/policy.js +10 -1
- package/dist/cli/commands/init/policy.js.map +1 -1
- package/dist/cli/commands/obsidian.d.ts +2 -0
- package/dist/cli/commands/obsidian.d.ts.map +1 -0
- package/dist/cli/commands/obsidian.js +187 -0
- package/dist/cli/commands/obsidian.js.map +1 -0
- package/dist/cli/commands/upgrade-policy.d.ts +17 -0
- package/dist/cli/commands/upgrade-policy.d.ts.map +1 -0
- package/dist/cli/commands/upgrade-policy.js +123 -0
- package/dist/cli/commands/upgrade-policy.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +8 -26
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/gateway/native-tools.d.ts.map +1 -1
- package/dist/gateway/native-tools.js +39 -0
- package/dist/gateway/native-tools.js.map +1 -1
- package/dist/obsidian/cli.d.ts +49 -0
- package/dist/obsidian/cli.d.ts.map +1 -0
- package/dist/obsidian/cli.js +128 -0
- package/dist/obsidian/cli.js.map +1 -0
- package/dist/obsidian/index.d.ts +7 -0
- package/dist/obsidian/index.d.ts.map +1 -0
- package/dist/obsidian/index.js +5 -0
- package/dist/obsidian/index.js.map +1 -0
- package/dist/obsidian/kanban-generator.d.ts +9 -0
- package/dist/obsidian/kanban-generator.d.ts.map +1 -0
- package/dist/obsidian/kanban-generator.js +63 -0
- package/dist/obsidian/kanban-generator.js.map +1 -0
- package/dist/obsidian/vault-config.d.ts +142 -0
- package/dist/obsidian/vault-config.d.ts.map +1 -0
- package/dist/obsidian/vault-config.js +92 -0
- package/dist/obsidian/vault-config.js.map +1 -0
- package/dist/obsidian/vault-writer.d.ts +52 -0
- package/dist/obsidian/vault-writer.d.ts.map +1 -0
- package/dist/obsidian/vault-writer.js +166 -0
- package/dist/obsidian/vault-writer.js.map +1 -0
- package/dist/types/policy.d.ts +4 -0
- package/dist/types/policy.d.ts.map +1 -1
- package/hooks/dangerous-bash-interceptor.sh +43 -0
- package/hooks/reagent-obsidian-journal.sh +69 -0
- package/hooks/reagent-obsidian-precompact.sh +88 -0
- package/hooks/reagent-obsidian-tasks.sh +126 -0
- package/package.json +2 -2
- package/profiles/bst-internal.json +1 -1
- package/profiles/client-engagement.json +2 -2
package/README.md
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
# @bookedsolid/reagent
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Governance layer for Claude Code — policy enforcement, hook-based safety gates, and audit logging for AI-assisted projects.
|
|
4
4
|
|
|
5
|
-
reagent
|
|
6
|
-
graduated autonomy policies, redacts secrets before they touch the model, logs a
|
|
7
|
-
hash-chained audit trail, and can halt all agent operations with a single command.
|
|
8
|
-
Put it in `.mcp.json` once, and every project that uses it gets the same safety layer.
|
|
5
|
+
reagent enforces policy, prevents dangerous operations, and audits AI agent activity in Claude Code projects. One command (`reagent init`) installs 23 safety hooks and a full engineering team of AI specialists into your project. Every tool call — from every AI agent — is governed by your `policy.yaml`. It's Claude Code + accountability.
|
|
9
6
|
|
|
10
7
|
## What it is
|
|
11
8
|
|
|
@@ -377,6 +374,143 @@ the task board from within Claude Code conversations.
|
|
|
377
374
|
{"id":"T-001","type":"completed","title":"Implement login flow","commit_refs":["abc1234"],"pr_ref":"#42","timestamp":"2026-04-01T14:30:00.000Z"}
|
|
378
375
|
```
|
|
379
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
|
+
|
|
380
514
|
## CLI reference
|
|
381
515
|
|
|
382
516
|
```
|
|
@@ -391,6 +525,8 @@ reagent init [options]
|
|
|
391
525
|
--tasks-channel <id> Discord channel ID for task events
|
|
392
526
|
--releases-channel Discord channel ID for release events
|
|
393
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
|
|
394
530
|
|
|
395
531
|
reagent serve
|
|
396
532
|
Starts the MCP server on stdio. Loaded by Claude Code via .mcp.json.
|
|
@@ -411,12 +547,19 @@ reagent catalyze [targetDir]
|
|
|
411
547
|
--audit Compare current state against the last plan and show drift
|
|
412
548
|
--dry-run Print analysis without writing files
|
|
413
549
|
|
|
414
|
-
reagent upgrade [--dry-run]
|
|
550
|
+
reagent upgrade [--dry-run] [--clean-blocked-paths]
|
|
415
551
|
Re-syncs installed hooks from the current package version and updates the
|
|
416
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.
|
|
417
556
|
|
|
418
557
|
reagent cache <set|get|del> <key> [value]
|
|
419
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.
|
|
420
563
|
```
|
|
421
564
|
|
|
422
565
|
## Configuration
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import type { InstallResult, ClaudeMdConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Detect the package manager in use by checking for lockfiles in the target directory.
|
|
4
|
+
* Returns the appropriate preflight command string.
|
|
5
|
+
*/
|
|
6
|
+
export declare function detectPreflightCmd(targetDir: string): string;
|
|
2
7
|
export declare function installClaudeMd(targetDir: string, claudeMdConfig: ClaudeMdConfig, dryRun: boolean): InstallResult[];
|
|
3
8
|
//# sourceMappingURL=claude-md.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/claude-md.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,OAAO,GACd,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/claude-md.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO5D;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,OAAO,GACd,aAAa,EAAE,CAmEjB"}
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { PKG_ROOT, getPkgVersion } from '../../utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* Detect the package manager in use by checking for lockfiles in the target directory.
|
|
6
|
+
* Returns the appropriate preflight command string.
|
|
7
|
+
*/
|
|
8
|
+
export function detectPreflightCmd(targetDir) {
|
|
9
|
+
if (fs.existsSync(path.join(targetDir, 'pnpm-lock.yaml')))
|
|
10
|
+
return 'pnpm preflight';
|
|
11
|
+
if (fs.existsSync(path.join(targetDir, 'yarn.lock')))
|
|
12
|
+
return 'yarn preflight';
|
|
13
|
+
if (fs.existsSync(path.join(targetDir, 'bun.lockb')))
|
|
14
|
+
return 'bun run preflight';
|
|
15
|
+
if (fs.existsSync(path.join(targetDir, 'package-lock.json')))
|
|
16
|
+
return 'npm run preflight';
|
|
17
|
+
// No lockfile found — safe fallback
|
|
18
|
+
return 'npm run preflight';
|
|
19
|
+
}
|
|
4
20
|
export function installClaudeMd(targetDir, claudeMdConfig, dryRun) {
|
|
5
21
|
const PKG_VERSION = getPkgVersion();
|
|
6
22
|
const claudeMdPath = path.join(targetDir, 'CLAUDE.md');
|
|
@@ -9,11 +25,15 @@ export function installClaudeMd(targetDir, claudeMdConfig, dryRun) {
|
|
|
9
25
|
console.error(' ERROR: templates/CLAUDE.md not found in package.');
|
|
10
26
|
return [{ file: 'CLAUDE.md', status: 'warn' }];
|
|
11
27
|
}
|
|
28
|
+
// Use the resolved preflight command from the config. The caller (index.ts) is responsible
|
|
29
|
+
// for running detectPreflightCmd and injecting it; claudeMdConfig.preflightCmd is the
|
|
30
|
+
// already-resolved value. Fall back to the safe default only if nothing was provided.
|
|
31
|
+
const preflightCmd = claudeMdConfig.preflightCmd || 'npm run preflight';
|
|
12
32
|
let template = fs.readFileSync(templatePath, 'utf8');
|
|
13
33
|
const safe = (val) => String(val).replace(/\{\{[^}]*\}\}/g, '');
|
|
14
34
|
template = template
|
|
15
35
|
.replace(/\{\{VERSION\}\}/g, PKG_VERSION)
|
|
16
|
-
.replace(/\{\{PREFLIGHT_CMD\}\}/g, safe(
|
|
36
|
+
.replace(/\{\{PREFLIGHT_CMD\}\}/g, safe(preflightCmd))
|
|
17
37
|
.replace(/\{\{ATTRIBUTION_RULE\}\}/g, safe(claudeMdConfig.attributionRule || 'Do not include AI attribution in client-facing content.'));
|
|
18
38
|
const MARKER_START = '<!-- reagent-managed:start -->';
|
|
19
39
|
const MARKER_END = '<!-- reagent-managed:end -->';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGzD,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,cAA8B,EAC9B,MAAe;IAEf,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAEnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAExE,QAAQ,GAAG,QAAQ;SAChB,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC;SACxC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/claude-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/index.ts"],"names":[],"mappings":"
|
|
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"}
|
|
@@ -5,7 +5,7 @@ import { installGitignoreEntries } from './gitignore.js';
|
|
|
5
5
|
import { installCursorRules } from './cursor-rules.js';
|
|
6
6
|
import { installHuskyHook } from './husky-hooks.js';
|
|
7
7
|
import { installClaudeHooks } from './claude-hooks.js';
|
|
8
|
-
import { installClaudeMd } from './claude-md.js';
|
|
8
|
+
import { installClaudeMd, detectPreflightCmd } from './claude-md.js';
|
|
9
9
|
import { installPolicy } from './policy.js';
|
|
10
10
|
import { installGatewayConfig, checkMcpDuplicates } from './gateway-config.js';
|
|
11
11
|
import { installMcpJson } from './mcp-config.js';
|
|
@@ -15,13 +15,17 @@ 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();
|
|
27
|
+
// --preflight-cmd overrides lockfile detection; used to inject a custom preflight command
|
|
28
|
+
const preflightCmdOverride = parseFlag(args, '--preflight-cmd');
|
|
25
29
|
// Validate profile name format
|
|
26
30
|
if (!/^[a-z0-9][a-z0-9-]*$/.test(profileName)) {
|
|
27
31
|
console.error(`Invalid profile name: "${profileName}" (only lowercase letters, numbers, hyphens allowed)`);
|
|
@@ -98,7 +102,10 @@ export function runInit(args) {
|
|
|
98
102
|
}
|
|
99
103
|
// Step 7: CLAUDE.md
|
|
100
104
|
if (profile.claudeMd) {
|
|
101
|
-
|
|
105
|
+
// Resolve preflight command: CLI flag > lockfile detection > profile default > safe fallback
|
|
106
|
+
const resolvedPreflightCmd = preflightCmdOverride || detectPreflightCmd(targetDir);
|
|
107
|
+
const claudeMdConfig = { ...profile.claudeMd, preflightCmd: resolvedPreflightCmd };
|
|
108
|
+
results.push(...installClaudeMd(targetDir, claudeMdConfig, dryRun));
|
|
102
109
|
}
|
|
103
110
|
// Step 8: Policy
|
|
104
111
|
results.push(...installPolicy(targetDir, profileName, profile, dryRun, isTechProfile ? profileName : undefined));
|
|
@@ -130,7 +137,12 @@ export function runInit(args) {
|
|
|
130
137
|
const discordOpts = parseDiscordArgs(args);
|
|
131
138
|
results.push(...installDiscord(targetDir, discordOpts, dryRun));
|
|
132
139
|
}
|
|
133
|
-
// Step 15:
|
|
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
|
|
134
146
|
if (isTechProfile) {
|
|
135
147
|
const profileResult = installProfile(profileName, targetDir, dryRun);
|
|
136
148
|
results.push(...profileResult.results);
|
|
@@ -177,7 +189,7 @@ function printSummary(results, dryRun, showCommitInstructions) {
|
|
|
177
189
|
console.log('\n✓ reagent init complete');
|
|
178
190
|
if (showCommitInstructions) {
|
|
179
191
|
console.log('\nCommit these files (safe to commit):');
|
|
180
|
-
console.log(' git add .mcp.json .cursor/rules/ .husky/ .claude/commands/ CLAUDE.md .reagent/policy.yaml .reagent/gateway.yaml && git commit -m "chore: add reagent
|
|
192
|
+
console.log(' git add .mcp.json .cursor/rules/ .husky/ .claude/commands/ CLAUDE.md .reagent/policy.yaml .reagent/gateway.yaml && git commit -m "chore: add reagent governance config"');
|
|
181
193
|
console.log('');
|
|
182
194
|
console.log('Do NOT commit (gitignored — stays on your machine):');
|
|
183
195
|
console.log(' .claude/hooks/');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
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.
|
|
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
|
-
*
|
|
14
|
-
* whether reagent
|
|
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,
|
|
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,
|
|
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,
|
|
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 @@
|
|
|
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"}
|