@elasto/nyx-cli 0.1.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 (167) hide show
  1. package/README.md +136 -0
  2. package/bin/nyx.js +3 -0
  3. package/dist/agent/index.d.ts +29 -0
  4. package/dist/agent/index.d.ts.map +1 -0
  5. package/dist/agent/index.js +362 -0
  6. package/dist/agent/index.js.map +1 -0
  7. package/dist/agent/prompt.d.ts +16 -0
  8. package/dist/agent/prompt.d.ts.map +1 -0
  9. package/dist/agent/prompt.js +487 -0
  10. package/dist/agent/prompt.js.map +1 -0
  11. package/dist/agent/templates/index.d.ts +2 -0
  12. package/dist/agent/templates/index.d.ts.map +1 -0
  13. package/dist/agent/templates/index.js +44 -0
  14. package/dist/agent/templates/index.js.map +1 -0
  15. package/dist/auth/index.d.ts +23 -0
  16. package/dist/auth/index.d.ts.map +1 -0
  17. package/dist/auth/index.js +161 -0
  18. package/dist/auth/index.js.map +1 -0
  19. package/dist/commands/login.d.ts +3 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +32 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/logout.d.ts +3 -0
  24. package/dist/commands/logout.d.ts.map +1 -0
  25. package/dist/commands/logout.js +13 -0
  26. package/dist/commands/logout.js.map +1 -0
  27. package/dist/commands/logs.d.ts +3 -0
  28. package/dist/commands/logs.d.ts.map +1 -0
  29. package/dist/commands/logs.js +29 -0
  30. package/dist/commands/logs.js.map +1 -0
  31. package/dist/commands/root.d.ts +3 -0
  32. package/dist/commands/root.d.ts.map +1 -0
  33. package/dist/commands/root.js +27 -0
  34. package/dist/commands/root.js.map +1 -0
  35. package/dist/commands/run.d.ts +3 -0
  36. package/dist/commands/run.d.ts.map +1 -0
  37. package/dist/commands/run.js +74 -0
  38. package/dist/commands/run.js.map +1 -0
  39. package/dist/commands/session.d.ts +3 -0
  40. package/dist/commands/session.d.ts.map +1 -0
  41. package/dist/commands/session.js +61 -0
  42. package/dist/commands/session.js.map +1 -0
  43. package/dist/config/index.d.ts +22 -0
  44. package/dist/config/index.d.ts.map +1 -0
  45. package/dist/config/index.js +110 -0
  46. package/dist/config/index.js.map +1 -0
  47. package/dist/db/index.d.ts +5 -0
  48. package/dist/db/index.d.ts.map +1 -0
  49. package/dist/db/index.js +72 -0
  50. package/dist/db/index.js.map +1 -0
  51. package/dist/events/index.d.ts +3 -0
  52. package/dist/events/index.d.ts.map +1 -0
  53. package/dist/events/index.js +45 -0
  54. package/dist/events/index.js.map +1 -0
  55. package/dist/filetracker/index.d.ts +8 -0
  56. package/dist/filetracker/index.d.ts.map +1 -0
  57. package/dist/filetracker/index.js +21 -0
  58. package/dist/filetracker/index.js.map +1 -0
  59. package/dist/hooks/index.d.ts +13 -0
  60. package/dist/hooks/index.d.ts.map +1 -0
  61. package/dist/hooks/index.js +42 -0
  62. package/dist/hooks/index.js.map +1 -0
  63. package/dist/index.d.ts +2 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +140 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/logging/index.d.ts +16 -0
  68. package/dist/logging/index.d.ts.map +1 -0
  69. package/dist/logging/index.js +76 -0
  70. package/dist/logging/index.js.map +1 -0
  71. package/dist/lsp/index.d.ts +10 -0
  72. package/dist/lsp/index.d.ts.map +1 -0
  73. package/dist/lsp/index.js +130 -0
  74. package/dist/lsp/index.js.map +1 -0
  75. package/dist/mcp/index.d.ts +11 -0
  76. package/dist/mcp/index.d.ts.map +1 -0
  77. package/dist/mcp/index.js +102 -0
  78. package/dist/mcp/index.js.map +1 -0
  79. package/dist/permissions/index.d.ts +13 -0
  80. package/dist/permissions/index.d.ts.map +1 -0
  81. package/dist/permissions/index.js +96 -0
  82. package/dist/permissions/index.js.map +1 -0
  83. package/dist/session/index.d.ts +25 -0
  84. package/dist/session/index.d.ts.map +1 -0
  85. package/dist/session/index.js +100 -0
  86. package/dist/session/index.js.map +1 -0
  87. package/dist/shell/index.d.ts +8 -0
  88. package/dist/shell/index.d.ts.map +1 -0
  89. package/dist/shell/index.js +29 -0
  90. package/dist/shell/index.js.map +1 -0
  91. package/dist/skills/index.d.ts +9 -0
  92. package/dist/skills/index.d.ts.map +1 -0
  93. package/dist/skills/index.js +53 -0
  94. package/dist/skills/index.js.map +1 -0
  95. package/dist/tools/bash.d.ts +35 -0
  96. package/dist/tools/bash.d.ts.map +1 -0
  97. package/dist/tools/bash.js +44 -0
  98. package/dist/tools/bash.js.map +1 -0
  99. package/dist/tools/diagnostics.d.ts +19 -0
  100. package/dist/tools/diagnostics.d.ts.map +1 -0
  101. package/dist/tools/diagnostics.js +45 -0
  102. package/dist/tools/diagnostics.js.map +1 -0
  103. package/dist/tools/edit.d.ts +31 -0
  104. package/dist/tools/edit.d.ts.map +1 -0
  105. package/dist/tools/edit.js +72 -0
  106. package/dist/tools/edit.js.map +1 -0
  107. package/dist/tools/glob.d.ts +23 -0
  108. package/dist/tools/glob.d.ts.map +1 -0
  109. package/dist/tools/glob.js +40 -0
  110. package/dist/tools/glob.js.map +1 -0
  111. package/dist/tools/grep.d.ts +31 -0
  112. package/dist/tools/grep.d.ts.map +1 -0
  113. package/dist/tools/grep.js +72 -0
  114. package/dist/tools/grep.js.map +1 -0
  115. package/dist/tools/index.d.ts +9 -0
  116. package/dist/tools/index.d.ts.map +1 -0
  117. package/dist/tools/index.js +78 -0
  118. package/dist/tools/index.js.map +1 -0
  119. package/dist/tools/job_output.d.ts +49 -0
  120. package/dist/tools/job_output.d.ts.map +1 -0
  121. package/dist/tools/job_output.js +57 -0
  122. package/dist/tools/job_output.js.map +1 -0
  123. package/dist/tools/ls.d.ts +19 -0
  124. package/dist/tools/ls.d.ts.map +1 -0
  125. package/dist/tools/ls.js +55 -0
  126. package/dist/tools/ls.js.map +1 -0
  127. package/dist/tools/todos.d.ts +41 -0
  128. package/dist/tools/todos.d.ts.map +1 -0
  129. package/dist/tools/todos.js +54 -0
  130. package/dist/tools/todos.js.map +1 -0
  131. package/dist/tools/view.d.ts +27 -0
  132. package/dist/tools/view.d.ts.map +1 -0
  133. package/dist/tools/view.js +59 -0
  134. package/dist/tools/view.js.map +1 -0
  135. package/dist/tools/web_fetch.d.ts +24 -0
  136. package/dist/tools/web_fetch.d.ts.map +1 -0
  137. package/dist/tools/web_fetch.js +43 -0
  138. package/dist/tools/web_fetch.js.map +1 -0
  139. package/dist/tools/web_search.d.ts +23 -0
  140. package/dist/tools/web_search.d.ts.map +1 -0
  141. package/dist/tools/web_search.js +41 -0
  142. package/dist/tools/web_search.js.map +1 -0
  143. package/dist/tools/write.d.ts +23 -0
  144. package/dist/tools/write.d.ts.map +1 -0
  145. package/dist/tools/write.js +39 -0
  146. package/dist/tools/write.js.map +1 -0
  147. package/dist/types/index.d.ts +136 -0
  148. package/dist/types/index.d.ts.map +1 -0
  149. package/dist/types/index.js +3 -0
  150. package/dist/types/index.js.map +1 -0
  151. package/dist/ui/index.d.ts +3 -0
  152. package/dist/ui/index.d.ts.map +1 -0
  153. package/dist/ui/index.js +318 -0
  154. package/dist/ui/index.js.map +1 -0
  155. package/dist/util/diff.d.ts +17 -0
  156. package/dist/util/diff.d.ts.map +1 -0
  157. package/dist/util/diff.js +74 -0
  158. package/dist/util/diff.js.map +1 -0
  159. package/dist/util/index.d.ts +6 -0
  160. package/dist/util/index.d.ts.map +1 -0
  161. package/dist/util/index.js +33 -0
  162. package/dist/util/index.js.map +1 -0
  163. package/dist/workspace/index.d.ts +6 -0
  164. package/dist/workspace/index.d.ts.map +1 -0
  165. package/dist/workspace/index.js +133 -0
  166. package/dist/workspace/index.js.map +1 -0
  167. package/package.json +47 -0
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LSPManager = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const readline_1 = require("readline");
6
+ const index_js_1 = require("../logging/index.js");
7
+ class LSPManager {
8
+ clients = new Map();
9
+ async start(language, config) {
10
+ if (this.clients.has(language))
11
+ return;
12
+ if (config.enabled === false)
13
+ return;
14
+ index_js_1.logger.info(`Starting LSP: ${language} -> ${config.command}`);
15
+ const proc = (0, child_process_1.spawn)(config.command, config.args || [], {
16
+ env: { ...process.env, ...config.env },
17
+ stdio: ['pipe', 'pipe', 'pipe'],
18
+ windowsHide: true,
19
+ });
20
+ proc.on('error', (err) => index_js_1.logger.warn(`LSP ${language} error:`, err.message));
21
+ proc.on('exit', (code) => {
22
+ index_js_1.logger.info(`LSP ${language} exited: ${code}`);
23
+ this.clients.delete(language);
24
+ });
25
+ const client = { config, process: proc, capabilities: {} };
26
+ this.clients.set(language, client);
27
+ // Initialize LSP
28
+ await this.sendRequest(language, {
29
+ jsonrpc: '2.0',
30
+ id: 1,
31
+ method: 'initialize',
32
+ params: {
33
+ processId: process.pid,
34
+ rootUri: null,
35
+ capabilities: {},
36
+ },
37
+ });
38
+ await this.sendNotification(language, {
39
+ jsonrpc: '2.0',
40
+ method: 'initialized',
41
+ params: {},
42
+ });
43
+ }
44
+ async getDiagnostics(language, filePath, content) {
45
+ const client = this.clients.get(language);
46
+ if (!client)
47
+ return [];
48
+ await this.sendNotification(language, {
49
+ jsonrpc: '2.0',
50
+ method: 'textDocument/didOpen',
51
+ params: {
52
+ textDocument: {
53
+ uri: `file://${filePath}`,
54
+ languageId: language,
55
+ version: 1,
56
+ text: content,
57
+ },
58
+ },
59
+ });
60
+ // Read diagnostics from the response
61
+ const rl = (0, readline_1.createInterface)({ input: client.process.stdout, crlfDelay: Infinity });
62
+ const diagnostics = [];
63
+ return new Promise((resolve) => {
64
+ const timeout = setTimeout(() => resolve(diagnostics), 2000);
65
+ rl.on('line', (line) => {
66
+ try {
67
+ const msg = JSON.parse(line);
68
+ if (msg.method === 'textDocument/publishDiagnostics') {
69
+ diagnostics.push(...msg.params.diagnostics);
70
+ }
71
+ }
72
+ catch { }
73
+ });
74
+ // Request diagnostics
75
+ this.sendRequest(language, {
76
+ jsonrpc: '2.0',
77
+ id: 2,
78
+ method: 'textDocument/codeAction',
79
+ params: {
80
+ textDocument: { uri: `file://${filePath}` },
81
+ range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },
82
+ context: { diagnostics: [] },
83
+ },
84
+ }).then(() => {
85
+ setTimeout(() => {
86
+ clearTimeout(timeout);
87
+ rl.close();
88
+ resolve(diagnostics);
89
+ }, 1000);
90
+ });
91
+ setTimeout(() => {
92
+ clearTimeout(timeout);
93
+ rl.close();
94
+ resolve(diagnostics);
95
+ }, 3000);
96
+ });
97
+ }
98
+ async sendRequest(language, msg) {
99
+ const client = this.clients.get(language);
100
+ if (!client)
101
+ return null;
102
+ const json = JSON.stringify(msg);
103
+ const header = `Content-Length: ${Buffer.byteLength(json, 'utf-8')}\r\n\r\n`;
104
+ client.process.stdin.write(header + json);
105
+ }
106
+ async sendNotification(language, msg) {
107
+ const client = this.clients.get(language);
108
+ if (!client)
109
+ return;
110
+ const json = JSON.stringify(msg);
111
+ const header = `Content-Length: ${Buffer.byteLength(json, 'utf-8')}\r\n\r\n`;
112
+ client.process.stdin.write(header + json);
113
+ }
114
+ stopAll() {
115
+ for (const [lang, client] of this.clients) {
116
+ try {
117
+ this.sendNotification(lang, {
118
+ jsonrpc: '2.0',
119
+ method: 'shutdown',
120
+ params: {},
121
+ });
122
+ client.process.kill();
123
+ }
124
+ catch { }
125
+ }
126
+ this.clients.clear();
127
+ }
128
+ }
129
+ exports.LSPManager = LSPManager;
130
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lsp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { MCPConfig } from '../types/index.js';
2
+ export declare class MCPManager {
3
+ private servers;
4
+ start(name: string, config: MCPConfig): Promise<void>;
5
+ private startStdio;
6
+ getTools(name: string): any[];
7
+ getAllTools(): any[];
8
+ getConnectedServers(): string[];
9
+ stopAll(): void;
10
+ }
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAUlD,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA+B;IAExC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;YAmB7C,UAAU;IAsDxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE;IAI7B,WAAW,IAAI,GAAG,EAAE;IAQpB,mBAAmB,IAAI,MAAM,EAAE;IAM/B,OAAO;CAMR"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPManager = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const readline_1 = require("readline");
6
+ const os_1 = require("os");
7
+ const index_js_1 = require("../logging/index.js");
8
+ class MCPManager {
9
+ servers = new Map();
10
+ async start(name, config) {
11
+ if (config.disabled || this.servers.has(name))
12
+ return;
13
+ index_js_1.logger.info(`Starting MCP: ${name} (${config.type})`);
14
+ const server = { config, connected: false, tools: [] };
15
+ switch (config.type) {
16
+ case 'stdio':
17
+ await this.startStdio(name, server);
18
+ break;
19
+ case 'http':
20
+ case 'sse':
21
+ index_js_1.logger.warn(`MCP type ${config.type} not yet implemented for ${name}`);
22
+ return;
23
+ }
24
+ this.servers.set(name, server);
25
+ }
26
+ async startStdio(name, server) {
27
+ if (!server.config.command)
28
+ return;
29
+ const proc = (0, child_process_1.spawn)(server.config.command, server.config.args || [], {
30
+ env: { ...process.env, ...server.config.env },
31
+ stdio: ['pipe', 'pipe', 'pipe'],
32
+ shell: (0, os_1.platform)() === 'win32',
33
+ windowsHide: true,
34
+ });
35
+ server.process = proc;
36
+ const rl = (0, readline_1.createInterface)({ input: proc.stdout, crlfDelay: Infinity });
37
+ proc.on('error', (err) => index_js_1.logger.warn(`MCP ${name} error:`, err.message));
38
+ proc.on('exit', (code) => {
39
+ index_js_1.logger.info(`MCP ${name} exited: ${code}`);
40
+ server.connected = false;
41
+ });
42
+ // Send initialize request
43
+ const initMsg = {
44
+ jsonrpc: '2.0',
45
+ id: 1,
46
+ method: 'initialize',
47
+ params: {
48
+ protocolVersion: '2024-11-05',
49
+ capabilities: {},
50
+ clientInfo: { name: 'nyx-cli', version: '0.1.0' },
51
+ },
52
+ };
53
+ proc.stdin.write(JSON.stringify(initMsg) + '\n');
54
+ // Wait for response
55
+ server.connected = true;
56
+ await new Promise((resolve) => {
57
+ rl.on('line', (line) => {
58
+ try {
59
+ const msg = JSON.parse(line);
60
+ if (msg.id === 1) {
61
+ server.connected = true;
62
+ // Send initialized notification
63
+ proc.stdin.write(JSON.stringify({
64
+ jsonrpc: '2.0',
65
+ method: 'notifications/initialized',
66
+ params: {},
67
+ }) + '\n');
68
+ resolve();
69
+ }
70
+ }
71
+ catch { }
72
+ });
73
+ setTimeout(() => resolve(), 3000);
74
+ });
75
+ }
76
+ getTools(name) {
77
+ return this.servers.get(name)?.tools || [];
78
+ }
79
+ getAllTools() {
80
+ const all = [];
81
+ for (const [, server] of this.servers) {
82
+ all.push(...server.tools);
83
+ }
84
+ return all;
85
+ }
86
+ getConnectedServers() {
87
+ return Array.from(this.servers.entries())
88
+ .filter(([, s]) => s.connected)
89
+ .map(([name]) => name);
90
+ }
91
+ stopAll() {
92
+ for (const [, server] of this.servers) {
93
+ try {
94
+ server.process?.kill();
95
+ }
96
+ catch { }
97
+ }
98
+ this.servers.clear();
99
+ }
100
+ }
101
+ exports.MCPManager = MCPManager;
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { NyxConfig } from '../types/index.js';
2
+ export declare function setTuiReadline(rl: {
3
+ question: (query: string) => Promise<string>;
4
+ } | null): void;
5
+ export declare function resetAllowedTools(): void;
6
+ export declare class PermissionManager {
7
+ private allowedTools;
8
+ private yolo;
9
+ constructor(config: NyxConfig, yolo?: boolean);
10
+ isAllowed(tool: string): boolean;
11
+ requestPermission(tool: string, args: Record<string, any>): Promise<boolean>;
12
+ }
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAKlD,wBAAgB,cAAc,CAAC,EAAE,EAAE;IAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,QAEzF;AAID,wBAAgB,iBAAiB,SAEhC;AAYD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,IAAI,CAAS;gBAET,MAAM,EAAE,SAAS,EAAE,IAAI,GAAE,OAAe;IAQpD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAM1B,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAsBnF"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PermissionManager = void 0;
7
+ exports.setTuiReadline = setTuiReadline;
8
+ exports.resetAllowedTools = resetAllowedTools;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ let tuiReadline = null;
11
+ function setTuiReadline(rl) {
12
+ tuiReadline = rl;
13
+ }
14
+ const persistentAllowedTools = new Set();
15
+ function resetAllowedTools() {
16
+ persistentAllowedTools.clear();
17
+ }
18
+ function toolColor(tool) {
19
+ if (['view', 'ls', 'glob', 'grep', 'search'].includes(tool))
20
+ return chalk_1.default.green;
21
+ if (['write', 'create'].includes(tool))
22
+ return chalk_1.default.cyan;
23
+ if (['edit', 'apply_patch'].includes(tool))
24
+ return chalk_1.default.yellow;
25
+ if (['delete', 'remove', 'kill'].includes(tool))
26
+ return chalk_1.default.red;
27
+ if (['bash', 'run_command'].includes(tool))
28
+ return chalk_1.default.magenta;
29
+ if (['web_fetch', 'fetch', 'web_search'].includes(tool))
30
+ return chalk_1.default.blue;
31
+ return chalk_1.default.white;
32
+ }
33
+ class PermissionManager {
34
+ allowedTools;
35
+ yolo;
36
+ constructor(config, yolo = false) {
37
+ this.allowedTools = persistentAllowedTools;
38
+ for (const t of config.permissions?.allowed_tools || []) {
39
+ this.allowedTools.add(t);
40
+ }
41
+ this.yolo = yolo;
42
+ }
43
+ isAllowed(tool) {
44
+ if (this.yolo)
45
+ return true;
46
+ if (this.allowedTools.has(tool))
47
+ return true;
48
+ return false;
49
+ }
50
+ async requestPermission(tool, args) {
51
+ if (this.yolo)
52
+ return true;
53
+ if (this.allowedTools.has(tool))
54
+ return true;
55
+ const shortArgs = {};
56
+ if (args.file_path)
57
+ shortArgs.file = args.file_path;
58
+ else if (args.command)
59
+ shortArgs.cmd = args.command?.substring(0, 60);
60
+ else if (args.pattern)
61
+ shortArgs.pattern = args.pattern;
62
+ else if (args.query)
63
+ shortArgs.query = args.query;
64
+ else if (args.path)
65
+ shortArgs.path = args.path;
66
+ const c = toolColor(tool);
67
+ const answer = await askQuestion(c(` \u276F ${tool} `) + chalk_1.default.dim(JSON.stringify(shortArgs)) + ' (y/N/a): ');
68
+ const trimmed = answer.trim().toLowerCase();
69
+ if (trimmed === 'a' || trimmed === 'always') {
70
+ this.allowedTools.add(tool);
71
+ return true;
72
+ }
73
+ return trimmed === 'y' || trimmed === 'yes';
74
+ }
75
+ }
76
+ exports.PermissionManager = PermissionManager;
77
+ function askQuestion(query) {
78
+ if (tuiReadline) {
79
+ return tuiReadline.question(query);
80
+ }
81
+ return new Promise((resolve) => {
82
+ process.stderr.write(query);
83
+ const onData = (data) => {
84
+ process.stdin.removeListener('data', onData);
85
+ const input = data.toString().replace(/[\r\n]/g, '').trim();
86
+ try {
87
+ while (process.stdin.read() !== null) { }
88
+ }
89
+ catch { }
90
+ resolve(input);
91
+ };
92
+ process.stdin.resume();
93
+ process.stdin.on('data', onData);
94
+ });
95
+ }
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ChatMessage } from '../types/index.js';
2
+ export interface SessionRecord {
3
+ id: string;
4
+ title: string;
5
+ createdAt: string;
6
+ updatedAt: string;
7
+ promptTokens: number;
8
+ completionTokens: number;
9
+ cost: number;
10
+ summaryMessageId?: string;
11
+ todos: string;
12
+ }
13
+ export declare class SessionService {
14
+ create(title?: string): SessionRecord;
15
+ get(id: string): SessionRecord | null;
16
+ list(limit?: number): SessionRecord[];
17
+ update(id: string, data: Partial<SessionRecord>): void;
18
+ rename(id: string, title: string): void;
19
+ delete(id: string): void;
20
+ getMessages(sessionId: string): ChatMessage[];
21
+ addMessage(sessionId: string, msg: ChatMessage): void;
22
+ updateTokens(sessionId: string, prompt: number, completion: number): void;
23
+ private mapRow;
24
+ }
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,qBAAa,cAAc;IACzB,MAAM,CAAC,KAAK,GAAE,MAA2B,GAAG,aAAa;IASzD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAOrC,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE;IAQzC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC;IAe/C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIhC,MAAM,CAAC,EAAE,EAAE,MAAM;IAMjB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAa7C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW;IAgB9C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAOlE,OAAO,CAAC,MAAM;CAaf"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionService = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const index_js_1 = require("../db/index.js");
6
+ class SessionService {
7
+ create(title = 'Untitled Session') {
8
+ const id = (0, crypto_1.randomUUID)();
9
+ const db = (0, index_js_1.getDb)();
10
+ db.prepare('INSERT INTO sessions (id, title) VALUES (?, ?)').run(id, title);
11
+ return this.get(id);
12
+ }
13
+ get(id) {
14
+ const db = (0, index_js_1.getDb)();
15
+ const row = db.prepare('SELECT * FROM sessions WHERE id = ?').get(id);
16
+ if (!row)
17
+ return null;
18
+ return this.mapRow(row);
19
+ }
20
+ list(limit = 50) {
21
+ const db = (0, index_js_1.getDb)();
22
+ const rows = db.prepare('SELECT * FROM sessions ORDER BY updated_at DESC LIMIT ?').all(limit);
23
+ return rows.map((r) => this.mapRow(r));
24
+ }
25
+ update(id, data) {
26
+ const db = (0, index_js_1.getDb)();
27
+ const fields = [];
28
+ const values = [];
29
+ if (data.title !== undefined) {
30
+ fields.push('title = ?');
31
+ values.push(data.title);
32
+ }
33
+ if (data.promptTokens !== undefined) {
34
+ fields.push('prompt_tokens = ?');
35
+ values.push(data.promptTokens);
36
+ }
37
+ if (data.completionTokens !== undefined) {
38
+ fields.push('completion_tokens = ?');
39
+ values.push(data.completionTokens);
40
+ }
41
+ if (data.cost !== undefined) {
42
+ fields.push('cost = ?');
43
+ values.push(data.cost);
44
+ }
45
+ if (data.summaryMessageId !== undefined) {
46
+ fields.push('summary_message_id = ?');
47
+ values.push(data.summaryMessageId);
48
+ }
49
+ if (data.todos !== undefined) {
50
+ fields.push('todos = ?');
51
+ values.push(data.todos);
52
+ }
53
+ fields.push("updated_at = datetime('now')");
54
+ values.push(id);
55
+ db.prepare(`UPDATE sessions SET ${fields.join(', ')} WHERE id = ?`).run(...values);
56
+ }
57
+ rename(id, title) {
58
+ this.update(id, { title });
59
+ }
60
+ delete(id) {
61
+ const db = (0, index_js_1.getDb)();
62
+ db.prepare('DELETE FROM messages WHERE session_id = ?').run(id);
63
+ db.prepare('DELETE FROM sessions WHERE id = ?').run(id);
64
+ }
65
+ getMessages(sessionId) {
66
+ const db = (0, index_js_1.getDb)();
67
+ const rows = db.prepare('SELECT * FROM messages WHERE session_id = ? ORDER BY created_at ASC').all(sessionId);
68
+ return rows.map((r) => ({
69
+ role: r.role,
70
+ content: r.content || '',
71
+ tool_calls: r.tool_calls ? JSON.parse(r.tool_calls) : undefined,
72
+ tool_call_id: r.tool_call_id || undefined,
73
+ }));
74
+ }
75
+ addMessage(sessionId, msg) {
76
+ const db = (0, index_js_1.getDb)();
77
+ db.prepare(`INSERT INTO messages (id, session_id, role, content, tool_calls, tool_call_id)
78
+ VALUES (?, ?, ?, ?, ?, ?)`).run((0, crypto_1.randomUUID)(), sessionId, msg.role, msg.content || '', msg.tool_calls ? JSON.stringify(msg.tool_calls) : '[]', msg.tool_call_id || null);
79
+ db.prepare("UPDATE sessions SET updated_at = datetime('now') WHERE id = ?").run(sessionId);
80
+ }
81
+ updateTokens(sessionId, prompt, completion) {
82
+ const db = (0, index_js_1.getDb)();
83
+ db.prepare('UPDATE sessions SET prompt_tokens = prompt_tokens + ?, completion_tokens = completion_tokens + ?, updated_at = datetime(\'now\') WHERE id = ?').run(prompt, completion, sessionId);
84
+ }
85
+ mapRow(row) {
86
+ return {
87
+ id: row.id,
88
+ title: row.title,
89
+ createdAt: row.created_at,
90
+ updatedAt: row.updated_at,
91
+ promptTokens: row.prompt_tokens,
92
+ completionTokens: row.completion_tokens,
93
+ cost: row.cost,
94
+ summaryMessageId: row.summary_message_id,
95
+ todos: row.todos,
96
+ };
97
+ }
98
+ }
99
+ exports.SessionService = SessionService;
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ShellResult {
2
+ success: boolean;
3
+ stdout: string;
4
+ stderr: string;
5
+ exitCode: number;
6
+ }
7
+ export declare function runCommand(command: string, cwd?: string, timeout?: number): ShellResult;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,WAAW,CAqB9F"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCommand = runCommand;
4
+ const child_process_1 = require("child_process");
5
+ const os_1 = require("os");
6
+ function runCommand(command, cwd, timeout = 30000) {
7
+ const shell = (0, os_1.platform)() === 'win32' ? 'cmd.exe' : '/bin/bash';
8
+ const opts = {
9
+ cwd,
10
+ encoding: 'utf-8',
11
+ shell,
12
+ timeout,
13
+ maxBuffer: 1024 * 1024,
14
+ windowsHide: true,
15
+ };
16
+ try {
17
+ const stdout = (0, child_process_1.execSync)(command, opts);
18
+ return { success: true, stdout: stdout || '(done)', stderr: '', exitCode: 0 };
19
+ }
20
+ catch (err) {
21
+ return {
22
+ success: false,
23
+ stdout: err.stdout || '',
24
+ stderr: err.stderr || err.message,
25
+ exitCode: err.status || 1,
26
+ };
27
+ }
28
+ }
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shell/index.ts"],"names":[],"mappings":";;AAUA,gCAqBC;AA/BD,iDAAwC;AACxC,2BAA6B;AAS7B,SAAgB,UAAU,CAAC,OAAe,EAAE,GAAY,EAAE,UAAkB,KAAK;IAC/E,MAAM,KAAK,GAAG,IAAA,aAAQ,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAA;IAC9D,MAAM,IAAI,GAAQ;QAChB,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,KAAK;QACL,OAAO;QACP,SAAS,EAAE,IAAI,GAAG,IAAI;QACtB,WAAW,EAAE,IAAI;KAClB,CAAA;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,OAAO,EAAE,IAAI,CAAW,CAAA;QAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;IAC/E,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO;YACjC,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;SAC1B,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface Skill {
2
+ name: string;
3
+ path: string;
4
+ description: string;
5
+ instructions: string;
6
+ }
7
+ export declare function discoverSkills(projectPath: string, extraPaths?: string[]): Skill[];
8
+ export declare function loadSkillInstructions(skills: Skill[]): string;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,KAAK,EAAE,CAyCtF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAI7D"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.discoverSkills = discoverSkills;
4
+ exports.loadSkillInstructions = loadSkillInstructions;
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const index_js_1 = require("../logging/index.js");
8
+ function discoverSkills(projectPath, extraPaths = []) {
9
+ const skills = [];
10
+ const searchPaths = new Set();
11
+ // Project-level paths
12
+ for (const dir of ['.agents', '.nyx', '.claude', '.cursor']) {
13
+ searchPaths.add((0, path_1.resolve)(projectPath, dir, 'skills'));
14
+ }
15
+ // Extra configured paths
16
+ for (const p of extraPaths) {
17
+ searchPaths.add((0, path_1.resolve)(p));
18
+ }
19
+ for (const dir of searchPaths) {
20
+ if (!(0, fs_1.existsSync)(dir))
21
+ continue;
22
+ try {
23
+ const entries = (0, fs_1.readdirSync)(dir, { withFileTypes: true });
24
+ for (const entry of entries) {
25
+ if (entry.isDirectory()) {
26
+ const skillPath = (0, path_1.join)(dir, entry.name);
27
+ const skillMd = (0, path_1.join)(skillPath, 'SKILL.md');
28
+ if ((0, fs_1.existsSync)(skillMd)) {
29
+ const content = (0, fs_1.readFileSync)(skillMd, 'utf-8');
30
+ const firstLine = content.split('\n')[0] || entry.name;
31
+ const description = firstLine.replace(/^#\s*/, '').trim();
32
+ skills.push({
33
+ name: entry.name,
34
+ path: skillPath,
35
+ description,
36
+ instructions: content,
37
+ });
38
+ }
39
+ }
40
+ }
41
+ }
42
+ catch (err) {
43
+ index_js_1.logger.warn('Failed to discover skills in', dir, err);
44
+ }
45
+ }
46
+ return skills;
47
+ }
48
+ function loadSkillInstructions(skills) {
49
+ return skills.map((s) => {
50
+ return `## Skill: ${s.name}\n${s.instructions}\n`;
51
+ }).join('\n\n');
52
+ }
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":";;AAWA,wCAyCC;AAED,sDAIC;AA1DD,2BAAoE;AACpE,+BAAoC;AACpC,kDAA4C;AAS5C,SAAgB,cAAc,CAAC,WAAmB,EAAE,aAAuB,EAAE;IAC3E,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IAErC,sBAAsB;IACtB,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;QAC5D,WAAW,CAAC,GAAG,CAAC,IAAA,cAAO,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,WAAW,CAAC,GAAG,CAAC,IAAA,cAAO,EAAC,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC;YAAE,SAAQ;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,gBAAW,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;YACzD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;oBACvC,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,UAAU,CAAC,CAAA;oBAC3C,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;wBACxB,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAA;wBAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAA;wBACtD,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;wBACzD,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,IAAI,EAAE,SAAS;4BACf,WAAW;4BACX,YAAY,EAAE,OAAO;yBACtB,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iBAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAe;IACnD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,OAAO,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,YAAY,IAAI,CAAA;IACnD,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACjB,CAAC"}