@desktalk/core 0.1.2 → 0.1.4

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 (41) hide show
  1. package/dist/frontend/assets/{frontend-BIEc2N7M.js → frontend-BIX1osqf.js} +2 -2
  2. package/dist/frontend/assets/{frontend-BIEc2N7M.js.map → frontend-BIX1osqf.js.map} +1 -1
  3. package/dist/frontend/assets/{frontend-BG-YLJqZ.js → frontend-BzdZVdad.js} +2 -2
  4. package/dist/frontend/assets/{frontend-BG-YLJqZ.js.map → frontend-BzdZVdad.js.map} +1 -1
  5. package/dist/frontend/assets/{frontend-DHFvbI_u.js → frontend-CNI9ZWUx.js} +2 -2
  6. package/dist/frontend/assets/{frontend-DHFvbI_u.js.map → frontend-CNI9ZWUx.js.map} +1 -1
  7. package/dist/frontend/assets/{frontend-BNhxRpOo.js → frontend-CSSNHa7X.js} +2 -2
  8. package/dist/frontend/assets/{frontend-BNhxRpOo.js.map → frontend-CSSNHa7X.js.map} +1 -1
  9. package/dist/frontend/assets/{frontend-D9i707Nm.js → frontend-Da6BeHSp.js} +2 -2
  10. package/dist/frontend/assets/{frontend-D9i707Nm.js.map → frontend-Da6BeHSp.js.map} +1 -1
  11. package/dist/frontend/assets/{frontend-Dy9eRAQd.js → frontend-f1PcGFgm.js} +67 -25
  12. package/dist/frontend/assets/frontend-f1PcGFgm.js.map +1 -0
  13. package/dist/frontend/assets/{frontend-CrQvPdit.js → frontend-zfGj9snS.js} +2 -2
  14. package/dist/frontend/assets/{frontend-CrQvPdit.js.map → frontend-zfGj9snS.js.map} +1 -1
  15. package/dist/frontend/assets/{highlighted-body-TPN3WLV5-B8LPaWFP.js → highlighted-body-TPN3WLV5-g134n7tc.js} +2 -2
  16. package/dist/frontend/assets/{highlighted-body-TPN3WLV5-B8LPaWFP.js.map → highlighted-body-TPN3WLV5-g134n7tc.js.map} +1 -1
  17. package/dist/frontend/assets/index-AQaNuL08.css +1 -0
  18. package/dist/frontend/assets/{index-DCZC2uPI.js → index-D4gDxl9-.js} +99 -99
  19. package/dist/frontend/assets/index-D4gDxl9-.js.map +1 -0
  20. package/dist/frontend/index.html +2 -2
  21. package/dist/server/api-routes.d.ts.map +1 -1
  22. package/dist/server/api-routes.js +88 -7
  23. package/dist/server/api-routes.js.map +1 -1
  24. package/dist/server/index.d.ts.map +1 -1
  25. package/dist/server/index.js +3 -0
  26. package/dist/server/index.js.map +1 -1
  27. package/dist/services/ai/pi-session-service.d.ts +8 -0
  28. package/dist/services/ai/pi-session-service.d.ts.map +1 -1
  29. package/dist/services/ai/pi-session-service.js +17 -1
  30. package/dist/services/ai/pi-session-service.js.map +1 -1
  31. package/dist/services/ai/providers.d.ts.map +1 -1
  32. package/dist/services/ai/providers.js +40 -14
  33. package/dist/services/ai/providers.js.map +1 -1
  34. package/dist/services/logger.d.ts +2 -2
  35. package/dist/services/logger.d.ts.map +1 -1
  36. package/dist/services/logger.js +55 -12
  37. package/dist/services/logger.js.map +1 -1
  38. package/package.json +12 -10
  39. package/dist/frontend/assets/frontend-Dy9eRAQd.js.map +0 -1
  40. package/dist/frontend/assets/index-BljFdF__.css +0 -1
  41. package/dist/frontend/assets/index-DCZC2uPI.js.map +0 -1
