kyro-ai 3.3.1 → 3.3.3

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 (90) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/WORKFLOW.yaml +1 -1
  3. package/dist/cli/adapters/codex.d.ts.map +1 -1
  4. package/dist/cli/adapters/codex.js +24 -0
  5. package/dist/cli/adapters/codex.js.map +1 -1
  6. package/dist/cli/adapters/command-skills.d.ts +3 -0
  7. package/dist/cli/adapters/command-skills.d.ts.map +1 -1
  8. package/dist/cli/adapters/command-skills.js +16 -4
  9. package/dist/cli/adapters/command-skills.js.map +1 -1
  10. package/dist/cli/adapters/detection.d.ts +5 -0
  11. package/dist/cli/adapters/detection.d.ts.map +1 -0
  12. package/dist/cli/adapters/detection.js +43 -0
  13. package/dist/cli/adapters/detection.js.map +1 -0
  14. package/dist/cli/adapters/opencode.d.ts.map +1 -1
  15. package/dist/cli/adapters/opencode.js +94 -7
  16. package/dist/cli/adapters/opencode.js.map +1 -1
  17. package/dist/cli/adapters/registry-types.d.ts +31 -0
  18. package/dist/cli/adapters/registry-types.d.ts.map +1 -1
  19. package/dist/cli/adapters/registry.d.ts.map +1 -1
  20. package/dist/cli/adapters/registry.js +34 -3
  21. package/dist/cli/adapters/registry.js.map +1 -1
  22. package/dist/cli/adapters/standard.d.ts.map +1 -1
  23. package/dist/cli/adapters/standard.js +25 -0
  24. package/dist/cli/adapters/standard.js.map +1 -1
  25. package/dist/cli/app.d.ts.map +1 -1
  26. package/dist/cli/app.js +4 -0
  27. package/dist/cli/app.js.map +1 -1
  28. package/dist/cli/commands/detect.d.ts +3 -0
  29. package/dist/cli/commands/detect.d.ts.map +1 -0
  30. package/dist/cli/commands/detect.js +39 -0
  31. package/dist/cli/commands/detect.js.map +1 -0
  32. package/dist/cli/commands/doctor.d.ts +1 -1
  33. package/dist/cli/commands/doctor.d.ts.map +1 -1
  34. package/dist/cli/commands/doctor.js +26 -2
  35. package/dist/cli/commands/doctor.js.map +1 -1
  36. package/dist/cli/commands/install.d.ts.map +1 -1
  37. package/dist/cli/commands/install.js +25 -2
  38. package/dist/cli/commands/install.js.map +1 -1
  39. package/dist/cli/commands/preflight.d.ts +11 -0
  40. package/dist/cli/commands/preflight.d.ts.map +1 -0
  41. package/dist/cli/commands/preflight.js +50 -0
  42. package/dist/cli/commands/preflight.js.map +1 -0
  43. package/dist/cli/commands/tui.d.ts.map +1 -1
  44. package/dist/cli/commands/tui.js +19 -3
  45. package/dist/cli/commands/tui.js.map +1 -1
  46. package/dist/cli/commands/uninstall.d.ts.map +1 -1
  47. package/dist/cli/commands/uninstall.js +34 -7
  48. package/dist/cli/commands/uninstall.js.map +1 -1
  49. package/dist/cli/drift.d.ts +19 -0
  50. package/dist/cli/drift.d.ts.map +1 -0
  51. package/dist/cli/drift.js +136 -0
  52. package/dist/cli/drift.js.map +1 -0
  53. package/dist/cli/fs.d.ts.map +1 -1
  54. package/dist/cli/fs.js +6 -70
  55. package/dist/cli/fs.js.map +1 -1
  56. package/dist/cli/help.d.ts.map +1 -1
  57. package/dist/cli/help.js +12 -3
  58. package/dist/cli/help.js.map +1 -1
  59. package/dist/cli/injectors/json-merge.d.ts +3 -0
  60. package/dist/cli/injectors/json-merge.d.ts.map +1 -0
  61. package/dist/cli/injectors/json-merge.js +136 -0
  62. package/dist/cli/injectors/json-merge.js.map +1 -0
  63. package/dist/cli/injectors/managed-block.d.ts +7 -0
  64. package/dist/cli/injectors/managed-block.d.ts.map +1 -0
  65. package/dist/cli/injectors/managed-block.js +39 -0
  66. package/dist/cli/injectors/managed-block.js.map +1 -0
  67. package/dist/cli/options.d.ts.map +1 -1
  68. package/dist/cli/options.js +20 -0
  69. package/dist/cli/options.js.map +1 -1
  70. package/dist/cli/pipeline/operation-steps.d.ts +10 -0
  71. package/dist/cli/pipeline/operation-steps.d.ts.map +1 -0
  72. package/dist/cli/pipeline/operation-steps.js +141 -0
  73. package/dist/cli/pipeline/operation-steps.js.map +1 -0
  74. package/dist/cli/pipeline/orchestrator.d.ts +12 -0
  75. package/dist/cli/pipeline/orchestrator.d.ts.map +1 -0
  76. package/dist/cli/pipeline/orchestrator.js +111 -0
  77. package/dist/cli/pipeline/orchestrator.js.map +1 -0
  78. package/dist/cli/pipeline/types.d.ts +40 -0
  79. package/dist/cli/pipeline/types.d.ts.map +1 -0
  80. package/dist/cli/pipeline/types.js +3 -0
  81. package/dist/cli/pipeline/types.js.map +1 -0
  82. package/dist/cli/types.d.ts +6 -1
  83. package/dist/cli/types.d.ts.map +1 -1
  84. package/docs/HOW-TO-USE-OPENCODE.md +10 -6
  85. package/docs/agent-adapters.md +9 -4
  86. package/docs/cli.md +48 -2
  87. package/docs/getting-started.md +8 -0
  88. package/package.json +3 -2
  89. package/scripts/check-adapter-fixtures.mjs +595 -0
  90. package/docs/kyro-adapter-architecture-redesign.md +0 -987
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kyro-ai",
3
- "version": "3.3.1",
3
+ "version": "3.3.3",
4
4
  "description": "Claude Code adapter for Kyro, a portable sprint workflow kit for AI coding agents",
