@nex-ai/nex 0.1.7

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 (101) hide show
  1. package/README.md +228 -0
  2. package/dist/cli.d.ts +5 -0
  3. package/dist/cli.js +18 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/attribute.d.ts +4 -0
  6. package/dist/commands/attribute.js +75 -0
  7. package/dist/commands/attribute.js.map +1 -0
  8. package/dist/commands/config-cmd.d.ts +4 -0
  9. package/dist/commands/config-cmd.js +53 -0
  10. package/dist/commands/config-cmd.js.map +1 -0
  11. package/dist/commands/context.d.ts +4 -0
  12. package/dist/commands/context.js +135 -0
  13. package/dist/commands/context.js.map +1 -0
  14. package/dist/commands/insight.d.ts +4 -0
  15. package/dist/commands/insight.js +39 -0
  16. package/dist/commands/insight.js.map +1 -0
  17. package/dist/commands/integrate.d.ts +4 -0
  18. package/dist/commands/integrate.js +136 -0
  19. package/dist/commands/integrate.js.map +1 -0
  20. package/dist/commands/list-job.d.ts +4 -0
  21. package/dist/commands/list-job.js +41 -0
  22. package/dist/commands/list-job.js.map +1 -0
  23. package/dist/commands/list.d.ts +4 -0
  24. package/dist/commands/list.js +148 -0
  25. package/dist/commands/list.js.map +1 -0
  26. package/dist/commands/note.d.ts +4 -0
  27. package/dist/commands/note.js +77 -0
  28. package/dist/commands/note.js.map +1 -0
  29. package/dist/commands/object.d.ts +4 -0
  30. package/dist/commands/object.js +78 -0
  31. package/dist/commands/object.js.map +1 -0
  32. package/dist/commands/record.d.ts +4 -0
  33. package/dist/commands/record.js +126 -0
  34. package/dist/commands/record.js.map +1 -0
  35. package/dist/commands/register.d.ts +4 -0
  36. package/dist/commands/register.js +23 -0
  37. package/dist/commands/register.js.map +1 -0
  38. package/dist/commands/relationship.d.ts +4 -0
  39. package/dist/commands/relationship.js +80 -0
  40. package/dist/commands/relationship.js.map +1 -0
  41. package/dist/commands/scan.d.ts +4 -0
  42. package/dist/commands/scan.js +58 -0
  43. package/dist/commands/scan.js.map +1 -0
  44. package/dist/commands/search.d.ts +4 -0
  45. package/dist/commands/search.js +22 -0
  46. package/dist/commands/search.js.map +1 -0
  47. package/dist/commands/session.d.ts +4 -0
  48. package/dist/commands/session.js +31 -0
  49. package/dist/commands/session.js.map +1 -0
  50. package/dist/commands/setup.d.ts +10 -0
  51. package/dist/commands/setup.js +254 -0
  52. package/dist/commands/setup.js.map +1 -0
  53. package/dist/commands/task.d.ts +4 -0
  54. package/dist/commands/task.js +114 -0
  55. package/dist/commands/task.js.map +1 -0
  56. package/dist/index.d.ts +25 -0
  57. package/dist/index.js +68 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/lib/capture-filter.d.ts +9 -0
  60. package/dist/lib/capture-filter.js +14 -0
  61. package/dist/lib/capture-filter.js.map +1 -0
  62. package/dist/lib/client.d.ts +19 -0
  63. package/dist/lib/client.js +115 -0
  64. package/dist/lib/client.js.map +1 -0
  65. package/dist/lib/config.d.ts +34 -0
  66. package/dist/lib/config.js +59 -0
  67. package/dist/lib/config.js.map +1 -0
  68. package/dist/lib/context-format.d.ts +7 -0
  69. package/dist/lib/context-format.js +21 -0
  70. package/dist/lib/context-format.js.map +1 -0
  71. package/dist/lib/errors.d.ts +18 -0
  72. package/dist/lib/errors.js +30 -0
  73. package/dist/lib/errors.js.map +1 -0
  74. package/dist/lib/file-scanner.d.ts +38 -0
  75. package/dist/lib/file-scanner.js +178 -0
  76. package/dist/lib/file-scanner.js.map +1 -0
  77. package/dist/lib/installers.d.ts +19 -0
  78. package/dist/lib/installers.js +205 -0
  79. package/dist/lib/installers.js.map +1 -0
  80. package/dist/lib/output.d.ts +7 -0
  81. package/dist/lib/output.js +50 -0
  82. package/dist/lib/output.js.map +1 -0
  83. package/dist/lib/platform-detect.d.ts +16 -0
  84. package/dist/lib/platform-detect.js +188 -0
  85. package/dist/lib/platform-detect.js.map +1 -0
  86. package/dist/lib/project-config.d.ts +53 -0
  87. package/dist/lib/project-config.js +151 -0
  88. package/dist/lib/project-config.js.map +1 -0
  89. package/dist/lib/prompt.d.ts +4 -0
  90. package/dist/lib/prompt.js +21 -0
  91. package/dist/lib/prompt.js.map +1 -0
  92. package/dist/lib/rate-limiter.d.ts +13 -0
  93. package/dist/lib/rate-limiter.js +49 -0
  94. package/dist/lib/rate-limiter.js.map +1 -0
  95. package/dist/lib/recall-filter.d.ts +6 -0
  96. package/dist/lib/recall-filter.js +58 -0
  97. package/dist/lib/recall-filter.js.map +1 -0
  98. package/dist/lib/session-store.d.ts +15 -0
  99. package/dist/lib/session-store.js +62 -0
  100. package/dist/lib/session-store.js.map +1 -0
  101. package/package.json +32 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installers.js","sourceRoot":"","sources":["../../src/lib/installers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Output formatter: json / text / quiet.
