workplace-pua-cli 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 (112) hide show
  1. package/.env.example +4 -0
  2. package/.eslintrc.json +21 -0
  3. package/.prettierrc.json +9 -0
  4. package/CHANGELOG.md +107 -0
  5. package/README.md +240 -0
  6. package/bin/pua +2 -0
  7. package/dist/commands/chat.d.ts +15 -0
  8. package/dist/commands/chat.d.ts.map +1 -0
  9. package/dist/commands/chat.js +262 -0
  10. package/dist/commands/chat.js.map +1 -0
  11. package/dist/commands/config.d.ts +15 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +247 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/prompt.d.ts +14 -0
  16. package/dist/commands/prompt.d.ts.map +1 -0
  17. package/dist/commands/prompt.js +126 -0
  18. package/dist/commands/prompt.js.map +1 -0
  19. package/dist/config/providers.d.ts +37 -0
  20. package/dist/config/providers.d.ts.map +1 -0
  21. package/dist/config/providers.js +96 -0
  22. package/dist/config/providers.js.map +1 -0
  23. package/dist/config/session-storage.d.ts +29 -0
  24. package/dist/config/session-storage.d.ts.map +1 -0
  25. package/dist/config/session-storage.js +67 -0
  26. package/dist/config/session-storage.js.map +1 -0
  27. package/dist/config/settings.d.ts +55 -0
  28. package/dist/config/settings.d.ts.map +1 -0
  29. package/dist/config/settings.js +163 -0
  30. package/dist/config/settings.js.map +1 -0
  31. package/dist/config/storage.d.ts +69 -0
  32. package/dist/config/storage.d.ts.map +1 -0
  33. package/dist/config/storage.js +126 -0
  34. package/dist/config/storage.js.map +1 -0
  35. package/dist/history/session.d.ts +52 -0
  36. package/dist/history/session.d.ts.map +1 -0
  37. package/dist/history/session.js +122 -0
  38. package/dist/history/session.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +157 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/llm/base.d.ts +38 -0
  44. package/dist/llm/base.d.ts.map +1 -0
  45. package/dist/llm/base.js +22 -0
  46. package/dist/llm/base.js.map +1 -0
  47. package/dist/llm/factory.d.ts +12 -0
  48. package/dist/llm/factory.d.ts.map +1 -0
  49. package/dist/llm/factory.js +26 -0
  50. package/dist/llm/factory.js.map +1 -0
  51. package/dist/llm/openai.d.ts +10 -0
  52. package/dist/llm/openai.d.ts.map +1 -0
  53. package/dist/llm/openai.js +97 -0
  54. package/dist/llm/openai.js.map +1 -0
  55. package/dist/llm/zhipu.d.ts +10 -0
  56. package/dist/llm/zhipu.d.ts.map +1 -0
  57. package/dist/llm/zhipu.js +91 -0
  58. package/dist/llm/zhipu.js.map +1 -0
  59. package/dist/prompts/boss.d.ts +6 -0
  60. package/dist/prompts/boss.d.ts.map +1 -0
  61. package/dist/prompts/boss.js +41 -0
  62. package/dist/prompts/boss.js.map +1 -0
  63. package/dist/prompts/employee.d.ts +6 -0
  64. package/dist/prompts/employee.d.ts.map +1 -0
  65. package/dist/prompts/employee.js +41 -0
  66. package/dist/prompts/employee.js.map +1 -0
  67. package/dist/prompts/index.d.ts +4 -0
  68. package/dist/prompts/index.d.ts.map +1 -0
  69. package/dist/prompts/index.js +9 -0
  70. package/dist/prompts/index.js.map +1 -0
  71. package/dist/utils/formatter.d.ts +25 -0
  72. package/dist/utils/formatter.d.ts.map +1 -0
  73. package/dist/utils/formatter.js +83 -0
  74. package/dist/utils/formatter.js.map +1 -0
  75. package/dist/utils/logger.d.ts +10 -0
  76. package/dist/utils/logger.d.ts.map +1 -0
  77. package/dist/utils/logger.js +31 -0
  78. package/dist/utils/logger.js.map +1 -0
  79. package/dist/utils/stream.d.ts +36 -0
  80. package/dist/utils/stream.d.ts.map +1 -0
  81. package/dist/utils/stream.js +74 -0
  82. package/dist/utils/stream.js.map +1 -0
  83. package/docs/OPTIMIZATION.md +772 -0
  84. package/docs/TECHNICAL_PRINCIPLES.md +663 -0
  85. package/package.json +52 -0
  86. package/sample/1.png +0 -0
  87. package/sample/2.png +0 -0
  88. package/screenshots/chat-dialogue.png +0 -0
  89. package/screenshots/chat-mode.png +0 -0
  90. package/src/__tests__/config/settings.test.ts +48 -0
  91. package/src/__tests__/prompts/boss.test.ts +35 -0
  92. package/src/commands/chat.ts +328 -0
  93. package/src/commands/config.ts +283 -0
  94. package/src/commands/prompt.ts +154 -0
  95. package/src/config/providers.ts +109 -0
  96. package/src/config/session-storage.ts +94 -0
  97. package/src/config/settings.ts +194 -0
  98. package/src/config/storage.ts +150 -0
  99. package/src/history/session.ts +141 -0
  100. package/src/index.ts +164 -0
  101. package/src/llm/base.ts +55 -0
  102. package/src/llm/factory.ts +24 -0
  103. package/src/llm/openai.ts +113 -0
  104. package/src/llm/zhipu.ts +101 -0
  105. package/src/prompts/boss.ts +43 -0
  106. package/src/prompts/employee.ts +43 -0
  107. package/src/prompts/index.ts +3 -0
  108. package/src/utils/formatter.ts +104 -0
  109. package/src/utils/logger.ts +31 -0
  110. package/src/utils/stream.ts +76 -0
  111. package/tsconfig.json +20 -0
  112. package/vitest.config.ts +18 -0
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SessionStorage = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const os_1 = __importDefault(require("os"));
10
+ class SessionStorage {
11
+ sessionsDir;
12
+ constructor() {
13
+ this.sessionsDir = path_1.default.join(os_1.default.homedir(), '.pua-cli', 'sessions');
14
+ this.ensureDirectory();
15
+ }
16
+ ensureDirectory() {
17
+ if (!fs_1.default.existsSync(this.sessionsDir)) {
18
+ fs_1.default.mkdirSync(this.sessionsDir, { recursive: true });
19
+ }
20
+ }
21
+ listSessions() {
22
+ const files = fs_1.default.readdirSync(this.sessionsDir)
23
+ .filter(f => f.endsWith('.json'));
24
+ return files.map(file => {
25
+ const filePath = path_1.default.join(this.sessionsDir, file);
26
+ const content = fs_1.default.readFileSync(filePath, 'utf-8');
27
+ return JSON.parse(content);
28
+ })
29
+ .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
30
+ }
31
+ loadSession(sessionId) {
32
+ const filePath = path_1.default.join(this.sessionsDir, `${sessionId}.json`);
33
+ if (!fs_1.default.existsSync(filePath)) {
34
+ return null;
35
+ }
36
+ const content = fs_1.default.readFileSync(filePath, 'utf-8');
37
+ return JSON.parse(content);
38
+ }
39
+ saveSession(sessionData) {
40
+ const sessionId = this.generateId();
41
+ const now = new Date().toISOString();
42
+ const fullSession = {
43
+ ...sessionData,
44
+ id: sessionId,
45
+ createdAt: now,
46
+ updatedAt: now
47
+ };
48
+ const filePath = path_1.default.join(this.sessionsDir, `${sessionId}.json`);
49
+ fs_1.default.writeFileSync(filePath, JSON.stringify(fullSession, null, 2));
50
+ return fullSession;
51
+ }
52
+ deleteSession(sessionId) {
53
+ const filePath = path_1.default.join(this.sessionsDir, `${sessionId}.json`);
54
+ if (fs_1.default.existsSync(filePath)) {
55
+ fs_1.default.unlinkSync(filePath);
56
+ return true;
57
+ }
58
+ return false;
59
+ }
60
+ generateId() {
61
+ return `session-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
62
+ }
63
+ getSessionsDir() {
64
+ return this.sessionsDir;
65
+ }
66
+ }
67
+ exports.SessionStorage = SessionStorage;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/config/session-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { type ProviderType } from './providers';
2
+ export interface RuntimeConfig {
3
+ apiKey: string;
4
+ provider: ProviderType;
5
+ model: string;
6
+ role: 'boss' | 'employee';
7
+ severity: 'mild' | 'medium' | 'extreme';
8
+ }
9
+ export declare const DEFAULTS: {
10
+ provider: ProviderType;
11
+ model: string;
12
+ role: "boss" | "employee";
13
+ severity: "mild" | "medium" | "extreme";
14
+ };
15
+ /**
16
+ * Load configuration with priority:
17
+ * 1. Command line options (highest)
18
+ * 2. Environment variables
19
+ * 3. Project config (.pua.json)
20
+ * 4. Global config (~/.config/pua-cli/config.json)
21
+ * 5. Defaults (lowest)
22
+ */
23
+ export declare function loadConfig(options?: {
24
+ provider?: ProviderType;
25
+ model?: string;
26
+ role?: 'boss' | 'employee';
27
+ severity?: 'mild' | 'medium' | 'extreme';
28
+ apiKey?: string;
29
+ }): RuntimeConfig;
30
+ /**
31
+ * Error thrown when API key is missing
32
+ */
33
+ export declare class MissingApiKeyError extends Error {
34
+ constructor(provider: ProviderType);
35
+ }
36
+ /**
37
+ * Check if user needs onboarding
38
+ */
39
+ export declare function needsOnboarding(): boolean;
40
+ /**
41
+ * Get provider's base URL
42
+ */
43
+ export declare function getProviderBaseUrl(provider: ProviderType): string;
44
+ /**
45
+ * Get available models for a provider
46
+ */
47
+ export declare function getProviderModels(provider: ProviderType): string[];
48
+ /**
49
+ * Validate a config object
50
+ */
51
+ export declare function validateConfig(config: RuntimeConfig): {
52
+ valid: boolean;
53
+ errors: string[];
54
+ };
55
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"AAWA,OAAO,EAAiD,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAK/F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED,eAAO,MAAM,QAAQ;cACE,YAAY;;UAEjB,MAAM,GAAG,UAAU;cACb,MAAM,GAAG,QAAQ,GAAG,SAAS;CACpD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,aAAa,CA0DhB;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,QAAQ,EAAE,YAAY;CAanC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAUjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAUlE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA6B1F"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MissingApiKeyError = exports.DEFAULTS = void 0;
7
+ exports.loadConfig = loadConfig;
8
+ exports.needsOnboarding = needsOnboarding;
9
+ exports.getProviderBaseUrl = getProviderBaseUrl;
10
+ exports.getProviderModels = getProviderModels;
11
+ exports.validateConfig = validateConfig;
12
+ const dotenv_1 = __importDefault(require("dotenv"));
13
+ const storage_1 = require("./storage");
14
+ const providers_1 = require("./providers");
15
+ // Load environment variables
16
+ dotenv_1.default.config();
17
+ exports.DEFAULTS = {
18
+ provider: 'zhipu',
19
+ model: 'glm-4.7',
20
+ role: 'boss',
21
+ severity: 'medium',
22
+ };
23
+ /**
24
+ * Load configuration with priority:
25
+ * 1. Command line options (highest)
26
+ * 2. Environment variables
27
+ * 3. Project config (.pua.json)
28
+ * 4. Global config (~/.config/pua-cli/config.json)
29
+ * 5. Defaults (lowest)
30
+ */
31
+ function loadConfig(options) {
32
+ // Start with defaults
33
+ let provider = exports.DEFAULTS.provider;
34
+ let model = exports.DEFAULTS.model;
35
+ let role = exports.DEFAULTS.role;
36
+ let severity = exports.DEFAULTS.severity;
37
+ let apiKey = '';
38
+ // Load global config
39
+ const globalConfig = (0, storage_1.loadGlobalConfig)();
40
+ // Load project config
41
+ const projectConfig = (0, storage_1.loadProjectConfig)();
42
+ // Apply global config
43
+ if (globalConfig) {
44
+ provider = globalConfig.defaults.provider || provider;
45
+ model = globalConfig.defaults.model || model;
46
+ role = globalConfig.defaults.role || role;
47
+ severity = globalConfig.defaults.severity || severity;
48
+ apiKey = globalConfig.providers[globalConfig.currentProvider]?.apiKey || '';
49
+ }
50
+ // Apply project config
51
+ if (projectConfig) {
52
+ if (projectConfig.provider)
53
+ provider = projectConfig.provider;
54
+ if (projectConfig.model)
55
+ model = projectConfig.model;
56
+ if (projectConfig.role)
57
+ role = projectConfig.role;
58
+ if (projectConfig.severity)
59
+ severity = projectConfig.severity;
60
+ }
61
+ // Apply environment variables
62
+ const envApiKey = (0, providers_1.getApiKeyFromEnv)(provider);
63
+ if (envApiKey) {
64
+ apiKey = envApiKey;
65
+ }
66
+ // Apply command line options (highest priority)
67
+ if (options) {
68
+ if (options.provider)
69
+ provider = options.provider;
70
+ if (options.model)
71
+ model = options.model;
72
+ if (options.role)
73
+ role = options.role;
74
+ if (options.severity)
75
+ severity = options.severity;
76
+ if (options.apiKey)
77
+ apiKey = options.apiKey;
78
+ }
79
+ // Ensure API key is available
80
+ if (!apiKey) {
81
+ throw new MissingApiKeyError(provider);
82
+ }
83
+ return {
84
+ apiKey,
85
+ provider,
86
+ model,
87
+ role,
88
+ severity,
89
+ };
90
+ }
91
+ /**
92
+ * Error thrown when API key is missing
93
+ */
94
+ class MissingApiKeyError extends Error {
95
+ constructor(provider) {
96
+ const providerDef = (0, providers_1.getProvider)(provider);
97
+ const envKey = providerDef?.envKeyNames[0] || 'API_KEY';
98
+ super(`未找到 ${providerDef?.name || provider} 的 API Key\n\n` +
99
+ `请使用以下方式之一配置:\n` +
100
+ ` 1. 运行: pua config\n` +
101
+ ` 2. 设置环境变量: export ${envKey}="your-api-key"\n` +
102
+ ` 3. 创建 .env 文件并添加: ${envKey}=your-api-key`);
103
+ this.name = 'MissingApiKeyError';
104
+ }
105
+ }
106
+ exports.MissingApiKeyError = MissingApiKeyError;
107
+ /**
108
+ * Check if user needs onboarding
109
+ */
110
+ function needsOnboarding() {
111
+ return !(0, storage_1.hasGlobalConfig)();
112
+ }
113
+ /**
114
+ * Get provider's base URL
115
+ */
116
+ function getProviderBaseUrl(provider) {
117
+ const globalConfig = (0, storage_1.loadGlobalConfig)();
118
+ const providerConfig = globalConfig?.providers[provider];
119
+ if (providerConfig?.baseUrl) {
120
+ return providerConfig.baseUrl;
121
+ }
122
+ const providerDef = (0, providers_1.getProvider)(provider);
123
+ return providerDef?.defaultBaseUrl || '';
124
+ }
125
+ /**
126
+ * Get available models for a provider
127
+ */
128
+ function getProviderModels(provider) {
129
+ const globalConfig = (0, storage_1.loadGlobalConfig)();
130
+ const providerConfig = globalConfig?.providers[provider];
131
+ if (providerConfig?.models && providerConfig.models.length > 0) {
132
+ return providerConfig.models;
133
+ }
134
+ const providerDef = (0, providers_1.getProvider)(provider);
135
+ return providerDef?.defaultModels || [];
136
+ }
137
+ /**
138
+ * Validate a config object
139
+ */
140
+ function validateConfig(config) {
141
+ const errors = [];
142
+ // Validate provider
143
+ const providerDef = (0, providers_1.getProvider)(config.provider);
144
+ if (!providerDef) {
145
+ errors.push(`无效的 provider: ${config.provider}`);
146
+ }
147
+ // Validate API key
148
+ if (providerDef) {
149
+ const keyValidation = (0, providers_1.validateApiKey)(config.provider, config.apiKey);
150
+ if (!keyValidation.valid) {
151
+ errors.push(keyValidation.error || 'API Key 无效');
152
+ }
153
+ }
154
+ // Validate model
155
+ const availableModels = getProviderModels(config.provider);
156
+ if (availableModels.length > 0 && !availableModels.includes(config.model)) {
157
+ errors.push(`模型 ${config.model} 在 provider ${config.provider} 中不可用。可用模型: ${availableModels.join(', ')}`);
158
+ }
159
+ return {
160
+ valid: errors.length === 0,
161
+ errors,
162
+ };
163
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ export interface ProviderConfig {
2
+ apiKey: string;
3
+ baseUrl: string;
4
+ models: string[];
5
+ }
6
+ export interface GlobalConfig {
7
+ currentProvider: string;
8
+ providers: {
9
+ [key: string]: ProviderConfig;
10
+ };
11
+ defaults: {
12
+ provider: string;
13
+ model: string;
14
+ role: 'boss' | 'employee';
15
+ severity: 'mild' | 'medium' | 'extreme';
16
+ };
17
+ onboardingCompleted: boolean;
18
+ }
19
+ export interface ProjectConfig {
20
+ provider?: string;
21
+ model?: string;
22
+ role?: 'boss' | 'employee';
23
+ severity?: 'mild' | 'medium' | 'extreme';
24
+ }
25
+ /**
26
+ * Get the config directory path following XDG Base Directory Specification
27
+ */
28
+ export declare function getConfigDir(): string;
29
+ /**
30
+ * Get the global config file path
31
+ */
32
+ export declare function getGlobalConfigPath(): string;
33
+ /**
34
+ * Get the project config file path
35
+ */
36
+ export declare function getProjectConfigPath(): string;
37
+ /**
38
+ * Ensure config directory exists
39
+ */
40
+ export declare function ensureConfigDir(): void;
41
+ /**
42
+ * Load global config from file
43
+ */
44
+ export declare function loadGlobalConfig(): GlobalConfig | null;
45
+ /**
46
+ * Save global config to file
47
+ */
48
+ export declare function saveGlobalConfig(config: GlobalConfig): void;
49
+ /**
50
+ * Load project config from file
51
+ */
52
+ export declare function loadProjectConfig(): ProjectConfig | null;
53
+ /**
54
+ * Check if global config exists
55
+ */
56
+ export declare function hasGlobalConfig(): boolean;
57
+ /**
58
+ * Check if onboarding has been completed
59
+ */
60
+ export declare function isOnboardingCompleted(): boolean;
61
+ /**
62
+ * Get API key for a provider from config
63
+ */
64
+ export declare function getProviderApiKey(provider: string): string | null;
65
+ /**
66
+ * Get current provider
67
+ */
68
+ export declare function getCurrentProvider(): string | null;
69
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/config/storage.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC;KAC/B,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;QAC1B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;KACzC,CAAC;IACF,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAUrC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAatD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAS3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CAaxD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAGlD"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getConfigDir = getConfigDir;
7
+ exports.getGlobalConfigPath = getGlobalConfigPath;
8
+ exports.getProjectConfigPath = getProjectConfigPath;
9
+ exports.ensureConfigDir = ensureConfigDir;
10
+ exports.loadGlobalConfig = loadGlobalConfig;
11
+ exports.saveGlobalConfig = saveGlobalConfig;
12
+ exports.loadProjectConfig = loadProjectConfig;
13
+ exports.hasGlobalConfig = hasGlobalConfig;
14
+ exports.isOnboardingCompleted = isOnboardingCompleted;
15
+ exports.getProviderApiKey = getProviderApiKey;
16
+ exports.getCurrentProvider = getCurrentProvider;
17
+ const os_1 = __importDefault(require("os"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const fs_1 = __importDefault(require("fs"));
20
+ /**
21
+ * Get the config directory path following XDG Base Directory Specification
22
+ */
23
+ function getConfigDir() {
24
+ const platform = process.platform;
25
+ if (platform === 'win32') {
26
+ // Windows: %APPDATA%\pua-cli
27
+ return path_1.default.join(process.env.APPDATA || path_1.default.join(os_1.default.homedir(), 'AppData', 'Roaming'), 'pua-cli');
28
+ }
29
+ else {
30
+ // Linux/macOS: ~/.config/pua-cli
31
+ return path_1.default.join(os_1.default.homedir(), '.config', 'pua-cli');
32
+ }
33
+ }
34
+ /**
35
+ * Get the global config file path
36
+ */
37
+ function getGlobalConfigPath() {
38
+ return path_1.default.join(getConfigDir(), 'config.json');
39
+ }
40
+ /**
41
+ * Get the project config file path
42
+ */
43
+ function getProjectConfigPath() {
44
+ return path_1.default.join(process.cwd(), '.pua.json');
45
+ }
46
+ /**
47
+ * Ensure config directory exists
48
+ */
49
+ function ensureConfigDir() {
50
+ const configDir = getConfigDir();
51
+ if (!fs_1.default.existsSync(configDir)) {
52
+ fs_1.default.mkdirSync(configDir, { recursive: true });
53
+ }
54
+ }
55
+ /**
56
+ * Load global config from file
57
+ */
58
+ function loadGlobalConfig() {
59
+ const configPath = getGlobalConfigPath();
60
+ if (!fs_1.default.existsSync(configPath)) {
61
+ return null;
62
+ }
63
+ try {
64
+ const content = fs_1.default.readFileSync(configPath, 'utf-8');
65
+ return JSON.parse(content);
66
+ }
67
+ catch (error) {
68
+ throw new Error(`Failed to load config from ${configPath}: ${error instanceof Error ? error.message : String(error)}`);
69
+ }
70
+ }
71
+ /**
72
+ * Save global config to file
73
+ */
74
+ function saveGlobalConfig(config) {
75
+ ensureConfigDir();
76
+ const configPath = getGlobalConfigPath();
77
+ try {
78
+ fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
79
+ }
80
+ catch (error) {
81
+ throw new Error(`Failed to save config to ${configPath}: ${error instanceof Error ? error.message : String(error)}`);
82
+ }
83
+ }
84
+ /**
85
+ * Load project config from file
86
+ */
87
+ function loadProjectConfig() {
88
+ const configPath = getProjectConfigPath();
89
+ if (!fs_1.default.existsSync(configPath)) {
90
+ return null;
91
+ }
92
+ try {
93
+ const content = fs_1.default.readFileSync(configPath, 'utf-8');
94
+ return JSON.parse(content);
95
+ }
96
+ catch (error) {
97
+ throw new Error(`Failed to load project config from ${configPath}: ${error instanceof Error ? error.message : String(error)}`);
98
+ }
99
+ }
100
+ /**
101
+ * Check if global config exists
102
+ */
103
+ function hasGlobalConfig() {
104
+ return fs_1.default.existsSync(getGlobalConfigPath());
105
+ }
106
+ /**
107
+ * Check if onboarding has been completed
108
+ */
109
+ function isOnboardingCompleted() {
110
+ const config = loadGlobalConfig();
111
+ return config?.onboardingCompleted ?? false;
112
+ }
113
+ /**
114
+ * Get API key for a provider from config
115
+ */
116
+ function getProviderApiKey(provider) {
117
+ const config = loadGlobalConfig();
118
+ return config?.providers[provider]?.apiKey ?? null;
119
+ }
120
+ /**
121
+ * Get current provider
122
+ */
123
+ function getCurrentProvider() {
124
+ const config = loadGlobalConfig();
125
+ return config?.currentProvider ?? null;
126
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/config/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { Message } from '../llm/base';
2
+ export interface SessionHistory {
3
+ messages: Message[];
4
+ createdAt: Date;
5
+ lastUpdatedAt: Date;
6
+ }
7
+ export declare class SessionManager {
8
+ private sessions;
9
+ private currentSessionId;
10
+ /**
11
+ * Create a new session
12
+ */
13
+ createSession(sessionId: string): void;
14
+ /**
15
+ * Get current session
16
+ */
17
+ getCurrentSession(): SessionHistory | null;
18
+ /**
19
+ * Add a message to current session
20
+ */
21
+ addMessage(message: Message): void;
22
+ /**
23
+ * Get messages from current session
24
+ */
25
+ getMessages(): Message[];
26
+ /**
27
+ * Clear current session messages
28
+ */
29
+ clearCurrentSession(): void;
30
+ /**
31
+ * Delete a session
32
+ */
33
+ deleteSession(sessionId: string): void;
34
+ /**
35
+ * Get session info as string
36
+ */
37
+ getSessionInfo(): string;
38
+ /**
39
+ * Get formatted history for display
40
+ */
41
+ getFormattedHistory(): string;
42
+ /**
43
+ * Set current session
44
+ */
45
+ setCurrentSession(sessionId: string): void;
46
+ /**
47
+ * Check if current session has messages
48
+ */
49
+ hasMessages(): boolean;
50
+ }
51
+ export declare const sessionManager: SessionManager;
52
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/history/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,IAAI,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,gBAAgB,CAAuB;IAE/C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAStC;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAK1C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQlC;;OAEG;IACH,WAAW,IAAI,OAAO,EAAE;IAKxB;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAQ3B;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOtC;;OAEG;IACH,cAAc,IAAI,MAAM;IAoBxB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAqB7B;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ1C;;OAEG;IACH,WAAW,IAAI,OAAO;CAIvB;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}