@nimblebrain/mpak 0.0.1-beta.2 → 0.0.1-beta.4

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.
@@ -8,7 +8,10 @@
8
8
  "Bash(git add:*)",
9
9
  "Bash(git commit:*)",
10
10
  "Bash(npm version:*)",
11
- "Bash(npm publish:*)"
11
+ "Bash(npm publish:*)",
12
+ "Bash(git push)",
13
+ "Bash(git tag:*)",
14
+ "Bash(git push:*)"
12
15
  ]
13
16
  }
14
17
  }
package/CLAUDE.md CHANGED
@@ -92,6 +92,25 @@ MPAK_REGISTRY_URL=http://localhost:3200 node dist/index.js pull @nimblebraininc/
92
92
  ```bash
93
93
  npm run build
94
94
  npm run typecheck
95
+ npm run test:all
96
+ ```
97
+
98
+ ### Publishing
99
+
100
+ Prereleases (beta):
101
+ ```bash
102
+ npm version 0.0.1-beta.X
103
+ npm run build
104
+ npm publish --tag beta --otp=<code>
105
+ git push && git push --tags
106
+ ```
107
+
108
+ Stable releases:
109
+ ```bash
110
+ npm version X.X.X
111
+ npm run build
112
+ npm publish --otp=<code>
113
+ git push && git push --tags
95
114
  ```
96
115
 
97
116
  ## Commands (MVP)
@@ -112,6 +131,12 @@ npm run typecheck
112
131
  3. **Platform detection**: Auto-detects OS/arch, allows explicit override for cross-platform downloads.
113
132
  4. **Config file**: Stores registry URL in `~/.mpak/config.json`, overridable via `MPAK_REGISTRY_URL`.
114
133
 
134
+ ## Gotchas
135
+
136
+ - **No dotenv**: Removed due to v17 banner output breaking Claude Desktop MCP integration
137
+ - **Type generation**: Requires server running locally (`npm run generate:types` hits localhost:3200)
138
+ - **Schema changes**: May introduce breaking type changes; always run full verification after regenerating
139
+
115
140
  ## Future Considerations
116
141
 
117
142
  - The CLI will be broken out into a completely standalone repository
