ctxr-cli 0.35.0 → 0.37.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/LICENSE +21 -201
- package/README.md +39 -11
- package/dist/commands/land.d.ts +1 -1
- package/dist/commands/land.d.ts.map +1 -1
- package/dist/commands/land.js +8 -4
- package/dist/commands/land.js.map +1 -1
- package/dist/commands/plugin-build.d.ts +21 -11
- package/dist/commands/plugin-build.d.ts.map +1 -1
- package/dist/commands/plugin-build.js +45 -24
- package/dist/commands/plugin-build.js.map +1 -1
- package/dist/commands/serve.d.ts +3 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +121 -23
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/session-submit.d.ts.map +1 -1
- package/dist/commands/session-submit.js +2 -0
- package/dist/commands/session-submit.js.map +1 -1
- package/dist/commands/sync.d.ts +50 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +186 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/version.d.ts.map +1 -1
- package/dist/commands/version.js +6 -3
- package/dist/commands/version.js.map +1 -1
- package/dist/config/defaults.d.ts +13 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +11 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +7 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/core/approval/sessions.d.ts.map +1 -1
- package/dist/core/approval/sessions.js +4 -2
- package/dist/core/approval/sessions.js.map +1 -1
- package/dist/core/browse/approve.d.ts.map +1 -1
- package/dist/core/browse/approve.js +12 -2
- package/dist/core/browse/approve.js.map +1 -1
- package/dist/core/browse/page-url.d.ts +13 -0
- package/dist/core/browse/page-url.d.ts.map +1 -1
- package/dist/core/browse/page-url.js +17 -0
- package/dist/core/browse/page-url.js.map +1 -1
- package/dist/core/browse/pull-preview.d.ts +67 -0
- package/dist/core/browse/pull-preview.d.ts.map +1 -0
- package/dist/core/browse/pull-preview.js +154 -0
- package/dist/core/browse/pull-preview.js.map +1 -0
- package/dist/core/browse/webhook.d.ts +38 -0
- package/dist/core/browse/webhook.d.ts.map +1 -0
- package/dist/core/browse/webhook.js +102 -0
- package/dist/core/browse/webhook.js.map +1 -0
- package/dist/core/command.d.ts +5 -3
- package/dist/core/command.d.ts.map +1 -1
- package/dist/core/errors.d.ts +16 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +27 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/git/exec.d.ts +16 -1
- package/dist/core/git/exec.d.ts.map +1 -1
- package/dist/core/git/exec.js +15 -4
- package/dist/core/git/exec.js.map +1 -1
- package/dist/core/git/fast-forward.d.ts +23 -0
- package/dist/core/git/fast-forward.d.ts.map +1 -1
- package/dist/core/git/fast-forward.js +24 -0
- package/dist/core/git/fast-forward.js.map +1 -1
- package/dist/core/git/hardened.d.ts +15 -0
- package/dist/core/git/hardened.d.ts.map +1 -0
- package/dist/core/git/hardened.js +123 -0
- package/dist/core/git/hardened.js.map +1 -0
- package/dist/core/install-kind.d.ts +10 -3
- package/dist/core/install-kind.d.ts.map +1 -1
- package/dist/core/install-kind.js +48 -14
- package/dist/core/install-kind.js.map +1 -1
- package/dist/core/mcp/surface.js +1 -1
- package/dist/core/mcp/surface.js.map +1 -1
- package/dist/core/mcp/sync.d.ts +4 -1
- package/dist/core/mcp/sync.d.ts.map +1 -1
- package/dist/core/mcp/sync.js +6 -5
- package/dist/core/mcp/sync.js.map +1 -1
- package/dist/core/mcp/tool-map.d.ts +13 -11
- package/dist/core/mcp/tool-map.d.ts.map +1 -1
- package/dist/core/mcp/tool-map.js +13 -11
- package/dist/core/mcp/tool-map.js.map +1 -1
- package/dist/core/mcp/tools/gather.d.ts.map +1 -1
- package/dist/core/mcp/tools/gather.js +5 -4
- package/dist/core/mcp/tools/gather.js.map +1 -1
- package/dist/core/mcp/tools/index.d.ts +9 -1
- package/dist/core/mcp/tools/index.d.ts.map +1 -1
- package/dist/core/mcp/tools/index.js +20 -3
- package/dist/core/mcp/tools/index.js.map +1 -1
- package/dist/core/npm-prefix.d.ts +10 -0
- package/dist/core/npm-prefix.d.ts.map +1 -0
- package/dist/core/npm-prefix.js +11 -0
- package/dist/core/npm-prefix.js.map +1 -0
- package/dist/core/plugin/build.d.ts +53 -26
- package/dist/core/plugin/build.d.ts.map +1 -1
- package/dist/core/plugin/build.js +153 -50
- package/dist/core/plugin/build.js.map +1 -1
- package/dist/core/plugin/commands.d.ts +11 -0
- package/dist/core/plugin/commands.d.ts.map +1 -0
- package/dist/core/plugin/commands.js +23 -0
- package/dist/core/plugin/commands.js.map +1 -0
- package/dist/core/plugin/routes.d.ts +11 -7
- package/dist/core/plugin/routes.d.ts.map +1 -1
- package/dist/core/plugin/routes.js +27 -24
- package/dist/core/plugin/routes.js.map +1 -1
- package/dist/core/session/submit.d.ts +7 -0
- package/dist/core/session/submit.d.ts.map +1 -1
- package/dist/core/session/submit.js +14 -3
- package/dist/core/session/submit.js.map +1 -1
- package/dist/core/shared-stores.d.ts +5 -0
- package/dist/core/shared-stores.d.ts.map +1 -1
- package/dist/core/shared-stores.js +10 -0
- package/dist/core/shared-stores.js.map +1 -1
- package/dist/core/skill-placeholders.d.ts +51 -0
- package/dist/core/skill-placeholders.d.ts.map +1 -0
- package/dist/core/skill-placeholders.js +55 -0
- package/dist/core/skill-placeholders.js.map +1 -0
- package/dist/core/skills.d.ts +37 -12
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +78 -89
- package/dist/core/skills.js.map +1 -1
- package/dist/core/store-update-runner.d.ts +57 -0
- package/dist/core/store-update-runner.d.ts.map +1 -0
- package/dist/core/{approval/lander.js → store-update-runner.js} +41 -17
- package/dist/core/store-update-runner.js.map +1 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +37 -6
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
- package/templates/approve/pages-note-pull.md +1 -0
- package/templates/conventions/baseline-conventions.md +5 -0
- package/templates/mcp/server-instructions.md +16 -0
- package/templates/plugin/README.md +30 -8
- package/templates/plugin/chatgpt-README.md +16 -0
- package/templates/plugin/claude-plugin.json +9 -1
- package/templates/plugin/command.md +7 -0
- package/templates/plugin/page.html +19 -8
- package/templates/skills/_surfaces.md +30 -0
- package/templates/skills/ctxr-placement.md +1 -1
- package/templates/skills/ctxr-session-lifecycle.md +6 -5
- package/templates/skills/ctxr-upgrade.md +5 -5
- package/templates/skills/mcp/_layer-step.md +18 -0
- package/templates/skills/mcp/_relation-grouping-step.md +5 -0
- package/dist/core/approval/lander.d.ts +0 -38
- package/dist/core/approval/lander.d.ts.map +0 -1
- package/dist/core/approval/lander.js.map +0 -1
- package/templates/plugin/claude-mcp.json +0 -8
- package/templates/skills/mcp/_preamble.md +0 -44
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place ctxr spawns npm: `npm prefix -g`, to learn where `npm install -g` writes, so the
|
|
3
|
+
* version report can tell whether that install would replace the running executable
|
|
4
|
+
* (install-tools-in-the-home D4). Only asked when NPM_CONFIG_PREFIX / npm_config_prefix do not
|
|
5
|
+
* already answer.
|
|
6
|
+
*/
|
|
7
|
+
export type NpmPrefixRunner = () => Promise<string | null>;
|
|
8
|
+
/** `npm prefix -g`, or null when npm is not on PATH, fails, or does not answer in time. */
|
|
9
|
+
export declare const askNpmForPrefix: NpmPrefixRunner;
|
|
10
|
+
//# sourceMappingURL=npm-prefix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-prefix.d.ts","sourceRoot":"","sources":["../../src/core/npm-prefix.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAI3D,2FAA2F;AAC3F,eAAO,MAAM,eAAe,EAAE,eAO1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const NPM_PREFIX_TIMEOUT_MS = 5_000;
|
|
4
|
+
/** `npm prefix -g`, or null when npm is not on PATH, fails, or does not answer in time. */
|
|
5
|
+
export const askNpmForPrefix = () => new Promise((resolve) => {
|
|
6
|
+
execFile('npm', ['prefix', '-g'], { timeout: NPM_PREFIX_TIMEOUT_MS, killSignal: 'SIGKILL', shell: process.platform === 'win32' }, (err, stdout) => {
|
|
7
|
+
const answer = String(stdout ?? '').trim();
|
|
8
|
+
resolve(err || answer === '' || !path.isAbsolute(answer) ? null : answer);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=npm-prefix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-prefix.js","sourceRoot":"","sources":["../../src/core/npm-prefix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAU7B,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAEpC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,eAAe,GAAoB,GAAG,EAAE,CACnD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,EAC9H,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,IAAI,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -2,16 +2,26 @@ import type { StoreConfig } from '../../config/schema.js';
|
|
|
2
2
|
import { ContextureError } from '../errors.js';
|
|
3
3
|
import type { GitRunner } from '../git/exec.js';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* what it returns to disk and the server answers with it from memory.
|
|
5
|
+
* The one builder behind `ctxr plugin build`, `npm run plugin` and serve's
|
|
6
|
+
* `/plugin/` page. It does no I/O of its own beyond reading the packaged
|
|
7
|
+
* templates, so the command writes what it returns to disk and the server
|
|
8
|
+
* answers with it from memory.
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* publish-one-contexture-plugin D1 (harness-portability spec, *contexture
|
|
11
|
+
* publishes one plugin for every store*): the Claude plugin is contexture's,
|
|
12
|
+
* not a store's. It is the MCP render of the owned skills, which takes no
|
|
13
|
+
* configuration, with a README and contexture's license, and no MCP server
|
|
14
|
+
* entry: each member adds their store's connector once, by its `/mcp` address.
|
|
15
|
+
* Its version is the CLI's, so a member's marketplace installs a new copy
|
|
16
|
+
* exactly at a release (D3). The repository commits it under `plugins/contexture/`.
|
|
17
|
+
*
|
|
18
|
+
* The ChatGPT plugin stays the store's (serve-the-session-lifecycle-to-chat-apps
|
|
19
|
+
* D7): ChatGPT has no marketplace on a personal plan, so it is the store's zip
|
|
20
|
+
* from `/plugin/`, carrying the same skills and one remote MCP server entry at
|
|
21
|
+
* `serve.base_url` + `/mcp`.
|
|
22
|
+
*
|
|
23
|
+
* Neither carries a credential (sign-in is the server's own OAuth with dynamic
|
|
24
|
+
* client registration), a variable in an address, a hook, a local server or a
|
|
15
25
|
* top-level `bin/` directory: the trees below are the whole of what is written.
|
|
16
26
|
*/
|
|
17
27
|
export declare const PLUGIN_TARGETS: readonly ['claude', 'chatgpt'];
|
|
@@ -19,34 +29,36 @@ export type PluginTarget = (typeof PLUGIN_TARGETS)[number];
|
|
|
19
29
|
/** Both vendors cap a plugin's and a skill's name at 64 characters, and a skill's description at 1,024. */
|
|
20
30
|
export declare const MAX_NAME_LENGTH = 64;
|
|
21
31
|
export declare const MAX_DESCRIPTION_LENGTH = 1024;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
cliVersion: string;
|
|
27
|
-
/** The commit the plugin is rendered from; null in a repository with no commit yet. */
|
|
28
|
-
commit: string | null;
|
|
29
|
-
}
|
|
32
|
+
/** The general Claude plugin's name (D5, revision 11: `contexture`, the product's name as plugins conventionally are, so its commands read `/contexture:submit`), and the marketplace in contexture's repository that lists it (D1). */
|
|
33
|
+
export declare const CLAUDE_PLUGIN_NAME = "contexture";
|
|
34
|
+
export declare const CLAUDE_PLUGIN_DISPLAY_NAME = "contexture";
|
|
35
|
+
export declare const PLUGIN_MARKETPLACE = "ayxuerui/contexture";
|
|
30
36
|
export interface BuiltPlugin {
|
|
31
37
|
target: PluginTarget;
|
|
38
|
+
name: string;
|
|
39
|
+
version: string;
|
|
32
40
|
/** Every file of the plugin directory, by posix path relative to it. */
|
|
33
41
|
files: ReadonlyMap<string, string>;
|
|
34
|
-
/**
|
|
42
|
+
/** The skill directories it carries. */
|
|
43
|
+
skills: string[];
|
|
35
44
|
archiveName: string;
|
|
36
45
|
/** The same files, as one ZIP archive with the manifest at its root. */
|
|
37
46
|
archive: Buffer;
|
|
38
47
|
}
|
|
39
|
-
export interface
|
|
48
|
+
export interface StorePluginInput {
|
|
49
|
+
config: StoreConfig;
|
|
50
|
+
/** The store's name, which the ChatGPT plugin's name and display name derive from. */
|
|
51
|
+
storeName: string;
|
|
52
|
+
cliVersion: string;
|
|
53
|
+
/** The commit the plugin is rendered from; null in a repository with no commit yet. */
|
|
54
|
+
commit: string | null;
|
|
55
|
+
}
|
|
56
|
+
export interface StorePlugin extends BuiltPlugin {
|
|
40
57
|
storeName: string;
|
|
41
|
-
name: string;
|
|
42
58
|
displayName: string;
|
|
43
|
-
version: string;
|
|
44
59
|
mcpUrl: string;
|
|
45
|
-
/** The skill directories both plugins carry. */
|
|
46
|
-
skills: string[];
|
|
47
|
-
plugins: BuiltPlugin[];
|
|
48
60
|
}
|
|
49
|
-
/** The configuration error a store without the MCP surface gets: there is no server for
|
|
61
|
+
/** The configuration error a store without the MCP surface gets for its ChatGPT plugin: there is no server for it to name. */
|
|
50
62
|
export declare class PluginWithoutMcpError extends ContextureError {
|
|
51
63
|
constructor();
|
|
52
64
|
}
|
|
@@ -57,7 +69,22 @@ export declare function fillPluginTemplate(file: string, values: Readonly<Record
|
|
|
57
69
|
export declare function pluginName(storeName: string): string;
|
|
58
70
|
/** The CLI version, with the rendered commit as semver build metadata. */
|
|
59
71
|
export declare function pluginVersion(cliVersion: string, commit: string | null): string;
|
|
60
|
-
|
|
72
|
+
/** A rendered skill's text below its frontmatter: what a command opening it carries. */
|
|
73
|
+
export declare function skillBody(content: string): string;
|
|
74
|
+
/**
|
|
75
|
+
* publish-one-contexture-plugin D1, D3: contexture's Claude plugin, read from
|
|
76
|
+
* nothing but the package. `cliVersion` is the version it carries, the CLI's.
|
|
77
|
+
*/
|
|
78
|
+
export declare function buildClaudePlugin(cliVersion: string): BuiltPlugin;
|
|
79
|
+
/** The store's ChatGPT plugin, with its connector: refused for a store that declares no `mcp` block. */
|
|
80
|
+
export declare function buildChatgptPlugin(input: StorePluginInput): StorePlugin;
|
|
81
|
+
/**
|
|
82
|
+
* publish-one-contexture-plugin D3 (harness-portability spec, *The committed
|
|
83
|
+
* plugin is checked against the render*): the first path at which a plugin
|
|
84
|
+
* directory on disk differs from a build, or null when every file matches
|
|
85
|
+
* byte for byte and the directory holds nothing else.
|
|
86
|
+
*/
|
|
87
|
+
export declare function firstDifference(plugin: BuiltPlugin, dir: string): Promise<string | null>;
|
|
61
88
|
/**
|
|
62
89
|
* The store's name: its directory in the canonical clone, so a build run from
|
|
63
90
|
* a session worktree names the store, not the worktree. A store below the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/build.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKhD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAO,MAAM,cAAc,YAAI,QAAQ,EAAE,SAAS,CAAU,CAAC;AAC7D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,2GAA2G;AAC3G,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAG3C,wOAAwO;AACxO,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,0BAA0B,eAAe,CAAC;AACvD,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,wCAAwC;IACxC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8HAA8H;AAC9H,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,cAMC;CACF;AAsBD,KAAK,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAIxC,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,GAAE,MAA2F,GAAG,MAAM,CAMtM;AAOD,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE/E;AAYD,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjD;AAmDD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAajE;AAED,wGAAwG;AACxG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAmBvE;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU9F;AAkBD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhF;AAED,8FAA8F;AAC9F,wBAAsB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGzF"}
|
|
@@ -1,23 +1,35 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { fileURLToPath } from 'node:url';
|
|
4
5
|
import { escapeHtml } from '../browse/render.js';
|
|
5
6
|
import { SKILL_FILE_NAME } from '../conventions.js';
|
|
6
7
|
import { ContextureError } from '../errors.js';
|
|
7
8
|
import { ExitCode } from '../exit-codes.js';
|
|
8
|
-
import {
|
|
9
|
+
import { renderMcpSkills } from '../skills.js';
|
|
10
|
+
import { commandMapProblems, PLUGIN_COMMANDS } from './commands.js';
|
|
9
11
|
import { createZip } from './zip.js';
|
|
10
12
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* what it returns to disk and the server answers with it from memory.
|
|
13
|
+
* The one builder behind `ctxr plugin build`, `npm run plugin` and serve's
|
|
14
|
+
* `/plugin/` page. It does no I/O of its own beyond reading the packaged
|
|
15
|
+
* templates, so the command writes what it returns to disk and the server
|
|
16
|
+
* answers with it from memory.
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* publish-one-contexture-plugin D1 (harness-portability spec, *contexture
|
|
19
|
+
* publishes one plugin for every store*): the Claude plugin is contexture's,
|
|
20
|
+
* not a store's. It is the MCP render of the owned skills, which takes no
|
|
21
|
+
* configuration, with a README and contexture's license, and no MCP server
|
|
22
|
+
* entry: each member adds their store's connector once, by its `/mcp` address.
|
|
23
|
+
* Its version is the CLI's, so a member's marketplace installs a new copy
|
|
24
|
+
* exactly at a release (D3). The repository commits it under `plugins/contexture/`.
|
|
25
|
+
*
|
|
26
|
+
* The ChatGPT plugin stays the store's (serve-the-session-lifecycle-to-chat-apps
|
|
27
|
+
* D7): ChatGPT has no marketplace on a personal plan, so it is the store's zip
|
|
28
|
+
* from `/plugin/`, carrying the same skills and one remote MCP server entry at
|
|
29
|
+
* `serve.base_url` + `/mcp`.
|
|
30
|
+
*
|
|
31
|
+
* Neither carries a credential (sign-in is the server's own OAuth with dynamic
|
|
32
|
+
* client registration), a variable in an address, a hook, a local server or a
|
|
21
33
|
* top-level `bin/` directory: the trees below are the whole of what is written.
|
|
22
34
|
*/
|
|
23
35
|
export const PLUGIN_TARGETS = ['claude', 'chatgpt'];
|
|
@@ -25,13 +37,17 @@ export const PLUGIN_TARGETS = ['claude', 'chatgpt'];
|
|
|
25
37
|
export const MAX_NAME_LENGTH = 64;
|
|
26
38
|
export const MAX_DESCRIPTION_LENGTH = 1024;
|
|
27
39
|
const NAME_PREFIX = 'contexture-';
|
|
28
|
-
/** The
|
|
40
|
+
/** The general Claude plugin's name (D5, revision 11: `contexture`, the product's name as plugins conventionally are, so its commands read `/contexture:submit`), and the marketplace in contexture's repository that lists it (D1). */
|
|
41
|
+
export const CLAUDE_PLUGIN_NAME = 'contexture';
|
|
42
|
+
export const CLAUDE_PLUGIN_DISPLAY_NAME = 'contexture';
|
|
43
|
+
export const PLUGIN_MARKETPLACE = 'ayxuerui/contexture';
|
|
44
|
+
/** The configuration error a store without the MCP surface gets for its ChatGPT plugin: there is no server for it to name. */
|
|
29
45
|
export class PluginWithoutMcpError extends ContextureError {
|
|
30
46
|
constructor() {
|
|
31
47
|
super(ExitCode.Usage, {
|
|
32
48
|
code: 'plugin.mcp_not_declared',
|
|
33
49
|
severity: 'error',
|
|
34
|
-
message: 'This store declares no mcp block in contexture.yaml, so there is no MCP server for a
|
|
50
|
+
message: 'This store declares no mcp block in contexture.yaml, so there is no MCP server for a ChatGPT plugin to connect to. Declare mcp (which needs change_approval and serve.base_url) first.',
|
|
35
51
|
});
|
|
36
52
|
}
|
|
37
53
|
}
|
|
@@ -48,6 +64,10 @@ function pluginTemplate(file) {
|
|
|
48
64
|
}
|
|
49
65
|
return text;
|
|
50
66
|
}
|
|
67
|
+
/** A file at the package root (LICENSE, package.json), which npm ships with every install. */
|
|
68
|
+
function packageFile(file) {
|
|
69
|
+
return readFileSync(fileURLToPath(new URL(`../../../${file}`, import.meta.url)), 'utf8');
|
|
70
|
+
}
|
|
51
71
|
const asJsonString = (value) => JSON.stringify(value).slice(1, -1);
|
|
52
72
|
const asIs = (value) => value;
|
|
53
73
|
/** One pass, so a substituted value that happens to contain a token is never substituted again. */
|
|
@@ -88,7 +108,82 @@ function checkSkillFrontmatter(folder, content) {
|
|
|
88
108
|
if (description.length === 0 || description.length > MAX_DESCRIPTION_LENGTH)
|
|
89
109
|
throw new Error(`skill ${folder}'s description is not 1 to ${MAX_DESCRIPTION_LENGTH} characters`);
|
|
90
110
|
}
|
|
91
|
-
|
|
111
|
+
/** A rendered skill's text below its frontmatter: what a command opening it carries. */
|
|
112
|
+
export function skillBody(content) {
|
|
113
|
+
const match = /^---\n[^]*?\n---\n\n?/.exec(content);
|
|
114
|
+
if (match === null)
|
|
115
|
+
throw new Error('a rendered skill carries no frontmatter');
|
|
116
|
+
return content.slice(match[0].length).replace(/\n+$/, '');
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* publish-one-contexture-plugin D5: `commands/<name>.md` for each entry of the
|
|
120
|
+
* command map, from `templates/plugin/command.md`: a `description` worded as a
|
|
121
|
+
* typed shortcut and nothing else in the frontmatter, then the whole MCP render
|
|
122
|
+
* of the skill, then the person's `$ARGUMENTS`. Whichever of the two Claude
|
|
123
|
+
* loads, it has the whole procedure. A command whose skill the plugin does not
|
|
124
|
+
* carry fails the build.
|
|
125
|
+
*/
|
|
126
|
+
function commandFiles(skills, commands = PLUGIN_COMMANDS) {
|
|
127
|
+
const problems = commandMapProblems(commands, skills.map((skill) => skill.file));
|
|
128
|
+
if (problems.length > 0)
|
|
129
|
+
throw new Error(problems.join('; '));
|
|
130
|
+
const files = new Map();
|
|
131
|
+
for (const [command, skill] of Object.entries(commands)) {
|
|
132
|
+
const content = skills.find((s) => s.file === skill).content;
|
|
133
|
+
files.set(`commands/${command}.md`, fillPluginTemplate('command.md', { PLUGIN: CLAUDE_PLUGIN_NAME, COMMAND: command, SKILL: skill, BODY: skillBody(content) }));
|
|
134
|
+
}
|
|
135
|
+
return files;
|
|
136
|
+
}
|
|
137
|
+
/** The MCP render's skills, as plugin files: the same text in both plugins and for every store. */
|
|
138
|
+
function skillFiles() {
|
|
139
|
+
const skills = renderMcpSkills();
|
|
140
|
+
const files = new Map();
|
|
141
|
+
for (const skill of skills) {
|
|
142
|
+
checkSkillFrontmatter(skill.file, skill.content);
|
|
143
|
+
files.set(`skills/${skill.file}/${SKILL_FILE_NAME}`, skill.content);
|
|
144
|
+
for (const [rel, content] of skill.supportingFiles)
|
|
145
|
+
files.set(`skills/${skill.file}/${rel}`, content);
|
|
146
|
+
}
|
|
147
|
+
return { skills: skills.map((skill) => skill.file), files };
|
|
148
|
+
}
|
|
149
|
+
function finish(target, name, version, skills, files, archiveName) {
|
|
150
|
+
for (const file of files.keys()) {
|
|
151
|
+
// A Claude plugin with a top-level bin/ is refused at upload, and neither app runs a hook from a plugin we ship.
|
|
152
|
+
if (file === 'bin' || file.startsWith('bin/') || file.startsWith('hooks/') || file === '.mcp.json')
|
|
153
|
+
throw new Error(`plugin file ${file} is one this plugin may not carry`);
|
|
154
|
+
}
|
|
155
|
+
// Sorted by path, so the archive and a directory comparison never depend on insertion order.
|
|
156
|
+
const sorted = new Map([...files].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));
|
|
157
|
+
return {
|
|
158
|
+
target,
|
|
159
|
+
name,
|
|
160
|
+
version,
|
|
161
|
+
files: sorted,
|
|
162
|
+
skills,
|
|
163
|
+
archiveName,
|
|
164
|
+
archive: createZip([...sorted].map(([file, content]) => ({ path: file, data: Buffer.from(content, 'utf8') }))),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* publish-one-contexture-plugin D1, D3: contexture's Claude plugin, read from
|
|
169
|
+
* nothing but the package. `cliVersion` is the version it carries, the CLI's.
|
|
170
|
+
*/
|
|
171
|
+
export function buildClaudePlugin(cliVersion) {
|
|
172
|
+
const license = JSON.parse(packageFile('package.json')).license;
|
|
173
|
+
const values = { NAME: CLAUDE_PLUGIN_NAME, DISPLAY_NAME: CLAUDE_PLUGIN_DISPLAY_NAME, VERSION: cliVersion, LICENSE: license, MARKETPLACE: PLUGIN_MARKETPLACE };
|
|
174
|
+
const { skills, files } = skillFiles();
|
|
175
|
+
const commands = Object.entries(PLUGIN_COMMANDS).map(([command, skill]) => `- \`/${CLAUDE_PLUGIN_NAME}:${command}\` opens \`${skill}\``);
|
|
176
|
+
const tree = new Map([
|
|
177
|
+
['.claude-plugin/plugin.json', jsonDocument('claude-plugin.json', values)],
|
|
178
|
+
['README.md', fillPluginTemplate('README.md', { ...values, COMMANDS: commands.join('\n') })],
|
|
179
|
+
['LICENSE', packageFile('LICENSE')],
|
|
180
|
+
...files,
|
|
181
|
+
...commandFiles(renderMcpSkills()),
|
|
182
|
+
]);
|
|
183
|
+
return finish('claude', CLAUDE_PLUGIN_NAME, cliVersion, skills, tree, `${CLAUDE_PLUGIN_NAME}-claude.zip`);
|
|
184
|
+
}
|
|
185
|
+
/** The store's ChatGPT plugin, with its connector: refused for a store that declares no `mcp` block. */
|
|
186
|
+
export function buildChatgptPlugin(input) {
|
|
92
187
|
const { config } = input;
|
|
93
188
|
const baseUrl = config.serve?.base_url;
|
|
94
189
|
if (config.mcp === undefined || baseUrl === undefined)
|
|
@@ -99,44 +194,52 @@ export function buildPlugins(input) {
|
|
|
99
194
|
const version = pluginVersion(input.cliVersion, input.commit);
|
|
100
195
|
const displayName = `${input.storeName} (contexture)`;
|
|
101
196
|
const values = { NAME: name, DISPLAY_NAME: displayName, VERSION: version, STORE_NAME: input.storeName, MCP_URL: mcpUrl, BASE_URL: origin };
|
|
102
|
-
const skills =
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
197
|
+
const { skills, files } = skillFiles();
|
|
198
|
+
const tree = new Map([
|
|
199
|
+
['plugin.json', jsonDocument('chatgpt-plugin.json', values)],
|
|
200
|
+
['mcp.json', jsonDocument('chatgpt-mcp.json', values)],
|
|
201
|
+
['README.md', fillPluginTemplate('chatgpt-README.md', values)],
|
|
202
|
+
...files,
|
|
203
|
+
]);
|
|
204
|
+
return { ...finish('chatgpt', name, version, skills, tree, `${name}-chatgpt.zip`), storeName: input.storeName, displayName, mcpUrl };
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* publish-one-contexture-plugin D3 (harness-portability spec, *The committed
|
|
208
|
+
* plugin is checked against the render*): the first path at which a plugin
|
|
209
|
+
* directory on disk differs from a build, or null when every file matches
|
|
210
|
+
* byte for byte and the directory holds nothing else.
|
|
211
|
+
*/
|
|
212
|
+
export async function firstDifference(plugin, dir) {
|
|
213
|
+
const onDisk = await listFiles(dir);
|
|
214
|
+
const paths = [...new Set([...plugin.files.keys(), ...onDisk])].sort();
|
|
215
|
+
for (const file of paths) {
|
|
216
|
+
const wanted = plugin.files.get(file);
|
|
217
|
+
if (wanted === undefined)
|
|
218
|
+
return `${file}: on disk, but not in the build`;
|
|
219
|
+
if (!onDisk.includes(file))
|
|
220
|
+
return `${file}: in the build, but missing on disk`;
|
|
221
|
+
if (!(await readFile(path.join(dir, ...file.split('/')))).equals(Buffer.from(wanted, 'utf8')))
|
|
222
|
+
return `${file}: differs from the build`;
|
|
109
223
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (file === 'bin' || file.startsWith('bin/') || file.startsWith('hooks/'))
|
|
130
|
-
throw new Error(`plugin file ${file} is one neither app may be shipped`);
|
|
131
|
-
}
|
|
132
|
-
return {
|
|
133
|
-
target,
|
|
134
|
-
files,
|
|
135
|
-
archiveName: `${name}-${target}.zip`,
|
|
136
|
-
archive: createZip([...files].map(([file, content]) => ({ path: file, data: Buffer.from(content, 'utf8') }))),
|
|
137
|
-
};
|
|
138
|
-
});
|
|
139
|
-
return { storeName: input.storeName, name, displayName, version, mcpUrl, skills: skills.map((skill) => skill.file), plugins };
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
async function listFiles(dir, sub = '') {
|
|
227
|
+
let entries;
|
|
228
|
+
try {
|
|
229
|
+
entries = await readdir(path.join(dir, sub), { withFileTypes: true });
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return [];
|
|
233
|
+
}
|
|
234
|
+
const out = [];
|
|
235
|
+
for (const entry of entries) {
|
|
236
|
+
const rel = sub === '' ? entry.name : `${sub}/${entry.name}`;
|
|
237
|
+
if (entry.isDirectory())
|
|
238
|
+
out.push(...(await listFiles(dir, rel)));
|
|
239
|
+
else
|
|
240
|
+
out.push(rel);
|
|
241
|
+
}
|
|
242
|
+
return out;
|
|
140
243
|
}
|
|
141
244
|
/**
|
|
142
245
|
* The store's name: its directory in the canonical clone, so a build run from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/core/plugin/build.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/core/plugin/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* publish-one-contexture-plugin D5 (harness-portability spec, *The plugin's
|
|
3
|
+
* commands open its skills*): the plugin's typed commands, each mapped by
|
|
4
|
+
* name to the skill it opens. Declared here, never derived from a skill's
|
|
5
|
+
* name, so `/contexture:session` can open `ctxr-session-lifecycle` and a skill
|
|
6
|
+
* without a command stays without one.
|
|
7
|
+
*/
|
|
8
|
+
export declare const PLUGIN_COMMANDS: Readonly<Record<string, string>>;
|
|
9
|
+
/** Each command whose skill the plugin does not carry, named with the skill it asks for. */
|
|
10
|
+
export declare function commandMapProblems(commands: Readonly<Record<string, string>>, carried: readonly string[]): string[];
|
|
11
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5D,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAInH"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* publish-one-contexture-plugin D5 (harness-portability spec, *The plugin's
|
|
3
|
+
* commands open its skills*): the plugin's typed commands, each mapped by
|
|
4
|
+
* name to the skill it opens. Declared here, never derived from a skill's
|
|
5
|
+
* name, so `/contexture:session` can open `ctxr-session-lifecycle` and a skill
|
|
6
|
+
* without a command stays without one.
|
|
7
|
+
*/
|
|
8
|
+
export const PLUGIN_COMMANDS = {
|
|
9
|
+
capture: 'ctxr-capture',
|
|
10
|
+
ingest: 'ctxr-ingest-orchestration',
|
|
11
|
+
research: 'ctxr-research',
|
|
12
|
+
rollup: 'ctxr-rollup',
|
|
13
|
+
mission: 'ctxr-mission',
|
|
14
|
+
session: 'ctxr-session-lifecycle',
|
|
15
|
+
submit: 'ctxr-submit',
|
|
16
|
+
};
|
|
17
|
+
/** Each command whose skill the plugin does not carry, named with the skill it asks for. */
|
|
18
|
+
export function commandMapProblems(commands, carried) {
|
|
19
|
+
return Object.entries(commands)
|
|
20
|
+
.filter(([, skill]) => !carried.includes(skill))
|
|
21
|
+
.map(([command, skill]) => `command ${command} opens ${skill}, which the plugin does not carry`);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/core/plugin/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqC;IAC/D,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,2BAA2B;IACnC,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,wBAAwB;IACjC,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,4FAA4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,QAA0C,EAAE,OAA0B;IACvG,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,OAAO,UAAU,KAAK,mCAAmC,CAAC,CAAC;AACrG,CAAC"}
|
|
@@ -3,11 +3,15 @@ import type { ApprovalServer } from '../browse/approve.js';
|
|
|
3
3
|
import type { GitRunner } from '../git/exec.js';
|
|
4
4
|
import type { Store } from '../store.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* publish-one-contexture-plugin D4 (remote-access spec, *The server's connect
|
|
7
|
+
* page tells a member how to add the plugin and this store's connector*):
|
|
8
|
+
* `GET /plugin/` is the store's connect page. It names contexture's
|
|
9
|
+
* marketplace and plugin for Claude, this store's connector address and how
|
|
10
|
+
* to add it in each app, and links the store's ChatGPT plugin. There is no
|
|
11
|
+
* Claude archive any more: Claude's plugin is contexture's, installed from its
|
|
12
|
+
* marketplace. `GET /plugin/<name>-chatgpt.zip` is the ChatGPT archive, built
|
|
13
|
+
* in memory by the builder `ctxr plugin build` uses, from the configuration
|
|
14
|
+
* the server last loaded (serve-the-session-lifecycle-to-chat-apps D7).
|
|
11
15
|
*
|
|
12
16
|
* The routes exist only while the MCP surface is configured, and every one
|
|
13
17
|
* needs the verified identity assertion the approval routes need, so they are
|
|
@@ -25,11 +29,11 @@ export interface PluginReply {
|
|
|
25
29
|
}
|
|
26
30
|
export declare class PluginDownloads {
|
|
27
31
|
private readonly git;
|
|
28
|
-
/** The last
|
|
32
|
+
/** The last ChatGPT plugin built, keyed by the commit and the configuration it was built from. */
|
|
29
33
|
private cached;
|
|
30
34
|
private storeName;
|
|
31
35
|
constructor(git: GitRunner);
|
|
32
|
-
private
|
|
36
|
+
private chatgptFor;
|
|
33
37
|
handle(store: Store, approval: ApprovalServer | null, approvalError: string | null, req: IncomingMessage, pathname: string): Promise<PluginReply>;
|
|
34
38
|
}
|
|
35
39
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAID,qBAAa,eAAe;IAKd,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJhC,kGAAkG;IAClG,OAAO,CAAC,MAAM,CAAqD;IACnE,OAAO,CAAC,SAAS,CAA8B;IAE/C,YAA6B,GAAG,EAAE,SAAS,EAAI;YAEjC,UAAU;IAUlB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA+BtJ;CACF"}
|