gencode-ai 0.2.0 → 0.4.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 (218) hide show
  1. package/RELEASE_NOTES_v0.4.0.md +140 -0
  2. package/dist/agent/agent.d.ts +26 -4
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +316 -57
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/types.d.ts +20 -2
  7. package/dist/agent/types.d.ts.map +1 -1
  8. package/dist/checkpointing/checkpoint-manager.d.ts +24 -0
  9. package/dist/checkpointing/checkpoint-manager.d.ts.map +1 -1
  10. package/dist/checkpointing/checkpoint-manager.js +28 -0
  11. package/dist/checkpointing/checkpoint-manager.js.map +1 -1
  12. package/dist/cli/components/App.d.ts +8 -0
  13. package/dist/cli/components/App.d.ts.map +1 -1
  14. package/dist/cli/components/App.js +493 -45
  15. package/dist/cli/components/App.js.map +1 -1
  16. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
  17. package/dist/cli/components/CommandSuggestions.js +2 -0
  18. package/dist/cli/components/CommandSuggestions.js.map +1 -1
  19. package/dist/cli/components/Header.d.ts +6 -1
  20. package/dist/cli/components/Header.d.ts.map +1 -1
  21. package/dist/cli/components/Header.js +3 -3
  22. package/dist/cli/components/Header.js.map +1 -1
  23. package/dist/cli/components/Messages.d.ts.map +1 -1
  24. package/dist/cli/components/Messages.js +8 -10
  25. package/dist/cli/components/Messages.js.map +1 -1
  26. package/dist/cli/components/ModelSelector.d.ts +4 -3
  27. package/dist/cli/components/ModelSelector.d.ts.map +1 -1
  28. package/dist/cli/components/ModelSelector.js +54 -37
  29. package/dist/cli/components/ModelSelector.js.map +1 -1
  30. package/dist/cli/components/ProviderManager.d.ts +2 -2
  31. package/dist/cli/components/ProviderManager.d.ts.map +1 -1
  32. package/dist/cli/components/ProviderManager.js +137 -156
  33. package/dist/cli/components/ProviderManager.js.map +1 -1
  34. package/dist/cli/index.js +33 -15
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/config/index.d.ts +2 -2
  37. package/dist/config/index.d.ts.map +1 -1
  38. package/dist/config/index.js +1 -1
  39. package/dist/config/index.js.map +1 -1
  40. package/dist/config/levels.d.ts +5 -5
  41. package/dist/config/levels.d.ts.map +1 -1
  42. package/dist/config/levels.js +20 -20
  43. package/dist/config/levels.js.map +1 -1
  44. package/dist/config/merger.js +1 -1
  45. package/dist/config/merger.js.map +1 -1
  46. package/dist/config/providers-config.d.ts +8 -5
  47. package/dist/config/providers-config.d.ts.map +1 -1
  48. package/dist/config/providers-config.js +19 -22
  49. package/dist/config/providers-config.js.map +1 -1
  50. package/dist/config/test-utils.d.ts +2 -2
  51. package/dist/config/test-utils.d.ts.map +1 -1
  52. package/dist/config/test-utils.js +4 -4
  53. package/dist/config/test-utils.js.map +1 -1
  54. package/dist/config/types.d.ts +42 -17
  55. package/dist/config/types.d.ts.map +1 -1
  56. package/dist/config/types.js +14 -14
  57. package/dist/config/types.js.map +1 -1
  58. package/dist/index.d.ts +2 -2
  59. package/dist/index.js +2 -2
  60. package/dist/input/history-manager.d.ts +78 -0
  61. package/dist/input/history-manager.d.ts.map +1 -0
  62. package/dist/input/history-manager.js +224 -0
  63. package/dist/input/history-manager.js.map +1 -0
  64. package/dist/input/index.d.ts +6 -0
  65. package/dist/input/index.d.ts.map +1 -0
  66. package/dist/input/index.js +5 -0
  67. package/dist/input/index.js.map +1 -0
  68. package/dist/memory/memory-manager.d.ts +25 -12
  69. package/dist/memory/memory-manager.d.ts.map +1 -1
  70. package/dist/memory/memory-manager.js +241 -112
  71. package/dist/memory/memory-manager.js.map +1 -1
  72. package/dist/memory/test-utils.d.ts +1 -1
  73. package/dist/memory/test-utils.d.ts.map +1 -1
  74. package/dist/memory/test-utils.js +3 -3
  75. package/dist/memory/test-utils.js.map +1 -1
  76. package/dist/memory/types.d.ts +20 -10
  77. package/dist/memory/types.d.ts.map +1 -1
  78. package/dist/memory/types.js +13 -13
  79. package/dist/memory/types.js.map +1 -1
  80. package/dist/migration/migrate.d.ts +24 -0
  81. package/dist/migration/migrate.d.ts.map +1 -0
  82. package/dist/migration/migrate.js +164 -0
  83. package/dist/migration/migrate.js.map +1 -0
  84. package/dist/permissions/persistence.d.ts +2 -2
  85. package/dist/permissions/persistence.js +4 -4
  86. package/dist/permissions/persistence.js.map +1 -1
  87. package/dist/planning/plan-file.d.ts +1 -1
  88. package/dist/planning/plan-file.js +2 -2
  89. package/dist/planning/plan-file.js.map +1 -1
  90. package/dist/prompts/index.d.ts +5 -4
  91. package/dist/prompts/index.d.ts.map +1 -1
  92. package/dist/prompts/index.js +13 -10
  93. package/dist/prompts/index.js.map +1 -1
  94. package/dist/providers/anthropic.d.ts +2 -1
  95. package/dist/providers/anthropic.d.ts.map +1 -1
  96. package/dist/providers/anthropic.js +7 -0
  97. package/dist/providers/anthropic.js.map +1 -1
  98. package/dist/providers/gemini.d.ts +2 -1
  99. package/dist/providers/gemini.d.ts.map +1 -1
  100. package/dist/providers/gemini.js +40 -2
  101. package/dist/providers/gemini.js.map +1 -1
  102. package/dist/providers/google.d.ts +22 -0
  103. package/dist/providers/google.d.ts.map +1 -0
  104. package/dist/providers/google.js +297 -0
  105. package/dist/providers/google.js.map +1 -0
  106. package/dist/providers/index.d.ts +22 -12
  107. package/dist/providers/index.d.ts.map +1 -1
  108. package/dist/providers/index.js +56 -32
  109. package/dist/providers/index.js.map +1 -1
  110. package/dist/providers/openai.d.ts +2 -1
  111. package/dist/providers/openai.d.ts.map +1 -1
  112. package/dist/providers/openai.js +13 -0
  113. package/dist/providers/openai.js.map +1 -1
  114. package/dist/providers/registry.d.ts +48 -34
  115. package/dist/providers/registry.d.ts.map +1 -1
  116. package/dist/providers/registry.js +72 -88
  117. package/dist/providers/registry.js.map +1 -1
  118. package/dist/providers/store.d.ts +43 -17
  119. package/dist/providers/store.d.ts.map +1 -1
  120. package/dist/providers/store.js +112 -19
  121. package/dist/providers/store.js.map +1 -1
  122. package/dist/providers/types.d.ts +52 -3
  123. package/dist/providers/types.d.ts.map +1 -1
  124. package/dist/providers/vertex-ai.d.ts +15 -7
  125. package/dist/providers/vertex-ai.d.ts.map +1 -1
  126. package/dist/providers/vertex-ai.js +46 -13
  127. package/dist/providers/vertex-ai.js.map +1 -1
  128. package/dist/session/compression/engine.d.ts +109 -0
  129. package/dist/session/compression/engine.d.ts.map +1 -0
  130. package/dist/session/compression/engine.js +311 -0
  131. package/dist/session/compression/engine.js.map +1 -0
  132. package/dist/session/compression/index.d.ts +12 -0
  133. package/dist/session/compression/index.d.ts.map +1 -0
  134. package/dist/session/compression/index.js +11 -0
  135. package/dist/session/compression/index.js.map +1 -0
  136. package/dist/session/compression/types.d.ts +90 -0
  137. package/dist/session/compression/types.d.ts.map +1 -0
  138. package/dist/session/compression/types.js +17 -0
  139. package/dist/session/compression/types.js.map +1 -0
  140. package/dist/session/manager.d.ts +64 -3
  141. package/dist/session/manager.d.ts.map +1 -1
  142. package/dist/session/manager.js +254 -2
  143. package/dist/session/manager.js.map +1 -1
  144. package/dist/session/types.d.ts +16 -0
  145. package/dist/session/types.d.ts.map +1 -1
  146. package/dist/session/types.js +1 -1
  147. package/dist/session/types.js.map +1 -1
  148. package/docs/README.md +1 -0
  149. package/docs/config-system-comparison.md +50 -50
  150. package/docs/cost-tracking-comparison.md +2 -2
  151. package/docs/diagrams/compression-decision.mmd +30 -0
  152. package/docs/diagrams/compression-workflow.mmd +54 -0
  153. package/docs/diagrams/layer1-pruning.mmd +45 -0
  154. package/docs/diagrams/layer2-compaction.mmd +42 -0
  155. package/docs/memory-system.md +124 -31
  156. package/docs/permissions.md +2 -2
  157. package/docs/proposals/0006-memory-system.md +4 -4
  158. package/docs/proposals/0007-context-management.md +252 -2
  159. package/docs/proposals/0008-checkpointing.md +109 -2
  160. package/docs/proposals/0011-custom-commands.md +2 -1
  161. package/docs/proposals/0021-skills-system.md +2 -1
  162. package/docs/proposals/0023-permission-enhancements.md +2 -2
  163. package/docs/proposals/0033-enterprise-deployment.md +1 -1
  164. package/docs/proposals/0041-configuration-system.md +17 -19
  165. package/docs/proposals/0042-prompt-optimization.md +17 -9
  166. package/docs/proposals/README.md +8 -7
  167. package/docs/providers.md +96 -11
  168. package/docs/session-compression.md +695 -0
  169. package/examples/agent-demo.ts +23 -1
  170. package/examples/basic.ts +3 -3
  171. package/package.json +2 -2
  172. package/scripts/migrate.ts +449 -0
  173. package/src/agent/agent.ts +365 -61
  174. package/src/agent/types.ts +24 -2
  175. package/src/checkpointing/checkpoint-manager.ts +48 -0
  176. package/src/cli/components/App.tsx +570 -42
  177. package/src/cli/components/CommandSuggestions.tsx +2 -0
  178. package/src/cli/components/Header.tsx +16 -1
  179. package/src/cli/components/Messages.tsx +21 -15
  180. package/src/cli/components/ModelSelector.tsx +62 -43
  181. package/src/cli/components/ProviderManager.tsx +278 -323
  182. package/src/cli/index.tsx +38 -18
  183. package/src/config/index.ts +5 -3
  184. package/src/config/levels.test.ts +22 -22
  185. package/src/config/levels.ts +22 -22
  186. package/src/config/loader.test.ts +14 -14
  187. package/src/config/manager.test.ts +19 -19
  188. package/src/config/merger.test.ts +23 -23
  189. package/src/config/merger.ts +1 -1
  190. package/src/config/providers-config.ts +23 -21
  191. package/src/config/test-utils.ts +6 -6
  192. package/src/config/types.ts +55 -20
  193. package/src/index.ts +3 -3
  194. package/src/input/history-manager.ts +289 -0
  195. package/src/input/index.ts +6 -0
  196. package/src/memory/memory-manager.test.ts +242 -24
  197. package/src/memory/memory-manager.ts +270 -141
  198. package/src/memory/test-utils.ts +4 -4
  199. package/src/memory/types.ts +28 -17
  200. package/src/permissions/persistence.ts +4 -4
  201. package/src/planning/plan-file.ts +2 -2
  202. package/src/prompts/index.test.ts +2 -1
  203. package/src/prompts/index.ts +15 -11
  204. package/src/providers/anthropic.ts +9 -0
  205. package/src/providers/{gemini.ts → google.ts} +75 -15
  206. package/src/providers/index.ts +85 -42
  207. package/src/providers/openai.ts +16 -0
  208. package/src/providers/registry.ts +116 -111
  209. package/src/providers/store.ts +130 -28
  210. package/src/providers/types.ts +65 -3
  211. package/src/providers/vertex-ai.ts +49 -13
  212. package/src/session/compression/engine.ts +406 -0
  213. package/src/session/compression/index.ts +18 -0
  214. package/src/session/compression/types.ts +102 -0
  215. package/src/session/manager.ts +326 -3
  216. package/src/session/types.ts +22 -1
  217. package/tests/input-history-manager.test.ts +335 -0
  218. package/tests/session-checkpoint-persistence.test.ts +198 -0
