centaurus-cli 2.3.0 → 2.5.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 (157) hide show
  1. package/README.md +151 -1
  2. package/dist/cli-adapter.d.ts +41 -2
  3. package/dist/cli-adapter.d.ts.map +1 -1
  4. package/dist/cli-adapter.js +407 -79
  5. package/dist/cli-adapter.js.map +1 -1
  6. package/dist/config/types.d.ts +23 -0
  7. package/dist/config/types.d.ts.map +1 -1
  8. package/dist/config/types.js +20 -0
  9. package/dist/config/types.js.map +1 -1
  10. package/dist/context/__tests__/command-detector.test.d.ts +14 -0
  11. package/dist/context/__tests__/command-detector.test.d.ts.map +1 -0
  12. package/dist/context/__tests__/command-detector.test.js +318 -0
  13. package/dist/context/__tests__/command-detector.test.js.map +1 -0
  14. package/dist/context/__tests__/context-manager.test.d.ts +16 -0
  15. package/dist/context/__tests__/context-manager.test.d.ts.map +1 -0
  16. package/dist/context/__tests__/context-manager.test.js +375 -0
  17. package/dist/context/__tests__/context-manager.test.js.map +1 -0
  18. package/dist/context/__tests__/error-handling.test.d.ts +15 -0
  19. package/dist/context/__tests__/error-handling.test.d.ts.map +1 -0
  20. package/dist/context/__tests__/error-handling.test.js +447 -0
  21. package/dist/context/__tests__/error-handling.test.js.map +1 -0
  22. package/dist/context/command-detector.d.ts +50 -0
  23. package/dist/context/command-detector.d.ts.map +1 -0
  24. package/dist/context/command-detector.js +72 -0
  25. package/dist/context/command-detector.js.map +1 -0
  26. package/dist/context/context-manager.d.ts +144 -0
  27. package/dist/context/context-manager.d.ts.map +1 -0
  28. package/dist/context/context-manager.js +487 -0
  29. package/dist/context/context-manager.js.map +1 -0
  30. package/dist/context/handlers/__tests__/docker-handler.test.d.ts +13 -0
  31. package/dist/context/handlers/__tests__/docker-handler.test.d.ts.map +1 -0
  32. package/dist/context/handlers/__tests__/docker-handler.test.js +285 -0
  33. package/dist/context/handlers/__tests__/docker-handler.test.js.map +1 -0
  34. package/dist/context/handlers/__tests__/ssh-handler.test.d.ts +13 -0
  35. package/dist/context/handlers/__tests__/ssh-handler.test.d.ts.map +1 -0
  36. package/dist/context/handlers/__tests__/ssh-handler.test.js +251 -0
  37. package/dist/context/handlers/__tests__/ssh-handler.test.js.map +1 -0
  38. package/dist/context/handlers/__tests__/wsl-handler.test.d.ts +7 -0
  39. package/dist/context/handlers/__tests__/wsl-handler.test.d.ts.map +1 -0
  40. package/dist/context/handlers/__tests__/wsl-handler.test.js +331 -0
  41. package/dist/context/handlers/__tests__/wsl-handler.test.js.map +1 -0
  42. package/dist/context/handlers/docker-handler.d.ts +111 -0
  43. package/dist/context/handlers/docker-handler.d.ts.map +1 -0
  44. package/dist/context/handlers/docker-handler.js +439 -0
  45. package/dist/context/handlers/docker-handler.js.map +1 -0
  46. package/dist/context/handlers/ssh-handler.d.ts +120 -0
  47. package/dist/context/handlers/ssh-handler.d.ts.map +1 -0
  48. package/dist/context/handlers/ssh-handler.js +523 -0
  49. package/dist/context/handlers/ssh-handler.js.map +1 -0
  50. package/dist/context/handlers/wsl-handler.d.ts +128 -0
  51. package/dist/context/handlers/wsl-handler.d.ts.map +1 -0
  52. package/dist/context/handlers/wsl-handler.js +590 -0
  53. package/dist/context/handlers/wsl-handler.js.map +1 -0
  54. package/dist/context/index.d.ts +8 -0
  55. package/dist/context/index.d.ts.map +1 -0
  56. package/dist/context/index.js +7 -0
  57. package/dist/context/index.js.map +1 -0
  58. package/dist/context/subshell-handler.d.ts +130 -0
  59. package/dist/context/subshell-handler.d.ts.map +1 -0
  60. package/dist/context/subshell-handler.js +5 -0
  61. package/dist/context/subshell-handler.js.map +1 -0
  62. package/dist/context/types.d.ts +70 -0
  63. package/dist/context/types.d.ts.map +1 -0
  64. package/dist/context/types.js +34 -0
  65. package/dist/context/types.js.map +1 -0
  66. package/dist/index.js +6 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/services/__tests__/ai-context-injector.test.d.ts +15 -0
  69. package/dist/services/__tests__/ai-context-injector.test.d.ts.map +1 -0
  70. package/dist/services/__tests__/ai-context-injector.test.js +326 -0
  71. package/dist/services/__tests__/ai-context-injector.test.js.map +1 -0
  72. package/dist/services/ai-context-injector.d.ts +41 -0
  73. package/dist/services/ai-context-injector.d.ts.map +1 -0
  74. package/dist/services/ai-context-injector.js +97 -0
  75. package/dist/services/ai-context-injector.js.map +1 -0
  76. package/dist/services/ai-service-client.d.ts +4 -1
  77. package/dist/services/ai-service-client.d.ts.map +1 -1
  78. package/dist/services/ai-service-client.js +6 -2
  79. package/dist/services/ai-service-client.js.map +1 -1
  80. package/dist/services/api-client.js +1 -1
  81. package/dist/services/api-client.js.map +1 -1
  82. package/dist/src/context/types.js +27 -0
  83. package/dist/src/services/ai-context-injector.js +96 -0
  84. package/dist/src/services/ai-service-client.js +270 -0
  85. package/dist/src/services/api-client.js +349 -0
  86. package/dist/src/tools/types.js +1 -0
  87. package/dist/src/types/index.js +1 -0
  88. package/dist/test/context/types.js +27 -0
  89. package/dist/test/services/__tests__/ai-context-injector.test.js +325 -0
  90. package/dist/test/services/ai-context-injector.js +96 -0
  91. package/dist/test/services/ai-service-client.js +270 -0
  92. package/dist/test/services/api-client.js +349 -0
  93. package/dist/test/tools/types.js +1 -0
  94. package/dist/test/types/index.js +1 -0
  95. package/dist/test-ai-context-injector.js +97 -0
  96. package/dist/test-ssh-handler.d.ts +8 -0
  97. package/dist/test-ssh-handler.d.ts.map +1 -0
  98. package/dist/test-ssh-handler.js +198 -0
  99. package/dist/test-ssh-handler.js.map +1 -0
  100. package/dist/tools/command.d.ts.map +1 -1
  101. package/dist/tools/command.js +123 -46
  102. package/dist/tools/command.js.map +1 -1
  103. package/dist/tools/file-ops.d.ts.map +1 -1
  104. package/dist/tools/file-ops.js +115 -48
  105. package/dist/tools/file-ops.js.map +1 -1
  106. package/dist/tools/types.d.ts +1 -0
  107. package/dist/tools/types.d.ts.map +1 -1
  108. package/dist/tools/web-search.js +2 -2
  109. package/dist/tools/web-search.js.map +1 -1
  110. package/dist/types/index.d.ts +41 -0
  111. package/dist/types/index.d.ts.map +1 -1
  112. package/dist/ui/components/App.d.ts +3 -0
  113. package/dist/ui/components/App.d.ts.map +1 -1
  114. package/dist/ui/components/App.js +213 -46
  115. package/dist/ui/components/App.js.map +1 -1
  116. package/dist/ui/components/Breadcrumbs.d.ts +12 -0
  117. package/dist/ui/components/Breadcrumbs.d.ts.map +1 -0
  118. package/dist/ui/components/Breadcrumbs.js +62 -0
  119. package/dist/ui/components/Breadcrumbs.js.map +1 -0
  120. package/dist/ui/components/CodeBlock.js +1 -1
  121. package/dist/ui/components/CodeBlock.js.map +1 -1
  122. package/dist/ui/components/DiffViewer.js +1 -1
  123. package/dist/ui/components/DiffViewer.js.map +1 -1
  124. package/dist/ui/components/FileViewerScreen.d.ts +14 -0
  125. package/dist/ui/components/FileViewerScreen.d.ts.map +1 -0
  126. package/dist/ui/components/FileViewerScreen.js +74 -0
  127. package/dist/ui/components/FileViewerScreen.js.map +1 -0
  128. package/dist/ui/components/InputBox.d.ts +2 -0
  129. package/dist/ui/components/InputBox.d.ts.map +1 -1
  130. package/dist/ui/components/InputBox.js +85 -41
  131. package/dist/ui/components/InputBox.js.map +1 -1
  132. package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
  133. package/dist/ui/components/MessageDisplay.js +3 -28
  134. package/dist/ui/components/MessageDisplay.js.map +1 -1
  135. package/dist/ui/components/PasswordPrompt.d.ts +9 -0
  136. package/dist/ui/components/PasswordPrompt.d.ts.map +1 -0
  137. package/dist/ui/components/PasswordPrompt.js +20 -0
  138. package/dist/ui/components/PasswordPrompt.js.map +1 -0
  139. package/dist/ui/components/StatusBar.d.ts +2 -0
  140. package/dist/ui/components/StatusBar.d.ts.map +1 -1
  141. package/dist/ui/components/StatusBar.js +36 -1
  142. package/dist/ui/components/StatusBar.js.map +1 -1
  143. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  144. package/dist/ui/components/ToolExecutionMessage.js +13 -24
  145. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  146. package/dist/ui/components/VersionUpdatePrompt.d.ts +10 -0
  147. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +1 -0
  148. package/dist/ui/components/VersionUpdatePrompt.js +41 -0
  149. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -0
  150. package/dist/utils/shell.d.ts.map +1 -1
  151. package/dist/utils/shell.js +38 -10
  152. package/dist/utils/shell.js.map +1 -1
  153. package/dist/utils/version-checker.d.ts +14 -0
  154. package/dist/utils/version-checker.d.ts.map +1 -0
  155. package/dist/utils/version-checker.js +63 -0
  156. package/dist/utils/version-checker.js.map +1 -0
  157. package/package.json +71 -69
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Interface and types for subshell handlers
3
+ */
4
+ import { SubshellContext } from './types';
5
+ /**
6
+ * Information for displaying breadcrumbs in the UI
7
+ */
8
+ export interface BreadcrumbInfo {
9
+ /** Label for the breadcrumb (e.g., "ssh", "wsl", "docker") */
10
+ label: string;
11
+ /** Optional value to display (e.g., "user@host") */
12
+ value?: string;
13
+ /** Optional color for the breadcrumb */
14
+ color?: string;
15
+ }
16
+ /**
17
+ * Result of a command execution
18
+ */
19
+ export interface CommandResult {
20
+ /** Standard output from the command */
21
+ stdout: string;
22
+ /** Standard error from the command */
23
+ stderr: string;
24
+ /** Exit code of the command */
25
+ exitCode: number;
26
+ }
27
+ /**
28
+ * Directory entry information
29
+ */
30
+ export interface DirectoryEntry {
31
+ /** Name of the file or directory */
32
+ name: string;
33
+ /** Type of the entry */
34
+ type: 'file' | 'directory';
35
+ /** Size in bytes (optional) */
36
+ size?: number;
37
+ /** Permissions string (optional) */
38
+ permissions?: string;
39
+ }
40
+ /**
41
+ * Search result from file search operations
42
+ */
43
+ export interface SearchResult {
44
+ /** File path where the match was found */
45
+ file: string;
46
+ /** Line number of the match */
47
+ line: number;
48
+ /** Content of the matching line */
49
+ content: string;
50
+ }
51
+ /**
52
+ * Interface that all subshell handlers must implement
53
+ */
54
+ export interface SubshellHandler {
55
+ /** Type identifier for this handler */
56
+ readonly type: string;
57
+ /** Regular expressions for detecting this subshell type */
58
+ readonly detectionPatterns: RegExp[];
59
+ /**
60
+ * Detect if a command should trigger this handler
61
+ * @param command The command to check
62
+ * @returns True if this handler should handle the command
63
+ */
64
+ detect(command: string): boolean;
65
+ /**
66
+ * Connect to the subshell environment
67
+ * @param command The command that initiated the subshell
68
+ * @param cwd Current working directory
69
+ * @returns Promise resolving to the new subshell context
70
+ */
71
+ connect(command: string, cwd: string): Promise<SubshellContext>;
72
+ /**
73
+ * Disconnect from the subshell environment
74
+ * @returns Promise that resolves when disconnected
75
+ */
76
+ disconnect(): Promise<void>;
77
+ /**
78
+ * Execute a command in the subshell
79
+ * @param command The command to execute
80
+ * @returns Promise resolving to the command result
81
+ */
82
+ executeCommand(command: string): Promise<CommandResult>;
83
+ /**
84
+ * Read a file from the subshell filesystem
85
+ * @param path Path to the file
86
+ * @returns Promise resolving to the file content
87
+ */
88
+ readFile(path: string): Promise<string>;
89
+ /**
90
+ * Write a file to the subshell filesystem
91
+ * @param path Path to the file
92
+ * @param content Content to write
93
+ * @returns Promise that resolves when write is complete
94
+ */
95
+ writeFile(path: string, content: string): Promise<void>;
96
+ /**
97
+ * List directory contents in the subshell
98
+ * @param path Path to the directory
99
+ * @returns Promise resolving to directory entries
100
+ */
101
+ listDirectory(path: string): Promise<DirectoryEntry[]>;
102
+ /**
103
+ * Search for files matching a pattern
104
+ * @param pattern Search pattern (regex)
105
+ * @param directory Directory to search in
106
+ * @returns Promise resolving to search results
107
+ */
108
+ searchFiles(pattern: string, directory: string): Promise<SearchResult[]>;
109
+ /**
110
+ * Get the current working directory in the subshell
111
+ * @returns Promise resolving to the current working directory
112
+ */
113
+ getCurrentWorkingDirectory(): Promise<string>;
114
+ /**
115
+ * Get the shell type (bash, zsh, fish, etc.)
116
+ * @returns Promise resolving to the shell type
117
+ */
118
+ getShellType(): Promise<string>;
119
+ /**
120
+ * Get the operating system type
121
+ * @returns Promise resolving to the OS type
122
+ */
123
+ getOSType(): Promise<'windows' | 'macos' | 'linux'>;
124
+ /**
125
+ * Get breadcrumb information for the UI
126
+ * @returns Array of breadcrumb information
127
+ */
128
+ getBreadcrumbs(): BreadcrumbInfo[];
129
+ }
130
+ //# sourceMappingURL=subshell-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subshell-handler.d.ts","sourceRoot":"","sources":["../../src/context/subshell-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IAEd,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IAEf,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IAEf,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb,wBAAwB;IACxB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAE3B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IAEb,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IAEb,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,2DAA2D;IAC3D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAIrC;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAEjC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhE;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAI5B;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAExD;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAEvD;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAIzE;;;OAGG;IACH,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9C;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAIpD;;;OAGG;IACH,cAAc,IAAI,cAAc,EAAE,CAAC;CACpC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Interface and types for subshell handlers
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=subshell-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subshell-handler.js","sourceRoot":"","sources":["../../src/context/subshell-handler.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Core types for the subshell context management system
3
+ */
4
+ /**
5
+ * Connection state for a subshell
6
+ */
7
+ export type ConnectionState = 'connecting' | 'connected' | 'disconnected' | 'error';
8
+ /**
9
+ * Operating system types
10
+ */
11
+ export type OSType = 'windows' | 'macos' | 'linux';
12
+ /**
13
+ * Subshell type identifiers
14
+ */
15
+ export type SubshellType = 'local' | 'ssh' | 'wsl' | 'docker';
16
+ /**
17
+ * Metadata about a subshell environment
18
+ */
19
+ export interface SubshellMetadata {
20
+ /** Remote hostname (for SSH) */
21
+ hostname?: string;
22
+ /** Remote username (for SSH) */
23
+ username?: string;
24
+ /** Current working directory in the subshell */
25
+ workingDirectory: string;
26
+ /** Shell type (bash, zsh, fish, etc.) */
27
+ shell: string;
28
+ /** Operating system type */
29
+ os: OSType;
30
+ /** WSL distribution name (for WSL) */
31
+ distroName?: string;
32
+ /** Docker container ID (for Docker) */
33
+ containerId?: string;
34
+ /** Port number (for SSH) */
35
+ port?: number;
36
+ }
37
+ /**
38
+ * Context representing the current execution environment
39
+ */
40
+ export interface SubshellContext {
41
+ /** Type of the current context */
42
+ type: SubshellType;
43
+ /** Handler for this subshell (undefined for local) */
44
+ handler?: any;
45
+ /** Metadata about the environment */
46
+ metadata: SubshellMetadata;
47
+ /** Current connection state */
48
+ connectionState: ConnectionState;
49
+ /** Unique session identifier */
50
+ sessionId: string;
51
+ }
52
+ /**
53
+ * Error thrown when a subshell connection fails
54
+ */
55
+ export declare class SubshellConnectionError extends Error {
56
+ type: string;
57
+ reason: string;
58
+ recoverable: boolean;
59
+ constructor(type: string, reason: string, recoverable: boolean);
60
+ }
61
+ /**
62
+ * Error thrown when a subshell command execution fails
63
+ */
64
+ export declare class SubshellExecutionError extends Error {
65
+ command: string;
66
+ reason: string;
67
+ exitCode?: number;
68
+ constructor(command: string, reason: string, exitCode?: number);
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAC;IAEzB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IAEd,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IAEX,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,IAAI,EAAE,YAAY,CAAC;IAEnB,sDAAsD;IACtD,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd,qCAAqC;IACrC,QAAQ,EAAE,gBAAgB,CAAC;IAE3B,+BAA+B;IAC/B,eAAe,EAAE,eAAe,CAAC;IAEjC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAEvC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,WAAW,EAAE,OAAO;gBAFpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO;CAK9B;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAEtC,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,QAAQ,CAAC,EAAE,MAAM;gBAFjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM;CAK3B"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Core types for the subshell context management system
3
+ */
4
+ /**
5
+ * Error thrown when a subshell connection fails
6
+ */
7
+ export class SubshellConnectionError extends Error {
8
+ type;
9
+ reason;
10
+ recoverable;
11
+ constructor(type, reason, recoverable) {
12
+ super(`${type} connection failed: ${reason}`);
13
+ this.type = type;
14
+ this.reason = reason;
15
+ this.recoverable = recoverable;
16
+ this.name = 'SubshellConnectionError';
17
+ }
18
+ }
19
+ /**
20
+ * Error thrown when a subshell command execution fails
21
+ */
22
+ export class SubshellExecutionError extends Error {
23
+ command;
24
+ reason;
25
+ exitCode;
26
+ constructor(command, reason, exitCode) {
27
+ super(`Command execution failed: ${reason}`);
28
+ this.command = command;
29
+ this.reason = reason;
30
+ this.exitCode = exitCode;
31
+ this.name = 'SubshellExecutionError';
32
+ }
33
+ }
34
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkEH;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAEvC;IACA;IACA;IAHT,YACS,IAAY,EACZ,MAAc,EACd,WAAoB;QAE3B,KAAK,CAAC,GAAG,IAAI,uBAAuB,MAAM,EAAE,CAAC,CAAC;QAJvC,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAS;QAG3B,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEtC;IACA;IACA;IAHT,YACS,OAAe,EACf,MAAc,EACd,QAAiB;QAExB,KAAK,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QAJtC,YAAO,GAAP,OAAO,CAAQ;QACf,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAS;QAGxB,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
package/dist/index.js CHANGED
@@ -141,6 +141,12 @@ async function main() {
141
141
  },
142
142
  onCwdChange: (callback) => {
143
143
  cli.setOnCwdChange(callback);
144
+ },
145
+ onSubshellContextChange: (callback) => {
146
+ cli.setOnSubshellContextChange(callback);
147
+ },
148
+ onPasswordRequest: (callback) => {
149
+ cli.setOnPasswordRequest(callback);
144
150
  }
145
151
  })), {
146
152
  patchConsole: false,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Unit tests for AI Context Injector
3
+ *
4
+ * These tests verify:
5
+ * - Context message format
6
+ * - Context injection into message history
7
+ * - Local context (no injection)
8
+ * - Different subshell types (SSH, WSL, Docker)
9
+ */
10
+ /**
11
+ * Run all tests
12
+ */
13
+ declare function runTests(): Promise<void>;
14
+ export { runTests };
15
+ //# sourceMappingURL=ai-context-injector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-context-injector.test.d.ts","sourceRoot":"","sources":["../../../src/services/__tests__/ai-context-injector.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqWH;;GAEG;AACH,iBAAe,QAAQ,kBAiBtB;AAOD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Unit tests for AI Context Injector
3
+ *
4
+ * These tests verify:
5
+ * - Context message format
6
+ * - Context injection into message history
7
+ * - Local context (no injection)
8
+ * - Different subshell types (SSH, WSL, Docker)
9
+ */
10
+ import { AIContextInjector } from '../ai-context-injector.js';
11
+ /**
12
+ * Test: No injection for local context
13
+ */
14
+ async function testLocalContextNoInjection() {
15
+ console.log('Test: No injection for local context');
16
+ const injector = new AIContextInjector();
17
+ const messages = [
18
+ { role: 'user', content: 'Hello' },
19
+ { role: 'assistant', content: 'Hi there!' },
20
+ { role: 'user', content: 'List files' },
21
+ ];
22
+ const localContext = {
23
+ type: 'local',
24
+ metadata: {
25
+ workingDirectory: '/home/user',
26
+ shell: 'bash',
27
+ os: 'linux',
28
+ },
29
+ connectionState: 'connected',
30
+ sessionId: 'local-session',
31
+ };
32
+ const result = injector.injectSubshellContext(messages, localContext);
33
+ // Should return the same messages without modification
34
+ if (result.length !== messages.length) {
35
+ throw new Error('Expected no additional messages for local context');
36
+ }
37
+ if (result !== messages) {
38
+ throw new Error('Expected same array reference for local context');
39
+ }
40
+ console.log('✓ Local context does not inject additional messages');
41
+ }
42
+ /**
43
+ * Test: SSH context injection
44
+ */
45
+ async function testSSHContextInjection() {
46
+ console.log('\nTest: SSH context injection');
47
+ const injector = new AIContextInjector();
48
+ const messages = [
49
+ { role: 'user', content: 'Hello' },
50
+ { role: 'assistant', content: 'Hi there!' },
51
+ { role: 'user', content: 'List files' },
52
+ ];
53
+ const sshContext = {
54
+ type: 'ssh',
55
+ metadata: {
56
+ hostname: 'example.com',
57
+ username: 'testuser',
58
+ workingDirectory: '/home/testuser',
59
+ shell: 'bash',
60
+ os: 'linux',
61
+ port: 22,
62
+ },
63
+ connectionState: 'connected',
64
+ sessionId: 'ssh-session',
65
+ };
66
+ const result = injector.injectSubshellContext(messages, sshContext);
67
+ // Should have one additional message (context message)
68
+ if (result.length !== messages.length + 1) {
69
+ throw new Error(`Expected ${messages.length + 1} messages, got ${result.length}`);
70
+ }
71
+ // Context message should be inserted before the last user message
72
+ const contextMessage = result[result.length - 2];
73
+ if (contextMessage.role !== 'system') {
74
+ throw new Error('Expected context message to have role "system"');
75
+ }
76
+ // Verify context message content
77
+ const content = contextMessage.content;
78
+ if (!content.includes('SSH')) {
79
+ throw new Error('Expected context message to mention SSH');
80
+ }
81
+ if (!content.includes('example.com')) {
82
+ throw new Error('Expected context message to include hostname');
83
+ }
84
+ if (!content.includes('testuser')) {
85
+ throw new Error('Expected context message to include username');
86
+ }
87
+ if (!content.includes('/home/testuser')) {
88
+ throw new Error('Expected context message to include working directory');
89
+ }
90
+ if (!content.includes('bash')) {
91
+ throw new Error('Expected context message to include shell type');
92
+ }
93
+ if (!content.includes('linux')) {
94
+ throw new Error('Expected context message to include OS type');
95
+ }
96
+ if (!content.includes('22')) {
97
+ throw new Error('Expected context message to include port');
98
+ }
99
+ // Last message should still be the user message
100
+ const lastMessage = result[result.length - 1];
101
+ if (lastMessage.role !== 'user' || lastMessage.content !== 'List files') {
102
+ throw new Error('Expected last message to be the original user message');
103
+ }
104
+ console.log('✓ SSH context injects correct message with all details');
105
+ }
106
+ /**
107
+ * Test: WSL context injection
108
+ */
109
+ async function testWSLContextInjection() {
110
+ console.log('\nTest: WSL context injection');
111
+ const injector = new AIContextInjector();
112
+ const messages = [
113
+ { role: 'user', content: 'Run command' },
114
+ ];
115
+ const wslContext = {
116
+ type: 'wsl',
117
+ metadata: {
118
+ distroName: 'Ubuntu-20.04',
119
+ workingDirectory: '/home/user',
120
+ shell: 'bash',
121
+ os: 'linux',
122
+ },
123
+ connectionState: 'connected',
124
+ sessionId: 'wsl-session',
125
+ };
126
+ const result = injector.injectSubshellContext(messages, wslContext);
127
+ // Should have one additional message
128
+ if (result.length !== 2) {
129
+ throw new Error('Expected 2 messages after injection');
130
+ }
131
+ const contextMessage = result[0];
132
+ if (contextMessage.role !== 'system') {
133
+ throw new Error('Expected context message to have role "system"');
134
+ }
135
+ const content = contextMessage.content;
136
+ if (!content.includes('WSL')) {
137
+ throw new Error('Expected context message to mention WSL');
138
+ }
139
+ if (!content.includes('Ubuntu-20.04')) {
140
+ throw new Error('Expected context message to include distribution name');
141
+ }
142
+ console.log('✓ WSL context injects correct message with distribution info');
143
+ }
144
+ /**
145
+ * Test: Docker context injection
146
+ */
147
+ async function testDockerContextInjection() {
148
+ console.log('\nTest: Docker context injection');
149
+ const injector = new AIContextInjector();
150
+ const messages = [
151
+ { role: 'user', content: 'Check container' },
152
+ ];
153
+ const dockerContext = {
154
+ type: 'docker',
155
+ metadata: {
156
+ containerId: 'abc123def456',
157
+ workingDirectory: '/app',
158
+ shell: 'sh',
159
+ os: 'linux',
160
+ },
161
+ connectionState: 'connected',
162
+ sessionId: 'docker-session',
163
+ };
164
+ const result = injector.injectSubshellContext(messages, dockerContext);
165
+ // Should have one additional message
166
+ if (result.length !== 2) {
167
+ throw new Error('Expected 2 messages after injection');
168
+ }
169
+ const contextMessage = result[0];
170
+ const content = contextMessage.content;
171
+ if (!content.includes('DOCKER')) {
172
+ throw new Error('Expected context message to mention DOCKER');
173
+ }
174
+ if (!content.includes('abc123def456')) {
175
+ throw new Error('Expected context message to include container ID');
176
+ }
177
+ if (!content.includes('/app')) {
178
+ throw new Error('Expected context message to include working directory');
179
+ }
180
+ console.log('✓ Docker context injects correct message with container info');
181
+ }
182
+ /**
183
+ * Test: Context message inserted before last user message
184
+ */
185
+ async function testContextMessagePosition() {
186
+ console.log('\nTest: Context message inserted before last user message');
187
+ const injector = new AIContextInjector();
188
+ const messages = [
189
+ { role: 'user', content: 'First message' },
190
+ { role: 'assistant', content: 'First response' },
191
+ { role: 'user', content: 'Second message' },
192
+ { role: 'assistant', content: 'Second response' },
193
+ { role: 'tool', content: 'Tool result' },
194
+ { role: 'user', content: 'Third message' },
195
+ ];
196
+ const sshContext = {
197
+ type: 'ssh',
198
+ metadata: {
199
+ hostname: 'server.com',
200
+ username: 'admin',
201
+ workingDirectory: '/root',
202
+ shell: 'zsh',
203
+ os: 'linux',
204
+ },
205
+ connectionState: 'connected',
206
+ sessionId: 'test-session',
207
+ };
208
+ const result = injector.injectSubshellContext(messages, sshContext);
209
+ // Should have 7 messages (6 original + 1 context)
210
+ if (result.length !== 7) {
211
+ throw new Error(`Expected 7 messages, got ${result.length}`);
212
+ }
213
+ // Context message should be at index 5 (before last user message at index 6)
214
+ const contextMessage = result[5];
215
+ if (contextMessage.role !== 'system') {
216
+ throw new Error('Expected context message at index 5');
217
+ }
218
+ // Last message should still be the user message
219
+ const lastMessage = result[6];
220
+ if (lastMessage.role !== 'user' || lastMessage.content !== 'Third message') {
221
+ throw new Error('Expected last message to be the original user message');
222
+ }
223
+ // Previous messages should be unchanged
224
+ if (result[0].content !== 'First message') {
225
+ throw new Error('Expected first message to be unchanged');
226
+ }
227
+ if (result[4].role !== 'tool') {
228
+ throw new Error('Expected tool message to remain at correct position');
229
+ }
230
+ console.log('✓ Context message inserted at correct position');
231
+ }
232
+ /**
233
+ * Test: Context message when no user messages exist
234
+ */
235
+ async function testContextMessageNoUserMessages() {
236
+ console.log('\nTest: Context message when no user messages exist');
237
+ const injector = new AIContextInjector();
238
+ const messages = [
239
+ { role: 'system', content: 'System message' },
240
+ { role: 'assistant', content: 'Assistant message' },
241
+ ];
242
+ const sshContext = {
243
+ type: 'ssh',
244
+ metadata: {
245
+ hostname: 'test.com',
246
+ username: 'user',
247
+ workingDirectory: '/home/user',
248
+ shell: 'bash',
249
+ os: 'linux',
250
+ },
251
+ connectionState: 'connected',
252
+ sessionId: 'test-session',
253
+ };
254
+ const result = injector.injectSubshellContext(messages, sshContext);
255
+ // Should append context message to the end
256
+ if (result.length !== 3) {
257
+ throw new Error('Expected 3 messages');
258
+ }
259
+ const lastMessage = result[2];
260
+ if (lastMessage.role !== 'system') {
261
+ throw new Error('Expected context message to be appended');
262
+ }
263
+ console.log('✓ Context message appended when no user messages exist');
264
+ }
265
+ /**
266
+ * Test: Important warning in context message
267
+ */
268
+ async function testContextMessageWarning() {
269
+ console.log('\nTest: Important warning in context message');
270
+ const injector = new AIContextInjector();
271
+ const messages = [
272
+ { role: 'user', content: 'Test' },
273
+ ];
274
+ const sshContext = {
275
+ type: 'ssh',
276
+ metadata: {
277
+ hostname: 'remote.com',
278
+ username: 'user',
279
+ workingDirectory: '/tmp',
280
+ shell: 'bash',
281
+ os: 'linux',
282
+ },
283
+ connectionState: 'connected',
284
+ sessionId: 'test-session',
285
+ };
286
+ const result = injector.injectSubshellContext(messages, sshContext);
287
+ const contextMessage = result[0];
288
+ const content = contextMessage.content;
289
+ // Should contain important warning about execution environment
290
+ if (!content.includes('IMPORTANT')) {
291
+ throw new Error('Expected context message to contain IMPORTANT warning');
292
+ }
293
+ if (!content.includes('not on the local machine')) {
294
+ throw new Error('Expected warning about remote execution');
295
+ }
296
+ if (!content.includes('ssh environment')) {
297
+ throw new Error('Expected mention of ssh environment in warning');
298
+ }
299
+ console.log('✓ Context message includes important warning');
300
+ }
301
+ /**
302
+ * Run all tests
303
+ */
304
+ async function runTests() {
305
+ console.log('=== AI Context Injector Tests ===\n');
306
+ try {
307
+ await testLocalContextNoInjection();
308
+ await testSSHContextInjection();
309
+ await testWSLContextInjection();
310
+ await testDockerContextInjection();
311
+ await testContextMessagePosition();
312
+ await testContextMessageNoUserMessages();
313
+ await testContextMessageWarning();
314
+ console.log('\n=== All tests passed! ===');
315
+ }
316
+ catch (error) {
317
+ console.error('\n❌ Test failed:', error);
318
+ process.exit(1);
319
+ }
320
+ }
321
+ // Run tests if this file is executed directly
322
+ if (import.meta.url === `file://${process.argv[1]}`) {
323
+ runTests();
324
+ }
325
+ export { runTests };
326
+ //# sourceMappingURL=ai-context-injector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-context-injector.test.js","sourceRoot":"","sources":["../../../src/services/__tests__/ai-context-injector.test.ts"],"names":[],"mappings":"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"}