@emaxe/agento 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +304 -0
  3. package/dist/bin/agento.d.ts +3 -0
  4. package/dist/bin/agento.d.ts.map +1 -0
  5. package/dist/bin/agento.js +44 -0
  6. package/dist/bin/agento.js.map +1 -0
  7. package/dist/src/adapters/base.d.ts +38 -0
  8. package/dist/src/adapters/base.d.ts.map +1 -0
  9. package/dist/src/adapters/base.js +2 -0
  10. package/dist/src/adapters/base.js.map +1 -0
  11. package/dist/src/adapters/claude-code.d.ts +13 -0
  12. package/dist/src/adapters/claude-code.d.ts.map +1 -0
  13. package/dist/src/adapters/claude-code.js +70 -0
  14. package/dist/src/adapters/claude-code.js.map +1 -0
  15. package/dist/src/adapters/codex.d.ts +15 -0
  16. package/dist/src/adapters/codex.d.ts.map +1 -0
  17. package/dist/src/adapters/codex.js +148 -0
  18. package/dist/src/adapters/codex.js.map +1 -0
  19. package/dist/src/adapters/opencode.d.ts +13 -0
  20. package/dist/src/adapters/opencode.d.ts.map +1 -0
  21. package/dist/src/adapters/opencode.js +62 -0
  22. package/dist/src/adapters/opencode.js.map +1 -0
  23. package/dist/src/adapters/qwen.d.ts +13 -0
  24. package/dist/src/adapters/qwen.d.ts.map +1 -0
  25. package/dist/src/adapters/qwen.js +84 -0
  26. package/dist/src/adapters/qwen.js.map +1 -0
  27. package/dist/src/cli/commands/agent.d.ts +3 -0
  28. package/dist/src/cli/commands/agent.d.ts.map +1 -0
  29. package/dist/src/cli/commands/agent.js +42 -0
  30. package/dist/src/cli/commands/agent.js.map +1 -0
  31. package/dist/src/cli/commands/launch.d.ts +3 -0
  32. package/dist/src/cli/commands/launch.d.ts.map +1 -0
  33. package/dist/src/cli/commands/launch.js +80 -0
  34. package/dist/src/cli/commands/launch.js.map +1 -0
  35. package/dist/src/cli/commands/profile.d.ts +3 -0
  36. package/dist/src/cli/commands/profile.d.ts.map +1 -0
  37. package/dist/src/cli/commands/profile.js +102 -0
  38. package/dist/src/cli/commands/profile.js.map +1 -0
  39. package/dist/src/cli/commands/provider.d.ts +3 -0
  40. package/dist/src/cli/commands/provider.d.ts.map +1 -0
  41. package/dist/src/cli/commands/provider.js +70 -0
  42. package/dist/src/cli/commands/provider.js.map +1 -0
  43. package/dist/src/cli/commands/restore.d.ts +3 -0
  44. package/dist/src/cli/commands/restore.d.ts.map +1 -0
  45. package/dist/src/cli/commands/restore.js +41 -0
  46. package/dist/src/cli/commands/restore.js.map +1 -0
  47. package/dist/src/config/schema.d.ts +218 -0
  48. package/dist/src/config/schema.d.ts.map +1 -0
  49. package/dist/src/config/schema.js +49 -0
  50. package/dist/src/config/schema.js.map +1 -0
  51. package/dist/src/config/store.d.ts +20 -0
  52. package/dist/src/config/store.d.ts.map +1 -0
  53. package/dist/src/config/store.js +59 -0
  54. package/dist/src/config/store.js.map +1 -0
  55. package/dist/src/launcher/child.d.ts +30 -0
  56. package/dist/src/launcher/child.d.ts.map +1 -0
  57. package/dist/src/launcher/child.js +115 -0
  58. package/dist/src/launcher/child.js.map +1 -0
  59. package/dist/src/launcher/independent.d.ts +25 -0
  60. package/dist/src/launcher/independent.d.ts.map +1 -0
  61. package/dist/src/launcher/independent.js +26 -0
  62. package/dist/src/launcher/independent.js.map +1 -0
  63. package/dist/src/launcher/shell-path-resolver.d.ts +17 -0
  64. package/dist/src/launcher/shell-path-resolver.d.ts.map +1 -0
  65. package/dist/src/launcher/shell-path-resolver.js +97 -0
  66. package/dist/src/launcher/shell-path-resolver.js.map +1 -0
  67. package/dist/src/profiles/profile-manager.d.ts +17 -0
  68. package/dist/src/profiles/profile-manager.d.ts.map +1 -0
  69. package/dist/src/profiles/profile-manager.js +74 -0
  70. package/dist/src/profiles/profile-manager.js.map +1 -0
  71. package/dist/src/providers/provider-manager.d.ts +13 -0
  72. package/dist/src/providers/provider-manager.d.ts.map +1 -0
  73. package/dist/src/providers/provider-manager.js +42 -0
  74. package/dist/src/providers/provider-manager.js.map +1 -0
  75. package/dist/src/tui/App.d.ts +10 -0
  76. package/dist/src/tui/App.d.ts.map +1 -0
  77. package/dist/src/tui/App.js +43 -0
  78. package/dist/src/tui/App.js.map +1 -0
  79. package/dist/src/tui/screens/Agents.d.ts +8 -0
  80. package/dist/src/tui/screens/Agents.d.ts.map +1 -0
  81. package/dist/src/tui/screens/Agents.js +70 -0
  82. package/dist/src/tui/screens/Agents.js.map +1 -0
  83. package/dist/src/tui/screens/LaunchAgent.d.ts +10 -0
  84. package/dist/src/tui/screens/LaunchAgent.d.ts.map +1 -0
  85. package/dist/src/tui/screens/LaunchAgent.js +119 -0
  86. package/dist/src/tui/screens/LaunchAgent.js.map +1 -0
  87. package/dist/src/tui/screens/MainMenu.d.ts +9 -0
  88. package/dist/src/tui/screens/MainMenu.d.ts.map +1 -0
  89. package/dist/src/tui/screens/MainMenu.js +32 -0
  90. package/dist/src/tui/screens/MainMenu.js.map +1 -0
  91. package/dist/src/tui/screens/Profiles.d.ts +7 -0
  92. package/dist/src/tui/screens/Profiles.d.ts.map +1 -0
  93. package/dist/src/tui/screens/Profiles.js +528 -0
  94. package/dist/src/tui/screens/Profiles.js.map +1 -0
  95. package/dist/src/tui/screens/Providers.d.ts +7 -0
  96. package/dist/src/tui/screens/Providers.d.ts.map +1 -0
  97. package/dist/src/tui/screens/Providers.js +235 -0
  98. package/dist/src/tui/screens/Providers.js.map +1 -0
  99. package/dist/src/tui/screens/Settings.d.ts +7 -0
  100. package/dist/src/tui/screens/Settings.d.ts.map +1 -0
  101. package/dist/src/tui/screens/Settings.js +49 -0
  102. package/dist/src/tui/screens/Settings.js.map +1 -0
  103. package/dist/src/tui/start.d.ts +6 -0
  104. package/dist/src/tui/start.d.ts.map +1 -0
  105. package/dist/src/tui/start.js +15 -0
  106. package/dist/src/tui/start.js.map +1 -0
  107. package/dist/src/tui/use-key-input.d.ts +9 -0
  108. package/dist/src/tui/use-key-input.d.ts.map +1 -0
  109. package/dist/src/tui/use-key-input.js +19 -0
  110. package/dist/src/tui/use-key-input.js.map +1 -0
  111. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,qBAAqB,IAAI,OAAO,CAkE/C"}