3
+ */
4
+ export type Format = "json" | "text" | "quiet";
5
+ export declare function formatOutput(data: unknown, format: Format): string | undefined;
6
+ export declare function printOutput(data: unknown, format: Format): void;
7
+ export declare function printError(message: string): void;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Output formatter: json / text / quiet.
3
+ */
4
+ function flattenForText(data, indent = 0) {
5
+ if (data === null || data === undefined)
6
+ return "";
7
+ if (typeof data === "string")
8
+ return data;
9
+ if (typeof data === "number" || typeof data === "boolean")
10
+ return String(data);
11
+ const prefix = " ".repeat(indent);
12
+ if (Array.isArray(data)) {
13
+ if (data.length === 0)
14
+ return `${prefix}(empty)`;
15
+ return data.map((item, i) => `${prefix}[${i}] ${flattenForText(item, indent + 1).trimStart()}`).join("\n");
16
+ }
17
+ if (typeof data === "object") {
18
+ const obj = data;
19
+ const entries = Object.entries(obj).filter(([, v]) => v !== undefined && v !== null);
20
+ if (entries.length === 0)
21
+ return `${prefix}(empty)`;
22
+ return entries.map(([k, v]) => {
23
+ if (typeof v === "object" && v !== null) {
24
+ return `${prefix}${k}:\n${flattenForText(v, indent + 1)}`;
25
+ }
26
+ return `${prefix}${k}: ${v}`;
27
+ }).join("\n");
28
+ }
29
+ return String(data);
30
+ }
31
+ export function formatOutput(data, format) {
32
+ switch (format) {
33
+ case "json":
34
+ return JSON.stringify(data, null, 2);
35
+ case "text":
36
+ return flattenForText(data);
37
+ case "quiet":
38
+ return undefined;
39
+ }
40
+ }
41
+ export function printOutput(data, format) {
42
+ const output = formatOutput(data, format);
43
+ if (output !== undefined) {
44
+ process.stdout.write(output + "\n");
45
+ }
46
+ }
47
+ export function printError(message) {
48
+ process.stderr.write(`Error: ${message}\n`);
49
+ }
50
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,SAAS,cAAc,CAAC,IAAa,EAAE,MAAM,GAAG,CAAC;IAC/C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IAE/E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,MAAM,SAAS,CAAC;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7G,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAA+B,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QACrF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,MAAM,SAAS,CAAC;QACpD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACxC,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5D,CAAC;YACD,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,MAAc;IACxD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,KAAK,MAAM;YACT,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAa,EAAE,MAAc;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Detect installed AI coding platforms and check Nex installation status.
3
+ */
4
+ export interface Platform {
5
+ id: string;
6
+ displayName: string;
7
+ detected: boolean;
8
+ nexInstalled: boolean;
9
+ pluginSupport: boolean;
10
+ configPath: string;
11
+ configFormat: "standard" | "zed" | "continue";
12
+ }
13
+ export declare function detectPlatforms(): Platform[];
14
+ export declare function getDetectedPlatforms(): Platform[];
15
+ export declare function getPlatformById(id: string): Platform | undefined;
16
+ export declare const VALID_PLATFORM_IDS: string[];
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Detect installed AI coding platforms and check Nex installation status.
3
+ */
4
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { homedir } from "node:os";
7
+ import { execFileSync } from "node:child_process";
8
+ const home = homedir();
9
+ function exists(path) {
10
+ return existsSync(path);
11
+ }
12
+ function whichExists(cmd) {
13
+ try {
14
+ execFileSync("which", [cmd], { stdio: "ignore" });
15
+ return true;
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ function hasNexMcpEntry(configPath, key = "nex") {
22
+ try {
23
+ const raw = readFileSync(configPath, "utf-8");
24
+ const config = JSON.parse(raw);
25
+ // Check mcpServers.nex or context_servers.nex
26
+ return !!(config?.mcpServers?.[key] || config?.context_servers?.[key]);
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ function hasClaudeCodePlugin() {
33
+ const settingsPath = join(home, ".claude", "settings.json");
34
+ try {
35
+ const raw = readFileSync(settingsPath, "utf-8");
36
+ return raw.includes("nex") && raw.includes("auto-recall");
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ function claudeDesktopConfigPath() {
43
+ if (process.platform === "darwin") {
44
+ return join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json");
45
+ }
46
+ if (process.platform === "win32") {
47
+ return join(process.env.APPDATA ?? join(home, "AppData", "Roaming"), "Claude", "claude_desktop_config.json");
48
+ }
49
+ // Linux
50
+ return join(home, ".config", "Claude", "claude_desktop_config.json");
51
+ }
52
+ function hasClineExtension() {
53
+ const extensionsDir = join(home, ".vscode", "extensions");
54
+ try {
55
+ const entries = readdirSync(extensionsDir);
56
+ return entries.some((e) => e.startsWith("saoudrizwan.claude-dev-"));
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }
62
+ function clineConfigPath() {
63
+ // Cline stores MCP config in VS Code globalStorage
64
+ if (process.platform === "darwin") {
65
+ return join(home, "Library", "Application Support", "Code", "User", "globalStorage", "saoudrizwan.claude-dev", "settings", "cline_mcp_settings.json");
66
+ }
67
+ if (process.platform === "win32") {
68
+ return join(process.env.APPDATA ?? join(home, "AppData", "Roaming"), "Code", "User", "globalStorage", "saoudrizwan.claude-dev", "settings", "cline_mcp_settings.json");
69
+ }
70
+ return join(home, ".config", "Code", "User", "globalStorage", "saoudrizwan.claude-dev", "settings", "cline_mcp_settings.json");
71
+ }
72
+ export function detectPlatforms() {
73
+ const cwd = process.cwd();
74
+ const platforms = [
75
+ {
76
+ id: "claude-code",
77
+ displayName: "Claude Code",
78
+ detected: exists(join(home, ".claude")),
79
+ nexInstalled: hasClaudeCodePlugin(),
80
+ pluginSupport: true,
81
+ configPath: join(home, ".claude", "settings.json"),
82
+ configFormat: "standard",
83
+ },
84
+ {
85
+ id: "claude-desktop",
86
+ displayName: "Claude Desktop",
87
+ detected: exists(claudeDesktopConfigPath()),
88
+ nexInstalled: hasNexMcpEntry(claudeDesktopConfigPath()),
89
+ pluginSupport: false,
90
+ configPath: claudeDesktopConfigPath(),
91
+ configFormat: "standard",
92
+ },
93
+ {
94
+ id: "cursor",
95
+ displayName: "Cursor",
96
+ detected: exists(join(home, ".cursor")),
97
+ nexInstalled: hasNexMcpEntry(join(home, ".cursor", "mcp.json")),
98
+ pluginSupport: false,
99
+ configPath: join(home, ".cursor", "mcp.json"),
100
+ configFormat: "standard",
101
+ },
102
+ {
103
+ id: "vscode",
104
+ displayName: "VS Code",
105
+ detected: whichExists("code") || exists(join(cwd, ".vscode")),
106
+ nexInstalled: hasNexMcpEntry(join(cwd, ".vscode", "mcp.json")),
107
+ pluginSupport: false,
108
+ configPath: join(cwd, ".vscode", "mcp.json"),
109
+ configFormat: "standard",
110
+ },
111
+ {
112
+ id: "windsurf",
113
+ displayName: "Windsurf",
114
+ detected: exists(join(home, ".codeium", "windsurf")),
115
+ nexInstalled: hasNexMcpEntry(join(home, ".codeium", "windsurf", "mcp_config.json")),
116
+ pluginSupport: false,
117
+ configPath: join(home, ".codeium", "windsurf", "mcp_config.json"),
118
+ configFormat: "standard",
119
+ },
120
+ {
121
+ id: "cline",
122
+ displayName: "Cline",
123
+ detected: hasClineExtension(),
124
+ nexInstalled: hasNexMcpEntry(clineConfigPath()),
125
+ pluginSupport: false,
126
+ configPath: clineConfigPath(),
127
+ configFormat: "standard",
128
+ },
129
+ {
130
+ id: "zed",
131
+ displayName: "Zed",
132
+ detected: exists(join(home, ".config", "zed")),
133
+ nexInstalled: hasNexMcpEntry(join(home, ".config", "zed", "settings.json"), "nex"),
134
+ pluginSupport: false,
135
+ configPath: join(home, ".config", "zed", "settings.json"),
136
+ configFormat: "zed",
137
+ },
138
+ {
139
+ id: "continue",
140
+ displayName: "Continue.dev",
141
+ detected: exists(join(cwd, ".continue")) || exists(join(home, ".continue")),
142
+ nexInstalled: false, // YAML check would be complex — just report not installed
143
+ pluginSupport: false,
144
+ configPath: exists(join(cwd, ".continue"))
145
+ ? join(cwd, ".continue", "config.yaml")
146
+ : join(home, ".continue", "config.yaml"),
147
+ configFormat: "continue",
148
+ },
149
+ {
150
+ id: "kilocode",
151
+ displayName: "Kilo Code",
152
+ detected: exists(join(cwd, ".kilocode")),
153
+ nexInstalled: hasNexMcpEntry(join(cwd, ".kilocode", "mcp.json")),
154
+ pluginSupport: false,
155
+ configPath: join(cwd, ".kilocode", "mcp.json"),
156
+ configFormat: "standard",
157
+ },
158
+ {
159
+ id: "opencode",
160
+ displayName: "OpenCode",
161
+ detected: exists(join(home, ".config", "opencode")),
162
+ nexInstalled: hasNexMcpEntry(join(home, ".config", "opencode", "opencode.json")),
163
+ pluginSupport: false,
164
+ configPath: join(home, ".config", "opencode", "opencode.json"),
165
+ configFormat: "standard",
166
+ },
167
+ ];
168
+ return platforms;
169
+ }
170
+ export function getDetectedPlatforms() {
171
+ return detectPlatforms().filter((p) => p.detected);
172
+ }
173
+ export function getPlatformById(id) {
174
+ return detectPlatforms().find((p) => p.id === id);
175
+ }
176
+ export const VALID_PLATFORM_IDS = [
177
+ "claude-code",
178
+ "claude-desktop",
179
+ "cursor",
180
+ "vscode",
181
+ "windsurf",
182
+ "cline",
183
+ "continue",
184
+ "zed",
185
+ "kilocode",
186
+ "opencode",
187
+ ];
188
+ //# sourceMappingURL=platform-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-detect.js","sourceRoot":"","sources":["../../src/lib/platform-detect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYlD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AAEvB,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,GAAG,GAAG,KAAK;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,8CAA8C;QAC9C,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAC/G,CAAC;IACD,QAAQ;IACR,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,mDAAmD;IACnD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACxJ,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACzK,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,yBAAyB,CAAC,CAAC;AACjI,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,SAAS,GAAe;QAC5B;YACE,EAAE,EAAE,aAAa;YACjB,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvC,YAAY,EAAE,mBAAmB,EAAE;YACnC,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC;YAClD,YAAY,EAAE,UAAU;SACzB;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,WAAW,EAAE,gBAAgB;YAC7B,QAAQ,EAAE,MAAM,CAAC,uBAAuB,EAAE,CAAC;YAC3C,YAAY,EAAE,cAAc,CAAC,uBAAuB,EAAE,CAAC;YACvD,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,uBAAuB,EAAE;YACrC,YAAY,EAAE,UAAU;SACzB;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,QAAQ;YACrB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAC/D,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YAC7C,YAAY,EAAE,UAAU;SACzB;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC7D,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAC9D,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC;YAC5C,YAAY,EAAE,UAAU;SACzB;QACD;YACE,EAAE,EAAE,UAAU;YACd,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACpD,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACnF,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC;YACjE,YAAY,EAAE,UAAU;SACzB;QACD;YACE,EAAE,EAAE,OAAO;YACX,WAAW,EAAE,OAAO;YACpB,QAAQ,EAAE,iBAAiB,EAAE;YAC7B,YAAY,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC;YAC/C,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,eAAe,EAAE;YAC7B,YAAY,EAAE,UAAU;SACzB;QACD;YACE,EAAE,EAAE,KAAK;YACT,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9C,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,KAAK,CAAC;YAClF,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC;YACzD,YAAY,EAAE,KAAK;SACpB;QACD;YACE,EAAE,EAAE,UAAU;YACd,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC3E,YAAY,EAAE,KAAK,EAAE,0DAA0D;YAC/E,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACxC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC;gBACvC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC;YAC1C,YAAY,EAAE,UAAU;SACzB;QACD;YACE,EAAE,EAAE,UAAU;YACd,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACxC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YAChE,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC;YAC9C,YAAY,EAAE,UAAU;SACzB;QACD;YACE,EAAE,EAAE,UAAU;YACd,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YACnD,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;YAChF,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC;YAC9D,YAAY,EAAE,UAAU;SACzB;KACF,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,OAAO,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,aAAa;IACb,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,UAAU;IACV,KAAK;IACL,UAAU;IACV,UAAU;CACX,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * .nex.toml project config reader/writer.
3
+ *
4
+ * Resolution: CLI flags > .nex.toml > env vars > ~/.nex/config.json > defaults
5
+ */
6
+ export declare function parseToml(content: string): Record<string, unknown>;
7
+ export interface HookConfig {
8
+ enabled?: boolean;
9
+ debounce_ms?: number;
10
+ min_length?: number;
11
+ max_length?: number;
12
+ }
13
+ export interface ProjectConfig {
14
+ auth?: {
15
+ api_key?: string;
16
+ };
17
+ hooks?: {
18
+ enabled?: boolean;
19
+ recall?: HookConfig;
20
+ capture?: HookConfig;
21
+ session_start?: HookConfig;
22
+ };
23
+ scan?: {
24
+ enabled?: boolean;
25
+ extensions?: string[];
26
+ ignore_dirs?: string[];
27
+ max_files?: number;
28
+ max_file_size?: number;
29
+ depth?: number;
30
+ };
31
+ mcp?: {
32
+ enabled?: boolean;
33
+ };
34
+ output?: {
35
+ format?: string;
36
+ timeout?: number;
37
+ };
38
+ }
39
+ /**
40
+ * Find and parse .nex.toml from the given directory (defaults to cwd).
41
+ * Returns undefined if no .nex.toml is found.
42
+ */
43
+ export declare function loadProjectConfig(dir?: string): ProjectConfig | undefined;
44
+ /**
45
+ * Check if a specific hook is enabled in .nex.toml.
46
+ * Returns true by default (hooks are opt-out, not opt-in).
47
+ */
48
+ export declare function isHookEnabled(hookName: "recall" | "capture" | "session_start", dir?: string): boolean;
49
+ /**
50
+ * Write a default .nex.toml to the given directory.
51
+ * Returns false if the file already exists.
52
+ */
53
+ export declare function writeDefaultProjectConfig(dir?: string): boolean;
@@ -0,0 +1,151 @@
1
+ /**
2
+ * .nex.toml project config reader/writer.
3
+ *
4
+ * Resolution: CLI flags > .nex.toml > env vars > ~/.nex/config.json > defaults
5
+ */
6
+ import { readFileSync, writeFileSync, existsSync } from "node:fs";
7
+ import { join } from "node:path";
8
+ // --- Minimal TOML parser (read-only, no dependency) ---
9
+ // Handles flat keys, dotted keys, strings, numbers, booleans, arrays.
10
+ // Good enough for .nex.toml — not a full TOML spec parser.
11
+ function parseLine(line, obj, currentSection) {
12
+ const trimmed = line.trim();
13
+ if (!trimmed || trimmed.startsWith("#"))
14
+ return;
15
+ // Section header: [hooks.recall]
16
+ const sectionMatch = trimmed.match(/^\[([^\]]+)\]$/);
17
+ if (sectionMatch) {
18
+ currentSection.length = 0;
19
+ currentSection.push(...sectionMatch[1].split("."));
20
+ return;
21
+ }
22
+ // Key = value
23
+ const kvMatch = trimmed.match(/^([a-zA-Z_][a-zA-Z0-9_.]*)\s*=\s*(.+)$/);
24
+ if (!kvMatch)
25
+ return;
26
+ const key = kvMatch[1].trim();
27
+ const rawValue = kvMatch[2].trim();
28
+ const value = parseValue(rawValue);
29
+ // Build nested path
30
+ const path = [...currentSection, ...key.split(".")];
31
+ let target = obj;
32
+ for (let i = 0; i < path.length - 1; i++) {
33
+ if (!(path[i] in target) || typeof target[path[i]] !== "object") {
34
+ target[path[i]] = {};
35
+ }
36
+ target = target[path[i]];
37
+ }
38
+ target[path[path.length - 1]] = value;
39
+ }
40
+ function parseValue(raw) {
41
+ // Boolean
42
+ if (raw === "true")
43
+ return true;
44
+ if (raw === "false")
45
+ return false;
46
+ // Number
47
+ if (/^-?\d+(\.\d+)?$/.test(raw))
48
+ return Number(raw);
49
+ // String (quoted)
50
+ if ((raw.startsWith('"') && raw.endsWith('"')) || (raw.startsWith("'") && raw.endsWith("'"))) {
51
+ return raw.slice(1, -1);
52
+ }
53
+ // Array
54
+ if (raw.startsWith("[") && raw.endsWith("]")) {
55
+ const inner = raw.slice(1, -1).trim();
56
+ if (!inner)
57
+ return [];
58
+ return inner.split(",").map((item) => parseValue(item.trim()));
59
+ }
60
+ // Bare string fallback
61
+ return raw;
62
+ }
63
+ export function parseToml(content) {
64
+ const obj = {};
65
+ const currentSection = [];
66
+ for (const line of content.split("\n")) {
67
+ parseLine(line, obj, currentSection);
68
+ }
69
+ return obj;
70
+ }
71
+ /**
72
+ * Find and parse .nex.toml from the given directory (defaults to cwd).
73
+ * Returns undefined if no .nex.toml is found.
74
+ */
75
+ export function loadProjectConfig(dir) {
76
+ const configPath = join(dir ?? process.cwd(), ".nex.toml");
77
+ if (!existsSync(configPath))
78
+ return undefined;
79
+ try {
80
+ const content = readFileSync(configPath, "utf-8");
81
+ return parseToml(content);
82
+ }
83
+ catch {
84
+ return undefined;
85
+ }
86
+ }
87
+ /**
88
+ * Check if a specific hook is enabled in .nex.toml.
89
+ * Returns true by default (hooks are opt-out, not opt-in).
90
+ */
91
+ export function isHookEnabled(hookName, dir) {
92
+ const config = loadProjectConfig(dir);
93
+ if (!config)
94
+ return true;
95
+ // Master kill switch
96
+ if (config.hooks?.enabled === false)
97
+ return false;
98
+ // Per-hook setting
99
+ const hookConfig = config.hooks?.[hookName];
100
+ if (hookConfig?.enabled === false)
101
+ return false;
102
+ return true;
103
+ }
104
+ const DEFAULT_TOML = `# .nex.toml — Nex project configuration
105
+ # All settings are optional. Defaults shown in comments.
106
+
107
+ # [auth]
108
+ # api_key = "sk-..." # Prefer NEX_API_KEY env var or ~/.nex/config.json
109
+
110
+ # [hooks]
111
+ # enabled = true # Master kill switch for all hooks
112
+
113
+ # [hooks.recall]
114
+ # enabled = true # Auto-recall context on each prompt
115
+ # debounce_ms = 30000
116
+
117
+ # [hooks.capture]
118
+ # enabled = true # Auto-capture on conversation stop
119
+ # min_length = 20
120
+ # max_length = 50000
121
+
122
+ # [hooks.session_start]
123
+ # enabled = true # Load context on session start
124
+
125
+ # [scan]
126
+ # enabled = true
127
+ # extensions = [".md", ".txt", ".csv", ".json", ".yaml", ".yml"]
128
+ # ignore_dirs = ["node_modules", ".git", "dist", "build", "__pycache__"]
129
+ # max_files = 5
130
+ # max_file_size = 100000
131
+ # depth = 2
132
+
133
+ # [mcp]
134
+ # enabled = false # Set to true by \`nex setup --with-mcp\`
135
+
136
+ # [output]
137
+ # format = "text" # "text" | "json"
138
+ # timeout = 120000
139
+ `;
140
+ /**
141
+ * Write a default .nex.toml to the given directory.
142
+ * Returns false if the file already exists.
143
+ */
144
+ export function writeDefaultProjectConfig(dir) {
145
+ const configPath = join(dir ?? process.cwd(), ".nex.toml");
146
+ if (existsSync(configPath))
147
+ return false;
148
+ writeFileSync(configPath, DEFAULT_TOML, "utf-8");
149
+ return true;
150
+ }
151
+ //# sourceMappingURL=project-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/lib/project-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Minimal interactive prompt helpers using readline.
3
+ */
4
+ export declare function confirm(message: string, defaultYes?: boolean): Promise<boolean>;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Minimal interactive prompt helpers using readline.
3
+ */
4
+ import { createInterface } from "node:readline";
5
+ export async function confirm(message, defaultYes = true) {
6
+ const suffix = defaultYes ? "[Y/n]" : "[y/N]";
7
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
8
+ return new Promise((resolve) => {
9
+ rl.question(`${message} ${suffix} `, (answer) => {
10
+ rl.close();
11
+ const trimmed = answer.trim().toLowerCase();
12
+ if (!trimmed) {
13
+ resolve(defaultYes);
14
+ }
15
+ else {
16
+ resolve(trimmed === "y" || trimmed === "yes");
17
+ }
18
+ });
19
+ });
20
+ }
21
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,UAAU,GAAG,IAAI;IAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface RateLimiterConfig {
2
+ maxRequests: number;
3
+ windowMs: number;
4
+ dataDir: string;
5
+ }
6
+ export declare class RateLimiter {
7
+ private config;
8
+ private filePath;
9
+ constructor(config?: Partial<RateLimiterConfig>);
10
+ private readTimestamps;
11
+ private writeTimestamps;
12
+ canProceed(): boolean;
13
+ }
@@ -0,0 +1,49 @@
1
+ import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ const DEFAULTS = {
5
+ maxRequests: 10,
6
+ windowMs: 60_000,
7
+ dataDir: join(homedir(), ".nex"),
8
+ };
9
+ export class RateLimiter {
10
+ config;
11
+ filePath;
12
+ constructor(config) {
13
+ this.config = { ...DEFAULTS, ...config };
14
+ this.filePath = join(this.config.dataDir, "rate-limiter.json");
15
+ mkdirSync(this.config.dataDir, { recursive: true });
16
+ }
17
+ readTimestamps() {
18
+ try {
19
+ const raw = readFileSync(this.filePath, "utf-8");
20
+ const data = JSON.parse(raw);
21
+ if (Array.isArray(data))
22
+ return data;
23
+ return [];
24
+ }
25
+ catch {
26
+ return [];
27
+ }
28
+ }
29
+ writeTimestamps(timestamps) {
30
+ try {
31
+ writeFileSync(this.filePath, JSON.stringify(timestamps), "utf-8");
32
+ }
33
+ catch {
34
+ /* best-effort */
35
+ }
36
+ }
37
+ canProceed() {
38
+ const now = Date.now();
39
+ const timestamps = this.readTimestamps().filter((t) => now - t < this.config.windowMs);
40
+ if (timestamps.length >= this.config.maxRequests) {
41
+ this.writeTimestamps(timestamps);
42
+ return false;
43
+ }
44
+ timestamps.push(now);
45
+ this.writeTimestamps(timestamps);
46
+ return true;
47
+ }
48
+ }
49
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/lib/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,MAAM,QAAQ,GAAsB;IAClC,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,OAAO,WAAW;IACd,MAAM,CAAoB;IAC1B,QAAQ,CAAS;IAEzB,YAAY,MAAmC;QAC7C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC/D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrC,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,UAAoB;QAC1C,IAAI,CAAC;YACH,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,UAAU;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CACtC,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export interface RecallDecision {
2
+ shouldRecall: boolean;
3
+ reason: string;
4
+ }
5
+ export declare function recordRecall(): void;
6
+ export declare function shouldRecall(prompt: string, isFirstPrompt: boolean): RecallDecision;