@@ -1,8 +1,19 @@
1
1
  export const AI_DEFAULT_PROVIDER = 'openai';
2
+ const LEGACY_AI_PROVIDER_IDS = {
3
+ copilot: 'github-copilot',
4
+ };
5
+ function normalizeAiProviderId(provider) {
6
+ return LEGACY_AI_PROVIDER_IDS[provider] ?? provider;
7
+ }
8
+ function getLegacyAiProviderIds(provider) {
9
+ return Object.entries(LEGACY_AI_PROVIDER_IDS)
10
+ .filter(([, canonical]) => canonical === provider)
11
+ .map(([legacy]) => legacy);
12
+ }
2
13
  export const AI_PROVIDER_DEFINITIONS = [
3
14
  // ─── Subscription (OAuth) providers ────────────────────────────────────
4
15
  {
5
- id: 'copilot',
16
+ id: 'github-copilot',
6
17
  label: 'GitHub Copilot',
7
18
  authType: 'subscription',
8
19
  supportsApiKey: false,
@@ -147,13 +158,15 @@ export const AI_PROVIDER_DEFINITIONS = [
147
158
  },
148
159
  ];
149
160
  export function getAiProviderPreferenceKey(provider, field) {
150
- return `ai.providers.${provider}.${field}`;
161
+ return `ai.providers.${normalizeAiProviderId(provider)}.${field}`;
151
162
  }
152
163
  export function isKnownAiProvider(provider) {
153
- return AI_PROVIDER_DEFINITIONS.some((entry) => entry.id === provider);
164
+ const normalizedProvider = normalizeAiProviderId(provider);
165
+ return AI_PROVIDER_DEFINITIONS.some((entry) => entry.id === normalizedProvider);
154
166
  }
155
167
  export function getAiProviderDefinition(provider) {
156
- return AI_PROVIDER_DEFINITIONS.find((entry) => entry.id === provider);
168
+ const normalizedProvider = normalizeAiProviderId(provider);
169
+ return AI_PROVIDER_DEFINITIONS.find((entry) => entry.id === normalizedProvider);
157
170
  }
158
171
  export function isSubscriptionProvider(provider) {
159
172
  const definition = getAiProviderDefinition(provider);
@@ -163,19 +176,32 @@ export async function getDefaultAiProvider(getPreference) {
163
176
  const configured = (await getPreference('ai.defaultProvider')) ??
164
177
  (await getPreference('ai.provider')) ??
165
178
  AI_DEFAULT_PROVIDER;
166
- return isKnownAiProvider(configured) ? configured : AI_DEFAULT_PROVIDER;
179
+ const normalizedProvider = normalizeAiProviderId(configured);
180
+ return isKnownAiProvider(normalizedProvider) ? normalizedProvider : AI_DEFAULT_PROVIDER;
167
181
  }
168
182
  export async function getAiProviderPreferences(getPreference, provider) {
169
- const legacyProvider = (await getPreference('ai.provider')) ?? AI_DEFAULT_PROVIDER;
170
- const legacyMatches = legacyProvider === provider;
171
- const model = (await getPreference(getAiProviderPreferenceKey(provider, 'model'))) ??
172
- (legacyMatches ? ((await getPreference('ai.model')) ?? '') : '');
173
- const apiKey = (await getPreference(getAiProviderPreferenceKey(provider, 'apiKey'))) ??
174
- (legacyMatches ? ((await getPreference('ai.apiKey')) ?? '') : '');
175
- const baseUrl = (await getPreference(getAiProviderPreferenceKey(provider, 'baseUrl'))) ??
176
- (legacyMatches ? ((await getPreference('ai.baseUrl')) ?? '') : '');
183
+ const normalizedProvider = normalizeAiProviderId(provider);
184
+ const legacyProvider = normalizeAiProviderId((await getPreference('ai.provider')) ?? AI_DEFAULT_PROVIDER);
185
+ const legacyMatches = legacyProvider === normalizedProvider;
186
+ const providerIds = [normalizedProvider, ...getLegacyAiProviderIds(normalizedProvider)];
187
+ const readProviderField = async (field) => {
188
+ for (const providerId of providerIds) {
189
+ const value = (await getPreference(`ai.providers.${providerId}.${field}`));
190
+ if (value !== undefined) {
191
+ return value;
192
+ }
193
+ }
194
+ if (!legacyMatches) {
195
+ return '';
196
+ }
197
+ const legacyKey = field === 'model' ? 'ai.model' : field === 'apiKey' ? 'ai.apiKey' : 'ai.baseUrl';
198
+ return (await getPreference(legacyKey)) ?? '';
199
+ };
200
+ const model = await readProviderField('model');
201
+ const apiKey = await readProviderField('apiKey');
202
+ const baseUrl = await readProviderField('baseUrl');
177
203
  return {
178
- provider,
204
+ provider: normalizedProvider,
179
205
  model,
180
206
  apiKey,
181
207
  baseUrl,
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/services/ai/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/services/ai/providers.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@ export interface LoggerConfig {
10
10
  /**
11
11
  * Creates the root pino logger.
12
12
  *
13
- * - Dev mode: pretty-printed to stdout via pino-pretty.
14
- * - Prod mode: structured JSON written to <logDir>/desktalk.log.
13
+ * - Dev mode: pretty-printed to stdout via pino-pretty (debug level).
14
+ * - Prod mode: pretty-printed to stdout + structured JSON to <logDir>/desktalk.log (info level).
15
15
  */
16
16
  export declare function createRootLogger(opts: {
17
17
  dev: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,MAAM,CA6BpF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CA8BlF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,YAAY,CAMf"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,MAAM,CA+CpF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAiDlF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,YAAY,CAMf"}
@@ -4,8 +4,8 @@ import { mkdirSync, existsSync } from 'node:fs';
4
4
  /**
5
5
  * Creates the root pino logger.
6
6
  *
7
- * - Dev mode: pretty-printed to stdout via pino-pretty.
8
- * - Prod mode: structured JSON written to <logDir>/desktalk.log.
7
+ * - Dev mode: pretty-printed to stdout via pino-pretty (debug level).
8
+ * - Prod mode: pretty-printed to stdout + structured JSON to <logDir>/desktalk.log (info level).
9
9
  */
10
10
  export function createRootLogger(opts) {
11
11
  if (opts.dev) {
@@ -26,11 +26,32 @@ export function createRootLogger(opts) {
26
26
  if (!existsSync(opts.logDir)) {
27
27
  mkdirSync(opts.logDir, { recursive: true });
28
28
  }
29
- return pino({ level: 'info' }, pino.destination({
30
- dest: join(opts.logDir, 'desktalk.log'),
31
- mkdir: true,
32
- sync: false,
33
- }));
29
+ return pino({
30
+ level: 'info',
31
+ transport: {
32
+ targets: [
33
+ {
34
+ target: 'pino-pretty',
35
+ level: 'info',
36
+ options: {
37
+ colorize: true,
38
+ translateTime: 'HH:MM:ss.l',
39
+ ignore: 'pid,hostname',
40
+ singleLine: true,
41
+ destination: 1, // stdout
42
+ },
43
+ },
44
+ {
45
+ target: 'pino/file',
46
+ level: 'info',
47
+ options: {
48
+ destination: join(opts.logDir, 'desktalk.log'),
49
+ mkdir: true,
50
+ },
51
+ },
52
+ ],
53
+ },
54
+ });
34
55
  }
35
56
  /**
36
57
  * Creates a pino logger in a child process from the serialized config.
@@ -56,11 +77,33 @@ export function createChildLogger(config, scope) {
56
77
  if (!existsSync(config.logDir)) {
57
78
  mkdirSync(config.logDir, { recursive: true });
58
79
  }
59
- return pino({ level: config.level, base: { scope } }, pino.destination({
60
- dest: join(config.logDir, 'desktalk.log'),
61
- mkdir: true,
62
- sync: false,
63
- }));
80
+ return pino({
81
+ level: config.level,
82
+ base: { scope },
83
+ transport: {
84
+ targets: [
85
+ {
86
+ target: 'pino-pretty',
87
+ level: 'info',
88
+ options: {
89
+ colorize: true,
90
+ translateTime: 'HH:MM:ss.l',
91
+ ignore: 'pid,hostname',
92
+ singleLine: true,
93
+ destination: 1, // stdout
94
+ },
95
+ },
96
+ {
97
+ target: 'pino/file',
98
+ level: config.level,
99
+ options: {
100
+ destination: join(config.logDir, 'desktalk.log'),
101
+ mkdir: true,
102
+ },
103
+ },
104
+ ],
105
+ },
106
+ });
64
107
  }
65
108
  /**
66
109
  * Extracts a serializable LoggerConfig from a root logger's setup.
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAWhD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAsC;IACrE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;YACV,KAAK,EAAE,OAAO;YACd,SAAS,EAAE;gBACT,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,YAAY;oBAC3B,MAAM,EAAE,cAAc;oBACtB,UAAU,EAAE,IAAI;iBACjB;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,IAAI,CACT,EAAE,KAAK,EAAE,MAAM,EAAE,EACjB,IAAI,CAAC,WAAW,CAAC;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC;QACvC,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,KAAK;KACZ,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB,EAAE,KAAa;IACnE,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;YACV,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,EAAE,KAAK,EAAE;YACf,SAAS,EAAE;gBACT,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,YAAY;oBAC3B,MAAM,EAAE,cAAc;oBACtB,UAAU,EAAE,IAAI;iBACjB;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,CACT,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EACxC,IAAI,CAAC,WAAW,CAAC;QACf,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;QACzC,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,KAAK;KACZ,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@desktalk/core",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "DeskTalk application shell, CLI, and backend server.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -49,17 +49,18 @@
49
49
  "sharp": "^0.34.5",
50
50
  "simple-git": "^3.33.0",
51
51
  "undici": "^7.24.1",
52
- "@desktalk/miniapp-file-explorer": "0.1.2",
53
- "@desktalk/miniapp-player": "0.1.2",
54
- "@desktalk/miniapp-preference": "0.1.2",
55
- "@desktalk/miniapp-note": "0.1.2",
56
- "@desktalk/miniapp-preview": "0.1.2",
57
- "@desktalk/miniapp-text-edit": "0.1.2",
58
- "@desktalk/miniapp-terminal": "0.1.2",
59
- "@desktalk/sdk": "0.1.2",
60
- "@desktalk/ui": "0.1.2"
52
+ "@desktalk/miniapp-file-explorer": "0.1.4",
53
+ "@desktalk/miniapp-note": "0.1.4",
54
+ "@desktalk/miniapp-player": "0.1.4",
55
+ "@desktalk/miniapp-preference": "0.1.4",
56
+ "@desktalk/miniapp-terminal": "0.1.4",
57
+ "@desktalk/sdk": "0.1.4",
58
+ "@desktalk/miniapp-text-edit": "0.1.4",
59
+ "@desktalk/miniapp-preview": "0.1.4",
60
+ "@desktalk/ui": "0.1.4"
61
61
  },
62
62
  "devDependencies": {
63
+ "@playwright/test": "^1.55.0",
63
64
  "@types/better-sqlite3": "^7.6.13",
64
65
  "@types/culori": "^4.0.1",
65
66
  "@types/node": "^22.0.0",
@@ -86,6 +87,7 @@
86
87
  "dev:backend": "node dist/cli/index.js start --dev",
87
88
  "dev:frontend": "vite",
88
89
  "clean": "rm -rf dist",
90
+ "e2e:test": "playwright test --config playwright.config.ts",
89
91
  "unit:test": "vitest run"
90
92
  }
91
93
  }