@@ -0,0 +1,70 @@
1
+ import { Command } from 'commander';
2
+ import { listProviders, addProvider, removeProvider } from '../../providers/provider-manager.js';
3
+ export function createProviderCommand() {
4
+ const cmd = new Command('provider').description('Manage API providers');
5
+ cmd
6
+ .command('list')
7
+ .description('List all providers')
8
+ .action(async () => {
9
+ try {
10
+ const providers = await listProviders();
11
+ if (providers.length === 0) {
12
+ console.log('No providers configured.');
13
+ }
14
+ else {
15
+ providers.forEach((p) => {
16
+ const maskedKey = p.apiKey.slice(0, 8) + '...';
17
+ console.log(` ${p.name} (${p.type}) — key: ${maskedKey}${p.baseUrl ? `, url: ${p.baseUrl}` : ''}`);
18
+ console.log(` models: ${p.models.join(', ')}`);
19
+ });
20
+ }
21
+ process.exit(0);
22
+ }
23
+ catch (err) {
24
+ console.error('Error:', err instanceof Error ? err.message : String(err));
25
+ process.exit(1);
26
+ }
27
+ });
28
+ cmd
29
+ .command('add')
30
+ .description('Add a new provider')
31
+ .requiredOption('-n, --name <name>', 'Provider name')
32
+ .requiredOption('-t, --type <type>', 'Provider type (openai-compatible, anthropic)')
33
+ .requiredOption('-k, --api-key <key>', 'API key')
34
+ .option('-u, --base-url <url>', 'Base URL (for openai-compatible)')
35
+ .requiredOption('-M, --models <models>', 'Comma-separated list of model names')
36
+ .action(async (opts) => {
37
+ try {
38
+ const models = opts.models.split(',').map((m) => m.trim()).filter(Boolean);
39
+ const provider = await addProvider({
40
+ name: opts.name,
41
+ type: opts.type,
42
+ apiKey: opts.apiKey,
43
+ baseUrl: opts.baseUrl,
44
+ models,
45
+ });
46
+ console.log(`Provider "${provider.name}" added (id: ${provider.id})`);
47
+ process.exit(0);
48
+ }
49
+ catch (err) {
50
+ console.error('Error:', err instanceof Error ? err.message : String(err));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ cmd
55
+ .command('remove <name>')
56
+ .description('Remove a provider by name or id')
57
+ .action(async (name) => {
58
+ try {
59
+ await removeProvider(name);
60
+ console.log(`Provider "${name}" removed.`);
61
+ process.exit(0);
62
+ }
63
+ catch (err) {
64
+ console.error('Error:', err instanceof Error ? err.message : String(err));
65
+ process.exit(1);
66
+ }
67
+ });
68
+ return cmd;
69
+ }
70
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../src/cli/commands/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createRestoreCommand(): Command;
3
+ //# sourceMappingURL=restore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/restore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,oBAAoB,IAAI,OAAO,CAiC9C"}
@@ -0,0 +1,41 @@
1
+ import { Command } from 'commander';
2
+ import { readBackup, backupExists } from '../../config/store.js';
3
+ import { claudeCodeAdapter } from '../../adapters/claude-code.js';
4
+ import { openCodeAdapter } from '../../adapters/opencode.js';
5
+ const ADAPTERS = {
6
+ 'claude-code': claudeCodeAdapter,
7
+ 'opencode': openCodeAdapter,
8
+ };
9
+ export function createRestoreCommand() {
10
+ return new Command('restore')
11
+ .description('Restore agent config from backup')
12
+ .requiredOption('-a, --agent <id>', 'Agent id (claude-code, opencode)')
13
+ .requiredOption('-s, --scope <scope>', 'Config scope: global or project')
14
+ .action(async (opts) => {
15
+ try {
16
+ const adapter = ADAPTERS[opts.agent];
17
+ if (!adapter) {
18
+ console.error(`Error: Unknown agent: ${opts.agent}. Supported: ${Object.keys(ADAPTERS).join(', ')}`);
19
+ process.exit(1);
20
+ }
21
+ const scope = opts.scope;
22
+ if (!backupExists(opts.agent, scope)) {
23
+ console.error(`Error: No backup found for ${opts.agent} (${scope})`);
24
+ process.exit(1);
25
+ }
26
+ const backup = await readBackup(opts.agent, scope);
27
+ if (backup === null) {
28
+ console.error(`Error: Backup is empty for ${opts.agent} (${scope})`);
29
+ process.exit(1);
30
+ }
31
+ await adapter.writeConfig(backup, scope);
32
+ console.log(`Restored ${opts.agent} config (${scope})`);
33
+ process.exit(0);
34
+ }
35
+ catch (err) {
36
+ console.error('Error:', err instanceof Error ? err.message : String(err));
37
+ process.exit(1);
38
+ }
39
+ });
40
+ }
41
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../../src/cli/commands/restore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,MAAM,QAAQ,GAAiC;IAC7C,aAAa,EAAE,iBAAiB;IAChC,UAAU,EAAE,eAAe;CAC5B,CAAC;AAEF,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CAAC,kCAAkC,CAAC;SAC/C,cAAc,CAAC,kBAAkB,EAAE,kCAAkC,CAAC;SACtE,cAAc,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,IAAsC,EAAE,EAAE;QACvD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,KAAK,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAoB,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,CAAC,WAAW,CAAC,MAAiC,EAAE,KAAK,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,KAAK,YAAY,KAAK,GAAG,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,218 @@
1
+ import { z } from 'zod';
2
+ export declare const ProviderTypeSchema: z.ZodEnum<["openai-compatible", "anthropic"]>;
3
+ export type ProviderType = z.infer<typeof ProviderTypeSchema>;
4
+ export declare const ProviderSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ name: z.ZodString;
7
+ type: z.ZodEnum<["openai-compatible", "anthropic"]>;
8
+ apiKey: z.ZodString;
9
+ baseUrl: z.ZodOptional<z.ZodString>;
10
+ models: z.ZodArray<z.ZodString, "many">;
11
+ }, "strip", z.ZodTypeAny, {
12
+ type: "openai-compatible" | "anthropic";
13
+ id: string;
14
+ name: string;
15
+ apiKey: string;
16
+ models: string[];
17
+ baseUrl?: string | undefined;
18
+ }, {
19
+ type: "openai-compatible" | "anthropic";
20
+ id: string;
21
+ name: string;
22
+ apiKey: string;
23
+ models: string[];
24
+ baseUrl?: string | undefined;
25
+ }>;
26
+ export type Provider = z.infer<typeof ProviderSchema>;
27
+ export declare const ModelTierSchema: z.ZodEnum<["small", "base", "smart"]>;
28
+ export type ModelTier = z.infer<typeof ModelTierSchema>;
29
+ export declare const ProfileModelSchema: z.ZodObject<{
30
+ providerId: z.ZodString;
31
+ model: z.ZodString;
32
+ tier: z.ZodOptional<z.ZodEnum<["small", "base", "smart"]>>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ providerId: string;
35
+ model: string;
36
+ tier?: "small" | "base" | "smart" | undefined;
37
+ }, {
38
+ providerId: string;
39
+ model: string;
40
+ tier?: "small" | "base" | "smart" | undefined;
41
+ }>;
42
+ export type ProfileModel = z.infer<typeof ProfileModelSchema>;
43
+ export declare const ProfileSchema: z.ZodObject<{
44
+ id: z.ZodString;
45
+ name: z.ZodString;
46
+ models: z.ZodArray<z.ZodObject<{
47
+ providerId: z.ZodString;
48
+ model: z.ZodString;
49
+ tier: z.ZodOptional<z.ZodEnum<["small", "base", "smart"]>>;
50
+ }, "strip", z.ZodTypeAny, {
51
+ providerId: string;
52
+ model: string;
53
+ tier?: "small" | "base" | "smart" | undefined;
54
+ }, {
55
+ providerId: string;
56
+ model: string;
57
+ tier?: "small" | "base" | "smart" | undefined;
58
+ }>, "many">;
59
+ }, "strip", z.ZodTypeAny, {
60
+ id: string;
61
+ name: string;
62
+ models: {
63
+ providerId: string;
64
+ model: string;
65
+ tier?: "small" | "base" | "smart" | undefined;
66
+ }[];
67
+ }, {
68
+ id: string;
69
+ name: string;
70
+ models: {
71
+ providerId: string;
72
+ model: string;
73
+ tier?: "small" | "base" | "smart" | undefined;
74
+ }[];
75
+ }>;
76
+ export type Profile = z.infer<typeof ProfileSchema>;
77
+ export declare const AgentIdSchema: z.ZodEnum<["claude-code", "opencode", "qwen", "codex"]>;
78
+ export type AgentId = z.infer<typeof AgentIdSchema>;
79
+ export declare const LaunchScopeSchema: z.ZodEnum<["global", "project"]>;
80
+ export type LaunchScope = z.infer<typeof LaunchScopeSchema>;
81
+ export declare const LaunchModeSchema: z.ZodEnum<["child", "independent"]>;
82
+ export type LaunchMode = z.infer<typeof LaunchModeSchema>;
83
+ export declare const IndependentModeSchema: z.ZodEnum<["spawn-detached", "pty"]>;
84
+ export type IndependentMode = z.infer<typeof IndependentModeSchema>;
85
+ export declare const SettingsSchema: z.ZodObject<{
86
+ defaultLaunchMode: z.ZodDefault<z.ZodEnum<["child", "independent"]>>;
87
+ defaultConfigScope: z.ZodDefault<z.ZodEnum<["global", "project"]>>;
88
+ independentMode: z.ZodDefault<z.ZodEnum<["spawn-detached", "pty"]>>;
89
+ }, "strip", z.ZodTypeAny, {
90
+ defaultLaunchMode: "child" | "independent";
91
+ defaultConfigScope: "global" | "project";
92
+ independentMode: "spawn-detached" | "pty";
93
+ }, {
94
+ defaultLaunchMode?: "child" | "independent" | undefined;
95
+ defaultConfigScope?: "global" | "project" | undefined;
96
+ independentMode?: "spawn-detached" | "pty" | undefined;
97
+ }>;
98
+ export type Settings = z.infer<typeof SettingsSchema>;
99
+ export declare const AgentOConfigSchema: z.ZodObject<{
100
+ providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
101
+ id: z.ZodString;
102
+ name: z.ZodString;
103
+ type: z.ZodEnum<["openai-compatible", "anthropic"]>;
104
+ apiKey: z.ZodString;
105
+ baseUrl: z.ZodOptional<z.ZodString>;
106
+ models: z.ZodArray<z.ZodString, "many">;
107
+ }, "strip", z.ZodTypeAny, {
108
+ type: "openai-compatible" | "anthropic";
109
+ id: string;
110
+ name: string;
111
+ apiKey: string;
112
+ models: string[];
113
+ baseUrl?: string | undefined;
114
+ }, {
115
+ type: "openai-compatible" | "anthropic";
116
+ id: string;
117
+ name: string;
118
+ apiKey: string;
119
+ models: string[];
120
+ baseUrl?: string | undefined;
121
+ }>, "many">>;
122
+ profiles: z.ZodDefault<z.ZodArray<z.ZodObject<{
123
+ id: z.ZodString;
124
+ name: z.ZodString;
125
+ models: z.ZodArray<z.ZodObject<{
126
+ providerId: z.ZodString;
127
+ model: z.ZodString;
128
+ tier: z.ZodOptional<z.ZodEnum<["small", "base", "smart"]>>;
129
+ }, "strip", z.ZodTypeAny, {
130
+ providerId: string;
131
+ model: string;
132
+ tier?: "small" | "base" | "smart" | undefined;
133
+ }, {
134
+ providerId: string;
135
+ model: string;
136
+ tier?: "small" | "base" | "smart" | undefined;
137
+ }>, "many">;
138
+ }, "strip", z.ZodTypeAny, {
139
+ id: string;
140
+ name: string;
141
+ models: {
142
+ providerId: string;
143
+ model: string;
144
+ tier?: "small" | "base" | "smart" | undefined;
145
+ }[];
146
+ }, {
147
+ id: string;
148
+ name: string;
149
+ models: {
150
+ providerId: string;
151
+ model: string;
152
+ tier?: "small" | "base" | "smart" | undefined;
153
+ }[];
154
+ }>, "many">>;
155
+ settings: z.ZodDefault<z.ZodObject<{
156
+ defaultLaunchMode: z.ZodDefault<z.ZodEnum<["child", "independent"]>>;
157
+ defaultConfigScope: z.ZodDefault<z.ZodEnum<["global", "project"]>>;
158
+ independentMode: z.ZodDefault<z.ZodEnum<["spawn-detached", "pty"]>>;
159
+ }, "strip", z.ZodTypeAny, {
160
+ defaultLaunchMode: "child" | "independent";
161
+ defaultConfigScope: "global" | "project";
162
+ independentMode: "spawn-detached" | "pty";
163
+ }, {
164
+ defaultLaunchMode?: "child" | "independent" | undefined;
165
+ defaultConfigScope?: "global" | "project" | undefined;
166
+ independentMode?: "spawn-detached" | "pty" | undefined;
167
+ }>>;
168
+ }, "strip", z.ZodTypeAny, {
169
+ providers: {
170
+ type: "openai-compatible" | "anthropic";
171
+ id: string;
172
+ name: string;
173
+ apiKey: string;
174
+ models: string[];
175
+ baseUrl?: string | undefined;
176
+ }[];
177
+ profiles: {
178
+ id: string;
179
+ name: string;
180
+ models: {
181
+ providerId: string;
182
+ model: string;
183
+ tier?: "small" | "base" | "smart" | undefined;
184
+ }[];
185
+ }[];
186
+ settings: {
187
+ defaultLaunchMode: "child" | "independent";
188
+ defaultConfigScope: "global" | "project";
189
+ independentMode: "spawn-detached" | "pty";
190
+ };
191
+ }, {
192
+ providers?: {
193
+ type: "openai-compatible" | "anthropic";
194
+ id: string;
195
+ name: string;
196
+ apiKey: string;
197
+ models: string[];
198
+ baseUrl?: string | undefined;
199
+ }[] | undefined;
200
+ profiles?: {
201
+ id: string;
202
+ name: string;
203
+ models: {
204
+ providerId: string;
205
+ model: string;
206
+ tier?: "small" | "base" | "smart" | undefined;
207
+ }[];
208
+ }[] | undefined;
209
+ settings?: {
210
+ defaultLaunchMode?: "child" | "independent" | undefined;
211
+ defaultConfigScope?: "global" | "project" | undefined;
212
+ independentMode?: "spawn-detached" | "pty" | undefined;
213
+ } | undefined;
214
+ }>;
215
+ export type AgentOConfig = z.infer<typeof AgentOConfigSchema>;
216
+ export declare const AgentConfigSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
217
+ export type AgentConfig = z.infer<typeof AgentConfigSchema>;
218
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB,+CAA6C,CAAC;AAC7E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;EAOzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,eAAe,uCAAqC,CAAC;AAClE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAGxD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAGpD,eAAO,MAAM,aAAa,yDAAuD,CAAC;AAClF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAGpD,eAAO,MAAM,iBAAiB,kCAAgC,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,eAAO,MAAM,gBAAgB,qCAAmC,CAAC;AACjE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAG1D,eAAO,MAAM,qBAAqB,sCAAoC,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAGpE,eAAO,MAAM,cAAc;;;;;;;;;;;;EAIzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,iBAAiB,wCAAwB,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { z } from 'zod';
2
+ // Тип провайдера API
3
+ export const ProviderTypeSchema = z.enum(['openai-compatible', 'anthropic']);
4
+ // Провайдер API (REQ-1)
5
+ export const ProviderSchema = z.object({
6
+ id: z.string().uuid(),
7
+ name: z.string().min(1),
8
+ type: ProviderTypeSchema,
9
+ apiKey: z.string().min(1),
10
+ baseUrl: z.string().url().optional(),
11
+ models: z.array(z.string().min(1)).min(1),
12
+ });
13
+ // Уровень модели в профиле (REQ: small / base / smart)
14
+ export const ModelTierSchema = z.enum(['small', 'base', 'smart']);
15
+ // Пара провайдер+модель в профиле
16
+ export const ProfileModelSchema = z.object({
17
+ providerId: z.string().uuid(),
18
+ model: z.string().min(1),
19
+ tier: ModelTierSchema.optional(),
20
+ });
21
+ // Профиль (REQ-2)
22
+ export const ProfileSchema = z.object({
23
+ id: z.string().uuid(),
24
+ name: z.string().min(1),
25
+ models: z.array(ProfileModelSchema).min(1),
26
+ });
27
+ // Поддерживаемые агенты (REQ-8)
28
+ export const AgentIdSchema = z.enum(['claude-code', 'opencode', 'qwen', 'codex']);
29
+ // Scope конфига (REQ-5)
30
+ export const LaunchScopeSchema = z.enum(['global', 'project']);
31
+ // Режим запуска (REQ-4)
32
+ export const LaunchModeSchema = z.enum(['child', 'independent']);
33
+ // Вариант independent-запуска
34
+ export const IndependentModeSchema = z.enum(['spawn-detached', 'pty']);
35
+ // Настройки AgentO (REQ-3, REQ-11)
36
+ export const SettingsSchema = z.object({
37
+ defaultLaunchMode: LaunchModeSchema.default('child'),
38
+ defaultConfigScope: LaunchScopeSchema.default('global'),
39
+ independentMode: IndependentModeSchema.default('pty'),
40
+ });
41
+ // Корневой конфиг AgentO (~/.agento/config.json) (REQ-3)
42
+ export const AgentOConfigSchema = z.object({
43
+ providers: z.array(ProviderSchema).default([]),
44
+ profiles: z.array(ProfileSchema).default([]),
45
+ settings: SettingsSchema.default({}),
46
+ });
47
+ // Базовый тип конфига агента (REQ-7)
48
+ export const AgentConfigSchema = z.record(z.unknown());
49
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type AgentOConfig } from './schema.js';
2
+ /** Читает конфиг AgentO. Если файл не существует, возвращает дефолтный конфиг. */
3
+ export declare function readConfig(): Promise<AgentOConfig>;
4
+ /** Записывает конфиг AgentO, создаёт директорию при необходимости. */
5
+ export declare function writeConfig(config: AgentOConfig): Promise<void>;
6
+ /** Сохраняет бэкап конфига агента.
7
+ * @param agentId - id агента (например 'claude-code')
8
+ * @param scope - 'global' или 'project'
9
+ * @param content - содержимое конфига (JSON-объект)
10
+ */
11
+ export declare function writeBackup(agentId: string, scope: string, content: unknown): Promise<void>;
12
+ /** Читает бэкап конфига агента. Возвращает null если бэкап не существует. */
13
+ export declare function readBackup(agentId: string, scope: string): Promise<unknown | null>;
14
+ /** Проверяет существование бэкапа. */
15
+ export declare function backupExists(agentId: string, scope: string): boolean;
16
+ /** Удаляет бэкап конфига агента. Не бросает ошибку если файл не существует. */
17
+ export declare function deleteBackup(agentId: string, scope: string): Promise<void>;
18
+ /** Возвращает путь к бэкапу. */
19
+ export declare function getBackupPath(agentId: string, scope: string): string;
20
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/config/store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAMpE,kFAAkF;AAClF,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAMxD;AAED,sEAAsE;AACtE,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,6EAA6E;AAC7E,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAOzB;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGpE;AAED,+EAA+E;AAC/E,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED,gCAAgC;AAChC,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE"}
@@ -0,0 +1,59 @@
1
+ import { readFile, writeFile, mkdir, unlink } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { AgentOConfigSchema } from './schema.js';
6
+ const CONFIG_DIR = join(homedir(), '.agento');
7
+ const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
8
+ const BACKUPS_DIR = join(CONFIG_DIR, 'backups');
9
+ /** Читает конфиг AgentO. Если файл не существует, возвращает дефолтный конфиг. */
10
+ export async function readConfig() {
11
+ if (!existsSync(CONFIG_PATH)) {
12
+ return AgentOConfigSchema.parse({});
13
+ }
14
+ const raw = await readFile(CONFIG_PATH, 'utf-8');
15
+ return AgentOConfigSchema.parse(JSON.parse(raw));
16
+ }
17
+ /** Записывает конфиг AgentO, создаёт директорию при необходимости. */
18
+ export async function writeConfig(config) {
19
+ await mkdir(CONFIG_DIR, { recursive: true });
20
+ await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
21
+ }
22
+ /** Сохраняет бэкап конфига агента.
23
+ * @param agentId - id агента (например 'claude-code')
24
+ * @param scope - 'global' или 'project'
25
+ * @param content - содержимое конфига (JSON-объект)
26
+ */
27
+ export async function writeBackup(agentId, scope, content) {
28
+ const dir = join(BACKUPS_DIR, agentId);
29
+ await mkdir(dir, { recursive: true });
30
+ const backupPath = join(dir, `${scope}.bak.json`);
31
+ await writeFile(backupPath, JSON.stringify(content, null, 2), 'utf-8');
32
+ }
33
+ /** Читает бэкап конфига агента. Возвращает null если бэкап не существует. */
34
+ export async function readBackup(agentId, scope) {
35
+ const backupPath = join(BACKUPS_DIR, agentId, `${scope}.bak.json`);
36
+ if (!existsSync(backupPath)) {
37
+ return null;
38
+ }
39
+ const raw = await readFile(backupPath, 'utf-8');
40
+ return JSON.parse(raw);
41
+ }
42
+ /** Проверяет существование бэкапа. */
43
+ export function backupExists(agentId, scope) {
44
+ const backupPath = join(BACKUPS_DIR, agentId, `${scope}.bak.json`);
45
+ return existsSync(backupPath);
46
+ }
47
+ /** Удаляет бэкап конфига агента. Не бросает ошибку если файл не существует. */
48
+ export async function deleteBackup(agentId, scope) {
49
+ const backupPath = join(BACKUPS_DIR, agentId, `${scope}.bak.json`);
50
+ try {
51
+ await unlink(backupPath);
52
+ }
53
+ catch { /* file might not exist */ }
54
+ }
55
+ /** Возвращает путь к бэкапу. */
56
+ export function getBackupPath(agentId, scope) {
57
+ return join(BACKUPS_DIR, agentId, `${scope}.bak.json`);
58
+ }
59
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/config/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { AgentAdapter, LaunchScope } from '../adapters/base.js';
2
+ import type { Profile, Provider } from '../config/schema.js';
3
+ import type { ExecRequest } from './independent.js';
4
+ export interface ChildLaunchOptions {
5
+ adapter: AgentAdapter;
6
+ profile: Profile;
7
+ providers: Provider[];
8
+ scope: LaunchScope;
9
+ command: string;
10
+ args?: string[];
11
+ cwd?: string;
12
+ }
13
+ export interface ChildPrepareResult {
14
+ execReq: ExecRequest;
15
+ cleanup: () => Promise<void>;
16
+ }
17
+ /**
18
+ * Готовит конфиг для запуска агента из TUI (child mode).
19
+ * Делает backup и записывает новый конфиг, но не запускает процесс.
20
+ * Возвращает ExecRequest и cleanup-функцию для последующего вызова из agento.ts.
21
+ */
22
+ export declare function prepareChild(options: ChildLaunchOptions): Promise<ChildPrepareResult>;
23
+ /**
24
+ * Запускает агент как дочерний процесс.
25
+ * Перед запуском: backup → patch config.
26
+ * После завершения: restore config.
27
+ * SIGTERM/SIGINT: cleanup-хук восстанавливает конфиг.
28
+ */
29
+ export declare function launchChild(options: ChildLaunchOptions): Promise<number>;
30
+ //# sourceMappingURL=child.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child.d.ts","sourceRoot":"","sources":["../../../src/launcher/child.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuC3F;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqE9E"}