5
5
  "author": {
6
6
  "name": "SynapSync",
package/WORKFLOW.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  name: kyro-ai
2
2
  type: workflow
3
- version: "3.3.1"
3
+ version: "3.3.3"
4
4
  description: >
5
5
  Portable sprint workflow kit for AI coding agents, with markdown artifacts,
6
6
  adapter guides, adaptive per-project learning, and formal validation gates.
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/codex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK1D,eAAO,MAAM,YAAY,EAAE,iBAwC1B,CAAC"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/codex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAM1D,eAAO,MAAM,YAAY,EAAE,iBA+D1B,CAAC"}
@@ -5,12 +5,33 @@ const constants_1 = require("../constants");
5
5
  const fs_1 = require("../fs");
6
6
  const command_skills_1 = require("./command-skills");
7
7
  const standard_1 = require("./standard");
8
+ const detection_1 = require("./detection");
8
9
  const AGENTS_PATH = 'AGENTS.md';
9
10
  const KYRO_AGENTS_BLOCK = 'agents-md';
10
11
  exports.codexAdapter = {
11
12
  agent: constants_1.AGENT.CODEX,
12
13
  displayName: 'Codex',
13
14
  status: 'implemented',
15
+ capabilities() {
16
+ return ['command-skills', 'workspace-agents-block', 'filesystem-detect', 'system-prompt', 'mcp'];
17
+ },
18
+ paths(homeDir) {
19
+ return {
20
+ globalConfigDir: `${homeDir}/.codex`,
21
+ systemPromptPath: `${homeDir}/.codex/AGENTS.md`,
22
+ skillsDir: `${homeDir}/.codex/skills`,
23
+ mcpConfigPath: `${homeDir}/.codex/config.toml`,
24
+ };
25
+ },
26
+ detect(context) {
27
+ return (0, detection_1.detectFromPaths)(constants_1.AGENT.CODEX, 'codex', this.paths(context.homeDir), context, 'Codex adapter');
28
+ },
29
+ systemPromptStrategy() {
30
+ return 'managed-block';
31
+ },
32
+ mcpStrategy() {
33
+ return 'toml-file';
34
+ },
14
35
  buildProjection(plan) {
15
36
  (0, command_skills_1.addCommandSkillProjection)(plan);
16
37
  plan.push({
@@ -20,6 +41,9 @@ exports.codexAdapter = {
20
41
  content: buildAgentsBlock(),
21
42
  });
22
43
  },
44
+ buildRemoval(plan) {
45
+ plan.push({ action: 'remove-block', path: AGENTS_PATH, blockName: KYRO_AGENTS_BLOCK });
46
+ },
23
47
  buildManagedFiles() {
24
48
  return (0, command_skills_1.buildCommandSkillManagedFiles)();
25
49
  },
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli/adapters/codex.ts"],"names":[],"mappings":";;;AAAA,4CAAkF;AAClF,8BAAwC;AACxC,qDAA4F;AAC5F,yCAAoD;AAGpD,MAAM,WAAW,GAAG,WAAW,CAAC;AAChC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAEzB,QAAA,YAAY,GAAsB;IAC7C,KAAK,EAAE,iBAAK,CAAC,KAAK;IAClB,WAAW,EAAE,OAAO;IACpB,MAAM,EAAE,aAAa;IACrB,eAAe,CAAC,IAAI;QAClB,IAAA,0CAAyB,EAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,iBAAiB;YAC5B,OAAO,EAAE,gBAAgB,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,iBAAiB;QACf,OAAO,IAAA,8CAA6B,GAAE,CAAC;IACzC,CAAC;IACD,kBAAkB;QAChB,OAAO,CAAC,GAAG,WAAW,IAAI,iBAAiB,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,qBAAqB,CAAC,KAAK,EAAE,WAAW;QACtC,OAAO;YACL,KAAK,EAAE,iBAAK,CAAC,KAAK;YAClB,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,qBAAS;YACnB,YAAY,EAAE,6BAAiB;YAC/B,UAAU,EAAE,6BAAiB;SAC9B,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,QAAQ;QACb,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,iBAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACzE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;QAC9F,CAAC;QACD,MAAM,YAAY,GAAG,IAAA,iCAAsB,EAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,YAAY,CAAC;QACxD,IAAI,CAAC,IAAA,oBAAe,EAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,yBAAyB,WAAW,EAAE,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;QAC3I,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,gEAAgE,EAAE,CAAC;IAC7H,CAAC;CACF,CAAC;AAEF,SAAS,gBAAgB;IACvB,OAAO,qHAAqH,qBAAS,gEAAgE,yBAAa,0BAA0B,6BAAiB,iMAAiM,CAAC;AACjc,CAAC"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli/adapters/codex.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import type { KyroCommandName, OperationPlan } from '../types';
2
2
  export declare function addCommandSkillProjection(plan: OperationPlan[]): void;
3
+ export declare function addCommandSkillProjectionToRoot(plan: OperationPlan[], skillsRoot: string): void;
3
4
  export declare function buildCommandSkillManagedFiles(): string[];
5
+ export declare function buildCommandSkillManagedFilesForRoot(skillsRoot: string): string[];
4
6
  export declare function getCommandSkillPath(command: KyroCommandName): string;
7
+ export declare function getCommandSkillPathForRoot(command: KyroCommandName, skillsRoot: string): string;
5
8
  //# sourceMappingURL=command-skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-skills.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/command-skills.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE/D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAYrE;AAED,wBAAgB,6BAA6B,IAAI,MAAM,EAAE,CAExD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEpE"}
1
+ {"version":3,"file":"command-skills.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/command-skills.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE/D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAErE;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAY/F;AAED,wBAAgB,6BAA6B,IAAI,MAAM,EAAE,CAExD;AAED,wBAAgB,oCAAoC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEpE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/F"}
@@ -1,13 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addCommandSkillProjection = addCommandSkillProjection;
4
+ exports.addCommandSkillProjectionToRoot = addCommandSkillProjectionToRoot;
4
5
  exports.buildCommandSkillManagedFiles = buildCommandSkillManagedFiles;
6
+ exports.buildCommandSkillManagedFilesForRoot = buildCommandSkillManagedFilesForRoot;
5
7
  exports.getCommandSkillPath = getCommandSkillPath;
8
+ exports.getCommandSkillPathForRoot = getCommandSkillPathForRoot;
6
9
  const constants_1 = require("../constants");
7
10
  function addCommandSkillProjection(plan) {
11
+ addCommandSkillProjectionToRoot(plan, constants_1.AGENT_SKILLS_ROOT);
12
+ }
13
+ function addCommandSkillProjectionToRoot(plan, skillsRoot) {
8
14
  for (const command of constants_1.COMMAND_NAMES) {
9
- const path = getCommandSkillPath(command);
10
- if (plan.some((operation) => operation.action === 'write' && operation.path === path)) {
15
+ const path = getCommandSkillPathForRoot(command, skillsRoot);
16
+ if (plan.some((operation) => operation.path === path)) {
11
17
  continue;
12
18
  }
13
19
  plan.push({
@@ -18,10 +24,16 @@ function addCommandSkillProjection(plan) {
18
24
  }
19
25
  }
20
26
  function buildCommandSkillManagedFiles() {
21
- return constants_1.COMMAND_NAMES.map((command) => getCommandSkillPath(command));
27
+ return buildCommandSkillManagedFilesForRoot(constants_1.AGENT_SKILLS_ROOT);
28
+ }
29
+ function buildCommandSkillManagedFilesForRoot(skillsRoot) {
30
+ return constants_1.COMMAND_NAMES.map((command) => getCommandSkillPathForRoot(command, skillsRoot));
22
31
  }
23
32
  function getCommandSkillPath(command) {
24
- return `${constants_1.AGENT_SKILLS_ROOT}/kyro-${command}/SKILL.md`;
33
+ return getCommandSkillPathForRoot(command, constants_1.AGENT_SKILLS_ROOT);
34
+ }
35
+ function getCommandSkillPathForRoot(command, skillsRoot) {
36
+ return `${skillsRoot}/kyro-${command}/SKILL.md`;
25
37
  }
26
38
  function buildCommandSkill(command) {
27
39
  const title = command === 'wrap-up' ? 'Kyro Wrap-Up' : `Kyro ${capitalize(command)}`;
@@ -1 +1 @@
1
- {"version":3,"file":"command-skills.js","sourceRoot":"","sources":["../../../src/cli/adapters/command-skills.ts"],"names":[],"mappings":";;AAGA,8DAYC;AAED,sEAEC;AAED,kDAEC;AAvBD,4CAA8G;AAG9G,SAAgB,yBAAyB,CAAC,IAAqB;IAC7D,KAAK,MAAM,OAAO,IAAI,yBAAa,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACtF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAgB,6BAA6B;IAC3C,OAAO,yBAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAwB;IAC1D,OAAO,GAAG,6BAAiB,SAAS,OAAO,WAAW,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAwB;IACjD,MAAM,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACrF,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,mBAAmB,OAAO,kBAAkB,WAAW,sGAAsG,KAAK,4BAA4B,8BAAkB,IAAI,OAAO,uEAAuE,qBAAS,qBAAqB,yBAAa,oFAAoF,CAAC;AAC3a,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAwB;IACrD,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,qEAAqE,CAAC;IACtG,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,kEAAkE,CAAC;IACpG,OAAO,gEAAgE,CAAC;AAC1E,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"command-skills.js","sourceRoot":"","sources":["../../../src/cli/adapters/command-skills.ts"],"names":[],"mappings":";;AAGA,8DAEC;AAED,0EAYC;AAED,sEAEC;AAED,oFAEC;AAED,kDAEC;AAED,gEAEC;AAnCD,4CAA8G;AAG9G,SAAgB,yBAAyB,CAAC,IAAqB;IAC7D,+BAA+B,CAAC,IAAI,EAAE,6BAAiB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,+BAA+B,CAAC,IAAqB,EAAE,UAAkB;IACvF,KAAK,MAAM,OAAO,IAAI,yBAAa,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACtD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAgB,6BAA6B;IAC3C,OAAO,oCAAoC,CAAC,6BAAiB,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,oCAAoC,CAAC,UAAkB;IACrE,OAAO,yBAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,0BAA0B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAwB;IAC1D,OAAO,0BAA0B,CAAC,OAAO,EAAE,6BAAiB,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,0BAA0B,CAAC,OAAwB,EAAE,UAAkB;IACrF,OAAO,GAAG,UAAU,SAAS,OAAO,WAAW,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAwB;IACjD,MAAM,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACrF,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,mBAAmB,OAAO,kBAAkB,WAAW,sGAAsG,KAAK,4BAA4B,8BAAkB,IAAI,OAAO,uEAAuE,qBAAS,qBAAqB,yBAAa,oFAAoF,CAAC;AAC3a,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAwB;IACrD,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,qEAAqE,CAAC;IACtG,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,kEAAkE,CAAC;IACpG,OAAO,gEAAgE,CAAC;AAC1E,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Agent } from '../types';
2
+ import type { AdapterPaths, DetectionContext, DetectionResult } from './registry-types';
3
+ export declare function detectFromPaths(agent: Agent, binaryName: string | null, paths: AdapterPaths, context: DetectionContext, fallbackDetail: string): DetectionResult;
4
+ export declare function directoryExists(path: string): boolean;
5
+ //# sourceMappingURL=detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/detection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExF,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,GAAG,eAAe,CAiBhK;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectFromPaths = detectFromPaths;
4
+ exports.directoryExists = directoryExists;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ function detectFromPaths(agent, binaryName, paths, context, fallbackDetail) {
8
+ const binaryPath = binaryName ? findExecutable(binaryName, context.envPath ?? process.env.PATH ?? '') : null;
9
+ const configPath = paths.globalConfigDir ?? null;
10
+ const configFound = configPath ? directoryExists(configPath) : false;
11
+ const installed = binaryName ? binaryPath !== null : configFound;
12
+ const detail = configPath
13
+ ? `config=${configPath}; binary=${binaryPath ?? 'not-found'}`
14
+ : fallbackDetail;
15
+ return {
16
+ agent,
17
+ installed,
18
+ binaryPath,
19
+ configFound,
20
+ configPath,
21
+ detail,
22
+ };
23
+ }
24
+ function directoryExists(path) {
25
+ try {
26
+ return (0, node_fs_1.existsSync)(path) && (0, node_fs_1.statSync)(path).isDirectory();
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ function findExecutable(binaryName, envPath) {
33
+ const extensions = process.platform === 'win32' ? ['', '.exe', '.cmd', '.bat'] : [''];
34
+ for (const directory of envPath.split(node_path_1.delimiter).filter(Boolean)) {
35
+ for (const extension of extensions) {
36
+ const candidate = (0, node_path_1.join)(directory, `${binaryName}${extension}`);
37
+ if ((0, node_fs_1.existsSync)(candidate))
38
+ return candidate;
39
+ }
40
+ }
41
+ return null;
42
+ }
43
+ //# sourceMappingURL=detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection.js","sourceRoot":"","sources":["../../../src/cli/adapters/detection.ts"],"names":[],"mappings":";;AAKA,0CAiBC;AAED,0CAMC;AA9BD,qCAA+C;AAC/C,yCAA4C;AAI5C,SAAgB,eAAe,CAAC,KAAY,EAAE,UAAyB,EAAE,KAAmB,EAAE,OAAyB,EAAE,cAAsB;IAC7I,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7G,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC;IACjD,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;IACjE,MAAM,MAAM,GAAG,UAAU;QACvB,CAAC,CAAC,UAAU,UAAU,YAAY,UAAU,IAAI,WAAW,EAAE;QAC7D,CAAC,CAAC,cAAc,CAAC;IAEnB,OAAO;QACL,KAAK;QACL,SAAS;QACT,UAAU;QACV,WAAW;QACX,UAAU;QACV,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,OAAO,IAAA,oBAAU,EAAC,IAAI,CAAC,IAAI,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,OAAe;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,qBAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,GAAG,UAAU,GAAG,SAAS,EAAE,CAAC,CAAC;YAC/D,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/opencode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAI1D,eAAO,MAAM,eAAe,EAAE,iBAyB7B,CAAC"}
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/opencode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAW1D,eAAO,MAAM,eAAe,EAAE,iBAgD7B,CAAC"}
@@ -3,15 +3,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.openCodeAdapter = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  const command_skills_1 = require("./command-skills");
6
- const standard_1 = require("./standard");
6
+ const fs_1 = require("../fs");
7
+ const detection_1 = require("./detection");
8
+ const OPENCODE_SKILLS_ROOT = '~/.config/opencode/skills';
9
+ const OPENCODE_COMMANDS_ROOT = '~/.config/opencode/commands';
10
+ const OPENCODE_SETTINGS_PATH = '~/.config/opencode/opencode.json';
11
+ const KYRO_OPENCODE_AGENT = 'kyro-orchestrator';
7
12
  exports.openCodeAdapter = {
8
13
  agent: constants_1.AGENT.OPENCODE,
9
14
  displayName: 'OpenCode',
10
15
  status: 'implemented',
11
- buildProjection: command_skills_1.addCommandSkillProjection,
12
- buildManagedFiles: command_skills_1.buildCommandSkillManagedFiles,
16
+ capabilities() {
17
+ return ['command-skills', 'filesystem-detect', 'system-prompt', 'slash-commands'];
18
+ },
19
+ paths(homeDir) {
20
+ return {
21
+ globalConfigDir: `${homeDir}/.config/opencode`,
22
+ systemPromptPath: `${homeDir}/.config/opencode/AGENTS.md`,
23
+ skillsDir: `${homeDir}/.config/opencode/skills`,
24
+ commandsDir: `${homeDir}/.config/opencode/commands`,
25
+ settingsPath: `${homeDir}/.config/opencode/opencode.json`,
26
+ mcpConfigPath: `${homeDir}/.config/opencode/opencode.json`,
27
+ };
28
+ },
29
+ detect(context) {
30
+ return (0, detection_1.detectFromPaths)(constants_1.AGENT.OPENCODE, 'opencode', this.paths(context.homeDir), context, 'OpenCode adapter');
31
+ },
32
+ systemPromptStrategy() {
33
+ return 'json-agent-overlay';
34
+ },
35
+ mcpStrategy() {
36
+ return 'none';
37
+ },
38
+ buildProjection: addOpenCodeProjection,
39
+ buildRemoval: removeOpenCodeProjection,
40
+ buildManagedFiles: buildOpenCodeManagedFiles,
13
41
  buildManagedBlocks() {
14
- return [];
42
+ return [`${OPENCODE_SETTINGS_PATH}#agent.${KYRO_OPENCODE_AGENT}`];
15
43
  },
16
44
  buildInstalledAdapter(scope, installedAt) {
17
45
  return {
@@ -19,15 +47,74 @@ exports.openCodeAdapter = {
19
47
  scope,
20
48
  installedAt,
21
49
  corePath: constants_1.KYRO_ROOT,
22
- commandsPath: constants_1.AGENT_SKILLS_ROOT,
23
- skillsPath: constants_1.AGENT_SKILLS_ROOT,
50
+ commandsPath: OPENCODE_COMMANDS_ROOT,
51
+ skillsPath: OPENCODE_SKILLS_ROOT,
24
52
  };
25
53
  },
26
54
  doctor(manifest) {
27
55
  if (!manifest?.adapters.some((adapter) => adapter.agent === constants_1.AGENT.OPENCODE)) {
28
56
  return { status: 'warn', name: 'OpenCode adapter', detail: 'not installed in this workspace' };
29
57
  }
30
- return (0, standard_1.checkCommandProjection)('OpenCode adapter');
58
+ return checkOpenCodeProjection();
31
59
  },
32
60
  };
61
+ function addOpenCodeProjection(plan) {
62
+ (0, command_skills_1.addCommandSkillProjectionToRoot)(plan, OPENCODE_SKILLS_ROOT);
63
+ for (const command of constants_1.COMMAND_NAMES) {
64
+ plan.push({
65
+ action: 'write',
66
+ path: `${OPENCODE_COMMANDS_ROOT}/kyro/${command}.md`,
67
+ content: buildOpenCodeCommand(command),
68
+ });
69
+ }
70
+ plan.push({
71
+ action: 'merge-json',
72
+ path: OPENCODE_SETTINGS_PATH,
73
+ content: JSON.stringify(buildOpenCodeSettingsOverlay()),
74
+ });
75
+ }
76
+ function removeOpenCodeProjection(plan) {
77
+ plan.push({ action: 'remove-json-key', path: OPENCODE_SETTINGS_PATH, jsonPath: `agent.${KYRO_OPENCODE_AGENT}` });
78
+ }
79
+ function buildOpenCodeManagedFiles() {
80
+ return [
81
+ ...(0, command_skills_1.buildCommandSkillManagedFilesForRoot)(OPENCODE_SKILLS_ROOT),
82
+ ...constants_1.COMMAND_NAMES.map((command) => `${OPENCODE_COMMANDS_ROOT}/kyro/${command}.md`),
83
+ ];
84
+ }
85
+ function buildOpenCodeCommand(command) {
86
+ const description = command === 'forge'
87
+ ? 'Run the Kyro forge workflow'
88
+ : command === 'status'
89
+ ? 'Show Kyro project status'
90
+ : 'Close the Kyro session';
91
+ return `---\ndescription: ${description}\n---\n\nLoad \`${OPENCODE_SKILLS_ROOT}/kyro-${command}/SKILL.md\` and follow it. The skill must read \`${constants_1.KYRO_COMMANDS_ROOT}/${command}.md\` first, then load only the routed Kyro mode/helper files.\n\nRuntime: \`${constants_1.KYRO_ROOT}/\`\nArtifacts: \`${constants_1.ARTIFACT_ROOT}/{scope}/\`\n\nDo not inline the full Kyro workflow or ask the user to restate it.\n`;
92
+ }
93
+ function buildOpenCodeSettingsOverlay() {
94
+ return {
95
+ agent: {
96
+ [KYRO_OPENCODE_AGENT]: {
97
+ mode: 'primary',
98
+ prompt: buildOpenCodeAgentPrompt(),
99
+ },
100
+ },
101
+ };
102
+ }
103
+ function buildOpenCodeAgentPrompt() {
104
+ return [
105
+ 'You are the Kyro workflow orchestrator inside OpenCode.',
106
+ `Use native OpenCode commands in ${OPENCODE_COMMANDS_ROOT}/kyro/ and skills in ${OPENCODE_SKILLS_ROOT}/kyro-*.`,
107
+ `Read ${constants_1.KYRO_COMMANDS_ROOT}/{forge,status,wrap-up}.md first, then load only the routed Kyro mode/helper files.`,
108
+ `Runtime: ${constants_1.KYRO_ROOT}/`,
109
+ `Artifacts: ${constants_1.ARTIFACT_ROOT}/{scope}/`,
110
+ 'Do not inline the full Kyro workflow or overwrite non-Kyro OpenCode configuration.',
111
+ ].join('\n');
112
+ }
113
+ function checkOpenCodeProjection() {
114
+ const missing = buildOpenCodeManagedFiles().filter((file) => !(0, fs_1.managedPathExists)(file));
115
+ if (missing.length > 0) {
116
+ return { status: 'fail', name: 'OpenCode adapter', detail: `missing ${missing.join(', ')}`, remedy: 'Run kyro sync --agent opencode.' };
117
+ }
118
+ return { status: 'pass', name: 'OpenCode adapter', detail: 'native OpenCode skills and slash commands present' };
119
+ }
33
120
  //# sourceMappingURL=opencode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/cli/adapters/opencode.ts"],"names":[],"mappings":";;;AAAA,4CAAmE;AAEnE,qDAA4F;AAC5F,yCAAoD;AAEvC,QAAA,eAAe,GAAsB;IAChD,KAAK,EAAE,iBAAK,CAAC,QAAQ;IACrB,WAAW,EAAE,UAAU;IACvB,MAAM,EAAE,aAAa;IACrB,eAAe,EAAE,0CAAyB;IAC1C,iBAAiB,EAAE,8CAA6B;IAChD,kBAAkB;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,qBAAqB,CAAC,KAAK,EAAE,WAAW;QACtC,OAAO;YACL,KAAK,EAAE,iBAAK,CAAC,QAAQ;YACrB,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,qBAAS;YACnB,YAAY,EAAE,6BAAiB;YAC/B,UAAU,EAAE,6BAAiB;SAC9B,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,QAAQ;QACb,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,iBAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;QACjG,CAAC;QACD,OAAO,IAAA,iCAAsB,EAAC,kBAAkB,CAAC,CAAC;IACpD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/cli/adapters/opencode.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,41 @@
1
1
  import type { Agent, CheckResult, InstallScope, KyroInstalledAdapter, KyroManifest, OperationPlan } from '../types';
2
2
  export type AdapterStatus = 'implemented' | 'planned';
3
+ export type AdapterCapability = 'command-skills' | 'workspace-agents-block' | 'system-prompt' | 'mcp' | 'slash-commands' | 'sub-agents' | 'output-styles' | 'filesystem-detect' | 'auto-install';
4
+ export type SystemPromptStrategy = 'managed-block' | 'file-replace' | 'append' | 'instructions-file' | 'json-agent-overlay' | 'none';
5
+ export type MCPStrategy = 'separate-files' | 'merge-json-settings' | 'mcp-json-file' | 'toml-file' | 'yaml-merge' | 'none';
6
+ export interface AdapterPaths {
7
+ globalConfigDir?: string;
8
+ systemPromptPath?: string;
9
+ skillsDir?: string;
10
+ commandsDir?: string;
11
+ settingsPath?: string;
12
+ mcpConfigPath?: string;
13
+ subAgentsDir?: string;
14
+ outputStylesDir?: string;
15
+ }
16
+ export interface DetectionContext {
17
+ homeDir: string;
18
+ envPath?: string;
19
+ }
20
+ export interface DetectionResult {
21
+ agent: Agent;
22
+ installed: boolean;
23
+ binaryPath: string | null;
24
+ configFound: boolean;
25
+ configPath: string | null;
26
+ detail: string;
27
+ }
3
28
  export interface AdapterDefinition {
4
29
  agent: Agent;
5
30
  displayName: string;
6
31
  status: AdapterStatus;
32
+ capabilities(): AdapterCapability[];
33
+ paths(homeDir: string): AdapterPaths;
34
+ detect(context: DetectionContext): DetectionResult;
35
+ systemPromptStrategy(): SystemPromptStrategy;
36
+ mcpStrategy(): MCPStrategy;
7
37
  buildProjection(plan: OperationPlan[]): void;
38
+ buildRemoval(plan: OperationPlan[]): void;
8
39
  buildManagedFiles(): string[];
9
40
  buildManagedBlocks(): string[];
10
41
  buildInstalledAdapter(scope: InstallScope, installedAt: string): KyroInstalledAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"registry-types.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/registry-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAC7C,iBAAiB,IAAI,MAAM,EAAE,CAAC;IAC9B,kBAAkB,IAAI,MAAM,EAAE,CAAC;IAC/B,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,oBAAoB,CAAC;IACtF,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,WAAW,CAAC;CACpD"}
1
+ {"version":3,"file":"registry-types.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/registry-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;AACtD,MAAM,MAAM,iBAAiB,GACzB,gBAAgB,GAChB,wBAAwB,GACxB,eAAe,GACf,KAAK,GACL,gBAAgB,GAChB,YAAY,GACZ,eAAe,GACf,mBAAmB,GACnB,cAAc,CAAC;AAEnB,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,cAAc,GAAG,QAAQ,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,MAAM,CAAC;AACrI,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,eAAe,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,CAAC;AAE3H,MAAM,WAAW,YAAY;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,IAAI,iBAAiB,EAAE,CAAC;IACpC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC;IACrC,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAAC;IACnD,oBAAoB,IAAI,oBAAoB,CAAC;IAC7C,WAAW,IAAI,WAAW,CAAC;IAC3B,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAC7C,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAC1C,iBAAiB,IAAI,MAAM,EAAE,CAAC;IAC9B,kBAAkB,IAAI,MAAM,EAAE,CAAC;IAC/B,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,oBAAoB,CAAC;IACtF,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,WAAW,CAAC;CACpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAItC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAqB1D,eAAO,MAAM,QAAQ,EAAE,iBAAiB,EAMvC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAIpE;AAED,wBAAgB,sBAAsB,IAAI,iBAAiB,EAAE,CAE5D;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB,EAAE,CAEnF"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAKtC,OAAO,KAAK,EAAE,iBAAiB,EAAmD,MAAM,kBAAkB,CAAC;AA4C3G,eAAO,MAAM,QAAQ,EAAE,iBAAiB,EAkCvC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAIpE;AAED,wBAAgB,sBAAsB,IAAI,iBAAiB,EAAE,CAE5D;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB,EAAE,CAEnF"}
@@ -6,13 +6,30 @@ exports.getInstallableAdapters = getInstallableAdapters;
6
6
  exports.getInstalledAdapterDefinitions = getInstalledAdapterDefinitions;
7
7
  const constants_1 = require("../constants");
8
8
  const codex_1 = require("./codex");
9
+ const detection_1 = require("./detection");
9
10
  const opencode_1 = require("./opencode");
10
11
  const standard_1 = require("./standard");
11
- const plannedAdapter = (agent, displayName) => ({
12
+ const plannedAdapter = (agent, displayName, buildPaths, systemPromptStrategy, mcpStrategy, binaryName) => ({
12
13
  agent,
13
14
  displayName,
14
15
  status: 'planned',
16
+ capabilities() {
17
+ return [];
18
+ },
19
+ paths(homeDir) {
20
+ return buildPaths(homeDir);
21
+ },
22
+ detect(context) {
23
+ return (0, detection_1.detectFromPaths)(agent, binaryName, buildPaths(context.homeDir), context, `${displayName} adapter is planned`);
24
+ },
25
+ systemPromptStrategy() {
26
+ return systemPromptStrategy;
27
+ },
28
+ mcpStrategy() {
29
+ return mcpStrategy;
30
+ },
15
31
  buildProjection() { },
32
+ buildRemoval() { },
16
33
  buildManagedFiles() {
17
34
  return [];
18
35
  },
@@ -30,8 +47,22 @@ exports.ADAPTERS = [
30
47
  standard_1.standardAgentsAdapter,
31
48
  opencode_1.openCodeAdapter,
32
49
  codex_1.codexAdapter,
33
- plannedAdapter(constants_1.AGENT.CLAUDE, 'Claude plugin'),
34
- plannedAdapter(constants_1.AGENT.CURSOR, 'Cursor'),
50
+ plannedAdapter(constants_1.AGENT.CLAUDE, 'Claude plugin', (homeDir) => ({
51
+ globalConfigDir: `${homeDir}/.claude`,
52
+ systemPromptPath: `${homeDir}/.claude/CLAUDE.md`,
53
+ skillsDir: `${homeDir}/.claude/skills`,
54
+ commandsDir: `${homeDir}/.claude/commands`,
55
+ settingsPath: `${homeDir}/.claude/settings.json`,
56
+ mcpConfigPath: `${homeDir}/.claude/mcp`,
57
+ subAgentsDir: `${homeDir}/.claude/agents`,
58
+ outputStylesDir: `${homeDir}/.claude/output-styles`,
59
+ }), 'managed-block', 'separate-files', 'claude'),
60
+ plannedAdapter(constants_1.AGENT.CURSOR, 'Cursor', (homeDir) => ({
61
+ globalConfigDir: `${homeDir}/.cursor`,
62
+ systemPromptPath: `${homeDir}/.cursor/rules/kyro-ai.mdc`,
63
+ skillsDir: `${homeDir}/.cursor/skills`,
64
+ mcpConfigPath: `${homeDir}/.cursor/mcp.json`,
65
+ }), 'instructions-file', 'mcp-json-file', null),
35
66
  ];
36
67
  function getAdapterDefinition(agent) {
37
68
  const definition = exports.ADAPTERS.find((adapter) => adapter.agent === agent);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/adapters/registry.ts"],"names":[],"mappings":";;;AAkCA,oDAIC;AAED,wDAEC;AAED,wEAEC;AA9CD,4CAAqC;AAErC,mCAAuC;AACvC,yCAA6C;AAC7C,yCAAmD;AAGnD,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,WAAmB,EAAqB,EAAE,CAAC,CAAC;IAChF,KAAK;IACL,WAAW;IACX,MAAM,EAAE,SAAS;IACjB,eAAe,KAAI,CAAC;IACpB,iBAAiB;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,kBAAkB;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,qBAAqB,CAAC,KAAK,EAAE,WAAW;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IAC3E,CAAC;IACD,MAAM;QACJ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,UAAU,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IACvG,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,QAAQ,GAAwB;IAC3C,gCAAqB;IACrB,0BAAe;IACf,oBAAY;IACZ,cAAc,CAAC,iBAAK,CAAC,MAAM,EAAE,eAAe,CAAC;IAC7C,cAAc,CAAC,iBAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;CACvC,CAAC;AAEF,SAAgB,oBAAoB,CAAC,KAAY;IAC/C,MAAM,UAAU,GAAG,gBAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IACvE,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;IAC9D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,sBAAsB;IACpC,OAAO,gBAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;AACxE,CAAC;AAED,SAAgB,8BAA8B,CAAC,MAAe;IAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/adapters/registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/standard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,eAAO,MAAM,qBAAqB,EAAE,iBAyBnC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAMhE"}
1
+ {"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/standard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAI5C,eAAO,MAAM,qBAAqB,EAAE,iBAiDnC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAMhE"}
@@ -5,11 +5,36 @@ exports.checkCommandProjection = checkCommandProjection;
5
5
  const constants_1 = require("../constants");
6
6
  const fs_1 = require("../fs");
7
7
  const command_skills_1 = require("./command-skills");
8
+ const detection_1 = require("./detection");
8
9
  exports.standardAgentsAdapter = {
9
10
  agent: constants_1.AGENT.STANDARD,
10
11
  displayName: 'Standard .agents',
11
12
  status: 'implemented',
13
+ capabilities() {
14
+ return ['command-skills'];
15
+ },
16
+ paths(homeDir) {
17
+ return {
18
+ globalConfigDir: `${homeDir}/.agents`,
19
+ skillsDir: `${homeDir}/.agents/skills`,
20
+ };
21
+ },
22
+ detect(context) {
23
+ const paths = this.paths(context.homeDir);
24
+ const result = (0, detection_1.detectFromPaths)(constants_1.AGENT.STANDARD, null, paths, context, 'standard .agents compatibility adapter');
25
+ return {
26
+ ...result,
27
+ detail: `config=${result.configPath ?? 'none'}; binary=none; compatibility=always-available`,
28
+ };
29
+ },
30
+ systemPromptStrategy() {
31
+ return 'none';
32
+ },
33
+ mcpStrategy() {
34
+ return 'none';
35
+ },
12
36
  buildProjection: command_skills_1.addCommandSkillProjection,
37
+ buildRemoval() { },
13
38
  buildManagedFiles: command_skills_1.buildCommandSkillManagedFiles,
14
39
  buildManagedBlocks() {
15
40
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"standard.js","sourceRoot":"","sources":["../../../src/cli/adapters/standard.ts"],"names":[],"mappings":";;;AAiCA,wDAMC;AAvCD,4CAAmE;AACnE,8BAA4C;AAG5C,qDAA4F;AAE/E,QAAA,qBAAqB,GAAsB;IACtD,KAAK,EAAE,iBAAK,CAAC,QAAQ;IACrB,WAAW,EAAE,kBAAkB;IAC/B,MAAM,EAAE,aAAa;IACrB,eAAe,EAAE,0CAAyB;IAC1C,iBAAiB,EAAE,8CAA6B;IAChD,kBAAkB;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,qBAAqB,CAAC,KAAK,EAAE,WAAW;QACtC,OAAO;YACL,KAAK,EAAE,iBAAK,CAAC,QAAQ;YACrB,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,qBAAS;YACnB,YAAY,EAAE,6BAAiB;YAC/B,UAAU,EAAE,6BAAiB;SAC9B,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,QAAQ;QACb,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,iBAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;QACzG,CAAC;QACD,OAAO,sBAAsB,CAAC,0BAA0B,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC;AAEF,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,OAAO,GAAG,IAAA,8CAA6B,GAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,wBAAmB,EAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;AACnF,CAAC"}
1
+ {"version":3,"file":"standard.js","sourceRoot":"","sources":["../../../src/cli/adapters/standard.ts"],"names":[],"mappings":";;;AA0DA,wDAMC;AAhED,4CAAmE;AACnE,8BAA4C;AAG5C,qDAA4F;AAC5F,2CAA8C;AAEjC,QAAA,qBAAqB,GAAsB;IACtD,KAAK,EAAE,iBAAK,CAAC,QAAQ;IACrB,WAAW,EAAE,kBAAkB;IAC/B,MAAM,EAAE,aAAa;IACrB,YAAY;QACV,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,OAAO;QACX,OAAO;YACL,eAAe,EAAE,GAAG,OAAO,UAAU;YACrC,SAAS,EAAE,GAAG,OAAO,iBAAiB;SACvC,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAA,2BAAe,EAAC,iBAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,wCAAwC,CAAC,CAAC;QAC/G,OAAO;YACL,GAAG,MAAM;YACT,MAAM,EAAE,UAAU,MAAM,CAAC,UAAU,IAAI,MAAM,+CAA+C;SAC7F,CAAC;IACJ,CAAC;IACD,oBAAoB;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,WAAW;QACT,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,eAAe,EAAE,0CAAyB;IAC1C,YAAY,KAAI,CAAC;IACjB,iBAAiB,EAAE,8CAA6B;IAChD,kBAAkB;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,qBAAqB,CAAC,KAAK,EAAE,WAAW;QACtC,OAAO;YACL,KAAK,EAAE,iBAAK,CAAC,QAAQ;YACrB,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,qBAAS;YACnB,YAAY,EAAE,6BAAiB;YAC/B,UAAU,EAAE,6BAAiB;SAC9B,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,QAAQ;QACb,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,iBAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;QACzG,CAAC;QACD,OAAO,sBAAsB,CAAC,0BAA0B,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC;AAEF,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,OAAO,GAAG,IAAA,8CAA6B,GAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,wBAAmB,EAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;AACnF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"AASA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAiD5C"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"AAUA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAoD5C"}
package/dist/cli/app.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runCli = runCli;
4
4
  const doctor_1 = require("./commands/doctor");
5
+ const detect_1 = require("./commands/detect");
5
6
  const install_1 = require("./commands/install");
6
7
  const tui_1 = require("./commands/tui");
7
8
  const repair_1 = require("./commands/repair");
@@ -36,6 +37,9 @@ async function runCli() {
36
37
  case 'install':
37
38
  (0, install_1.install)(options);
38
39
  break;
40
+ case 'detect':
41
+ (0, detect_1.detect)(options);
42
+ break;
39
43
  case 'doctor':
40
44
  (0, doctor_1.doctor)(options);
41
45
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":";;AASA,wBAiDC;AA1DD,8CAA2C;AAC3C,gDAAmD;AACnD,wCAAwC;AACxC,8CAA2C;AAC3C,4CAAmD;AACnD,oDAAiD;AACjD,iCAAyE;AACzE,uCAAyC;AAElC,KAAK,UAAU,MAAM;IAC1B,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtD,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,IAAA,YAAM,GAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACnE,IAAA,gBAAS,GAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,IAAA,yBAAkB,GAAE,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAA,uBAAe,EAAC,IAAI,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAA,uBAAgB,EAAC,OAAO,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;YAChB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;YACtB,MAAM;QACR,KAAK,MAAM;YACT,IAAA,cAAI,EAAC,OAAO,CAAC,CAAC;YACd,MAAM;QACR,KAAK,WAAW;YACd,IAAA,qBAAS,EAAC,OAAO,CAAC,CAAC;YACnB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,oBAAoB,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":";;AAUA,wBAoDC;AA9DD,8CAA2C;AAC3C,8CAA2C;AAC3C,gDAAmD;AACnD,wCAAwC;AACxC,8CAA2C;AAC3C,4CAAmD;AACnD,oDAAiD;AACjD,iCAAyE;AACzE,uCAAyC;AAElC,KAAK,UAAU,MAAM;IAC1B,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtD,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,IAAA,YAAM,GAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACnE,IAAA,gBAAS,GAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,IAAA,yBAAkB,GAAE,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAA,uBAAe,EAAC,IAAI,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAA,uBAAgB,EAAC,OAAO,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;YAChB,MAAM;QACR,KAAK,QAAQ;YACX,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;YAChB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;YACtB,MAAM;QACR,KAAK,MAAM;YACT,IAAA,cAAI,EAAC,OAAO,CAAC,CAAC;YACd,MAAM;QACR,KAAK,WAAW;YACd,IAAA,qBAAS,EAAC,OAAO,CAAC,CAAC;YACnB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,oBAAoB,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CliOptions } from '../types';
2
+ export declare function detect(options: Pick<CliOptions, 'agents' | 'json'>): void;
3
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/detect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC,GAAG,IAAI,CA6BzE"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detect = detect;
4
+ const node_os_1 = require("node:os");
5
+ const registry_1 = require("../adapters/registry");
6
+ function detect(options) {
7
+ const adapters = selectedAdapters(options.agents);
8
+ const results = adapters.map((adapter) => {
9
+ const detection = adapter.detect({ homeDir: (0, node_os_1.homedir)(), envPath: process.env.PATH ?? '' });
10
+ return {
11
+ agent: adapter.agent,
12
+ displayName: adapter.displayName,
13
+ status: adapter.status,
14
+ installed: detection.installed,
15
+ binaryPath: detection.binaryPath,
16
+ configFound: detection.configFound,
17
+ configPath: detection.configPath,
18
+ capabilities: adapter.capabilities(),
19
+ systemPromptStrategy: adapter.systemPromptStrategy(),
20
+ mcpStrategy: adapter.mcpStrategy(),
21
+ detail: detection.detail,
22
+ };
23
+ });
24
+ if (options.json) {
25
+ console.log(JSON.stringify({ adapters: results }, null, 2));
26
+ return;
27
+ }
28
+ for (const result of results) {
29
+ const state = result.installed ? 'detected' : 'not-detected';
30
+ const capabilityText = result.capabilities.length > 0 ? result.capabilities.join(',') : 'none';
31
+ console.log(`[${state}] ${result.agent}: status=${result.status}; config=${result.configPath ?? 'none'}; binary=${result.binaryPath ?? 'not-found'}; capabilities=${capabilityText}; systemPromptStrategy=${result.systemPromptStrategy}; mcpStrategy=${result.mcpStrategy}`);
32
+ }
33
+ }
34
+ function selectedAdapters(agents) {
35
+ if (agents.length === 0)
36
+ return registry_1.ADAPTERS;
37
+ return agents.map((agent) => (0, registry_1.getAdapterDefinition)(agent));
38
+ }
39
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../src/cli/commands/detect.ts"],"names":[],"mappings":";;AAKA,wBA6BC;AAlCD,qCAAkC;AAClC,mDAAsE;AAItE,SAAgB,MAAM,CAAC,OAA4C;IACjE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAA,iBAAO,GAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1F,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE;YACpC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE;YACpD,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;YAClC,MAAM,EAAE,SAAS,CAAC,MAAM;SACzB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;QAC7D,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,KAAK,YAAY,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,UAAU,IAAI,MAAM,YAAY,MAAM,CAAC,UAAU,IAAI,WAAW,kBAAkB,cAAc,0BAA0B,MAAM,CAAC,oBAAoB,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAChR,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA4B;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,mBAAQ,CAAC;IACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,+BAAoB,EAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC"}