@@ -0,0 +1,31 @@
1
+ export interface ConfigSetOptions {
2
+ }
3
+ export interface ConfigGetOptions {
4
+ json?: boolean;
5
+ }
6
+ export interface ConfigClearOptions {
7
+ }
8
+ /**
9
+ * Set config value(s) for a package
10
+ * @example mpak config set @scope/name api_key=xxx
11
+ * @example mpak config set @scope/name api_key=xxx other_key=yyy
12
+ */
13
+ export declare function handleConfigSet(packageName: string, keyValuePairs: string[], _options?: ConfigSetOptions): Promise<void>;
14
+ /**
15
+ * Get config values for a package
16
+ * @example mpak config get @scope/name
17
+ * @example mpak config get @scope/name --json
18
+ */
19
+ export declare function handleConfigGet(packageName: string, options?: ConfigGetOptions): Promise<void>;
20
+ /**
21
+ * List all packages with stored config
22
+ * @example mpak config list
23
+ */
24
+ export declare function handleConfigList(options?: ConfigGetOptions): Promise<void>;
25
+ /**
26
+ * Clear config for a package
27
+ * @example mpak config clear @scope/name # clears all
28
+ * @example mpak config clear @scope/name api_key # clears specific key
29
+ */
30
+ export declare function handleConfigClear(packageName: string, key?: string, _options?: ConfigClearOptions): Promise<void>;
31
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;CAEhC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;CAElC;AAYD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,QAAQ,GAAE,gBAAqB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,GAAE,kBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -0,0 +1,129 @@
1
+ import { ConfigManager } from '../utils/config-manager.js';
2
+ /**
3
+ * Mask sensitive values for display (show first 4 chars, rest as *)
4
+ */
5
+ function maskValue(value) {
6
+ if (value.length <= 4) {
7
+ return '*'.repeat(value.length);
8
+ }
9
+ return value.substring(0, 4) + '*'.repeat(value.length - 4);
10
+ }
11
+ /**
12
+ * Set config value(s) for a package
13
+ * @example mpak config set @scope/name api_key=xxx
14
+ * @example mpak config set @scope/name api_key=xxx other_key=yyy
15
+ */
16
+ export async function handleConfigSet(packageName, keyValuePairs, _options = {}) {
17
+ if (keyValuePairs.length === 0) {
18
+ process.stderr.write('Error: At least one key=value pair is required\n');
19
+ process.stderr.write('Usage: mpak config set <package> <key>=<value> [<key>=<value>...]\n');
20
+ process.exit(1);
21
+ }
22
+ const configManager = new ConfigManager();
23
+ let setCount = 0;
24
+ for (const pair of keyValuePairs) {
25
+ const eqIndex = pair.indexOf('=');
26
+ if (eqIndex === -1) {
27
+ process.stderr.write(`Error: Invalid format "${pair}". Expected key=value\n`);
28
+ process.exit(1);
29
+ }
30
+ const key = pair.substring(0, eqIndex);
31
+ const value = pair.substring(eqIndex + 1);
32
+ if (!key) {
33
+ process.stderr.write(`Error: Empty key in "${pair}"\n`);
34
+ process.exit(1);
35
+ }
36
+ configManager.setPackageConfigValue(packageName, key, value);
37
+ setCount++;
38
+ }
39
+ console.log(`Set ${setCount} config value(s) for ${packageName}`);
40
+ }
41
+ /**
42
+ * Get config values for a package
43
+ * @example mpak config get @scope/name
44
+ * @example mpak config get @scope/name --json
45
+ */
46
+ export async function handleConfigGet(packageName, options = {}) {
47
+ const configManager = new ConfigManager();
48
+ const config = configManager.getPackageConfig(packageName);
49
+ if (!config || Object.keys(config).length === 0) {
50
+ if (options.json) {
51
+ console.log(JSON.stringify({}, null, 2));
52
+ }
53
+ else {
54
+ console.log(`No config stored for ${packageName}`);
55
+ }
56
+ return;
57
+ }
58
+ if (options.json) {
59
+ // Mask values in JSON output too
60
+ const masked = {};
61
+ for (const [key, value] of Object.entries(config)) {
62
+ masked[key] = maskValue(value);
63
+ }
64
+ console.log(JSON.stringify(masked, null, 2));
65
+ }
66
+ else {
67
+ console.log(`Config for ${packageName}:`);
68
+ for (const [key, value] of Object.entries(config)) {
69
+ console.log(` ${key}: ${maskValue(value)}`);
70
+ }
71
+ }
72
+ }
73
+ /**
74
+ * List all packages with stored config
75
+ * @example mpak config list
76
+ */
77
+ export async function handleConfigList(options = {}) {
78
+ const configManager = new ConfigManager();
79
+ const packages = configManager.listPackagesWithConfig();
80
+ if (packages.length === 0) {
81
+ if (options.json) {
82
+ console.log(JSON.stringify([], null, 2));
83
+ }
84
+ else {
85
+ console.log('No packages have stored config');
86
+ }
87
+ return;
88
+ }
89
+ if (options.json) {
90
+ console.log(JSON.stringify(packages, null, 2));
91
+ }
92
+ else {
93
+ console.log('Packages with stored config:');
94
+ for (const pkg of packages) {
95
+ const config = configManager.getPackageConfig(pkg);
96
+ const keyCount = config ? Object.keys(config).length : 0;
97
+ console.log(` ${pkg} (${keyCount} value${keyCount === 1 ? '' : 's'})`);
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Clear config for a package
103
+ * @example mpak config clear @scope/name # clears all
104
+ * @example mpak config clear @scope/name api_key # clears specific key
105
+ */
106
+ export async function handleConfigClear(packageName, key, _options = {}) {
107
+ const configManager = new ConfigManager();
108
+ if (key) {
109
+ // Clear specific key
110
+ const cleared = configManager.clearPackageConfigValue(packageName, key);
111
+ if (cleared) {
112
+ console.log(`Cleared ${key} for ${packageName}`);
113
+ }
114
+ else {
115
+ console.log(`No value found for ${key} in ${packageName}`);
116
+ }
117
+ }
118
+ else {
119
+ // Clear all config for package
120
+ const cleared = configManager.clearPackageConfig(packageName);
121
+ if (cleared) {
122
+ console.log(`Cleared all config for ${packageName}`);
123
+ }
124
+ else {
125
+ console.log(`No config found for ${packageName}`);
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,34 @@
1
1
  export interface RunOptions {
2
2
  update?: boolean;
3
3
  }
4
+ /**
5
+ * Parse package specification into name and version
6
+ * @example parsePackageSpec('@scope/name') => { name: '@scope/name' }
7
+ * @example parsePackageSpec('@scope/name@1.0.0') => { name: '@scope/name', version: '1.0.0' }
8
+ */
9
+ export declare function parsePackageSpec(spec: string): {
10
+ name: string;
11
+ version?: string;
12
+ };
13
+ /**
14
+ * Get cache directory for a package
15
+ * @example getCacheDir('@scope/name') => '~/.mpak/cache/scope-name'
16
+ */
17
+ export declare function getCacheDir(packageName: string): string;
18
+ /**
19
+ * Resolve placeholders in args (e.g., ${__dirname})
20
+ * @example resolveArgs(['${__dirname}/index.js'], '/cache') => ['/cache/index.js']
21
+ */
22
+ export declare function resolveArgs(args: string[], cacheDir: string): string[];
23
+ /**
24
+ * Substitute ${user_config.*} placeholders in a string
25
+ * @example substituteUserConfig('${user_config.api_key}', { api_key: 'secret' }) => 'secret'
26
+ */
27
+ export declare function substituteUserConfig(value: string, userConfigValues: Record<string, string>): string;
28
+ /**
29
+ * Substitute ${user_config.*} placeholders in env vars
30
+ */
31
+ export declare function substituteEnvVars(env: Record<string, string> | undefined, userConfigValues: Record<string, string>): Record<string, string>;
4
32
  /**
5
33
  * Run a package from the registry
6
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/packages/run.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiID;;GAEG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAyIf"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/packages/run.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAejF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKvD;AAqDD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAItE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACvC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAoID;;GAEG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAmJf"}
@@ -1,12 +1,16 @@
1
1
  import { spawn, spawnSync } from 'child_process';
2
+ import { createInterface } from 'readline';
2
3
  import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from 'fs';
3
4
  import { homedir } from 'os';
4
5
  import { join, dirname } from 'path';
5
6
  import { RegistryClient } from '../../lib/api/registry-client.js';
7
+ import { ConfigManager } from '../../utils/config-manager.js';
6
8
  /**
7
9
  * Parse package specification into name and version
10
+ * @example parsePackageSpec('@scope/name') => { name: '@scope/name' }
11
+ * @example parsePackageSpec('@scope/name@1.0.0') => { name: '@scope/name', version: '1.0.0' }
8
12
  */
9
- function parsePackageSpec(spec) {
13
+ export function parsePackageSpec(spec) {
10
14
  const lastAtIndex = spec.lastIndexOf('@');
11
15
  if (lastAtIndex <= 0) {
12
16
  return { name: spec };
@@ -20,8 +24,9 @@ function parsePackageSpec(spec) {
20
24
  }
21
25
  /**
22
26
  * Get cache directory for a package
27
+ * @example getCacheDir('@scope/name') => '~/.mpak/cache/scope-name'
23
28
  */
24
- function getCacheDir(packageName) {
29
+ export function getCacheDir(packageName) {
25
30
  const cacheBase = join(homedir(), '.mpak', 'cache');
26
31
  // @scope/name -> scope/name
27
32
  const safeName = packageName.replace('@', '').replace('/', '-');
@@ -76,10 +81,134 @@ function readManifest(cacheDir) {
76
81
  }
77
82
  /**
78
83
  * Resolve placeholders in args (e.g., ${__dirname})
84
+ * @example resolveArgs(['${__dirname}/index.js'], '/cache') => ['/cache/index.js']
79
85
  */
80
- function resolveArgs(args, cacheDir) {
86
+ export function resolveArgs(args, cacheDir) {
81
87
  return args.map(arg => arg.replace(/\$\{__dirname\}/g, cacheDir));
82
88
  }
89
+ /**
90
+ * Substitute ${user_config.*} placeholders in a string
91
+ * @example substituteUserConfig('${user_config.api_key}', { api_key: 'secret' }) => 'secret'
92
+ */
93
+ export function substituteUserConfig(value, userConfigValues) {
94
+ return value.replace(/\$\{user_config\.([^}]+)\}/g, (match, key) => {
95
+ return userConfigValues[key] ?? match;
96
+ });
97
+ }
98
+ /**
99
+ * Substitute ${user_config.*} placeholders in env vars
100
+ */
101
+ export function substituteEnvVars(env, userConfigValues) {
102
+ if (!env)
103
+ return {};
104
+ const result = {};
105
+ for (const [key, value] of Object.entries(env)) {
106
+ result[key] = substituteUserConfig(value, userConfigValues);
107
+ }
108
+ return result;
109
+ }
110
+ /**
111
+ * Prompt user for a config value (interactive terminal input)
112
+ */
113
+ async function promptForValue(field, key) {
114
+ return new Promise((resolve) => {
115
+ const rl = createInterface({
116
+ input: process.stdin,
117
+ output: process.stderr,
118
+ terminal: true,
119
+ });
120
+ const label = field.title || key;
121
+ const hint = field.description ? ` (${field.description})` : '';
122
+ const defaultHint = field.default !== undefined ? ` [${field.default}]` : '';
123
+ const prompt = `=> ${label}${hint}${defaultHint}: `;
124
+ // For sensitive fields, we'd ideally hide input, but Node's readline
125
+ // doesn't support this natively. We'll just note it's sensitive.
126
+ if (field.sensitive) {
127
+ process.stderr.write(`=> (sensitive input)\n`);
128
+ }
129
+ rl.question(prompt, (answer) => {
130
+ rl.close();
131
+ // Use default if empty and default exists
132
+ if (!answer && field.default !== undefined) {
133
+ resolve(String(field.default));
134
+ }
135
+ else {
136
+ resolve(answer);
137
+ }
138
+ });
139
+ });
140
+ }
141
+ /**
142
+ * Check if we're in an interactive terminal
143
+ */
144
+ function isInteractive() {
145
+ return process.stdin.isTTY === true;
146
+ }
147
+ /**
148
+ * Gather user config values from stored config and environment
149
+ * Prompts for missing required values if interactive
150
+ */
151
+ async function gatherUserConfigValues(packageName, userConfig, configManager) {
152
+ const result = {};
153
+ const storedConfig = configManager.getPackageConfig(packageName) || {};
154
+ const missingRequired = [];
155
+ for (const [key, field] of Object.entries(userConfig)) {
156
+ // Priority: 1) stored config, 2) environment variable, 3) default value
157
+ const storedValue = storedConfig[key];
158
+ const envVarName = `MPAK_CONFIG_${key.toUpperCase()}`;
159
+ const envValue = process.env[envVarName];
160
+ if (storedValue !== undefined) {
161
+ result[key] = storedValue;
162
+ }
163
+ else if (envValue !== undefined) {
164
+ result[key] = envValue;
165
+ }
166
+ else if (field.default !== undefined) {
167
+ result[key] = String(field.default);
168
+ }
169
+ else if (field.required) {
170
+ missingRequired.push({ key, field });
171
+ }
172
+ }
173
+ // Prompt for missing required values if interactive
174
+ if (missingRequired.length > 0) {
175
+ if (!isInteractive()) {
176
+ const missingKeys = missingRequired.map(m => m.key).join(', ');
177
+ process.stderr.write(`=> Error: Missing required config: ${missingKeys}\n`);
178
+ process.stderr.write(`=> Run 'mpak config set ${packageName} <key>=<value>' to set values\n`);
179
+ process.stderr.write(`=> Or set environment variables: ${missingRequired.map(m => `MPAK_CONFIG_${m.key.toUpperCase()}`).join(', ')}\n`);
180
+ process.exit(1);
181
+ }
182
+ process.stderr.write(`=> Package requires configuration:\n`);
183
+ for (const { key, field } of missingRequired) {
184
+ const value = await promptForValue(field, key);
185
+ if (!value && field.required) {
186
+ process.stderr.write(`=> Error: ${field.title || key} is required\n`);
187
+ process.exit(1);
188
+ }
189
+ result[key] = value;
190
+ // Offer to save the value
191
+ if (value) {
192
+ const rl = createInterface({
193
+ input: process.stdin,
194
+ output: process.stderr,
195
+ terminal: true,
196
+ });
197
+ await new Promise((resolve) => {
198
+ rl.question(`=> Save ${field.title || key} for future runs? [Y/n]: `, (answer) => {
199
+ rl.close();
200
+ if (answer.toLowerCase() !== 'n') {
201
+ configManager.setPackageConfigValue(packageName, key, value);
202
+ process.stderr.write(`=> Saved to ~/.mpak/config.json\n`);
203
+ }
204
+ resolve();
205
+ });
206
+ });
207
+ }
208
+ }
209
+ }
210
+ return result;
211
+ }
83
212
  /**
84
213
  * Find Python executable (tries python3 first, then python)
85
214
  */
@@ -148,9 +277,17 @@ export async function handleRun(packageSpec, options = {}) {
148
277
  // Read manifest and execute
149
278
  const manifest = readManifest(cacheDir);
150
279
  const { type, entry_point, mcp_config } = manifest.server;
280
+ // Handle user_config substitution
281
+ let userConfigValues = {};
282
+ if (manifest.user_config && Object.keys(manifest.user_config).length > 0) {
283
+ const configManager = new ConfigManager();
284
+ userConfigValues = await gatherUserConfigValues(name, manifest.user_config, configManager);
285
+ }
286
+ // Substitute user_config placeholders in env vars
287
+ const substitutedEnv = substituteEnvVars(mcp_config.env, userConfigValues);
151
288
  let command;
152
289
  let args;
153
- let env = { ...process.env, ...mcp_config.env };
290
+ let env = { ...process.env, ...substitutedEnv };
154
291
  switch (type) {
155
292
  case 'binary': {
156
293
  // For binary, the entry_point is the executable path relative to bundle
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/packages/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/packages/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AA2C9D;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAEhD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,QAAgB,EAAE,QAAuB;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACnD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,OAAe;IACxD,6EAA6E;IAC7E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAEnD,4BAA4B;IAC5B,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,OAAO,SAAS,OAAO,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,QAAgB;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACpB,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,gBAAwC;IAExC,OAAO,KAAK,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACjE,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAuC,EACvC,gBAAwC;IAExC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAC3B,KAAsB,EACtB,GAAW;IAEX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,eAAe,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,KAAK,GAAG,IAAI,GAAG,WAAW,IAAI,CAAC;QAEpD,qEAAqE;QACrE,iEAAiE;QACjE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACjD,CAAC;QAED,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,0CAA0C;YAC1C,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,sBAAsB,CACnC,WAAmB,EACnB,UAA2C,EAC3C,aAA4B;IAE5B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACvE,MAAM,eAAe,GAAmD,EAAE,CAAC;IAE3E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,wEAAwE;QACxE,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,eAAe,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEzC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QAC5B,CAAC;aAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1B,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,WAAW,IAAI,CAAC,CAAC;YAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,WAAW,iCAAiC,CAAC,CAAC;YAC9F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC7D,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,eAAe,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,KAAK,IAAI,GAAG,gBAAgB,CAAC,CAAC;gBACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAEpB,0BAA0B;YAC1B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,EAAE,GAAG,eAAe,CAAC;oBACzB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,EAAE,CAAC,QAAQ,CAAC,WAAW,KAAK,CAAC,KAAK,IAAI,GAAG,2BAA2B,EAAE,CAAC,MAAM,EAAE,EAAE;wBAC/E,EAAE,CAAC,KAAK,EAAE,CAAC;wBACX,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;4BACjC,aAAa,CAAC,qBAAqB,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;4BAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;wBAC5D,CAAC;wBACD,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,+CAA+C;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,sBAAsB;IACtB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,WAAmB,EACnB,UAAsB,EAAE;IAExB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE5C,oCAAoC;IACpC,IAAI,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,gBAAgB,EAAE,CAAC;YACrB,+DAA+D;YAC/D,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,gBAAgB,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,8DAA8D;YAC9D,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,sBAAsB;QACtB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QAEnC,gDAAgD;QAChD,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3E,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,wBAAwB;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACvE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAElD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC;YAClE,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAExD,8BAA8B;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzC,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAErC,iBAAiB;YACjB,kBAAkB,CAAC,QAAQ,EAAE;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAElC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE1D,kCAAkC;IAClC,IAAI,gBAAgB,GAA2B,EAAE,CAAC;IAClD,IAAI,QAAQ,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QAC1C,gBAAgB,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC7F,CAAC;IAED,kDAAkD;IAClD,MAAM,cAAc,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAE3E,IAAI,OAAe,CAAC;IACpB,IAAI,IAAc,CAAC;IACnB,IAAI,GAAG,GAAuC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;IAEpF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,wEAAwE;YACxE,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACtC,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;YAEpD,8BAA8B;YAC9B,IAAI,CAAC;gBACH,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC;YACvC,+EAA+E;YAC/E,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,kEAAkE;YAClE,OAAO,GAAG,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,iBAAiB,EAAE,CAAC,CAAC;YAE9G,+EAA+E;YAC/E,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YACvC,CAAC;YAED,8DAA8D;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAClD,GAAG,CAAC,UAAU,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACnF,MAAM;QACR,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,uCAAuC;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;QACjC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QACxC,GAAG;QACH,GAAG,EAAE,QAAQ;KACd,CAAC,CAAC;IAEH,kBAAkB;IAClB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnD,gBAAgB;IAChB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { config } from 'dotenv';
3
2
  import { createProgram } from './program.js';
4
3
  import { handleError } from './utils/errors.js';
5
- // Load environment variables from .env file
6
- config();
7
4
  async function main() {
8
5
  const program = createProgram();
9
6
  await program.parseAsync(process.argv);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,4CAA4C;AAC5C,MAAM,EAAE,CAAC;AAET,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAyEvC"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CA4GvC"}
package/dist/program.js CHANGED
@@ -4,6 +4,7 @@ import { handleSearch } from './commands/packages/search.js';
4
4
  import { handleShow } from './commands/packages/show.js';
5
5
  import { handlePull } from './commands/packages/pull.js';
6
6
  import { handleRun } from './commands/packages/run.js';
7
+ import { handleConfigSet, handleConfigGet, handleConfigList, handleConfigClear } from './commands/config.js';
7
8
  /**
8
9
  * Creates and configures the CLI program
9
10
  *
@@ -73,6 +74,36 @@ export function createProgram() {
73
74
  .action(async (packageSpec, options) => {
74
75
  await handleRun(packageSpec, options);
75
76
  });
77
+ // Config command group
78
+ const configCmd = program
79
+ .command('config')
80
+ .description('Manage per-package configuration values');
81
+ configCmd
82
+ .command('set <package> <key=value...>')
83
+ .description('Set config value(s) for a package (e.g., mpak config set @scope/name api_key=xxx)')
84
+ .action(async (packageName, keyValuePairs) => {
85
+ await handleConfigSet(packageName, keyValuePairs);
86
+ });
87
+ configCmd
88
+ .command('get <package>')
89
+ .description('Show stored config for a package (values are masked)')
90
+ .option('--json', 'Output as JSON')
91
+ .action(async (packageName, options) => {
92
+ await handleConfigGet(packageName, options);
93
+ });
94
+ configCmd
95
+ .command('list')
96
+ .description('List all packages with stored config')
97
+ .option('--json', 'Output as JSON')
98
+ .action(async (options) => {
99
+ await handleConfigList(options);
100
+ });
101
+ configCmd
102
+ .command('clear <package> [key]')
103
+ .description('Clear config for a package (all values or specific key)')
104
+ .action(async (packageName, key) => {
105
+ await handleConfigClear(packageName, key);
106
+ });
76
107
  return program;
77
108
  }
78
109
  //# sourceMappingURL=program.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Per-package user configuration (stores user_config values)
3
+ */
4
+ export interface PackageConfig {
5
+ [key: string]: string;
6
+ }
1
7
  /**
2
8
  * Configuration structure
3
9
  */
@@ -5,6 +11,7 @@ export interface MpakConfig {
5
11
  version: string;
6
12
  lastUpdated: string;
7
13
  registryUrl?: string;
14
+ packages?: Record<string, PackageConfig>;
8
15
  }
9
16
  /**
10
17
  * Configuration manager for CLI settings in ~/.mpak/config.json
@@ -19,5 +26,29 @@ export declare class ConfigManager {
19
26
  private saveConfig;
20
27
  setRegistryUrl(url: string): void;
21
28
  getRegistryUrl(): string;
29
+ /**
30
+ * Get all stored config values for a package
31
+ */
32
+ getPackageConfig(packageName: string): PackageConfig | undefined;
33
+ /**
34
+ * Get a specific config value for a package
35
+ */
36
+ getPackageConfigValue(packageName: string, key: string): string | undefined;
37
+ /**
38
+ * Set a config value for a package
39
+ */
40
+ setPackageConfigValue(packageName: string, key: string, value: string): void;
41
+ /**
42
+ * Clear all config values for a package
43
+ */
44
+ clearPackageConfig(packageName: string): boolean;
45
+ /**
46
+ * Clear a specific config value for a package
47
+ */
48
+ clearPackageConfigValue(packageName: string, key: string): boolean;
49
+ /**
50
+ * List all packages with stored config
51
+ */
52
+ listPackagesWithConfig(): string[];
22
53
  }
23
54
  //# sourceMappingURL=config-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/utils/config-manager.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA2B;;IAQzC,OAAO,CAAC,eAAe;IAMvB,UAAU,IAAI,UAAU;IA4BxB,OAAO,CAAC,UAAU;IASlB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMjC,cAAc,IAAI,MAAM;CAIzB"}
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/utils/config-manager.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA2B;;IAQzC,OAAO,CAAC,eAAe;IAMvB,UAAU,IAAI,UAAU;IA4BxB,OAAO,CAAC,UAAU;IASlB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMjC,cAAc,IAAI,MAAM;IAKxB;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAKhE;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK3E;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAY5E;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAUhD;;OAEG;IACH,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAclE;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;CAInC"}