@nanonets/graft 0.13.0 → 0.16.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 -10
- package/dist/ai/crux.d.ts +14 -1
- package/dist/ai/crux.d.ts.map +1 -1
- package/dist/ai/crux.js +39 -51
- package/dist/ai/crux.js.map +1 -1
- package/dist/ai/failure.d.ts +13 -2
- package/dist/ai/failure.d.ts.map +1 -1
- package/dist/ai/failure.js +16 -4
- package/dist/ai/failure.js.map +1 -1
- package/dist/ai/llm/factory.d.ts +10 -1
- package/dist/ai/llm/factory.d.ts.map +1 -1
- package/dist/ai/llm/factory.js +16 -0
- package/dist/ai/llm/factory.js.map +1 -1
- package/dist/ai/llm/litellm.d.ts +34 -0
- package/dist/ai/llm/litellm.d.ts.map +1 -0
- package/dist/ai/llm/litellm.js +45 -0
- package/dist/ai/llm/litellm.js.map +1 -0
- package/dist/ai/llm/openai.d.ts.map +1 -1
- package/dist/ai/llm/openai.js +66 -7
- package/dist/ai/llm/openai.js.map +1 -1
- package/dist/ai/llm/orcarouter.d.ts +34 -0
- package/dist/ai/llm/orcarouter.d.ts.map +1 -0
- package/dist/ai/llm/orcarouter.js +45 -0
- package/dist/ai/llm/orcarouter.js.map +1 -0
- package/dist/ai/llm/recover-tool.d.ts +19 -0
- package/dist/ai/llm/recover-tool.d.ts.map +1 -0
- package/dist/ai/llm/recover-tool.js +109 -0
- package/dist/ai/llm/recover-tool.js.map +1 -0
- package/dist/ai/providers.d.ts.map +1 -1
- package/dist/ai/providers.js +15 -3
- package/dist/ai/providers.js.map +1 -1
- package/dist/ai/synthesize.d.ts.map +1 -1
- package/dist/ai/synthesize.js +19 -5
- package/dist/ai/synthesize.js.map +1 -1
- package/dist/app/checkout.d.ts +28 -0
- package/dist/app/checkout.d.ts.map +1 -0
- package/dist/app/checkout.js +100 -0
- package/dist/app/checkout.js.map +1 -0
- package/dist/app/events.d.ts +37 -0
- package/dist/app/events.d.ts.map +1 -0
- package/dist/app/events.js +59 -0
- package/dist/app/events.js.map +1 -0
- package/dist/app/identity.d.ts +54 -0
- package/dist/app/identity.d.ts.map +1 -0
- package/dist/app/identity.js +96 -0
- package/dist/app/identity.js.map +1 -0
- package/dist/app/main.d.ts +2 -0
- package/dist/app/main.d.ts.map +1 -0
- package/dist/app/main.js +56 -0
- package/dist/app/main.js.map +1 -0
- package/dist/app/pages.d.ts +39 -0
- package/dist/app/pages.d.ts.map +1 -0
- package/dist/app/pages.js +86 -0
- package/dist/app/pages.js.map +1 -0
- package/dist/app/queue.d.ts +40 -0
- package/dist/app/queue.d.ts.map +1 -0
- package/dist/app/queue.js +68 -0
- package/dist/app/queue.js.map +1 -0
- package/dist/app/review.d.ts +23 -0
- package/dist/app/review.d.ts.map +1 -0
- package/dist/app/review.js +139 -0
- package/dist/app/review.js.map +1 -0
- package/dist/app/server.d.ts +40 -0
- package/dist/app/server.d.ts.map +1 -0
- package/dist/app/server.js +117 -0
- package/dist/app/server.js.map +1 -0
- package/dist/ask/ask.d.ts +35 -0
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +427 -63
- package/dist/ask/ask.js.map +1 -1
- package/dist/ask/file-rank.d.ts +72 -0
- package/dist/ask/file-rank.d.ts.map +1 -0
- package/dist/ask/file-rank.js +160 -0
- package/dist/ask/file-rank.js.map +1 -0
- package/dist/ask/file-selection.d.ts +4 -0
- package/dist/ask/file-selection.d.ts.map +1 -1
- package/dist/ask/file-selection.js +25 -0
- package/dist/ask/file-selection.js.map +1 -1
- package/dist/ask/fuse.d.ts +16 -0
- package/dist/ask/fuse.d.ts.map +1 -1
- package/dist/ask/fuse.js +21 -4
- package/dist/ask/fuse.js.map +1 -1
- package/dist/ask/graphrank.d.ts +18 -0
- package/dist/ask/graphrank.d.ts.map +1 -1
- package/dist/ask/graphrank.js +65 -19
- package/dist/ask/graphrank.js.map +1 -1
- package/dist/blast/blast-cli.d.ts +5 -0
- package/dist/blast/blast-cli.d.ts.map +1 -1
- package/dist/blast/blast-cli.js +21 -30
- package/dist/blast/blast-cli.js.map +1 -1
- package/dist/blast/blast.d.ts +9 -0
- package/dist/blast/blast.d.ts.map +1 -1
- package/dist/blast/blast.js.map +1 -1
- package/dist/blast/name.d.ts +13 -0
- package/dist/blast/name.d.ts.map +1 -1
- package/dist/blast/name.js +36 -0
- package/dist/blast/name.js.map +1 -1
- package/dist/blast/owners.d.ts +85 -0
- package/dist/blast/owners.d.ts.map +1 -0
- package/dist/blast/owners.js +272 -0
- package/dist/blast/owners.js.map +1 -0
- package/dist/blast/render.d.ts.map +1 -1
- package/dist/blast/render.js +105 -0
- package/dist/blast/render.js.map +1 -1
- package/dist/blast/viz.d.ts.map +1 -1
- package/dist/blast/viz.js +10 -0
- package/dist/blast/viz.js.map +1 -1
- package/dist/claude/format.js +1 -1
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +132 -22
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.d.ts +1 -0
- package/dist/claude/init.d.ts.map +1 -1
- package/dist/claude/init.js +1 -1
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/session-metrics.d.ts +63 -0
- package/dist/claude/session-metrics.d.ts.map +1 -0
- package/dist/claude/session-metrics.js +181 -0
- package/dist/claude/session-metrics.js.map +1 -0
- package/dist/claude/settings-merge.d.ts +18 -1
- package/dist/claude/settings-merge.d.ts.map +1 -1
- package/dist/claude/settings-merge.js +70 -27
- package/dist/claude/settings-merge.js.map +1 -1
- package/dist/claude/state.d.ts +25 -0
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js +14 -1
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/statusline.d.ts +5 -3
- package/dist/claude/statusline.d.ts.map +1 -1
- package/dist/claude/statusline.js +6 -4
- package/dist/claude/statusline.js.map +1 -1
- package/dist/claude/tally.d.ts +23 -0
- package/dist/claude/tally.d.ts.map +1 -0
- package/dist/claude/tally.js +138 -0
- package/dist/claude/tally.js.map +1 -0
- package/dist/cli.js +145 -4
- package/dist/cli.js.map +1 -1
- package/dist/context/build.d.ts +11 -0
- package/dist/context/build.d.ts.map +1 -1
- package/dist/context/build.js +49 -9
- package/dist/context/build.js.map +1 -1
- package/dist/context/check.d.ts.map +1 -1
- package/dist/context/check.js +5 -12
- package/dist/context/check.js.map +1 -1
- package/dist/context/node-file.d.ts +2 -1
- package/dist/context/node-file.d.ts.map +1 -1
- package/dist/context/node-file.js +70 -3
- package/dist/context/node-file.js.map +1 -1
- package/dist/context/savings.d.ts +8 -0
- package/dist/context/savings.d.ts.map +1 -1
- package/dist/context/savings.js +14 -0
- package/dist/context/savings.js.map +1 -1
- package/dist/engine.d.ts +4 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +2 -0
- package/dist/engine.js.map +1 -1
- package/dist/graph/bindings.d.ts +6 -5
- package/dist/graph/bindings.d.ts.map +1 -1
- package/dist/graph/bindings.js +117 -5
- package/dist/graph/bindings.js.map +1 -1
- package/dist/graph/build.d.ts +4 -0
- package/dist/graph/build.d.ts.map +1 -1
- package/dist/graph/build.js +7 -4
- package/dist/graph/build.js.map +1 -1
- package/dist/graph/cards.d.ts +4 -3
- package/dist/graph/cards.d.ts.map +1 -1
- package/dist/graph/cards.js +34 -6
- package/dist/graph/cards.js.map +1 -1
- package/dist/graph/check.d.ts.map +1 -1
- package/dist/graph/check.js +36 -6
- package/dist/graph/check.js.map +1 -1
- package/dist/graph/enrich.d.ts +4 -4
- package/dist/graph/enrich.d.ts.map +1 -1
- package/dist/graph/enrich.js +32 -6
- package/dist/graph/enrich.js.map +1 -1
- package/dist/graph/extract.d.ts +9 -2
- package/dist/graph/extract.d.ts.map +1 -1
- package/dist/graph/extract.js +356 -12
- package/dist/graph/extract.js.map +1 -1
- package/dist/graph/fingerprint.d.ts +6 -1
- package/dist/graph/fingerprint.d.ts.map +1 -1
- package/dist/graph/fingerprint.js +7 -3
- package/dist/graph/fingerprint.js.map +1 -1
- package/dist/graph/generic.d.ts +10 -0
- package/dist/graph/generic.d.ts.map +1 -1
- package/dist/graph/generic.js +20 -3
- package/dist/graph/generic.js.map +1 -1
- package/dist/graph/invariants.d.ts +3 -2
- package/dist/graph/invariants.d.ts.map +1 -1
- package/dist/graph/invariants.js +6 -3
- package/dist/graph/invariants.js.map +1 -1
- package/dist/graph/refresh.d.ts.map +1 -1
- package/dist/graph/refresh.js +6 -2
- package/dist/graph/refresh.js.map +1 -1
- package/dist/graph/resolve.d.ts +1 -1
- package/dist/graph/resolve.d.ts.map +1 -1
- package/dist/graph/resolve.js +106 -5
- package/dist/graph/resolve.js.map +1 -1
- package/dist/graph/scopes.d.ts.map +1 -1
- package/dist/graph/scopes.js +2 -1
- package/dist/graph/scopes.js.map +1 -1
- package/dist/graph/source-files.d.ts +7 -2
- package/dist/graph/source-files.d.ts.map +1 -1
- package/dist/graph/source-files.js +19 -6
- package/dist/graph/source-files.js.map +1 -1
- package/dist/graph/workspace-cli.d.ts +2 -0
- package/dist/graph/workspace-cli.d.ts.map +1 -1
- package/dist/graph/workspace-cli.js +3 -0
- package/dist/graph/workspace-cli.js.map +1 -1
- package/dist/graph/workspace.d.ts +2 -0
- package/dist/graph/workspace.d.ts.map +1 -1
- package/dist/graph/workspace.js +173 -6
- package/dist/graph/workspace.js.map +1 -1
- package/dist/hosts/antigravity.d.ts +2 -2
- package/dist/hosts/antigravity.d.ts.map +1 -1
- package/dist/hosts/codex-hooks.d.ts +2 -6
- package/dist/hosts/codex-hooks.d.ts.map +1 -1
- package/dist/hosts/codex-hooks.js +7 -30
- package/dist/hosts/codex-hooks.js.map +1 -1
- package/dist/hosts/config-write.d.ts +36 -0
- package/dist/hosts/config-write.d.ts.map +1 -0
- package/dist/hosts/config-write.js +63 -0
- package/dist/hosts/config-write.js.map +1 -0
- package/dist/hosts/cursor-hooks.d.ts +18 -0
- package/dist/hosts/cursor-hooks.d.ts.map +1 -0
- package/dist/hosts/cursor-hooks.js +100 -0
- package/dist/hosts/cursor-hooks.js.map +1 -0
- package/dist/hosts/init.d.ts +2 -2
- package/dist/hosts/init.d.ts.map +1 -1
- package/dist/hosts/init.js +8 -2
- package/dist/hosts/init.js.map +1 -1
- package/dist/hosts/mcp-config.d.ts +15 -5
- package/dist/hosts/mcp-config.d.ts.map +1 -1
- package/dist/hosts/mcp-config.js +51 -15
- package/dist/hosts/mcp-config.js.map +1 -1
- package/dist/hosts/plan.d.ts.map +1 -1
- package/dist/hosts/plan.js +2 -0
- package/dist/hosts/plan.js.map +1 -1
- package/dist/hosts/retract.d.ts +47 -0
- package/dist/hosts/retract.d.ts.map +1 -0
- package/dist/hosts/retract.js +473 -0
- package/dist/hosts/retract.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest/fs.d.ts +39 -5
- package/dist/ingest/fs.d.ts.map +1 -1
- package/dist/ingest/fs.js +104 -11
- package/dist/ingest/fs.js.map +1 -1
- package/dist/mcp/tool-names.d.ts +20 -0
- package/dist/mcp/tool-names.d.ts.map +1 -0
- package/dist/mcp/tool-names.js +36 -0
- package/dist/mcp/tool-names.js.map +1 -0
- package/dist/mcp/tools.d.ts +11 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +9 -21
- package/dist/mcp/tools.js.map +1 -1
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +17 -3
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/flush.d.ts.map +1 -1
- package/dist/telemetry/flush.js +1 -0
- package/dist/telemetry/flush.js.map +1 -1
- package/dist/telemetry/identity.d.ts +7 -0
- package/dist/telemetry/identity.d.ts.map +1 -1
- package/dist/telemetry/identity.js.map +1 -1
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +2 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/sessions.d.ts +19 -2
- package/dist/telemetry/sessions.d.ts.map +1 -1
- package/dist/telemetry/sessions.js +57 -34
- package/dist/telemetry/sessions.js.map +1 -1
- package/dist/telemetry/track.d.ts +22 -3
- package/dist/telemetry/track.d.ts.map +1 -1
- package/dist/telemetry/track.js +34 -5
- package/dist/telemetry/track.js.map +1 -1
- package/dist/upkeep-run.js +1 -1
- package/dist/upkeep-run.js.map +1 -1
- package/dist/upkeep.d.ts +7 -4
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +2 -1
- package/dist/upkeep.js.map +1 -1
- package/dist/util/state.d.ts +12 -2
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +4 -0
- package/dist/util/state.js.map +1 -1
- package/dist/viewer/app.js +2 -1
- package/dist/viewer/style.css +14 -0
- package/dist/viz/assemble.d.ts +17 -0
- package/dist/viz/assemble.d.ts.map +1 -1
- package/dist/viz/assemble.js.map +1 -1
- package/package.json +12 -4
- package/scripts/graph-quality.mjs +3 -3
- package/scripts/postinstall.mjs +42 -3
- package/scripts/run-tests.mjs +14 -0
- package/scripts/tally-audit.mjs +140 -0
- package/dist/ai/llm/claude-cli.d.ts +0 -60
- package/dist/ai/llm/claude-cli.d.ts.map +0 -1
- package/dist/ai/llm/claude-cli.js +0 -417
- package/dist/ai/llm/claude-cli.js.map +0 -1
- package/dist/util/num.d.ts +0 -3
- package/dist/util/num.d.ts.map +0 -1
- package/dist/util/num.js +0 -20
- package/dist/util/num.js.map +0 -1
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retraction: undo every edit graft has ever made to a repo.
|
|
3
|
+
*
|
|
4
|
+
* `init` is additive — it writes the files the *currently selected* hosts need
|
|
5
|
+
* and never looks at the rest. So a repo wired by an older version (or by the
|
|
6
|
+
* same version with different `--agents`) keeps the files that run produced,
|
|
7
|
+
* and the two sets accumulate. Retraction is the missing half: it walks every
|
|
8
|
+
* target graft could ever have written and removes graft's contribution, so
|
|
9
|
+
* `retract` + `init` converges the repo on exactly this version's intent.
|
|
10
|
+
*
|
|
11
|
+
* The target list is derived from the same registries `init` writes through
|
|
12
|
+
* (`HOSTS`, `mcpTargets`, `hookTargets`, `claudeTargets`), so a host added
|
|
13
|
+
* later is retractable for free — there is no second list to keep in sync.
|
|
14
|
+
* Only {@link LEGACY_TARGETS} is hand-maintained, and only for paths that have
|
|
15
|
+
* been *removed* from those registries: once a host is gone, nothing else
|
|
16
|
+
* remembers the file it used to write.
|
|
17
|
+
*
|
|
18
|
+
* Two invariants, both load-bearing:
|
|
19
|
+
* 1. Never delete what graft did not write. Inside a file the user owns, only
|
|
20
|
+
* the marker-fenced region and graft-named keys are touched; foreign MCP
|
|
21
|
+
* servers, hooks, and settings are preserved byte for byte.
|
|
22
|
+
* 2. Never leave an empty shell. A file that held nothing but graft's
|
|
23
|
+
* contribution is deleted, not truncated to `{}` or a blank document —
|
|
24
|
+
* an orphan file is the very residue this exists to remove.
|
|
25
|
+
*/
|
|
26
|
+
import { readFileSync, writeFileSync, existsSync, rmSync, rmdirSync, statSync, readdirSync } from 'node:fs';
|
|
27
|
+
import { join, dirname } from 'node:path';
|
|
28
|
+
import { homedir } from 'node:os';
|
|
29
|
+
import { HOSTS } from './registry.js';
|
|
30
|
+
import { START, END } from './sections.js';
|
|
31
|
+
import { mcpTargets, stripTomlSection } from './mcp-config.js';
|
|
32
|
+
import { hookTargets } from './codex-hooks.js';
|
|
33
|
+
import { antigravitySkillTargets } from './antigravity.js';
|
|
34
|
+
import { claudeTargets } from '../claude/init.js';
|
|
35
|
+
import { isGraftAllowEntry, isGraftFooterRegex } from '../claude/settings-merge.js';
|
|
36
|
+
/**
|
|
37
|
+
* Paths that older versions wrote and the live registries no longer mention.
|
|
38
|
+
* Empty today — every host in `HOSTS` since the multi-host layer landed is
|
|
39
|
+
* still there, and the marker string and the `graft` name have never changed,
|
|
40
|
+
* so the derived list covers every version to date.
|
|
41
|
+
*
|
|
42
|
+
* This is where a *removed* host's file goes. Deleting an entry from `HOSTS`
|
|
43
|
+
* without adding it here is what strands a file in every existing repo.
|
|
44
|
+
*/
|
|
45
|
+
const LEGACY_TARGETS = [];
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// primitive operations
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/** True when a file has no non-whitespace content left. */
|
|
50
|
+
function isBlank(text) {
|
|
51
|
+
return text.trim() === '';
|
|
52
|
+
}
|
|
53
|
+
function removeFile(path, apply) {
|
|
54
|
+
if (!existsSync(path))
|
|
55
|
+
return 'absent';
|
|
56
|
+
if (apply) {
|
|
57
|
+
rmSync(path, { force: true });
|
|
58
|
+
pruneEmptyDirs(dirname(path));
|
|
59
|
+
}
|
|
60
|
+
return 'deleted';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Walk up from a just-emptied directory removing empty ancestors, so retracting
|
|
64
|
+
* `.claude/skills/graft/SKILL.md` doesn't leave a hollow `skills/graft/` behind.
|
|
65
|
+
* Stops at the first non-empty directory — never climbs out of the repo, because
|
|
66
|
+
* any ancestor that far up has other content in it.
|
|
67
|
+
*/
|
|
68
|
+
function pruneEmptyDirs(dir) {
|
|
69
|
+
for (let d = dir, i = 0; i < 6; i++) {
|
|
70
|
+
try {
|
|
71
|
+
if (readdirSync(d).length > 0)
|
|
72
|
+
return;
|
|
73
|
+
rmdirSync(d); // throws on a non-empty dir — exactly the guard we want
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return; // not a dir, not empty, or not ours to remove
|
|
77
|
+
}
|
|
78
|
+
const parent = dirname(d);
|
|
79
|
+
if (parent === d)
|
|
80
|
+
return;
|
|
81
|
+
d = parent;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Strip the marker-fenced graft block from a file the user owns.
|
|
86
|
+
*
|
|
87
|
+
* Paragraph spacing around the removed block is collapsed back to a single
|
|
88
|
+
* blank line, so a file that had prose either side of the block reads exactly
|
|
89
|
+
* as it did before graft appended to it.
|
|
90
|
+
*/
|
|
91
|
+
function stripSection(path, apply) {
|
|
92
|
+
if (!existsSync(path))
|
|
93
|
+
return 'absent';
|
|
94
|
+
const text = readFileSync(path, 'utf8');
|
|
95
|
+
if (!text.includes(START))
|
|
96
|
+
return 'absent';
|
|
97
|
+
const eol = text.includes('\r\n') ? '\r\n' : '\n';
|
|
98
|
+
const lines = text.split(/\r\n|\n/);
|
|
99
|
+
const out = [];
|
|
100
|
+
let inside = false;
|
|
101
|
+
let found = false;
|
|
102
|
+
for (const line of lines) {
|
|
103
|
+
const t = line.trim();
|
|
104
|
+
if (!inside && t === START) {
|
|
105
|
+
inside = true;
|
|
106
|
+
found = true;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (inside) {
|
|
110
|
+
if (t === END)
|
|
111
|
+
inside = false;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
out.push(line);
|
|
115
|
+
}
|
|
116
|
+
if (!found)
|
|
117
|
+
return 'absent';
|
|
118
|
+
// Collapse the run of blank lines the block left behind, and trim the edges.
|
|
119
|
+
const collapsed = out
|
|
120
|
+
.join('\n')
|
|
121
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
122
|
+
.replace(/^\n+/, '')
|
|
123
|
+
.replace(/\n+$/, '\n');
|
|
124
|
+
if (!apply)
|
|
125
|
+
return isBlank(collapsed) ? 'deleted' : 'removed';
|
|
126
|
+
if (isBlank(collapsed))
|
|
127
|
+
return removeFile(path, true);
|
|
128
|
+
writeFileSync(path, eol === '\n' ? collapsed : collapsed.replace(/\n/g, '\r\n'));
|
|
129
|
+
return 'removed';
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Delete `<topKey>.graft` from a JSON config, preserving every other server.
|
|
133
|
+
* An unparseable file is reported and left alone — the user may have comments or
|
|
134
|
+
* a half-finished edit in there, and rewriting it would lose more than it fixes.
|
|
135
|
+
*/
|
|
136
|
+
function removeJsonKey(path, topKey, apply) {
|
|
137
|
+
if (!existsSync(path))
|
|
138
|
+
return 'absent';
|
|
139
|
+
let root;
|
|
140
|
+
try {
|
|
141
|
+
root = JSON.parse(readFileSync(path, 'utf8'));
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return 'skipped-unparseable';
|
|
145
|
+
}
|
|
146
|
+
if (typeof root !== 'object' || root === null || Array.isArray(root))
|
|
147
|
+
return 'skipped-unparseable';
|
|
148
|
+
const bucket = root[topKey];
|
|
149
|
+
if (typeof bucket !== 'object' || bucket === null || Array.isArray(bucket))
|
|
150
|
+
return 'absent';
|
|
151
|
+
const map = bucket;
|
|
152
|
+
if (!('graft' in map))
|
|
153
|
+
return 'absent';
|
|
154
|
+
if (!apply) {
|
|
155
|
+
return Object.keys(map).length === 1 && Object.keys(root).length === 1 ? 'deleted' : 'removed';
|
|
156
|
+
}
|
|
157
|
+
delete map.graft;
|
|
158
|
+
if (Object.keys(map).length === 0)
|
|
159
|
+
delete root[topKey];
|
|
160
|
+
if (Object.keys(root).length === 0)
|
|
161
|
+
return removeFile(path, true);
|
|
162
|
+
writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
|
|
163
|
+
return 'removed';
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Delete the `[mcp_servers.graft]` table from a TOML config.
|
|
167
|
+
*
|
|
168
|
+
* Line-based on purpose: a real TOML parse-and-reserialize would reformat the
|
|
169
|
+
* user's whole file. The table runs from its header to the next `[`-header or
|
|
170
|
+
* EOF, which is exactly what `upsertCodexToml` appends.
|
|
171
|
+
*/
|
|
172
|
+
function removeTomlSection(path, apply) {
|
|
173
|
+
if (!existsSync(path))
|
|
174
|
+
return 'absent';
|
|
175
|
+
const { rest: kept, found } = stripTomlSection(readFileSync(path, 'utf8'));
|
|
176
|
+
if (!found)
|
|
177
|
+
return 'absent';
|
|
178
|
+
if (!apply)
|
|
179
|
+
return isBlank(kept) ? 'deleted' : 'removed';
|
|
180
|
+
if (isBlank(kept))
|
|
181
|
+
return removeFile(path, true);
|
|
182
|
+
writeFileSync(path, kept.endsWith('\n') ? kept : `${kept}\n`);
|
|
183
|
+
return 'removed';
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Remove graft's fragments from `.claude/settings.json`, keeping the user's.
|
|
187
|
+
*
|
|
188
|
+
* The statusline check is by *shim path*, not exact string equality: an older
|
|
189
|
+
* version's command differed in shape, and `mergeGraftSettings` would read that
|
|
190
|
+
* as a hand-written statusline and refuse to touch it forever. Matching the
|
|
191
|
+
* helper path recognizes graft's own output across every version that wrote it.
|
|
192
|
+
*/
|
|
193
|
+
function stripClaudeSettings(path, apply) {
|
|
194
|
+
if (!existsSync(path))
|
|
195
|
+
return 'absent';
|
|
196
|
+
let root;
|
|
197
|
+
try {
|
|
198
|
+
root = JSON.parse(readFileSync(path, 'utf8'));
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return 'skipped-unparseable';
|
|
202
|
+
}
|
|
203
|
+
if (typeof root !== 'object' || root === null || Array.isArray(root))
|
|
204
|
+
return 'skipped-unparseable';
|
|
205
|
+
const before = JSON.stringify(root);
|
|
206
|
+
const isGraftCmd = (v) => JSON.stringify(v ?? '').includes('graft-statusline.cjs');
|
|
207
|
+
for (const key of ['statusLine', 'subagentStatusLine']) {
|
|
208
|
+
if (root[key] !== undefined && isGraftCmd(root[key]))
|
|
209
|
+
delete root[key];
|
|
210
|
+
}
|
|
211
|
+
if (root.hooks && typeof root.hooks === 'object' && !Array.isArray(root.hooks)) {
|
|
212
|
+
for (const event of Object.keys(root.hooks)) {
|
|
213
|
+
const prior = root.hooks[event];
|
|
214
|
+
if (!Array.isArray(prior))
|
|
215
|
+
continue;
|
|
216
|
+
const kept = prior.filter((e) => !JSON.stringify(e ?? '').includes('graft-hooks.cjs'));
|
|
217
|
+
if (kept.length === 0)
|
|
218
|
+
delete root.hooks[event];
|
|
219
|
+
else
|
|
220
|
+
root.hooks[event] = kept;
|
|
221
|
+
}
|
|
222
|
+
if (Object.keys(root.hooks).length === 0)
|
|
223
|
+
delete root.hooks;
|
|
224
|
+
}
|
|
225
|
+
if (Array.isArray(root.footerLinksRegexes)) {
|
|
226
|
+
const kept = root.footerLinksRegexes.filter((r) => !isGraftFooterRegex(r));
|
|
227
|
+
if (kept.length === 0)
|
|
228
|
+
delete root.footerLinksRegexes;
|
|
229
|
+
else
|
|
230
|
+
root.footerLinksRegexes = kept;
|
|
231
|
+
}
|
|
232
|
+
if (root.permissions && Array.isArray(root.permissions.allow)) {
|
|
233
|
+
const kept = root.permissions.allow.filter((a) => !isGraftAllowEntry(a));
|
|
234
|
+
if (kept.length === 0)
|
|
235
|
+
delete root.permissions.allow;
|
|
236
|
+
else
|
|
237
|
+
root.permissions.allow = kept;
|
|
238
|
+
if (Object.keys(root.permissions).length === 0)
|
|
239
|
+
delete root.permissions;
|
|
240
|
+
}
|
|
241
|
+
const after = JSON.stringify(root);
|
|
242
|
+
if (after === before)
|
|
243
|
+
return 'absent';
|
|
244
|
+
if (!apply)
|
|
245
|
+
return Object.keys(root).length === 0 ? 'deleted' : 'removed';
|
|
246
|
+
if (Object.keys(root).length === 0)
|
|
247
|
+
return removeFile(path, true);
|
|
248
|
+
writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
|
|
249
|
+
return 'removed';
|
|
250
|
+
}
|
|
251
|
+
/** Remove graft's PostToolUse/SessionStart/etc. entries from Codex's hooks.json. */
|
|
252
|
+
function stripCodexHooks(path, apply) {
|
|
253
|
+
if (!existsSync(path))
|
|
254
|
+
return 'absent';
|
|
255
|
+
let root;
|
|
256
|
+
try {
|
|
257
|
+
root = JSON.parse(readFileSync(path, 'utf8'));
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
return 'skipped-unparseable';
|
|
261
|
+
}
|
|
262
|
+
if (typeof root !== 'object' || root === null || Array.isArray(root))
|
|
263
|
+
return 'skipped-unparseable';
|
|
264
|
+
if (!root.hooks || typeof root.hooks !== 'object' || Array.isArray(root.hooks))
|
|
265
|
+
return 'absent';
|
|
266
|
+
const before = JSON.stringify(root);
|
|
267
|
+
for (const event of Object.keys(root.hooks)) {
|
|
268
|
+
const prior = root.hooks[event];
|
|
269
|
+
if (!Array.isArray(prior))
|
|
270
|
+
continue;
|
|
271
|
+
const kept = prior.filter((e) => !JSON.stringify(e ?? '').includes('graft-hooks.cjs'));
|
|
272
|
+
if (kept.length === 0)
|
|
273
|
+
delete root.hooks[event];
|
|
274
|
+
else
|
|
275
|
+
root.hooks[event] = kept;
|
|
276
|
+
}
|
|
277
|
+
if (Object.keys(root.hooks).length === 0)
|
|
278
|
+
delete root.hooks;
|
|
279
|
+
if (JSON.stringify(root) === before)
|
|
280
|
+
return 'absent';
|
|
281
|
+
if (!apply)
|
|
282
|
+
return Object.keys(root).length === 0 ? 'deleted' : 'removed';
|
|
283
|
+
if (Object.keys(root).length === 0)
|
|
284
|
+
return removeFile(path, true);
|
|
285
|
+
writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
|
|
286
|
+
return 'removed';
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Drop graft's block from `.gitignore` / `.ignore`.
|
|
290
|
+
*
|
|
291
|
+
* Both are written as a comment line plus entries; the comment is graft's own
|
|
292
|
+
* wording, so it identifies the block. Entries are matched individually too, so
|
|
293
|
+
* a hand-tidied file (comment deleted, entry kept) still retracts cleanly.
|
|
294
|
+
*/
|
|
295
|
+
function stripIgnoreEntries(path, entries, apply) {
|
|
296
|
+
if (!existsSync(path))
|
|
297
|
+
return 'absent';
|
|
298
|
+
const text = readFileSync(path, 'utf8');
|
|
299
|
+
const kept = text
|
|
300
|
+
.split('\n')
|
|
301
|
+
.filter((l) => {
|
|
302
|
+
const t = l.trim();
|
|
303
|
+
if (t.startsWith('#') && t.includes('graft'))
|
|
304
|
+
return false;
|
|
305
|
+
return !entries.some((re) => re.test(t));
|
|
306
|
+
})
|
|
307
|
+
.join('\n')
|
|
308
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
309
|
+
.replace(/^\n+/, '')
|
|
310
|
+
.replace(/\n+$/, '\n');
|
|
311
|
+
if (kept === text)
|
|
312
|
+
return 'absent';
|
|
313
|
+
if (!apply)
|
|
314
|
+
return isBlank(kept) ? 'deleted' : 'removed';
|
|
315
|
+
if (isBlank(kept))
|
|
316
|
+
return removeFile(path, true);
|
|
317
|
+
writeFileSync(path, kept.endsWith('\n') ? kept : `${kept}\n`);
|
|
318
|
+
return 'removed';
|
|
319
|
+
}
|
|
320
|
+
function removeDir(path, apply) {
|
|
321
|
+
try {
|
|
322
|
+
if (!statSync(path).isDirectory())
|
|
323
|
+
return 'absent';
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
return 'absent';
|
|
327
|
+
}
|
|
328
|
+
if (apply) {
|
|
329
|
+
rmSync(path, { recursive: true, force: true });
|
|
330
|
+
pruneEmptyDirs(dirname(path));
|
|
331
|
+
}
|
|
332
|
+
return 'deleted';
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Every target graft could have written, in removal order.
|
|
336
|
+
*
|
|
337
|
+
* Derived from the live registries, NOT hand-listed: `HOSTS` gives the
|
|
338
|
+
* instruction files, `mcpTargets` over *all* host ids gives the MCP configs
|
|
339
|
+
* (with the format and top-level key each one needs), and `claudeTargets`
|
|
340
|
+
* gives the Claude Code layer. That's what keeps this complete as hosts are
|
|
341
|
+
* added — see the module note.
|
|
342
|
+
*/
|
|
343
|
+
function targets(repo, opts) {
|
|
344
|
+
const home = opts.home ?? homedir();
|
|
345
|
+
const exclude = new Set(opts.exclude ?? []);
|
|
346
|
+
const out = [];
|
|
347
|
+
/**
|
|
348
|
+
* Paths a *kept* host also writes, which must survive even though some other,
|
|
349
|
+
* unselected host names them too.
|
|
350
|
+
*
|
|
351
|
+
* Three hosts share `AGENTS.md` (agents, hermes, antigravity). Excluding by host
|
|
352
|
+
* id alone would strip that shared block on behalf of a host nobody selected,
|
|
353
|
+
* and the only reason the end state came out right was that `init` happened to
|
|
354
|
+
* rewrite it immediately afterwards. Exclude by path as well, so retraction
|
|
355
|
+
* never depends on what runs next.
|
|
356
|
+
*/
|
|
357
|
+
const keptPaths = new Set();
|
|
358
|
+
for (const host of HOSTS) {
|
|
359
|
+
if (exclude.has(host.id))
|
|
360
|
+
keptPaths.add(join(repo, host.relPath));
|
|
361
|
+
}
|
|
362
|
+
for (const t of mcpTargets(repo, [...exclude], { home }))
|
|
363
|
+
keptPaths.add(t.path);
|
|
364
|
+
if (exclude.has('claude'))
|
|
365
|
+
for (const t of claudeTargets(repo))
|
|
366
|
+
keptPaths.add(t.path);
|
|
367
|
+
if (exclude.has('agents'))
|
|
368
|
+
for (const t of hookTargets(home))
|
|
369
|
+
keptPaths.add(t.path);
|
|
370
|
+
if (exclude.has('antigravity'))
|
|
371
|
+
for (const t of antigravitySkillTargets(home))
|
|
372
|
+
keptPaths.add(t.path);
|
|
373
|
+
/** Queue a target unless a kept host owns that path, or it's already queued. */
|
|
374
|
+
const seen = new Set();
|
|
375
|
+
const add = (t) => {
|
|
376
|
+
if (keptPaths.has(t.path) || seen.has(t.path))
|
|
377
|
+
return;
|
|
378
|
+
seen.add(t.path);
|
|
379
|
+
out.push(t);
|
|
380
|
+
};
|
|
381
|
+
// 1. Instruction files, one per host. Owned files go wholesale; shared files
|
|
382
|
+
// lose only their fenced block.
|
|
383
|
+
for (const host of HOSTS) {
|
|
384
|
+
if (exclude.has(host.id))
|
|
385
|
+
continue;
|
|
386
|
+
const path = join(repo, host.relPath);
|
|
387
|
+
add(host.kind === 'owned'
|
|
388
|
+
? { hostId: host.id, path, what: 'graft-owned instruction file', scope: 'repo', run: (a) => removeFile(path, a) }
|
|
389
|
+
: { hostId: host.id, path, what: 'fenced graft section', scope: 'repo', run: (a) => stripSection(path, a) });
|
|
390
|
+
}
|
|
391
|
+
// 1b. Instruction files from hosts that no longer exist in the registry.
|
|
392
|
+
for (const legacy of LEGACY_TARGETS) {
|
|
393
|
+
const path = join(repo, legacy.relPath);
|
|
394
|
+
add({
|
|
395
|
+
hostId: 'legacy', path, what: legacy.what, scope: 'repo',
|
|
396
|
+
run: (a) => (legacy.kind === 'owned' ? removeFile(path, a) : stripSection(path, a)),
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
// 2. MCP registrations. Asking for every host id at once yields the union of
|
|
400
|
+
// config files, each already carrying its format and top-level key.
|
|
401
|
+
const allIds = HOSTS.map((h) => h.id).filter((id) => !exclude.has(id));
|
|
402
|
+
for (const t of mcpTargets(repo, allIds, { home })) {
|
|
403
|
+
if (opts.global === false && t.scope === 'global')
|
|
404
|
+
continue;
|
|
405
|
+
add({
|
|
406
|
+
hostId: t.hostId, path: t.path, what: t.what, scope: t.scope,
|
|
407
|
+
run: (a) => (t.format === 'toml' ? removeTomlSection(t.path, a) : removeJsonKey(t.path, t.topKey, a)),
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
// 3. Claude Code: settings fragments, both shims, the skill, and the .mcp.json key.
|
|
411
|
+
if (!exclude.has('claude')) {
|
|
412
|
+
const [settings, statusline, hooks, skill, mcp] = claudeTargets(repo).map((t) => t.path);
|
|
413
|
+
for (const t of [
|
|
414
|
+
{ hostId: 'claude', path: settings, what: 'statusline + hooks + allowlist + footer regex', scope: 'repo', run: (a) => stripClaudeSettings(settings, a) },
|
|
415
|
+
{ hostId: 'claude', path: statusline, what: 'statusline shim', scope: 'repo', run: (a) => removeFile(statusline, a) },
|
|
416
|
+
{ hostId: 'claude', path: hooks, what: 'hooks shim', scope: 'repo', run: (a) => removeFile(hooks, a) },
|
|
417
|
+
{ hostId: 'claude', path: skill, what: 'graft skill', scope: 'repo', run: (a) => removeFile(skill, a) },
|
|
418
|
+
{ hostId: 'claude', path: mcp, what: 'mcpServers.graft', scope: 'repo', run: (a) => removeJsonKey(mcp, 'mcpServers', a) },
|
|
419
|
+
])
|
|
420
|
+
add(t);
|
|
421
|
+
}
|
|
422
|
+
// 4. Global: Codex's hook shim + entries, and Antigravity's shared skill.
|
|
423
|
+
if (opts.global !== false) {
|
|
424
|
+
if (!exclude.has('agents')) {
|
|
425
|
+
for (const t of hookTargets(home)) {
|
|
426
|
+
add({
|
|
427
|
+
hostId: t.hostId, path: t.path, what: t.what, scope: 'global',
|
|
428
|
+
run: (a) => (t.path.endsWith('.json') ? stripCodexHooks(t.path, a) : removeFile(t.path, a)),
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
if (!exclude.has('antigravity')) {
|
|
433
|
+
for (const t of antigravitySkillTargets(home)) {
|
|
434
|
+
add({ hostId: t.hostId, path: t.path, what: t.what, scope: 'global', run: (a) => removeFile(t.path, a) });
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
// 5. The graph cache and the ignore entries that admit it. Last, so a failure
|
|
439
|
+
// here can't strand the wiring half-retracted.
|
|
440
|
+
if (opts.cache !== false) {
|
|
441
|
+
const cache = join(repo, 'graft');
|
|
442
|
+
const gitignore = join(repo, '.gitignore');
|
|
443
|
+
const ignore = join(repo, '.ignore');
|
|
444
|
+
for (const t of [
|
|
445
|
+
{ hostId: 'graph', path: cache, what: 'local graph cache', scope: 'repo', run: (a) => removeDir(cache, a) },
|
|
446
|
+
{ hostId: 'graph', path: gitignore, what: 'graft/ ignore entry', scope: 'repo', run: (a) => stripIgnoreEntries(gitignore, [/^\/?graft\/?$/], a) },
|
|
447
|
+
{ hostId: 'graph', path: ignore, what: 'graft/ search re-admit entries', scope: 'repo', run: (a) => stripIgnoreEntries(ignore, [/^!?graft\/?$/, /^graft\/\.(cache|graph)\/?$/], a) },
|
|
448
|
+
])
|
|
449
|
+
add(t);
|
|
450
|
+
}
|
|
451
|
+
return out;
|
|
452
|
+
}
|
|
453
|
+
// ---------------------------------------------------------------------------
|
|
454
|
+
// public API
|
|
455
|
+
// ---------------------------------------------------------------------------
|
|
456
|
+
/** What a retraction *would* remove. Pure — touches nothing. */
|
|
457
|
+
export function planRetract(repo, opts = {}) {
|
|
458
|
+
return targets(repo, { ...opts, apply: false }).map(({ run, ...t }) => ({ ...t, action: run(false) }));
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Remove graft's contribution from every target. Reports every target it
|
|
462
|
+
* considered, including the ones that were already clean, so a caller can show
|
|
463
|
+
* either the full sweep or just what changed.
|
|
464
|
+
*/
|
|
465
|
+
export function runRetract(repo, opts = {}) {
|
|
466
|
+
const apply = opts.apply !== false;
|
|
467
|
+
return targets(repo, opts).map(({ run, ...t }) => ({ ...t, action: run(apply) }));
|
|
468
|
+
}
|
|
469
|
+
/** The subset worth showing a user: targets that had something to remove. */
|
|
470
|
+
export function changed(retractions) {
|
|
471
|
+
return retractions.filter((r) => r.action !== 'absent');
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=retract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retract.js","sourceRoot":"","sources":["../../src/hosts/retract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5G,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAyCpF;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAmE,EAAE,CAAC;AAE1F,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,2DAA2D;AAC3D,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,KAAc;IAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YACtC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wDAAwD;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,8CAA8C;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO;QACzB,CAAC,GAAG,MAAM,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,IAAY,EAAE,KAAc;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QACtE,IAAI,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,GAAG;gBAAE,MAAM,GAAG,KAAK,CAAC;YAAC,SAAS;QAAC,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC5B,6EAA6E;IAC7E,MAAM,SAAS,GAAG,GAAG;SAClB,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,IAAI,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,aAAa,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,MAAc,EAAE,KAAc;IACjE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACnG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5F,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC;IACjB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAc;IACrD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC5B,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,IAAI,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,IAAY,EAAE,KAAc;IACvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,IAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACnG,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAE5F,KAAK,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,EAAE,CAAC;QACvD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/E,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAChG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;gBAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC;;YACjD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACtC,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;YAChD,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oFAAoF;AACpF,SAAS,eAAe,CAAC,IAAY,EAAE,KAAc;IACnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,IAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACnG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChG,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;YAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAChC,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAC5D,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,IAAY,EAAE,OAAiB,EAAE,KAAc;IACzE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI;SACd,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,IAAI,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAc;IAC7C,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,QAAQ,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAWD;;;;;;;;GAQG;AACH,SAAS,OAAO,CAAC,IAAY,EAAE,IAAiB;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB;;;;;;;;;OASG;IACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;QAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpF,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAAE,KAAK,MAAM,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAErG,gFAAgF;IAChF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAQ,EAAE;QAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO;QACtD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,CAAC;IAEF,6EAA6E;IAC7E,mCAAmC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,GAAG,CACD,IAAI,CAAC,IAAI,KAAK,OAAO;YACnB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;YACjH,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAC9G,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,GAAG,CAAC;YACF,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM;YACxD,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SACpF,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ;YAAE,SAAS;QAC5D,GAAG,CAAC;YACF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK;YAC5D,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAO,EAAE,CAAC,CAAC,CAAC;SACvG,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzF,KAAK,MAAM,CAAC,IAAI;YACd,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,+CAA+C,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;YACxJ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE;YACrH,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YACtG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YACvG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE;SAC9G;YAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,0EAA0E;IAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,GAAG,CAAC;oBACF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ;oBAC7D,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;iBAC5F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,kDAAkD;IAClD,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI;YACd,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YAC3G,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE;YACjJ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,6BAA6B,CAAC,EAAE,CAAC,CAAC,EAAE;SACzK;YAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAoB,EAAE;IAC9D,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACzG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAoB,EAAE;IAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;IACnC,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,WAAyB;IAC/C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;AAC1D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ export type { ChatModel, ChatRequest, ChatResponse, Message, ToolSpec, ToolCall,
|
|
|
30
30
|
export { createChatModel, type ProviderKind, type ChatModelConfig } from "./ai/llm/factory.js";
|
|
31
31
|
export { OpenAIChatModel } from "./ai/llm/openai.js";
|
|
32
32
|
export { AnthropicChatModel } from "./ai/llm/anthropic.js";
|
|
33
|
+
export { LiteLLMChatModel, listLiteLLMModels, DEFAULT_LITELLM_BASE_URL } from "./ai/llm/litellm.js";
|
|
34
|
+
export { OrcaRouterChatModel, listOrcaRouterModels, DEFAULT_ORCAROUTER_BASE_URL } from "./ai/llm/orcarouter.js";
|
|
33
35
|
export { ChatSynthesizer } from "./ai/synthesize.js";
|
|
34
36
|
export type { Synthesizer, SynthNode, SynthLink, FileSummary } from "./ai/synthesize.js";
|
|
35
37
|
export { ChatSummarizer } from "./ai/summarize.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEzF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG5E,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEzF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG5E,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAGhH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,8 @@ export { resolveConfig, DEFAULTS, DEFAULT_MODELS } from "./ai/providers.js";
|
|
|
23
23
|
export { createChatModel } from "./ai/llm/factory.js";
|
|
24
24
|
export { OpenAIChatModel } from "./ai/llm/openai.js";
|
|
25
25
|
export { AnthropicChatModel } from "./ai/llm/anthropic.js";
|
|
26
|
+
export { LiteLLMChatModel, listLiteLLMModels, DEFAULT_LITELLM_BASE_URL } from "./ai/llm/litellm.js";
|
|
27
|
+
export { OrcaRouterChatModel, listOrcaRouterModels, DEFAULT_ORCAROUTER_BASE_URL } from "./ai/llm/orcarouter.js";
|
|
26
28
|
// Engine ops, for advanced/custom setups.
|
|
27
29
|
export { ChatSynthesizer } from "./ai/synthesize.js";
|
|
28
30
|
export { ChatSummarizer } from "./ai/summarize.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAKtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI5E,OAAO,EAAE,eAAe,EAA2C,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAKtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI5E,OAAO,EAAE,eAAe,EAA2C,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAEhH,0CAA0C;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/ingest/fs.d.ts
CHANGED
|
@@ -29,17 +29,51 @@ export declare function shouldSkipDir(name: string, includes?: ReadonlySet<strin
|
|
|
29
29
|
* `includes`, and files over 1 MB.
|
|
30
30
|
* In a Git worktree, tracked files plus untracked, non-ignored files come from
|
|
31
31
|
* `git ls-files`; this gives indexing exactly Git's nested `.gitignore`,
|
|
32
|
-
* negation, and global-exclude semantics.
|
|
33
|
-
* recursively only when `followSubmodules` is true; the default preserves the
|
|
34
|
-
* historical superproject boundary. Each child keeps its own ignore rules, and
|
|
35
|
-
* uninitialized submodules remain absent. Non-Git directories retain the plain
|
|
32
|
+
* negation, and global-exclude semantics. Non-Git directories retain the plain
|
|
36
33
|
* filesystem walk. `includes` lifts only the built-in skip list — it never
|
|
37
34
|
* overrides Git's ignore rules (un-ignore or `git add -f` a directory to
|
|
38
35
|
* index it, the same contract as tracked-but-ignored files).
|
|
36
|
+
*
|
|
37
|
+
* Two INDEPENDENT opt-ins cross the repository boundary, because Git models two
|
|
38
|
+
* different relationships and only one of them is a dependency the parent pins:
|
|
39
|
+
*
|
|
40
|
+
* - `followSubmodules` follows a GITLINK — an index entry with mode `160000`,
|
|
41
|
+
* a commit the superproject versions.
|
|
42
|
+
* - `followNestedRepos` follows a nested clone the parent's index knows
|
|
43
|
+
* nothing about. Manifest-driven multi-repo tools (west, repo, gclient,
|
|
44
|
+
* tsrc, mr, …) all check dependencies out this way, and so does anyone who
|
|
45
|
+
* clones an upstream into the tree to patch it locally.
|
|
46
|
+
*
|
|
47
|
+
* Both default to false, preserving the historical superproject boundary. Each
|
|
48
|
+
* child keeps its own ignore rules; uninitialized submodules and gitignored
|
|
49
|
+
* nested clones remain absent either way (`--exclude-standard` never emits
|
|
50
|
+
* them, so there is nothing to follow).
|
|
39
51
|
*/
|
|
40
52
|
export interface WalkOptions {
|
|
41
|
-
/** Include initialized Git submodules recursively. Default false. */
|
|
53
|
+
/** Include initialized Git submodules (gitlinks) recursively. Default false. */
|
|
42
54
|
followSubmodules?: boolean;
|
|
55
|
+
/** Include nested Git clones the parent index does not track. Default false. */
|
|
56
|
+
followNestedRepos?: boolean;
|
|
43
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Directory `walkDir` actually enumerates.
|
|
60
|
+
*
|
|
61
|
+
* `path.resolve` does not follow a symlink, and git discovers the repo from the
|
|
62
|
+
* child cwd. Unwrap a symlink-to-directory once so the walk runs inside the
|
|
63
|
+
* target. Ordinary directories stay as `resolve(dir)` — not `realpath` — so a
|
|
64
|
+
* macOS `/var/folders/…` scratch path is the path the caller handed us.
|
|
65
|
+
*
|
|
66
|
+
* A broken symlink throws instead of the `scandir ENOENT` `readdirSync` would
|
|
67
|
+
* raise after git fails. Internal symlink policy is not decided here.
|
|
68
|
+
*/
|
|
69
|
+
export declare function canonicalWalkRoot(dir: string): string;
|
|
70
|
+
/**
|
|
71
|
+
* Recursively list source files under `dir`. A directory symlink as the *input
|
|
72
|
+
* root* is unwrapped once ({@link canonicalWalkRoot}); emitted paths are remapped
|
|
73
|
+
* onto the caller-facing root so `relPosix` stays `src/foo.ts` rather than a
|
|
74
|
+
* `../` escape through the physical path (macOS `/tmp` → `/private/tmp`).
|
|
75
|
+
* Symlinks *inside* the tree are not followed: git still `lstat`s each listed
|
|
76
|
+
* path, and the filesystem walk still requires `Dirent.isFile` / `isDirectory`.
|
|
77
|
+
*/
|
|
44
78
|
export declare function walkDir(dir: string, includes?: ReadonlySet<string>, opts?: WalkOptions): string[];
|
|
45
79
|
//# sourceMappingURL=fs.d.ts.map
|
package/dist/ingest/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/ingest/fs.ts"],"names":[],"mappings":"AAOA,kEAAkE;AAClE,eAAO,MAAM,SAAS,aAgBpB,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,cAAc,UAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAInF;AAED
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/ingest/fs.ts"],"names":[],"mappings":"AAOA,kEAAkE;AAClE,eAAO,MAAM,SAAS,aAgBpB,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,cAAc,UAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAInF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0BrD;AAoBD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC9B,IAAI,GAAE,WAAgB,GACrB,MAAM,EAAE,CAKV"}
|