@agents-dev/cli 0.7.7

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.
Files changed (152) hide show
  1. package/AGENTS.md +400 -0
  2. package/CHANGELOG.md +297 -0
  3. package/CONTRIBUTING.md +164 -0
  4. package/LICENSE +21 -0
  5. package/README.md +117 -0
  6. package/bin/agents +24 -0
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.js +282 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/connect.d.ts +7 -0
  11. package/dist/commands/connect.js +48 -0
  12. package/dist/commands/connect.js.map +1 -0
  13. package/dist/commands/disconnect.d.ts +7 -0
  14. package/dist/commands/disconnect.js +47 -0
  15. package/dist/commands/disconnect.js.map +1 -0
  16. package/dist/commands/doctor.d.ts +6 -0
  17. package/dist/commands/doctor.js +430 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/init.d.ts +5 -0
  20. package/dist/commands/init.js +24 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/mcp-add.d.ts +20 -0
  23. package/dist/commands/mcp-add.js +250 -0
  24. package/dist/commands/mcp-add.js.map +1 -0
  25. package/dist/commands/mcp-import.d.ts +13 -0
  26. package/dist/commands/mcp-import.js +207 -0
  27. package/dist/commands/mcp-import.js.map +1 -0
  28. package/dist/commands/mcp-list.d.ts +5 -0
  29. package/dist/commands/mcp-list.js +34 -0
  30. package/dist/commands/mcp-list.js.map +1 -0
  31. package/dist/commands/mcp-remove.d.ts +7 -0
  32. package/dist/commands/mcp-remove.js +34 -0
  33. package/dist/commands/mcp-remove.js.map +1 -0
  34. package/dist/commands/mcp-test.d.ts +8 -0
  35. package/dist/commands/mcp-test.js +402 -0
  36. package/dist/commands/mcp-test.js.map +1 -0
  37. package/dist/commands/reset.d.ts +6 -0
  38. package/dist/commands/reset.js +76 -0
  39. package/dist/commands/reset.js.map +1 -0
  40. package/dist/commands/start.d.ts +6 -0
  41. package/dist/commands/start.js +292 -0
  42. package/dist/commands/start.js.map +1 -0
  43. package/dist/commands/status.d.ts +7 -0
  44. package/dist/commands/status.js +278 -0
  45. package/dist/commands/status.js.map +1 -0
  46. package/dist/commands/sync.d.ts +6 -0
  47. package/dist/commands/sync.js +22 -0
  48. package/dist/commands/sync.js.map +1 -0
  49. package/dist/commands/watch.d.ts +7 -0
  50. package/dist/commands/watch.js +117 -0
  51. package/dist/commands/watch.js.map +1 -0
  52. package/dist/core/claudeCli.d.ts +7 -0
  53. package/dist/core/claudeCli.js +35 -0
  54. package/dist/core/claudeCli.js.map +1 -0
  55. package/dist/core/config.d.ts +17 -0
  56. package/dist/core/config.js +121 -0
  57. package/dist/core/config.js.map +1 -0
  58. package/dist/core/cursorCli.d.ts +9 -0
  59. package/dist/core/cursorCli.js +60 -0
  60. package/dist/core/cursorCli.js.map +1 -0
  61. package/dist/core/fs.d.ts +11 -0
  62. package/dist/core/fs.js +76 -0
  63. package/dist/core/fs.js.map +1 -0
  64. package/dist/core/gitignore.d.ts +3 -0
  65. package/dist/core/gitignore.js +54 -0
  66. package/dist/core/gitignore.js.map +1 -0
  67. package/dist/core/mcp.d.ts +8 -0
  68. package/dist/core/mcp.js +134 -0
  69. package/dist/core/mcp.js.map +1 -0
  70. package/dist/core/mcpCrud.d.ts +34 -0
  71. package/dist/core/mcpCrud.js +105 -0
  72. package/dist/core/mcpCrud.js.map +1 -0
  73. package/dist/core/mcpImport.d.ts +14 -0
  74. package/dist/core/mcpImport.js +507 -0
  75. package/dist/core/mcpImport.js.map +1 -0
  76. package/dist/core/mcpSecrets.d.ts +27 -0
  77. package/dist/core/mcpSecrets.js +144 -0
  78. package/dist/core/mcpSecrets.js.map +1 -0
  79. package/dist/core/mcpValidation.d.ts +19 -0
  80. package/dist/core/mcpValidation.js +78 -0
  81. package/dist/core/mcpValidation.js.map +1 -0
  82. package/dist/core/paths.d.ts +37 -0
  83. package/dist/core/paths.js +43 -0
  84. package/dist/core/paths.js.map +1 -0
  85. package/dist/core/project.d.ts +16 -0
  86. package/dist/core/project.js +34 -0
  87. package/dist/core/project.js.map +1 -0
  88. package/dist/core/renderers.d.ts +14 -0
  89. package/dist/core/renderers.js +113 -0
  90. package/dist/core/renderers.js.map +1 -0
  91. package/dist/core/shell.d.ts +8 -0
  92. package/dist/core/shell.js +21 -0
  93. package/dist/core/shell.js.map +1 -0
  94. package/dist/core/shellWords.d.ts +1 -0
  95. package/dist/core/shellWords.js +84 -0
  96. package/dist/core/shellWords.js.map +1 -0
  97. package/dist/core/skills.d.ts +8 -0
  98. package/dist/core/skills.js +150 -0
  99. package/dist/core/skills.js.map +1 -0
  100. package/dist/core/skillsValidation.d.ts +1 -0
  101. package/dist/core/skillsValidation.js +68 -0
  102. package/dist/core/skillsValidation.js.map +1 -0
  103. package/dist/core/sync.d.ts +2 -0
  104. package/dist/core/sync.js +427 -0
  105. package/dist/core/sync.js.map +1 -0
  106. package/dist/core/syncLock.d.ts +1 -0
  107. package/dist/core/syncLock.js +84 -0
  108. package/dist/core/syncLock.js.map +1 -0
  109. package/dist/core/templates.d.ts +1 -0
  110. package/dist/core/templates.js +38 -0
  111. package/dist/core/templates.js.map +1 -0
  112. package/dist/core/trust.d.ts +7 -0
  113. package/dist/core/trust.js +51 -0
  114. package/dist/core/trust.js.map +1 -0
  115. package/dist/core/vscodeSettings.d.ts +17 -0
  116. package/dist/core/vscodeSettings.js +212 -0
  117. package/dist/core/vscodeSettings.js.map +1 -0
  118. package/dist/core/warnings.d.ts +2 -0
  119. package/dist/core/warnings.js +26 -0
  120. package/dist/core/warnings.js.map +1 -0
  121. package/dist/integrations/antigravity.d.ts +9 -0
  122. package/dist/integrations/antigravity.js +13 -0
  123. package/dist/integrations/antigravity.js.map +1 -0
  124. package/dist/integrations/claude.d.ts +1 -0
  125. package/dist/integrations/claude.js +4 -0
  126. package/dist/integrations/claude.js.map +1 -0
  127. package/dist/integrations/codex.d.ts +5 -0
  128. package/dist/integrations/codex.js +5 -0
  129. package/dist/integrations/codex.js.map +1 -0
  130. package/dist/integrations/copilotVscode.d.ts +7 -0
  131. package/dist/integrations/copilotVscode.js +9 -0
  132. package/dist/integrations/copilotVscode.js.map +1 -0
  133. package/dist/integrations/cursor.d.ts +7 -0
  134. package/dist/integrations/cursor.js +9 -0
  135. package/dist/integrations/cursor.js.map +1 -0
  136. package/dist/integrations/gemini.d.ts +12 -0
  137. package/dist/integrations/gemini.js +15 -0
  138. package/dist/integrations/gemini.js.map +1 -0
  139. package/dist/integrations/registry.d.ts +9 -0
  140. package/dist/integrations/registry.js +21 -0
  141. package/dist/integrations/registry.js.map +1 -0
  142. package/dist/types.d.ts +85 -0
  143. package/dist/types.js +2 -0
  144. package/dist/types.js.map +1 -0
  145. package/docs/EXAMPLES.md +211 -0
  146. package/docs/README.md +26 -0
  147. package/docs/agents-system.md +178 -0
  148. package/package.json +77 -0
  149. package/templates/agents/AGENTS.md +23 -0
  150. package/templates/agents/README.md +25 -0
  151. package/templates/agents/skills/README.md +27 -0
  152. package/templates/agents/skills/skill-guide/SKILL.md +29 -0
