@vortex-os/base 0.4.0 → 0.5.0

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/dist/index.d.ts CHANGED
@@ -88,7 +88,7 @@ declare function moduleDir(ctx: ModuleContext, moduleName: string): string;
88
88
  * Instance configuration for VortEX, read from `<agentDir>/vortex.json`.
89
89
  *
90
90
  * The config exists to give the user control over the **auto-maintained**
91
- * operational behaviors (see `AGENT.md` → "Default behaviors") without
91
+ * operational behaviors (see `AI-RULES.md` → "Default behaviors") without
92
92
  * touching code: toggle any auto-record off, and declare how this machine's
93
93
  * environment is detected. A fresh instance has no config file — everything
94
94
  * is on, no environment — so the framework works out of the box and the file
@@ -108,6 +108,29 @@ interface AutoRecordConfig {
108
108
  * rebuilt.
109
109
  */
110
110
  readonly archive: boolean;
111
+ /**
112
+ * Auto-vectorize: at session start (after catch-up), embed any
113
+ * newly-archived sessions and memories so semantic recall — including the
114
+ * ambient "did we discuss this?" path — stays current without a manual
115
+ * rebuild. **Gated on the recall index already existing** (`_indexes/
116
+ * memory.sqlite`): until the user has set recall up once (which downloads the
117
+ * embedding model), this is a silent no-op, so it never triggers a download
118
+ * on its own. On by default; off → vectors only update on an explicit
119
+ * `/recall` / rebuild.
120
+ */
121
+ readonly vectorize: boolean;
122
+ /**
123
+ * Auto-download the embedding model the FIRST time recall is set up. When
124
+ * `@vortex-os/memory-extended` is installed but the recall index does not
125
+ * exist yet, session start kicks off a **background** worker that downloads
126
+ * the model (~470 MB, once) and builds the index — so installing the add-on
127
+ * is itself the opt-in and search turns on without a manual `/recall`. The
128
+ * download never blocks session start (it runs detached). On by default; set
129
+ * `false` — or env `VORTEX_VECTORIZE_AUTO_DOWNLOAD=0` — to keep the first
130
+ * download manual (metered connections, CI). Independent of `vectorize`: if
131
+ * `vectorize` is off, nothing runs regardless.
132
+ */
133
+ readonly vectorizeAutoDownload: boolean;
111
134
  }
112
135
  /**
113
136
  * One environment label plus the signal that selects it. Rules are evaluated
@@ -129,8 +152,22 @@ interface EnvironmentRule {
129
152
  readonly equals?: string;
130
153
  };
131
154
  }
155
+ /**
156
+ * Update-awareness behavior. `check` controls the once-per-session check for a
157
+ * newer published `@vortex-os/base`:
158
+ * - `"session"` (default): check the npm registry once at session start and,
159
+ * when a newer version exists, surface it (the agent then asks before any
160
+ * install — nothing is installed automatically). Offline → silent skip.
161
+ * - `"off"`: no automatic check, no network contact for updates.
162
+ * On either setting the local "templates not yet applied" notice (no network)
163
+ * and the on-demand `vortex check-updates` still work.
164
+ */
165
+ interface UpdatesConfig {
166
+ readonly check: "session" | "off";
167
+ }
132
168
  interface VortexConfig {
133
169
  readonly autoRecord: AutoRecordConfig;
170
+ readonly updates: UpdatesConfig;
134
171
  readonly environments: readonly EnvironmentRule[];
135
172
  }
136
173
  /** Path of the instance config file: `<agentDir>/vortex.json`. */
@@ -215,6 +252,7 @@ declare function validateDataRelativePath(dataDir: string, rel: string, _options
215
252
  * @param body File contents (UTF-8).
216
253
  */
217
254
  declare function exclusiveCreateFile(absPath: string, body: string): Promise<void>;
255
+ declare function atomicWriteFile(absPath: string, body: string): Promise<void>;
218
256
 
219
257
  //# sourceMappingURL=index.d.ts.map
220
258
 
@@ -223,8 +261,10 @@ type index_d$d_EnvironmentRule = EnvironmentRule;
223
261
  type index_d$d_FrontmatterDoc<T = Record<string, unknown>> = FrontmatterDoc<T>;
224
262
  type index_d$d_ModuleContext = ModuleContext;
225
263
  type index_d$d_Privacy = Privacy;
264
+ type index_d$d_UpdatesConfig = UpdatesConfig;
226
265
  type index_d$d_ValidateDataRelativePathOptions = ValidateDataRelativePathOptions;
227
266
  type index_d$d_VortexConfig = VortexConfig;
267
+ declare const index_d$d_atomicWriteFile: typeof atomicWriteFile;
228
268
  declare const index_d$d_exclusiveCreateFile: typeof exclusiveCreateFile;
229
269
  declare const index_d$d_isVisibleAt: typeof isVisibleAt;
230
270
  declare const index_d$d_loadVortexConfig: typeof loadVortexConfig;
@@ -238,7 +278,7 @@ declare const index_d$d_serializeFrontmatter: typeof serializeFrontmatter;
238
278
  declare const index_d$d_validateDataRelativePath: typeof validateDataRelativePath;
239
279
  declare const index_d$d_vortexConfigPath: typeof vortexConfigPath;
240
280
  declare namespace index_d$d {
241
- export { type index_d$d_AutoRecordConfig as AutoRecordConfig, type index_d$d_EnvironmentRule as EnvironmentRule, type index_d$d_FrontmatterDoc as FrontmatterDoc, type index_d$d_ModuleContext as ModuleContext, type index_d$d_Privacy as Privacy, type index_d$d_ValidateDataRelativePathOptions as ValidateDataRelativePathOptions, type index_d$d_VortexConfig as VortexConfig, index_d$d_exclusiveCreateFile as exclusiveCreateFile, index_d$d_isVisibleAt as isVisibleAt, index_d$d_loadVortexConfig as loadVortexConfig, index_d$d_makeContext as makeContext, index_d$d_maxPrivacy as maxPrivacy, index_d$d_moduleDir as moduleDir, index_d$d_normalizePrivacy as normalizePrivacy, index_d$d_parseFrontmatter as parseFrontmatter, index_d$d_resolveEnvironment as resolveEnvironment, index_d$d_serializeFrontmatter as serializeFrontmatter, index_d$d_validateDataRelativePath as validateDataRelativePath, index_d$d_vortexConfigPath as vortexConfigPath };
281
+ export { type index_d$d_AutoRecordConfig as AutoRecordConfig, type index_d$d_EnvironmentRule as EnvironmentRule, type index_d$d_FrontmatterDoc as FrontmatterDoc, type index_d$d_ModuleContext as ModuleContext, type index_d$d_Privacy as Privacy, type index_d$d_UpdatesConfig as UpdatesConfig, type index_d$d_ValidateDataRelativePathOptions as ValidateDataRelativePathOptions, type index_d$d_VortexConfig as VortexConfig, index_d$d_atomicWriteFile as atomicWriteFile, index_d$d_exclusiveCreateFile as exclusiveCreateFile, index_d$d_isVisibleAt as isVisibleAt, index_d$d_loadVortexConfig as loadVortexConfig, index_d$d_makeContext as makeContext, index_d$d_maxPrivacy as maxPrivacy, index_d$d_moduleDir as moduleDir, index_d$d_normalizePrivacy as normalizePrivacy, index_d$d_parseFrontmatter as parseFrontmatter, index_d$d_resolveEnvironment as resolveEnvironment, index_d$d_serializeFrontmatter as serializeFrontmatter, index_d$d_validateDataRelativePath as validateDataRelativePath, index_d$d_vortexConfigPath as vortexConfigPath };
242
282
  }
243
283
 
244
284
  /**
@@ -536,7 +576,17 @@ declare function privacyValid(): LintRule;
536
576
  interface WikiLinkResolvesOptions {
537
577
  /** Directory under which valid link targets live. Searched recursively. */
538
578
  readonly searchRoot: string;
539
- /** Target file extensions. Defaults to `[".md"]`. */
579
+ /**
580
+ * Target file extensions. Defaults to `[".md"]`.
581
+ *
582
+ * `.md` targets are keyed by basename (extension stripped) — `[[Foo]]`
583
+ * resolves `Foo.md`. Any non-`.md` extension listed here keeps its
584
+ * extension in the index, so `[[Foo.pdf]]` resolves `Foo.pdf` while a bare
585
+ * `[[Foo]]` never silently matches an attachment. Mirrors the resolution
586
+ * contract in `@vortex-os/link-rewriter` (`resolve.ts`). Pass attachment
587
+ * extensions here (e.g. `[".md", ".pdf", ".png"]`) so imported binaries are
588
+ * treated as valid link targets instead of false "unresolved" findings.
589
+ */
540
590
  readonly extensions?: readonly string[];
541
591
  }
