@ornexus/neocortex 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/LICENSE +56 -0
  2. package/README.md +661 -0
  3. package/install.js +453 -0
  4. package/install.ps1 +1478 -0
  5. package/install.sh +1409 -0
  6. package/package.json +93 -0
  7. package/packages/client/dist/adapters/adapter-registry.d.ts +62 -0
  8. package/packages/client/dist/adapters/adapter-registry.d.ts.map +1 -0
  9. package/packages/client/dist/adapters/adapter-registry.js +107 -0
  10. package/packages/client/dist/adapters/adapter-registry.js.map +1 -0
  11. package/packages/client/dist/adapters/antigravity-adapter.d.ts +19 -0
  12. package/packages/client/dist/adapters/antigravity-adapter.d.ts.map +1 -0
  13. package/packages/client/dist/adapters/antigravity-adapter.js +78 -0
  14. package/packages/client/dist/adapters/antigravity-adapter.js.map +1 -0
  15. package/packages/client/dist/adapters/claude-code-adapter.d.ts +20 -0
  16. package/packages/client/dist/adapters/claude-code-adapter.d.ts.map +1 -0
  17. package/packages/client/dist/adapters/claude-code-adapter.js +80 -0
  18. package/packages/client/dist/adapters/claude-code-adapter.js.map +1 -0
  19. package/packages/client/dist/adapters/codex-adapter.d.ts +20 -0
  20. package/packages/client/dist/adapters/codex-adapter.d.ts.map +1 -0
  21. package/packages/client/dist/adapters/codex-adapter.js +81 -0
  22. package/packages/client/dist/adapters/codex-adapter.js.map +1 -0
  23. package/packages/client/dist/adapters/cursor-adapter.d.ts +20 -0
  24. package/packages/client/dist/adapters/cursor-adapter.d.ts.map +1 -0
  25. package/packages/client/dist/adapters/cursor-adapter.js +116 -0
  26. package/packages/client/dist/adapters/cursor-adapter.js.map +1 -0
  27. package/packages/client/dist/adapters/gemini-adapter.d.ts +19 -0
  28. package/packages/client/dist/adapters/gemini-adapter.d.ts.map +1 -0
  29. package/packages/client/dist/adapters/gemini-adapter.js +72 -0
  30. package/packages/client/dist/adapters/gemini-adapter.js.map +1 -0
  31. package/packages/client/dist/adapters/index.d.ts +20 -0
  32. package/packages/client/dist/adapters/index.d.ts.map +1 -0
  33. package/packages/client/dist/adapters/index.js +22 -0
  34. package/packages/client/dist/adapters/index.js.map +1 -0
  35. package/packages/client/dist/adapters/platform-detector.d.ts +47 -0
  36. package/packages/client/dist/adapters/platform-detector.d.ts.map +1 -0
  37. package/packages/client/dist/adapters/platform-detector.js +107 -0
  38. package/packages/client/dist/adapters/platform-detector.js.map +1 -0
  39. package/packages/client/dist/adapters/target-adapter.d.ts +71 -0
  40. package/packages/client/dist/adapters/target-adapter.d.ts.map +1 -0
  41. package/packages/client/dist/adapters/target-adapter.js +13 -0
  42. package/packages/client/dist/adapters/target-adapter.js.map +1 -0
  43. package/packages/client/dist/adapters/vscode-adapter.d.ts +20 -0
  44. package/packages/client/dist/adapters/vscode-adapter.d.ts.map +1 -0
  45. package/packages/client/dist/adapters/vscode-adapter.js +73 -0
  46. package/packages/client/dist/adapters/vscode-adapter.js.map +1 -0
  47. package/packages/client/dist/cache/crypto-utils.d.ts +31 -0
  48. package/packages/client/dist/cache/crypto-utils.d.ts.map +1 -0
  49. package/packages/client/dist/cache/crypto-utils.js +77 -0
  50. package/packages/client/dist/cache/crypto-utils.js.map +1 -0
  51. package/packages/client/dist/cache/encrypted-cache.d.ts +31 -0
  52. package/packages/client/dist/cache/encrypted-cache.d.ts.map +1 -0
  53. package/packages/client/dist/cache/encrypted-cache.js +92 -0
  54. package/packages/client/dist/cache/encrypted-cache.js.map +1 -0
  55. package/packages/client/dist/cache/index.d.ts +14 -0
  56. package/packages/client/dist/cache/index.d.ts.map +1 -0
  57. package/packages/client/dist/cache/index.js +14 -0
  58. package/packages/client/dist/cache/index.js.map +1 -0
  59. package/packages/client/dist/cli.d.ts +15 -0
  60. package/packages/client/dist/cli.d.ts.map +1 -0
  61. package/packages/client/dist/cli.js +182 -0
  62. package/packages/client/dist/cli.js.map +1 -0
  63. package/packages/client/dist/commands/activate.d.ts +48 -0
  64. package/packages/client/dist/commands/activate.d.ts.map +1 -0
  65. package/packages/client/dist/commands/activate.js +186 -0
  66. package/packages/client/dist/commands/activate.js.map +1 -0
  67. package/packages/client/dist/commands/cache-status.d.ts +40 -0
  68. package/packages/client/dist/commands/cache-status.d.ts.map +1 -0
  69. package/packages/client/dist/commands/cache-status.js +113 -0
  70. package/packages/client/dist/commands/cache-status.js.map +1 -0
  71. package/packages/client/dist/commands/invoke.d.ts +71 -0
  72. package/packages/client/dist/commands/invoke.d.ts.map +1 -0
  73. package/packages/client/dist/commands/invoke.js +345 -0
  74. package/packages/client/dist/commands/invoke.js.map +1 -0
  75. package/packages/client/dist/config/resolver-selection.d.ts +41 -0
  76. package/packages/client/dist/config/resolver-selection.d.ts.map +1 -0
  77. package/packages/client/dist/config/resolver-selection.js +278 -0
  78. package/packages/client/dist/config/resolver-selection.js.map +1 -0
  79. package/packages/client/dist/context/context-collector.d.ts +29 -0
  80. package/packages/client/dist/context/context-collector.d.ts.map +1 -0
  81. package/packages/client/dist/context/context-collector.js +223 -0
  82. package/packages/client/dist/context/context-collector.js.map +1 -0
  83. package/packages/client/dist/context/context-sanitizer.d.ts +29 -0
  84. package/packages/client/dist/context/context-sanitizer.d.ts.map +1 -0
  85. package/packages/client/dist/context/context-sanitizer.js +146 -0
  86. package/packages/client/dist/context/context-sanitizer.js.map +1 -0
  87. package/packages/client/dist/index.d.ts +55 -0
  88. package/packages/client/dist/index.d.ts.map +1 -0
  89. package/packages/client/dist/index.js +37 -0
  90. package/packages/client/dist/index.js.map +1 -0
  91. package/packages/client/dist/license/index.d.ts +6 -0
  92. package/packages/client/dist/license/index.d.ts.map +1 -0
  93. package/packages/client/dist/license/index.js +6 -0
  94. package/packages/client/dist/license/index.js.map +1 -0
  95. package/packages/client/dist/license/license-client.d.ts +53 -0
  96. package/packages/client/dist/license/license-client.d.ts.map +1 -0
  97. package/packages/client/dist/license/license-client.js +164 -0
  98. package/packages/client/dist/license/license-client.js.map +1 -0
  99. package/packages/client/dist/machine/fingerprint.d.ts +24 -0
  100. package/packages/client/dist/machine/fingerprint.d.ts.map +1 -0
  101. package/packages/client/dist/machine/fingerprint.js +61 -0
  102. package/packages/client/dist/machine/fingerprint.js.map +1 -0
  103. package/packages/client/dist/machine/index.d.ts +6 -0
  104. package/packages/client/dist/machine/index.d.ts.map +1 -0
  105. package/packages/client/dist/machine/index.js +6 -0
  106. package/packages/client/dist/machine/index.js.map +1 -0
  107. package/packages/client/dist/resilience/circuit-breaker.d.ts +71 -0
  108. package/packages/client/dist/resilience/circuit-breaker.d.ts.map +1 -0
  109. package/packages/client/dist/resilience/circuit-breaker.js +171 -0
  110. package/packages/client/dist/resilience/circuit-breaker.js.map +1 -0
  111. package/packages/client/dist/resilience/degradation-manager.d.ts +68 -0
  112. package/packages/client/dist/resilience/degradation-manager.d.ts.map +1 -0
  113. package/packages/client/dist/resilience/degradation-manager.js +165 -0
  114. package/packages/client/dist/resilience/degradation-manager.js.map +1 -0
  115. package/packages/client/dist/resilience/freshness-indicator.d.ts +60 -0
  116. package/packages/client/dist/resilience/freshness-indicator.d.ts.map +1 -0
  117. package/packages/client/dist/resilience/freshness-indicator.js +101 -0
  118. package/packages/client/dist/resilience/freshness-indicator.js.map +1 -0
  119. package/packages/client/dist/resilience/index.d.ts +9 -0
  120. package/packages/client/dist/resilience/index.d.ts.map +1 -0
  121. package/packages/client/dist/resilience/index.js +9 -0
  122. package/packages/client/dist/resilience/index.js.map +1 -0
  123. package/packages/client/dist/resilience/recovery-detector.d.ts +60 -0
  124. package/packages/client/dist/resilience/recovery-detector.d.ts.map +1 -0
  125. package/packages/client/dist/resilience/recovery-detector.js +75 -0
  126. package/packages/client/dist/resilience/recovery-detector.js.map +1 -0
  127. package/packages/client/dist/resolvers/asset-resolver.d.ts +80 -0
  128. package/packages/client/dist/resolvers/asset-resolver.d.ts.map +1 -0
  129. package/packages/client/dist/resolvers/asset-resolver.js +14 -0
  130. package/packages/client/dist/resolvers/asset-resolver.js.map +1 -0
  131. package/packages/client/dist/resolvers/local-resolver.d.ts +27 -0
  132. package/packages/client/dist/resolvers/local-resolver.d.ts.map +1 -0
  133. package/packages/client/dist/resolvers/local-resolver.js +219 -0
  134. package/packages/client/dist/resolvers/local-resolver.js.map +1 -0
  135. package/packages/client/dist/resolvers/remote-resolver.d.ts +63 -0
  136. package/packages/client/dist/resolvers/remote-resolver.d.ts.map +1 -0
  137. package/packages/client/dist/resolvers/remote-resolver.js +207 -0
  138. package/packages/client/dist/resolvers/remote-resolver.js.map +1 -0
  139. package/packages/client/dist/telemetry/index.d.ts +6 -0
  140. package/packages/client/dist/telemetry/index.d.ts.map +1 -0
  141. package/packages/client/dist/telemetry/index.js +6 -0
  142. package/packages/client/dist/telemetry/index.js.map +1 -0
  143. package/packages/client/dist/telemetry/offline-queue.d.ts +58 -0
  144. package/packages/client/dist/telemetry/offline-queue.d.ts.map +1 -0
  145. package/packages/client/dist/telemetry/offline-queue.js +132 -0
  146. package/packages/client/dist/telemetry/offline-queue.js.map +1 -0
  147. package/packages/client/dist/types/index.d.ts +141 -0
  148. package/packages/client/dist/types/index.d.ts.map +1 -0
  149. package/packages/client/dist/types/index.js +39 -0
  150. package/packages/client/dist/types/index.js.map +1 -0
  151. package/targets-stubs/antigravity/README.md +20 -0
  152. package/targets-stubs/claude-code/README.md +20 -0
  153. package/targets-stubs/codex/README.md +20 -0
  154. package/targets-stubs/cursor/README.md +20 -0
  155. package/targets-stubs/gemini-cli/README.md +20 -0
  156. package/targets-stubs/vscode/README.md +20 -0
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * Cursor Adapter - Formats prompts as .cursorrules content.
6
+ *
7
+ * Cursor reads system instructions from .cursorrules files.
8
+ * This adapter produces concise, directive-style rules optimized
9
+ * for Cursor's instruction format.
10
+ *
11
+ * Story 42.8
12
+ */
13
+ // ── Constants ───────────────────────────────────────────────────────────────
14
+ const TARGET_ID = 'cursor';
15
+ const MAX_CONTEXT_LENGTH = 100_000;
16
+ const CAPABILITIES = {
17
+ supportsMarkdown: true,
18
+ supportsMultiFile: false,
19
+ supportsMultiTurn: true,
20
+ supportsTools: true,
21
+ maxContextLength: MAX_CONTEXT_LENGTH,
22
+ };
23
+ // ── Helpers ─────────────────────────────────────────────────────────────────
24
+ /**
25
+ * Convert verbose markdown prose to concise directive-style rules.
26
+ * Strips excessive headers, converts paragraphs to bullet points.
27
+ */
28
+ function condenseToCursorFormat(content) {
29
+ const lines = content.split('\n');
30
+ const result = [];
31
+ for (const line of lines) {
32
+ const trimmed = line.trim();
33
+ // Skip empty lines in sequences (collapse to single)
34
+ if (trimmed === '') {
35
+ if (result.length > 0 && result[result.length - 1] !== '') {
36
+ result.push('');
37
+ }
38
+ continue;
39
+ }
40
+ // Keep headers but reduce depth (### becomes ##)
41
+ if (trimmed.startsWith('#')) {
42
+ result.push(trimmed);
43
+ continue;
44
+ }
45
+ // Keep bullet points, code blocks, and directives
46
+ if (trimmed.startsWith('-') ||
47
+ trimmed.startsWith('*') ||
48
+ trimmed.startsWith('```') ||
49
+ trimmed.startsWith('>')) {
50
+ result.push(trimmed);
51
+ continue;
52
+ }
53
+ // Inside code blocks, preserve as-is
54
+ if (result.length > 0 && isInsideCodeBlock(result)) {
55
+ result.push(line);
56
+ continue;
57
+ }
58
+ // Convert standalone paragraphs to bullet points
59
+ if (trimmed.length > 0) {
60
+ result.push(`- ${trimmed}`);
61
+ }
62
+ }
63
+ return result.join('\n').trim();
64
+ }
65
+ function isInsideCodeBlock(lines) {
66
+ let openCount = 0;
67
+ for (const line of lines) {
68
+ if (line.trim().startsWith('```')) {
69
+ openCount++;
70
+ }
71
+ }
72
+ return openCount % 2 !== 0;
73
+ }
74
+ // ── Implementation ──────────────────────────────────────────────────────────
75
+ export class CursorAdapter {
76
+ formatPrompt(assembledPrompt, platformInstructions, config) {
77
+ const sections = [];
78
+ // Condense prompt for Cursor's concise format
79
+ const condensed = config.verbose === true
80
+ ? assembledPrompt
81
+ : condenseToCursorFormat(assembledPrompt);
82
+ sections.push(condensed);
83
+ // Add tool hints if available
84
+ if (platformInstructions.tools && platformInstructions.tools.length > 0) {
85
+ sections.push('');
86
+ sections.push('## Tools');
87
+ for (const tool of platformInstructions.tools) {
88
+ sections.push(`- ${tool}`);
89
+ }
90
+ }
91
+ // Add context files as references
92
+ if (platformInstructions.contextFiles && platformInstructions.contextFiles.length > 0) {
93
+ sections.push('');
94
+ sections.push('## Context');
95
+ for (const file of platformInstructions.contextFiles) {
96
+ sections.push(`- @${file}`);
97
+ }
98
+ }
99
+ let result = sections.join('\n');
100
+ const maxLength = config.maxPromptLength ?? MAX_CONTEXT_LENGTH;
101
+ if (result.length > maxLength) {
102
+ result = result.slice(0, maxLength);
103
+ }
104
+ return result;
105
+ }
106
+ getTargetId() {
107
+ return TARGET_ID;
108
+ }
109
+ getCapabilities() {
110
+ return CAPABILITIES;
111
+ }
112
+ getInjectionMethod() {
113
+ return 'file';
114
+ }
115
+ }
116
+ //# sourceMappingURL=cursor-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-adapter.js","sourceRoot":"","sources":["../../src/adapters/cursor-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * Gemini CLI Adapter - Formats prompts as GEMINI.md system instructions.
6
+ *
7
+ * Gemini CLI reads system instructions from GEMINI.md files
8
+ * with @import directives for referenced standards and skills.
9
+ *
10
+ * Story 42.8
11
+ */
12
+ import type { InjectionMethod, PlatformInstructions, TargetAdapter, TargetCapabilities, TargetConfig } from './target-adapter.js';
13
+ export declare class GeminiAdapter implements TargetAdapter {
14
+ formatPrompt(assembledPrompt: string, platformInstructions: PlatformInstructions, config: TargetConfig): string;
15
+ getTargetId(): string;
16
+ getCapabilities(): TargetCapabilities;
17
+ getInjectionMethod(): InjectionMethod;
18
+ }
19
+ //# sourceMappingURL=gemini-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/gemini-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAiB7B,qBAAa,aAAc,YAAW,aAAa;IACjD,YAAY,CACV,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM;IA8CT,WAAW,IAAI,MAAM;IAIrB,eAAe,IAAI,kBAAkB;IAIrC,kBAAkB,IAAI,eAAe;CAGtC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * Gemini CLI Adapter - Formats prompts as GEMINI.md system instructions.
6
+ *
7
+ * Gemini CLI reads system instructions from GEMINI.md files
8
+ * with @import directives for referenced standards and skills.
9
+ *
10
+ * Story 42.8
11
+ */
12
+ // ── Constants ───────────────────────────────────────────────────────────────
13
+ const TARGET_ID = 'gemini-cli';
14
+ const MAX_CONTEXT_LENGTH = 1_000_000;
15
+ const CAPABILITIES = {
16
+ supportsMarkdown: true,
17
+ supportsMultiFile: true,
18
+ supportsMultiTurn: true,
19
+ supportsTools: true,
20
+ maxContextLength: MAX_CONTEXT_LENGTH,
21
+ };
22
+ // ── Implementation ──────────────────────────────────────────────────────────
23
+ export class GeminiAdapter {
24
+ formatPrompt(assembledPrompt, platformInstructions, config) {
25
+ const sections = [];
26
+ // Main prompt content
27
+ sections.push(assembledPrompt);
28
+ // Add @import directives for context files (Gemini-native feature)
29
+ if (platformInstructions.contextFiles && platformInstructions.contextFiles.length > 0) {
30
+ sections.push('');
31
+ sections.push('## Standards');
32
+ sections.push('');
33
+ for (const file of platformInstructions.contextFiles) {
34
+ sections.push(`@import ${file}`);
35
+ }
36
+ }
37
+ // Tool definitions
38
+ if (platformInstructions.tools && platformInstructions.tools.length > 0) {
39
+ sections.push('');
40
+ sections.push('## Available Tools');
41
+ sections.push('');
42
+ for (const tool of platformInstructions.tools) {
43
+ sections.push(`- ${tool}`);
44
+ }
45
+ }
46
+ // MCP configuration (Gemini supports MCP servers)
47
+ if (platformInstructions.mcpConfig && Object.keys(platformInstructions.mcpConfig).length > 0) {
48
+ sections.push('');
49
+ sections.push('## MCP Servers');
50
+ sections.push('');
51
+ sections.push('```json');
52
+ sections.push(JSON.stringify(platformInstructions.mcpConfig, null, 2));
53
+ sections.push('```');
54
+ }
55
+ let result = sections.join('\n');
56
+ const maxLength = config.maxPromptLength ?? MAX_CONTEXT_LENGTH;
57
+ if (result.length > maxLength) {
58
+ result = result.slice(0, maxLength);
59
+ }
60
+ return result;
61
+ }
62
+ getTargetId() {
63
+ return TARGET_ID;
64
+ }
65
+ getCapabilities() {
66
+ return CAPABILITIES;
67
+ }
68
+ getInjectionMethod() {
69
+ return 'file';
70
+ }
71
+ }
72
+ //# sourceMappingURL=gemini-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-adapter.js","sourceRoot":"","sources":["../../src/adapters/gemini-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,+EAA+E;AAE/E,MAAM,SAAS,GAAG,YAAY,CAAC;AAC/B,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,MAAM,YAAY,GAAuB;IACvC,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,kBAAkB;CACrC,CAAC;AAEF,+EAA+E;AAE/E,MAAM,OAAO,aAAa;IACxB,YAAY,CACV,eAAuB,EACvB,oBAA0C,EAC1C,MAAoB;QAEpB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,sBAAsB;QACtB,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE/B,mEAAmE;QACnE,IAAI,oBAAoB,CAAC,YAAY,IAAI,oBAAoB,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,YAAY,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,oBAAoB,CAAC,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,KAAK,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,IAAI,oBAAoB,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7F,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,IAAI,kBAAkB,CAAC;QAC/D,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC9B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,eAAe;QACb,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,kBAAkB;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * @neocortex/client - Target Adapters
6
+ *
7
+ * Platform-specific prompt formatting for 6 supported targets.
8
+ *
9
+ * Story 42.8
10
+ */
11
+ export type { InjectionMethod, PlatformInstructions, TargetAdapter, TargetCapabilities, TargetConfig, } from './target-adapter.js';
12
+ export { ClaudeCodeAdapter } from './claude-code-adapter.js';
13
+ export { CursorAdapter } from './cursor-adapter.js';
14
+ export { VSCodeAdapter } from './vscode-adapter.js';
15
+ export { GeminiAdapter } from './gemini-adapter.js';
16
+ export { CodexAdapter } from './codex-adapter.js';
17
+ export { AntigravityAdapter } from './antigravity-adapter.js';
18
+ export { detectPlatform, isValidTargetId, type DetectionContext, type DetectionResult, type FileExistsCheck, type TargetId, } from './platform-detector.js';
19
+ export { AdapterRegistry, createDefaultRegistry, UnknownTargetError, } from './adapter-registry.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAI9D,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,QAAQ,GACd,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * @neocortex/client - Target Adapters
6
+ *
7
+ * Platform-specific prompt formatting for 6 supported targets.
8
+ *
9
+ * Story 42.8
10
+ */
11
+ // ── Adapter Implementations ─────────────────────────────────────────────────
12
+ export { ClaudeCodeAdapter } from './claude-code-adapter.js';
13
+ export { CursorAdapter } from './cursor-adapter.js';
14
+ export { VSCodeAdapter } from './vscode-adapter.js';
15
+ export { GeminiAdapter } from './gemini-adapter.js';
16
+ export { CodexAdapter } from './codex-adapter.js';
17
+ export { AntigravityAdapter } from './antigravity-adapter.js';
18
+ // ── Platform Detection ──────────────────────────────────────────────────────
19
+ export { detectPlatform, isValidTargetId, } from './platform-detector.js';
20
+ // ── Registry ────────────────────────────────────────────────────────────────
21
+ export { AdapterRegistry, createDefaultRegistry, UnknownTargetError, } from './adapter-registry.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,+EAA+E;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,+EAA+E;AAE/E,OAAO,EACL,cAAc,EACd,eAAe,GAKhB,MAAM,wBAAwB,CAAC;AAEhC,+EAA+E;AAE/E,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * Platform Detector - Auto-detects the current platform target.
6
+ *
7
+ * Uses a priority-ordered detection chain to identify which AI coding
8
+ * platform the CLI is running within, based on filesystem markers
9
+ * and environment variables.
10
+ *
11
+ * Detection priority:
12
+ * 1. --target flag (explicit override)
13
+ * 2. .cursorrules file -> Cursor
14
+ * 3. CLAUDE.md file -> Claude Code
15
+ * 4. .vscode/ directory -> VS Code
16
+ * 5. GEMINI_CLI env var -> Gemini CLI
17
+ * 6. CODEX_ env var prefix -> Codex
18
+ * 7. Default fallback -> Claude Code
19
+ *
20
+ * Story 42.8
21
+ */
22
+ /** Supported platform target identifiers */
23
+ export type TargetId = 'claude-code' | 'cursor' | 'vscode' | 'gemini-cli' | 'codex' | 'antigravity';
24
+ /** Context provided to the platform detector */
25
+ export interface DetectionContext {
26
+ readonly cwd: string;
27
+ readonly env: Readonly<Record<string, string | undefined>>;
28
+ readonly targetFlag?: string;
29
+ }
30
+ /** Result of platform detection */
31
+ export interface DetectionResult {
32
+ readonly targetId: TargetId;
33
+ readonly confidence: number;
34
+ readonly reason: string;
35
+ }
36
+ /** Check if a string is a valid TargetId */
37
+ export declare function isValidTargetId(value: string): value is TargetId;
38
+ export type FileExistsCheck = (path: string) => boolean;
39
+ /**
40
+ * Detect the current platform target based on the execution context.
41
+ *
42
+ * @param context - Detection context with cwd, env, and optional target flag
43
+ * @param fileExists - Injectable filesystem check (for testing)
44
+ * @returns Detection result with target ID, confidence, and reason
45
+ */
46
+ export declare function detectPlatform(context: DetectionContext, fileExists?: FileExistsCheck): DetectionResult;
47
+ //# sourceMappingURL=platform-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../src/adapters/platform-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,4CAA4C;AAC5C,MAAM,MAAM,QAAQ,GAChB,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,aAAa,CAAC;AAElB,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAaD,4CAA4C;AAC5C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAEhE;AAID,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AAMxD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,UAAU,GAAE,eAAmC,GAC9C,eAAe,CAkEjB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * Platform Detector - Auto-detects the current platform target.
6
+ *
7
+ * Uses a priority-ordered detection chain to identify which AI coding
8
+ * platform the CLI is running within, based on filesystem markers
9
+ * and environment variables.
10
+ *
11
+ * Detection priority:
12
+ * 1. --target flag (explicit override)
13
+ * 2. .cursorrules file -> Cursor
14
+ * 3. CLAUDE.md file -> Claude Code
15
+ * 4. .vscode/ directory -> VS Code
16
+ * 5. GEMINI_CLI env var -> Gemini CLI
17
+ * 6. CODEX_ env var prefix -> Codex
18
+ * 7. Default fallback -> Claude Code
19
+ *
20
+ * Story 42.8
21
+ */
22
+ import { existsSync } from 'node:fs';
23
+ import { join } from 'node:path';
24
+ // ── Valid Target IDs ────────────────────────────────────────────────────────
25
+ const VALID_TARGETS = new Set([
26
+ 'claude-code',
27
+ 'cursor',
28
+ 'vscode',
29
+ 'gemini-cli',
30
+ 'codex',
31
+ 'antigravity',
32
+ ]);
33
+ /** Check if a string is a valid TargetId */
34
+ export function isValidTargetId(value) {
35
+ return VALID_TARGETS.has(value);
36
+ }
37
+ const defaultFileExists = (path) => existsSync(path);
38
+ // ── Detection Function ──────────────────────────────────────────────────────
39
+ /**
40
+ * Detect the current platform target based on the execution context.
41
+ *
42
+ * @param context - Detection context with cwd, env, and optional target flag
43
+ * @param fileExists - Injectable filesystem check (for testing)
44
+ * @returns Detection result with target ID, confidence, and reason
45
+ */
46
+ export function detectPlatform(context, fileExists = defaultFileExists) {
47
+ // 1. Explicit --target flag (highest priority)
48
+ if (context.targetFlag) {
49
+ const normalized = context.targetFlag.toLowerCase().trim();
50
+ if (isValidTargetId(normalized)) {
51
+ return {
52
+ targetId: normalized,
53
+ confidence: 1.0,
54
+ reason: `Explicit --target=${normalized} flag`,
55
+ };
56
+ }
57
+ // Invalid target flag falls through to auto-detection
58
+ }
59
+ // 2. .cursorrules file -> Cursor
60
+ if (fileExists(join(context.cwd, '.cursorrules'))) {
61
+ return {
62
+ targetId: 'cursor',
63
+ confidence: 0.95,
64
+ reason: 'Found .cursorrules file in project root',
65
+ };
66
+ }
67
+ // 3. CLAUDE.md file -> Claude Code
68
+ if (fileExists(join(context.cwd, 'CLAUDE.md'))) {
69
+ return {
70
+ targetId: 'claude-code',
71
+ confidence: 0.9,
72
+ reason: 'Found CLAUDE.md file in project root',
73
+ };
74
+ }
75
+ // 4. .vscode/ directory -> VS Code
76
+ if (fileExists(join(context.cwd, '.vscode'))) {
77
+ return {
78
+ targetId: 'vscode',
79
+ confidence: 0.7,
80
+ reason: 'Found .vscode/ directory in project root',
81
+ };
82
+ }
83
+ // 5. GEMINI_CLI env var -> Gemini CLI
84
+ if (context.env['GEMINI_CLI'] !== undefined) {
85
+ return {
86
+ targetId: 'gemini-cli',
87
+ confidence: 0.9,
88
+ reason: 'GEMINI_CLI environment variable is set',
89
+ };
90
+ }
91
+ // 6. Any env var with CODEX_ prefix -> Codex
92
+ const hasCodexEnv = Object.keys(context.env).some((key) => key.startsWith('CODEX_'));
93
+ if (hasCodexEnv) {
94
+ return {
95
+ targetId: 'codex',
96
+ confidence: 0.85,
97
+ reason: 'Found environment variable with CODEX_ prefix',
98
+ };
99
+ }
100
+ // 7. Default fallback -> Claude Code
101
+ return {
102
+ targetId: 'claude-code',
103
+ confidence: 0.5,
104
+ reason: 'Default fallback (no platform markers detected)',
105
+ };
106
+ }
107
+ //# sourceMappingURL=platform-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-detector.js","sourceRoot":"","sources":["../../src/adapters/platform-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA2BjC,+EAA+E;AAE/E,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAW;IAC3D,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,aAAa;CACd,CAAC,CAAC;AAEH,4CAA4C;AAC5C,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAMD,MAAM,iBAAiB,GAAoB,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAE9E,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAyB,EACzB,aAA8B,iBAAiB;IAE/C,+CAA+C;IAC/C,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,QAAQ,EAAE,UAAU;gBACpB,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,qBAAqB,UAAU,OAAO;aAC/C,CAAC;QACJ,CAAC;QACD,sDAAsD;IACxD,CAAC;IAED,iCAAiC;IACjC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,yCAAyC;SAClD,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO;YACL,QAAQ,EAAE,aAAa;YACvB,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,sCAAsC;SAC/C,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,0CAA0C;SACnD,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO;YACL,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,wCAAwC;SACjD,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,+CAA+C;SACxD,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,GAAG;QACf,MAAM,EAAE,iDAAiD;KAC1D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * TargetAdapter Interface - Core abstraction for platform-specific prompt formatting.
6
+ *
7
+ * Each platform target (Claude Code, Cursor, VS Code, Gemini CLI, Codex, Antigravity)
8
+ * implements this interface to transform assembled prompts into platform-native format.
9
+ *
10
+ * Story 42.8
11
+ */
12
+ /** How the formatted prompt is injected into the platform */
13
+ export type InjectionMethod = 'file' | 'api' | 'stdin';
14
+ /** Platform-specific instructions to inject alongside the prompt */
15
+ export interface PlatformInstructions {
16
+ readonly tools?: readonly string[];
17
+ readonly mcpConfig?: Readonly<Record<string, unknown>>;
18
+ readonly contextFiles?: readonly string[];
19
+ readonly maxTokens?: number;
20
+ }
21
+ /** Configuration specific to a target platform */
22
+ export interface TargetConfig {
23
+ readonly maxPromptLength?: number;
24
+ readonly preserveMarkdown?: boolean;
25
+ readonly verbose?: boolean;
26
+ readonly customHeaders?: Readonly<Record<string, string>>;
27
+ }
28
+ /** Capabilities reported by a target adapter */
29
+ export interface TargetCapabilities {
30
+ readonly supportsMarkdown: boolean;
31
+ readonly supportsMultiFile: boolean;
32
+ readonly supportsMultiTurn: boolean;
33
+ readonly supportsTools: boolean;
34
+ readonly maxContextLength: number;
35
+ }
36
+ /**
37
+ * Core interface for all platform target adapters.
38
+ *
39
+ * Each adapter transforms an assembled prompt (from the Prompt Assembly Engine)
40
+ * into the native format expected by its target platform.
41
+ */
42
+ export interface TargetAdapter {
43
+ /**
44
+ * Format an assembled prompt for the target platform.
45
+ *
46
+ * @param assembledPrompt - The raw assembled prompt from the server
47
+ * @param platformInstructions - Platform-specific instructions (tools, MCP, etc.)
48
+ * @param config - Target configuration overrides
49
+ * @returns Formatted prompt string ready for platform injection
50
+ */
51
+ formatPrompt(assembledPrompt: string, platformInstructions: PlatformInstructions, config: TargetConfig): string;
52
+ /**
53
+ * Get the unique identifier for this target platform.
54
+ *
55
+ * @returns Target ID (e.g., "claude-code", "cursor")
56
+ */
57
+ getTargetId(): string;
58
+ /**
59
+ * Get the capabilities of this target platform.
60
+ *
61
+ * @returns Capabilities object describing what the platform supports
62
+ */
63
+ getCapabilities(): TargetCapabilities;
64
+ /**
65
+ * Get the method used to inject prompts into the platform.
66
+ *
67
+ * @returns Injection method: "file", "api", or "stdin"
68
+ */
69
+ getInjectionMethod(): InjectionMethod;
70
+ }
71
+ //# sourceMappingURL=target-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/target-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAIvD,oEAAoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC3D;AAID,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAID;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;OAOG;IACH,YAAY,CACV,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC;IAEV;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC;IAEtB;;;;OAIG;IACH,eAAe,IAAI,kBAAkB,CAAC;IAEtC;;;;OAIG;IACH,kBAAkB,IAAI,eAAe,CAAC;CACvC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * TargetAdapter Interface - Core abstraction for platform-specific prompt formatting.
6
+ *
7
+ * Each platform target (Claude Code, Cursor, VS Code, Gemini CLI, Codex, Antigravity)
8
+ * implements this interface to transform assembled prompts into platform-native format.
9
+ *
10
+ * Story 42.8
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=target-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-adapter.js","sourceRoot":"","sources":["../../src/adapters/target-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * VS Code Adapter - Formats prompts for VS Code extension chat participant API.
6
+ *
7
+ * VS Code uses extensions and the chat API for AI interactions.
8
+ * This adapter formats prompts as system messages with structured
9
+ * instruction blocks suitable for the chat participant API.
10
+ *
11
+ * Story 42.8
12
+ */
13
+ import type { InjectionMethod, PlatformInstructions, TargetAdapter, TargetCapabilities, TargetConfig } from './target-adapter.js';
14
+ export declare class VSCodeAdapter implements TargetAdapter {
15
+ formatPrompt(assembledPrompt: string, platformInstructions: PlatformInstructions, config: TargetConfig): string;
16
+ getTargetId(): string;
17
+ getCapabilities(): TargetCapabilities;
18
+ getInjectionMethod(): InjectionMethod;
19
+ }
20
+ //# sourceMappingURL=vscode-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/vscode-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAiB7B,qBAAa,aAAc,YAAW,aAAa;IACjD,YAAY,CACV,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM;IA8CT,WAAW,IAAI,MAAM;IAIrB,eAAe,IAAI,kBAAkB;IAIrC,kBAAkB,IAAI,eAAe;CAGtC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * VS Code Adapter - Formats prompts for VS Code extension chat participant API.
6
+ *
7
+ * VS Code uses extensions and the chat API for AI interactions.
8
+ * This adapter formats prompts as system messages with structured
9
+ * instruction blocks suitable for the chat participant API.
10
+ *
11
+ * Story 42.8
12
+ */
13
+ // ── Constants ───────────────────────────────────────────────────────────────
14
+ const TARGET_ID = 'vscode';
15
+ const MAX_CONTEXT_LENGTH = 128_000;
16
+ const CAPABILITIES = {
17
+ supportsMarkdown: true,
18
+ supportsMultiFile: true,
19
+ supportsMultiTurn: true,
20
+ supportsTools: true,
21
+ maxContextLength: MAX_CONTEXT_LENGTH,
22
+ };
23
+ // ── Implementation ──────────────────────────────────────────────────────────
24
+ export class VSCodeAdapter {
25
+ formatPrompt(assembledPrompt, platformInstructions, config) {
26
+ const sections = [];
27
+ // System instruction block for VS Code chat
28
+ sections.push('<system-instructions>');
29
+ sections.push(assembledPrompt);
30
+ sections.push('</system-instructions>');
31
+ // Tool definitions block
32
+ if (platformInstructions.tools && platformInstructions.tools.length > 0) {
33
+ sections.push('');
34
+ sections.push('<available-tools>');
35
+ for (const tool of platformInstructions.tools) {
36
+ sections.push(`- ${tool}`);
37
+ }
38
+ sections.push('</available-tools>');
39
+ }
40
+ // MCP configuration block
41
+ if (platformInstructions.mcpConfig && Object.keys(platformInstructions.mcpConfig).length > 0) {
42
+ sections.push('');
43
+ sections.push('<mcp-config>');
44
+ sections.push(JSON.stringify(platformInstructions.mcpConfig, null, 2));
45
+ sections.push('</mcp-config>');
46
+ }
47
+ // Context files as instruction references
48
+ if (platformInstructions.contextFiles && platformInstructions.contextFiles.length > 0) {
49
+ sections.push('');
50
+ sections.push('<context-files>');
51
+ for (const file of platformInstructions.contextFiles) {
52
+ sections.push(file);
53
+ }
54
+ sections.push('</context-files>');
55
+ }
56
+ let result = sections.join('\n');
57
+ const maxLength = config.maxPromptLength ?? MAX_CONTEXT_LENGTH;
58
+ if (result.length > maxLength) {
59
+ result = result.slice(0, maxLength);
60
+ }
61
+ return result;
62
+ }
63
+ getTargetId() {
64
+ return TARGET_ID;
65
+ }
66
+ getCapabilities() {
67
+ return CAPABILITIES;
68
+ }
69
+ getInjectionMethod() {
70
+ return 'api';
71
+ }
72
+ }
73
+ //# sourceMappingURL=vscode-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode-adapter.js","sourceRoot":"","sources":["../../src/adapters/vscode-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,+EAA+E;AAE/E,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC3B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,MAAM,YAAY,GAAuB;IACvC,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,kBAAkB;CACrC,CAAC;AAEF,+EAA+E;AAE/E,MAAM,OAAO,aAAa;IACxB,YAAY,CACV,eAAuB,EACvB,oBAA0C,EAC1C,MAAoB;QAEpB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,4CAA4C;QAC5C,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAExC,yBAAyB;QACzB,IAAI,oBAAoB,CAAC,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,KAAK,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtC,CAAC;QAED,0BAA0B;QAC1B,IAAI,oBAAoB,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7F,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjC,CAAC;QAED,0CAA0C;QAC1C,IAAI,oBAAoB,CAAC,YAAY,IAAI,oBAAoB,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,YAAY,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,IAAI,kBAAkB,CAAC;QAC/D,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC9B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,eAAe;QACb,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,kBAAkB;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}