@@ -0,0 +1,48 @@
1
+ import prompts from 'prompts';
2
+ import { loadAgentsConfig, saveAgentsConfig } from '../core/config.js';
3
+ import { performSync } from '../core/sync.js';
4
+ import { formatWarnings } from '../core/warnings.js';
5
+ import { INTEGRATIONS, parseIntegrationList } from '../integrations/registry.js';
6
+ export async function runConnect(options) {
7
+ const config = await loadAgentsConfig(options.projectRoot);
8
+ const rawSelection = options.llm;
9
+ let selected = [];
10
+ if (rawSelection) {
11
+ selected = parseIntegrationList(rawSelection);
12
+ }
13
+ else if (options.interactive) {
14
+ selected = await promptSelection(config.integrations.enabled);
15
+ }
16
+ else {
17
+ throw new Error('No LLM selected. Use --llm or --interactive.');
18
+ }
19
+ config.integrations.enabled = selected;
20
+ await saveAgentsConfig(options.projectRoot, config);
21
+ const syncResult = await performSync({
22
+ projectRoot: options.projectRoot,
23
+ check: false,
24
+ verbose: options.verbose
25
+ });
26
+ process.stdout.write(`Enabled integrations: ${selected.join(', ') || '(none)'}\n`);
27
+ const warningBlock = formatWarnings(syncResult.warnings, 5);
28
+ if (warningBlock) {
29
+ process.stdout.write(warningBlock);
30
+ }
31
+ process.stdout.write(`Updated ${syncResult.changed.length} item(s).\n`);
32
+ }
33
+ async function promptSelection(current) {
34
+ const response = await prompts({
35
+ type: 'multiselect',
36
+ name: 'value',
37
+ message: 'Select LLM integrations',
38
+ choices: INTEGRATIONS.map((integration) => ({
39
+ title: integration.label,
40
+ value: integration.id,
41
+ selected: current.includes(integration.id)
42
+ })),
43
+ initial: current.length > 0 ? undefined : 0,
44
+ hint: '- Space to select. Enter to confirm.'
45
+ });
46
+ return response.value ?? [];
47
+ }
48
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAShF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB;IACtD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAE1D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAA;IAEhC,IAAI,QAAQ,GAAsB,EAAE,CAAA;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAC/C,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAO,GAAG,QAAQ,CAAA;IACtC,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAEnD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAA;IAClF,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC3D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,UAAU,CAAC,OAAO,CAAC,MAAM,aAAa,CAAC,CAAA;AACzE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA0B;IACvD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC1C,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,WAAW,CAAC,EAAE;YACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;SAC3C,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,EAAE,sCAAsC;KAC7C,CAAC,CAAA;IAEF,OAAQ,QAAQ,CAAC,KAAuC,IAAI,EAAE,CAAA;AAChE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface DisconnectOptions {
2
+ projectRoot: string;
3
+ llm?: string;
4
+ interactive: boolean;
5
+ verbose: boolean;
6
+ }
7
+ export declare function runDisconnect(options: DisconnectOptions): Promise<void>;
@@ -0,0 +1,47 @@
1
+ import prompts from 'prompts';
2
+ import { loadAgentsConfig, saveAgentsConfig } from '../core/config.js';
3
+ import { performSync } from '../core/sync.js';
4
+ import { formatWarnings } from '../core/warnings.js';
5
+ import { INTEGRATIONS, parseIntegrationList } from '../integrations/registry.js';
6
+ export async function runDisconnect(options) {
7
+ const config = await loadAgentsConfig(options.projectRoot);
8
+ const enabled = new Set(config.integrations.enabled);
9
+ const rawSelection = options.llm;
10
+ const toDisable = rawSelection
11
+ ? parseIntegrationList(rawSelection)
12
+ : options.interactive
13
+ ? await promptSelection(config.integrations.enabled)
14
+ : [];
15
+ for (const integration of toDisable) {
16
+ enabled.delete(integration);
17
+ }
18
+ config.integrations.enabled = [...enabled];
19
+ await saveAgentsConfig(options.projectRoot, config);
20
+ const syncResult = await performSync({
21
+ projectRoot: options.projectRoot,
22
+ check: false,
23
+ verbose: options.verbose
24
+ });
25
+ process.stdout.write(`Enabled integrations: ${config.integrations.enabled.join(', ') || '(none)'}\n`);
26
+ const warningBlock = formatWarnings(syncResult.warnings, 5);
27
+ if (warningBlock) {
28
+ process.stdout.write(warningBlock);
29
+ }
30
+ process.stdout.write(`Updated ${syncResult.changed.length} item(s).\n`);
31
+ }
32
+ async function promptSelection(enabled) {
33
+ if (enabled.length === 0)
34
+ return [];
35
+ const response = await prompts({
36
+ type: 'multiselect',
37
+ name: 'value',
38
+ message: 'Select LLM integrations to disable',
39
+ choices: INTEGRATIONS.filter((integration) => enabled.includes(integration.id)).map((integration) => ({
40
+ title: integration.label,
41
+ value: integration.id
42
+ })),
43
+ hint: '- Space to select. Enter to confirm.'
44
+ });
45
+ return response.value ?? [];
46
+ }
47
+ //# sourceMappingURL=disconnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../src/commands/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAShF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA0B;IAC5D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAEpD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAA;IAEhC,MAAM,SAAS,GAAG,YAAY;QAC5B,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC;QACpC,CAAC,CAAC,OAAO,CAAC,WAAW;YACnB,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;YACpD,CAAC,CAAC,EAAE,CAAA;IAER,KAAK,MAAM,WAAW,IAAI,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAA;IAC1C,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAEnD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAA;IACrG,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC3D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,UAAU,CAAC,OAAO,CAAC,MAAM,aAAa,CAAC,CAAA;AACzE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA0B;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,oCAAoC;QAC7C,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACpG,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,WAAW,CAAC,EAAE;SACtB,CAAC,CAAC;QACH,IAAI,EAAE,sCAAsC;KAC7C,CAAC,CAAA;IAEF,OAAQ,QAAQ,CAAC,KAAuC,IAAI,EAAE,CAAA;AAChE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface DoctorOptions {
2
+ projectRoot: string;
3
+ fix: boolean;
4
+ fixDryRun?: boolean;
5
+ }
6
+ export declare function runDoctor(options: DoctorOptions): Promise<void>;
@@ -0,0 +1,430 @@
1
+ import TOML from '@iarna/toml';
2
+ import { loadAgentsConfig } from '../core/config.js';
3
+ import { pathExists, readJson, readTextOrEmpty } from '../core/fs.js';
4
+ import { loadResolvedRegistry } from '../core/mcp.js';
5
+ import { getProjectPaths } from '../core/paths.js';
6
+ import { commandExists, runCommand } from '../core/shell.js';
7
+ import { performSync } from '../core/sync.js';
8
+ import { ensureCodexProjectTrusted, getCodexTrustState } from '../core/trust.js';
9
+ import { validateSkillsDirectory } from '../core/skillsValidation.js';
10
+ import { validateVscodeSettingsParse } from '../core/vscodeSettings.js';
11
+ import { INTEGRATIONS } from '../integrations/registry.js';
12
+ import { listMcpEntries, loadMcpState } from '../core/mcpCrud.js';
13
+ import { isPlaceholderValue, isSecretLikeKey } from '../core/mcpSecrets.js';
14
+ import { validateEnvKey, validateHeaderKey } from '../core/mcpValidation.js';
15
+ export async function runDoctor(options) {
16
+ if (options.fix && options.fixDryRun) {
17
+ throw new Error('Use either --fix or --fix-dry-run, not both.');
18
+ }
19
+ const applyFixes = options.fix === true;
20
+ const previewFixes = options.fixDryRun === true;
21
+ const paths = getProjectPaths(options.projectRoot);
22
+ const issues = [];
23
+ const actions = [];
24
+ if (!(await pathExists(paths.agentsConfig))) {
25
+ issues.push({ level: 'error', message: 'Missing .agents/agents.json (run agents start)' });
26
+ report(issues);
27
+ process.exitCode = 1;
28
+ return;
29
+ }
30
+ if (!(await pathExists(paths.agentsLocal))) {
31
+ issues.push({ level: 'warning', message: 'Missing .agents/local.json (run agents start or create manually)' });
32
+ }
33
+ if (!(await pathExists(paths.rootAgentsMd))) {
34
+ issues.push({ level: 'error', message: 'Missing root AGENTS.md' });
35
+ }
36
+ let config;
37
+ try {
38
+ config = await loadAgentsConfig(options.projectRoot);
39
+ }
40
+ catch (error) {
41
+ issues.push({ level: 'error', message: error instanceof Error ? error.message : String(error) });
42
+ report(issues);
43
+ process.exitCode = 1;
44
+ return;
45
+ }
46
+ try {
47
+ const resolved = await loadResolvedRegistry(options.projectRoot);
48
+ for (const missing of resolved.missingRequiredEnv) {
49
+ issues.push({ level: 'warning', message: `Missing required env: ${missing}` });
50
+ }
51
+ for (const warning of resolved.warnings) {
52
+ issues.push({ level: 'warning', message: warning });
53
+ }
54
+ }
55
+ catch (error) {
56
+ issues.push({
57
+ level: 'error',
58
+ message: error instanceof Error ? `MCP resolution failed: ${error.message}` : 'MCP resolution failed'
59
+ });
60
+ }
61
+ try {
62
+ const mcpState = await loadMcpState(options.projectRoot);
63
+ const entries = listMcpEntries(mcpState);
64
+ for (const entry of entries) {
65
+ for (const warning of collectPlaceholderWarnings(entry.name, entry.server, entry.localOverride)) {
66
+ issues.push({ level: 'warning', message: warning });
67
+ }
68
+ for (const warning of collectSecretLiteralWarnings(entry.name, entry.server)) {
69
+ issues.push({ level: 'warning', message: warning });
70
+ }
71
+ for (const message of collectInvalidKeyIssues(entry.name, entry.server, entry.localOverride)) {
72
+ issues.push({ level: 'error', message });
73
+ }
74
+ }
75
+ }
76
+ catch (error) {
77
+ issues.push({
78
+ level: 'warning',
79
+ message: error instanceof Error ? `Failed to inspect MCP configs: ${error.message}` : 'Failed to inspect MCP configs'
80
+ });
81
+ }
82
+ await validateManagedConfigSyntax(paths, config.integrations.enabled, issues);
83
+ const skillWarnings = await validateSkillsDirectory(paths.agentsSkillsDir);
84
+ for (const warning of skillWarnings) {
85
+ issues.push({ level: 'warning', message: warning });
86
+ }
87
+ if (config.workspace.vscode.hideGenerated) {
88
+ const valid = await validateVscodeSettingsParse(paths.vscodeSettings);
89
+ if (!valid) {
90
+ issues.push({
91
+ level: 'warning',
92
+ message: 'VS Code settings are invalid JSONC; .vscode/settings.json cannot be updated while hideGenerated is enabled.'
93
+ });
94
+ }
95
+ }
96
+ for (const integration of INTEGRATIONS) {
97
+ if (!config.integrations.enabled.includes(integration.id))
98
+ continue;
99
+ if (!integration.requiredBinary)
100
+ continue;
101
+ if (!commandExists(integration.requiredBinary)) {
102
+ issues.push({
103
+ level: 'warning',
104
+ message: `${integration.label} binary "${integration.requiredBinary}" not found in PATH`
105
+ });
106
+ }
107
+ }
108
+ const codexEnabled = config.integrations.enabled.includes('codex');
109
+ let codexTrustNeedsFix = false;
110
+ if (codexEnabled) {
111
+ const codexTrust = await getCodexTrustState(options.projectRoot);
112
+ codexTrustNeedsFix = codexTrust !== 'trusted';
113
+ if (codexTrustNeedsFix && !applyFixes && !previewFixes) {
114
+ issues.push({
115
+ level: 'warning',
116
+ message: 'Codex project trust is not set; project .codex/config.toml may be ignored.'
117
+ });
118
+ }
119
+ }
120
+ const trackedChecks = config.syncMode === 'source-only'
121
+ ? [
122
+ '.codex/config.toml',
123
+ '.gemini/settings.json',
124
+ '.vscode/mcp.json',
125
+ '.cursor/mcp.json',
126
+ '.antigravity/mcp.json',
127
+ '.claude/skills',
128
+ '.cursor/skills',
129
+ '.gemini/skills'
130
+ ]
131
+ : [];
132
+ trackedChecks.push('.agents/generated', '.agents/local.json');
133
+ const trackedByGit = [];
134
+ for (const candidate of trackedChecks) {
135
+ if (!isGitTracked(options.projectRoot, candidate))
136
+ continue;
137
+ trackedByGit.push(candidate);
138
+ if (!applyFixes && !previewFixes) {
139
+ issues.push({
140
+ level: 'warning',
141
+ message: `"${candidate}" is tracked by git. Ignore rules do not affect tracked files; use "git rm --cached ${candidate}" if needed.`
142
+ });
143
+ }
144
+ }
145
+ if (previewFixes) {
146
+ if (trackedByGit.length > 0) {
147
+ actions.push(`Would untrack git paths: ${trackedByGit.join(', ')}`);
148
+ }
149
+ if (codexEnabled && codexTrustNeedsFix) {
150
+ actions.push('Would set Codex project trust for this repo.');
151
+ }
152
+ actions.push('Would run agents sync after fixes.');
153
+ }
154
+ if (applyFixes) {
155
+ for (const trackedPath of trackedByGit) {
156
+ const removed = untrackGitPath(options.projectRoot, trackedPath);
157
+ if (!removed) {
158
+ issues.push({ level: 'warning', message: `Failed to untrack "${trackedPath}" automatically.` });
159
+ }
160
+ else {
161
+ actions.push(`Untracked "${trackedPath}" from git index.`);
162
+ }
163
+ }
164
+ if (codexEnabled && codexTrustNeedsFix) {
165
+ try {
166
+ await ensureCodexProjectTrusted(options.projectRoot);
167
+ actions.push('Set Codex project trust.');
168
+ }
169
+ catch (error) {
170
+ const message = error instanceof Error ? error.message : String(error);
171
+ issues.push({ level: 'warning', message: `Failed to set Codex trust automatically: ${message}` });
172
+ }
173
+ }
174
+ await performSync({ projectRoot: options.projectRoot, check: false, verbose: false });
175
+ actions.push('Ran agents sync.');
176
+ }
177
+ if (config.integrations.enabled.includes('antigravity') && !(await pathExists(paths.antigravityProjectMcp)) && !applyFixes) {
178
+ issues.push({
179
+ level: 'warning',
180
+ message: 'Antigravity project MCP file missing: .antigravity/mcp.json (run agents sync).'
181
+ });
182
+ }
183
+ report(issues);
184
+ reportActions(actions, previewFixes, applyFixes);
185
+ reportNextSteps(issues, previewFixes, applyFixes);
186
+ const hasErrors = issues.some((issue) => issue.level === 'error');
187
+ if (hasErrors) {
188
+ process.exitCode = 1;
189
+ }
190
+ }
191
+ function report(issues) {
192
+ if (issues.length === 0) {
193
+ process.stdout.write('Doctor: no issues found.\n');
194
+ return;
195
+ }
196
+ process.stdout.write('Doctor report:\n');
197
+ for (const issue of issues) {
198
+ process.stdout.write(`- [${issue.level}] ${issue.message}\n`);
199
+ }
200
+ }
201
+ function reportActions(actions, previewFixes, applyFixes) {
202
+ if (actions.length === 0)
203
+ return;
204
+ if (previewFixes) {
205
+ process.stdout.write('Doctor fix dry-run:\n');
206
+ }
207
+ else if (applyFixes) {
208
+ process.stdout.write('Doctor applied fixes:\n');
209
+ }
210
+ else {
211
+ return;
212
+ }
213
+ for (const action of actions) {
214
+ process.stdout.write(`- ${action}\n`);
215
+ }
216
+ }
217
+ function reportNextSteps(issues, previewFixes, applyFixes) {
218
+ const hasErrors = issues.some((issue) => issue.level === 'error');
219
+ const hasWarnings = issues.some((issue) => issue.level === 'warning');
220
+ if (hasErrors) {
221
+ process.stdout.write('Next: resolve errors and rerun "agents doctor".\n');
222
+ return;
223
+ }
224
+ if (applyFixes) {
225
+ process.stdout.write('Next: run "agents status --verbose" to verify runtime state.\n');
226
+ return;
227
+ }
228
+ if (previewFixes) {
229
+ process.stdout.write('Next: run "agents doctor --fix" to apply these changes.\n');
230
+ return;
231
+ }
232
+ if (hasWarnings) {
233
+ process.stdout.write('Next: run "agents doctor --fix-dry-run" to preview automatic fixes.\n');
234
+ }
235
+ }
236
+ function isGitTracked(projectRoot, relativePath) {
237
+ if (!commandExists('git'))
238
+ return false;
239
+ const result = runCommand('git', ['ls-files', '--error-unmatch', relativePath], projectRoot);
240
+ return result.ok;
241
+ }
242
+ function untrackGitPath(projectRoot, relativePath) {
243
+ if (!commandExists('git'))
244
+ return false;
245
+ const result = runCommand('git', ['rm', '--cached', '-r', '--', relativePath], projectRoot);
246
+ return result.ok;
247
+ }
248
+ function collectPlaceholderWarnings(name, server, localOverride) {
249
+ const warnings = [];
250
+ for (const placeholder of extractPlaceholders(server.command)) {
251
+ if (placeholder === 'PROJECT_ROOT')
252
+ continue;
253
+ if (localOverride?.command !== undefined)
254
+ continue;
255
+ if (!process.env[placeholder]) {
256
+ warnings.push(`MCP server "${name}" has unresolved placeholder in command: \${${placeholder}}`);
257
+ }
258
+ }
259
+ for (const placeholder of extractPlaceholders(server.url)) {
260
+ if (placeholder === 'PROJECT_ROOT')
261
+ continue;
262
+ if (localOverride?.url !== undefined)
263
+ continue;
264
+ if (!process.env[placeholder]) {
265
+ warnings.push(`MCP server "${name}" has unresolved placeholder in url: \${${placeholder}}`);
266
+ }
267
+ }
268
+ for (const placeholder of extractPlaceholders(server.cwd)) {
269
+ if (placeholder === 'PROJECT_ROOT')
270
+ continue;
271
+ if (localOverride?.cwd !== undefined)
272
+ continue;
273
+ if (!process.env[placeholder]) {
274
+ warnings.push(`MCP server "${name}" has unresolved placeholder in cwd: \${${placeholder}}`);
275
+ }
276
+ }
277
+ if (!localOverride?.args) {
278
+ for (const arg of server.args ?? []) {
279
+ for (const placeholder of extractPlaceholders(arg)) {
280
+ if (placeholder === 'PROJECT_ROOT')
281
+ continue;
282
+ if (!process.env[placeholder]) {
283
+ warnings.push(`MCP server "${name}" has unresolved placeholder in args: \${${placeholder}}`);
284
+ }
285
+ }
286
+ }
287
+ }
288
+ for (const [key, value] of Object.entries(server.env ?? {})) {
289
+ if (localOverride?.env && key in localOverride.env)
290
+ continue;
291
+ for (const placeholder of extractPlaceholders(value)) {
292
+ if (placeholder === 'PROJECT_ROOT')
293
+ continue;
294
+ if (!process.env[placeholder]) {
295
+ warnings.push(`MCP server "${name}" has unresolved placeholder in env "${key}": \${${placeholder}}`);
296
+ }
297
+ }
298
+ }
299
+ for (const [key, value] of Object.entries(server.headers ?? {})) {
300
+ if (localOverride?.headers && key in localOverride.headers)
301
+ continue;
302
+ for (const placeholder of extractPlaceholders(value)) {
303
+ if (placeholder === 'PROJECT_ROOT')
304
+ continue;
305
+ if (!process.env[placeholder]) {
306
+ warnings.push(`MCP server "${name}" has unresolved placeholder in header "${key}": \${${placeholder}}`);
307
+ }
308
+ }
309
+ }
310
+ return warnings;
311
+ }
312
+ function collectSecretLiteralWarnings(name, server) {
313
+ const warnings = [];
314
+ for (const [key, value] of Object.entries(server.env ?? {})) {
315
+ if (!isSecretLikeKey(key))
316
+ continue;
317
+ if (isPlaceholderValue(value))
318
+ continue;
319
+ warnings.push(`MCP server "${name}" may contain a secret literal in env "${key}". Move it to .agents/local.json.`);
320
+ }
321
+ for (const [key, value] of Object.entries(server.headers ?? {})) {
322
+ if (!isSecretLikeKey(key))
323
+ continue;
324
+ if (isPlaceholderValue(value))
325
+ continue;
326
+ warnings.push(`MCP server "${name}" may contain a secret literal in header "${key}". Move it to .agents/local.json.`);
327
+ }
328
+ const args = server.args ?? [];
329
+ for (let i = 0; i < args.length - 1; i += 1) {
330
+ const arg = args[i];
331
+ if (!/^--?(api[-_]?key|token|secret|password|passphrase|auth|authorization)$/i.test(arg))
332
+ continue;
333
+ const candidate = args[i + 1];
334
+ if (candidate.startsWith('-'))
335
+ continue;
336
+ if (isPlaceholderValue(candidate))
337
+ continue;
338
+ warnings.push(`MCP server "${name}" may contain a secret literal in args near "${arg}". Move it to .agents/local.json.`);
339
+ }
340
+ return warnings;
341
+ }
342
+ function collectInvalidKeyIssues(name, server, localOverride) {
343
+ const messages = [];
344
+ messages.push(...collectInvalidKeyIssuesForSource(name, server, '.agents/agents.json'));
345
+ if (localOverride) {
346
+ messages.push(...collectInvalidKeyIssuesForSource(name, localOverride, '.agents/local.json'));
347
+ }
348
+ return messages;
349
+ }
350
+ function collectInvalidKeyIssuesForSource(name, server, source) {
351
+ const messages = [];
352
+ for (const key of Object.keys(server.env ?? {})) {
353
+ try {
354
+ validateEnvKey(key);
355
+ }
356
+ catch (error) {
357
+ messages.push(`MCP server "${name}" has invalid environment variable key "${key}" in ${source}: ${error instanceof Error ? error.message : String(error)}`);
358
+ }
359
+ }
360
+ for (const key of Object.keys(server.headers ?? {})) {
361
+ try {
362
+ validateHeaderKey(key);
363
+ }
364
+ catch (error) {
365
+ messages.push(`MCP server "${name}" has invalid header key "${key}" in ${source}: ${error instanceof Error ? error.message : String(error)}`);
366
+ }
367
+ }
368
+ return messages;
369
+ }
370
+ async function validateManagedConfigSyntax(paths, enabledIntegrations, issues) {
371
+ await validateTomlIfExists(paths.generatedCodex, '.agents/generated/codex.config.toml', issues);
372
+ await validateJsonIfExists(paths.generatedGemini, '.agents/generated/gemini.settings.json', issues);
373
+ await validateJsonIfExists(paths.generatedCopilot, '.agents/generated/copilot.vscode.mcp.json', issues);
374
+ await validateJsonIfExists(paths.generatedCursor, '.agents/generated/cursor.mcp.json', issues);
375
+ await validateJsonIfExists(paths.generatedAntigravity, '.agents/generated/antigravity.mcp.json', issues);
376
+ await validateJsonIfExists(paths.generatedClaude, '.agents/generated/claude.mcp.json', issues);
377
+ if (enabledIntegrations.includes('codex')) {
378
+ await validateTomlIfExists(paths.codexConfig, '.codex/config.toml', issues);
379
+ }
380
+ if (enabledIntegrations.includes('gemini')) {
381
+ await validateJsonIfExists(paths.geminiSettings, '.gemini/settings.json', issues);
382
+ }
383
+ if (enabledIntegrations.includes('copilot_vscode')) {
384
+ await validateJsonIfExists(paths.vscodeMcp, '.vscode/mcp.json', issues);
385
+ }
386
+ if (enabledIntegrations.includes('cursor')) {
387
+ await validateJsonIfExists(paths.cursorMcp, '.cursor/mcp.json', issues);
388
+ }
389
+ if (enabledIntegrations.includes('antigravity')) {
390
+ await validateJsonIfExists(paths.antigravityProjectMcp, '.antigravity/mcp.json', issues);
391
+ }
392
+ }
393
+ async function validateTomlIfExists(filePath, label, issues) {
394
+ if (!(await pathExists(filePath)))
395
+ return;
396
+ const raw = await readTextOrEmpty(filePath);
397
+ try {
398
+ TOML.parse(raw);
399
+ }
400
+ catch (error) {
401
+ issues.push({
402
+ level: 'error',
403
+ message: `Invalid TOML in ${label}: ${error instanceof Error ? error.message : String(error)}`
404
+ });
405
+ }
406
+ }
407
+ async function validateJsonIfExists(filePath, label, issues) {
408
+ if (!(await pathExists(filePath)))
409
+ return;
410
+ try {
411
+ await readJson(filePath);
412
+ }
413
+ catch (error) {
414
+ issues.push({
415
+ level: 'error',
416
+ message: `Invalid JSON in ${label}: ${error instanceof Error ? error.message : String(error)}`
417
+ });
418
+ }
419
+ }
420
+ function extractPlaceholders(value) {
421
+ if (!value)
422
+ return [];
423
+ const out = new Set();
424
+ for (const match of value.matchAll(/\$\{([A-Z0-9_]+)\}/g)) {
425
+ if (match[1])
426
+ out.add(match[1]);
427
+ }
428
+ return [...out];
429
+ }
430
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAA;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAc5E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAsB;IACpD,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAA;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;IAE/C,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAClD,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAA;QAC1F,MAAM,CAAC,MAAM,CAAC,CAAA;QACd,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACR,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,kEAAkE,EAAE,CAAC,CAAA;IAChH,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,MAAM,CAAA;IACV,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAChG,MAAM,CAAC,MAAM,CAAC,CAAA;QACd,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAChE,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAyB,OAAO,EAAE,EAAE,CAAC,CAAA;QAChF,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,uBAAuB;SACtG,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACxD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACxC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,KAAK,MAAM,OAAO,IAAI,0BAA0B,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAChG,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YACrD,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,4BAA4B,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YACrD,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC7F,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,kCAAkC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,+BAA+B;SACtH,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAE7E,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAC1E,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,2BAA2B,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QACrE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,6GAA6G;aACvH,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAAE,SAAQ;QACnE,IAAI,CAAC,WAAW,CAAC,cAAc;YAAE,SAAQ;QACzC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,GAAG,WAAW,CAAC,KAAK,YAAY,WAAW,CAAC,cAAc,qBAAqB;aACzF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAClE,IAAI,kBAAkB,GAAG,KAAK,CAAA;IAC9B,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAChE,kBAAkB,GAAG,UAAU,KAAK,SAAS,CAAA;QAC7C,IAAI,kBAAkB,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,4EAA4E;aACtF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,KAAK,aAAa;QACrD,CAAC,CAAC;YACE,oBAAoB;YACpB,uBAAuB;YACvB,kBAAkB;YAClB,kBAAkB;YAClB,uBAAuB;YACvB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;SACjB;QACH,CAAC,CAAC,EAAE,CAAA;IACN,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAA;IAC7D,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;YAAE,SAAQ;QAC3D,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC5B,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,IAAI,SAAS,uFAAuF,SAAS,cAAc;aACrI,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,4BAA4B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACrE,CAAC;QACD,IAAI,YAAY,IAAI,kBAAkB,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IACpD,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;YAChE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,sBAAsB,WAAW,kBAAkB,EAAE,CAAC,CAAA;YACjG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,cAAc,WAAW,mBAAmB,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QACD,IAAI,YAAY,IAAI,kBAAkB,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,yBAAyB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;gBACpD,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,4CAA4C,OAAO,EAAE,EAAE,CAAC,CAAA;YACnG,CAAC;QACH,CAAC;QACD,MAAM,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QACrF,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3H,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,gFAAgF;SAC1F,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,CAAA;IACd,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;IAChD,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;IAEjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAA;IACjE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,MAAe;IAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAClD,OAAM;IACR,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAiB,EAAE,YAAqB,EAAE,UAAmB;IAClF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAEhC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAC/C,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,OAAM;IACR,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAe,EAAE,YAAqB,EAAE,UAAmB;IAClF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAA;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAErE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;QACzE,OAAM;IACR,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAA;QACtF,OAAM;IACR,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;QACjF,OAAM;IACR,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAA;IAC/F,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,WAAmB,EAAE,YAAoB;IAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAA;IAC5F,OAAO,MAAM,CAAC,EAAE,CAAA;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB,EAAE,YAAoB;IAC/D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAA;IAC3F,OAAO,MAAM,CAAC,EAAE,CAAA;AAClB,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAY,EACZ,MAOC,EACD,aAOa;IAEb,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,KAAK,MAAM,WAAW,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,IAAI,WAAW,KAAK,cAAc;YAAE,SAAQ;QAC5C,IAAI,aAAa,EAAE,OAAO,KAAK,SAAS;YAAE,SAAQ;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,+CAA+C,WAAW,GAAG,CAAC,CAAA;QACjG,CAAC;IACH,CAAC;IACD,KAAK,MAAM,WAAW,IAAI,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,IAAI,WAAW,KAAK,cAAc;YAAE,SAAQ;QAC5C,IAAI,aAAa,EAAE,GAAG,KAAK,SAAS;YAAE,SAAQ;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,2CAA2C,WAAW,GAAG,CAAC,CAAA;QAC7F,CAAC;IACH,CAAC;IACD,KAAK,MAAM,WAAW,IAAI,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,IAAI,WAAW,KAAK,cAAc;YAAE,SAAQ;QAC5C,IAAI,aAAa,EAAE,GAAG,KAAK,SAAS;YAAE,SAAQ;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,2CAA2C,WAAW,GAAG,CAAC,CAAA;QAC7F,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACpC,KAAK,MAAM,WAAW,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,IAAI,WAAW,KAAK,cAAc;oBAAE,SAAQ;gBAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,4CAA4C,WAAW,GAAG,CAAC,CAAA;gBAC9F,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5D,IAAI,aAAa,EAAE,GAAG,IAAI,GAAG,IAAI,aAAa,CAAC,GAAG;YAAE,SAAQ;QAC5D,KAAK,MAAM,WAAW,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,IAAI,WAAW,KAAK,cAAc;gBAAE,SAAQ;YAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,wCAAwC,GAAG,SAAS,WAAW,GAAG,CAAC,CAAA;YACtG,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,IAAI,aAAa,EAAE,OAAO,IAAI,GAAG,IAAI,aAAa,CAAC,OAAO;YAAE,SAAQ;QACpE,KAAK,MAAM,WAAW,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,IAAI,WAAW,KAAK,cAAc;gBAAE,SAAQ;YAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,2CAA2C,GAAG,SAAS,WAAW,GAAG,CAAC,CAAA;YACzG,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,4BAA4B,CACnC,IAAY,EACZ,MAIC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAAE,SAAQ;QACnC,IAAI,kBAAkB,CAAC,KAAK,CAAC;YAAE,SAAQ;QACvC,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,0CAA0C,GAAG,mCAAmC,CAAC,CAAA;IACpH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAAE,SAAQ;QACnC,IAAI,kBAAkB,CAAC,KAAK,CAAC;YAAE,SAAQ;QACvC,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,6CAA6C,GAAG,mCAAmC,CAAC,CAAA;IACvH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,CAAC,yEAAyE,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAQ;QAClG,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7B,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QACvC,IAAI,kBAAkB,CAAC,SAAS,CAAC;YAAE,SAAQ;QAC3C,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,gDAAgD,GAAG,mCAAmC,CAAC,CAAA;IAC1H,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAY,EACZ,MAGC,EACD,aAGa;IAEb,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAA;IACvF,IAAI,aAAa,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,GAAG,gCAAgC,CAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAA;IAC/F,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,gCAAgC,CACvC,IAAY,EACZ,MAGC,EACD,MAAc;IAEd,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,cAAc,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CACX,eAAe,IAAI,2CAA2C,GAAG,QAAQ,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7I,CAAA;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CACX,eAAe,IAAI,6BAA6B,GAAG,QAAQ,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/H,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,2BAA2B,CACxC,KAAmB,EACnB,mBAAsC,EACtC,MAAe;IAEf,MAAM,oBAAoB,CAAC,KAAK,CAAC,cAAc,EAAE,qCAAqC,EAAE,MAAM,CAAC,CAAA;IAC/F,MAAM,oBAAoB,CAAC,KAAK,CAAC,eAAe,EAAE,wCAAwC,EAAE,MAAM,CAAC,CAAA;IACnG,MAAM,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,EAAE,2CAA2C,EAAE,MAAM,CAAC,CAAA;IACvG,MAAM,oBAAoB,CAAC,KAAK,CAAC,eAAe,EAAE,mCAAmC,EAAE,MAAM,CAAC,CAAA;IAC9F,MAAM,oBAAoB,CAAC,KAAK,CAAC,oBAAoB,EAAE,wCAAwC,EAAE,MAAM,CAAC,CAAA;IACxG,MAAM,oBAAoB,CAAC,KAAK,CAAC,eAAe,EAAE,mCAAmC,EAAE,MAAM,CAAC,CAAA;IAE9F,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,oBAAoB,CAAC,KAAK,CAAC,WAAW,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;IAC7E,CAAC;IACD,IAAI,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,oBAAoB,CAAC,KAAK,CAAC,cAAc,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAA;IACnF,CAAC;IACD,IAAI,mBAAmB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnD,MAAM,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,mBAAmB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAChD,MAAM,oBAAoB,CAAC,KAAK,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAA;IAC1F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,QAAgB,EAAE,KAAa,EAAE,MAAe;IAClF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAM;IACzC,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,mBAAmB,KAAK,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC/F,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,QAAgB,EAAE,KAAa,EAAE,MAAe;IAClF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAM;IACzC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAU,QAAQ,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,mBAAmB,KAAK,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC/F,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC1D,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface InitOptions {
2
+ projectRoot: string;
3
+ force: boolean;
4
+ }
5
+ export declare function runInit(options: InitOptions): Promise<void>;
@@ -0,0 +1,24 @@
1
+ import path from 'node:path';
2
+ import { ensureProjectGitignore } from '../core/gitignore.js';
3
+ import { initializeProjectSkeleton } from '../core/project.js';
4
+ export async function runInit(options) {
5
+ const projectRoot = path.resolve(options.projectRoot);
6
+ const init = await initializeProjectSkeleton({
7
+ projectRoot,
8
+ force: options.force,
9
+ integrations: [],
10
+ integrationOptions: {
11
+ cursorAutoApprove: true,
12
+ antigravityGlobalSync: false
13
+ },
14
+ syncMode: 'source-only',
15
+ hideGeneratedInVscode: true
16
+ });
17
+ await ensureProjectGitignore(projectRoot, 'source-only');
18
+ process.stdout.write(`Initialized v3 project scaffold in ${projectRoot}\n`);
19
+ if (init.changed.length > 0) {
20
+ process.stdout.write(`Created/updated:\n- ${init.changed.join('\n- ')}\n`);
21
+ }
22
+ process.stdout.write('Next: run "agents start" for guided setup.\n');
23
+ }
24
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAO9D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAErD,MAAM,IAAI,GAAG,MAAM,yBAAyB,CAAC;QAC3C,WAAW;QACX,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,EAAE;QAChB,kBAAkB,EAAE;YAClB,iBAAiB,EAAE,IAAI;YACvB,qBAAqB,EAAE,KAAK;SAC7B;QACD,QAAQ,EAAE,aAAa;QACvB,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAA;IAEF,MAAM,sBAAsB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IAExD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,WAAW,IAAI,CAAC,CAAA;IAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;AACtE,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface McpAddOptions {
2
+ projectRoot: string;
3
+ name?: string;
4
+ transport?: string;
5
+ command?: string;
6
+ args?: string[];
7
+ url?: string;
8
+ env?: string[];
9
+ headers?: string[];
10
+ secretEnv?: string[];
11
+ secretHeaders?: string[];
12
+ secretArgs?: string[];
13
+ targets?: string[];
14
+ description?: string;
15
+ disabled: boolean;
16
+ replace: boolean;
17
+ noSync: boolean;
18
+ nonInteractive: boolean;
19
+ }
20
+ export declare function runMcpAdd(options: McpAddOptions): Promise<void>;