542
592
  /**
@@ -550,6 +600,23 @@ interface WikiLinkResolvesOptions {
550
600
  */
551
601
  declare function wikiLinkResolves(options: WikiLinkResolvesOptions): LintRule;
552
602
 
603
+ /**
604
+ * Rule for `data/_memory/*.md` entries: the memory `type` must be a TOP-LEVEL
605
+ * frontmatter field — the index generator and the recall layer read
606
+ * `frontmatter.type` — never nested under `metadata`, and never the generic
607
+ * `note` default (which silently misclassifies the memory in type-aware
608
+ * recall). Scoped to files under a `_memory/` directory; the generated indexes
609
+ * (`_INDEX.md`, `MEMORY.md`) and `_TEMPLATE*` skeletons are skipped, and files
610
+ * in any other directory pass untouched.
611
+ *
612
+ * It does NOT enforce a closed type vocabulary: instances may extend the set
613
+ * (e.g. `infra`, `work`), and the built-in `memory-system` accepts any string.
614
+ * The two things this guards are the observed drift modes — a `metadata.type`
615
+ * the code never reads, and the `type: note` leak from the harness-memory
616
+ * format — both of which `require-frontmatter`/`privacy-valid` let through.
617
+ */
618
+ declare function memoryFrontmatter(): LintRule;
619
+
553
620
  //# sourceMappingURL=index.d.ts.map
554
621
 
555
622
  type index_d$a_LintFinding = LintFinding;
@@ -561,11 +628,12 @@ type index_d$a_RequireFrontmatterOptions = RequireFrontmatterOptions;
561
628
  type index_d$a_Severity = Severity;
562
629
  type index_d$a_WikiLinkResolvesOptions = WikiLinkResolvesOptions;
563
630
  declare const index_d$a_lintDirectory: typeof lintDirectory;
631
+ declare const index_d$a_memoryFrontmatter: typeof memoryFrontmatter;
564
632
  declare const index_d$a_privacyValid: typeof privacyValid;
565
633
  declare const index_d$a_requireFrontmatter: typeof requireFrontmatter;
566
634
  declare const index_d$a_wikiLinkResolves: typeof wikiLinkResolves;
567
635
  declare namespace index_d$a {
568
- export { type index_d$a_LintFinding as LintFinding, type index_d$a_LintInput as LintInput, type index_d$a_LintOptions as LintOptions, type index_d$a_LintReport as LintReport, type index_d$a_LintRule as LintRule, type index_d$a_RequireFrontmatterOptions as RequireFrontmatterOptions, type index_d$a_Severity as Severity, type index_d$a_WikiLinkResolvesOptions as WikiLinkResolvesOptions, index_d$a_lintDirectory as lintDirectory, index_d$a_privacyValid as privacyValid, index_d$a_requireFrontmatter as requireFrontmatter, index_d$a_wikiLinkResolves as wikiLinkResolves };
636
+ export { type index_d$a_LintFinding as LintFinding, type index_d$a_LintInput as LintInput, type index_d$a_LintOptions as LintOptions, type index_d$a_LintReport as LintReport, type index_d$a_LintRule as LintRule, type index_d$a_RequireFrontmatterOptions as RequireFrontmatterOptions, type index_d$a_Severity as Severity, type index_d$a_WikiLinkResolvesOptions as WikiLinkResolvesOptions, index_d$a_lintDirectory as lintDirectory, index_d$a_memoryFrontmatter as memoryFrontmatter, index_d$a_privacyValid as privacyValid, index_d$a_requireFrontmatter as requireFrontmatter, index_d$a_wikiLinkResolves as wikiLinkResolves };
569
637
  }
570
638
 
571
639
  type PitfallSeverity = "info" | "warning" | "error";
@@ -984,6 +1052,13 @@ interface IndexEntry {
984
1052
  readonly type?: string;
985
1053
  /** Frontmatter `updated` or `created` value, ISO `YYYY-MM-DD` when parseable. */
986
1054
  readonly updated?: string;
1055
+ /**
1056
+ * Frontmatter `scope` value, if present. `always` marks a memory the agent
1057
+ * should load every session (the always-on tier); absent means on-demand
1058
+ * (load by relevance from the index). Surfaced as a column in `_INDEX.md`
1059
+ * only when some entry sets it.
1060
+ */
1061
+ readonly scope?: string;
987
1062
  }
988
1063
  /**
989
1064
  * Options controlling {@link scanDirectory}.
@@ -1027,7 +1102,7 @@ interface RenderIndexInput {
1027
1102
  privacy?: "public" | "internal" | "personal" | string;
1028
1103
  /** Extra frontmatter tags besides the default `[index]`. */
1029
1104
  extraTags?: readonly string[];
1030
- /** Optional "관련" links rendered after the entry list. */
1105
+ /** Optional "Related" links rendered after the entry list. */
1031
1106
  related?: readonly string[];
1032
1107
  }
1033
1108
 
@@ -1060,14 +1135,14 @@ declare function scanDirectory(rootDir: string, opts?: ScanOptions): Promise<rea
1060
1135
  *
1061
1136
  * > <description>
1062
1137
  *
1063
- * ## 항목 (<count>)
1138
+ * ## Items (<count>)
1064
1139
  *
