@a5c-ai/extensions-adapter 6.0.1-staging.ffc4f312f8c0 → 6.0.2

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 (127) hide show
  1. package/dist/binTemplates.d.ts +7 -0
  2. package/dist/binTemplates.d.ts.map +1 -0
  3. package/dist/binTemplates.js +292 -0
  4. package/dist/cli.d.ts +8 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +299 -0
  7. package/dist/compiler.d.ts +15 -0
  8. package/dist/compiler.d.ts.map +1 -0
  9. package/dist/compiler.js +118 -0
  10. package/dist/diff.d.ts +9 -0
  11. package/dist/diff.d.ts.map +1 -0
  12. package/dist/diff.js +183 -0
  13. package/dist/emit.d.ts +3 -0
  14. package/dist/emit.d.ts.map +1 -0
  15. package/dist/emit.js +42 -0
  16. package/dist/extension-adapter.d.ts +3 -0
  17. package/dist/extension-adapter.d.ts.map +1 -0
  18. package/dist/extension-adapter.js +4 -0
  19. package/dist/hookRegistration.d.ts +8 -0
  20. package/dist/hookRegistration.d.ts.map +1 -0
  21. package/dist/hookRegistration.js +9 -0
  22. package/dist/index.d.ts +13 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +13 -0
  25. package/dist/init.d.ts +17 -0
  26. package/dist/init.d.ts.map +1 -0
  27. package/dist/init.js +200 -0
  28. package/dist/installInstructions.d.ts +3 -0
  29. package/dist/installInstructions.d.ts.map +1 -0
  30. package/dist/installInstructions.js +150 -0
  31. package/dist/installSharedGenerator.d.ts +3 -0
  32. package/dist/installSharedGenerator.d.ts.map +1 -0
  33. package/dist/installSharedGenerator.js +229 -0
  34. package/dist/manifestGenerators.d.ts +10 -0
  35. package/dist/manifestGenerators.d.ts.map +1 -0
  36. package/dist/manifestGenerators.js +11 -0
  37. package/dist/marketplaceGenerator.d.ts +3 -0
  38. package/dist/marketplaceGenerator.d.ts.map +1 -0
  39. package/dist/marketplaceGenerator.js +47 -0
  40. package/dist/mcpConfig.d.ts +69 -0
  41. package/dist/mcpConfig.d.ts.map +1 -0
  42. package/dist/mcpConfig.js +115 -0
  43. package/dist/proxiedHookTemplates.d.ts +10 -0
  44. package/dist/proxiedHookTemplates.d.ts.map +1 -0
  45. package/dist/proxiedHookTemplates.js +123 -0
  46. package/dist/resolve.d.ts +3 -0
  47. package/dist/resolve.d.ts.map +1 -0
  48. package/dist/resolve.js +106 -0
  49. package/dist/schema.d.ts +231 -0
  50. package/dist/schema.d.ts.map +1 -0
  51. package/dist/schema.js +340 -0
  52. package/dist/sdkConfig.d.ts +20 -0
  53. package/dist/sdkConfig.d.ts.map +1 -0
  54. package/dist/sdkConfig.js +41 -0
  55. package/dist/targets/adapters/antigravity.d.ts +33 -0
  56. package/dist/targets/adapters/antigravity.d.ts.map +1 -0
  57. package/dist/targets/adapters/antigravity.js +173 -0
  58. package/dist/targets/adapters/base.d.ts +11 -0
  59. package/dist/targets/adapters/base.d.ts.map +1 -0
  60. package/dist/targets/adapters/base.js +19 -0
  61. package/dist/targets/adapters/claude-code.d.ts +10 -0
  62. package/dist/targets/adapters/claude-code.d.ts.map +1 -0
  63. package/dist/targets/adapters/claude-code.js +87 -0
  64. package/dist/targets/adapters/codex.d.ts +14 -0
  65. package/dist/targets/adapters/codex.d.ts.map +1 -0
  66. package/dist/targets/adapters/codex.js +136 -0
  67. package/dist/targets/adapters/cursor.d.ts +10 -0
  68. package/dist/targets/adapters/cursor.d.ts.map +1 -0
  69. package/dist/targets/adapters/cursor.js +63 -0
  70. package/dist/targets/adapters/gemini.d.ts +10 -0
  71. package/dist/targets/adapters/gemini.d.ts.map +1 -0
  72. package/dist/targets/adapters/gemini.js +103 -0
  73. package/dist/targets/adapters/genty.d.ts +12 -0
  74. package/dist/targets/adapters/genty.d.ts.map +1 -0
  75. package/dist/targets/adapters/genty.js +94 -0
  76. package/dist/targets/adapters/github-copilot.d.ts +10 -0
  77. package/dist/targets/adapters/github-copilot.d.ts.map +1 -0
  78. package/dist/targets/adapters/github-copilot.js +66 -0
  79. package/dist/targets/adapters/hermes.d.ts +13 -0
  80. package/dist/targets/adapters/hermes.d.ts.map +1 -0
  81. package/dist/targets/adapters/hermes.js +99 -0
  82. package/dist/targets/adapters/hooks-utils.d.ts +12 -0
  83. package/dist/targets/adapters/hooks-utils.d.ts.map +1 -0
  84. package/dist/targets/adapters/hooks-utils.js +60 -0
  85. package/dist/targets/adapters/index.d.ts +31 -0
  86. package/dist/targets/adapters/index.d.ts.map +1 -0
  87. package/dist/targets/adapters/index.js +75 -0
  88. package/dist/targets/adapters/interface.d.ts +9 -0
  89. package/dist/targets/adapters/interface.d.ts.map +1 -0
  90. package/dist/targets/adapters/interface.js +2 -0
  91. package/dist/targets/adapters/oh-my-pi.d.ts +12 -0
  92. package/dist/targets/adapters/oh-my-pi.d.ts.map +1 -0
  93. package/dist/targets/adapters/oh-my-pi.js +97 -0
  94. package/dist/targets/adapters/openclaw.d.ts +15 -0
  95. package/dist/targets/adapters/openclaw.d.ts.map +1 -0
  96. package/dist/targets/adapters/openclaw.js +170 -0
  97. package/dist/targets/adapters/opencode.d.ts +11 -0
  98. package/dist/targets/adapters/opencode.d.ts.map +1 -0
  99. package/dist/targets/adapters/opencode.js +101 -0
  100. package/dist/targets/adapters/pi.d.ts +12 -0
  101. package/dist/targets/adapters/pi.d.ts.map +1 -0
  102. package/dist/targets/adapters/pi.js +98 -0
  103. package/dist/targets/index.d.ts +7 -0
  104. package/dist/targets/index.d.ts.map +1 -0
  105. package/dist/targets/index.js +79 -0
  106. package/dist/transform.d.ts +4 -0
  107. package/dist/transform.d.ts.map +1 -0
  108. package/dist/transform.js +301 -0
  109. package/dist/transformEmitters.d.ts +8 -0
  110. package/dist/transformEmitters.d.ts.map +1 -0
  111. package/dist/transformEmitters.js +350 -0
  112. package/dist/transformHelpers.d.ts +15 -0
  113. package/dist/transformHelpers.d.ts.map +1 -0
  114. package/dist/transformHelpers.js +246 -0
  115. package/dist/types.d.ts +214 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +2 -0
  118. package/dist/utils.d.ts +42 -0
  119. package/dist/utils.d.ts.map +1 -0
  120. package/dist/utils.js +187 -0
  121. package/dist/validate.d.ts +3 -0
  122. package/dist/validate.d.ts.map +1 -0
  123. package/dist/validate.js +188 -0
  124. package/dist/verify.d.ts +6 -0
  125. package/dist/verify.d.ts.map +1 -0
  126. package/dist/verify.js +294 -0
  127. package/package.json +2 -2
