ctxr-cli 0.7.0 → 0.9.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 +303 -22
- package/dist/adapters/types.d.ts +0 -5
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/commands/adapters-generate.d.ts.map +1 -1
- package/dist/commands/adapters-generate.js +2 -3
- package/dist/commands/adapters-generate.js.map +1 -1
- package/dist/commands/context-gather.d.ts +22 -0
- package/dist/commands/context-gather.d.ts.map +1 -0
- package/dist/commands/context-gather.js +36 -0
- package/dist/commands/context-gather.js.map +1 -0
- package/dist/commands/graph-query.d.ts.map +1 -1
- package/dist/commands/graph-query.js +6 -8
- package/dist/commands/graph-query.js.map +1 -1
- package/dist/commands/ingest.d.ts +22 -9
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +86 -24
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/source-check.d.ts.map +1 -1
- package/dist/commands/source-check.js +27 -9
- package/dist/commands/source-check.js.map +1 -1
- package/dist/commands/source-stamp.d.ts +6 -5
- package/dist/commands/source-stamp.d.ts.map +1 -1
- package/dist/commands/source-stamp.js +8 -7
- package/dist/commands/source-stamp.js.map +1 -1
- package/dist/config/defaults.d.ts +103 -4
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +76 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/render.d.ts +11 -0
- package/dist/config/render.d.ts.map +1 -1
- package/dist/config/render.js +85 -3
- package/dist/config/render.js.map +1 -1
- package/dist/config/schema.d.ts +50 -30
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +151 -62
- package/dist/config/schema.js.map +1 -1
- package/dist/core/agents-doc.d.ts.map +1 -1
- package/dist/core/agents-doc.js +4 -1
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/checks/harness-portability-checks.d.ts +1 -1
- package/dist/core/checks/harness-portability-checks.d.ts.map +1 -1
- package/dist/core/checks/harness-portability-checks.js +2 -3
- package/dist/core/checks/harness-portability-checks.js.map +1 -1
- package/dist/core/checks/manifest.d.ts.map +1 -1
- package/dist/core/checks/manifest.js +2 -0
- package/dist/core/checks/manifest.js.map +1 -1
- package/dist/core/checks/organize-checks.d.ts +11 -1
- package/dist/core/checks/organize-checks.d.ts.map +1 -1
- package/dist/core/checks/organize-checks.js +42 -12
- package/dist/core/checks/organize-checks.js.map +1 -1
- package/dist/core/checks/retrieval-checks.d.ts +9 -0
- package/dist/core/checks/retrieval-checks.d.ts.map +1 -0
- package/dist/core/checks/retrieval-checks.js +30 -0
- package/dist/core/checks/retrieval-checks.js.map +1 -0
- package/dist/core/content/canonicalize.d.ts +10 -0
- package/dist/core/content/canonicalize.d.ts.map +1 -1
- package/dist/core/content/canonicalize.js +12 -0
- package/dist/core/content/canonicalize.js.map +1 -1
- package/dist/core/errors.d.ts +19 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +53 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/fs/prefix.d.ts +13 -0
- package/dist/core/fs/prefix.d.ts.map +1 -0
- package/dist/core/fs/prefix.js +22 -0
- package/dist/core/fs/prefix.js.map +1 -0
- package/dist/core/graph/persist.d.ts +13 -0
- package/dist/core/graph/persist.d.ts.map +1 -1
- package/dist/core/graph/persist.js +24 -0
- package/dist/core/graph/persist.js.map +1 -1
- package/dist/core/hooks.d.ts +3 -12
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +24 -20
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/ingest/capture-hash.d.ts +16 -0
- package/dist/core/ingest/capture-hash.d.ts.map +1 -0
- package/dist/core/ingest/capture-hash.js +34 -0
- package/dist/core/ingest/capture-hash.js.map +1 -0
- package/dist/core/ingest/identity.d.ts +7 -1
- package/dist/core/ingest/identity.d.ts.map +1 -1
- package/dist/core/ingest/identity.js +16 -1
- package/dist/core/ingest/identity.js.map +1 -1
- package/dist/core/ingest/model.d.ts +17 -2
- package/dist/core/ingest/model.d.ts.map +1 -1
- package/dist/core/ingest/model.js +5 -0
- package/dist/core/ingest/model.js.map +1 -1
- package/dist/core/migrations/config-defaults-as-the-convention.d.ts +21 -0
- package/dist/core/migrations/config-defaults-as-the-convention.d.ts.map +1 -0
- package/dist/core/migrations/config-defaults-as-the-convention.js +54 -0
- package/dist/core/migrations/config-defaults-as-the-convention.js.map +1 -0
- package/dist/core/migrations/registry.d.ts.map +1 -1
- package/dist/core/migrations/registry.js +4 -0
- package/dist/core/migrations/registry.js.map +1 -1
- package/dist/core/migrations/retain-captures-as-provenance.d.ts +22 -0
- package/dist/core/migrations/retain-captures-as-provenance.d.ts.map +1 -0
- package/dist/core/migrations/retain-captures-as-provenance.js +133 -0
- package/dist/core/migrations/retain-captures-as-provenance.js.map +1 -0
- package/dist/core/notes/list.d.ts +20 -0
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js +27 -6
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/records.d.ts +7 -0
- package/dist/core/records.d.ts.map +1 -1
- package/dist/core/records.js +12 -2
- package/dist/core/records.js.map +1 -1
- package/dist/core/retrieval/pass.d.ts +66 -0
- package/dist/core/retrieval/pass.d.ts.map +1 -0
- package/dist/core/retrieval/pass.js +171 -0
- package/dist/core/retrieval/pass.js.map +1 -0
- package/dist/core/write-lifecycle/path-gate.d.ts +2 -2
- package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -1
- package/dist/core/write-lifecycle/path-gate.js +9 -10
- package/dist/core/write-lifecycle/path-gate.js.map +1 -1
- package/dist/run.d.ts +0 -5
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +38 -3
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +13 -5
- package/templates/agents/capture-and-ingest.md +27 -8
- package/templates/agents/retrieval-leg-routing.md +34 -8
- package/templates/hooks/_resolve-ctxr.sh +37 -0
- package/templates/hooks/claude-code-write-gate.sh +34 -6
- package/templates/hooks/pre-commit.sh +15 -8
- package/templates/skills/ctxr-connection-finding.md +7 -5
- package/templates/skills/ctxr-ingest-orchestration.md +15 -9
- package/templates/skills/ctxr-publish.md +7 -8
package/dist/config/defaults.js
CHANGED
|
@@ -55,8 +55,24 @@ export const DEFAULT_MISSION_FILE_NAME = 'mission.md';
|
|
|
55
55
|
export const DEFAULT_MISSION_PATH = `${DEFAULT_GUIDANCE_PATH}${DEFAULT_MISSION_FILE_NAME}`;
|
|
56
56
|
/** store-integrity spec: AGENTS.md's inlined "Store conventions" section's size ceiling when `harness.convention_max_bytes` is unset. */
|
|
57
57
|
export const DEFAULT_CONVENTION_MAX_BYTES = 32 * 1024;
|
|
58
|
-
/**
|
|
59
|
-
|
|
58
|
+
/**
|
|
59
|
+
* context-ingest spec: the capture tier's root. Everything beneath it is
|
|
60
|
+
* material that arrived rather than knowledge someone wrote, so it is
|
|
61
|
+
* excluded from retrieval and never becomes a note — but it IS tracked in
|
|
62
|
+
* git, because a retained capture is provenance, not regenerable output.
|
|
63
|
+
*/
|
|
64
|
+
export const DEFAULT_CAPTURE_ROOT = 'raw/';
|
|
65
|
+
/** Paths excluded from every retrieval leg by default — contexture's own directory, and the capture tier. */
|
|
66
|
+
export const DEFAULT_EXCLUDE_PATHS = ['.contexture/', DEFAULT_CAPTURE_ROOT];
|
|
67
|
+
/**
|
|
68
|
+
* compose-the-retrieval-pass spec (D10/D11): path prefixes that stay fully
|
|
69
|
+
* retrievable but sort after everything else. Empty here because the shipped
|
|
70
|
+
* value is not a literal — `init` seeds it from the taxonomy's own resolved
|
|
71
|
+
* archive destination, so a custom taxonomy demotes its archive, not PARA's.
|
|
72
|
+
*/
|
|
73
|
+
export const DEFAULT_DEMOTE_PATHS = [];
|
|
74
|
+
/** compose-the-retrieval-pass spec: how many notes `ctxr context gather` returns before it reports truncation. */
|
|
75
|
+
export const DEFAULT_GATHER_MAX_NOTES = 50;
|
|
60
76
|
/** graph-context-document spec: no relation vocabulary by default — no typed edges until a store declares names. */
|
|
61
77
|
export const DEFAULT_RELATIONS = [];
|
|
62
78
|
/** graph-context-document spec: positional clusters two directory segments deep; document sections capped for readability. */
|
|
@@ -78,8 +94,13 @@ export const DEFAULT_CATALOG_PATH = '.contexture/catalog/';
|
|
|
78
94
|
export const DEFAULT_CATALOG_SECTION_MAX_BYTES = 32 * 1024;
|
|
79
95
|
/** publish spec: where published pages live — tracked, authored-but-tool-owned, excluded from retrieval like the catalog and skill pack. */
|
|
80
96
|
export const DEFAULT_PUBLISH_PATH = '.contexture/publish/';
|
|
81
|
-
/**
|
|
82
|
-
|
|
97
|
+
/**
|
|
98
|
+
* context-ingest spec: capture's landing zone — the not-yet-ingested state
|
|
99
|
+
* inside the capture tier. Nesting it under the capture root is what lets a
|
|
100
|
+
* single prefix serve both the retrieval exclusion and the write-path gate;
|
|
101
|
+
* the schema enforces the nesting.
|
|
102
|
+
*/
|
|
103
|
+
export const DEFAULT_INBOX_PATH = 'raw/inbox/';
|
|
83
104
|
/** store-primitives-from-migration-audit spec (D2): the shipped tracking-parameter list source check strips before comparing URL identities. */
|
|
84
105
|
export const DEFAULT_TRACKING_PARAMS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid'];
|
|
85
106
|
/**
|
|
@@ -99,4 +120,55 @@ export const DEFAULT_ROLLUP_STALE_DAYS = 7;
|
|
|
99
120
|
* it was addable.
|
|
100
121
|
*/
|
|
101
122
|
export const DEFAULT_ADAPTERS = [{ id: 'claude-code', kind: 'harness-generation' }];
|
|
123
|
+
/**
|
|
124
|
+
* Every configuration value contexture ships an opinion about, in one place,
|
|
125
|
+
* shaped like the config itself. `StoreConfigSchema` takes its `.default(...)`
|
|
126
|
+
* values from here and `renderStoreConfig` reads it to decide what a written
|
|
127
|
+
* config may omit — the two have to agree, and the only way to guarantee that
|
|
128
|
+
* is for them to read the same object.
|
|
129
|
+
*
|
|
130
|
+
* What is deliberately ABSENT from this object is as load-bearing as what is
|
|
131
|
+
* in it. A key appears here only when its correct value depends on nothing:
|
|
132
|
+
*
|
|
133
|
+
* - `schema_version`, `taxonomy` and `git.default_branch` are facts about the
|
|
134
|
+
* individual store. `git.default_branch` records whatever branch `git init`
|
|
135
|
+
* actually created and is never hardcoded (see `GitSchema`).
|
|
136
|
+
* - `organize.archive_destination` is derived: a shipped profile supplies it
|
|
137
|
+
* from the taxonomy at init, so a constant here would give every PARA store
|
|
138
|
+
* `archive/` while its own taxonomy declares `archives/` — the defect
|
|
139
|
+
* `archive-destination-from-taxonomy` was written to fix.
|
|
140
|
+
* - `organize.mission_path` is an opt-in whose absence is meaningful: call
|
|
141
|
+
* sites branch on the key's presence to decide whether the store has a
|
|
142
|
+
* mission mechanism at all. `DEFAULT_MISSION_PATH` is what `init` seeds,
|
|
143
|
+
* not what an omission resolves to.
|
|
144
|
+
* - `harness.procedures_path` and `harness.conventions_path` are pre-rename
|
|
145
|
+
* spellings, read only as fallbacks by `HarnessSchema`'s transform.
|
|
146
|
+
*/
|
|
147
|
+
export const SHIPPED_DEFAULTS = {
|
|
148
|
+
derived: { paths: DEFAULT_DERIVED_PATHS },
|
|
149
|
+
retrieval: {
|
|
150
|
+
exclude_paths: DEFAULT_EXCLUDE_PATHS,
|
|
151
|
+
demote_paths: DEFAULT_DEMOTE_PATHS,
|
|
152
|
+
gather_max_notes: DEFAULT_GATHER_MAX_NOTES,
|
|
153
|
+
relations: DEFAULT_RELATIONS,
|
|
154
|
+
graph: DEFAULT_GRAPH_SETTINGS,
|
|
155
|
+
},
|
|
156
|
+
session: { branch_prefix: DEFAULT_SESSION_BRANCH_PREFIX, worktrees_path: DEFAULT_WORKTREES_PATH },
|
|
157
|
+
write_lifecycle: { diff_size_ceiling_lines: DEFAULT_DIFF_SIZE_CEILING_LINES, writable_paths: [] },
|
|
158
|
+
catalog: { path: DEFAULT_CATALOG_PATH, section_max_bytes: DEFAULT_CATALOG_SECTION_MAX_BYTES },
|
|
159
|
+
publish: { path: DEFAULT_PUBLISH_PATH },
|
|
160
|
+
skills: { vendored: DEFAULT_VENDORED_SKILLS },
|
|
161
|
+
ingest: {
|
|
162
|
+
inbox_path: DEFAULT_INBOX_PATH,
|
|
163
|
+
capture_root: DEFAULT_CAPTURE_ROOT,
|
|
164
|
+
tracking_params: DEFAULT_TRACKING_PARAMS,
|
|
165
|
+
},
|
|
166
|
+
organize: { rollup_stale_days: DEFAULT_ROLLUP_STALE_DAYS },
|
|
167
|
+
harness: {
|
|
168
|
+
skills_path: DEFAULT_SKILLS_PATH,
|
|
169
|
+
guidance_path: DEFAULT_GUIDANCE_PATH,
|
|
170
|
+
convention_max_bytes: DEFAULT_CONVENTION_MAX_BYTES,
|
|
171
|
+
},
|
|
172
|
+
adapters: DEFAULT_ADAPTERS,
|
|
173
|
+
};
|
|
102
174
|
//# sourceMappingURL=defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,oBAAoB,CAAU,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAU,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE7D,4HAA4H;AAC5H,MAAM,CAAC,MAAM,sCAAsC,GAAG,yBAAyB,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,wBAAwB,CAAC;AAE7E;;;;GAIG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,sBAAsB,CAAC;AAE1E,mHAAmH;AACnH,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAEtD,+IAA+I;AAC/I,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,qBAAqB,GAAG,yBAAyB,EAAE,CAAC;AAE3F,yIAAyI;AACzI,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtD,
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
|
package/dist/config/render.d.ts
CHANGED
|
@@ -4,6 +4,17 @@ import { type StoreConfig } from './schema.js';
|
|
|
4
4
|
* schema before returning — a render that doesn't round-trip is a bug caught
|
|
5
5
|
* here, before any byte reaches disk, rather than discovered later as a
|
|
6
6
|
* corrupted store.
|
|
7
|
+
*
|
|
8
|
+
* The round-trip also proves the omission was lossless: what the pruned text
|
|
9
|
+
* parses back to must equal what was passed in, so a default that drifted out
|
|
10
|
+
* of step with the schema fails here rather than silently changing a store's
|
|
11
|
+
* behavior.
|
|
7
12
|
*/
|
|
8
13
|
export declare function renderStoreConfig(config: StoreConfig): string;
|
|
14
|
+
/**
|
|
15
|
+
* The dotted paths `renderStoreConfig` would drop from this config — what a
|
|
16
|
+
* migration reports it is about to remove, derived from the same walk that
|
|
17
|
+
* does the removing so the report and the write cannot disagree.
|
|
18
|
+
*/
|
|
19
|
+
export declare function redundantKeyPaths(config: StoreConfig): string[];
|
|
9
20
|
//# sourceMappingURL=render.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/config/render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/config/render.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAkDlE;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAW7D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAgB/D"}
|
package/dist/config/render.js
CHANGED
|
@@ -1,15 +1,97 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
1
2
|
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
3
|
+
import { SHIPPED_DEFAULTS } from './defaults.js';
|
|
2
4
|
import { StoreConfigSchema } from './schema.js';
|
|
3
|
-
const HEADER =
|
|
5
|
+
const HEADER = [
|
|
6
|
+
'# contexture store configuration',
|
|
7
|
+
'#',
|
|
8
|
+
'# Only what this store chose. Any key not here takes contexture\'s shipped',
|
|
9
|
+
'# default, and follows it when a later release improves it.',
|
|
10
|
+
'',
|
|
11
|
+
'',
|
|
12
|
+
].join('\n');
|
|
13
|
+
function isPlainObject(value) {
|
|
14
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* config-defaults-as-the-convention (D3, D4): drops every value equal to its
|
|
18
|
+
* shipped default, so what reaches disk is the set of decisions the store has
|
|
19
|
+
* made. Applied here rather than at `init` because this is the single writer —
|
|
20
|
+
* every migration's write-back passes through it too, and one that did not
|
|
21
|
+
* would re-materialize the full resolved shape and undo the omission.
|
|
22
|
+
*
|
|
23
|
+
* Equality is deep and order-sensitive: a list holding the same entries in a
|
|
24
|
+
* different order is written as the store wrote it. Treating that as equal
|
|
25
|
+
* would silently reorder an operator's file to save one line.
|
|
26
|
+
*
|
|
27
|
+
* A key absent from `SHIPPED_DEFAULTS` is always kept — contexture has no
|
|
28
|
+
* opinion about it, or (as with `organize.mission_path`) its absence is
|
|
29
|
+
* itself the meaningful state.
|
|
30
|
+
*/
|
|
31
|
+
function withoutShippedDefaults(value, defaults) {
|
|
32
|
+
const kept = {};
|
|
33
|
+
for (const [key, declared] of Object.entries(value)) {
|
|
34
|
+
const shipped = defaults[key];
|
|
35
|
+
if (shipped === undefined) {
|
|
36
|
+
kept[key] = declared;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (isPlainObject(declared) && isPlainObject(shipped)) {
|
|
40
|
+
const nested = withoutShippedDefaults(declared, shipped);
|
|
41
|
+
// A block whose every key matched is dropped whole, not left as `{}`.
|
|
42
|
+
if (Object.keys(nested).length > 0)
|
|
43
|
+
kept[key] = nested;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (isDeepStrictEqual(declared, shipped))
|
|
47
|
+
continue;
|
|
48
|
+
kept[key] = declared;
|
|
49
|
+
}
|
|
50
|
+
return kept;
|
|
51
|
+
}
|
|
4
52
|
/**
|
|
5
53
|
* Renders a StoreConfig to YAML text and round-trips it back through the
|
|
6
54
|
* schema before returning — a render that doesn't round-trip is a bug caught
|
|
7
55
|
* here, before any byte reaches disk, rather than discovered later as a
|
|
8
56
|
* corrupted store.
|
|
57
|
+
*
|
|
58
|
+
* The round-trip also proves the omission was lossless: what the pruned text
|
|
59
|
+
* parses back to must equal what was passed in, so a default that drifted out
|
|
60
|
+
* of step with the schema fails here rather than silently changing a store's
|
|
61
|
+
* behavior.
|
|
9
62
|
*/
|
|
10
63
|
export function renderStoreConfig(config) {
|
|
11
|
-
const
|
|
12
|
-
|
|
64
|
+
const declared = withoutShippedDefaults(config, SHIPPED_DEFAULTS);
|
|
65
|
+
const text = HEADER + stringifyYaml(declared, { indent: 2 });
|
|
66
|
+
const reparsed = StoreConfigSchema.parse(parseYaml(text)); // throws on mismatch; that IS the check
|
|
67
|
+
if (!isDeepStrictEqual(reparsed, config)) {
|
|
68
|
+
throw new Error('contexture.yaml render dropped a key whose shipped default does not match what the schema resolves. ' +
|
|
69
|
+
'SHIPPED_DEFAULTS and StoreConfigSchema disagree.');
|
|
70
|
+
}
|
|
13
71
|
return text;
|
|
14
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* The dotted paths `renderStoreConfig` would drop from this config — what a
|
|
75
|
+
* migration reports it is about to remove, derived from the same walk that
|
|
76
|
+
* does the removing so the report and the write cannot disagree.
|
|
77
|
+
*/
|
|
78
|
+
export function redundantKeyPaths(config) {
|
|
79
|
+
const found = [];
|
|
80
|
+
const walk = (value, defaults, prefix) => {
|
|
81
|
+
for (const [key, declared] of Object.entries(value)) {
|
|
82
|
+
const shipped = defaults[key];
|
|
83
|
+
if (shipped === undefined)
|
|
84
|
+
continue;
|
|
85
|
+
const dotted = prefix === '' ? key : `${prefix}.${key}`;
|
|
86
|
+
if (isPlainObject(declared) && isPlainObject(shipped)) {
|
|
87
|
+
walk(declared, shipped, dotted);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (isDeepStrictEqual(declared, shipped))
|
|
91
|
+
found.push(dotted);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
walk(config, SHIPPED_DEFAULTS, '');
|
|
95
|
+
return found;
|
|
96
|
+
}
|
|
15
97
|
//# sourceMappingURL=render.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/config/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAoB,MAAM,aAAa,CAAC;AAElE,MAAM,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/config/render.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -35,7 +35,24 @@ import { z } from 'zod';
|
|
|
35
35
|
* keys until `ctxr migrate` drops them, exactly as `identity` did when
|
|
36
36
|
* remove-agent-identity retired it.
|
|
37
37
|
*/
|
|
38
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Bumped to 9 by the capture-tier change (retain-captures-as-provenance,
|
|
40
|
+
* retain-captures-as-provenance): `ingest.capture_root` is added and
|
|
41
|
+
* `ingest.inbox_path`'s shipped default moves inside it. IngestSchema accepts
|
|
42
|
+
* a config with no `capture_root` so an unmigrated store still loads —
|
|
43
|
+
* `ctxr migrate` has to be able to read the file it is about to rewrite —
|
|
44
|
+
* and skips the nesting rule for exactly that case.
|
|
45
|
+
*/
|
|
46
|
+
export declare const SUPPORTED_SCHEMA_VERSION = 10;
|
|
47
|
+
/** The version at which the capture tier became part of the store's shape, and its nesting rule enforceable. */
|
|
48
|
+
export declare const CAPTURE_TIER_SCHEMA_VERSION = 9;
|
|
49
|
+
/**
|
|
50
|
+
* Bumped to 10 by config-defaults-as-the-convention: every convention key now
|
|
51
|
+
* carries its shipped default here, and a written config omits what it agrees
|
|
52
|
+
* with. Nothing about the shape got stricter — the bump exists so the pruning
|
|
53
|
+
* migration has a `schema_version <` predicate to decide it still has work,
|
|
54
|
+
* the same way every migration in this repo does.
|
|
55
|
+
*/
|
|
39
56
|
export declare const TaxonomyLayerSchema: z.ZodObject<{
|
|
40
57
|
name: z.ZodString;
|
|
41
58
|
path: z.ZodString;
|
|
@@ -72,11 +89,13 @@ export declare const StoreConfigSchema: z.ZodObject<{
|
|
|
72
89
|
description: z.ZodString;
|
|
73
90
|
}, z.core.$strip>>;
|
|
74
91
|
}, z.core.$strip>;
|
|
75
|
-
derived: z.ZodObject<{
|
|
76
|
-
paths: z.ZodArray<z.ZodString
|
|
77
|
-
}, z.core.$strip
|
|
78
|
-
retrieval: z.ZodObject<{
|
|
79
|
-
exclude_paths: z.ZodArray<z.ZodString
|
|
92
|
+
derived: z.ZodPrefault<z.ZodObject<{
|
|
93
|
+
paths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
94
|
+
}, z.core.$strip>>;
|
|
95
|
+
retrieval: z.ZodPrefault<z.ZodObject<{
|
|
96
|
+
exclude_paths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
97
|
+
demote_paths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
98
|
+
gather_max_notes: z.ZodDefault<z.ZodNumber>;
|
|
80
99
|
relations: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
81
100
|
graph: z.ZodDefault<z.ZodObject<{
|
|
82
101
|
cluster_depth: z.ZodDefault<z.ZodNumber>;
|
|
@@ -84,32 +103,33 @@ export declare const StoreConfigSchema: z.ZodObject<{
|
|
|
84
103
|
bridge_top: z.ZodDefault<z.ZodNumber>;
|
|
85
104
|
orphan_exempt_clusters: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
86
105
|
}, z.core.$strip>>;
|
|
87
|
-
}, z.core.$strip
|
|
106
|
+
}, z.core.$strip>>;
|
|
88
107
|
git: z.ZodObject<{
|
|
89
108
|
default_branch: z.ZodString;
|
|
90
109
|
}, z.core.$strip>;
|
|
91
|
-
session: z.ZodObject<{
|
|
92
|
-
branch_prefix: z.ZodString
|
|
93
|
-
worktrees_path: z.ZodString
|
|
94
|
-
}, z.core.$strip
|
|
95
|
-
write_lifecycle: z.ZodObject<{
|
|
96
|
-
diff_size_ceiling_lines: z.ZodNumber
|
|
110
|
+
session: z.ZodPrefault<z.ZodObject<{
|
|
111
|
+
branch_prefix: z.ZodDefault<z.ZodString>;
|
|
112
|
+
worktrees_path: z.ZodDefault<z.ZodString>;
|
|
113
|
+
}, z.core.$strip>>;
|
|
114
|
+
write_lifecycle: z.ZodPrefault<z.ZodObject<{
|
|
115
|
+
diff_size_ceiling_lines: z.ZodDefault<z.ZodNumber>;
|
|
97
116
|
writable_paths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
98
|
-
}, z.core.$strip
|
|
99
|
-
catalog: z.ZodObject<{
|
|
100
|
-
path: z.ZodString;
|
|
101
|
-
section_max_bytes: z.ZodNumber;
|
|
102
|
-
}, z.core.$strip>;
|
|
103
|
-
publish: z.ZodDefault<z.ZodObject<{
|
|
117
|
+
}, z.core.$strip>>;
|
|
118
|
+
catalog: z.ZodPrefault<z.ZodObject<{
|
|
104
119
|
path: z.ZodDefault<z.ZodString>;
|
|
120
|
+
section_max_bytes: z.ZodDefault<z.ZodNumber>;
|
|
105
121
|
}, z.core.$strip>>;
|
|
106
|
-
|
|
122
|
+
publish: z.ZodPrefault<z.ZodObject<{
|
|
123
|
+
path: z.ZodDefault<z.ZodString>;
|
|
124
|
+
}, z.core.$strip>>;
|
|
125
|
+
skills: z.ZodPrefault<z.ZodObject<{
|
|
107
126
|
vendored: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
108
127
|
}, z.core.$strip>>;
|
|
109
|
-
ingest: z.ZodObject<{
|
|
110
|
-
inbox_path: z.ZodString
|
|
128
|
+
ingest: z.ZodPrefault<z.ZodObject<{
|
|
129
|
+
inbox_path: z.ZodDefault<z.ZodString>;
|
|
130
|
+
capture_root: z.ZodDefault<z.ZodString>;
|
|
111
131
|
tracking_params: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
112
|
-
}, z.core.$strip
|
|
132
|
+
}, z.core.$strip>>;
|
|
113
133
|
organize: z.ZodPipe<z.ZodObject<{
|
|
114
134
|
archive_destination: z.ZodOptional<z.ZodString>;
|
|
115
135
|
archive_path: z.ZodOptional<z.ZodString>;
|
|
@@ -125,24 +145,24 @@ export declare const StoreConfigSchema: z.ZodObject<{
|
|
|
125
145
|
rollup_stale_days: number;
|
|
126
146
|
mission_path?: string | undefined;
|
|
127
147
|
}>>;
|
|
128
|
-
harness: z.ZodPipe<z.ZodObject<{
|
|
148
|
+
harness: z.ZodPrefault<z.ZodPipe<z.ZodObject<{
|
|
129
149
|
skills_path: z.ZodOptional<z.ZodString>;
|
|
130
150
|
procedures_path: z.ZodOptional<z.ZodString>;
|
|
131
151
|
guidance_path: z.ZodOptional<z.ZodString>;
|
|
132
152
|
conventions_path: z.ZodOptional<z.ZodString>;
|
|
133
|
-
convention_max_bytes: z.
|
|
153
|
+
convention_max_bytes: z.ZodDefault<z.ZodNumber>;
|
|
134
154
|
}, z.core.$strip>, z.ZodTransform<{
|
|
135
155
|
skills_path: string;
|
|
136
156
|
guidance_path: string;
|
|
137
|
-
convention_max_bytes
|
|
157
|
+
convention_max_bytes: number;
|
|
138
158
|
}, {
|
|
139
159
|
skills_path?: string | undefined;
|
|
140
160
|
procedures_path?: string | undefined;
|
|
141
161
|
guidance_path?: string | undefined;
|
|
142
162
|
conventions_path?: string | undefined;
|
|
143
|
-
convention_max_bytes
|
|
144
|
-
}
|
|
145
|
-
adapters: z.ZodPipe<z.ZodPipe<z.ZodArray<z.ZodObject<{
|
|
163
|
+
convention_max_bytes: number;
|
|
164
|
+
}>>>;
|
|
165
|
+
adapters: z.ZodDefault<z.ZodPipe<z.ZodPipe<z.ZodArray<z.ZodObject<{
|
|
146
166
|
id: z.ZodString;
|
|
147
167
|
kind: z.ZodString;
|
|
148
168
|
module: z.ZodOptional<z.ZodString>;
|
|
@@ -161,7 +181,7 @@ export declare const StoreConfigSchema: z.ZodObject<{
|
|
|
161
181
|
}>;
|
|
162
182
|
module: z.ZodOptional<z.ZodString>;
|
|
163
183
|
skills_dir: z.ZodOptional<z.ZodString>;
|
|
164
|
-
}, z.core.$strip
|
|
184
|
+
}, z.core.$strip>>>>;
|
|
165
185
|
}, z.core.$loose>;
|
|
166
186
|
export type StoreConfig = z.infer<typeof StoreConfigSchema>;
|
|
167
187
|
export type TaxonomyLayerConfig = z.infer<typeof TaxonomyLayerSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;;;GAaG;AACH;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,gHAAgH;AAChH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C;;;;;;GAMG;AAEH,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAYH;;;;;;GAMG;AACH,QAAA,MAAM,mBAAmB;;;;;iBAKvB,CAAC;AAmOH,QAAA,MAAM,wBAAwB;;;;;;;iBAM5B,CAAC;AAiBH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC1B,CAAC;AAEL,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|