@@ -2,14 +2,17 @@
2
2
  * Configuration Types - Multi-level configuration system (Claude Code compatible)
3
3
  *
4
4
  * Configuration hierarchy (priority from low to high):
5
- * 1. User Level: ~/.gencode/ + ~/.claude/ (merged, gencode wins)
6
- * 2. Extra Dirs: GENCODE_CONFIG_DIRS environment variable
7
- * 3. Project Level: .gencode/ + .claude/ (merged, gencode wins)
8
- * 4. Local Level: .gencode/*.local.* + .claude/*.local.* (merged, gencode wins)
5
+ * 1. User Level: ~/.gen/ + ~/.claude/ (merged, gen wins)
6
+ * 2. Extra Dirs: GEN_CONFIG environment variable
7
+ * 3. Project Level: .gen/ + .claude/ (merged, gen wins)
8
+ * 4. Local Level: .gen/*.local.* + .claude/*.local.* (merged, gen wins)
9
9
  * 5. CLI Arguments: Command line overrides
10
10
  * 6. Managed Level: System-wide enforced settings (cannot be overridden)
11
11
  */
12
- export type ProviderName = 'openai' | 'anthropic' | 'gemini' | 'vertex-ai';
12
+ export type Provider = 'openai' | 'anthropic' | 'google';
13
+ export type AuthMethod = 'api_key' | 'vertex' | 'bedrock' | 'azure' | 'oauth';
14
+ /** @deprecated Use Provider instead */
15
+ export type ProviderName = Provider;
13
16
  /**
14
17
  * Permission rules for tools
15
18
  */
