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.
- package/RELEASE_NOTES_v0.4.0.md +140 -0
- package/dist/agent/agent.d.ts +26 -4
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +316 -57
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/types.d.ts +20 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/checkpointing/checkpoint-manager.d.ts +24 -0
- package/dist/checkpointing/checkpoint-manager.d.ts.map +1 -1
- package/dist/checkpointing/checkpoint-manager.js +28 -0
- package/dist/checkpointing/checkpoint-manager.js.map +1 -1
- package/dist/cli/components/App.d.ts +8 -0
- package/dist/cli/components/App.d.ts.map +1 -1
- package/dist/cli/components/App.js +493 -45
- package/dist/cli/components/App.js.map +1 -1
- package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
- package/dist/cli/components/CommandSuggestions.js +2 -0
- package/dist/cli/components/CommandSuggestions.js.map +1 -1
- package/dist/cli/components/Header.d.ts +6 -1
- package/dist/cli/components/Header.d.ts.map +1 -1
- package/dist/cli/components/Header.js +3 -3
- package/dist/cli/components/Header.js.map +1 -1
- package/dist/cli/components/Messages.d.ts.map +1 -1
- package/dist/cli/components/Messages.js +8 -10
- package/dist/cli/components/Messages.js.map +1 -1
- package/dist/cli/components/ModelSelector.d.ts +4 -3
- package/dist/cli/components/ModelSelector.d.ts.map +1 -1
- package/dist/cli/components/ModelSelector.js +54 -37
- package/dist/cli/components/ModelSelector.js.map +1 -1
- package/dist/cli/components/ProviderManager.d.ts +2 -2
- package/dist/cli/components/ProviderManager.d.ts.map +1 -1
- package/dist/cli/components/ProviderManager.js +137 -156
- package/dist/cli/components/ProviderManager.js.map +1 -1
- package/dist/cli/index.js +33 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/levels.d.ts +5 -5
- package/dist/config/levels.d.ts.map +1 -1
- package/dist/config/levels.js +20 -20
- package/dist/config/levels.js.map +1 -1
- package/dist/config/merger.js +1 -1
- package/dist/config/merger.js.map +1 -1
- package/dist/config/providers-config.d.ts +8 -5
- package/dist/config/providers-config.d.ts.map +1 -1
- package/dist/config/providers-config.js +19 -22
- package/dist/config/providers-config.js.map +1 -1
- package/dist/config/test-utils.d.ts +2 -2
- package/dist/config/test-utils.d.ts.map +1 -1
- package/dist/config/test-utils.js +4 -4
- package/dist/config/test-utils.js.map +1 -1
- package/dist/config/types.d.ts +42 -17
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +14 -14
- package/dist/config/types.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/input/history-manager.d.ts +78 -0
- package/dist/input/history-manager.d.ts.map +1 -0
- package/dist/input/history-manager.js +224 -0
- package/dist/input/history-manager.js.map +1 -0
- package/dist/input/index.d.ts +6 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/index.js +5 -0
- package/dist/input/index.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +25 -12
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +241 -112
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/test-utils.d.ts +1 -1
- package/dist/memory/test-utils.d.ts.map +1 -1
- package/dist/memory/test-utils.js +3 -3
- package/dist/memory/test-utils.js.map +1 -1
- package/dist/memory/types.d.ts +20 -10
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +13 -13
- package/dist/memory/types.js.map +1 -1
- package/dist/migration/migrate.d.ts +24 -0
- package/dist/migration/migrate.d.ts.map +1 -0
- package/dist/migration/migrate.js +164 -0
- package/dist/migration/migrate.js.map +1 -0
- package/dist/permissions/persistence.d.ts +2 -2
- package/dist/permissions/persistence.js +4 -4
- package/dist/permissions/persistence.js.map +1 -1
- package/dist/planning/plan-file.d.ts +1 -1
- package/dist/planning/plan-file.js +2 -2
- package/dist/planning/plan-file.js.map +1 -1
- package/dist/prompts/index.d.ts +5 -4
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +13 -10
- package/dist/prompts/index.js.map +1 -1
- package/dist/providers/anthropic.d.ts +2 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +7 -0
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/gemini.d.ts +2 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +40 -2
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/google.d.ts +22 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +297 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +22 -12
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +56 -32
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +13 -0
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +48 -34
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +72 -88
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/store.d.ts +43 -17
- package/dist/providers/store.d.ts.map +1 -1
- package/dist/providers/store.js +112 -19
- package/dist/providers/store.js.map +1 -1
- package/dist/providers/types.d.ts +52 -3
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/vertex-ai.d.ts +15 -7
- package/dist/providers/vertex-ai.d.ts.map +1 -1
- package/dist/providers/vertex-ai.js +46 -13
- package/dist/providers/vertex-ai.js.map +1 -1
- package/dist/session/compression/engine.d.ts +109 -0
- package/dist/session/compression/engine.d.ts.map +1 -0
- package/dist/session/compression/engine.js +311 -0
- package/dist/session/compression/engine.js.map +1 -0
- package/dist/session/compression/index.d.ts +12 -0
- package/dist/session/compression/index.d.ts.map +1 -0
- package/dist/session/compression/index.js +11 -0
- package/dist/session/compression/index.js.map +1 -0
- package/dist/session/compression/types.d.ts +90 -0
- package/dist/session/compression/types.d.ts.map +1 -0
- package/dist/session/compression/types.js +17 -0
- package/dist/session/compression/types.js.map +1 -0
- package/dist/session/manager.d.ts +64 -3
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +254 -2
- package/dist/session/manager.js.map +1 -1
- package/dist/session/types.d.ts +16 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +1 -1
- package/dist/session/types.js.map +1 -1
- package/docs/README.md +1 -0
- package/docs/config-system-comparison.md +50 -50
- package/docs/cost-tracking-comparison.md +2 -2
- package/docs/diagrams/compression-decision.mmd +30 -0
- package/docs/diagrams/compression-workflow.mmd +54 -0
- package/docs/diagrams/layer1-pruning.mmd +45 -0
- package/docs/diagrams/layer2-compaction.mmd +42 -0
- package/docs/memory-system.md +124 -31
- package/docs/permissions.md +2 -2
- package/docs/proposals/0006-memory-system.md +4 -4
- package/docs/proposals/0007-context-management.md +252 -2
- package/docs/proposals/0008-checkpointing.md +109 -2
- package/docs/proposals/0011-custom-commands.md +2 -1
- package/docs/proposals/0021-skills-system.md +2 -1
- package/docs/proposals/0023-permission-enhancements.md +2 -2
- package/docs/proposals/0033-enterprise-deployment.md +1 -1
- package/docs/proposals/0041-configuration-system.md +17 -19
- package/docs/proposals/0042-prompt-optimization.md +17 -9
- package/docs/proposals/README.md +8 -7
- package/docs/providers.md +96 -11
- package/docs/session-compression.md +695 -0
- package/examples/agent-demo.ts +23 -1
- package/examples/basic.ts +3 -3
- package/package.json +2 -2
- package/scripts/migrate.ts +449 -0
- package/src/agent/agent.ts +365 -61
- package/src/agent/types.ts +24 -2
- package/src/checkpointing/checkpoint-manager.ts +48 -0
- package/src/cli/components/App.tsx +570 -42
- package/src/cli/components/CommandSuggestions.tsx +2 -0
- package/src/cli/components/Header.tsx +16 -1
- package/src/cli/components/Messages.tsx +21 -15
- package/src/cli/components/ModelSelector.tsx +62 -43
- package/src/cli/components/ProviderManager.tsx +278 -323
- package/src/cli/index.tsx +38 -18
- package/src/config/index.ts +5 -3
- package/src/config/levels.test.ts +22 -22
- package/src/config/levels.ts +22 -22
- package/src/config/loader.test.ts +14 -14
- package/src/config/manager.test.ts +19 -19
- package/src/config/merger.test.ts +23 -23
- package/src/config/merger.ts +1 -1
- package/src/config/providers-config.ts +23 -21
- package/src/config/test-utils.ts +6 -6
- package/src/config/types.ts +55 -20
- package/src/index.ts +3 -3
- package/src/input/history-manager.ts +289 -0
- package/src/input/index.ts +6 -0
- package/src/memory/memory-manager.test.ts +242 -24
- package/src/memory/memory-manager.ts +270 -141
- package/src/memory/test-utils.ts +4 -4
- package/src/memory/types.ts +28 -17
- package/src/permissions/persistence.ts +4 -4
- package/src/planning/plan-file.ts +2 -2
- package/src/prompts/index.test.ts +2 -1
- package/src/prompts/index.ts +15 -11
- package/src/providers/anthropic.ts +9 -0
- package/src/providers/{gemini.ts → google.ts} +75 -15
- package/src/providers/index.ts +85 -42
- package/src/providers/openai.ts +16 -0
- package/src/providers/registry.ts +116 -111
- package/src/providers/store.ts +130 -28
- package/src/providers/types.ts +65 -3
- package/src/providers/vertex-ai.ts +49 -13
- package/src/session/compression/engine.ts +406 -0
- package/src/session/compression/index.ts +18 -0
- package/src/session/compression/types.ts +102 -0
- package/src/session/manager.ts +326 -3
- package/src/session/types.ts +22 -1
- package/tests/input-history-manager.test.ts +335 -0
- package/tests/session-checkpoint-persistence.test.ts +198 -0
package/dist/config/types.d.ts
CHANGED
|
@@ -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: ~/.
|
|
6
|
-
* 2. Extra Dirs:
|
|
7
|
-
* 3. Project Level: .
|
|
8
|
-
* 4. Local Level: .
|
|
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
|
|
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?:
|
|
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: '
|
|
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
|
|
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
|
|
100
|
+
export declare const GEN_DIR = ".gen";
|
|
78
101
|
export declare const CLAUDE_DIR = ".claude";
|
|
79
|
-
export declare const
|
|
102
|
+
export declare const USER_GEN_DIR: string;
|
|
80
103
|
export declare const USER_CLAUDE_DIR: string;
|
|
81
104
|
export declare function getManagedPaths(): {
|
|
82
|
-
|
|
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 = "~/.
|
|
89
|
-
export declare const PROJECT_SETTINGS_DIR = ".
|
|
90
|
-
export declare const FALLBACK_SETTINGS_DIR = "~/.
|
|
91
|
-
export declare const FALLBACK_PROJECT_DIR = ".
|
|
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
|
-
|
|
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 (~/.
|
|
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":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.js
CHANGED
|
@@ -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: ~/.
|
|
6
|
-
* 2. Extra Dirs:
|
|
7
|
-
* 3. Project Level: .
|
|
8
|
-
* 4. Local Level: .
|
|
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
|
|
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
|
|
24
|
+
export const GEN_DIR = '.gen';
|
|
25
25
|
export const CLAUDE_DIR = '.claude';
|
|
26
26
|
// User directory paths
|
|
27
|
-
export const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = '~/.
|
|
54
|
-
export const PROJECT_SETTINGS_DIR = '.
|
|
55
|
-
export const FALLBACK_SETTINGS_DIR = '~/.
|
|
56
|
-
export const FALLBACK_PROJECT_DIR = '.
|
|
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
|
package/dist/config/types.js.map
CHANGED
|
@@ -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;
|
|
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
|
|
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
|
|
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
|
|
5
|
+
* OpenAI, Anthropic, and Google models.
|
|
6
6
|
*/
|
|
7
7
|
// Providers
|
|
8
8
|
export {
|
|
9
9
|
// Providers
|
|
10
|
-
OpenAIProvider, AnthropicProvider,
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
|