ctxr-cli 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter.d.ts +0 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/builtin/index.d.ts.map +1 -1
- package/dist/adapters/builtin/index.js +2 -2
- package/dist/adapters/builtin/index.js.map +1 -1
- package/dist/adapters/harness/claude-code.d.ts.map +1 -1
- package/dist/adapters/harness/claude-code.js +30 -14
- package/dist/adapters/harness/claude-code.js.map +1 -1
- package/dist/adapters/harness/hermes-agent.d.ts +9 -0
- package/dist/adapters/harness/hermes-agent.d.ts.map +1 -0
- package/dist/adapters/harness/hermes-agent.js +13 -0
- package/dist/adapters/harness/hermes-agent.js.map +1 -0
- package/dist/adapters/types.d.ts +38 -18
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js +3 -3
- package/dist/adapters/types.js.map +1 -1
- package/dist/commands/adapters-generate.d.ts +4 -2
- package/dist/commands/adapters-generate.d.ts.map +1 -1
- package/dist/commands/adapters-generate.js +14 -6
- package/dist/commands/adapters-generate.js.map +1 -1
- package/dist/commands/archive.d.ts +6 -4
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +7 -5
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/catalog-show.d.ts +0 -1
- package/dist/commands/catalog-show.d.ts.map +1 -1
- package/dist/commands/catalog-show.js +1 -1
- package/dist/commands/catalog-show.js.map +1 -1
- package/dist/commands/graph-query.d.ts +2 -11
- package/dist/commands/graph-query.d.ts.map +1 -1
- package/dist/commands/graph-query.js +11 -14
- package/dist/commands/graph-query.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +82 -21
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/publish-check.d.ts +23 -0
- package/dist/commands/publish-check.d.ts.map +1 -0
- package/dist/commands/publish-check.js +112 -0
- package/dist/commands/publish-check.js.map +1 -0
- package/dist/commands/publish-gather.d.ts +27 -0
- package/dist/commands/publish-gather.d.ts.map +1 -0
- package/dist/commands/publish-gather.js +73 -0
- package/dist/commands/publish-gather.js.map +1 -0
- package/dist/commands/publish-new.d.ts +19 -0
- package/dist/commands/publish-new.d.ts.map +1 -0
- package/dist/commands/publish-new.js +108 -0
- package/dist/commands/publish-new.js.map +1 -0
- package/dist/commands/serve.d.ts +32 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +151 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/session-capture.d.ts.map +1 -1
- package/dist/commands/session-capture.js +0 -2
- package/dist/commands/session-capture.js.map +1 -1
- package/dist/commands/update.js +3 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/config/defaults.d.ts +49 -44
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +49 -47
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +53 -52
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +84 -62
- package/dist/config/schema.js.map +1 -1
- package/dist/core/agents-doc.d.ts +9 -0
- package/dist/core/agents-doc.d.ts.map +1 -1
- package/dist/core/agents-doc.js +31 -16
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/browse/link-resolver.d.ts +12 -0
- package/dist/core/browse/link-resolver.d.ts.map +1 -0
- package/dist/core/browse/link-resolver.js +12 -0
- package/dist/core/browse/link-resolver.js.map +1 -0
- package/dist/core/browse/nav.d.ts +10 -0
- package/dist/core/browse/nav.d.ts.map +1 -0
- package/dist/core/browse/nav.js +101 -0
- package/dist/core/browse/nav.js.map +1 -0
- package/dist/core/browse/render.d.ts +5 -0
- package/dist/core/browse/render.d.ts.map +1 -0
- package/dist/core/browse/render.js +66 -0
- package/dist/core/browse/render.js.map +1 -0
- package/dist/core/browse/routes.d.ts +40 -0
- package/dist/core/browse/routes.d.ts.map +1 -0
- package/dist/core/browse/routes.js +68 -0
- package/dist/core/browse/routes.js.map +1 -0
- package/dist/core/browse/templates.d.ts +13 -0
- package/dist/core/browse/templates.d.ts.map +1 -0
- package/dist/core/browse/templates.js +39 -0
- package/dist/core/browse/templates.js.map +1 -0
- package/dist/core/browse/tree.d.ts +33 -0
- package/dist/core/browse/tree.d.ts.map +1 -0
- package/dist/core/browse/tree.js +53 -0
- package/dist/core/browse/tree.js.map +1 -0
- package/dist/core/catalog/build.d.ts +1 -1
- package/dist/core/catalog/build.d.ts.map +1 -1
- package/dist/core/catalog/build.js +1 -2
- package/dist/core/catalog/build.js.map +1 -1
- package/dist/core/catalog/model.d.ts +2 -0
- package/dist/core/catalog/model.d.ts.map +1 -1
- package/dist/core/catalog/model.js +2 -1
- package/dist/core/catalog/model.js.map +1 -1
- package/dist/core/checks/integrity-checks.d.ts +18 -2
- package/dist/core/checks/integrity-checks.d.ts.map +1 -1
- package/dist/core/checks/integrity-checks.js +55 -10
- package/dist/core/checks/integrity-checks.js.map +1 -1
- package/dist/core/checks/manifest.d.ts.map +1 -1
- package/dist/core/checks/manifest.js +0 -5
- package/dist/core/checks/manifest.js.map +1 -1
- package/dist/core/checks/organize-checks.d.ts +10 -3
- package/dist/core/checks/organize-checks.d.ts.map +1 -1
- package/dist/core/checks/organize-checks.js +14 -5
- package/dist/core/checks/organize-checks.js.map +1 -1
- package/dist/core/checks/types.d.ts +1 -1
- package/dist/core/convention-doc.d.ts +21 -19
- package/dist/core/convention-doc.d.ts.map +1 -1
- package/dist/core/convention-doc.js +48 -62
- package/dist/core/convention-doc.js.map +1 -1
- package/dist/core/conventions.d.ts +2 -2
- package/dist/core/conventions.js +2 -2
- package/dist/core/errors.d.ts +31 -44
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +81 -128
- package/dist/core/errors.js.map +1 -1
- package/dist/core/exit-codes.d.ts +7 -5
- package/dist/core/exit-codes.d.ts.map +1 -1
- package/dist/core/exit-codes.js +7 -5
- package/dist/core/exit-codes.js.map +1 -1
- package/dist/core/git/repo.d.ts +0 -6
- package/dist/core/git/repo.d.ts.map +1 -1
- package/dist/core/git/repo.js +0 -13
- package/dist/core/git/repo.js.map +1 -1
- package/dist/core/git/worktree.d.ts +4 -7
- package/dist/core/git/worktree.d.ts.map +1 -1
- package/dist/core/git/worktree.js +4 -10
- package/dist/core/git/worktree.js.map +1 -1
- package/dist/core/graph/model.d.ts +14 -0
- package/dist/core/graph/model.d.ts.map +1 -1
- package/dist/core/graph/model.js +30 -14
- package/dist/core/graph/model.js.map +1 -1
- package/dist/core/harness/bridge.d.ts +30 -0
- package/dist/core/harness/bridge.d.ts.map +1 -0
- package/dist/core/harness/bridge.js +178 -0
- package/dist/core/harness/bridge.js.map +1 -0
- package/dist/core/ingest/identity.d.ts +4 -4
- package/dist/core/ingest/identity.js +4 -4
- package/dist/core/json-config-merge.d.ts.map +1 -1
- package/dist/core/json-config-merge.js +30 -7
- package/dist/core/json-config-merge.js.map +1 -1
- package/dist/core/migrations/add-explanation-craft-skill.d.ts +26 -0
- package/dist/core/migrations/add-explanation-craft-skill.d.ts.map +1 -0
- package/dist/core/migrations/add-explanation-craft-skill.js +94 -0
- package/dist/core/migrations/add-explanation-craft-skill.js.map +1 -0
- package/dist/core/migrations/archive-destination-from-taxonomy.d.ts +35 -0
- package/dist/core/migrations/archive-destination-from-taxonomy.d.ts.map +1 -0
- package/dist/core/migrations/archive-destination-from-taxonomy.js +109 -0
- package/dist/core/migrations/archive-destination-from-taxonomy.js.map +1 -0
- package/dist/core/migrations/drop-access-axes.d.ts +24 -0
- package/dist/core/migrations/drop-access-axes.d.ts.map +1 -0
- package/dist/core/migrations/drop-access-axes.js +54 -0
- package/dist/core/migrations/drop-access-axes.js.map +1 -0
- package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts +19 -0
- package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts.map +1 -0
- package/dist/core/migrations/drop-forge-and-workspaces-external.js +49 -0
- package/dist/core/migrations/drop-forge-and-workspaces-external.js.map +1 -0
- package/dist/core/migrations/registry.d.ts +11 -1
- package/dist/core/migrations/registry.d.ts.map +1 -1
- package/dist/core/migrations/registry.js +19 -3
- package/dist/core/migrations/registry.js.map +1 -1
- package/dist/core/notes/list.d.ts +1 -12
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js +5 -1
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/publish/script-check.d.ts +12 -0
- package/dist/core/publish/script-check.d.ts.map +1 -0
- package/dist/core/publish/script-check.js +39 -0
- package/dist/core/publish/script-check.js.map +1 -0
- package/dist/core/reconcile.d.ts +3 -0
- package/dist/core/reconcile.d.ts.map +1 -1
- package/dist/core/reconcile.js +15 -5
- package/dist/core/reconcile.js.map +1 -1
- package/dist/core/records.d.ts +4 -5
- package/dist/core/records.d.ts.map +1 -1
- package/dist/core/records.js +0 -2
- package/dist/core/records.js.map +1 -1
- package/dist/core/session.d.ts +9 -9
- package/dist/core/session.js +9 -9
- package/dist/core/skills.d.ts +42 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +159 -31
- package/dist/core/skills.js.map +1 -1
- package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -1
- package/dist/core/write-lifecycle/path-gate.js +4 -2
- package/dist/core/write-lifecycle/path-gate.js.map +1 -1
- package/dist/prompt/inquirer-prompter.d.ts.map +1 -1
- package/dist/prompt/inquirer-prompter.js +11 -1
- package/dist/prompt/inquirer-prompter.js.map +1 -1
- package/dist/prompt/prompter.d.ts +16 -0
- package/dist/prompt/prompter.d.ts.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +69 -101
- package/dist/run.js.map +1 -1
- package/dist/taxonomy/profiles.d.ts +11 -0
- package/dist/taxonomy/profiles.d.ts.map +1 -1
- package/dist/taxonomy/profiles.js +1 -0
- package/dist/taxonomy/profiles.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -1
- package/templates/agents/canonical.md +1 -3
- package/templates/conventions/baseline-conventions.md +27 -0
- package/templates/conventions/{custom-convention-seed.md → house-conventions-seed.md} +15 -2
- package/templates/hooks/pre-push.sh +1 -1
- package/templates/serve/shell.html +18 -0
- package/templates/serve/style.css +163 -0
- package/templates/skills/ctxr-land.md +32 -18
- package/templates/skills/ctxr-organize-audit.md +2 -10
- package/templates/skills/ctxr-placement.md +6 -24
- package/templates/skills/ctxr-publish.md +84 -0
- package/templates/skills/ctxr-session-capture.md +43 -3
- package/templates/skills/ctxr-session-lifecycle.md +20 -1
- package/templates/skills/ctxr-submit.md +15 -11
- package/templates/vendor/eli5/LICENSE.txt +21 -0
- package/templates/vendor/eli5/SKILL.md +116 -0
- package/templates/vendor/eli5/provenance.json +8 -0
- package/templates/vendor/frontend-design/LICENSE.txt +177 -0
- package/templates/vendor/frontend-design/SKILL.md +55 -0
- package/templates/vendor/frontend-design/provenance.json +7 -0
- package/dist/adapters/forge/github.d.ts +0 -12
- package/dist/adapters/forge/github.d.ts.map +0 -1
- package/dist/adapters/forge/github.js +0 -76
- package/dist/adapters/forge/github.js.map +0 -1
- package/dist/adapters/forge/types.d.ts +0 -46
- package/dist/adapters/forge/types.d.ts.map +0 -1
- package/dist/adapters/forge/types.js +0 -2
- package/dist/adapters/forge/types.js.map +0 -1
- package/dist/commands/check.d.ts +0 -30
- package/dist/commands/check.d.ts.map +0 -1
- package/dist/commands/check.js +0 -70
- package/dist/commands/check.js.map +0 -1
- package/dist/commands/note-resolve.d.ts +0 -14
- package/dist/commands/note-resolve.d.ts.map +0 -1
- package/dist/commands/note-resolve.js +0 -24
- package/dist/commands/note-resolve.js.map +0 -1
- package/dist/commands/session-abandon.d.ts +0 -13
- package/dist/commands/session-abandon.d.ts.map +0 -1
- package/dist/commands/session-abandon.js +0 -22
- package/dist/commands/session-abandon.js.map +0 -1
- package/dist/commands/session-land.d.ts +0 -45
- package/dist/commands/session-land.d.ts.map +0 -1
- package/dist/commands/session-land.js +0 -171
- package/dist/commands/session-land.js.map +0 -1
- package/dist/commands/session-reap.d.ts +0 -22
- package/dist/commands/session-reap.d.ts.map +0 -1
- package/dist/commands/session-reap.js +0 -52
- package/dist/commands/session-reap.js.map +0 -1
- package/dist/commands/session-submit.d.ts +0 -29
- package/dist/commands/session-submit.d.ts.map +0 -1
- package/dist/commands/session-submit.js +0 -72
- package/dist/commands/session-submit.js.map +0 -1
- package/dist/core/checks/disclosure-checks.d.ts +0 -4
- package/dist/core/checks/disclosure-checks.d.ts.map +0 -1
- package/dist/core/checks/disclosure-checks.js +0 -24
- package/dist/core/checks/disclosure-checks.js.map +0 -1
- package/dist/core/disclosure/leak-scan.d.ts +0 -19
- package/dist/core/disclosure/leak-scan.d.ts.map +0 -1
- package/dist/core/disclosure/leak-scan.js +0 -31
- package/dist/core/disclosure/leak-scan.js.map +0 -1
- package/dist/core/disclosure/model.d.ts +0 -18
- package/dist/core/disclosure/model.d.ts.map +0 -1
- package/dist/core/disclosure/model.js +0 -45
- package/dist/core/disclosure/model.js.map +0 -1
- package/dist/core/graph/visibility-filter.d.ts +0 -13
- package/dist/core/graph/visibility-filter.d.ts.map +0 -1
- package/dist/core/graph/visibility-filter.js +0 -26
- package/dist/core/graph/visibility-filter.js.map +0 -1
- package/dist/core/migrations/rename-visibility-field.d.ts +0 -3
- package/dist/core/migrations/rename-visibility-field.d.ts.map +0 -1
- package/dist/core/migrations/rename-visibility-field.js +0 -62
- package/dist/core/migrations/rename-visibility-field.js.map +0 -1
- package/dist/core/notes/checks.d.ts +0 -20
- package/dist/core/notes/checks.d.ts.map +0 -1
- package/dist/core/notes/checks.js +0 -58
- package/dist/core/notes/checks.js.map +0 -1
- package/dist/core/notes/visibility.d.ts +0 -26
- package/dist/core/notes/visibility.d.ts.map +0 -1
- package/dist/core/notes/visibility.js +0 -41
- package/dist/core/notes/visibility.js.map +0 -1
- package/templates/conventions/baseline-convention.md +0 -60
package/dist/core/exit-codes.js
CHANGED
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
* else. That keeps `1` from ever being confused with "the command ran
|
|
8
8
|
* correctly and found a real problem" — which is `CheckFailed`, not `Internal`.
|
|
9
9
|
*
|
|
10
|
-
* `4` and `5`
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* `4` and `5` were allocated for the disclosure-policy tri-state
|
|
11
|
+
* (ALLOW/DENY/ASK) and are unused since that capability was retired
|
|
12
|
+
* (retire-the-access-axes, design.md D4). They stay allocated rather than
|
|
13
|
+
* reclaimed: a future disclosure mechanism should find them waiting, not
|
|
14
|
+
* find them reassigned to something unrelated.
|
|
13
15
|
*
|
|
14
16
|
* This table is allocated once, here, and is never extended by guessing a
|
|
15
17
|
* number under pressure in a later phase.
|
|
@@ -23,9 +25,9 @@ export const ExitCode = {
|
|
|
23
25
|
Usage: 2,
|
|
24
26
|
/** The command ran correctly and determined a real problem exists. */
|
|
25
27
|
CheckFailed: 3,
|
|
26
|
-
/** Reserved for
|
|
28
|
+
/** Reserved for a future disclosure tri-state: DENY. Currently unused. */
|
|
27
29
|
DisclosureDeny: 4,
|
|
28
|
-
/** Reserved for
|
|
30
|
+
/** Reserved for a future disclosure tri-state: ASK. Currently unused. */
|
|
29
31
|
DisclosureAsk: 5,
|
|
30
32
|
};
|
|
31
33
|
//# sourceMappingURL=exit-codes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/core/exit-codes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/core/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,+CAA+C;IAC/C,EAAE,EAAE,CAAC;IACL,6EAA6E;IAC7E,QAAQ,EAAE,CAAC;IACX,uFAAuF;IACvF,KAAK,EAAE,CAAC;IACR,sEAAsE;IACtE,WAAW,EAAE,CAAC;IACd,0EAA0E;IAC1E,cAAc,EAAE,CAAC;IACjB,yEAAyE;IACzE,aAAa,EAAE,CAAC;CACR,CAAC"}
|
package/dist/core/git/repo.d.ts
CHANGED
|
@@ -53,8 +53,6 @@ export declare function isLinkedWorktreeRoot(root: string): boolean;
|
|
|
53
53
|
export declare function hasGitIdentity(git: GitRunner, cwd: string, env: Readonly<Record<string, string | undefined>>): Promise<boolean>;
|
|
54
54
|
export declare function gitInit(git: GitRunner, cwd: string): Promise<void>;
|
|
55
55
|
export declare function currentBranch(git: GitRunner, cwd: string): Promise<string>;
|
|
56
|
-
/** session-submit-and-land spec: renames the CURRENT branch (the checkout's HEAD moves with it) — used by `session submit --branch`. */
|
|
57
|
-
export declare function renameCurrentBranch(git: GitRunner, cwd: string, newName: string): Promise<void>;
|
|
58
56
|
/** Explicit pathspecs only — never `-A` — so `init` stages exactly the scaffold it wrote. */
|
|
59
57
|
export declare function addPaths(git: GitRunner, cwd: string, paths: readonly string[]): Promise<void>;
|
|
60
58
|
export declare function hasStagedChanges(git: GitRunner, cwd: string): Promise<boolean>;
|
|
@@ -68,8 +66,4 @@ export declare function movePath(git: GitRunner, cwd: string, from: string, to:
|
|
|
68
66
|
export declare function isTracked(git: GitRunner, cwd: string, relativePath: string): Promise<boolean>;
|
|
69
67
|
/** Skips the commit (returns null) when nothing is staged — what makes re-init idempotent. */
|
|
70
68
|
export declare function commitIfStaged(git: GitRunner, cwd: string, mode: WriteMode, message: string): Promise<string | null>;
|
|
71
|
-
/** Pushes a session branch to the remote — never the default branch, which the installed hook refuses anyway. */
|
|
72
|
-
export declare function pushBranch(git: GitRunner, cwd: string, branch: string, remote?: string): Promise<void>;
|
|
73
|
-
/** Whole-tree dirty check (staged AND unstaged) — distinct from hasStagedChanges, used by session reap. */
|
|
74
|
-
export declare function isWorkingTreeClean(git: GitRunner, cwd: string): Promise<boolean>;
|
|
75
69
|
//# sourceMappingURL=repo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../../src/core/git/repo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,mGAAmG;AACnG,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAQvF;AAED,qGAAqG;AACrG,wBAAsB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAc1D;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAChD,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAED,
|
|
1
|
+
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../../src/core/git/repo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,mGAAmG;AACnG,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAQvF;AAED,qGAAqG;AACrG,wBAAsB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAc1D;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAChD,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAED,6FAA6F;AAC7F,wBAAsB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnG;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpF;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnG;AAED,+LAA+L;AAC/L,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnG;AAED,8FAA8F;AAC9F,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
|
package/dist/core/git/repo.js
CHANGED
|
@@ -73,10 +73,6 @@ export async function currentBranch(git, cwd) {
|
|
|
73
73
|
const result = await git.run(['symbolic-ref', '--short', 'HEAD'], { cwd });
|
|
74
74
|
return result.stdout.trim();
|
|
75
75
|
}
|
|
76
|
-
/** session-submit-and-land spec: renames the CURRENT branch (the checkout's HEAD moves with it) — used by `session submit --branch`. */
|
|
77
|
-
export async function renameCurrentBranch(git, cwd, newName) {
|
|
78
|
-
await git.run(['branch', '-m', newName], { cwd });
|
|
79
|
-
}
|
|
80
76
|
/** Explicit pathspecs only — never `-A` — so `init` stages exactly the scaffold it wrote. */
|
|
81
77
|
export async function addPaths(git, cwd, paths) {
|
|
82
78
|
if (paths.length === 0)
|
|
@@ -111,13 +107,4 @@ export async function commitIfStaged(git, cwd, mode, message) {
|
|
|
111
107
|
const result = await git.run(['rev-parse', 'HEAD'], { cwd });
|
|
112
108
|
return result.stdout.trim();
|
|
113
109
|
}
|
|
114
|
-
/** Pushes a session branch to the remote — never the default branch, which the installed hook refuses anyway. */
|
|
115
|
-
export async function pushBranch(git, cwd, branch, remote = 'origin') {
|
|
116
|
-
await git.run(['push', '--set-upstream', remote, branch], { cwd });
|
|
117
|
-
}
|
|
118
|
-
/** Whole-tree dirty check (staged AND unstaged) — distinct from hasStagedChanges, used by session reap. */
|
|
119
|
-
export async function isWorkingTreeClean(git, cwd) {
|
|
120
|
-
const result = await git.run(['status', '--porcelain'], { cwd });
|
|
121
|
-
return result.stdout.trim().length === 0;
|
|
122
|
-
}
|
|
123
110
|
//# sourceMappingURL=repo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../../src/core/git/repo.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../../src/core/git/repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,13 +10,6 @@ export declare function hasRemote(git: GitRunner, cwd: string, name?: string): P
|
|
|
10
10
|
*/
|
|
11
11
|
export declare function fetchOrigin(git: GitRunner, cwd: string, branch: string, remote?: string): Promise<boolean>;
|
|
12
12
|
export declare function addWorktree(git: GitRunner, cwd: string, worktreePath: string, newBranch: string, startPoint: string): Promise<void>;
|
|
13
|
-
export declare function removeWorktree(git: GitRunner, cwd: string, worktreePath: string, opts?: {
|
|
14
|
-
force?: boolean;
|
|
15
|
-
}): Promise<void>;
|
|
16
|
-
export declare function pruneWorktrees(git: GitRunner, cwd: string): Promise<void>;
|
|
17
|
-
export declare function deleteBranch(git: GitRunner, cwd: string, branch: string, opts?: {
|
|
18
|
-
force?: boolean;
|
|
19
|
-
}): Promise<void>;
|
|
20
13
|
export interface WorktreeInfo {
|
|
21
14
|
path: string;
|
|
22
15
|
branch: string | null;
|
|
@@ -32,6 +25,10 @@ export declare function listWorktrees(git: GitRunner, cwd: string): Promise<Work
|
|
|
32
25
|
* worktree the command was invoked from. Falls back to the passed cwd when the
|
|
33
26
|
* list is empty rather than throwing — a repository with no linked worktrees
|
|
34
27
|
* then behaves exactly as a caller that never asked.
|
|
28
|
+
*
|
|
29
|
+
* stabilize-write-gate-hook-path: used to anchor a generated enforcement
|
|
30
|
+
* primitive's own absolute invocation path (e.g. the write-gate hook command)
|
|
31
|
+
* at a location that outlives any single session worktree.
|
|
35
32
|
*/
|
|
36
33
|
export declare function mainWorktreePath(git: GitRunner, cwd: string): Promise<string>;
|
|
37
34
|
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../../src/core/git/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9F;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlH;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../../src/core/git/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9F;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlH;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAkBnE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAGxF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGnF"}
|
|
@@ -19,16 +19,6 @@ export async function fetchOrigin(git, cwd, branch, remote = 'origin') {
|
|
|
19
19
|
export async function addWorktree(git, cwd, worktreePath, newBranch, startPoint) {
|
|
20
20
|
await git.run(['worktree', 'add', '-b', newBranch, worktreePath, startPoint], { cwd });
|
|
21
21
|
}
|
|
22
|
-
export async function removeWorktree(git, cwd, worktreePath, opts = {}) {
|
|
23
|
-
const args = ['worktree', 'remove', worktreePath, ...(opts.force ? ['--force'] : [])];
|
|
24
|
-
await git.run(args, { cwd });
|
|
25
|
-
}
|
|
26
|
-
export async function pruneWorktrees(git, cwd) {
|
|
27
|
-
await git.run(['worktree', 'prune'], { cwd });
|
|
28
|
-
}
|
|
29
|
-
export async function deleteBranch(git, cwd, branch, opts = {}) {
|
|
30
|
-
await git.run(['branch', opts.force ? '-D' : '-d', branch], { cwd });
|
|
31
|
-
}
|
|
32
22
|
/** Parses `git worktree list --porcelain`'s block format (blocks separated by a blank line). */
|
|
33
23
|
export function parseWorktreeList(porcelain) {
|
|
34
24
|
const blocks = porcelain.split('\n\n').map((b) => b.trim()).filter(Boolean);
|
|
@@ -64,6 +54,10 @@ export async function listWorktrees(git, cwd) {
|
|
|
64
54
|
* worktree the command was invoked from. Falls back to the passed cwd when the
|
|
65
55
|
* list is empty rather than throwing — a repository with no linked worktrees
|
|
66
56
|
* then behaves exactly as a caller that never asked.
|
|
57
|
+
*
|
|
58
|
+
* stabilize-write-gate-hook-path: used to anchor a generated enforcement
|
|
59
|
+
* primitive's own absolute invocation path (e.g. the write-gate hook command)
|
|
60
|
+
* at a location that outlives any single session worktree.
|
|
67
61
|
*/
|
|
68
62
|
export async function mainWorktreePath(git, cwd) {
|
|
69
63
|
const worktrees = await listWorktrees(git, cwd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/core/git/worktree.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAc,EAAE,GAAW,EAAE,IAAI,GAAG,QAAQ;IAC1E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAc,EAAE,GAAW,EAAE,MAAc,EAAE,MAAM,GAAG,QAAQ;IAC9F,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAc,EACd,GAAW,EACX,YAAoB,EACpB,SAAiB,EACjB,UAAkB;IAElB,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AACzF,CAAC;
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/core/git/worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,6 +72,20 @@ export declare function extractLinkTargets(body: string): string[];
|
|
|
72
72
|
* link, consistent with "two same-named notes are a valid, expected state"
|
|
73
73
|
* (the node-identity requirement's own scenario).
|
|
74
74
|
*/
|
|
75
|
+
/**
|
|
76
|
+
* The filename-stem -> path(s) index every wikilink resolution in the
|
|
77
|
+
* system reads (the graph build here, and local-browsing-surface's
|
|
78
|
+
* link-resolver) — factored out so both consult exactly one index and can't
|
|
79
|
+
* silently diverge on what a stem resolves to.
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildStemIndex(notes: readonly Note[]): Map<string, string[]>;
|
|
82
|
+
export type StemResolution = {
|
|
83
|
+
path: string;
|
|
84
|
+
} | {
|
|
85
|
+
reason: DanglingReason;
|
|
86
|
+
};
|
|
87
|
+
/** Classifies a wikilink target against a stem index — exactly one match resolves, zero or many don't. */
|
|
88
|
+
export declare function resolveStem(stemIndex: ReadonlyMap<string, string[]>, target: string): StemResolution;
|
|
75
89
|
export declare function buildGraphFromNotes(notes: readonly Note[], options?: GraphBuildOptions): GraphBuildResult;
|
|
76
90
|
/** The build options a store's configuration implies — the one place config is translated for the graph. */
|
|
77
91
|
export declare function graphBuildOptions(config: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/core/graph/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,kGAAkG;AAClG,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,8HAA8H;IAC9H,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,mEAAmE;AACnE,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAA8B,GAAG,MAAM,CAIzF;AAKD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAMD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,MAAM,EAAO,GAAG,cAAc,EAAE,CAuB9F;AAYD,uIAAuI;AACvI,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/core/graph/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,kGAAkG;AAClG,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,8HAA8H;IAC9H,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,mEAAmE;AACnE,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAA8B,GAAG,MAAM,CAIzF;AAKD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAMD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,MAAM,EAAO,GAAG,cAAc,EAAE,CAuB9F;AAYD,uIAAuI;AACvI,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzD;AAED;;;;;;;;;;;;GAYG;AACH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAS5E;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAE3E,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAKpG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CA2B7G;AAED,4GAA4G;AAC5G,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE;QAAE,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE;YAAE,aAAa,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GAAG,iBAAiB,CAE9I"}
|
package/dist/core/graph/model.js
CHANGED
|
@@ -77,6 +77,31 @@ export function extractLinkTargets(body) {
|
|
|
77
77
|
* link, consistent with "two same-named notes are a valid, expected state"
|
|
78
78
|
* (the node-identity requirement's own scenario).
|
|
79
79
|
*/
|
|
80
|
+
/**
|
|
81
|
+
* The filename-stem -> path(s) index every wikilink resolution in the
|
|
82
|
+
* system reads (the graph build here, and local-browsing-surface's
|
|
83
|
+
* link-resolver) — factored out so both consult exactly one index and can't
|
|
84
|
+
* silently diverge on what a stem resolves to.
|
|
85
|
+
*/
|
|
86
|
+
export function buildStemIndex(notes) {
|
|
87
|
+
const stemIndex = new Map();
|
|
88
|
+
for (const note of notes) {
|
|
89
|
+
const stem = path.basename(note.path, '.md');
|
|
90
|
+
const list = stemIndex.get(stem) ?? [];
|
|
91
|
+
list.push(note.path);
|
|
92
|
+
stemIndex.set(stem, list);
|
|
93
|
+
}
|
|
94
|
+
return stemIndex;
|
|
95
|
+
}
|
|
96
|
+
/** Classifies a wikilink target against a stem index — exactly one match resolves, zero or many don't. */
|
|
97
|
+
export function resolveStem(stemIndex, target) {
|
|
98
|
+
const resolved = stemIndex.get(target);
|
|
99
|
+
if (!resolved)
|
|
100
|
+
return { reason: 'not_found' };
|
|
101
|
+
if (resolved.length > 1)
|
|
102
|
+
return { reason: 'ambiguous' };
|
|
103
|
+
return { path: resolved[0] };
|
|
104
|
+
}
|
|
80
105
|
export function buildGraphFromNotes(notes, options = {}) {
|
|
81
106
|
const idCounts = new Map();
|
|
82
107
|
for (const note of notes)
|
|
@@ -85,28 +110,19 @@ export function buildGraphFromNotes(notes, options = {}) {
|
|
|
85
110
|
if (collisions.length > 0) {
|
|
86
111
|
throw new GraphIdentityCollisionError(collisions);
|
|
87
112
|
}
|
|
88
|
-
const stemIndex =
|
|
89
|
-
for (const note of notes) {
|
|
90
|
-
const stem = path.basename(note.path, '.md');
|
|
91
|
-
const list = stemIndex.get(stem) ?? [];
|
|
92
|
-
list.push(note.path);
|
|
93
|
-
stemIndex.set(stem, list);
|
|
94
|
-
}
|
|
113
|
+
const stemIndex = buildStemIndex(notes);
|
|
95
114
|
const depth = options.clusterDepth ?? DEFAULT_CLUSTER_DEPTH;
|
|
96
115
|
const nodes = notes.map((n) => ({ id: n.path, path: n.path, cluster: clusterOf(n.path, depth) }));
|
|
97
116
|
const edges = [];
|
|
98
117
|
const dangling = [];
|
|
99
118
|
for (const note of notes) {
|
|
100
119
|
for (const { target, type } of extractLinks(note.body, options.relations ?? [])) {
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
103
|
-
dangling.push({ from: note.path, target, reason:
|
|
104
|
-
}
|
|
105
|
-
else if (resolved.length > 1) {
|
|
106
|
-
dangling.push({ from: note.path, target, reason: 'ambiguous' });
|
|
120
|
+
const resolution = resolveStem(stemIndex, target);
|
|
121
|
+
if ('reason' in resolution) {
|
|
122
|
+
dangling.push({ from: note.path, target, reason: resolution.reason });
|
|
107
123
|
}
|
|
108
124
|
else {
|
|
109
|
-
edges.push({ src: note.path, dst:
|
|
125
|
+
edges.push({ src: note.path, dst: resolution.path, type });
|
|
110
126
|
}
|
|
111
127
|
}
|
|
112
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/graph/model.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/graph/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { StoreConfig } from '../../config/schema.js';
|
|
2
|
+
export interface HarnessBridgeResult {
|
|
3
|
+
/** The harness-generation adapter id this bridge is for. */
|
|
4
|
+
harness: string;
|
|
5
|
+
/** Store-relative harness skills directory that was bridged. */
|
|
6
|
+
path: string;
|
|
7
|
+
mode: 'symlink' | 'copy';
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The effective skills directory for a configured harness-generation
|
|
11
|
+
* adapter: a store's own override (`adapters[].skills_dir`) takes
|
|
12
|
+
* precedence over the adapter's declared default.
|
|
13
|
+
*/
|
|
14
|
+
export declare function effectiveSkillsDir(config: StoreConfig, adapterId: string, adapterDefault: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Bridges every declared harness-generation adapter's skills directory to
|
|
17
|
+
* the store's configured (canonical) skills path — never derived by
|
|
18
|
+
* inspecting the host machine, always from configuration. An adapter whose
|
|
19
|
+
* effective directory already equals the canonical path needs no bridge and
|
|
20
|
+
* is silently skipped. Returns only the harnesses that actually changed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function bridgeHarnessSkills(root: string, config: StoreConfig): Promise<HarnessBridgeResult[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Read-only counterpart for `ctxr doctor`: true when a declared harness's
|
|
25
|
+
* skills directory is broken — materialized as something other than a
|
|
26
|
+
* bridge to canonical — without writing anything. Mirrors `ensureBridge`'s
|
|
27
|
+
* detection exactly; only the repair action differs.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isBridgeBroken(root: string, canonicalPath: string, harnessDir: string): Promise<boolean>;
|
|
30
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/core/harness/bridge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;CAC1B;AA+HD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAGzG;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmB3G;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAM9G"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { cp, lstat, mkdir, readFile, readdir, realpath, rm, symlink } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { configuredAdapters } from '../../adapters/registry.js';
|
|
4
|
+
/** Resolves a path to its real path, or itself (as an absolute path) if it does not exist. */
|
|
5
|
+
async function realOrSelf(p) {
|
|
6
|
+
try {
|
|
7
|
+
return await realpath(p);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return path.resolve(p);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolves a path's PARENT through symlinks, keeping the final path
|
|
15
|
+
* component literal. Handles the case where a parent directory (e.g. the
|
|
16
|
+
* store root itself) is reached through a link, so two paths that are
|
|
17
|
+
* physically the same location but written with different parent spellings
|
|
18
|
+
* still compare equal.
|
|
19
|
+
*/
|
|
20
|
+
async function realParentPlusBase(p) {
|
|
21
|
+
const resolved = path.resolve(p);
|
|
22
|
+
const dir = path.dirname(resolved);
|
|
23
|
+
const base = path.basename(resolved);
|
|
24
|
+
try {
|
|
25
|
+
const realDir = await realpath(dir);
|
|
26
|
+
return path.join(realDir, base);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return resolved;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* True when `harnessAbs` already resolves to the same real location as
|
|
34
|
+
* `canonicalAbs` — directly, or through a symlinked parent directory.
|
|
35
|
+
* Checked both ways so neither a symlinked store root nor a symlinked
|
|
36
|
+
* canonical directory causes a bridge that is already correct to be
|
|
37
|
+
* rewritten, or — worse — the canonical directory to be deleted out from
|
|
38
|
+
* under itself.
|
|
39
|
+
*/
|
|
40
|
+
async function alreadyBridged(canonicalAbs, harnessAbs) {
|
|
41
|
+
const [realCanonical, realHarness] = await Promise.all([realOrSelf(canonicalAbs), realOrSelf(harnessAbs)]);
|
|
42
|
+
if (realCanonical === realHarness)
|
|
43
|
+
return true;
|
|
44
|
+
const [canonicalViaParent, harnessViaParent] = await Promise.all([realParentPlusBase(canonicalAbs), realParentPlusBase(harnessAbs)]);
|
|
45
|
+
return canonicalViaParent === harnessViaParent;
|
|
46
|
+
}
|
|
47
|
+
/** True only for a real directory — false for a symlink (even one pointing at a directory), so a misdirected link is always repaired rather than judged by its target's contents. */
|
|
48
|
+
async function isPlainDirectory(p) {
|
|
49
|
+
try {
|
|
50
|
+
return (await lstat(p)).isDirectory();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function readDirTree(root, sub = '') {
|
|
57
|
+
const result = new Map();
|
|
58
|
+
let entries;
|
|
59
|
+
try {
|
|
60
|
+
entries = await readdir(path.join(root, sub), { withFileTypes: true });
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
const rel = sub ? `${sub}/${entry.name}` : entry.name;
|
|
67
|
+
if (entry.isDirectory()) {
|
|
68
|
+
for (const [k, v] of await readDirTree(root, rel))
|
|
69
|
+
result.set(k, v);
|
|
70
|
+
}
|
|
71
|
+
else if (entry.isFile()) {
|
|
72
|
+
result.set(rel, await readFile(path.join(root, rel), 'utf8'));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
/** Whole-tree byte comparison — cheap at skill-directory scale, and simpler than tracking per-file mtimes. */
|
|
78
|
+
async function directoriesMatch(a, b) {
|
|
79
|
+
const [treeA, treeB] = await Promise.all([readDirTree(a), readDirTree(b)]);
|
|
80
|
+
if (treeA.size !== treeB.size)
|
|
81
|
+
return false;
|
|
82
|
+
for (const [rel, content] of treeA) {
|
|
83
|
+
if (treeB.get(rel) !== content)
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
async function createDirSymlink(canonicalAbs, harnessAbs) {
|
|
89
|
+
await mkdir(path.dirname(harnessAbs), { recursive: true });
|
|
90
|
+
// A relative target keeps the link correct across a clone at a different absolute path.
|
|
91
|
+
const relativeTarget = path.relative(path.dirname(harnessAbs), canonicalAbs);
|
|
92
|
+
try {
|
|
93
|
+
await symlink(relativeTarget, harnessAbs, 'dir');
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async function copySkillsInto(canonicalAbs, harnessAbs) {
|
|
101
|
+
await mkdir(harnessAbs, { recursive: true });
|
|
102
|
+
await cp(canonicalAbs, harnessAbs, { recursive: true });
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* harness-portability spec (vendored-craft-skills): makes `harnessAbs`
|
|
106
|
+
* resolve to `canonicalAbs`, preferring a directory symlink and falling
|
|
107
|
+
* back to a recursive copy when one cannot be created. Idempotent: a
|
|
108
|
+
* directory that already resolves to canonical (directly, through a
|
|
109
|
+
* symlinked parent, or as a copy whose content still matches) is left
|
|
110
|
+
* untouched and reported as unchanged. A symlink that does not resolve to
|
|
111
|
+
* canonical is always replaced regardless of what it currently points at —
|
|
112
|
+
* never judged "close enough" by its target's contents — which is what
|
|
113
|
+
* makes a misdirected or materialized-as-a-file bridge repairable rather
|
|
114
|
+
* than silently tolerated.
|
|
115
|
+
*/
|
|
116
|
+
async function ensureBridge(canonicalAbs, harnessAbs) {
|
|
117
|
+
if (await alreadyBridged(canonicalAbs, harnessAbs))
|
|
118
|
+
return 'unchanged';
|
|
119
|
+
if ((await isPlainDirectory(harnessAbs)) && (await directoriesMatch(canonicalAbs, harnessAbs))) {
|
|
120
|
+
return 'unchanged';
|
|
121
|
+
}
|
|
122
|
+
await rm(harnessAbs, { recursive: true, force: true });
|
|
123
|
+
if (await createDirSymlink(canonicalAbs, harnessAbs))
|
|
124
|
+
return 'symlink';
|
|
125
|
+
await copySkillsInto(canonicalAbs, harnessAbs);
|
|
126
|
+
return 'copy';
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The effective skills directory for a configured harness-generation
|
|
130
|
+
* adapter: a store's own override (`adapters[].skills_dir`) takes
|
|
131
|
+
* precedence over the adapter's declared default.
|
|
132
|
+
*/
|
|
133
|
+
export function effectiveSkillsDir(config, adapterId, adapterDefault) {
|
|
134
|
+
const declaration = config.adapters.find((d) => d.kind === 'harness-generation' && d.id === adapterId);
|
|
135
|
+
return declaration?.skills_dir ?? adapterDefault;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Bridges every declared harness-generation adapter's skills directory to
|
|
139
|
+
* the store's configured (canonical) skills path — never derived by
|
|
140
|
+
* inspecting the host machine, always from configuration. An adapter whose
|
|
141
|
+
* effective directory already equals the canonical path needs no bridge and
|
|
142
|
+
* is silently skipped. Returns only the harnesses that actually changed.
|
|
143
|
+
*/
|
|
144
|
+
export async function bridgeHarnessSkills(root, config) {
|
|
145
|
+
const canonical = config.harness.skills_path;
|
|
146
|
+
// path.resolve, not path.join: these configured paths conventionally end
|
|
147
|
+
// in "/", and fs.symlink's destination argument treats a trailing slash
|
|
148
|
+
// as "this must already be a directory" — failing with ENOENT on the
|
|
149
|
+
// (correct) case where it doesn't exist yet because we're creating it.
|
|
150
|
+
const canonicalAbs = path.resolve(root, canonical);
|
|
151
|
+
const results = [];
|
|
152
|
+
for (const adapter of configuredAdapters(config, 'harness-generation')) {
|
|
153
|
+
const harnessDir = effectiveSkillsDir(config, adapter.id, adapter.skillsDir);
|
|
154
|
+
if (harnessDir === canonical)
|
|
155
|
+
continue;
|
|
156
|
+
const harnessAbs = path.resolve(root, harnessDir);
|
|
157
|
+
const mode = await ensureBridge(canonicalAbs, harnessAbs);
|
|
158
|
+
if (mode !== 'unchanged')
|
|
159
|
+
results.push({ harness: adapter.id, path: harnessDir, mode });
|
|
160
|
+
}
|
|
161
|
+
return results;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Read-only counterpart for `ctxr doctor`: true when a declared harness's
|
|
165
|
+
* skills directory is broken — materialized as something other than a
|
|
166
|
+
* bridge to canonical — without writing anything. Mirrors `ensureBridge`'s
|
|
167
|
+
* detection exactly; only the repair action differs.
|
|
168
|
+
*/
|
|
169
|
+
export async function isBridgeBroken(root, canonicalPath, harnessDir) {
|
|
170
|
+
const canonicalAbs = path.resolve(root, canonicalPath);
|
|
171
|
+
const harnessAbs = path.resolve(root, harnessDir);
|
|
172
|
+
if (await alreadyBridged(canonicalAbs, harnessAbs))
|
|
173
|
+
return false;
|
|
174
|
+
if ((await isPlainDirectory(harnessAbs)) && (await directoriesMatch(canonicalAbs, harnessAbs)))
|
|
175
|
+
return false;
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/core/harness/bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Note } from '../notes/list.js';
|
|
2
2
|
/**
|
|
3
3
|
* context-ingest spec: "source type, source id, source hash, ingested
|
|
4
|
-
* date" — assigned once, at ingest, never before.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* date" — assigned once, at ingest, never before. Nothing asks these keys
|
|
5
|
+
* to be configurable, so they live here as the one set of literals every
|
|
6
|
+
* ingest-related module reads from, rather than each spelling out its own
|
|
7
|
+
* string.
|
|
8
8
|
*/
|
|
9
9
|
export declare const SOURCE_TYPE_FIELD = "source_type";
|
|
10
10
|
export declare const SOURCE_ID_FIELD = "source_id";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* context-ingest spec: "source type, source id, source hash, ingested
|
|
3
|
-
* date" — assigned once, at ingest, never before.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* date" — assigned once, at ingest, never before. Nothing asks these keys
|
|
4
|
+
* to be configurable, so they live here as the one set of literals every
|
|
5
|
+
* ingest-related module reads from, rather than each spelling out its own
|
|
6
|
+
* string.
|
|
7
7
|
*/
|
|
8
8
|
export const SOURCE_TYPE_FIELD = 'source_type';
|
|
9
9
|
export const SOURCE_ID_FIELD = 'source_id';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-config-merge.d.ts","sourceRoot":"","sources":["../../src/core/json-config-merge.ts"],"names":[],"mappings":"AAKA,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,CAAC;IAC5E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,gBAAgB,EAAE,CAAC;AAC7E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"json-config-merge.d.ts","sourceRoot":"","sources":["../../src/core/json-config-merge.ts"],"names":[],"mappings":"AAKA,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,CAAC;IAC5E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,gBAAgB,EAAE,CAAC;AAC7E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AA6ChG;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA4D/B"}
|