@@ -0,0 +1,87 @@
1
+ // Claude Code harness output adapter
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ import { emitJsonMcpConfig } from '../../mcpConfig.js';
4
+ import { iterateHooks, slugify, resolveCmd, getPattern, resolveSdkConfig, } from './hooks-utils.js';
5
+ export class ClaudeCodeAdapter extends BaseHarnessOutputAdapter {
6
+ generateMcpConfig(manifest, _targetProfile) {
7
+ return emitJsonMcpConfig(manifest, '.mcp.json');
8
+ }
9
+ generateHookRegistration(manifest, targetProfile, _diagnostics) {
10
+ const content = generateClaudeCodeHooksJson(manifest, targetProfile);
11
+ return { path: targetProfile.hookRegistrationOutputPath || 'hooks/hooks.json', content };
12
+ }
13
+ generateManifestFiles(_sourceDir, manifest, targetProfile, _diagnostics) {
14
+ const files = [];
15
+ const ccManifest = generateClaudeCodeManifest(manifest);
16
+ files.push({ path: 'plugin.json', content: ccManifest });
17
+ const author = typeof manifest.author === 'string'
18
+ ? { name: manifest.author }
19
+ : manifest.author;
20
+ const harnessManifestPath = targetProfile.harnessManifestPath || `.${this.targetName}-plugin/plugin.json`;
21
+ files.push({ path: harnessManifestPath, content: JSON.stringify({
22
+ name: manifest.name,
23
+ version: manifest.version,
24
+ description: manifest.description,
25
+ author,
26
+ }, null, 2) + '\n' });
27
+ return files;
28
+ }
29
+ }
30
+ function normalizeAuthorObject(manifest) {
31
+ return typeof manifest.author === 'string'
32
+ ? { name: manifest.author }
33
+ : manifest.author;
34
+ }
35
+ export function generateClaudeCodeManifest(manifest) {
36
+ const author = normalizeAuthorObject(manifest);
37
+ const pluginJson = {
38
+ name: manifest.name,
39
+ version: manifest.version,
40
+ description: manifest.description,
41
+ author,
42
+ license: manifest.license,
43
+ };
44
+ if (manifest.repository) {
45
+ pluginJson.repository = manifest.repository;
46
+ }
47
+ if (manifest.homepage) {
48
+ pluginJson.homepage = manifest.homepage;
49
+ }
50
+ if (manifest.keywords) {
51
+ pluginJson.keywords = manifest.keywords;
52
+ }
53
+ if (manifest.hooks) {
54
+ const hooksObj = {};
55
+ for (const [canonicalHook, handlerValue] of Object.entries(manifest.hooks)) {
56
+ if (handlerValue) {
57
+ hooksObj[canonicalHook] = handlerValue;
58
+ }
59
+ }
60
+ pluginJson.hooks = hooksObj;
61
+ }
62
+ pluginJson.commands = [];
63
+ if (manifest.skills) {
64
+ pluginJson.skills = manifest.skills;
65
+ }
66
+ return JSON.stringify(pluginJson, null, 2) + '\n';
67
+ }
68
+ export function generateClaudeCodeHooksJson(manifest, targetProfile) {
69
+ const hooks = {};
70
+ const rootRef = targetProfile.pluginRootEnvVar
71
+ ? `\${${targetProfile.pluginRootEnvVar}}`
72
+ : '$(cd "$(dirname "$0")/.." && pwd)';
73
+ const pat = getPattern(manifest, targetProfile.name);
74
+ const sdk = resolveSdkConfig(manifest);
75
+ iterateHooks(manifest, targetProfile, (canonical, native, handler) => {
76
+ const slug = slugify(canonical);
77
+ const cmd = resolveCmd(handler, slug, targetProfile.adapterName, rootRef, manifest.name, native, sdk.proxyPackage, sdk.proxyBinary, pat);
78
+ const entry = {
79
+ hooks: [{ type: 'command', command: cmd }],
80
+ };
81
+ if (manifest.hookConfig?.matchers?.[canonical]) {
82
+ entry.matcher = manifest.hookConfig.matchers[canonical];
83
+ }
84
+ hooks[native] = [entry];
85
+ });
86
+ return JSON.stringify({ description: `${manifest.name} plugin hooks`, hooks }, null, 2) + '\n';
87
+ }
@@ -0,0 +1,14 @@
1
+ import type { A5cPluginManifest, TargetProfile, TransformedFile, Diagnostic } from '../../types.js';
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ export declare class CodexAdapter extends BaseHarnessOutputAdapter {
4
+ generateMcpConfig(manifest: A5cPluginManifest, _targetProfile: TargetProfile): TransformedFile | null;
5
+ generateHookRegistration(manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[]): TransformedFile | null;
6
+ generateManifestFiles(_sourceDir: string, manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[], rawManifest?: A5cPluginManifest): TransformedFile[];
7
+ }
8
+ type ResolvedManifest = A5cPluginManifest & {
9
+ npmPackageName?: string;
10
+ };
11
+ export declare function generateCodexManifest(manifest: ResolvedManifest, targetName?: string): string;
12
+ export declare function generateCodexHooksJson(manifest: A5cPluginManifest, targetProfile: TargetProfile): string;
13
+ export {};
14
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/targets/adapters/codex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAerD,qBAAa,YAAa,SAAQ,wBAAwB;IAExD,iBAAiB,CACf,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,aAAa,GAC5B,eAAe,GAAG,IAAI;IAOzB,wBAAwB,CACtB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,GACzB,eAAe,GAAG,IAAI;IAKzB,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,EAC1B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,eAAe,EAAE;CAUrB;AAED,KAAK,gBAAgB,GAAG,iBAAiB,GAAG;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AA4DF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,SAAU,GAAG,MAAM,CA4C9F;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,GAC3B,MAAM,CAYR"}
@@ -0,0 +1,136 @@
1
+ // Codex harness output adapter
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ import { iterateHooks, slugify, resolveCmd, getPattern, resolveSdkConfig, } from './hooks-utils.js';
4
+ import { resolveTargetCliName, resolveTargetNpmPackageName, } from '../../sdkConfig.js';
5
+ import { generateHarnessManifest } from '../../transformHelpers.js';
6
+ import { buildCodexMcpToml } from '../../mcpConfig.js';
7
+ export class CodexAdapter extends BaseHarnessOutputAdapter {
8
+ generateMcpConfig(manifest, _targetProfile) {
9
+ if (!manifest.mcpServers || Object.keys(manifest.mcpServers).length === 0) {
10
+ return null;
11
+ }
12
+ return { path: 'mcp-servers.toml', content: buildCodexMcpToml(manifest.mcpServers) };
13
+ }
14
+ generateHookRegistration(manifest, targetProfile, _diagnostics) {
15
+ const content = generateCodexHooksJson(manifest, targetProfile);
16
+ return { path: targetProfile.hookRegistrationOutputPath || 'hooks.json', content };
17
+ }
18
+ generateManifestFiles(_sourceDir, manifest, targetProfile, _diagnostics, rawManifest) {
19
+ const files = [];
20
+ const codexPkg = generateCodexManifest(manifest, this.targetName);
21
+ files.push({ path: 'package.json', content: codexPkg });
22
+ if (targetProfile.harnessManifestPath) {
23
+ files.push({ path: targetProfile.harnessManifestPath, content: generateHarnessManifest(rawManifest || manifest, targetProfile) });
24
+ }
25
+ files.push({ path: '.app.json', content: JSON.stringify({ apps: {} }, null, 2) + '\n' });
26
+ return files;
27
+ }
28
+ }
29
+ function buildNpmRepository(manifest, npmPackageName) {
30
+ if (!manifest.repository)
31
+ return undefined;
32
+ let url = typeof manifest.repository === 'string'
33
+ ? manifest.repository
34
+ : manifest.repository.url;
35
+ if (!url.startsWith('git+'))
36
+ url = `git+${url}`;
37
+ if (!url.endsWith('.git'))
38
+ url = `${url}.git`;
39
+ const directory = `plugins/${npmPackageName.split('/').pop()}`;
40
+ return { type: 'git', url, directory };
41
+ }
42
+ function buildNpmHomepage(manifest, npmPackageName) {
43
+ if (!manifest.repository)
44
+ return undefined;
45
+ const url = typeof manifest.repository === 'string'
46
+ ? manifest.repository
47
+ : manifest.repository.url;
48
+ const base = url.replace(/\.git$/, '').replace(/^git\+/, '');
49
+ const directory = `plugins/${npmPackageName.split('/').pop()}`;
50
+ return `${base}/tree/main/${directory}#readme`;
51
+ }
52
+ function buildNpmBugs(manifest) {
53
+ if (!manifest.repository)
54
+ return undefined;
55
+ const url = typeof manifest.repository === 'string'
56
+ ? manifest.repository
57
+ : manifest.repository.url;
58
+ const base = url.replace(/\.git$/, '').replace(/^git\+/, '');
59
+ return { url: `${base}/issues` };
60
+ }
61
+ /**
62
+ * Collect the set of output paths the active extraFileSets will emit for this
63
+ * target, so the package.json `files` list only advertises paths that will
64
+ * actually exist (a hook-free / asset-free plugin like atlas must not list
65
+ * assets/ or plugin.lock.json — verify rejects listed-but-missing paths).
66
+ */
67
+ function activeExtraFileOutputs(manifest, targetName) {
68
+ const out = new Set();
69
+ const selected = manifest.targets?.[targetName]?.extraFileSets ?? [];
70
+ const defs = manifest.extraFileSets ?? {};
71
+ for (const setName of selected) {
72
+ const set = defs[setName];
73
+ if (!set)
74
+ continue;
75
+ for (const outputPath of Object.keys(set))
76
+ out.add(outputPath);
77
+ }
78
+ const extraFiles = manifest.targets?.[targetName]?.extraFiles ?? {};
79
+ for (const outputPath of Object.keys(extraFiles))
80
+ out.add(outputPath);
81
+ return out;
82
+ }
83
+ export function generateCodexManifest(manifest, targetName = 'codex') {
84
+ const target = { name: targetName };
85
+ const extraOutputs = activeExtraFileOutputs(manifest, targetName);
86
+ const hasAssets = [...extraOutputs].some((p) => p === 'assets/' || p.startsWith('assets/'));
87
+ const hasPluginLock = extraOutputs.has('plugin.lock.json');
88
+ const packageJson = {
89
+ name: resolveTargetNpmPackageName(manifest, target),
90
+ version: manifest.version,
91
+ description: manifest.description,
92
+ scripts: {
93
+ test: 'npm run validate:ci',
94
+ 'test:integration': 'node test/integration.test.js',
95
+ 'test:packaged-install': 'node test/packaged-install.test.js',
96
+ 'validate:ci': 'npm run test:integration && npm run test:packaged-install',
97
+ 'team:install': 'node scripts/team-install.js',
98
+ deploy: 'npm publish --access public',
99
+ 'deploy:staging': 'npm publish --access public --tag staging',
100
+ },
101
+ bin: { [resolveTargetCliName(manifest, target)]: 'bin/cli.js' },
102
+ files: [
103
+ `.${targetName}-plugin/`,
104
+ ...(hasAssets ? ['assets/'] : []),
105
+ // hooks/ + hooks.json only when the plugin ships hooks (hook-free plugins
106
+ // like atlas emit neither, and verify rejects listed-but-missing paths).
107
+ ...(manifest.hooks && Object.keys(manifest.hooks).length > 0 ? ['hooks/', 'hooks.json'] : []),
108
+ 'skills/',
109
+ '.app.json',
110
+ 'bin/',
111
+ 'scripts/',
112
+ ...(hasPluginLock ? ['plugin.lock.json'] : []),
113
+ 'README.md',
114
+ ],
115
+ keywords: [manifest.name, targetName, 'orchestration'],
116
+ author: typeof manifest.author === 'string' ? manifest.author : manifest.author.name,
117
+ license: manifest.license,
118
+ publishConfig: { access: 'public' },
119
+ };
120
+ const pkgName = resolveTargetNpmPackageName(manifest, target);
121
+ packageJson.repository = buildNpmRepository(manifest, pkgName);
122
+ packageJson.homepage = buildNpmHomepage(manifest, pkgName);
123
+ packageJson.bugs = buildNpmBugs(manifest);
124
+ return JSON.stringify(packageJson, null, 2) + '\n';
125
+ }
126
+ export function generateCodexHooksJson(manifest, targetProfile) {
127
+ const hooks = {};
128
+ const pat = getPattern(manifest, targetProfile.name);
129
+ const sdk = resolveSdkConfig(manifest);
130
+ iterateHooks(manifest, targetProfile, (canonical, native, handler) => {
131
+ const slug = slugify(canonical);
132
+ const cmd = resolveCmd(handler, slug, targetProfile.adapterName, '.codex', manifest.name, native, sdk.proxyPackage, sdk.proxyBinary, pat);
133
+ hooks[native] = [{ matcher: '.*', hooks: [{ type: 'command', command: cmd }] }];
134
+ });
135
+ return JSON.stringify({ hooks }, null, 2) + '\n';
136
+ }
@@ -0,0 +1,10 @@
1
+ import type { A5cPluginManifest, TargetProfile, TransformedFile, Diagnostic } from '../../types.js';
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ export declare class CursorAdapter extends BaseHarnessOutputAdapter {
4
+ generateMcpConfig(manifest: A5cPluginManifest, _targetProfile: TargetProfile): TransformedFile | null;
5
+ generateHookRegistration(manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[]): TransformedFile | null;
6
+ generateManifestFiles(_sourceDir: string, manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[], rawManifest?: A5cPluginManifest): TransformedFile[];
7
+ }
8
+ export declare function generateCursorManifest(manifest: A5cPluginManifest): string;
9
+ export declare function generateCursorHooksJson(manifest: A5cPluginManifest, targetProfile: TargetProfile): string;
10
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/targets/adapters/cursor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAUrD,qBAAa,aAAc,SAAQ,wBAAwB;IAEzD,iBAAiB,CACf,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,aAAa,GAC5B,eAAe,GAAG,IAAI;IAIzB,wBAAwB,CACtB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,GACzB,eAAe,GAAG,IAAI;IAKzB,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,EAC1B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,eAAe,EAAE;CASrB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAuB1E;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,GAC3B,MAAM,CAoBR"}
@@ -0,0 +1,63 @@
1
+ // Cursor harness output adapter
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ import { iterateHooks, slugify, resolveHookPath, getPattern, } from './hooks-utils.js';
4
+ import { generateHarnessManifest } from '../../transformHelpers.js';
5
+ import { emitJsonMcpConfig } from '../../mcpConfig.js';
6
+ export class CursorAdapter extends BaseHarnessOutputAdapter {
7
+ generateMcpConfig(manifest, _targetProfile) {
8
+ return emitJsonMcpConfig(manifest, '.cursor/mcp.json');
9
+ }
10
+ generateHookRegistration(manifest, targetProfile, _diagnostics) {
11
+ const content = generateCursorHooksJson(manifest, targetProfile);
12
+ return { path: targetProfile.hookRegistrationOutputPath || 'hooks.json', content };
13
+ }
14
+ generateManifestFiles(_sourceDir, manifest, targetProfile, _diagnostics, rawManifest) {
15
+ const files = [];
16
+ const cursorManifest = generateCursorManifest(manifest);
17
+ files.push({ path: 'plugin.json', content: cursorManifest });
18
+ if (targetProfile.harnessManifestPath) {
19
+ files.push({ path: targetProfile.harnessManifestPath, content: generateHarnessManifest(rawManifest || manifest, targetProfile) });
20
+ }
21
+ return files;
22
+ }
23
+ }
24
+ export function generateCursorManifest(manifest) {
25
+ const pluginJson = {
26
+ name: manifest.name,
27
+ version: manifest.version,
28
+ description: manifest.description,
29
+ author: manifest.author,
30
+ license: manifest.license,
31
+ // Only declare a hooks registration file when the plugin ships hooks;
32
+ // a hook-free plugin (atlas) emits no hooks.json.
33
+ ...(manifest.hooks && Object.keys(manifest.hooks).length > 0 ? { hooks: 'hooks.json' } : {}),
34
+ commands: 'commands/',
35
+ skills: 'skills/',
36
+ };
37
+ if (manifest.repository) {
38
+ pluginJson.repository = manifest.repository;
39
+ }
40
+ if (manifest.keywords) {
41
+ pluginJson.keywords = manifest.keywords;
42
+ }
43
+ return JSON.stringify(pluginJson, null, 2) + '\n';
44
+ }
45
+ export function generateCursorHooksJson(manifest, targetProfile) {
46
+ const hooks = {};
47
+ const pat = getPattern(manifest, targetProfile.name);
48
+ iterateHooks(manifest, targetProfile, (canonical, native, handler) => {
49
+ const slug = slugify(canonical);
50
+ const p = resolveHookPath(handler, slug, manifest.name, native, pat);
51
+ const bashCmd = p ? `bash "./${p}"` : `echo '{}'`;
52
+ const psCmd = p
53
+ ? `powershell -NoProfile -ExecutionPolicy Bypass -File "./${p.replace(/\.sh$/, '.ps1')}"`
54
+ : `Write-Output '{}'`;
55
+ const entry = { type: 'command', bash: bashCmd, powershell: psCmd, timeoutSec: 30 };
56
+ if (canonical === 'Stop') {
57
+ entry.loop_limit = null;
58
+ delete entry.timeoutSec;
59
+ }
60
+ hooks[native] = [entry];
61
+ });
62
+ return JSON.stringify({ version: 1, hooks }, null, 2) + '\n';
63
+ }
@@ -0,0 +1,10 @@
1
+ import type { A5cPluginManifest, TargetProfile, TransformedFile, Diagnostic } from '../../types.js';
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ export declare class GeminiAdapter extends BaseHarnessOutputAdapter {
4
+ generateMcpConfig(manifest: A5cPluginManifest, targetProfile: TargetProfile): TransformedFile | null;
5
+ generateHookRegistration(manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[]): TransformedFile | null;
6
+ generateManifestFiles(sourceDir: string, manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[]): TransformedFile[];
7
+ }
8
+ export declare function generateGeminiManifest(manifest: A5cPluginManifest, commandPaths?: string[], targetName?: string, includeExtensionManifest?: boolean): string;
9
+ export declare function generateGeminiHooksJson(manifest: A5cPluginManifest, targetProfile: TargetProfile): string;
10
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/targets/adapters/gemini.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAWrD,qBAAa,aAAc,SAAQ,wBAAwB;IAEzD,iBAAiB,CACf,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,GAC3B,eAAe,GAAG,IAAI;IAQzB,wBAAwB,CACtB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,GACzB,eAAe,GAAG,IAAI;IAKzB,qBAAqB,CACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,GACzB,eAAe,EAAE;CA8BrB;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,GAAE,MAAM,EAAO,EAC3B,UAAU,SAAW,EACrB,wBAAwB,UAAO,GAC9B,MAAM,CAqCR;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,GAC3B,MAAM,CA0BR"}
@@ -0,0 +1,103 @@
1
+ // Gemini harness output adapter
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ import { iterateHooks, slugify, resolveCmd, getPattern, resolveSdkConfig, } from './hooks-utils.js';
4
+ import { getCommandPaths } from '../../utils.js';
5
+ import { buildGeminiMcpServers, toJsonContent } from '../../mcpConfig.js';
6
+ export class GeminiAdapter extends BaseHarnessOutputAdapter {
7
+ generateMcpConfig(manifest, targetProfile) {
8
+ if (!manifest.mcpServers || Object.keys(manifest.mcpServers).length === 0) {
9
+ return null;
10
+ }
11
+ const path = targetProfile.harnessManifestPath || 'gemini-extension.json';
12
+ return { path, content: toJsonContent(buildGeminiMcpServers(manifest.mcpServers)) };
13
+ }
14
+ generateHookRegistration(manifest, targetProfile, _diagnostics) {
15
+ const content = generateGeminiHooksJson(manifest, targetProfile);
16
+ return { path: targetProfile.hookRegistrationOutputPath || 'hooks/hooks.json', content };
17
+ }
18
+ generateManifestFiles(sourceDir, manifest, targetProfile, _diagnostics) {
19
+ const files = [];
20
+ const commandPaths = getCommandPaths(sourceDir, manifest);
21
+ // The gemini-extension.json is emitted here only for plugins with real
22
+ // command content. For MCP-only plugins it is produced (with mcpServers)
23
+ // by the global MCP emit step in transform(); see generateMcpConfig.
24
+ const emitExtensionManifest = commandPaths.length > 0;
25
+ files.push({
26
+ path: 'plugin.json',
27
+ content: generateGeminiManifest(manifest, commandPaths, 'gemini', emitExtensionManifest),
28
+ });
29
+ if (emitExtensionManifest) {
30
+ const extensionManifestPath = targetProfile.harnessManifestPath || 'gemini-extension.json';
31
+ files.push({
32
+ path: extensionManifestPath,
33
+ content: JSON.stringify({
34
+ name: manifest.name,
35
+ version: manifest.version,
36
+ description: manifest.description,
37
+ contextFileName: 'GEMINI.md',
38
+ settings: [],
39
+ }, null, 2) + '\n',
40
+ });
41
+ }
42
+ return files;
43
+ }
44
+ }
45
+ export function generateGeminiManifest(manifest, commandPaths = [], targetName = 'gemini', includeExtensionManifest = true) {
46
+ void targetName;
47
+ const pluginJson = {
48
+ name: manifest.name,
49
+ version: manifest.version,
50
+ description: manifest.description,
51
+ author: manifest.author,
52
+ license: manifest.license,
53
+ harness: 'gemini-cli',
54
+ hooks: {},
55
+ commands: commandPaths.map((cmdPath) => `commands/${cmdPath.split(/[\\/]/).pop()?.replace(/\.md$/, '.toml')}`),
56
+ skills: [],
57
+ contextFileName: 'GEMINI.md',
58
+ };
59
+ if (includeExtensionManifest) {
60
+ pluginJson.extensionManifest = 'gemini-extension.json';
61
+ }
62
+ if (manifest.hooks) {
63
+ const hooksObj = {};
64
+ for (const [canonicalHook, handlerValue] of Object.entries(manifest.hooks)) {
65
+ if (handlerValue) {
66
+ hooksObj[canonicalHook] = handlerValue;
67
+ }
68
+ }
69
+ pluginJson.hooks = hooksObj;
70
+ }
71
+ if (manifest.repository) {
72
+ pluginJson.repository = manifest.repository;
73
+ }
74
+ if (manifest.keywords) {
75
+ pluginJson.keywords = manifest.keywords;
76
+ }
77
+ return JSON.stringify(pluginJson, null, 2) + '\n';
78
+ }
79
+ export function generateGeminiHooksJson(manifest, targetProfile) {
80
+ const hooks = {};
81
+ const rootRef = targetProfile.pluginRootEnvVar
82
+ ? `\${${targetProfile.pluginRootEnvVar}}`
83
+ : '${extensionPath}';
84
+ const pat = getPattern(manifest, targetProfile.name);
85
+ const sdk = resolveSdkConfig(manifest);
86
+ iterateHooks(manifest, targetProfile, (canonical, native, handler) => {
87
+ const slug = slugify(canonical);
88
+ const cmd = resolveCmd(handler, slug, targetProfile.adapterName, rootRef, manifest.name, native, sdk.proxyPackage, sdk.proxyBinary, pat);
89
+ hooks[native] = [{
90
+ hooks: [{
91
+ name: `${manifest.name}-${slug}`,
92
+ type: 'command',
93
+ command: cmd,
94
+ timeout: 30000,
95
+ description: `${manifest.name} ${canonical} hook`,
96
+ }],
97
+ }];
98
+ });
99
+ return JSON.stringify({
100
+ description: `${manifest.name} plugin hooks for Gemini CLI`,
101
+ hooks,
102
+ }, null, 2) + '\n';
103
+ }
@@ -0,0 +1,12 @@
1
+ import type { A5cPluginManifest, TargetProfile, TransformedFile, Diagnostic } from '../../types.js';
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ export declare class GentyAdapter extends BaseHarnessOutputAdapter {
4
+ generateMcpConfig(manifest: A5cPluginManifest, _targetProfile: TargetProfile): TransformedFile | null;
5
+ generateManifestFiles(_sourceDir: string, manifest: A5cPluginManifest, _targetProfile: TargetProfile, _diagnostics: Diagnostic[]): TransformedFile[];
6
+ }
7
+ type ResolvedManifest = A5cPluginManifest & {
8
+ npmPackageName?: string;
9
+ };
10
+ export declare function generateGentyManifest(manifest: ResolvedManifest, targetName?: string): string;
11
+ export {};
12
+ //# sourceMappingURL=genty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genty.d.ts","sourceRoot":"","sources":["../../../src/targets/adapters/genty.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAOrD,qBAAa,YAAa,SAAQ,wBAAwB;IAExD,iBAAiB,CACf,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,aAAa,GAC5B,eAAe,GAAG,IAAI;IAIzB,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,aAAa,EAC7B,YAAY,EAAE,UAAU,EAAE,GACzB,eAAe,EAAE;CAQrB;AAED,KAAK,gBAAgB,GAAG,iBAAiB,GAAG;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAwCF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,SAAU,GAAG,MAAM,CA8C9F"}
@@ -0,0 +1,94 @@
1
+ // Genty harness output adapter
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ import { resolveTargetCliName, resolveTargetNpmPackageName, } from '../../sdkConfig.js';
4
+ import { emitJsonMcpConfig } from '../../mcpConfig.js';
5
+ export class GentyAdapter extends BaseHarnessOutputAdapter {
6
+ generateMcpConfig(manifest, _targetProfile) {
7
+ return emitJsonMcpConfig(manifest, '.mcp.json');
8
+ }
9
+ generateManifestFiles(_sourceDir, manifest, _targetProfile, _diagnostics) {
10
+ const files = [];
11
+ files.push({
12
+ path: 'package.json',
13
+ content: generateGentyManifest(manifest, this.targetName),
14
+ });
15
+ return files;
16
+ }
17
+ }
18
+ function buildNpmRepository(manifest, npmPackageName) {
19
+ if (!manifest.repository)
20
+ return undefined;
21
+ let url = typeof manifest.repository === 'string'
22
+ ? manifest.repository
23
+ : manifest.repository.url;
24
+ if (!url.startsWith('git+'))
25
+ url = `git+${url}`;
26
+ if (!url.endsWith('.git'))
27
+ url = `${url}.git`;
28
+ const directory = `plugins/${npmPackageName.split('/').pop()}`;
29
+ return { type: 'git', url, directory };
30
+ }
31
+ function buildNpmHomepage(manifest, npmPackageName) {
32
+ if (!manifest.repository)
33
+ return undefined;
34
+ const url = typeof manifest.repository === 'string'
35
+ ? manifest.repository
36
+ : manifest.repository.url;
37
+ const base = url.replace(/\.git$/, '').replace(/^git\+/, '');
38
+ const directory = `plugins/${npmPackageName.split('/').pop()}`;
39
+ return `${base}/tree/main/${directory}#readme`;
40
+ }
41
+ function buildNpmBugs(manifest) {
42
+ if (!manifest.repository)
43
+ return undefined;
44
+ const url = typeof manifest.repository === 'string'
45
+ ? manifest.repository
46
+ : manifest.repository.url;
47
+ const base = url.replace(/\.git$/, '').replace(/^git\+/, '');
48
+ return { url: `${base}/issues` };
49
+ }
50
+ export function generateGentyManifest(manifest, targetName = 'genty') {
51
+ const target = { name: targetName };
52
+ const packageJson = {
53
+ name: resolveTargetNpmPackageName(manifest, target),
54
+ version: manifest.version,
55
+ type: 'module',
56
+ description: `${manifest.description} — ${targetName}`,
57
+ keywords: [targetName, manifest.name, 'orchestration'],
58
+ genty: {
59
+ extensions: ['./extensions'],
60
+ skills: ['./skills'],
61
+ },
62
+ peerDependencies: {
63
+ '@a5c-ai/genty-core': '*',
64
+ },
65
+ scripts: {
66
+ test: 'npm run validate:ci',
67
+ 'test:integration': 'node --test test/integration.test.js',
68
+ 'test:packaged-install': 'node test/packaged-install.test.cjs',
69
+ 'validate:ci': 'npm run test:integration && npm run test:packaged-install',
70
+ deploy: 'npm publish --access public',
71
+ 'deploy:staging': 'npm publish --access public --tag staging',
72
+ },
73
+ bin: { [resolveTargetCliName(manifest, target)]: 'bin/cli.cjs' },
74
+ files: [
75
+ 'bin/',
76
+ 'package.json',
77
+ 'versions.json',
78
+ 'README.md',
79
+ 'AGENTS.md',
80
+ 'extensions/',
81
+ 'skills/',
82
+ 'commands/',
83
+ 'scripts/',
84
+ ],
85
+ author: typeof manifest.author === 'string' ? manifest.author : manifest.author.name,
86
+ license: manifest.license,
87
+ publishConfig: { access: 'public' },
88
+ };
89
+ const gentyPkgName = packageJson.name;
90
+ packageJson.repository = buildNpmRepository(manifest, gentyPkgName);
91
+ packageJson.homepage = buildNpmHomepage(manifest, gentyPkgName);
92
+ packageJson.bugs = buildNpmBugs(manifest);
93
+ return JSON.stringify(packageJson, null, 2) + '\n';
94
+ }
@@ -0,0 +1,10 @@
1
+ import type { A5cPluginManifest, TargetProfile, TransformedFile, Diagnostic } from '../../types.js';
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ export declare class GithubCopilotAdapter extends BaseHarnessOutputAdapter {
4
+ generateMcpConfig(manifest: A5cPluginManifest, _targetProfile: TargetProfile): TransformedFile | null;
5
+ generateHookRegistration(manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[]): TransformedFile | null;
6
+ generateManifestFiles(_sourceDir: string, manifest: A5cPluginManifest, _targetProfile: TargetProfile, _diagnostics: Diagnostic[]): TransformedFile[];
7
+ }
8
+ export declare function generateGithubCopilotManifest(manifest: A5cPluginManifest): string;
9
+ export declare function generateGithubCopilotHooksJson(manifest: A5cPluginManifest, targetProfile: TargetProfile): string;
10
+ //# sourceMappingURL=github-copilot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-copilot.d.ts","sourceRoot":"","sources":["../../../src/targets/adapters/github-copilot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AASrD,qBAAa,oBAAqB,SAAQ,wBAAwB;IAEhE,iBAAiB,CACf,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,aAAa,GAC5B,eAAe,GAAG,IAAI;IAIzB,wBAAwB,CACtB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,GACzB,eAAe,GAAG,IAAI;IAKzB,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,aAAa,EAC7B,YAAY,EAAE,UAAU,EAAE,GACzB,eAAe,EAAE;CAarB;AAQD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAuBjF;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,GAC3B,MAAM,CAeR"}
@@ -0,0 +1,66 @@
1
+ // GitHub Copilot harness output adapter
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ import { iterateHooks, slugify, resolveHookPath, getPattern, } from './hooks-utils.js';
4
+ import { emitJsonMcpConfig } from '../../mcpConfig.js';
5
+ export class GithubCopilotAdapter extends BaseHarnessOutputAdapter {
6
+ generateMcpConfig(manifest, _targetProfile) {
7
+ return emitJsonMcpConfig(manifest, '.mcp.json');
8
+ }
9
+ generateHookRegistration(manifest, targetProfile, _diagnostics) {
10
+ const content = generateGithubCopilotHooksJson(manifest, targetProfile);
11
+ return { path: targetProfile.hookRegistrationOutputPath || 'hooks.json', content };
12
+ }
13
+ generateManifestFiles(_sourceDir, manifest, _targetProfile, _diagnostics) {
14
+ const files = [];
15
+ const copilotManifest = generateGithubCopilotManifest(manifest);
16
+ files.push({
17
+ path: 'plugin.json',
18
+ content: copilotManifest,
19
+ });
20
+ files.push({
21
+ path: '.github/plugin.json',
22
+ content: copilotManifest,
23
+ });
24
+ return files;
25
+ }
26
+ }
27
+ function normalizeAuthorObject(manifest) {
28
+ return typeof manifest.author === 'string'
29
+ ? { name: manifest.author }
30
+ : manifest.author;
31
+ }
32
+ export function generateGithubCopilotManifest(manifest) {
33
+ const pluginJson = {
34
+ name: manifest.name,
35
+ version: manifest.version,
36
+ description: manifest.description,
37
+ author: normalizeAuthorObject(manifest),
38
+ license: manifest.license,
39
+ skills: 'skills/',
40
+ // Only declare hooks.json when the plugin ships hooks (hook-free for atlas).
41
+ ...(manifest.hooks && Object.keys(manifest.hooks).length > 0 ? { hooks: 'hooks.json' } : {}),
42
+ commands: 'commands/',
43
+ agents: 'AGENTS.md',
44
+ };
45
+ if (manifest.repository) {
46
+ pluginJson.repository = manifest.repository;
47
+ }
48
+ if (manifest.keywords) {
49
+ pluginJson.keywords = manifest.keywords;
50
+ }
51
+ return JSON.stringify(pluginJson, null, 2) + '\n';
52
+ }
53
+ export function generateGithubCopilotHooksJson(manifest, targetProfile) {
54
+ const hooks = {};
55
+ const pat = getPattern(manifest, targetProfile.name);
56
+ iterateHooks(manifest, targetProfile, (canonical, native, handler) => {
57
+ const slug = slugify(canonical);
58
+ const p = resolveHookPath(handler, slug, manifest.name, native, pat);
59
+ const bashCmd = p ? `./${p}` : `echo '{}'`;
60
+ const psCmd = p ? `./${p.replace(/\.sh$/, '.ps1')}` : `Write-Output '{}'`;
61
+ const timeout = canonical === 'UserPromptSubmit' ? 15 : 30;
62
+ const hookName = native === 'SessionStart' ? 'sessionStart' : native === 'SessionEnd' ? 'sessionEnd' : native;
63
+ hooks[hookName] = [{ type: 'command', bash: bashCmd, powershell: psCmd, timeoutSec: timeout }];
64
+ });
65
+ return JSON.stringify({ version: 1, hooks }, null, 2) + '\n';
66
+ }
@@ -0,0 +1,13 @@
1
+ import type { A5cPluginManifest, TargetProfile, TransformedFile, Diagnostic } from '../../types.js';
2
+ import { BaseHarnessOutputAdapter } from './base.js';
3
+ export declare class HermesAdapter extends BaseHarnessOutputAdapter {
4
+ generateHookRegistration(manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[]): TransformedFile | null;
5
+ generateManifestFiles(_sourceDir: string, manifest: A5cPluginManifest, targetProfile: TargetProfile, _diagnostics: Diagnostic[], rawManifest?: A5cPluginManifest): TransformedFile[];
6
+ }
7
+ type ResolvedManifest = A5cPluginManifest & {
8
+ npmPackageName?: string;
9
+ };
10
+ export declare function generateHermesManifest(manifest: ResolvedManifest, targetName?: string): string;
11
+ export declare function generateHermesHooksJson(manifest: A5cPluginManifest, targetProfile: TargetProfile): string;
12
+ export {};
13
+ //# sourceMappingURL=hermes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../../src/targets/adapters/hermes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAcrD,qBAAa,aAAc,SAAQ,wBAAwB;IAIzD,wBAAwB,CACtB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,GACzB,eAAe,GAAG,IAAI;IAKzB,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,EAAE,EAC1B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,eAAe,EAAE;CAUrB;AAED,KAAK,gBAAgB,GAAG,iBAAiB,GAAG;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAwCF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,SAAW,GAAG,MAAM,CAoChG;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,aAAa,GAC3B,MAAM,CAYR"}