@@ -24,7 +27,7 @@ export interface PermissionRules {
24
27
  */
25
28
  export interface Settings {
26
29
  model?: string;
27
- provider?: ProviderName;
30
+ provider?: Provider;
28
31
  permissions?: PermissionRules;
29
32
  theme?: string;
30
33
  language?: string;
@@ -36,6 +39,26 @@ export interface Settings {
36
39
  };
37
40
  enabledPlugins?: Record<string, boolean>;
38
41
  extraKnownMarketplaces?: Record<string, unknown>;
42
+ memoryMergeStrategy?: 'fallback' | 'both' | 'gen-only' | 'claude-only';
43
+ compression?: {
44
+ enabled?: boolean;
45
+ enablePruning?: boolean;
46
+ enableCompaction?: boolean;
47
+ pruneMinimum?: number;
48
+ pruneProtect?: number;
49
+ reservedOutputTokens?: number;
50
+ model?: string;
51
+ };
52
+ inputHistory?: {
53
+ enabled?: boolean;
54
+ maxSize?: number;
55
+ savePath?: string;
56
+ deduplicateConsecutive?: boolean;
57
+ };
58
+ input?: {
59
+ multilineEnabled?: boolean;
60
+ ctrlCClear?: boolean;
61
+ };
39
62
  strictKnownMarketplaces?: unknown[];
40
63
  [key: string]: unknown;
41
64
  }
@@ -58,7 +81,7 @@ export interface ConfigLevel {
58
81
  export interface ConfigSource {
59
82
  level: ConfigLevelType;
60
83
  path: string;
61
- namespace: 'gencode' | 'claude' | 'extra';
84
+ namespace: 'gen' | 'claude' | 'extra';
62
85
  settings: Settings;
63
86
  }
64
87
  /**
@@ -69,31 +92,32 @@ export interface MergedConfig {
69
92
  sources: ConfigSource[];
70
93
  managedDeny: string[];
71
94
  }
72
- export declare const GENCODE_CONFIG_DIRS_ENV = "GENCODE_CONFIG_DIRS";
95
+ export declare const GEN_CONFIG_ENV = "GEN_CONFIG";
73
96
  export declare const SETTINGS_FILE_NAME = "settings.json";
74
97
  export declare const SETTINGS_LOCAL_FILE_NAME = "settings.local.json";
75
98
  export declare const MANAGED_SETTINGS_FILE_NAME = "managed-settings.json";
76
99
  export declare const PROVIDERS_FILE_NAME = "providers.json";
77
- export declare const GENCODE_DIR = ".gencode";
100
+ export declare const GEN_DIR = ".gen";
78
101
  export declare const CLAUDE_DIR = ".claude";
79
- export declare const USER_GENCODE_DIR: string;
102
+ export declare const USER_GEN_DIR: string;
80
103
  export declare const USER_CLAUDE_DIR: string;
81
104
  export declare function getManagedPaths(): {
82
- gencode: string;
105
+ gen: string;
83
106
  claude: string;
84
107
  };
85
108
  export interface SettingsManagerOptions {
86
109
  settingsDir?: string;
87
110
  }
88
- export declare const DEFAULT_SETTINGS_DIR = "~/.claude";
89
- export declare const PROJECT_SETTINGS_DIR = ".claude";
90
- export declare const FALLBACK_SETTINGS_DIR = "~/.gencode";
91
- export declare const FALLBACK_PROJECT_DIR = ".gencode";
111
+ export declare const DEFAULT_SETTINGS_DIR = "~/.gen";
112
+ export declare const PROJECT_SETTINGS_DIR = ".gen";
113
+ export declare const FALLBACK_SETTINGS_DIR = "~/.claude";
114
+ export declare const FALLBACK_PROJECT_DIR = ".claude";
92
115
  /**
93
116
  * Provider connection info
94
117
  */
95
118
  export interface ProviderConnection {
96
- method: 'api_key' | 'vertex' | 'oauth';
119
+ authMethod: AuthMethod;
120
+ method?: string;
97
121
  connectedAt: string;
98
122
  }
99
123
  /**
@@ -106,13 +130,14 @@ export interface CachedModel {
106
130
  }
107
131
  /**
108
132
  * Cached models for a provider
133
+ * Note: provider and authMethod are encoded in the key as "provider:authMethod"
109
134
  */
110
135
  export interface ProviderModels {
111
136
  cachedAt: string;
112
137
  list: CachedModel[];
113
138
  }
114
139
  /**
115
- * Providers config file structure (~/.gencode/providers.json)
140
+ * Providers config file structure (~/.gen/providers.json)
116
141
  */
117
142
  export interface ProvidersConfig {
118
143
  connections: Record<string, ProviderConnection>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@
2
2
  * Configuration Types - Multi-level configuration system (Claude Code compatible)
3
3
  *
4
4
  * Configuration hierarchy (priority from low to high):
5
- * 1. User Level: ~/.gencode/ + ~/.claude/ (merged, gencode wins)
6
- * 2. Extra Dirs: GENCODE_CONFIG_DIRS environment variable
7
- * 3. Project Level: .gencode/ + .claude/ (merged, gencode wins)
8
- * 4. Local Level: .gencode/*.local.* + .claude/*.local.* (merged, gencode wins)
5
+ * 1. User Level: ~/.gen/ + ~/.claude/ (merged, gen wins)
6
+ * 2. Extra Dirs: GEN_CONFIG environment variable
7
+ * 3. Project Level: .gen/ + .claude/ (merged, gen wins)
8
+ * 4. Local Level: .gen/*.local.* + .claude/*.local.* (merged, gen wins)
9
9
  * 5. CLI Arguments: Command line overrides
10
10
  * 6. Managed Level: System-wide enforced settings (cannot be overridden)
11
11
  */
@@ -14,44 +14,44 @@ import * as path from 'path';
14
14
  // =============================================================================
15
15
  // Constants
16
16
  // =============================================================================
17
- export const GENCODE_CONFIG_DIRS_ENV = 'GENCODE_CONFIG_DIRS';
17
+ export const GEN_CONFIG_ENV = 'GEN_CONFIG';
18
18
  // File names
19
19
  export const SETTINGS_FILE_NAME = 'settings.json';
20
20
  export const SETTINGS_LOCAL_FILE_NAME = 'settings.local.json';
21
21
  export const MANAGED_SETTINGS_FILE_NAME = 'managed-settings.json';
22
22
  export const PROVIDERS_FILE_NAME = 'providers.json';
23
23
  // Directory names
24
- export const GENCODE_DIR = '.gencode';
24
+ export const GEN_DIR = '.gen';
25
25
  export const CLAUDE_DIR = '.claude';
26
26
  // User directory paths
27
- export const USER_GENCODE_DIR = path.join(os.homedir(), GENCODE_DIR);
27
+ export const USER_GEN_DIR = path.join(os.homedir(), GEN_DIR);
28
28
  export const USER_CLAUDE_DIR = path.join(os.homedir(), CLAUDE_DIR);
29
29
  // Managed settings locations by platform
30
30
  export function getManagedPaths() {
31
31
  const platform = os.platform();
32
32
  if (platform === 'darwin') {
33
33
  return {
34
- gencode: '/Library/Application Support/GenCode',
34
+ gen: '/Library/Application Support/GenCode',
35
35
  claude: '/Library/Application Support/ClaudeCode',
36
36
  };
37
37
  }
38
38
  else if (platform === 'win32') {
39
39
  return {
40
- gencode: 'C:\\Program Files\\GenCode',
40
+ gen: 'C:\\Program Files\\GenCode',
41
41
  claude: 'C:\\Program Files\\ClaudeCode',
42
42
  };
43
43
  }
44
44
  else {
45
45
  // Linux and other Unix-like systems
46
46
  return {
47
- gencode: '/etc/gencode',
47
+ gen: '/etc/gencode',
48
48
  claude: '/etc/claude-code',
49
49
  };
50
50
  }
51
51
  }
52
52
  // Legacy exports
53
- export const DEFAULT_SETTINGS_DIR = '~/.claude';
54
- export const PROJECT_SETTINGS_DIR = '.claude';
55
- export const FALLBACK_SETTINGS_DIR = '~/.gencode';
56
- export const FALLBACK_PROJECT_DIR = '.gencode';
53
+ export const DEFAULT_SETTINGS_DIR = '~/.gen';
54
+ export const PROJECT_SETTINGS_DIR = '.gen';
55
+ export const FALLBACK_SETTINGS_DIR = '~/.claude';
56
+ export const FALLBACK_PROJECT_DIR = '.claude';
57
57
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAgG7B,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D,aAAa;AACb,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AAEpC,uBAAuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAEnE,yCAAyC;AACzC,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,sCAAsC;YAC/C,MAAM,EAAE,yCAAyC;SAClD,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,4BAA4B;YACrC,MAAM,EAAE,+BAA+B;SACxC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,kBAAkB;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC;AAUD,iBAAiB;AACjB,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAClD,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAiI7B,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C,aAAa;AACb,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC;AAC9B,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AAEpC,uBAAuB;AACvB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAEnE,yCAAyC;AACzC,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO;YACL,GAAG,EAAE,sCAAsC;YAC3C,MAAM,EAAE,yCAAyC;SAClD,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO;YACL,GAAG,EAAE,4BAA4B;YACjC,MAAM,EAAE,+BAA+B;SACxC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,OAAO;YACL,GAAG,EAAE,cAAc;YACnB,MAAM,EAAE,kBAAkB;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC;AAUD,iBAAiB;AACjB,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,9 +2,9 @@
2
2
  * Recode - Multi-LLM Agent SDK
3
3
  *
4
4
  * A unified SDK for building AI agents with support for
5
- * OpenAI, Anthropic, and Google Gemini models.
5
+ * OpenAI, Anthropic, and Google models.
6
6
  */
7
- export { type LLMProvider, type Message, type MessageRole, type MessageContent, type TextContent, type ToolUseContent, type ToolResultContent, type ToolDefinition, type ToolCall, type ToolResult, type CompletionOptions, type CompletionResponse, type StreamChunk, type StopReason, type OpenAIConfig, type AnthropicConfig, type GeminiConfig, type ProviderConfig, type ProviderName, OpenAIProvider, AnthropicProvider, GeminiProvider, createProvider, inferProvider, ModelAliases, } from './providers/index.js';
7
+ export { type LLMProvider, type Message, type MessageRole, type MessageContent, type TextContent, type ToolUseContent, type ToolResultContent, type ToolDefinition, type ToolCall, type ToolResult, type CompletionOptions, type CompletionResponse, type StreamChunk, type StopReason, type OpenAIConfig, type AnthropicConfig, type GoogleConfig, type ProviderConfig, type ProviderName, OpenAIProvider, AnthropicProvider, GoogleProvider, createProvider, inferProvider, ModelAliases, } from './providers/index.js';
8
8
  export { type Tool, type ToolContext, type ToolResult as ToolExecutionResult, ToolRegistry, createDefaultRegistry, builtinTools, readTool, writeTool, editTool, bashTool, globTool, grepTool, } from './tools/index.js';
9
9
  export { type PermissionMode, type PermissionRule, type PermissionConfig, type ConfirmCallback, PermissionManager, DEFAULT_PERMISSION_CONFIG, } from './permissions/index.js';
10
10
  export { type AgentConfig, type AgentEvent, type AgentEventText, type AgentEventToolStart, type AgentEventToolResult, type AgentEventError, type AgentEventDone, Agent, } from './agent/index.js';
package/dist/index.js CHANGED
@@ -2,12 +2,12 @@
2
2
  * Recode - Multi-LLM Agent SDK
3
3
  *
4
4
  * A unified SDK for building AI agents with support for
5
- * OpenAI, Anthropic, and Google Gemini models.
5
+ * OpenAI, Anthropic, and Google models.
6
6
  */
7
7
  // Providers
8
8
  export {
9
9
  // Providers
10
- OpenAIProvider, AnthropicProvider, GeminiProvider,
10
+ OpenAIProvider, AnthropicProvider, GoogleProvider,
11
11
  // Factory
12
12
  createProvider, inferProvider, ModelAliases, } from './providers/index.js';
13
13
  // Tools
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Input History Manager
3
+ * Manages command history with persistence, navigation, and deduplication
4
+ */
5
+ export interface HistoryEntry {
6
+ text: string;
7
+ timestamp: string;
8
+ }
9
+ export interface HistoryConfig {
10
+ enabled?: boolean;
11
+ maxSize?: number;
12
+ savePath?: string;
13
+ deduplicateConsecutive?: boolean;
14
+ }
15
+ export declare class InputHistoryManager {
16
+ private entries;
17
+ private currentPosition;
18
+ private config;
19
+ private savePath;
20
+ private saveTimeout;
21
+ private isLoaded;
22
+ constructor(config?: HistoryConfig);
23
+ /**
24
+ * Resolve ~ to home directory
25
+ */
26
+ private resolveTildePath;
27
+ /**
28
+ * Load history from disk
29
+ */
30
+ load(): Promise<void>;
31
+ /**
32
+ * Save history to disk (async, debounced)
33
+ */
34
+ save(): Promise<void>;
35
+ /**
36
+ * Flush pending saves immediately (for app exit)
37
+ */
38
+ flush(): Promise<void>;
39
+ /**
40
+ * Add a new entry to history
41
+ */
42
+ add(text: string): void;
43
+ /**
44
+ * Navigate to previous entry (older)
45
+ * Returns the entry text or null if at beginning
46
+ */
47
+ previous(): string | null;
48
+ /**
49
+ * Navigate to next entry (newer)
50
+ * Returns the entry text or null if at end (original input)
51
+ */
52
+ next(): string | null;
53
+ /**
54
+ * Reset navigation state (cancel history navigation)
55
+ */
56
+ reset(): void;
57
+ /**
58
+ * Check if currently navigating history
59
+ */
60
+ isNavigating(): boolean;
61
+ /**
62
+ * Get current position in history (-1 if not navigating)
63
+ */
64
+ getPosition(): number;
65
+ /**
66
+ * Get total number of entries
67
+ */
68
+ size(): number;
69
+ /**
70
+ * Get all entries (for debugging/testing)
71
+ */
72
+ getEntries(): readonly HistoryEntry[];
73
+ /**
74
+ * Clear all history
75
+ */
76
+ clear(): void;
77
+ }
78
+ //# sourceMappingURL=history-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-manager.d.ts","sourceRoot":"","sources":["../../src/input/history-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAcD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,GAAE,aAAkB;IAKtC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAiCvB;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAqBzB;;;OAGG;IACH,IAAI,IAAI,MAAM,GAAG,IAAI;IAsBrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,UAAU,IAAI,SAAS,YAAY,EAAE;IAIrC;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Input History Manager
3
+ * Manages command history with persistence, navigation, and deduplication
4
+ */
5
+ import { promises as fs } from 'fs';
6
+ import { homedir } from 'os';
7
+ import { join, dirname } from 'path';
8
+ const DEFAULT_CONFIG = {
9
+ enabled: true,
10
+ maxSize: 1000,
11
+ savePath: '~/.gen/input-history.json',
12
+ deduplicateConsecutive: true,
13
+ };
14
+ export class InputHistoryManager {
15
+ entries = [];
16
+ currentPosition = -1; // -1 means not navigating
17
+ config;
18
+ savePath;
19
+ saveTimeout = null;
20
+ isLoaded = false;
21
+ constructor(config = {}) {
22
+ this.config = { ...DEFAULT_CONFIG, ...config };
23
+ this.savePath = this.resolveTildePath(this.config.savePath);
24
+ }
25
+ /**
26
+ * Resolve ~ to home directory
27
+ */
28
+ resolveTildePath(path) {
29
+ return path.startsWith('~/') ? join(homedir(), path.slice(2)) : path;
30
+ }
31
+ /**
32
+ * Load history from disk
33
+ */
34
+ async load() {
35
+ if (!this.config.enabled) {
36
+ return;
37
+ }
38
+ try {
39
+ const data = await fs.readFile(this.savePath, 'utf-8');
40
+ const historyFile = JSON.parse(data);
41
+ // Validate and load entries
42
+ if (Array.isArray(historyFile.entries)) {
43
+ this.entries = historyFile.entries.filter((entry) => entry && typeof entry.text === 'string');
44
+ // Prune if maxSize changed
45
+ if (this.entries.length > this.config.maxSize) {
46
+ this.entries = this.entries.slice(-this.config.maxSize);
47
+ }
48
+ }
49
+ this.isLoaded = true;
50
+ }
51
+ catch (error) {
52
+ // File doesn't exist or is corrupt - start with empty history
53
+ if (error instanceof Error && 'code' in error && error.code !== 'ENOENT') {
54
+ console.error('Failed to load input history:', error.message);
55
+ }
56
+ this.entries = [];
57
+ this.isLoaded = true;
58
+ }
59
+ }
60
+ /**
61
+ * Save history to disk (async, debounced)
62
+ */
63
+ async save() {
64
+ if (!this.config.enabled || !this.isLoaded) {
65
+ return;
66
+ }
67
+ // Debounce saves to avoid excessive writes
68
+ if (this.saveTimeout) {
69
+ clearTimeout(this.saveTimeout);
70
+ }
71
+ this.saveTimeout = setTimeout(async () => {
72
+ try {
73
+ // Ensure directory exists
74
+ const dir = dirname(this.savePath);
75
+ await fs.mkdir(dir, { recursive: true });
76
+ const historyFile = {
77
+ entries: this.entries,
78
+ maxSize: this.config.maxSize,
79
+ };
80
+ await fs.writeFile(this.savePath, JSON.stringify(historyFile, null, 2), 'utf-8');
81
+ }
82
+ catch (error) {
83
+ // Log but don't throw - saving history should not break the app
84
+ const message = error instanceof Error ? error.message : String(error);
85
+ console.error('Failed to save input history:', message);
86
+ }
87
+ }, 100); // 100ms debounce
88
+ }
89
+ /**
90
+ * Flush pending saves immediately (for app exit)
91
+ */
92
+ async flush() {
93
+ if (this.saveTimeout) {
94
+ clearTimeout(this.saveTimeout);
95
+ this.saveTimeout = null;
96
+ }
97
+ if (!this.config.enabled || !this.isLoaded) {
98
+ return;
99
+ }
100
+ try {
101
+ const dir = dirname(this.savePath);
102
+ await fs.mkdir(dir, { recursive: true });
103
+ const historyFile = {
104
+ entries: this.entries,
105
+ maxSize: this.config.maxSize,
106
+ };
107
+ await fs.writeFile(this.savePath, JSON.stringify(historyFile, null, 2), 'utf-8');
108
+ }
109
+ catch (error) {
110
+ const message = error instanceof Error ? error.message : String(error);
111
+ console.error('Failed to flush input history:', message);
112
+ }
113
+ }
114
+ /**
115
+ * Add a new entry to history
116
+ */
117
+ add(text) {
118
+ if (!this.config.enabled || !text.trim()) {
119
+ return;
120
+ }
121
+ const trimmedText = text.trim();
122
+ // Deduplicate consecutive entries
123
+ if (this.config.deduplicateConsecutive && this.entries.length > 0) {
124
+ const lastEntry = this.entries[this.entries.length - 1];
125
+ if (lastEntry.text === trimmedText) {
126
+ return; // Skip duplicate
127
+ }
128
+ }
129
+ // Add new entry
130
+ this.entries.push({
131
+ text: trimmedText,
132
+ timestamp: new Date().toISOString(),
133
+ });
134
+ // Prune old entries if exceeding maxSize
135
+ if (this.entries.length > this.config.maxSize) {
136
+ this.entries = this.entries.slice(-this.config.maxSize);
137
+ }
138
+ // Reset navigation position
139
+ this.currentPosition = -1;
140
+ // Save asynchronously
141
+ void this.save();
142
+ }
143
+ /**
144
+ * Navigate to previous entry (older)
145
+ * Returns the entry text or null if at beginning
146
+ */
147
+ previous() {
148
+ if (!this.config.enabled || this.entries.length === 0) {
149
+ return null;
150
+ }
151
+ // First time navigating - start from end
152
+ if (this.currentPosition === -1) {
153
+ this.currentPosition = this.entries.length - 1;
154
+ return this.entries[this.currentPosition].text;
155
+ }
156
+ // Already at beginning
157
+ if (this.currentPosition === 0) {
158
+ return this.entries[0].text;
159
+ }
160
+ // Move to previous entry
161
+ this.currentPosition--;
162
+ return this.entries[this.currentPosition].text;
163
+ }
164
+ /**
165
+ * Navigate to next entry (newer)
166
+ * Returns the entry text or null if at end (original input)
167
+ */
168
+ next() {
169
+ if (!this.config.enabled || this.entries.length === 0) {
170
+ return null;
171
+ }
172
+ // Not navigating or at end
173
+ if (this.currentPosition === -1) {
174
+ return null;
175
+ }
176
+ // Move to next entry
177
+ this.currentPosition++;
178
+ // Reached end - return to original input
179
+ if (this.currentPosition >= this.entries.length) {
180
+ this.currentPosition = -1;
181
+ return null; // Signal to restore original input
182
+ }
183
+ return this.entries[this.currentPosition].text;
184
+ }
185
+ /**
186
+ * Reset navigation state (cancel history navigation)
187
+ */
188
+ reset() {
189
+ this.currentPosition = -1;
190
+ }
191
+ /**
192
+ * Check if currently navigating history
193
+ */
194
+ isNavigating() {
195
+ return this.currentPosition !== -1;
196
+ }
197
+ /**
198
+ * Get current position in history (-1 if not navigating)
199
+ */
200
+ getPosition() {
201
+ return this.currentPosition;
202
+ }
203
+ /**
204
+ * Get total number of entries
205
+ */
206
+ size() {
207
+ return this.entries.length;
208
+ }
209
+ /**
210
+ * Get all entries (for debugging/testing)
211
+ */
212
+ getEntries() {
213
+ return this.entries;
214
+ }
215
+ /**
216
+ * Clear all history
217
+ */
218
+ clear() {
219
+ this.entries = [];
220
+ this.currentPosition = -1;
221
+ void this.save();
222
+ }
223
+ }
224
+ //# sourceMappingURL=history-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-manager.js","sourceRoot":"","sources":["../../src/input/history-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAmBrC,MAAM,cAAc,GAA4B;IAC9C,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,2BAA2B;IACrC,sBAAsB,EAAE,IAAI;CAC7B,CAAC;AAEF,MAAM,OAAO,mBAAmB;IACtB,OAAO,GAAmB,EAAE,CAAC;IAC7B,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;IAChD,MAAM,CAA0B;IAChC,QAAQ,CAAS;IACjB,WAAW,GAA0B,IAAI,CAAC;IAC1C,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,SAAwB,EAAE;QACpC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAY;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElD,4BAA4B;YAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CACnD,CAAC;gBAEF,2BAA2B;gBAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,8DAA8D;YAC9D,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzE,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,CAAC;gBACH,0BAA0B;gBAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEzC,MAAM,WAAW,GAAgB;oBAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;iBAC7B,CAAC;gBAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EACpC,OAAO,CACR,CAAC;YACJ,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,gEAAgE;gBAChE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,iBAAiB;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzC,MAAM,WAAW,GAAgB;gBAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;aAC7B,CAAC;YAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EACpC,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEhC,kCAAkC;QAClC,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACnC,OAAO,CAAC,iBAAiB;YAC3B,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,yCAAyC;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAE1B,sBAAsB;QACtB,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9B,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,yCAAyC;QACzC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,CAAC,mCAAmC;QAClD,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Input module - history management and enhanced input components
3
+ */
4
+ export { InputHistoryManager } from './history-manager.js';
5
+ export type { HistoryEntry, HistoryConfig } from './history-manager.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Input module - history management and enhanced input components
3
+ */
4
+ export { InputHistoryManager } from './history-manager.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}