@vortex-os/base 0.4.0 → 0.6.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/README.md +26 -14
- package/dist/catch-up-GDDKPZHJ.js +8 -0
- package/dist/{chunk-6SO4DAWJ.js → chunk-3L5DLEGP.js} +6 -9
- package/dist/chunk-3L5DLEGP.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/index.d.ts +672 -80
- package/dist/index.js +0 -0
- package/dist/index.js.map +1 -1
- package/dist/vectorize-PN4Y7XMO.js +30 -0
- package/dist/vectorize-PN4Y7XMO.js.map +1 -0
- package/package.json +2 -2
- package/templates/commands/recall.md +31 -17
- package/templates/commands/resume.md +52 -0
- package/templates/config/vortex.json +3 -0
- package/templates/manifest.json +56 -0
- package/templates/routers/.cursorrules +5 -5
- package/templates/routers/AGENTS.md +22 -13
- package/templates/routers/AI-RULES.md +143 -0
- package/templates/routers/CLAUDE.md +23 -4
- package/templates/routers/GEMINI.md +5 -3
- package/dist/catch-up-ZQN7HMMN.js +0 -7
- package/dist/chunk-6SO4DAWJ.js.map +0 -1
- package/templates/routers/AGENT.md +0 -93
- package/templates/routers/CODEX.md +0 -16
- /package/dist/{catch-up-ZQN7HMMN.js.map → catch-up-GDDKPZHJ.js.map} +0 -0
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 `
|
|
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
|
/**
|
|
@@ -263,12 +303,20 @@ interface CommandArg {
|
|
|
263
303
|
* - `rest` — the unparsed trailing portion of the input (everything after
|
|
264
304
|
* the command name), provided as-is for commands that prefer to handle
|
|
265
305
|
* their own parsing.
|
|
306
|
+
* - `argv` — pre-split argument tokens (everything after the command name),
|
|
307
|
+
* present only when the caller already holds the shell-split argv (e.g. the
|
|
308
|
+
* `vortex` CLI). A command that does its own quote-aware tokenization should
|
|
309
|
+
* prefer this over re-parsing `rest`: it avoids the lossy
|
|
310
|
+
* string-join-then-re-tokenize round-trip, so quotes/spaces/empty values in a
|
|
311
|
+
* token can never shift the boundaries of later tokens. Absent for the
|
|
312
|
+
* typed-slash path, where the command falls back to tokenizing `rest`.
|
|
266
313
|
* - `context` — resolved repository paths from `@vortex-os/core.makeContext`.
|
|
267
314
|
*/
|
|
268
315
|
interface CommandInput {
|
|
269
316
|
readonly raw: string;
|
|
270
317
|
readonly args: Readonly<Record<string, string>>;
|
|
271
318
|
readonly rest: string;
|
|
319
|
+
readonly argv?: readonly string[];
|
|
272
320
|
readonly context: ModuleContext;
|
|
273
321
|
}
|
|
274
322
|
/**
|
|
@@ -320,6 +368,18 @@ declare class CommandNotFoundError extends Error {
|
|
|
320
368
|
* Returns whatever the command's handler returns (awaited if it is async).
|
|
321
369
|
*/
|
|
322
370
|
declare function runSlash(input: string, { registry, context }: RunOptions): Promise<unknown>;
|
|
371
|
+
/**
|
|
372
|
+
* Dispatch a command by name with pre-split argument tokens, skipping the
|
|
373
|
+
* whitespace split `runSlash` does on a raw string. Use this when the caller
|
|
374
|
+
* already holds clean tokens (e.g. the shell-split `vortex` CLI argv): the
|
|
375
|
+
* tokens reach the handler verbatim via `CommandInput.argv`, so quotes, spaces,
|
|
376
|
+
* or empty values inside a token can never shift the boundaries of later tokens
|
|
377
|
+
* (the lossy hazard of joining argv into a string and re-tokenizing it).
|
|
378
|
+
*
|
|
379
|
+
* `argv` is the tokens AFTER the command name. `rest`/`args` are still derived
|
|
380
|
+
* for handlers that read them, but a quote-aware command should prefer `argv`.
|
|
381
|
+
*/
|
|
382
|
+
declare function runSlashArgv(name: string, argv: readonly string[], { registry, context }: RunOptions): Promise<unknown>;
|
|
323
383
|
|
|
324
384
|
//# sourceMappingURL=index.d.ts.map
|
|
325
385
|
|
|
@@ -332,8 +392,9 @@ type index_d$c_CommandRegistry = CommandRegistry;
|
|
|
332
392
|
declare const index_d$c_CommandRegistry: typeof CommandRegistry;
|
|
333
393
|
type index_d$c_RunOptions = RunOptions;
|
|
334
394
|
declare const index_d$c_runSlash: typeof runSlash;
|
|
395
|
+
declare const index_d$c_runSlashArgv: typeof runSlashArgv;
|
|
335
396
|
declare namespace index_d$c {
|
|
336
|
-
export { type index_d$c_Command as Command, type index_d$c_CommandArg as CommandArg, type index_d$c_CommandInput as CommandInput, index_d$c_CommandNotFoundError as CommandNotFoundError, index_d$c_CommandRegistry as CommandRegistry, type index_d$c_RunOptions as RunOptions, index_d$c_runSlash as runSlash };
|
|
397
|
+
export { type index_d$c_Command as Command, type index_d$c_CommandArg as CommandArg, type index_d$c_CommandInput as CommandInput, index_d$c_CommandNotFoundError as CommandNotFoundError, index_d$c_CommandRegistry as CommandRegistry, type index_d$c_RunOptions as RunOptions, index_d$c_runSlash as runSlash, index_d$c_runSlashArgv as runSlashArgv };
|
|
337
398
|
}
|
|
338
399
|
|
|
339
400
|
/**
|
|
@@ -536,7 +597,17 @@ declare function privacyValid(): LintRule;
|
|
|
536
597
|
interface WikiLinkResolvesOptions {
|
|
537
598
|
/** Directory under which valid link targets live. Searched recursively. */
|
|
538
599
|
readonly searchRoot: string;
|
|
539
|
-
/**
|
|
600
|
+
/**
|
|
601
|
+
* Target file extensions. Defaults to `[".md"]`.
|
|
602
|
+
*
|
|
603
|
+
* `.md` targets are keyed by basename (extension stripped) — `[[Foo]]`
|
|
604
|
+
* resolves `Foo.md`. Any non-`.md` extension listed here keeps its
|
|
605
|
+
* extension in the index, so `[[Foo.pdf]]` resolves `Foo.pdf` while a bare
|
|
606
|
+
* `[[Foo]]` never silently matches an attachment. Mirrors the resolution
|
|
607
|
+
* contract in `@vortex-os/link-rewriter` (`resolve.ts`). Pass attachment
|
|
608
|
+
* extensions here (e.g. `[".md", ".pdf", ".png"]`) so imported binaries are
|
|
609
|
+
* treated as valid link targets instead of false "unresolved" findings.
|
|
610
|
+
*/
|
|
540
611
|
readonly extensions?: readonly string[];
|
|
541
612
|
}
|
|
542
613
|
/**
|
|
@@ -550,6 +621,23 @@ interface WikiLinkResolvesOptions {
|
|
|
550
621
|
*/
|
|
551
622
|
declare function wikiLinkResolves(options: WikiLinkResolvesOptions): LintRule;
|
|
552
623
|
|
|
624
|
+
/**
|
|
625
|
+
* Rule for `data/_memory/*.md` entries: the memory `type` must be a TOP-LEVEL
|
|
626
|
+
* frontmatter field — the index generator and the recall layer read
|
|
627
|
+
* `frontmatter.type` — never nested under `metadata`, and never the generic
|
|
628
|
+
* `note` default (which silently misclassifies the memory in type-aware
|
|
629
|
+
* recall). Scoped to files under a `_memory/` directory; the generated indexes
|
|
630
|
+
* (`_INDEX.md`, `MEMORY.md`) and `_TEMPLATE*` skeletons are skipped, and files
|
|
631
|
+
* in any other directory pass untouched.
|
|
632
|
+
*
|
|
633
|
+
* It does NOT enforce a closed type vocabulary: instances may extend the set
|
|
634
|
+
* (e.g. `infra`, `work`), and the built-in `memory-system` accepts any string.
|
|
635
|
+
* The two things this guards are the observed drift modes — a `metadata.type`
|
|
636
|
+
* the code never reads, and the `type: note` leak from the harness-memory
|
|
637
|
+
* format — both of which `require-frontmatter`/`privacy-valid` let through.
|
|
638
|
+
*/
|
|
639
|
+
declare function memoryFrontmatter(): LintRule;
|
|
640
|
+
|
|
553
641
|
//# sourceMappingURL=index.d.ts.map
|
|
554
642
|
|
|
555
643
|
type index_d$a_LintFinding = LintFinding;
|
|
@@ -561,11 +649,12 @@ type index_d$a_RequireFrontmatterOptions = RequireFrontmatterOptions;
|
|
|
561
649
|
type index_d$a_Severity = Severity;
|
|
562
650
|
type index_d$a_WikiLinkResolvesOptions = WikiLinkResolvesOptions;
|
|
563
651
|
declare const index_d$a_lintDirectory: typeof lintDirectory;
|
|
652
|
+
declare const index_d$a_memoryFrontmatter: typeof memoryFrontmatter;
|
|
564
653
|
declare const index_d$a_privacyValid: typeof privacyValid;
|
|
565
654
|
declare const index_d$a_requireFrontmatter: typeof requireFrontmatter;
|
|
566
655
|
declare const index_d$a_wikiLinkResolves: typeof wikiLinkResolves;
|
|
567
656
|
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 };
|
|
657
|
+
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
658
|
}
|
|
570
659
|
|
|
571
660
|
type PitfallSeverity = "info" | "warning" | "error";
|
|
@@ -984,6 +1073,13 @@ interface IndexEntry {
|
|
|
984
1073
|
readonly type?: string;
|
|
985
1074
|
/** Frontmatter `updated` or `created` value, ISO `YYYY-MM-DD` when parseable. */
|
|
986
1075
|
readonly updated?: string;
|
|
1076
|
+
/**
|
|
1077
|
+
* Frontmatter `scope` value, if present. `always` marks a memory the agent
|
|
1078
|
+
* should load every session (the always-on tier); absent means on-demand
|
|
1079
|
+
* (load by relevance from the index). Surfaced as a column in `_INDEX.md`
|
|
1080
|
+
* only when some entry sets it.
|
|
1081
|
+
*/
|
|
1082
|
+
readonly scope?: string;
|
|
987
1083
|
}
|
|
988
1084
|
/**
|
|
989
1085
|
* Options controlling {@link scanDirectory}.
|
|
@@ -1027,7 +1123,7 @@ interface RenderIndexInput {
|
|
|
1027
1123
|
privacy?: "public" | "internal" | "personal" | string;
|
|
1028
1124
|
/** Extra frontmatter tags besides the default `[index]`. */
|
|
1029
1125
|
extraTags?: readonly string[];
|
|
1030
|
-
/** Optional "
|
|
1126
|
+
/** Optional "Related" links rendered after the entry list. */
|
|
1031
1127
|
related?: readonly string[];
|
|
1032
1128
|
}
|
|
1033
1129
|
|
|
@@ -1060,14 +1156,14 @@ declare function scanDirectory(rootDir: string, opts?: ScanOptions): Promise<rea
|
|
|
1060
1156
|
*
|
|
1061
1157
|
* > <description>
|
|
1062
1158
|
*
|
|
1063
|
-
* ##
|
|
1159
|
+
* ## Items (<count>)
|
|
1064
1160
|
*
|
|
1065
|
-
* |
|
|
1161
|
+
* | File | Description | Updated |
|
|
1066
1162
|
* |---|---|---|
|
|
1067
1163
|
* | [[<name>]] | <description or title> | <updated> |
|
|
1068
1164
|
* ...
|
|
1069
1165
|
*
|
|
1070
|
-
* ##
|
|
1166
|
+
* ## Related (only if `related` is non-empty)
|
|
1071
1167
|
*
|
|
1072
1168
|
* - [[<related[0]>]]
|
|
1073
1169
|
* ...
|
|
@@ -1269,7 +1365,7 @@ declare function extractWikiLinks(body: string): readonly WikiLink[];
|
|
|
1269
1365
|
* bare wiki links like `[[Foo]]`, which Obsidian resolves by filename
|
|
1270
1366
|
* anywhere in the vault.
|
|
1271
1367
|
* - `byRelPath` — forward-slash relative path (no `.md`) → absolute path.
|
|
1272
|
-
* Used for path-aware wiki links like `[[
|
|
1368
|
+
* Used for path-aware wiki links like `[[some-topic/Foo]]` or
|
|
1273
1369
|
* `[[../Foo]]`, where the operator wrote a path on purpose to
|
|
1274
1370
|
* disambiguate.
|
|
1275
1371
|
*
|
|
@@ -1298,7 +1394,7 @@ interface BuildIndexOptions {
|
|
|
1298
1394
|
* lookup fails. Useful when the operator's wiki-link convention uses
|
|
1299
1395
|
* different casing than the on-disk layout (a frequent situation when
|
|
1300
1396
|
* content is migrated from one vault into another with renamed roots,
|
|
1301
|
-
* e.g. `[[
|
|
1397
|
+
* e.g. `[[Some-Topic/foo]]` vs `data/some-topic/foo.md`).
|
|
1302
1398
|
*
|
|
1303
1399
|
* Default: false. Bare-name lookup is unaffected — Obsidian historically
|
|
1304
1400
|
* treats bare names case-sensitively, and we keep that.
|
|
@@ -1420,9 +1516,9 @@ declare function topBrokenTargets(broken: readonly BrokenLink[], limit?: number)
|
|
|
1420
1516
|
*
|
|
1421
1517
|
* Examples:
|
|
1422
1518
|
* { "API-Tokens": "secrets/api-tokens" }
|
|
1423
|
-
* [[API-Tokens]]
|
|
1424
|
-
* [[API-Tokens
|
|
1425
|
-
* [[API-Tokens#A
|
|
1519
|
+
* [[API-Tokens]] → [[secrets/api-tokens]]
|
|
1520
|
+
* [[API-Tokens|alias]] → [[secrets/api-tokens|alias]]
|
|
1521
|
+
* [[API-Tokens#A|alias]] → [[secrets/api-tokens#A|alias]]
|
|
1426
1522
|
*
|
|
1427
1523
|
* Use the exact name string the operator wrote — no normalization is
|
|
1428
1524
|
* applied. If the same broken target appears with different spellings
|
|
@@ -2442,7 +2538,7 @@ declare function curateCommand(options: CurateOptions): Command<CurateResult>;
|
|
|
2442
2538
|
*
|
|
2443
2539
|
* Host integration:
|
|
2444
2540
|
* 1. Supply an embedder. `vector.createLocalEmbedder()` is the bundled
|
|
2445
|
-
* default (local
|
|
2541
|
+
* default (local multilingual e5-small, model downloads on first use); pass an
|
|
2446
2542
|
* OpenAI/Voyage adapter to use an API instead.
|
|
2447
2543
|
* 2. Pass it to `createRitualRegistry({ recall: { embed } })`. The command
|
|
2448
2544
|
* is registered only when an embedder is supplied — instances that have
|
|
@@ -2508,14 +2604,196 @@ interface CliIo {
|
|
|
2508
2604
|
* `curate` is intentionally NOT wired here — it is agent-mediated.
|
|
2509
2605
|
*/
|
|
2510
2606
|
declare function buildRegistry(): Promise<CommandRegistry>;
|
|
2511
|
-
/**
|
|
2607
|
+
/**
|
|
2608
|
+
* Resolve the repo root every entry point should use. Precedence:
|
|
2609
|
+
* 1. `VORTEX_REPO_ROOT` env — explicit override always wins.
|
|
2610
|
+
* 2. cwd, if cwd is itself an initialized instance — running inside an instance
|
|
2611
|
+
* uses that instance (so multiple instances on one machine still work).
|
|
2612
|
+
* 3. the global pointer (`~/.claude/vortex-global.json`), set by
|
|
2613
|
+
* `vortex global-setup` — so commands run from any other folder record to
|
|
2614
|
+
* the one central instance.
|
|
2615
|
+
* 4. cwd — the original fallback.
|
|
2616
|
+
* Until global-setup runs (no pointer), this is identical to the old behavior:
|
|
2617
|
+
* env override, else cwd.
|
|
2618
|
+
*/
|
|
2512
2619
|
declare function resolveRepoRoot(): string;
|
|
2620
|
+
/**
|
|
2621
|
+
* Reassemble shell-split argv into the `/`-command string `runSlash` expects,
|
|
2622
|
+
* for every command EXCEPT `/vortex`. Whitespace-containing values are wrapped by
|
|
2623
|
+
* `requote` so they stay visible as a quoted span, and empty tokens are dropped.
|
|
2624
|
+
* `runSlash` then splits this on whitespace only (it is NOT quote-aware), so this
|
|
2625
|
+
* path preserves the long-standing behavior of those commands rather than
|
|
2626
|
+
* guaranteeing perfect token reunification.
|
|
2627
|
+
*
|
|
2628
|
+
* `/vortex` deliberately bypasses this: the CLI threads its tokens straight to
|
|
2629
|
+
* the handler (`runSlashArgv` in runVortexCli), which is what fixes the
|
|
2630
|
+
* quoted/empty-value boundary bug — no lossy join-then-resplit round-trip.
|
|
2631
|
+
*/
|
|
2632
|
+
declare function argvToSlash(argv: readonly string[]): string;
|
|
2513
2633
|
/**
|
|
2514
2634
|
* Run the `vortex` CLI for the given argv (already sliced past `node script`).
|
|
2515
2635
|
* Returns the process exit code (0 success, 1 on error) instead of calling
|
|
2516
2636
|
* `process.exit`, so callers/tests stay in control.
|
|
2517
2637
|
*/
|
|
2518
2638
|
declare function runVortexCli(argv: readonly string[], io?: CliIo): Promise<number>;
|
|
2639
|
+
/**
|
|
2640
|
+
* Detect an interrupted git operation — a near-certain crashed-session signal:
|
|
2641
|
+
* a merge / rebase / cherry-pick / revert / bisect left mid-flight, or a stray
|
|
2642
|
+
* index lock. Uses `git rev-parse --git-path` so the marker resolves correctly
|
|
2643
|
+
* even when `.git` is a FILE (a linked worktree or submodule), not a directory.
|
|
2644
|
+
* Returns the FIRST matching marker name, or null when the tree is clean / not a
|
|
2645
|
+
* git repo. Exported for tests. (Tier-1 carryover; decision-log 2026-06-04.)
|
|
2646
|
+
*/
|
|
2647
|
+
declare function detectInterruptedGitOp(repoRoot: string): string | null;
|
|
2648
|
+
/**
|
|
2649
|
+
* Assemble the Tier-1 carryover signal for the session-start report. The
|
|
2650
|
+
* interrupted-op check and the uncommitted count are computed INDEPENDENTLY: a
|
|
2651
|
+
* held/stale `index.lock` can make `git status` fail, and that must NOT suppress
|
|
2652
|
+
* the interrupted-op signal — the very case we most want to surface. Returns
|
|
2653
|
+
* null when there is nothing to report (clean tree / not a git repo). Exported
|
|
2654
|
+
* for tests. (decision-log 2026-06-04-session-recovery-two-tier.)
|
|
2655
|
+
*/
|
|
2656
|
+
declare function collectCarryover(repoRoot: string): {
|
|
2657
|
+
uncommitted: number;
|
|
2658
|
+
interrupted: string | null;
|
|
2659
|
+
} | null;
|
|
2660
|
+
|
|
2661
|
+
/**
|
|
2662
|
+
* Hook wiring for `/vortex init`: make sure the instance's
|
|
2663
|
+
* `.claude/settings.json` registers the VortEX SessionStart / SessionEnd hooks,
|
|
2664
|
+
* so the boot report + worklog-net fire automatically without the user knowing
|
|
2665
|
+
* any command. NON-DESTRUCTIVE — like the MCP install merge, this preserves
|
|
2666
|
+
* every other hook and top-level field and only adds our two entries if absent.
|
|
2667
|
+
*
|
|
2668
|
+
* Pure functions here (parse / merge / detect); the command does the actual
|
|
2669
|
+
* file read/write around them. Keeping them pure makes the merge unit-testable
|
|
2670
|
+
* and the "writes only what's missing" guarantee verifiable.
|
|
2671
|
+
*/
|
|
2672
|
+
declare const SESSION_START_COMMAND = "npx --no-install -p @vortex-os/base vortex session-start || exit 0";
|
|
2673
|
+
declare const SESSION_END_COMMAND = "npx --no-install -p @vortex-os/base vortex session-end || exit 0";
|
|
2674
|
+
interface HookCommand {
|
|
2675
|
+
readonly type: "command";
|
|
2676
|
+
readonly command: string;
|
|
2677
|
+
}
|
|
2678
|
+
interface HookGroup {
|
|
2679
|
+
readonly hooks: readonly HookCommand[];
|
|
2680
|
+
readonly matcher?: string;
|
|
2681
|
+
}
|
|
2682
|
+
interface ClaudeSettings {
|
|
2683
|
+
hooks?: {
|
|
2684
|
+
SessionStart?: HookGroup[];
|
|
2685
|
+
SessionEnd?: HookGroup[];
|
|
2686
|
+
[event: string]: HookGroup[] | undefined;
|
|
2687
|
+
};
|
|
2688
|
+
[key: string]: unknown;
|
|
2689
|
+
}
|
|
2690
|
+
interface EnsureHooksResult {
|
|
2691
|
+
readonly settings: ClaudeSettings;
|
|
2692
|
+
/**
|
|
2693
|
+
* Hook events that CHANGED — a VortEX entry was added, or a legacy one was
|
|
2694
|
+
* migrated/de-duplicated in place (empty when nothing changed). Callers should
|
|
2695
|
+
* key "did we need to write?" off `alreadyWired`, not the name "added".
|
|
2696
|
+
*/
|
|
2697
|
+
readonly added: readonly ("SessionStart" | "SessionEnd")[];
|
|
2698
|
+
/** True when nothing changed — every VortEX hook was already present. */
|
|
2699
|
+
readonly alreadyWired: boolean;
|
|
2700
|
+
}
|
|
2701
|
+
/**
|
|
2702
|
+
* Parse existing settings.json text. Empty/whitespace → `{}` (fresh). Throws on
|
|
2703
|
+
* malformed JSON so the caller aborts rather than clobbering a hand-edited file.
|
|
2704
|
+
*/
|
|
2705
|
+
declare function parseSettings(text: string | null | undefined): ClaudeSettings;
|
|
2706
|
+
/**
|
|
2707
|
+
* Merge the VortEX hooks into an existing settings object WITHOUT mutating the
|
|
2708
|
+
* input. A hook event is left untouched if it already references our command
|
|
2709
|
+
* (idempotent); otherwise our group is appended alongside any existing groups.
|
|
2710
|
+
*/
|
|
2711
|
+
declare function ensureVortexHooks(existing: ClaudeSettings | null | undefined): EnsureHooksResult;
|
|
2712
|
+
/** Serialize settings the way Claude writes them (2-space, trailing newline). */
|
|
2713
|
+
declare function serializeSettings(settings: ClaudeSettings): string;
|
|
2714
|
+
|
|
2715
|
+
/**
|
|
2716
|
+
* Global usage setup — make a VortEX instance reachable from ANY folder, not
|
|
2717
|
+
* just the instance directory. The lever is the user's GLOBAL Claude config
|
|
2718
|
+
* (`~/.claude/`), which Claude Code reads in every project:
|
|
2719
|
+
*
|
|
2720
|
+
* 1. `~/.claude/settings.json` — global SessionStart/SessionEnd hooks, so
|
|
2721
|
+
* the boot report + worklog-net fire in every folder. SAME command string
|
|
2722
|
+
* as the per-instance hook, so Claude Code's identical-hook dedup means the
|
|
2723
|
+
* instance folder never double-fires.
|
|
2724
|
+
* 2. `~/.claude/vortex-global.json` — a small pointer file recording the
|
|
2725
|
+
* instance path (and a decline marker). `resolveRepoRoot()` reads
|
|
2726
|
+
* `instanceRoot` so commands run from any folder record to the one instance
|
|
2727
|
+
* WITHOUT needing an env var baked into the hook command (which would be
|
|
2728
|
+
* shell-dependent and would break hook dedup).
|
|
2729
|
+
* 3. `~/.claude/CLAUDE.md` — a small, marker-delimited pointer block
|
|
2730
|
+
* telling the agent where the instance is and to read its `AI-RULES.md` for
|
|
2731
|
+
* VortEX work. Regenerated in place; the user's other CLAUDE.md content is
|
|
2732
|
+
* preserved.
|
|
2733
|
+
*
|
|
2734
|
+
* Every write is merge-safe and idempotent. Pure helpers (block upsert, state
|
|
2735
|
+
* read) are separated from the thin fs wrappers so the merge is unit-testable.
|
|
2736
|
+
* All functions take an explicit `home` (default `os.homedir()`) so tests can
|
|
2737
|
+
* point at a fake home without touching the real `~/.claude`.
|
|
2738
|
+
*/
|
|
2739
|
+
|
|
2740
|
+
declare function globalSettingsPath(home?: string): string;
|
|
2741
|
+
/** The pointer/state file: `{ instanceRoot?, declinedAt? }`. */
|
|
2742
|
+
declare function globalStatePath(home?: string): string;
|
|
2743
|
+
declare function globalMemoryPath(home?: string): string;
|
|
2744
|
+
/**
|
|
2745
|
+
* The instance root recorded by a prior `vortex global-setup`, or null. Read by
|
|
2746
|
+
* `resolveRepoRoot()` so any-folder commands target the central instance.
|
|
2747
|
+
*/
|
|
2748
|
+
declare function readGlobalInstancePointer(home?: string): string | null;
|
|
2749
|
+
/**
|
|
2750
|
+
* Does `dir` look like an initialized VortEX instance? Used by
|
|
2751
|
+
* `resolveRepoRoot()` so that running INSIDE any instance uses that instance,
|
|
2752
|
+
* and only falls back to the global pointer elsewhere.
|
|
2753
|
+
*/
|
|
2754
|
+
declare function isInstanceRoot(dir: string): boolean;
|
|
2755
|
+
/** True if the global settings.json already carries BOTH our session hooks. */
|
|
2756
|
+
declare function globalSettingsHasHook(home?: string): boolean;
|
|
2757
|
+
/**
|
|
2758
|
+
* State of global usage on this machine. `done` = pointer set AND global hook
|
|
2759
|
+
* wired (and, if `instanceRoot` given, the pointer matches it). `declined` = the
|
|
2760
|
+
* user dismissed the offer. The session-start offer shows only when neither.
|
|
2761
|
+
*/
|
|
2762
|
+
declare function inspectGlobalSetup(home?: string, instanceRoot?: string): {
|
|
2763
|
+
readonly done: boolean;
|
|
2764
|
+
readonly declined: boolean;
|
|
2765
|
+
};
|
|
2766
|
+
/** The marker-delimited pointer block written into the global CLAUDE.md. */
|
|
2767
|
+
declare function renderGlobalBlock(instanceRoot: string): string;
|
|
2768
|
+
/**
|
|
2769
|
+
* Insert or replace the VortEX block in an existing CLAUDE.md, preserving all
|
|
2770
|
+
* other content. Idempotent: a second call with the same instanceRoot returns
|
|
2771
|
+
* identical text.
|
|
2772
|
+
*/
|
|
2773
|
+
declare function upsertGlobalBlock(existing: string, instanceRoot: string): string;
|
|
2774
|
+
interface GlobalSetupWrite {
|
|
2775
|
+
readonly created: readonly string[];
|
|
2776
|
+
readonly modified: readonly string[];
|
|
2777
|
+
readonly skipped: readonly string[];
|
|
2778
|
+
}
|
|
2779
|
+
/**
|
|
2780
|
+
* Apply global usage setup for `instanceRoot`: merge global hooks, write the
|
|
2781
|
+
* pointer, and upsert the CLAUDE.md block. Non-destructive and idempotent —
|
|
2782
|
+
* re-running with the same instance is a no-op (everything reported `skipped`).
|
|
2783
|
+
*/
|
|
2784
|
+
declare function applyGlobalSetup(opts: {
|
|
2785
|
+
readonly instanceRoot: string;
|
|
2786
|
+
readonly home?: string;
|
|
2787
|
+
}): Promise<GlobalSetupWrite>;
|
|
2788
|
+
/**
|
|
2789
|
+
* Record that the user declined the global-usage offer, so the session-start
|
|
2790
|
+
* report stops offering it. Preserves any existing pointer. Returns the path
|
|
2791
|
+
* written.
|
|
2792
|
+
*/
|
|
2793
|
+
declare function recordGlobalSetupDecline(opts?: {
|
|
2794
|
+
readonly home?: string;
|
|
2795
|
+
readonly now?: Date;
|
|
2796
|
+
}): Promise<string>;
|
|
2519
2797
|
|
|
2520
2798
|
/** The two document actions the v1 value loop supports. */
|
|
2521
2799
|
type CurateActionKind = "create-file" | "append-section";
|
|
@@ -2733,16 +3011,44 @@ interface GitPullResult {
|
|
|
2733
3011
|
readonly conflict: boolean;
|
|
2734
3012
|
}
|
|
2735
3013
|
interface SessionStartHookReport {
|
|
3014
|
+
/** ISO timestamp (kept for any internal use). */
|
|
2736
3015
|
readonly time: string;
|
|
3016
|
+
/** Human-readable LOCAL time for display, e.g. `2026-06-03 (Wed) 15:21 KST`. */
|
|
3017
|
+
readonly localTime: string;
|
|
2737
3018
|
readonly repoRoot: string;
|
|
2738
3019
|
readonly dataDir: string;
|
|
2739
3020
|
readonly counts: Readonly<Record<string, number>>;
|
|
2740
3021
|
readonly missing: readonly string[];
|
|
2741
3022
|
readonly recentWorklog: RecentWorklog | null;
|
|
3023
|
+
/**
|
|
3024
|
+
* Up to 3 short "next up" lines lifted from the MOST RECENT worklog's
|
|
3025
|
+
* hand-off section (else its unchecked tasks), each capped — the
|
|
3026
|
+
* "what you were about to do" pointer. Honest-empty when nothing is captured.
|
|
3027
|
+
*/
|
|
3028
|
+
readonly nextUp: readonly string[];
|
|
2742
3029
|
/** Worklog dates (`YYYY-MM-DD`) present within the gap window — for backfill detection. */
|
|
2743
3030
|
readonly recentWorklogDates: readonly string[];
|
|
2744
3031
|
/** Resolved environment label (e.g. home/work), or null when none is configured. */
|
|
2745
3032
|
readonly environment: string | null;
|
|
3033
|
+
/**
|
|
3034
|
+
* The always-on tier: `_memory/` memories marked `scope: always`, **with
|
|
3035
|
+
* their bodies**, so session start actually loads them (not just names them)
|
|
3036
|
+
* — see AI-RULES.md → "data/ layout" → memory loading. Capped for size; the
|
|
3037
|
+
* on-demand rest stays in `_INDEX.md`. Each body is trimmed (and truncated
|
|
3038
|
+
* past a per-rule cap, flagged by `truncated`).
|
|
3039
|
+
*/
|
|
3040
|
+
readonly alwaysOnRules: readonly {
|
|
3041
|
+
readonly slug: string;
|
|
3042
|
+
readonly body: string;
|
|
3043
|
+
readonly truncated: boolean;
|
|
3044
|
+
}[];
|
|
3045
|
+
/** Always-on memories dropped because the count exceeded the cap (0 = none). */
|
|
3046
|
+
readonly alwaysOnOverflow: number;
|
|
3047
|
+
/**
|
|
3048
|
+
* The on-demand index looks stale — suggest `reindex`. True when memories
|
|
3049
|
+
* exist but `_INDEX.md` is missing, or a `_memory/*.md` is newer than it.
|
|
3050
|
+
*/
|
|
3051
|
+
readonly memoryIndexStale: boolean;
|
|
2746
3052
|
}
|
|
2747
3053
|
/**
|
|
2748
3054
|
* Gather the read-only facts for a start-of-session report: data-dir counts,
|
|
@@ -2760,10 +3066,17 @@ declare function collectSessionStartReport(ctx: ModuleContext, opts?: {
|
|
|
2760
3066
|
* hook supplies `commitDays` from git; the report supplies the present dates.
|
|
2761
3067
|
*/
|
|
2762
3068
|
declare function detectWorklogGaps(commitDays: readonly string[], presentDates: readonly string[]): string[];
|
|
3069
|
+
/**
|
|
3070
|
+
* Count changed paths in `git status --porcelain` output — one path per
|
|
3071
|
+
* non-empty line. Pure: the hook runs git; this turns its stdout into the
|
|
3072
|
+
* Tier-1 carryover count. (`--porcelain` emits exactly one line per changed
|
|
3073
|
+
* path, including untracked, so a line count is the change count.)
|
|
3074
|
+
*/
|
|
3075
|
+
declare function countUncommitted(porcelain: string): number;
|
|
2763
3076
|
/**
|
|
2764
3077
|
* Render a session-start report as a compact markdown block for a host hook
|
|
2765
3078
|
* to inject as session context. A pull conflict and any worklog gaps are
|
|
2766
|
-
* surfaced as warnings (the agent acts on the gaps — see
|
|
3079
|
+
* surfaced as warnings (the agent acts on the gaps — see AI-RULES.md).
|
|
2767
3080
|
*/
|
|
2768
3081
|
declare function renderSessionStartReport(report: SessionStartHookReport, extras?: {
|
|
2769
3082
|
readonly git?: GitPullResult | null;
|
|
@@ -2773,6 +3086,57 @@ declare function renderSessionStartReport(report: SessionStartHookReport, extras
|
|
|
2773
3086
|
readonly indexedPulled: number;
|
|
2774
3087
|
readonly errors: number;
|
|
2775
3088
|
};
|
|
3089
|
+
readonly vectorized?: {
|
|
3090
|
+
readonly memories: number;
|
|
3091
|
+
readonly sessionChunks: number;
|
|
3092
|
+
};
|
|
3093
|
+
/**
|
|
3094
|
+
* A first-time recall setup (model download + index build) was just started
|
|
3095
|
+
* in the background (the add-on is installed but the index didn't exist yet).
|
|
3096
|
+
*/
|
|
3097
|
+
readonly vectorizeSetup?: boolean;
|
|
3098
|
+
/**
|
|
3099
|
+
* Update lifecycle "signal 1" (local, no network): framework templates that
|
|
3100
|
+
* the installed package has but this instance hasn't applied yet. `pending`
|
|
3101
|
+
* = files that would be cleanly refreshed; `conflicts` = files the user
|
|
3102
|
+
* edited (an update would offer those as `<file>.new`).
|
|
3103
|
+
*/
|
|
3104
|
+
readonly templateUpdate?: {
|
|
3105
|
+
readonly pending: number;
|
|
3106
|
+
readonly conflicts: number;
|
|
3107
|
+
readonly toVersion?: string;
|
|
3108
|
+
};
|
|
3109
|
+
/**
|
|
3110
|
+
* Update lifecycle "signal 2" (network): a newer `@vortex-os/base` is
|
|
3111
|
+
* published than the one installed. Shown only when `newer` is true; the
|
|
3112
|
+
* agent then asks before running `command` (nothing installs automatically).
|
|
3113
|
+
*/
|
|
3114
|
+
readonly updateCheck?: {
|
|
3115
|
+
readonly package: string;
|
|
3116
|
+
readonly installed: string | null;
|
|
3117
|
+
readonly latest: string | null;
|
|
3118
|
+
readonly newer: boolean;
|
|
3119
|
+
readonly command: string | null;
|
|
3120
|
+
readonly registry: string;
|
|
3121
|
+
};
|
|
3122
|
+
/**
|
|
3123
|
+
* One-time offer: this machine has not enabled "VortEX from any folder" and
|
|
3124
|
+
* the user hasn't declined. The agent asks once; on yes → `vortex
|
|
3125
|
+
* global-setup`, on no → `vortex global-setup --decline` (so it stops asking).
|
|
3126
|
+
*/
|
|
3127
|
+
readonly globalSetupOffer?: boolean;
|
|
3128
|
+
/**
|
|
3129
|
+
* Tier-1 session-resume signals (cheap, git-only; computed by the hook):
|
|
3130
|
+
* work carried over from a prior session. `interrupted` names an in-progress
|
|
3131
|
+
* git op (MERGE_HEAD / rebase / lock) — a near-certain crash signal, surfaced
|
|
3132
|
+
* as ⚠️. `uncommitted` counts changed paths present at session start — common
|
|
3133
|
+
* in normal WIP, so surfaced as a quiet informational line only. Both point at
|
|
3134
|
+
* `/resume` (Tier 2). See decision-log 2026-06-04-session-recovery-two-tier.
|
|
3135
|
+
*/
|
|
3136
|
+
readonly carryover?: {
|
|
3137
|
+
readonly uncommitted: number;
|
|
3138
|
+
readonly interrupted: string | null;
|
|
3139
|
+
};
|
|
2776
3140
|
}): string;
|
|
2777
3141
|
|
|
2778
3142
|
/**
|
|
@@ -2806,7 +3170,10 @@ declare function ensureWorklogEntry(ctx: ModuleContext, opts?: {
|
|
|
2806
3170
|
*
|
|
2807
3171
|
* Two sources, one pass:
|
|
2808
3172
|
* - **local (a)** — this machine's own transcripts that are not archived yet,
|
|
2809
|
-
* read from
|
|
3173
|
+
* read from every detected agent host's transcript store (Claude Code,
|
|
3174
|
+
* Codex, Gemini) and scoped to the current project. Because all hosts are
|
|
3175
|
+
* swept on every start, a single Claude Code session-start also folds in the
|
|
3176
|
+
* Codex/Gemini sessions you ran in the same project, into one archive.
|
|
2810
3177
|
* - **pulled (b)** — transcripts created on another machine that arrived as
|
|
2811
3178
|
* normalized text via git sync. Their text is present but this machine's
|
|
2812
3179
|
* DB (local, derived, gitignored) has never indexed them.
|
|
@@ -2828,9 +3195,12 @@ interface CatchUpOptions {
|
|
|
2828
3195
|
/** Restrict local ingest to one project's transcripts. Default: `ctx.repoRoot`. */
|
|
2829
3196
|
readonly cwd?: string;
|
|
2830
3197
|
/**
|
|
2831
|
-
* Transcript adapters for local ingest. Default: Claude Code
|
|
2832
|
-
*
|
|
2833
|
-
*
|
|
3198
|
+
* Transcript adapters for local ingest. Default: all CLI hosts — Claude Code,
|
|
3199
|
+
* Codex, and Gemini. Each adapter's `detect()` returns false when its host is
|
|
3200
|
+
* absent, so registering all three is ~free on a machine that only uses one.
|
|
3201
|
+
* (Claude Desktop is opt-in — it needs the `classic-level` dependency — so it
|
|
3202
|
+
* is not in the default set; a caller can add it.) Tests inject fakes (or a
|
|
3203
|
+
* sandbox `env.home`) so the scan never touches the real home directory.
|
|
2834
3204
|
*/
|
|
2835
3205
|
readonly adapters?: sessionArchive.IngestParams["adapters"];
|
|
2836
3206
|
/** Adapter environment override (e.g. a sandbox HOME). Tests use this. */
|
|
@@ -2838,56 +3208,6 @@ interface CatchUpOptions {
|
|
|
2838
3208
|
}
|
|
2839
3209
|
declare function catchUpSessions(ctx: ModuleContext, opts?: CatchUpOptions): Promise<CatchUpResult>;
|
|
2840
3210
|
|
|
2841
|
-
/**
|
|
2842
|
-
* Hook wiring for `/vortex init`: make sure the instance's
|
|
2843
|
-
* `.claude/settings.json` registers the VortEX SessionStart / SessionEnd hooks,
|
|
2844
|
-
* so the boot report + worklog-net fire automatically without the user knowing
|
|
2845
|
-
* any command. NON-DESTRUCTIVE — like the MCP install merge, this preserves
|
|
2846
|
-
* every other hook and top-level field and only adds our two entries if absent.
|
|
2847
|
-
*
|
|
2848
|
-
* Pure functions here (parse / merge / detect); the command does the actual
|
|
2849
|
-
* file read/write around them. Keeping them pure makes the merge unit-testable
|
|
2850
|
-
* and the "writes only what's missing" guarantee verifiable.
|
|
2851
|
-
*/
|
|
2852
|
-
declare const SESSION_START_COMMAND = "npx --no-install -p @vortex-os/base vortex session-start";
|
|
2853
|
-
declare const SESSION_END_COMMAND = "npx --no-install -p @vortex-os/base vortex session-end";
|
|
2854
|
-
interface HookCommand {
|
|
2855
|
-
readonly type: "command";
|
|
2856
|
-
readonly command: string;
|
|
2857
|
-
}
|
|
2858
|
-
interface HookGroup {
|
|
2859
|
-
readonly hooks: readonly HookCommand[];
|
|
2860
|
-
readonly matcher?: string;
|
|
2861
|
-
}
|
|
2862
|
-
interface ClaudeSettings {
|
|
2863
|
-
hooks?: {
|
|
2864
|
-
SessionStart?: HookGroup[];
|
|
2865
|
-
SessionEnd?: HookGroup[];
|
|
2866
|
-
[event: string]: HookGroup[] | undefined;
|
|
2867
|
-
};
|
|
2868
|
-
[key: string]: unknown;
|
|
2869
|
-
}
|
|
2870
|
-
interface EnsureHooksResult {
|
|
2871
|
-
readonly settings: ClaudeSettings;
|
|
2872
|
-
/** Which hook events we added a VortEX entry to (empty if already wired). */
|
|
2873
|
-
readonly added: readonly ("SessionStart" | "SessionEnd")[];
|
|
2874
|
-
/** True when nothing changed — every VortEX hook was already present. */
|
|
2875
|
-
readonly alreadyWired: boolean;
|
|
2876
|
-
}
|
|
2877
|
-
/**
|
|
2878
|
-
* Parse existing settings.json text. Empty/whitespace → `{}` (fresh). Throws on
|
|
2879
|
-
* malformed JSON so the caller aborts rather than clobbering a hand-edited file.
|
|
2880
|
-
*/
|
|
2881
|
-
declare function parseSettings(text: string | null | undefined): ClaudeSettings;
|
|
2882
|
-
/**
|
|
2883
|
-
* Merge the VortEX hooks into an existing settings object WITHOUT mutating the
|
|
2884
|
-
* input. A hook event is left untouched if it already references our command
|
|
2885
|
-
* (idempotent); otherwise our group is appended alongside any existing groups.
|
|
2886
|
-
*/
|
|
2887
|
-
declare function ensureVortexHooks(existing: ClaudeSettings | null | undefined): EnsureHooksResult;
|
|
2888
|
-
/** Serialize settings the way Claude writes them (2-space, trailing newline). */
|
|
2889
|
-
declare function serializeSettings(settings: ClaudeSettings): string;
|
|
2890
|
-
|
|
2891
3211
|
interface ReindexResult {
|
|
2892
3212
|
readonly dir: string;
|
|
2893
3213
|
readonly status: "written" | "unchanged" | "missing";
|
|
@@ -2970,8 +3290,8 @@ interface AgendaReport {
|
|
|
2970
3290
|
} | null;
|
|
2971
3291
|
/**
|
|
2972
3292
|
* "Next up" lines lifted from the most recent worklog's hand-off section
|
|
2973
|
-
* (`##
|
|
2974
|
-
*
|
|
3293
|
+
* (`## Next` / a `📋`-marked heading) — the planned-work pointer, mirroring
|
|
3294
|
+
* a worklog hand-off block. Empty if none.
|
|
2975
3295
|
*/
|
|
2976
3296
|
readonly nextUp: readonly string[];
|
|
2977
3297
|
/** Date of the worklog the nextUp lines came from (or null). */
|
|
@@ -3001,11 +3321,12 @@ interface CollectAgendaOptions {
|
|
|
3001
3321
|
*/
|
|
3002
3322
|
/**
|
|
3003
3323
|
* Lift the "next up / hand-off" section from a worklog body — the planned-work
|
|
3004
|
-
* pointer the agent leaves at wind-down (mirrors
|
|
3005
|
-
*
|
|
3006
|
-
*
|
|
3007
|
-
* content lines (bullets de-marked, blanks dropped),
|
|
3008
|
-
* section. Stops at the next heading of the
|
|
3324
|
+
* pointer the agent leaves at wind-down (mirrors a worklog hand-off block).
|
|
3325
|
+
* Matches a heading whose text contains any of the cue terms (English and
|
|
3326
|
+
* Korean: "next", "next up", "todo", "다음 작업", "다음 세션", "후속", "📋").
|
|
3327
|
+
* Returns the section's content lines (bullets de-marked, blanks dropped),
|
|
3328
|
+
* capped. Empty if no such section. Stops at the next heading of the
|
|
3329
|
+
* same-or-higher level.
|
|
3009
3330
|
*/
|
|
3010
3331
|
declare function extractNextUp(body: string, max?: number): string[];
|
|
3011
3332
|
/**
|
|
@@ -3037,6 +3358,157 @@ declare function renderAgenda(report: AgendaReport): string;
|
|
|
3037
3358
|
*/
|
|
3038
3359
|
declare const agendaCommand: Command<AgendaReport>;
|
|
3039
3360
|
|
|
3361
|
+
/** Schema tag for the ownership manifest; bump on a breaking shape change. */
|
|
3362
|
+
declare const OWNERSHIP_SCHEMA = "vortex-ownership/1";
|
|
3363
|
+
/** A single framework-owned file the instance tracks for updates. */
|
|
3364
|
+
interface OwnershipEntry {
|
|
3365
|
+
/** Stable id across path moves — currently the template-relative path. */
|
|
3366
|
+
readonly templateId: string;
|
|
3367
|
+
/** Instance destination, repoRoot-relative, forward-slashed (portable). */
|
|
3368
|
+
readonly path: string;
|
|
3369
|
+
/** sha256 of the shipped template when this entry was last reconciled. */
|
|
3370
|
+
readonly sourceSha256: string;
|
|
3371
|
+
/**
|
|
3372
|
+
* When the on-disk file equals the current template, this holds that hash
|
|
3373
|
+
* (the copy is pristine — safe to refresh, since identical content has
|
|
3374
|
+
* nothing to lose, and the first time the user edits it the hash diverges
|
|
3375
|
+
* and it becomes a conflict instead). `null` means the on-disk file diverges
|
|
3376
|
+
* from the template — a foreign / user-owned file we never auto-replace.
|
|
3377
|
+
*/
|
|
3378
|
+
readonly installedSha256: string | null;
|
|
3379
|
+
}
|
|
3380
|
+
interface OwnershipManifest {
|
|
3381
|
+
readonly schema: string;
|
|
3382
|
+
/** The `@vortex-os/base` version whose template index this reconciles to. */
|
|
3383
|
+
readonly baseVersion: string;
|
|
3384
|
+
/** ISO timestamp the manifest was written. */
|
|
3385
|
+
readonly generatedAt: string;
|
|
3386
|
+
readonly files: readonly OwnershipEntry[];
|
|
3387
|
+
}
|
|
3388
|
+
type UpdateFileActionKind = "replace" | "restore" | "install" | "conflict" | "locally-modified" | "unmanaged" | "adopt" | "removed-upstream" | "unchanged";
|
|
3389
|
+
interface UpdateFileAction {
|
|
3390
|
+
readonly path: string;
|
|
3391
|
+
readonly templateId: string;
|
|
3392
|
+
readonly action: UpdateFileActionKind;
|
|
3393
|
+
readonly detail?: string;
|
|
3394
|
+
/** For `replace` (or a backed-up `.new`): where the prior bytes were saved. */
|
|
3395
|
+
readonly backupPath?: string;
|
|
3396
|
+
/** For `conflict`: the `<file>.new` carrying the new template content. */
|
|
3397
|
+
readonly newFilePath?: string;
|
|
3398
|
+
/** Set when applying this file threw — the file was NOT changed destructively. */
|
|
3399
|
+
readonly error?: string;
|
|
3400
|
+
}
|
|
3401
|
+
interface VortexUpdateResult {
|
|
3402
|
+
readonly subcommand: "update";
|
|
3403
|
+
readonly status: "ok" | "updated" | "conflicts" | "dry-run" | "no-manifest" | "no-templates";
|
|
3404
|
+
readonly mode: "templates-only";
|
|
3405
|
+
readonly dryRun: boolean;
|
|
3406
|
+
/** Instance's recorded base version before the update (manifest baseVersion). */
|
|
3407
|
+
readonly fromVersion?: string;
|
|
3408
|
+
/** Shipped template index's base version (what we reconcile to). */
|
|
3409
|
+
readonly toVersion?: string;
|
|
3410
|
+
readonly actions: readonly UpdateFileAction[];
|
|
3411
|
+
readonly summary: {
|
|
3412
|
+
readonly replaced: number;
|
|
3413
|
+
readonly restored: number;
|
|
3414
|
+
readonly installed: number;
|
|
3415
|
+
readonly conflicts: number;
|
|
3416
|
+
readonly unchanged: number;
|
|
3417
|
+
readonly unmanaged: number;
|
|
3418
|
+
/** Files force-refreshed to the template via `--adopt` (prior bytes backed up). */
|
|
3419
|
+
readonly adopted: number;
|
|
3420
|
+
readonly locallyModified: number;
|
|
3421
|
+
readonly removedUpstream: number;
|
|
3422
|
+
/** Files whose apply threw (left unchanged) — surfaces a partial run. */
|
|
3423
|
+
readonly errors: number;
|
|
3424
|
+
};
|
|
3425
|
+
readonly nextActions: readonly string[];
|
|
3426
|
+
}
|
|
3427
|
+
/** Absolute path of the instance ownership manifest. */
|
|
3428
|
+
declare function ownershipManifestPath(ctx: ModuleContext): string;
|
|
3429
|
+
/**
|
|
3430
|
+
* Map a template-relative path (as listed in the template index, e.g.
|
|
3431
|
+
* `routers/AGENTS.md`) to the instance destination, repoRoot-relative. The
|
|
3432
|
+
* SINGLE place that knows the init copy layout — `init` (manifest writer) and
|
|
3433
|
+
* `update` both derive destinations here, so they can never drift apart.
|
|
3434
|
+
*
|
|
3435
|
+
* Returns `null` for paths that are not copied into an instance (the index file
|
|
3436
|
+
* itself, or any unrecognized top-level dir) — those are not framework-owned
|
|
3437
|
+
* instance files and are skipped.
|
|
3438
|
+
*/
|
|
3439
|
+
declare function templateDestRelPath(templateRelPath: string): string | null;
|
|
3440
|
+
/**
|
|
3441
|
+
* Reconcile the shipped template index against what is currently on disk and
|
|
3442
|
+
* produce an ownership manifest. For each framework-owned file:
|
|
3443
|
+
* - `sourceSha256` is the hash of the actual shipped template file (computed
|
|
3444
|
+
* fresh, not trusted from the index — robust to a stale index);
|
|
3445
|
+
* - `installedSha256` is `sourceSha256` when the on-disk copy matches the
|
|
3446
|
+
* template (pristine — whether `init` wrote it or the user already had the
|
|
3447
|
+
* identical stock content; either way there is nothing to lose), and `null`
|
|
3448
|
+
* when the slot is missing or holds a divergent foreign file.
|
|
3449
|
+
*
|
|
3450
|
+
* Used by `init` to write the manifest from day one. Pure read — never writes.
|
|
3451
|
+
*/
|
|
3452
|
+
declare function buildOwnershipManifest(ctx: ModuleContext, templatesDir: string): Promise<OwnershipManifest | null>;
|
|
3453
|
+
/**
|
|
3454
|
+
* Build and atomically write the ownership manifest for this instance. Called
|
|
3455
|
+
* by `vortex init` (best-effort — a failure never blocks init). Returns the
|
|
3456
|
+
* written path and file count, or `null` when there is no template index to
|
|
3457
|
+
* reconcile against (a dev tree without a built `templates/manifest.json`).
|
|
3458
|
+
*/
|
|
3459
|
+
declare function writeOwnershipManifest(ctx: ModuleContext, templatesDir: string | null): Promise<{
|
|
3460
|
+
path: string;
|
|
3461
|
+
fileCount: number;
|
|
3462
|
+
} | null>;
|
|
3463
|
+
/** Read-only health snapshot of the ownership manifest vs what's on disk. */
|
|
3464
|
+
interface OwnershipDiagnosis {
|
|
3465
|
+
/** Whether an ownership manifest exists and parsed. */
|
|
3466
|
+
readonly present: boolean;
|
|
3467
|
+
/** The manifest file exists on disk but could not be parsed/validated. */
|
|
3468
|
+
readonly malformed: boolean;
|
|
3469
|
+
readonly total: number;
|
|
3470
|
+
/** Tracked file on disk still equals the recorded copy (safe to refresh). */
|
|
3471
|
+
readonly pristine: number;
|
|
3472
|
+
/** Tracked file on disk diverges from the recorded copy (user edited it). */
|
|
3473
|
+
readonly modified: number;
|
|
3474
|
+
/** Tracked file is gone from disk (an update would restore it). */
|
|
3475
|
+
readonly missing: number;
|
|
3476
|
+
/** Slot recorded as foreign (installedSha256 === null) — never auto-managed. */
|
|
3477
|
+
readonly unmanaged: number;
|
|
3478
|
+
}
|
|
3479
|
+
/**
|
|
3480
|
+
* Inspect the ownership manifest against the current instance files — a pure
|
|
3481
|
+
* read used by `vortex doctor` to report whether the instance's framework
|
|
3482
|
+
* files are stock, user-edited, missing, or foreign. No template index needed
|
|
3483
|
+
* (it compares disk to the recorded `installedSha256`, not to a new template).
|
|
3484
|
+
*/
|
|
3485
|
+
declare function inspectOwnership(ctx: ModuleContext): Promise<OwnershipDiagnosis>;
|
|
3486
|
+
/**
|
|
3487
|
+
* Adopt / repair the ownership manifest for an instance that lacks one (e.g.
|
|
3488
|
+
* created before the update lifecycle existed). Conservative by design: it does
|
|
3489
|
+
* NOTHING when a manifest already exists — rewriting could downgrade a tracked-
|
|
3490
|
+
* but-edited file to "foreign" and lose its update path — so a healthy instance
|
|
3491
|
+
* is never disturbed. Only a missing/unreadable manifest is (re)built from the
|
|
3492
|
+
* current on-disk state (diverged files recorded as foreign/null, never falsely
|
|
3493
|
+
* claimed pristine). `vortex update --templates-only` is the way to refresh once
|
|
3494
|
+
* a manifest exists.
|
|
3495
|
+
*/
|
|
3496
|
+
declare function repairOwnershipManifest(ctx: ModuleContext, templatesDir: string | null): Promise<{
|
|
3497
|
+
status: "created" | "already-present" | "unreadable" | "no-templates";
|
|
3498
|
+
path?: string;
|
|
3499
|
+
fileCount?: number;
|
|
3500
|
+
}>;
|
|
3501
|
+
/**
|
|
3502
|
+
* `vortex update --templates-only` — refresh framework-owned templates from the
|
|
3503
|
+
* currently-installed package, hash-guarded so user edits are never lost. Two
|
|
3504
|
+
* phases: PLAN (all reads — safe in dry-run) then APPLY (writes, skipped in
|
|
3505
|
+
* dry-run), with the manifest written LAST and always reflecting real disk.
|
|
3506
|
+
*/
|
|
3507
|
+
declare function runTemplatesUpdate(ctx: ModuleContext, templatesDir: string | null, options?: {
|
|
3508
|
+
dryRun?: boolean;
|
|
3509
|
+
adopt?: ReadonlySet<string>;
|
|
3510
|
+
}): Promise<VortexUpdateResult>;
|
|
3511
|
+
|
|
3040
3512
|
/**
|
|
3041
3513
|
* `/vortex <sub>` — Root command for VortEX instance operations.
|
|
3042
3514
|
*
|
|
@@ -3140,6 +3612,9 @@ interface VortexImportResult {
|
|
|
3140
3612
|
};
|
|
3141
3613
|
readonly frontmatterInjected: number;
|
|
3142
3614
|
readonly frontmatterPreserved: number;
|
|
3615
|
+
readonly attachmentsCopied: number;
|
|
3616
|
+
readonly skippedSecrets: readonly string[];
|
|
3617
|
+
readonly skippedLarge: readonly string[];
|
|
3143
3618
|
readonly systemDirsCreated: readonly string[];
|
|
3144
3619
|
readonly skipped: number;
|
|
3145
3620
|
readonly collisions: number;
|
|
@@ -3194,8 +3669,87 @@ interface VortexSyncResult {
|
|
|
3194
3669
|
readonly failedAt?: VortexSyncStepId;
|
|
3195
3670
|
readonly nextActions: readonly string[];
|
|
3196
3671
|
}
|
|
3197
|
-
|
|
3672
|
+
interface VortexGlobalSetupResult {
|
|
3673
|
+
readonly subcommand: "global-setup";
|
|
3674
|
+
readonly status: "completed" | "declined" | "error";
|
|
3675
|
+
readonly created: readonly string[];
|
|
3676
|
+
readonly modified: readonly string[];
|
|
3677
|
+
readonly skipped: readonly string[];
|
|
3678
|
+
readonly nextActions: readonly string[];
|
|
3679
|
+
}
|
|
3680
|
+
type VortexResult = VortexInitResult | VortexStatusResult | VortexImportResult | VortexDoctorResult | VortexSyncResult | VortexUpdateResult | VortexGlobalSetupResult | VortexPlannedResult | VortexHelpResult;
|
|
3198
3681
|
declare const vortexCommand: Command<VortexResult>;
|
|
3682
|
+
/**
|
|
3683
|
+
* Parse `--adopt <path>` (repeatable) tokens into the POSIX, repoRoot-relative
|
|
3684
|
+
* dest paths the ownership manifest uses, so a Windows-style argument
|
|
3685
|
+
* (`.claude\commands\recall.md` or a leading `./`) still matches a slot. The
|
|
3686
|
+
* value is the dest path shown in the update report. Exported for tests.
|
|
3687
|
+
*/
|
|
3688
|
+
declare function parseAdoptArgs(tokens: readonly string[]): Set<string>;
|
|
3689
|
+
|
|
3690
|
+
interface UpdateCheckResult {
|
|
3691
|
+
readonly package: string;
|
|
3692
|
+
/** Installed base version (from the shipped template index), or null if unknown. */
|
|
3693
|
+
readonly installed: string | null;
|
|
3694
|
+
/** Latest published version, or null when the check was skipped/failed/offline. */
|
|
3695
|
+
readonly latest: string | null;
|
|
3696
|
+
/** True only when `latest` is a strictly-greater stable version than `installed`. */
|
|
3697
|
+
readonly newer: boolean;
|
|
3698
|
+
/** Exact command to apply the update — present only when `newer`. */
|
|
3699
|
+
readonly command: string | null;
|
|
3700
|
+
/** Disclosed: where the check looked (honest about the network contact). */
|
|
3701
|
+
readonly registry: string;
|
|
3702
|
+
}
|
|
3703
|
+
/**
|
|
3704
|
+
* Installed base version = the `baseVersion` recorded in the shipped template
|
|
3705
|
+
* index (`templates/manifest.json`). This is signal 1's source of truth too,
|
|
3706
|
+
* and it travels with the running binary, so it can't disagree with the version
|
|
3707
|
+
* actually executing (local or global/npx). Unreadable/invalid → null.
|
|
3708
|
+
*/
|
|
3709
|
+
declare function readInstalledBaseVersion(templatesDir?: string | null): string | null;
|
|
3710
|
+
/**
|
|
3711
|
+
* Query the registry for the latest published `@vortex-os/base` version via
|
|
3712
|
+
* `npm view`. Bounded by `NPM_TIMEOUT_MS`; any failure (offline, no npm,
|
|
3713
|
+
* timeout, non-JSON) returns null so the caller stays silent. Never throws.
|
|
3714
|
+
*/
|
|
3715
|
+
declare function queryNpmLatest(repoRoot: string): string | null;
|
|
3716
|
+
/**
|
|
3717
|
+
* Compare two versions: -1 (a<b), 0 (a==b), 1 (a>b), or null if either is
|
|
3718
|
+
* unparseable. Numeric core left-to-right; on an equal core a RELEASE outranks
|
|
3719
|
+
* a PRERELEASE of the same core. We deliberately do NOT implement full SemVer
|
|
3720
|
+
* §11 prerelease-vs-prerelease ordering — two prereleases of the same core
|
|
3721
|
+
* compare EQUAL here. That is fine because the surfacing policy
|
|
3722
|
+
* ({@link isStableUpdate}) only ever offers a STABLE `latest`, so a
|
|
3723
|
+
* prerelease→prerelease "upgrade" is never surfaced regardless; the §11
|
|
3724
|
+
* tag-ordering is the most bug-prone part, so omitting it removes risk.
|
|
3725
|
+
*/
|
|
3726
|
+
declare function compareSemver(a: string, b: string): -1 | 0 | 1 | null;
|
|
3727
|
+
/** True only when `latest` is a strictly-greater version than `installed`. Null-safe → false. */
|
|
3728
|
+
declare function isNewer(latest: string | null, installed: string | null): boolean;
|
|
3729
|
+
/**
|
|
3730
|
+
* The SURFACING policy: only offer a STABLE newer release. A prerelease
|
|
3731
|
+
* `latest` (e.g. `2.0.0-beta.1`) is never surfaced — VortEX never nudges users
|
|
3732
|
+
* onto a beta — even when its core is higher. Upgrading FROM a prerelease TO a
|
|
3733
|
+
* stable release of the same-or-higher core IS surfaced (because `latest` is
|
|
3734
|
+
* then stable). Null/unparseable → false. This is what `checkBaseUpdate` uses
|
|
3735
|
+
* to decide `newer`.
|
|
3736
|
+
*/
|
|
3737
|
+
declare function isStableUpdate(latest: string | null, installed: string | null): boolean;
|
|
3738
|
+
/**
|
|
3739
|
+
* The exact, copy-pasteable command to apply the update, detected from the
|
|
3740
|
+
* instance: package manager by lockfile, local vs global by whether base sits
|
|
3741
|
+
* in this folder's node_modules. Always chained with `npx vortex update` so the
|
|
3742
|
+
* new package's templates get applied right after the install. Pure (no
|
|
3743
|
+
* network); the string is surfaced verbatim and the CLI never runs it.
|
|
3744
|
+
*/
|
|
3745
|
+
declare function buildInstallCommand(repoRoot: string): string;
|
|
3746
|
+
/**
|
|
3747
|
+
* Run the once-per-session update check. The CALLER decides whether to call
|
|
3748
|
+
* (session start gates on `updates.check`; `vortex check-updates` forces it).
|
|
3749
|
+
* Never throws — returns a result with `latest: null` / `newer: false` when the
|
|
3750
|
+
* registry can't be reached, so the caller simply shows nothing.
|
|
3751
|
+
*/
|
|
3752
|
+
declare function checkBaseUpdate(ctx: ModuleContext): UpdateCheckResult;
|
|
3199
3753
|
|
|
3200
3754
|
//# sourceMappingURL=index.d.ts.map
|
|
3201
3755
|
|
|
@@ -3221,8 +3775,12 @@ type index_d_EnsureHooksResult = EnsureHooksResult;
|
|
|
3221
3775
|
type index_d_EnsureWorklogResult = EnsureWorklogResult;
|
|
3222
3776
|
type index_d_GitPullResult = GitPullResult;
|
|
3223
3777
|
type index_d_NewDecisionResult = NewDecisionResult;
|
|
3778
|
+
declare const index_d_OWNERSHIP_SCHEMA: typeof OWNERSHIP_SCHEMA;
|
|
3224
3779
|
type index_d_OpenDecision = OpenDecision;
|
|
3225
3780
|
type index_d_OpenTask = OpenTask;
|
|
3781
|
+
type index_d_OwnershipDiagnosis = OwnershipDiagnosis;
|
|
3782
|
+
type index_d_OwnershipEntry = OwnershipEntry;
|
|
3783
|
+
type index_d_OwnershipManifest = OwnershipManifest;
|
|
3226
3784
|
type index_d_RecallOptions = RecallOptions;
|
|
3227
3785
|
type index_d_RecentWorklog = RecentWorklog;
|
|
3228
3786
|
type index_d_ReindexResult = ReindexResult;
|
|
@@ -3231,6 +3789,9 @@ declare const index_d_SESSION_END_COMMAND: typeof SESSION_END_COMMAND;
|
|
|
3231
3789
|
declare const index_d_SESSION_START_COMMAND: typeof SESSION_START_COMMAND;
|
|
3232
3790
|
type index_d_SessionStartHookReport = SessionStartHookReport;
|
|
3233
3791
|
type index_d_SessionStartReport = SessionStartReport;
|
|
3792
|
+
type index_d_UpdateCheckResult = UpdateCheckResult;
|
|
3793
|
+
type index_d_UpdateFileAction = UpdateFileAction;
|
|
3794
|
+
type index_d_UpdateFileActionKind = UpdateFileActionKind;
|
|
3234
3795
|
type index_d_VortexHelpResult = VortexHelpResult;
|
|
3235
3796
|
type index_d_VortexInitResult = VortexInitResult;
|
|
3236
3797
|
type index_d_VortexPlannedResult = VortexPlannedResult;
|
|
@@ -3239,40 +3800,71 @@ type index_d_VortexSyncResult = VortexSyncResult;
|
|
|
3239
3800
|
type index_d_VortexSyncStep = VortexSyncStep;
|
|
3240
3801
|
type index_d_VortexSyncStepId = VortexSyncStepId;
|
|
3241
3802
|
type index_d_VortexSyncStepStatus = VortexSyncStepStatus;
|
|
3803
|
+
type index_d_VortexUpdateResult = VortexUpdateResult;
|
|
3242
3804
|
type index_d_WorklogAppendResult = WorklogAppendResult;
|
|
3243
3805
|
declare const index_d_agendaCommand: typeof agendaCommand;
|
|
3806
|
+
declare const index_d_applyGlobalSetup: typeof applyGlobalSetup;
|
|
3807
|
+
declare const index_d_argvToSlash: typeof argvToSlash;
|
|
3808
|
+
declare const index_d_buildInstallCommand: typeof buildInstallCommand;
|
|
3809
|
+
declare const index_d_buildOwnershipManifest: typeof buildOwnershipManifest;
|
|
3244
3810
|
declare const index_d_buildRegistry: typeof buildRegistry;
|
|
3245
3811
|
declare const index_d_catchUpSessions: typeof catchUpSessions;
|
|
3812
|
+
declare const index_d_checkBaseUpdate: typeof checkBaseUpdate;
|
|
3246
3813
|
declare const index_d_collectAgenda: typeof collectAgenda;
|
|
3814
|
+
declare const index_d_collectCarryover: typeof collectCarryover;
|
|
3247
3815
|
declare const index_d_collectSessionStartReport: typeof collectSessionStartReport;
|
|
3816
|
+
declare const index_d_compareSemver: typeof compareSemver;
|
|
3248
3817
|
declare const index_d_computeCurateFingerprint: typeof computeCurateFingerprint;
|
|
3818
|
+
declare const index_d_countUncommitted: typeof countUncommitted;
|
|
3249
3819
|
declare const index_d_createAmbientRecaller: typeof createAmbientRecaller;
|
|
3250
3820
|
declare const index_d_createRitualRegistry: typeof createRitualRegistry;
|
|
3251
3821
|
declare const index_d_curateCommand: typeof curateCommand;
|
|
3252
3822
|
declare const index_d_decisionCommand: typeof decisionCommand;
|
|
3823
|
+
declare const index_d_detectInterruptedGitOp: typeof detectInterruptedGitOp;
|
|
3253
3824
|
declare const index_d_detectWorklogGaps: typeof detectWorklogGaps;
|
|
3254
3825
|
declare const index_d_ensureVortexHooks: typeof ensureVortexHooks;
|
|
3255
3826
|
declare const index_d_ensureWorklogEntry: typeof ensureWorklogEntry;
|
|
3256
3827
|
declare const index_d_extractNextUp: typeof extractNextUp;
|
|
3257
3828
|
declare const index_d_extractOpenTasks: typeof extractOpenTasks;
|
|
3829
|
+
declare const index_d_globalMemoryPath: typeof globalMemoryPath;
|
|
3830
|
+
declare const index_d_globalSettingsHasHook: typeof globalSettingsHasHook;
|
|
3831
|
+
declare const index_d_globalSettingsPath: typeof globalSettingsPath;
|
|
3832
|
+
declare const index_d_globalStatePath: typeof globalStatePath;
|
|
3833
|
+
declare const index_d_inspectGlobalSetup: typeof inspectGlobalSetup;
|
|
3834
|
+
declare const index_d_inspectOwnership: typeof inspectOwnership;
|
|
3835
|
+
declare const index_d_isInstanceRoot: typeof isInstanceRoot;
|
|
3836
|
+
declare const index_d_isNewer: typeof isNewer;
|
|
3837
|
+
declare const index_d_isStableUpdate: typeof isStableUpdate;
|
|
3258
3838
|
declare const index_d_logCommand: typeof logCommand;
|
|
3839
|
+
declare const index_d_ownershipManifestPath: typeof ownershipManifestPath;
|
|
3840
|
+
declare const index_d_parseAdoptArgs: typeof parseAdoptArgs;
|
|
3259
3841
|
declare const index_d_parseSettings: typeof parseSettings;
|
|
3842
|
+
declare const index_d_queryNpmLatest: typeof queryNpmLatest;
|
|
3843
|
+
declare const index_d_readGlobalInstancePointer: typeof readGlobalInstancePointer;
|
|
3844
|
+
declare const index_d_readInstalledBaseVersion: typeof readInstalledBaseVersion;
|
|
3260
3845
|
declare const index_d_recallCommand: typeof recallCommand;
|
|
3846
|
+
declare const index_d_recordGlobalSetupDecline: typeof recordGlobalSetupDecline;
|
|
3261
3847
|
declare const index_d_reindexCommand: typeof reindexCommand;
|
|
3262
3848
|
declare const index_d_renderAgenda: typeof renderAgenda;
|
|
3849
|
+
declare const index_d_renderGlobalBlock: typeof renderGlobalBlock;
|
|
3263
3850
|
declare const index_d_renderSessionStartReport: typeof renderSessionStartReport;
|
|
3851
|
+
declare const index_d_repairOwnershipManifest: typeof repairOwnershipManifest;
|
|
3264
3852
|
declare const index_d_resolveRepoRoot: typeof resolveRepoRoot;
|
|
3265
3853
|
declare const index_d_runCurateAccept: typeof runCurateAccept;
|
|
3266
3854
|
declare const index_d_runCurateCandidates: typeof runCurateCandidates;
|
|
3267
3855
|
declare const index_d_runCurateDecline: typeof runCurateDecline;
|
|
3268
3856
|
declare const index_d_runCuratePreview: typeof runCuratePreview;
|
|
3857
|
+
declare const index_d_runTemplatesUpdate: typeof runTemplatesUpdate;
|
|
3269
3858
|
declare const index_d_runVortexCli: typeof runVortexCli;
|
|
3270
3859
|
declare const index_d_serializeSettings: typeof serializeSettings;
|
|
3271
3860
|
declare const index_d_sessionStartCommand: typeof sessionStartCommand;
|
|
3861
|
+
declare const index_d_templateDestRelPath: typeof templateDestRelPath;
|
|
3862
|
+
declare const index_d_upsertGlobalBlock: typeof upsertGlobalBlock;
|
|
3272
3863
|
declare const index_d_validateCuratePayload: typeof validateCuratePayload;
|
|
3273
3864
|
declare const index_d_vortexCommand: typeof vortexCommand;
|
|
3865
|
+
declare const index_d_writeOwnershipManifest: typeof writeOwnershipManifest;
|
|
3274
3866
|
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 };
|
|
3867
|
+
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_applyGlobalSetup as applyGlobalSetup, index_d_argvToSlash as argvToSlash, 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_collectCarryover as collectCarryover, index_d_collectSessionStartReport as collectSessionStartReport, index_d_compareSemver as compareSemver, index_d_computeCurateFingerprint as computeCurateFingerprint, index_d_countUncommitted as countUncommitted, index_d_createAmbientRecaller as createAmbientRecaller, index_d_createRitualRegistry as createRitualRegistry, index_d_curateCommand as curateCommand, index_d_decisionCommand as decisionCommand, index_d_detectInterruptedGitOp as detectInterruptedGitOp, 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_globalMemoryPath as globalMemoryPath, index_d_globalSettingsHasHook as globalSettingsHasHook, index_d_globalSettingsPath as globalSettingsPath, index_d_globalStatePath as globalStatePath, index_d_inspectGlobalSetup as inspectGlobalSetup, index_d_inspectOwnership as inspectOwnership, index_d_isInstanceRoot as isInstanceRoot, index_d_isNewer as isNewer, index_d_isStableUpdate as isStableUpdate, index_d_logCommand as logCommand, index_d_ownershipManifestPath as ownershipManifestPath, index_d_parseAdoptArgs as parseAdoptArgs, index_d_parseSettings as parseSettings, index_d_queryNpmLatest as queryNpmLatest, index_d_readGlobalInstancePointer as readGlobalInstancePointer, index_d_readInstalledBaseVersion as readInstalledBaseVersion, index_d_recallCommand as recallCommand, index_d_recordGlobalSetupDecline as recordGlobalSetupDecline, index_d_reindexCommand as reindexCommand, index_d_renderAgenda as renderAgenda, index_d_renderGlobalBlock as renderGlobalBlock, 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_upsertGlobalBlock as upsertGlobalBlock, index_d_validateCuratePayload as validateCuratePayload, index_d_vortexCommand as vortexCommand, index_d_writeOwnershipManifest as writeOwnershipManifest };
|
|
3276
3868
|
}
|
|
3277
3869
|
|
|
3278
3870
|
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 };
|