1065
- * | 파일 | 설명 | 갱신 |
1140
+ * | File | Description | Updated |
1066
1141
  * |---|---|---|
1067
1142
  * | [[<name>]] | <description or title> | <updated> |
1068
1143
  * ...
1069
1144
  *
1070
- * ## 관련 (only if `related` is non-empty)
1145
+ * ## Related (only if `related` is non-empty)
1071
1146
  *
1072
1147
  * - [[<related[0]>]]
1073
1148
  * ...
@@ -1269,7 +1344,7 @@ declare function extractWikiLinks(body: string): readonly WikiLink[];
1269
1344
  * bare wiki links like `[[Foo]]`, which Obsidian resolves by filename
1270
1345
  * anywhere in the vault.
1271
1346
  * - `byRelPath` — forward-slash relative path (no `.md`) → absolute path.
1272
- * Used for path-aware wiki links like `[[Projects/Home/Foo]]` or
1347
+ * Used for path-aware wiki links like `[[some-topic/Foo]]` or
1273
1348
  * `[[../Foo]]`, where the operator wrote a path on purpose to
1274
1349
  * disambiguate.
1275
1350
  *
@@ -1298,7 +1373,7 @@ interface BuildIndexOptions {
1298
1373
  * lookup fails. Useful when the operator's wiki-link convention uses
1299
1374
  * different casing than the on-disk layout (a frequent situation when
1300
1375
  * content is migrated from one vault into another with renamed roots,
1301
- * e.g. `[[Projects/Home/foo]]` vs `data/projects/home/foo.md`).
1376
+ * e.g. `[[Some-Topic/foo]]` vs `data/some-topic/foo.md`).
1302
1377
  *
1303
1378
  * Default: false. Bare-name lookup is unaffected — Obsidian historically
1304
1379
  * treats bare names case-sensitively, and we keep that.
@@ -1420,9 +1495,9 @@ declare function topBrokenTargets(broken: readonly BrokenLink[], limit?: number)
1420
1495
  *
1421
1496
  * Examples:
1422
1497
  * { "API-Tokens": "secrets/api-tokens" }
