@llmtune/cli 0.1.9 → 0.2.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 (170) hide show
  1. package/README.md +206 -181
  2. package/dist/agent/conversation.d.ts.map +1 -0
  3. package/dist/agent/conversation.js.map +1 -0
  4. package/dist/agent/loop.d.ts.map +1 -0
  5. package/dist/agent/loop.js +27 -10
  6. package/dist/agent/loop.js.map +1 -0
  7. package/dist/agent/planner.d.ts.map +1 -0
  8. package/dist/agent/planner.js.map +1 -0
  9. package/dist/auth/client.d.ts.map +1 -0
  10. package/dist/auth/client.js.map +1 -0
  11. package/dist/auth/config.d.ts.map +1 -0
  12. package/dist/auth/config.js.map +1 -0
  13. package/dist/commands/balance.d.ts.map +1 -0
  14. package/dist/commands/balance.js.map +1 -0
  15. package/dist/commands/chat.d.ts.map +1 -0
  16. package/dist/commands/chat.js.map +1 -0
  17. package/dist/commands/config.d.ts.map +1 -0
  18. package/dist/commands/config.js.map +1 -0
  19. package/dist/commands/doctor.d.ts.map +1 -0
  20. package/dist/commands/doctor.js.map +1 -0
  21. package/dist/commands/login.d.ts.map +1 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/marketplace.d.ts.map +1 -0
  24. package/dist/commands/marketplace.js.map +1 -0
  25. package/dist/commands/models.d.ts.map +1 -0
  26. package/dist/commands/models.js.map +1 -0
  27. package/dist/commands/update.d.ts.map +1 -0
  28. package/dist/commands/update.js.map +1 -0
  29. package/dist/compact/auto-compact.d.ts.map +1 -0
  30. package/dist/compact/auto-compact.js.map +1 -0
  31. package/dist/compact/budget.d.ts.map +1 -0
  32. package/dist/compact/budget.js +18 -0
  33. package/dist/compact/budget.js.map +1 -0
  34. package/dist/compact/history-store.d.ts.map +1 -0
  35. package/dist/compact/history-store.js.map +1 -0
  36. package/dist/compact/microcompact.d.ts.map +1 -0
  37. package/dist/compact/microcompact.js.map +1 -0
  38. package/dist/compact/service.d.ts.map +1 -0
  39. package/dist/compact/service.js.map +1 -0
  40. package/dist/context/agent-identity.d.ts.map +1 -0
  41. package/dist/context/agent-identity.js +19 -0
  42. package/dist/context/agent-identity.js.map +1 -0
  43. package/dist/context/analyzer.d.ts.map +1 -0
  44. package/dist/context/analyzer.js.map +1 -0
  45. package/dist/context/builder.d.ts.map +1 -0
  46. package/dist/context/builder.js +7 -0
  47. package/dist/context/builder.js.map +1 -0
  48. package/dist/context/cache.d.ts.map +1 -0
  49. package/dist/context/cache.js.map +1 -0
  50. package/dist/context/git-context.d.ts.map +1 -0
  51. package/dist/context/git-context.js.map +1 -0
  52. package/dist/context/llmtune-md.d.ts.map +1 -0
  53. package/dist/context/llmtune-md.js.map +1 -0
  54. package/dist/context/project-detect.d.ts +26 -0
  55. package/dist/context/project-detect.d.ts.map +1 -0
  56. package/dist/context/project-detect.js +213 -0
  57. package/dist/context/project-detect.js.map +1 -0
  58. package/dist/context/workspace.d.ts.map +1 -0
  59. package/dist/context/workspace.js.map +1 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/marketplace/client.d.ts.map +1 -0
  63. package/dist/marketplace/client.js.map +1 -0
  64. package/dist/memory/files.d.ts.map +1 -0
  65. package/dist/memory/files.js.map +1 -0
  66. package/dist/memory/service.d.ts +2 -1
  67. package/dist/memory/service.d.ts.map +1 -0
  68. package/dist/memory/service.js +1 -0
  69. package/dist/memory/service.js.map +1 -0
  70. package/dist/repl/auto-save.d.ts +14 -0
  71. package/dist/repl/auto-save.d.ts.map +1 -0
  72. package/dist/repl/auto-save.js +101 -0
  73. package/dist/repl/auto-save.js.map +1 -0
  74. package/dist/repl/repl.d.ts.map +1 -0
  75. package/dist/repl/repl.js +247 -2
  76. package/dist/repl/repl.js.map +1 -0
  77. package/dist/skills/args.d.ts.map +1 -0
  78. package/dist/skills/args.js.map +1 -0
  79. package/dist/skills/frontmatter.d.ts.map +1 -0
  80. package/dist/skills/frontmatter.js.map +1 -0
  81. package/dist/skills/loader.d.ts.map +1 -0
  82. package/dist/skills/loader.js.map +1 -0
  83. package/dist/skills/registry.d.ts.map +1 -0
  84. package/dist/skills/registry.js.map +1 -0
  85. package/dist/skills/signing/signer.d.ts.map +1 -0
  86. package/dist/skills/signing/signer.js.map +1 -0
  87. package/dist/skills/trust.d.ts.map +1 -0
  88. package/dist/skills/trust.js.map +1 -0
  89. package/dist/telemetry/logger.d.ts.map +1 -0
  90. package/dist/telemetry/logger.js.map +1 -0
  91. package/dist/tools/permissions.d.ts.map +1 -0
  92. package/dist/tools/permissions.js.map +1 -0
  93. package/dist/tools/protocol.d.ts.map +1 -0
  94. package/dist/tools/protocol.js.map +1 -0
  95. package/dist/tools/registry.d.ts.map +1 -0
  96. package/dist/tools/registry.js.map +1 -0
  97. package/dist/tools/sandbox/docker.d.ts.map +1 -0
  98. package/dist/tools/sandbox/docker.js.map +1 -0
  99. package/dist/tools/sandbox/index.d.ts.map +1 -0
  100. package/dist/tools/sandbox/index.js.map +1 -0
  101. package/dist/tools/sanitize.d.ts.map +1 -0
  102. package/dist/tools/sanitize.js.map +1 -0
  103. package/dist/tools/tools/ask-user.d.ts.map +1 -0
  104. package/dist/tools/tools/ask-user.js.map +1 -0
  105. package/dist/tools/tools/bash.d.ts.map +1 -0
  106. package/dist/tools/tools/bash.js +52 -1
  107. package/dist/tools/tools/bash.js.map +1 -0
  108. package/dist/tools/tools/edit.d.ts.map +1 -0
  109. package/dist/tools/tools/edit.js +1 -0
  110. package/dist/tools/tools/edit.js.map +1 -0
  111. package/dist/tools/tools/glob.d.ts.map +1 -0
  112. package/dist/tools/tools/glob.js.map +1 -0
  113. package/dist/tools/tools/grep.d.ts.map +1 -0
  114. package/dist/tools/tools/grep.js +6 -8
  115. package/dist/tools/tools/grep.js.map +1 -0
  116. package/dist/tools/tools/read.d.ts.map +1 -0
  117. package/dist/tools/tools/read.js.map +1 -0
  118. package/dist/tools/tools/web-fetch.d.ts.map +1 -0
  119. package/dist/tools/tools/web-fetch.js.map +1 -0
  120. package/dist/tools/tools/write.d.ts.map +1 -0
  121. package/dist/tools/tools/write.js.map +1 -0
  122. package/dist/tools/validation.d.ts.map +1 -0
  123. package/dist/tools/validation.js.map +1 -0
  124. package/dist/ui/banner.d.ts.map +1 -0
  125. package/dist/ui/banner.js.map +1 -0
  126. package/dist/utils/diff.d.ts +38 -0
  127. package/dist/utils/diff.d.ts.map +1 -0
  128. package/dist/utils/diff.js +184 -0
  129. package/dist/utils/diff.js.map +1 -0
  130. package/dist/utils/errors.d.ts +32 -0
  131. package/dist/utils/errors.d.ts.map +1 -0
  132. package/dist/utils/errors.js +72 -0
  133. package/dist/utils/errors.js.map +1 -0
  134. package/dist/utils/ignore.d.ts +22 -0
  135. package/dist/utils/ignore.d.ts.map +1 -0
  136. package/dist/utils/ignore.js +205 -0
  137. package/dist/utils/ignore.js.map +1 -0
  138. package/dist/utils/input-history.d.ts +37 -0
  139. package/dist/utils/input-history.d.ts.map +1 -0
  140. package/dist/utils/input-history.js +142 -0
  141. package/dist/utils/input-history.js.map +1 -0
  142. package/dist/utils/markdown.d.ts.map +1 -0
  143. package/dist/utils/markdown.js.map +1 -0
  144. package/dist/utils/rate-limit.d.ts +36 -0
  145. package/dist/utils/rate-limit.d.ts.map +1 -0
  146. package/dist/utils/rate-limit.js +71 -0
  147. package/dist/utils/rate-limit.js.map +1 -0
  148. package/dist/utils/retry.d.ts +26 -0
  149. package/dist/utils/retry.d.ts.map +1 -0
  150. package/dist/utils/retry.js +96 -0
  151. package/dist/utils/retry.js.map +1 -0
  152. package/dist/utils/spinner.d.ts +12 -0
  153. package/dist/utils/spinner.d.ts.map +1 -0
  154. package/dist/utils/spinner.js +51 -0
  155. package/dist/utils/spinner.js.map +1 -0
  156. package/dist/utils/stats.d.ts +29 -0
  157. package/dist/utils/stats.d.ts.map +1 -0
  158. package/dist/utils/stats.js +95 -0
  159. package/dist/utils/stats.js.map +1 -0
  160. package/dist/utils/streaming.d.ts.map +1 -0
  161. package/dist/utils/streaming.js.map +1 -0
  162. package/dist/utils/tokens.d.ts.map +1 -0
  163. package/dist/utils/tokens.js.map +1 -0
  164. package/dist/utils/undo-tracker.d.ts +37 -0
  165. package/dist/utils/undo-tracker.d.ts.map +1 -0
  166. package/dist/utils/undo-tracker.js +118 -0
  167. package/dist/utils/undo-tracker.js.map +1 -0
  168. package/dist/version.d.ts.map +1 -0
  169. package/dist/version.js.map +1 -0
  170. package/package.json +61 -45
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/utils/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Structured error types for the CLI.
3
+ * Provides consistent error handling, categorization, and user-friendly messages.
4
+ */
5
+ export declare enum ErrorCategory {
6
+ /** Network / API connectivity issues */
7
+ Network = "network",
8
+ /** Authentication / API key issues */
9
+ Auth = "auth",
10
+ /** Invalid user input */
11
+ Validation = "validation",
12
+ /** Tool execution failures */
13
+ Tool = "tool",
14
+ /** File system errors */
15
+ FileSystem = "filesystem",
16
+ /** Rate limiting / quota issues */
17
+ RateLimit = "rate_limit",
18
+ /** Internal errors (bugs) */
19
+ Internal = "internal"
20
+ }
21
+ export declare class CLIError extends Error {
22
+ readonly category: ErrorCategory;
23
+ readonly recoverable: boolean;
24
+ readonly suggestion?: string;
25
+ constructor(message: string, category?: ErrorCategory, recoverable?: boolean, suggestion?: string);
26
+ format(): string;
27
+ }
28
+ /**
29
+ * Create a user-friendly error from a raw error.
30
+ */
31
+ export declare function wrapError(err: unknown, context?: string): CLIError;
32
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oBAAY,aAAa;IACvB,wCAAwC;IACxC,OAAO,YAAY;IACnB,sCAAsC;IACtC,IAAI,SAAS;IACb,yBAAyB;IACzB,UAAU,eAAe;IACzB,8BAA8B;IAC9B,IAAI,SAAS;IACb,yBAAyB;IACzB,UAAU,eAAe;IACzB,mCAAmC;IACnC,SAAS,eAAe;IACxB,6BAA6B;IAC7B,QAAQ,aAAa;CACtB;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,QAAQ,EAAE,aAAa,CAAA;IACvC,SAAgB,WAAW,EAAE,OAAO,CAAA;IACpC,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAA;gBAGjC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,aAAsC,EAChD,WAAW,UAAO,EAClB,UAAU,CAAC,EAAE,MAAM;IASrB,MAAM,IAAI,MAAM;CAOjB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAqDlE"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /**
3
+ * Structured error types for the CLI.
4
+ * Provides consistent error handling, categorization, and user-friendly messages.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CLIError = exports.ErrorCategory = void 0;
8
+ exports.wrapError = wrapError;
9
+ var ErrorCategory;
10
+ (function (ErrorCategory) {
11
+ /** Network / API connectivity issues */
12
+ ErrorCategory["Network"] = "network";
13
+ /** Authentication / API key issues */
14
+ ErrorCategory["Auth"] = "auth";
15
+ /** Invalid user input */
16
+ ErrorCategory["Validation"] = "validation";
17
+ /** Tool execution failures */
18
+ ErrorCategory["Tool"] = "tool";
19
+ /** File system errors */
20
+ ErrorCategory["FileSystem"] = "filesystem";
21
+ /** Rate limiting / quota issues */
22
+ ErrorCategory["RateLimit"] = "rate_limit";
23
+ /** Internal errors (bugs) */
24
+ ErrorCategory["Internal"] = "internal";
25
+ })(ErrorCategory || (exports.ErrorCategory = ErrorCategory = {}));
26
+ class CLIError extends Error {
27
+ category;
28
+ recoverable;
29
+ suggestion;
30
+ constructor(message, category = ErrorCategory.Internal, recoverable = true, suggestion) {
31
+ super(message);
32
+ this.name = "CLIError";
33
+ this.category = category;
34
+ this.recoverable = recoverable;
35
+ this.suggestion = suggestion;
36
+ }
37
+ format() {
38
+ const parts = [this.message];
39
+ if (this.suggestion) {
40
+ parts.push(` → ${this.suggestion}`);
41
+ }
42
+ return parts.join("\n");
43
+ }
44
+ }
45
+ exports.CLIError = CLIError;
46
+ /**
47
+ * Create a user-friendly error from a raw error.
48
+ */
49
+ function wrapError(err, context) {
50
+ if (err instanceof CLIError)
51
+ return err;
52
+ const msg = err instanceof Error ? err.message : String(err);
53
+ const contextStr = context ? `${context}: ` : "";
54
+ // Classify known error patterns
55
+ if (msg.includes("ECONNREFUSED") || msg.includes("ECONNRESET") || msg.includes("ETIMEDOUT")) {
56
+ return new CLIError(`${contextStr}${msg}`, ErrorCategory.Network, true, "Check your internet connection and try again.");
57
+ }
58
+ if (msg.includes("401") || msg.includes("Unauthorized") || msg.includes("Invalid API key")) {
59
+ return new CLIError(`${contextStr}${msg}`, ErrorCategory.Auth, true, "Run 'llmtune login' to configure your API key.");
60
+ }
61
+ if (msg.includes("429") || msg.includes("rate limit") || msg.includes("quota")) {
62
+ return new CLIError(`${contextStr}${msg}`, ErrorCategory.RateLimit, true, "Wait a moment and try again. Run 'llmtune balance' to check usage.");
63
+ }
64
+ if (msg.includes("ENOENT") || msg.includes("not found") || msg.includes("ENOENT")) {
65
+ return new CLIError(`${contextStr}${msg}`, ErrorCategory.FileSystem, true, "Check that the file path is correct.");
66
+ }
67
+ if (msg.includes("EACCES") || msg.includes("permission denied")) {
68
+ return new CLIError(`${contextStr}${msg}`, ErrorCategory.FileSystem, true, "Check file permissions.");
69
+ }
70
+ return new CLIError(`${contextStr}${msg}`, ErrorCategory.Internal, true);
71
+ }
72
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * .gitignore-aware file filtering.
3
+ * Skips files/directories that are typically ignored (node_modules, .git, etc.)
4
+ * and reads actual .gitignore patterns when available.
5
+ */
6
+ /**
7
+ * Check if a filename/path should be ignored based on default patterns.
8
+ * This is a fast check that doesn't require reading .gitignore.
9
+ */
10
+ export declare function isIgnoredByDefault(entryName: string, relativePath: string): boolean;
11
+ /**
12
+ * Try to read .gitignore patterns from the workspace root.
13
+ * Also reads .llmtuneignore if present for LLMTune-specific ignores.
14
+ * Returns a simple list of glob-like patterns.
15
+ */
16
+ export declare function readGitignorePatterns(workspaceRoot: string): string[];
17
+ /**
18
+ * Simple pattern matcher for .gitignore-style patterns.
19
+ * Handles: exact names, * globs, directory patterns (trailing /), negation (!)
20
+ */
21
+ export declare function matchesGitignorePattern(entryName: string, relativePath: string, pattern: string): boolean;
22
+ //# sourceMappingURL=ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/utils/ignore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2CH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAwCnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAgCrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CA2CT"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ /**
3
+ * .gitignore-aware file filtering.
4
+ * Skips files/directories that are typically ignored (node_modules, .git, etc.)
5
+ * and reads actual .gitignore patterns when available.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.isIgnoredByDefault = isIgnoredByDefault;
42
+ exports.readGitignorePatterns = readGitignorePatterns;
43
+ exports.matchesGitignorePattern = matchesGitignorePattern;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ /** Default patterns to always ignore (even without .gitignore) */
47
+ const DEFAULT_IGNORE_PATTERNS = [
48
+ "node_modules",
49
+ ".git",
50
+ ".svn",
51
+ ".hg",
52
+ "__pycache__",
53
+ ".DS_Store",
54
+ "Thumbs.db",
55
+ "*.pyc",
56
+ ".env",
57
+ ".env.local",
58
+ ".env.*.local",
59
+ "dist",
60
+ "build",
61
+ ".next",
62
+ ".nuxt",
63
+ ".cache",
64
+ ".parcel-cache",
65
+ "coverage",
66
+ ".nyc_output",
67
+ "*.min.js",
68
+ "*.min.css",
69
+ ".terraform",
70
+ "vendor",
71
+ "target",
72
+ "*.egg-info",
73
+ ".tox",
74
+ ".mypy_cache",
75
+ ".pytest_cache",
76
+ ".ruff_cache",
77
+ "Cargo.lock",
78
+ "package-lock.json",
79
+ "yarn.lock",
80
+ "pnpm-lock.yaml",
81
+ "bun.lockb",
82
+ ];
83
+ /**
84
+ * Check if a filename/path should be ignored based on default patterns.
85
+ * This is a fast check that doesn't require reading .gitignore.
86
+ */
87
+ function isIgnoredByDefault(entryName, relativePath) {
88
+ const normalized = relativePath.replace(/\\/g, "/");
89
+ for (const pattern of DEFAULT_IGNORE_PATTERNS) {
90
+ if (pattern.startsWith("*.")) {
91
+ // Extension pattern like *.pyc
92
+ if (entryName.endsWith(pattern.slice(1)))
93
+ return true;
94
+ }
95
+ else if (pattern.endsWith(".*")) {
96
+ // Suffix pattern like .env.*
97
+ }
98
+ else {
99
+ // Name or directory pattern
100
+ if (entryName === pattern)
101
+ return true;
102
+ if (normalized.includes(`/${pattern}/`))
103
+ return true;
104
+ }
105
+ }
106
+ // Skip hidden files/dirs (starting with .) except common config files
107
+ const ALLOWED_HIDDEN = new Set([
108
+ ".gitignore",
109
+ ".eslintrc",
110
+ ".prettierrc",
111
+ ".babelrc",
112
+ ".npmrc",
113
+ ".nvmrc",
114
+ ".python-version",
115
+ ".editorconfig",
116
+ ".llmtune",
117
+ "CLAUDE.md",
118
+ "LLMTUNE.md",
119
+ ".env.example",
120
+ ".env.template",
121
+ ".github",
122
+ ".vscode",
123
+ ]);
124
+ if (entryName.startsWith(".") && !ALLOWED_HIDDEN.has(entryName)) {
125
+ return true;
126
+ }
127
+ return false;
128
+ }
129
+ /**
130
+ * Try to read .gitignore patterns from the workspace root.
131
+ * Also reads .llmtuneignore if present for LLMTune-specific ignores.
132
+ * Returns a simple list of glob-like patterns.
133
+ */
134
+ function readGitignorePatterns(workspaceRoot) {
135
+ const patterns = [];
136
+ // Read root .gitignore
137
+ const gitignorePath = path.join(workspaceRoot, ".gitignore");
138
+ try {
139
+ const content = fs.readFileSync(gitignorePath, "utf-8");
140
+ patterns.push(...content
141
+ .split("\n")
142
+ .map((l) => l.trim())
143
+ .filter((l) => l && !l.startsWith("#")));
144
+ }
145
+ catch {
146
+ // No .gitignore — that's fine
147
+ }
148
+ // Read .llmtuneignore (LLMTune-specific ignore patterns)
149
+ const llmtuneIgnorePath = path.join(workspaceRoot, ".llmtuneignore");
150
+ try {
151
+ const content = fs.readFileSync(llmtuneIgnorePath, "utf-8");
152
+ patterns.push(...content
153
+ .split("\n")
154
+ .map((l) => l.trim())
155
+ .filter((l) => l && !l.startsWith("#")));
156
+ }
157
+ catch {
158
+ // No .llmtuneignore — that's fine
159
+ }
160
+ return patterns;
161
+ }
162
+ /**
163
+ * Simple pattern matcher for .gitignore-style patterns.
164
+ * Handles: exact names, * globs, directory patterns (trailing /), negation (!)
165
+ */
166
+ function matchesGitignorePattern(entryName, relativePath, pattern) {
167
+ if (!pattern || pattern.startsWith("#"))
168
+ return false;
169
+ // Negation — if this matches, the file is NOT ignored
170
+ if (pattern.startsWith("!")) {
171
+ return false; // Handled by caller
172
+ }
173
+ // Directory-only pattern
174
+ const isDirPattern = pattern.endsWith("/");
175
+ // Normalize
176
+ let p = pattern.replace(/\/$/, "").replace(/\\/g, "/");
177
+ const normalized = relativePath.replace(/\\/g, "/");
178
+ // Exact match
179
+ if (p === entryName || p === normalized)
180
+ return true;
181
+ // Wildcard at end: *.log, *.pyc, etc.
182
+ if (p.startsWith("*.")) {
183
+ const ext = p.slice(1); // .log, .pyc
184
+ if (entryName.endsWith(ext))
185
+ return true;
186
+ }
187
+ // Wildcard at start: *.test.ts → matches foo.test.ts
188
+ if (p.includes("*")) {
189
+ const regex = new RegExp("^" +
190
+ p
191
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&")
192
+ .replace(/\*/g, ".*")
193
+ .replace(/\?/g, ".") +
194
+ "$");
195
+ if (regex.test(entryName) || regex.test(normalized))
196
+ return true;
197
+ }
198
+ // If the pattern has no slashes, match anywhere in path
199
+ if (!p.includes("/")) {
200
+ if (normalized.split("/").includes(p))
201
+ return true;
202
+ }
203
+ return false;
204
+ }
205
+ //# sourceMappingURL=ignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../src/utils/ignore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Input history manager — enables UP/DOWN arrow navigation through
3
+ * previously entered user messages, like a shell.
4
+ */
5
+ export declare class InputHistory {
6
+ private entries;
7
+ private currentIndex;
8
+ constructor();
9
+ /**
10
+ * Add a new entry to the history. Duplicates of the last entry are ignored.
11
+ */
12
+ add(entry: string): void;
13
+ /**
14
+ * Move up in history (older entries). Returns the entry or undefined.
15
+ */
16
+ up(): string | undefined;
17
+ /**
18
+ * Move down in history (newer entries). Returns the entry or undefined.
19
+ * When at the bottom, returns undefined (blank line).
20
+ */
21
+ down(): string | undefined;
22
+ /**
23
+ * Reset navigation position to the end.
24
+ */
25
+ resetPosition(): void;
26
+ /**
27
+ * Search history for entries matching a prefix.
28
+ */
29
+ search(prefix: string): string[];
30
+ /**
31
+ * Get the last N entries.
32
+ */
33
+ recent(count?: number): string[];
34
+ private load;
35
+ private save;
36
+ }
37
+ //# sourceMappingURL=input-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-history.d.ts","sourceRoot":"","sources":["../../src/utils/input-history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,YAAY,CAAa;;IAMjC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoBxB;;OAEG;IACH,EAAE,IAAI,MAAM,GAAG,SAAS;IAQxB;;;OAGG;IACH,IAAI,IAAI,MAAM,GAAG,SAAS;IAU1B;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAKhC;;OAEG;IACH,MAAM,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,EAAE;IAIpC,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,IAAI;CAWb"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * Input history manager — enables UP/DOWN arrow navigation through
4
+ * previously entered user messages, like a shell.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.InputHistory = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ const MAX_HISTORY = 500;
45
+ const HISTORY_FILE = path.join(os.homedir(), ".llmtune", "input-history.json");
46
+ class InputHistory {
47
+ entries = [];
48
+ currentIndex = -1;
49
+ constructor() {
50
+ this.load();
51
+ }
52
+ /**
53
+ * Add a new entry to the history. Duplicates of the last entry are ignored.
54
+ */
55
+ add(entry) {
56
+ const trimmed = entry.trim();
57
+ if (!trimmed)
58
+ return;
59
+ // Don't duplicate the most recent entry
60
+ if (this.entries.length > 0 && this.entries[this.entries.length - 1] === trimmed) {
61
+ return;
62
+ }
63
+ this.entries.push(trimmed);
64
+ // Trim old entries
65
+ if (this.entries.length > MAX_HISTORY) {
66
+ this.entries = this.entries.slice(-MAX_HISTORY);
67
+ }
68
+ this.currentIndex = this.entries.length; // Reset to "after last"
69
+ this.save();
70
+ }
71
+ /**
72
+ * Move up in history (older entries). Returns the entry or undefined.
73
+ */
74
+ up() {
75
+ if (this.entries.length === 0)
76
+ return undefined;
77
+ if (this.currentIndex > 0) {
78
+ this.currentIndex--;
79
+ }
80
+ return this.entries[this.currentIndex];
81
+ }
82
+ /**
83
+ * Move down in history (newer entries). Returns the entry or undefined.
84
+ * When at the bottom, returns undefined (blank line).
85
+ */
86
+ down() {
87
+ if (this.currentIndex < this.entries.length - 1) {
88
+ this.currentIndex++;
89
+ return this.entries[this.currentIndex];
90
+ }
91
+ // At the bottom — return blank
92
+ this.currentIndex = this.entries.length;
93
+ return undefined;
94
+ }
95
+ /**
96
+ * Reset navigation position to the end.
97
+ */
98
+ resetPosition() {
99
+ this.currentIndex = this.entries.length;
100
+ }
101
+ /**
102
+ * Search history for entries matching a prefix.
103
+ */
104
+ search(prefix) {
105
+ const lower = prefix.toLowerCase();
106
+ return this.entries.filter((e) => e.toLowerCase().startsWith(lower)).reverse();
107
+ }
108
+ /**
109
+ * Get the last N entries.
110
+ */
111
+ recent(count = 10) {
112
+ return this.entries.slice(-count);
113
+ }
114
+ load() {
115
+ try {
116
+ if (fs.existsSync(HISTORY_FILE)) {
117
+ const data = JSON.parse(fs.readFileSync(HISTORY_FILE, "utf-8"));
118
+ if (Array.isArray(data)) {
119
+ this.entries = data.filter((e) => typeof e === "string");
120
+ this.currentIndex = this.entries.length;
121
+ }
122
+ }
123
+ }
124
+ catch {
125
+ this.entries = [];
126
+ }
127
+ }
128
+ save() {
129
+ try {
130
+ const dir = path.dirname(HISTORY_FILE);
131
+ if (!fs.existsSync(dir)) {
132
+ fs.mkdirSync(dir, { recursive: true });
133
+ }
134
+ fs.writeFileSync(HISTORY_FILE, JSON.stringify(this.entries), "utf-8");
135
+ }
136
+ catch {
137
+ // Silently fail — history is non-critical
138
+ }
139
+ }
140
+ }
141
+ exports.InputHistory = InputHistory;
142
+ //# sourceMappingURL=input-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-history.js","sourceRoot":"","sources":["../../src/utils/input-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAMA,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAS5E;AAqDD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOvE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAavE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Simple rate limiter for tool calls.
3
+ * Prevents runaway agent loops from hammering the system.
4
+ */
5
+ export interface RateLimiterConfig {
6
+ /** Maximum number of calls in the window */
7
+ maxCalls: number;
8
+ /** Time window in milliseconds */
9
+ windowMs: number;
10
+ /** Tool-specific overrides */
11
+ perTool?: Record<string, {
12
+ maxCalls: number;
13
+ windowMs: number;
14
+ }>;
15
+ }
16
+ export declare class RateLimiter {
17
+ private calls;
18
+ private config;
19
+ constructor(config?: Partial<RateLimiterConfig>);
20
+ /**
21
+ * Check if a tool call is allowed. Returns true if allowed, false if rate limited.
22
+ */
23
+ isAllowed(toolName: string): boolean;
24
+ /**
25
+ * Get the number of remaining calls for a tool in the current window.
26
+ */
27
+ remaining(toolName: string): number;
28
+ /**
29
+ * Reset rate limit state (e.g., on new session).
30
+ */
31
+ reset(): void;
32
+ private getRecords;
33
+ private getMaxCalls;
34
+ private getWindowMs;
35
+ }
36
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACjE;AAiBD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAI/C;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAoBpC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASnC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;CAGpB"}