1423
- * [[API-Tokens]] → [[secrets/api-tokens]]
1424
- * [[API-Tokens|토큰]] → [[secrets/api-tokens|토큰]]
1425
- * [[API-Tokens#A|토큰]] → [[secrets/api-tokens#A|토큰]]
1498
+ * [[API-Tokens]] → [[secrets/api-tokens]]
1499
+ * [[API-Tokens|alias]] → [[secrets/api-tokens|alias]]
1500
+ * [[API-Tokens#A|alias]] → [[secrets/api-tokens#A|alias]]
1426
1501
  *
1427
1502
  * Use the exact name string the operator wrote — no normalization is
1428
1503
  * applied. If the same broken target appears with different spellings
@@ -2442,7 +2517,7 @@ declare function curateCommand(options: CurateOptions): Command<CurateResult>;
2442
2517
  *
2443
2518
  * Host integration:
2444
2519
  * 1. Supply an embedder. `vector.createLocalEmbedder()` is the bundled
2445
- * default (local MiniLM, model downloads on first use); pass an
2520
+ * default (local multilingual e5-small, model downloads on first use); pass an
2446
2521
  * OpenAI/Voyage adapter to use an API instead.
2447
2522
  * 2. Pass it to `createRitualRegistry({ recall: { embed } })`. The command
2448
2523
  * is registered only when an embedder is supplied — instances that have
@@ -2733,16 +2808,44 @@ interface GitPullResult {
2733
2808
  readonly conflict: boolean;
2734
2809
  }
2735
2810
  interface SessionStartHookReport {
2811
+ /** ISO timestamp (kept for any internal use). */
2736
2812
  readonly time: string;
2813
+ /** Human-readable LOCAL time for display, e.g. `2026-06-03 (Wed) 15:21 KST`. */
2814
+ readonly localTime: string;
2737
2815
  readonly repoRoot: string;
2738
2816
  readonly dataDir: string;
2739
2817
  readonly counts: Readonly<Record<string, number>>;
2740
2818
  readonly missing: readonly string[];
2741
2819
  readonly recentWorklog: RecentWorklog | null;
2820
+ /**
2821
+ * Up to 3 short "next up" lines lifted from the MOST RECENT worklog's
2822
+ * hand-off section (else its unchecked tasks), each capped — the
2823
+ * "what you were about to do" pointer. Honest-empty when nothing is captured.
2824
+ */
2825
+ readonly nextUp: readonly string[];
2742
2826
  /** Worklog dates (`YYYY-MM-DD`) present within the gap window — for backfill detection. */
2743
2827
  readonly recentWorklogDates: readonly string[];
2744
2828
  /** Resolved environment label (e.g. home/work), or null when none is configured. */
2745
2829
  readonly environment: string | null;
2830
+ /**
2831
+ * The always-on tier: `_memory/` memories marked `scope: always`, **with
2832
+ * their bodies**, so session start actually loads them (not just names them)
2833
+ * — see AI-RULES.md → "data/ layout" → memory loading. Capped for size; the
2834
+ * on-demand rest stays in `_INDEX.md`. Each body is trimmed (and truncated
2835
+ * past a per-rule cap, flagged by `truncated`).
2836
+ */
2837
+ readonly alwaysOnRules: readonly {
2838
+ readonly slug: string;
2839
+ readonly body: string;
2840
+ readonly truncated: boolean;
2841
+ }[];
2842
+ /** Always-on memories dropped because the count exceeded the cap (0 = none). */
2843
+ readonly alwaysOnOverflow: number;
2844
+ /**
2845
+ * The on-demand index looks stale — suggest `reindex`. True when memories
2846
+ * exist but `_INDEX.md` is missing, or a `_memory/*.md` is newer than it.
2847
+ */
2848
+ readonly memoryIndexStale: boolean;
2746
2849
  }
2747
2850
  /**
2748
2851
  * Gather the read-only facts for a start-of-session report: data-dir counts,
@@ -2763,7 +2866,7 @@ declare function detectWorklogGaps(commitDays: readonly string[], presentDates:
2763
2866
  /**
2764
2867
  * Render a session-start report as a compact markdown block for a host hook
2765
2868
  * to inject as session context. A pull conflict and any worklog gaps are
2766
- * surfaced as warnings (the agent acts on the gaps — see AGENT.md).
2869
+ * surfaced as warnings (the agent acts on the gaps — see AI-RULES.md).
2767
2870
  */
2768
2871
  declare function renderSessionStartReport(report: SessionStartHookReport, extras?: {
2769
2872
  readonly git?: GitPullResult | null;
@@ -2773,6 +2876,39 @@ declare function renderSessionStartReport(report: SessionStartHookReport, extras
2773
2876
  readonly indexedPulled: number;
2774
2877
  readonly errors: number;
2775
2878
  };
2879
+ readonly vectorized?: {
2880
+ readonly memories: number;
2881
+ readonly sessionChunks: number;
2882
+ };
2883
+ /**
2884
+ * A first-time recall setup (model download + index build) was just started
2885
+ * in the background (the add-on is installed but the index didn't exist yet).
2886
+ */
2887
+ readonly vectorizeSetup?: boolean;
2888
+ /**
2889
+ * Update lifecycle "signal 1" (local, no network): framework templates that
2890
+ * the installed package has but this instance hasn't applied yet. `pending`
2891
+ * = files that would be cleanly refreshed; `conflicts` = files the user
2892
+ * edited (an update would offer those as `<file>.new`).
2893
+ */
2894
+ readonly templateUpdate?: {
2895
+ readonly pending: number;
2896
+ readonly conflicts: number;
2897
+ readonly toVersion?: string;
2898
+ };
2899
+ /**
2900
+ * Update lifecycle "signal 2" (network): a newer `@vortex-os/base` is
2901
+ * published than the one installed. Shown only when `newer` is true; the
2902
+ * agent then asks before running `command` (nothing installs automatically).
2903
+ */
2904
+ readonly updateCheck?: {
2905
+ readonly package: string;
2906
+ readonly installed: string | null;
2907
+ readonly latest: string | null;
2908
+ readonly newer: boolean;
2909
+ readonly command: string | null;
2910
+ readonly registry: string;
2911
+ };
2776
2912
  }): string;
2777
2913
 
2778
2914
  /**
@@ -2806,7 +2942,10 @@ declare function ensureWorklogEntry(ctx: ModuleContext, opts?: {
2806
2942
  *
2807
2943
  * Two sources, one pass:
2808
2944
  * - **local (a)** — this machine's own transcripts that are not archived yet,
2809
- * read from the agent's transcript store and scoped to the current project.
2945
+ * read from every detected agent host's transcript store (Claude Code,
2946
+ * Codex, Gemini) and scoped to the current project. Because all hosts are
2947
+ * swept on every start, a single Claude Code session-start also folds in the
2948
+ * Codex/Gemini sessions you ran in the same project, into one archive.
2810
2949
  * - **pulled (b)** — transcripts created on another machine that arrived as
2811
2950
  * normalized text via git sync. Their text is present but this machine's
2812
2951
  * DB (local, derived, gitignored) has never indexed them.
@@ -2828,9 +2967,12 @@ interface CatchUpOptions {
2828
2967
  /** Restrict local ingest to one project's transcripts. Default: `ctx.repoRoot`. */
2829
2968
  readonly cwd?: string;
2830
2969
  /**
2831
- * Transcript adapters for local ingest. Default: Claude Code only. Other
2832
- * hosts (Codex, Gemini) can be added by a caller; tests inject fakes so the
2833
- * scan never touches the real home directory.
2970
+ * Transcript adapters for local ingest. Default: all CLI hosts — Claude Code,
2971
+ * Codex, and Gemini. Each adapter's `detect()` returns false when its host is
2972
+ * absent, so registering all three is ~free on a machine that only uses one.
2973
+ * (Claude Desktop is opt-in — it needs the `classic-level` dependency — so it
2974
+ * is not in the default set; a caller can add it.) Tests inject fakes (or a
2975
+ * sandbox `env.home`) so the scan never touches the real home directory.
2834
2976
  */
2835
2977
  readonly adapters?: sessionArchive.IngestParams["adapters"];
2836
2978
  /** Adapter environment override (e.g. a sandbox HOME). Tests use this. */
@@ -2970,8 +3112,8 @@ interface AgendaReport {
2970
3112
  } | null;
2971
3113
  /**
2972
3114
  * "Next up" lines lifted from the most recent worklog's hand-off section
2973
- * (`## 다음 작업` / `## Next` / a `📋`-marked heading) — the planned-work
2974
- * pointer, mirroring the vault TIL hand-off block. Empty if none.
3115
+ * (`## Next` / a `📋`-marked heading) — the planned-work pointer, mirroring
3116
+ * a worklog hand-off block. Empty if none.
2975
3117
  */
2976
3118
  readonly nextUp: readonly string[];
2977
3119
  /** Date of the worklog the nextUp lines came from (or null). */
@@ -3001,11 +3143,12 @@ interface CollectAgendaOptions {
3001
3143
  */
3002
3144
  /**
3003
3145
  * Lift the "next up / hand-off" section from a worklog body — the planned-work
3004
- * pointer the agent leaves at wind-down (mirrors the vault's TIL `## 📋 다음
3005
- * 작업` block). Matches a heading whose text contains any of: "다음 작업",
3006
- * "다음 세션", "next", "next up", "todo", "후속", "📋". Returns the section's
3007
- * content lines (bullets de-marked, blanks dropped), capped. Empty if no such
3008
- * section. Stops at the next heading of the same-or-higher level.
3146
+ * pointer the agent leaves at wind-down (mirrors a worklog hand-off block).
3147
+ * Matches a heading whose text contains any of the cue terms (English and
3148
+ * Korean: "next", "next up", "todo", "다음 작업", "다음 세션", "후속", "📋").
3149
+ * Returns the section's content lines (bullets de-marked, blanks dropped),
3150
+ * capped. Empty if no such section. Stops at the next heading of the
3151
+ * same-or-higher level.
3009
3152
  */
3010
3153
  declare function extractNextUp(body: string, max?: number): string[];
3011
3154
  /**
@@ -3037,6 +3180,154 @@ declare function renderAgenda(report: AgendaReport): string;
3037
3180
  */
3038
3181
  declare const agendaCommand: Command<AgendaReport>;
3039
3182
 
3183
+ /** Schema tag for the ownership manifest; bump on a breaking shape change. */
3184
+ declare const OWNERSHIP_SCHEMA = "vortex-ownership/1";
3185
+ /** A single framework-owned file the instance tracks for updates. */
3186
+ interface OwnershipEntry {
3187
+ /** Stable id across path moves — currently the template-relative path. */
3188
+ readonly templateId: string;
3189
+ /** Instance destination, repoRoot-relative, forward-slashed (portable). */
3190
+ readonly path: string;
3191
+ /** sha256 of the shipped template when this entry was last reconciled. */
3192
+ readonly sourceSha256: string;
3193
+ /**
3194
+ * When the on-disk file equals the current template, this holds that hash
3195
+ * (the copy is pristine — safe to refresh, since identical content has
3196
+ * nothing to lose, and the first time the user edits it the hash diverges
3197
+ * and it becomes a conflict instead). `null` means the on-disk file diverges
3198
+ * from the template — a foreign / user-owned file we never auto-replace.
3199
+ */
3200
+ readonly installedSha256: string | null;
3201
+ }
3202
+ interface OwnershipManifest {
3203
+ readonly schema: string;
3204
+ /** The `@vortex-os/base` version whose template index this reconciles to. */
3205
+ readonly baseVersion: string;
3206
+ /** ISO timestamp the manifest was written. */
3207
+ readonly generatedAt: string;
3208
+ readonly files: readonly OwnershipEntry[];
3209
+ }
3210
+ type UpdateFileActionKind = "replace" | "restore" | "install" | "conflict" | "locally-modified" | "unmanaged" | "removed-upstream" | "unchanged";
3211
+ interface UpdateFileAction {
3212
+ readonly path: string;
3213
+ readonly templateId: string;
3214
+ readonly action: UpdateFileActionKind;
3215
+ readonly detail?: string;
3216
+ /** For `replace` (or a backed-up `.new`): where the prior bytes were saved. */
3217
+ readonly backupPath?: string;
3218
+ /** For `conflict`: the `<file>.new` carrying the new template content. */
3219
+ readonly newFilePath?: string;
3220
+ /** Set when applying this file threw — the file was NOT changed destructively. */
3221
+ readonly error?: string;
3222
+ }
3223
+ interface VortexUpdateResult {
3224
+ readonly subcommand: "update";
3225
+ readonly status: "ok" | "updated" | "conflicts" | "dry-run" | "no-manifest" | "no-templates";
3226
+ readonly mode: "templates-only";
3227
+ readonly dryRun: boolean;
3228
+ /** Instance's recorded base version before the update (manifest baseVersion). */
3229
+ readonly fromVersion?: string;
3230
+ /** Shipped template index's base version (what we reconcile to). */
3231
+ readonly toVersion?: string;
3232
+ readonly actions: readonly UpdateFileAction[];
3233
+ readonly summary: {
3234
+ readonly replaced: number;
3235
+ readonly restored: number;
3236
+ readonly installed: number;
3237
+ readonly conflicts: number;
3238
+ readonly unchanged: number;
3239
+ readonly unmanaged: number;
3240
+ readonly locallyModified: number;
3241
+ readonly removedUpstream: number;
3242
+ /** Files whose apply threw (left unchanged) — surfaces a partial run. */
3243
+ readonly errors: number;
3244
+ };
3245
+ readonly nextActions: readonly string[];
3246
+ }
3247
+ /** Absolute path of the instance ownership manifest. */
3248
+ declare function ownershipManifestPath(ctx: ModuleContext): string;
3249
+ /**
3250
+ * Map a template-relative path (as listed in the template index, e.g.
3251
+ * `routers/AGENTS.md`) to the instance destination, repoRoot-relative. The
3252
+ * SINGLE place that knows the init copy layout — `init` (manifest writer) and
3253
+ * `update` both derive destinations here, so they can never drift apart.
3254
+ *
3255
+ * Returns `null` for paths that are not copied into an instance (the index file
3256
+ * itself, or any unrecognized top-level dir) — those are not framework-owned
3257
+ * instance files and are skipped.
3258
+ */
3259
+ declare function templateDestRelPath(templateRelPath: string): string | null;
3260
+ /**
3261
+ * Reconcile the shipped template index against what is currently on disk and
3262
+ * produce an ownership manifest. For each framework-owned file:
3263
+ * - `sourceSha256` is the hash of the actual shipped template file (computed
3264
+ * fresh, not trusted from the index — robust to a stale index);
3265
+ * - `installedSha256` is `sourceSha256` when the on-disk copy matches the
3266
+ * template (pristine — whether `init` wrote it or the user already had the
3267
+ * identical stock content; either way there is nothing to lose), and `null`
3268
+ * when the slot is missing or holds a divergent foreign file.
3269
+ *
3270
+ * Used by `init` to write the manifest from day one. Pure read — never writes.
3271
+ */
3272
+ declare function buildOwnershipManifest(ctx: ModuleContext, templatesDir: string): Promise<OwnershipManifest | null>;
3273
+ /**
3274
+ * Build and atomically write the ownership manifest for this instance. Called
3275
+ * by `vortex init` (best-effort — a failure never blocks init). Returns the
3276
+ * written path and file count, or `null` when there is no template index to
3277
+ * reconcile against (a dev tree without a built `templates/manifest.json`).
3278
+ */
3279
+ declare function writeOwnershipManifest(ctx: ModuleContext, templatesDir: string | null): Promise<{
3280
+ path: string;
3281
+ fileCount: number;
3282
+ } | null>;
3283
+ /** Read-only health snapshot of the ownership manifest vs what's on disk. */
3284
+ interface OwnershipDiagnosis {
3285
+ /** Whether an ownership manifest exists and parsed. */
3286
+ readonly present: boolean;
3287
+ /** The manifest file exists on disk but could not be parsed/validated. */
3288
+ readonly malformed: boolean;
3289
+ readonly total: number;
3290
+ /** Tracked file on disk still equals the recorded copy (safe to refresh). */
3291
+ readonly pristine: number;
3292
+ /** Tracked file on disk diverges from the recorded copy (user edited it). */
3293
+ readonly modified: number;
3294
+ /** Tracked file is gone from disk (an update would restore it). */
3295
+ readonly missing: number;
3296
+ /** Slot recorded as foreign (installedSha256 === null) — never auto-managed. */
3297
+ readonly unmanaged: number;
3298
+ }
3299
+ /**
3300
+ * Inspect the ownership manifest against the current instance files — a pure
3301
+ * read used by `vortex doctor` to report whether the instance's framework
3302
+ * files are stock, user-edited, missing, or foreign. No template index needed
3303
+ * (it compares disk to the recorded `installedSha256`, not to a new template).
3304
+ */
3305
+ declare function inspectOwnership(ctx: ModuleContext): Promise<OwnershipDiagnosis>;
3306
+ /**
3307
+ * Adopt / repair the ownership manifest for an instance that lacks one (e.g.
3308
+ * created before the update lifecycle existed). Conservative by design: it does
3309
+ * NOTHING when a manifest already exists — rewriting could downgrade a tracked-
3310
+ * but-edited file to "foreign" and lose its update path — so a healthy instance
3311
+ * is never disturbed. Only a missing/unreadable manifest is (re)built from the
3312
+ * current on-disk state (diverged files recorded as foreign/null, never falsely
3313
+ * claimed pristine). `vortex update --templates-only` is the way to refresh once
3314
+ * a manifest exists.
3315
+ */
3316
+ declare function repairOwnershipManifest(ctx: ModuleContext, templatesDir: string | null): Promise<{
3317
+ status: "created" | "already-present" | "unreadable" | "no-templates";
3318
+ path?: string;
3319
+ fileCount?: number;
3320
+ }>;
3321
+ /**
3322
+ * `vortex update --templates-only` — refresh framework-owned templates from the
3323
+ * currently-installed package, hash-guarded so user edits are never lost. Two
3324
+ * phases: PLAN (all reads — safe in dry-run) then APPLY (writes, skipped in
3325
+ * dry-run), with the manifest written LAST and always reflecting real disk.
3326
+ */
3327
+ declare function runTemplatesUpdate(ctx: ModuleContext, templatesDir: string | null, options?: {
3328
+ dryRun?: boolean;
3329
+ }): Promise<VortexUpdateResult>;
3330
+
3040
3331
  /**
3041
3332
  * `/vortex <sub>` — Root command for VortEX instance operations.
3042
3333
  *
@@ -3140,6 +3431,9 @@ interface VortexImportResult {
3140
3431
  };
3141
3432
  readonly frontmatterInjected: number;
3142
3433
  readonly frontmatterPreserved: number;
3434
+ readonly attachmentsCopied: number;
3435
+ readonly skippedSecrets: readonly string[];
3436
+ readonly skippedLarge: readonly string[];
3143
3437
  readonly systemDirsCreated: readonly string[];
3144
3438
  readonly skipped: number;
3145
3439
  readonly collisions: number;
@@ -3194,9 +3488,73 @@ interface VortexSyncResult {
3194
3488
  readonly failedAt?: VortexSyncStepId;
3195
3489
  readonly nextActions: readonly string[];
3196
3490
  }
3197
- type VortexResult = VortexInitResult | VortexStatusResult | VortexImportResult | VortexDoctorResult | VortexSyncResult | VortexPlannedResult | VortexHelpResult;
3491
+ type VortexResult = VortexInitResult | VortexStatusResult | VortexImportResult | VortexDoctorResult | VortexSyncResult | VortexUpdateResult | VortexPlannedResult | VortexHelpResult;
3198
3492
  declare const vortexCommand: Command<VortexResult>;
3199
3493
 
3494
+ interface UpdateCheckResult {
3495
+ readonly package: string;
3496
+ /** Installed base version (from the shipped template index), or null if unknown. */
3497
+ readonly installed: string | null;
3498
+ /** Latest published version, or null when the check was skipped/failed/offline. */
3499
+ readonly latest: string | null;
3500
+ /** True only when `latest` is a strictly-greater stable version than `installed`. */
3501
+ readonly newer: boolean;
3502
+ /** Exact command to apply the update — present only when `newer`. */
3503
+ readonly command: string | null;
3504
+ /** Disclosed: where the check looked (honest about the network contact). */
3505
+ readonly registry: string;
3506
+ }
3507
+ /**
3508
+ * Installed base version = the `baseVersion` recorded in the shipped template
3509
+ * index (`templates/manifest.json`). This is signal 1's source of truth too,
3510
+ * and it travels with the running binary, so it can't disagree with the version
3511
+ * actually executing (local or global/npx). Unreadable/invalid → null.
3512
+ */
3513
+ declare function readInstalledBaseVersion(templatesDir?: string | null): string | null;
3514
+ /**
3515
+ * Query the registry for the latest published `@vortex-os/base` version via
3516
+ * `npm view`. Bounded by `NPM_TIMEOUT_MS`; any failure (offline, no npm,
3517
+ * timeout, non-JSON) returns null so the caller stays silent. Never throws.
3518
+ */
3519
+ declare function queryNpmLatest(repoRoot: string): string | null;
3520
+ /**
3521
+ * Compare two versions: -1 (a<b), 0 (a==b), 1 (a>b), or null if either is
3522
+ * unparseable. Numeric core left-to-right; on an equal core a RELEASE outranks
3523
+ * a PRERELEASE of the same core. We deliberately do NOT implement full SemVer
3524
+ * §11 prerelease-vs-prerelease ordering — two prereleases of the same core
3525
+ * compare EQUAL here. That is fine because the surfacing policy
3526
+ * ({@link isStableUpdate}) only ever offers a STABLE `latest`, so a
3527
+ * prerelease→prerelease "upgrade" is never surfaced regardless; the §11
3528
+ * tag-ordering is the most bug-prone part, so omitting it removes risk.
3529
+ */
3530
+ declare function compareSemver(a: string, b: string): -1 | 0 | 1 | null;
3531
+ /** True only when `latest` is a strictly-greater version than `installed`. Null-safe → false. */
3532
+ declare function isNewer(latest: string | null, installed: string | null): boolean;
3533
+ /**
3534
+ * The SURFACING policy: only offer a STABLE newer release. A prerelease
3535
+ * `latest` (e.g. `2.0.0-beta.1`) is never surfaced — VortEX never nudges users
3536
+ * onto a beta — even when its core is higher. Upgrading FROM a prerelease TO a
3537
+ * stable release of the same-or-higher core IS surfaced (because `latest` is
3538
+ * then stable). Null/unparseable → false. This is what `checkBaseUpdate` uses
3539
+ * to decide `newer`.
3540
+ */
3541
+ declare function isStableUpdate(latest: string | null, installed: string | null): boolean;
3542
+ /**
3543
+ * The exact, copy-pasteable command to apply the update, detected from the
3544
+ * instance: package manager by lockfile, local vs global by whether base sits
3545
+ * in this folder's node_modules. Always chained with `npx vortex update` so the
3546
+ * new package's templates get applied right after the install. Pure (no
3547
+ * network); the string is surfaced verbatim and the CLI never runs it.
3548
+ */
3549
+ declare function buildInstallCommand(repoRoot: string): string;
3550
+ /**
3551
+ * Run the once-per-session update check. The CALLER decides whether to call
3552
+ * (session start gates on `updates.check`; `vortex check-updates` forces it).
3553
+ * Never throws — returns a result with `latest: null` / `newer: false` when the
3554
+ * registry can't be reached, so the caller simply shows nothing.
3555
+ */
3556
+ declare function checkBaseUpdate(ctx: ModuleContext): UpdateCheckResult;
3557
+
3200
3558
  //# sourceMappingURL=index.d.ts.map
3201
3559
 
3202
3560
  type index_d_AgendaReport = AgendaReport;
@@ -3221,8 +3579,12 @@ type index_d_EnsureHooksResult = EnsureHooksResult;
3221
3579
  type index_d_EnsureWorklogResult = EnsureWorklogResult;
3222
3580
  type index_d_GitPullResult = GitPullResult;
3223
3581
  type index_d_NewDecisionResult = NewDecisionResult;
3582
+ declare const index_d_OWNERSHIP_SCHEMA: typeof OWNERSHIP_SCHEMA;
3224
3583
  type index_d_OpenDecision = OpenDecision;
3225
3584
  type index_d_OpenTask = OpenTask;
3585
+ type index_d_OwnershipDiagnosis = OwnershipDiagnosis;
3586
+ type index_d_OwnershipEntry = OwnershipEntry;
3587
+ type index_d_OwnershipManifest = OwnershipManifest;
3226
3588
  type index_d_RecallOptions = RecallOptions;
3227
3589
  type index_d_RecentWorklog = RecentWorklog;
3228
3590
  type index_d_ReindexResult = ReindexResult;
@@ -3231,6 +3593,9 @@ declare const index_d_SESSION_END_COMMAND: typeof SESSION_END_COMMAND;
3231
3593
  declare const index_d_SESSION_START_COMMAND: typeof SESSION_START_COMMAND;
3232
3594
  type index_d_SessionStartHookReport = SessionStartHookReport;
3233
3595
  type index_d_SessionStartReport = SessionStartReport;
3596
+ type index_d_UpdateCheckResult = UpdateCheckResult;
3597
+ type index_d_UpdateFileAction = UpdateFileAction;
3598
+ type index_d_UpdateFileActionKind = UpdateFileActionKind;
3234
3599
  type index_d_VortexHelpResult = VortexHelpResult;
3235
3600
  type index_d_VortexInitResult = VortexInitResult;
3236
3601
  type index_d_VortexPlannedResult = VortexPlannedResult;
@@ -3239,12 +3604,17 @@ type index_d_VortexSyncResult = VortexSyncResult;
3239
3604
  type index_d_VortexSyncStep = VortexSyncStep;
3240
3605
  type index_d_VortexSyncStepId = VortexSyncStepId;
3241
3606
  type index_d_VortexSyncStepStatus = VortexSyncStepStatus;
3607
+ type index_d_VortexUpdateResult = VortexUpdateResult;
3242
3608
  type index_d_WorklogAppendResult = WorklogAppendResult;
3243
3609
  declare const index_d_agendaCommand: typeof agendaCommand;
3610
+ declare const index_d_buildInstallCommand: typeof buildInstallCommand;
3611
+ declare const index_d_buildOwnershipManifest: typeof buildOwnershipManifest;
3244
3612
  declare const index_d_buildRegistry: typeof buildRegistry;
3245
3613
  declare const index_d_catchUpSessions: typeof catchUpSessions;
3614
+ declare const index_d_checkBaseUpdate: typeof checkBaseUpdate;
3246
3615
  declare const index_d_collectAgenda: typeof collectAgenda;
3247
3616
  declare const index_d_collectSessionStartReport: typeof collectSessionStartReport;
3617
+ declare const index_d_compareSemver: typeof compareSemver;
3248
3618
  declare const index_d_computeCurateFingerprint: typeof computeCurateFingerprint;
3249
3619
  declare const index_d_createAmbientRecaller: typeof createAmbientRecaller;
3250
3620
  declare const index_d_createRitualRegistry: typeof createRitualRegistry;
@@ -3255,24 +3625,34 @@ declare const index_d_ensureVortexHooks: typeof ensureVortexHooks;
3255
3625
  declare const index_d_ensureWorklogEntry: typeof ensureWorklogEntry;
3256
3626
  declare const index_d_extractNextUp: typeof extractNextUp;
3257
3627
  declare const index_d_extractOpenTasks: typeof extractOpenTasks;
3628
+ declare const index_d_inspectOwnership: typeof inspectOwnership;
3629
+ declare const index_d_isNewer: typeof isNewer;
3630
+ declare const index_d_isStableUpdate: typeof isStableUpdate;
3258
3631
  declare const index_d_logCommand: typeof logCommand;
3632
+ declare const index_d_ownershipManifestPath: typeof ownershipManifestPath;
3259
3633
  declare const index_d_parseSettings: typeof parseSettings;
3634
+ declare const index_d_queryNpmLatest: typeof queryNpmLatest;
3635
+ declare const index_d_readInstalledBaseVersion: typeof readInstalledBaseVersion;
3260
3636
  declare const index_d_recallCommand: typeof recallCommand;
3261
3637
  declare const index_d_reindexCommand: typeof reindexCommand;
3262
3638
  declare const index_d_renderAgenda: typeof renderAgenda;
3263
3639
  declare const index_d_renderSessionStartReport: typeof renderSessionStartReport;
3640
+ declare const index_d_repairOwnershipManifest: typeof repairOwnershipManifest;
3264
3641
  declare const index_d_resolveRepoRoot: typeof resolveRepoRoot;
3265
3642
  declare const index_d_runCurateAccept: typeof runCurateAccept;
3266
3643
  declare const index_d_runCurateCandidates: typeof runCurateCandidates;
3267
3644
  declare const index_d_runCurateDecline: typeof runCurateDecline;
3268
3645
  declare const index_d_runCuratePreview: typeof runCuratePreview;
3646
+ declare const index_d_runTemplatesUpdate: typeof runTemplatesUpdate;
3269
3647
  declare const index_d_runVortexCli: typeof runVortexCli;
3270
3648
  declare const index_d_serializeSettings: typeof serializeSettings;
3271
3649
  declare const index_d_sessionStartCommand: typeof sessionStartCommand;
3650
+ declare const index_d_templateDestRelPath: typeof templateDestRelPath;
3272
3651
  declare const index_d_validateCuratePayload: typeof validateCuratePayload;
3273
3652
  declare const index_d_vortexCommand: typeof vortexCommand;
3653
+ declare const index_d_writeOwnershipManifest: typeof writeOwnershipManifest;
3274
3654
  declare namespace index_d {
3275
- export { type index_d_AgendaReport as AgendaReport, type index_d_AmbientRecallFactoryOptions as AmbientRecallFactoryOptions, type index_d_CatchUpOptions as CatchUpOptions, type index_d_CatchUpResult as CatchUpResult, type index_d_ClaudeSettings as ClaudeSettings, type index_d_CliIo as CliIo, type index_d_CollectAgendaOptions as CollectAgendaOptions, type index_d_CurateAcceptResult as CurateAcceptResult, type index_d_CurateActionKind as CurateActionKind, type index_d_CurateAnyProposal as CurateAnyProposal, type index_d_CurateCandidate as CurateCandidate, type index_d_CurateCandidatesResult as CurateCandidatesResult, type index_d_CurateDeclineResult as CurateDeclineResult, type index_d_CurateOptions as CurateOptions, type index_d_CuratePayload as CuratePayload, type index_d_CuratePayloadValidation as CuratePayloadValidation, type index_d_CuratePreviewResult as CuratePreviewResult, type index_d_CurateResult as CurateResult, type index_d_EnsureHooksResult as EnsureHooksResult, type index_d_EnsureWorklogResult as EnsureWorklogResult, type index_d_GitPullResult as GitPullResult, type index_d_NewDecisionResult as NewDecisionResult, type index_d_OpenDecision as OpenDecision, type index_d_OpenTask as OpenTask, type index_d_RecallOptions as RecallOptions, type index_d_RecentWorklog as RecentWorklog, type index_d_ReindexResult as ReindexResult, type index_d_RitualRegistryOptions as RitualRegistryOptions, index_d_SESSION_END_COMMAND as SESSION_END_COMMAND, index_d_SESSION_START_COMMAND as SESSION_START_COMMAND, type index_d_SessionStartHookReport as SessionStartHookReport, type index_d_SessionStartReport as SessionStartReport, type index_d_VortexHelpResult as VortexHelpResult, type index_d_VortexInitResult as VortexInitResult, type index_d_VortexPlannedResult as VortexPlannedResult, type index_d_VortexResult as VortexResult, type index_d_VortexSyncResult as VortexSyncResult, type index_d_VortexSyncStep as VortexSyncStep, type index_d_VortexSyncStepId as VortexSyncStepId, type index_d_VortexSyncStepStatus as VortexSyncStepStatus, type index_d_WorklogAppendResult as WorklogAppendResult, index_d_agendaCommand as agendaCommand, index_d_buildRegistry as buildRegistry, index_d_catchUpSessions as catchUpSessions, index_d_collectAgenda as collectAgenda, index_d_collectSessionStartReport as collectSessionStartReport, index_d_computeCurateFingerprint as computeCurateFingerprint, index_d_createAmbientRecaller as createAmbientRecaller, index_d_createRitualRegistry as createRitualRegistry, index_d_curateCommand as curateCommand, index_d_decisionCommand as decisionCommand, index_d_detectWorklogGaps as detectWorklogGaps, index_d_ensureVortexHooks as ensureVortexHooks, index_d_ensureWorklogEntry as ensureWorklogEntry, index_d_extractNextUp as extractNextUp, index_d_extractOpenTasks as extractOpenTasks, index_d_logCommand as logCommand, index_d_parseSettings as parseSettings, index_d_recallCommand as recallCommand, index_d_reindexCommand as reindexCommand, index_d_renderAgenda as renderAgenda, index_d_renderSessionStartReport as renderSessionStartReport, index_d_resolveRepoRoot as resolveRepoRoot, index_d_runCurateAccept as runCurateAccept, index_d_runCurateCandidates as runCurateCandidates, index_d_runCurateDecline as runCurateDecline, index_d_runCuratePreview as runCuratePreview, index_d_runVortexCli as runVortexCli, index_d_serializeSettings as serializeSettings, index_d_sessionStartCommand as sessionStartCommand, index_d_validateCuratePayload as validateCuratePayload, index_d_vortexCommand as vortexCommand };
3655
+ export { type index_d_AgendaReport as AgendaReport, type index_d_AmbientRecallFactoryOptions as AmbientRecallFactoryOptions, type index_d_CatchUpOptions as CatchUpOptions, type index_d_CatchUpResult as CatchUpResult, type index_d_ClaudeSettings as ClaudeSettings, type index_d_CliIo as CliIo, type index_d_CollectAgendaOptions as CollectAgendaOptions, type index_d_CurateAcceptResult as CurateAcceptResult, type index_d_CurateActionKind as CurateActionKind, type index_d_CurateAnyProposal as CurateAnyProposal, type index_d_CurateCandidate as CurateCandidate, type index_d_CurateCandidatesResult as CurateCandidatesResult, type index_d_CurateDeclineResult as CurateDeclineResult, type index_d_CurateOptions as CurateOptions, type index_d_CuratePayload as CuratePayload, type index_d_CuratePayloadValidation as CuratePayloadValidation, type index_d_CuratePreviewResult as CuratePreviewResult, type index_d_CurateResult as CurateResult, type index_d_EnsureHooksResult as EnsureHooksResult, type index_d_EnsureWorklogResult as EnsureWorklogResult, type index_d_GitPullResult as GitPullResult, type index_d_NewDecisionResult as NewDecisionResult, index_d_OWNERSHIP_SCHEMA as OWNERSHIP_SCHEMA, type index_d_OpenDecision as OpenDecision, type index_d_OpenTask as OpenTask, type index_d_OwnershipDiagnosis as OwnershipDiagnosis, type index_d_OwnershipEntry as OwnershipEntry, type index_d_OwnershipManifest as OwnershipManifest, type index_d_RecallOptions as RecallOptions, type index_d_RecentWorklog as RecentWorklog, type index_d_ReindexResult as ReindexResult, type index_d_RitualRegistryOptions as RitualRegistryOptions, index_d_SESSION_END_COMMAND as SESSION_END_COMMAND, index_d_SESSION_START_COMMAND as SESSION_START_COMMAND, type index_d_SessionStartHookReport as SessionStartHookReport, type index_d_SessionStartReport as SessionStartReport, type index_d_UpdateCheckResult as UpdateCheckResult, type index_d_UpdateFileAction as UpdateFileAction, type index_d_UpdateFileActionKind as UpdateFileActionKind, type index_d_VortexHelpResult as VortexHelpResult, type index_d_VortexInitResult as VortexInitResult, type index_d_VortexPlannedResult as VortexPlannedResult, type index_d_VortexResult as VortexResult, type index_d_VortexSyncResult as VortexSyncResult, type index_d_VortexSyncStep as VortexSyncStep, type index_d_VortexSyncStepId as VortexSyncStepId, type index_d_VortexSyncStepStatus as VortexSyncStepStatus, type index_d_VortexUpdateResult as VortexUpdateResult, type index_d_WorklogAppendResult as WorklogAppendResult, index_d_agendaCommand as agendaCommand, index_d_buildInstallCommand as buildInstallCommand, index_d_buildOwnershipManifest as buildOwnershipManifest, index_d_buildRegistry as buildRegistry, index_d_catchUpSessions as catchUpSessions, index_d_checkBaseUpdate as checkBaseUpdate, index_d_collectAgenda as collectAgenda, index_d_collectSessionStartReport as collectSessionStartReport, index_d_compareSemver as compareSemver, index_d_computeCurateFingerprint as computeCurateFingerprint, index_d_createAmbientRecaller as createAmbientRecaller, index_d_createRitualRegistry as createRitualRegistry, index_d_curateCommand as curateCommand, index_d_decisionCommand as decisionCommand, index_d_detectWorklogGaps as detectWorklogGaps, index_d_ensureVortexHooks as ensureVortexHooks, index_d_ensureWorklogEntry as ensureWorklogEntry, index_d_extractNextUp as extractNextUp, index_d_extractOpenTasks as extractOpenTasks, index_d_inspectOwnership as inspectOwnership, index_d_isNewer as isNewer, index_d_isStableUpdate as isStableUpdate, index_d_logCommand as logCommand, index_d_ownershipManifestPath as ownershipManifestPath, index_d_parseSettings as parseSettings, index_d_queryNpmLatest as queryNpmLatest, index_d_readInstalledBaseVersion as readInstalledBaseVersion, index_d_recallCommand as recallCommand, index_d_reindexCommand as reindexCommand, index_d_renderAgenda as renderAgenda, index_d_renderSessionStartReport as renderSessionStartReport, index_d_repairOwnershipManifest as repairOwnershipManifest, index_d_resolveRepoRoot as resolveRepoRoot, index_d_runCurateAccept as runCurateAccept, index_d_runCurateCandidates as runCurateCandidates, index_d_runCurateDecline as runCurateDecline, index_d_runCuratePreview as runCuratePreview, index_d_runTemplatesUpdate as runTemplatesUpdate, index_d_runVortexCli as runVortexCli, index_d_serializeSettings as serializeSettings, index_d_sessionStartCommand as sessionStartCommand, index_d_templateDestRelPath as templateDestRelPath, index_d_validateCuratePayload as validateCuratePayload, index_d_vortexCommand as vortexCommand, index_d_writeOwnershipManifest as writeOwnershipManifest };
3276
3656
  }
3277
3657
 
3278
3658
  export { index_d$9 as aiCodingPitfalls, index_d$d as core, index_d$a as dataLint, index_d$5 as decisionLog, index_d$4 as indexGenerator, index_d$2 as linkRewriter, index_d$b as memorySystem, index_d$1 as proactiveCurator, index_d$7 as reportGenerator, index_d$3 as runbooks, index_d as sessionRituals, index_d$c as slashCommands, index_d$8 as toolRules, index_d$6 as worklog };