From eec478d285fc07886c8c81c6430824ff980a0496 Mon Sep 17 00:00:00 2001 From: JinmingYang <2214962083@qq.com> Date: Mon, 29 May 2023 16:21:32 +0800 Subject: [PATCH] feat(gpt-runner-shared): move common utils and types to shared package --- alias.ts | 4 +- packages/gpt-runner-cli/package.json | 3 +- packages/gpt-runner-config/package.json | 1 + packages/gpt-runner-core/package.json | 1 + .../src/langchain/chatgpt.chain.ts | 8 +- packages/gpt-runner-shared/browser.cjs | 1 + packages/gpt-runner-shared/browser.d.ts | 1 + packages/gpt-runner-shared/browser.mjs | 1 + packages/gpt-runner-shared/build.config.ts | 19 ++++ packages/gpt-runner-shared/common.cjs | 1 + packages/gpt-runner-shared/common.d.ts | 1 + packages/gpt-runner-shared/common.mjs | 1 + packages/gpt-runner-shared/node.cjs | 1 + packages/gpt-runner-shared/node.d.ts | 1 + packages/gpt-runner-shared/node.mjs | 1 + packages/gpt-runner-shared/package.json | 62 ++++++++++++- .../src/browser/helpers/common.ts | 40 +++++++++ .../src/browser/helpers/index.ts | 1 + .../gpt-runner-shared/src/browser/index.ts | 1 + .../src/common/helpers/common.ts | 54 +++++++++++ .../src/common}/helpers/debug.ts | 4 + .../src/common/helpers}/env-config.ts | 0 .../src/common/helpers/index.ts | 4 + .../src/common/helpers}/is.ts | 0 .../gpt-runner-shared/src/common/index.ts | 2 + .../src/common/types/client.ts | 12 +++ .../src/common/types/common.ts | 1 + .../src/common/types/config.ts | 87 ++++++++++++++++++ .../src/common/types/enum.ts | 16 ++++ .../src/common/types/eventemitter.ts | 5 ++ .../src/common/types/index.ts | 6 ++ .../src/common/types/server.ts | 24 +++++ packages/gpt-runner-shared/src/index.ts | 1 - .../src/node/helpers/index.ts | 1 + .../src/node/helpers}/request.ts | 0 packages/gpt-runner-shared/src/node/index.ts | 1 + packages/gpt-runner-shared/tsconfig.json | 20 +++++ packages/gpt-runner-vscode/package.json | 3 +- .../components/chat-message-item/index.tsx | 5 +- .../client/src/helpers/utils.ts | 90 +------------------ .../client/src/hooks/use-emitter.hook.ts | 6 +- .../client/src/networks/chatgpt.ts | 4 +- .../client/src/networks/gpt-files.ts | 4 +- .../client/src/pages/chat/chat-sidebar.tsx | 2 +- .../client/src/pages/chat/index.tsx | 4 +- .../src/store/zustand/global/chat.slice.ts | 30 +------ .../client/src/store/zustand/utils.ts | 2 +- .../gpt-runner-web/client/src/types/common.ts | 7 -- packages/gpt-runner-web/index.ts | 6 +- packages/gpt-runner-web/package.json | 3 +- .../src/controllers/chatgpt.controller.ts | 16 +--- .../src/controllers/config.controller.ts | 2 +- .../src/controllers/gpt-files.controller.ts | 2 +- packages/gpt-runner-web/server/src/types.ts | 24 ----- packages/gpt-runner/package.json | 5 +- pnpm-lock.yaml | 70 ++++++--------- tsconfig.json | 4 +- 57 files changed, 431 insertions(+), 245 deletions(-) create mode 100644 packages/gpt-runner-shared/browser.cjs create mode 100644 packages/gpt-runner-shared/browser.d.ts create mode 100644 packages/gpt-runner-shared/browser.mjs create mode 100644 packages/gpt-runner-shared/build.config.ts create mode 100644 packages/gpt-runner-shared/common.cjs create mode 100644 packages/gpt-runner-shared/common.d.ts create mode 100644 packages/gpt-runner-shared/common.mjs create mode 100644 packages/gpt-runner-shared/node.cjs create mode 100644 packages/gpt-runner-shared/node.d.ts create mode 100644 packages/gpt-runner-shared/node.mjs create mode 100644 packages/gpt-runner-shared/src/browser/helpers/common.ts create mode 100644 packages/gpt-runner-shared/src/browser/helpers/index.ts create mode 100644 packages/gpt-runner-shared/src/browser/index.ts create mode 100644 packages/gpt-runner-shared/src/common/helpers/common.ts rename packages/{gpt-runner-web/client/src => gpt-runner-shared/src/common}/helpers/debug.ts (85%) rename packages/{gpt-runner-web => gpt-runner-shared/src/common/helpers}/env-config.ts (100%) create mode 100644 packages/gpt-runner-shared/src/common/helpers/index.ts rename packages/{gpt-runner-web/server/src/utils => gpt-runner-shared/src/common/helpers}/is.ts (100%) create mode 100644 packages/gpt-runner-shared/src/common/index.ts create mode 100644 packages/gpt-runner-shared/src/common/types/client.ts create mode 100644 packages/gpt-runner-shared/src/common/types/common.ts create mode 100644 packages/gpt-runner-shared/src/common/types/config.ts create mode 100644 packages/gpt-runner-shared/src/common/types/enum.ts create mode 100644 packages/gpt-runner-shared/src/common/types/eventemitter.ts create mode 100644 packages/gpt-runner-shared/src/common/types/index.ts create mode 100644 packages/gpt-runner-shared/src/common/types/server.ts delete mode 100644 packages/gpt-runner-shared/src/index.ts create mode 100644 packages/gpt-runner-shared/src/node/helpers/index.ts rename packages/{gpt-runner-web/server/src/utils => gpt-runner-shared/src/node/helpers}/request.ts (100%) create mode 100644 packages/gpt-runner-shared/src/node/index.ts create mode 100644 packages/gpt-runner-shared/tsconfig.json diff --git a/alias.ts b/alias.ts index 528085c..3d95101 100644 --- a/alias.ts +++ b/alias.ts @@ -10,5 +10,7 @@ export const alias: Record = { '@nicepkg/gpt-runner-config': r('./packages/gpt-runner-config/src/'), '@nicepkg/gpt-runner-web/client': r('./packages/gpt-runner-web/client/src/'), '@nicepkg/gpt-runner-web/server': r('./packages/gpt-runner-web/server/src/'), - '@nicepkg/gpt-runner-shared': r('./packages/gpt-runner-shared/src/'), + '@nicepkg/gpt-runner-shared/browser': r('./packages/gpt-runner-shared/src/browser'), + '@nicepkg/gpt-runner-shared/common': r('./packages/gpt-runner-shared/src/common'), + '@nicepkg/gpt-runner-shared/node': r('./packages/gpt-runner-shared/src/node'), } diff --git a/packages/gpt-runner-cli/package.json b/packages/gpt-runner-cli/package.json index f1f14b3..2c3225c 100644 --- a/packages/gpt-runner-cli/package.json +++ b/packages/gpt-runner-cli/package.json @@ -47,6 +47,7 @@ "@rollup/pluginutils": "^5.0.2", "@nicepkg/gpt-runner-config": "workspace:*", "@nicepkg/gpt-runner-core": "workspace:*", + "@nicepkg/gpt-runner-shared": "workspace:*", "cac": "^6.7.14", "chokidar": "^3.5.3", "colorette": "^2.0.20", @@ -56,4 +57,4 @@ "pathe": "^1.1.0", "perfect-debounce": "^1.0.0" } -} +} \ No newline at end of file diff --git a/packages/gpt-runner-config/package.json b/packages/gpt-runner-config/package.json index 328c023..7556566 100644 --- a/packages/gpt-runner-config/package.json +++ b/packages/gpt-runner-config/package.json @@ -38,6 +38,7 @@ }, "dependencies": { "@nicepkg/gpt-runner": "workspace:*", + "@nicepkg/gpt-runner-shared": "workspace:*", "unconfig": "^0.3.7" } } \ No newline at end of file diff --git a/packages/gpt-runner-core/package.json b/packages/gpt-runner-core/package.json index 2073680..36a765d 100644 --- a/packages/gpt-runner-core/package.json +++ b/packages/gpt-runner-core/package.json @@ -40,6 +40,7 @@ "stub": "unbuild --stub" }, "dependencies": { + "@nicepkg/gpt-runner-shared": "workspace:*", "ignore": "^5.2.4", "langchain": "^0.0.84", "unconfig": "^0.3.9" diff --git a/packages/gpt-runner-core/src/langchain/chatgpt.chain.ts b/packages/gpt-runner-core/src/langchain/chatgpt.chain.ts index 39ca885..6131717 100644 --- a/packages/gpt-runner-core/src/langchain/chatgpt.chain.ts +++ b/packages/gpt-runner-core/src/langchain/chatgpt.chain.ts @@ -14,12 +14,8 @@ import { MessagesPlaceholder, SystemMessagePromptTemplate, } from 'langchain/prompts' -import { ChatRole } from '../core/types' - -export interface ChatMessage { - name: ChatRole - text: string -} +import type { ChatMessage } from '@nicepkg/gpt-runner-shared/common' +import { ChatRole } from '@nicepkg/gpt-runner-shared/common' function mapStoredMessagesToChatMessages( messages: ChatMessage[], diff --git a/packages/gpt-runner-shared/browser.cjs b/packages/gpt-runner-shared/browser.cjs new file mode 100644 index 0000000..eef3b19 --- /dev/null +++ b/packages/gpt-runner-shared/browser.cjs @@ -0,0 +1 @@ +module.exports = require('./dist/browser.cjs') diff --git a/packages/gpt-runner-shared/browser.d.ts b/packages/gpt-runner-shared/browser.d.ts new file mode 100644 index 0000000..174e295 --- /dev/null +++ b/packages/gpt-runner-shared/browser.d.ts @@ -0,0 +1 @@ +export * from './dist/browser' diff --git a/packages/gpt-runner-shared/browser.mjs b/packages/gpt-runner-shared/browser.mjs new file mode 100644 index 0000000..174e295 --- /dev/null +++ b/packages/gpt-runner-shared/browser.mjs @@ -0,0 +1 @@ +export * from './dist/browser' diff --git a/packages/gpt-runner-shared/build.config.ts b/packages/gpt-runner-shared/build.config.ts new file mode 100644 index 0000000..21f16a5 --- /dev/null +++ b/packages/gpt-runner-shared/build.config.ts @@ -0,0 +1,19 @@ +import { defineBuildConfig } from 'unbuild' + +export default defineBuildConfig({ + entries: [ + 'src/browser', + 'src/common', + 'src/node', + ], + clean: true, + declaration: true, + externals: [ + 'unconfig', + 'express', + ], + rollup: { + emitCJS: true, + inlineDependencies: true, + }, +}) diff --git a/packages/gpt-runner-shared/common.cjs b/packages/gpt-runner-shared/common.cjs new file mode 100644 index 0000000..6a19411 --- /dev/null +++ b/packages/gpt-runner-shared/common.cjs @@ -0,0 +1 @@ +module.exports = require('./dist/common.cjs') diff --git a/packages/gpt-runner-shared/common.d.ts b/packages/gpt-runner-shared/common.d.ts new file mode 100644 index 0000000..b045b56 --- /dev/null +++ b/packages/gpt-runner-shared/common.d.ts @@ -0,0 +1 @@ +export * from './dist/common' diff --git a/packages/gpt-runner-shared/common.mjs b/packages/gpt-runner-shared/common.mjs new file mode 100644 index 0000000..b045b56 --- /dev/null +++ b/packages/gpt-runner-shared/common.mjs @@ -0,0 +1 @@ +export * from './dist/common' diff --git a/packages/gpt-runner-shared/node.cjs b/packages/gpt-runner-shared/node.cjs new file mode 100644 index 0000000..35cc908 --- /dev/null +++ b/packages/gpt-runner-shared/node.cjs @@ -0,0 +1 @@ +module.exports = require('./dist/node.cjs') diff --git a/packages/gpt-runner-shared/node.d.ts b/packages/gpt-runner-shared/node.d.ts new file mode 100644 index 0000000..cba67d2 --- /dev/null +++ b/packages/gpt-runner-shared/node.d.ts @@ -0,0 +1 @@ +export * from './dist/node' diff --git a/packages/gpt-runner-shared/node.mjs b/packages/gpt-runner-shared/node.mjs new file mode 100644 index 0000000..cba67d2 --- /dev/null +++ b/packages/gpt-runner-shared/node.mjs @@ -0,0 +1 @@ +export * from './dist/node' diff --git a/packages/gpt-runner-shared/package.json b/packages/gpt-runner-shared/package.json index e5e59be..0c45013 100644 --- a/packages/gpt-runner-shared/package.json +++ b/packages/gpt-runner-shared/package.json @@ -1,8 +1,62 @@ { "name": "@nicepkg/gpt-runner-shared", "version": "0.0.1", - "private": true, - "dependencies": { - "@nicepkg/gpt-runner-core": "workspace:*" + "description": "", + "author": "Jinming Yang <2214962083@qq.com>", + "license": "MIT", + "funding": "https://github.com/sponsors/2214962083", + "homepage": "https://github.com/nicepkg/gpt-runner/tree/main/packages/gpt-runner-shared#readme", + "repository": { + "type": "git", + "url": "https://github.com/nicepkg/gpt-runner", + "directory": "packages/gpt-runner-shared" + }, + "bugs": { + "url": "https://github.com/nicepkg/gpt-runner/issues" + }, + "keywords": [ + "gpt-runner", + "chatgpt", + "prompt", + "langchain", + "ai" + ], + "sideEffects": false, + "exports": { + ".": { + "types": "./dist/common.d.ts", + "require": "./dist/common.cjs", + "import": "./dist/common.mjs" + }, + "./*": "./*", + "./browser": { + "types": "./dist/browser.d.ts", + "require": "./dist/browser.cjs", + "import": "./dist/browser.mjs" + }, + "./common": { + "types": "./dist/common.d.ts", + "require": "./dist/common.cjs", + "import": "./dist/common.mjs" + }, + "./node": { + "types": "./dist/node.d.ts", + "require": "./dist/node.cjs", + "import": "./dist/node.mjs" + } + }, + "main": "dist/common.cjs", + "module": "dist/common.mjs", + "types": "dist/common.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "unbuild", + "stub": "unbuild --stub" + }, + "devDependencies": { + "@types/express": "^4.17.17", + "express": "^4.18.2" } -} +} \ No newline at end of file diff --git a/packages/gpt-runner-shared/src/browser/helpers/common.ts b/packages/gpt-runner-shared/src/browser/helpers/common.ts new file mode 100644 index 0000000..4707eaa --- /dev/null +++ b/packages/gpt-runner-shared/src/browser/helpers/common.ts @@ -0,0 +1,40 @@ +export function getErrorMsg(error: any) { + const errorMessage = String( + (error as Error)?.message || error || '', + ) + return errorMessage +} + +export function getSearchParams(val: string, url?: string): string { + const defaultUrl = typeof window !== 'undefined' ? window.location.href : '' + const finalUrl = url || defaultUrl || '' + const searchParams = finalUrl.split('?')?.[1] || '' + const params = new URLSearchParams(searchParams) + return params.get(val) || '' +} + +export function addSearchParams(urlLike: string, + searchParams: Record) { + const [urlBase = '', urlSearch = ''] = urlLike.split('?') + const params = new URLSearchParams(urlSearch) + Object.keys(searchParams).forEach((key) => { + params.set(key, searchParams[key]) + }) + const urlSearchParams = params.toString() + if (!urlSearchParams) + return urlBase + return `${urlBase}?${urlSearchParams}` +} + +export function removeSearchParams(urlLike: string, + searchParamKeys: string[]) { + const [urlBase = '', urlSearch = ''] = urlLike.split('?') + const params = new URLSearchParams(urlSearch) + searchParamKeys.forEach((key) => { + params.delete(key) + }) + const urlSearchParams = params.toString() + if (!urlSearchParams) + return urlBase + return `${urlBase}?${urlSearchParams}` +} diff --git a/packages/gpt-runner-shared/src/browser/helpers/index.ts b/packages/gpt-runner-shared/src/browser/helpers/index.ts new file mode 100644 index 0000000..89a3196 --- /dev/null +++ b/packages/gpt-runner-shared/src/browser/helpers/index.ts @@ -0,0 +1 @@ +export * from './common' diff --git a/packages/gpt-runner-shared/src/browser/index.ts b/packages/gpt-runner-shared/src/browser/index.ts new file mode 100644 index 0000000..b2a4c75 --- /dev/null +++ b/packages/gpt-runner-shared/src/browser/index.ts @@ -0,0 +1 @@ +export * from './helpers' diff --git a/packages/gpt-runner-shared/src/common/helpers/common.ts b/packages/gpt-runner-shared/src/common/helpers/common.ts new file mode 100644 index 0000000..5e10358 --- /dev/null +++ b/packages/gpt-runner-shared/src/common/helpers/common.ts @@ -0,0 +1,54 @@ +export function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +/** + * Checks if an object has its own property with the specified name. + * + * @param obj - The object to check. + * @param prop - The name of the property to check for. + * @returns True if the object has its own property with the specified name, false otherwise. + */ +export function hasOwn( + obj: T, + prop: K, +): boolean { + return Object.prototype.hasOwnProperty.call(obj, prop) +} + +export function formatSourceValue(value: any): T { + let result + if (value === 'true') { + result = true + } + else if (value === 'false') { + result = false + } + else if (/^-?\d*\.?\d+$/.test(value)) { + // regex pattern for matching float numbers + result = parseFloat(value) + } + else if (/^-?\d+$/.test(value)) { + // regex pattern for matching integer numbers + result = parseInt(value, 10) + } + else { + result = value + } + + return result as T +} + +export type TreeItem = T & { children?: TreeItem[] } +export function travelTree>, R extends TreeItem> = TreeItem> >(tree: T[], callback: (item: T, parent?: T) => void | R): R[] { + const travel = (tree: T[], parent?: T) => { + return tree.map((item) => { + const finalItem = callback(item, parent) || item + if (item.children) + finalItem.children = travel(item.children as T[], item) + + return finalItem + }) + } + return travel(tree) as R[] +} diff --git a/packages/gpt-runner-web/client/src/helpers/debug.ts b/packages/gpt-runner-shared/src/common/helpers/debug.ts similarity index 85% rename from packages/gpt-runner-web/client/src/helpers/debug.ts rename to packages/gpt-runner-shared/src/common/helpers/debug.ts index 8482ab8..52a42f2 100644 --- a/packages/gpt-runner-web/client/src/helpers/debug.ts +++ b/packages/gpt-runner-shared/src/common/helpers/debug.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/prefer-ts-expect-error */ +/* eslint-disable @typescript-eslint/ban-ts-comment */ import debug from 'debug' export class Debug { @@ -9,6 +11,8 @@ export class Debug { this.label = `gpt-runner:${label}` debug.enable(this.label) this.debugger = debug(this.label) + + // @ts-ignore this.debugger.useColors = true this.debugger.color = String(debug.selectColor(this.label)) } diff --git a/packages/gpt-runner-web/env-config.ts b/packages/gpt-runner-shared/src/common/helpers/env-config.ts similarity index 100% rename from packages/gpt-runner-web/env-config.ts rename to packages/gpt-runner-shared/src/common/helpers/env-config.ts diff --git a/packages/gpt-runner-shared/src/common/helpers/index.ts b/packages/gpt-runner-shared/src/common/helpers/index.ts new file mode 100644 index 0000000..e4ce10d --- /dev/null +++ b/packages/gpt-runner-shared/src/common/helpers/index.ts @@ -0,0 +1,4 @@ +export * from './common' +export * from './debug' +export * from './env-config' +export * from './is' diff --git a/packages/gpt-runner-web/server/src/utils/is.ts b/packages/gpt-runner-shared/src/common/helpers/is.ts similarity index 100% rename from packages/gpt-runner-web/server/src/utils/is.ts rename to packages/gpt-runner-shared/src/common/helpers/is.ts diff --git a/packages/gpt-runner-shared/src/common/index.ts b/packages/gpt-runner-shared/src/common/index.ts new file mode 100644 index 0000000..493732d --- /dev/null +++ b/packages/gpt-runner-shared/src/common/index.ts @@ -0,0 +1,2 @@ +export * from './helpers' +export * from './types' diff --git a/packages/gpt-runner-shared/src/common/types/client.ts b/packages/gpt-runner-shared/src/common/types/client.ts new file mode 100644 index 0000000..0da8ca8 --- /dev/null +++ b/packages/gpt-runner-shared/src/common/types/client.ts @@ -0,0 +1,12 @@ +import type { SingleChatMessage } from './config' +import type { ChatMessageStatus } from './enum' + +export interface SingleChat { + id: string + title: string + inputtingPrompt: string + systemPrompt: string + temperature: number + messages: SingleChatMessage[] + status: ChatMessageStatus +} diff --git a/packages/gpt-runner-shared/src/common/types/common.ts b/packages/gpt-runner-shared/src/common/types/common.ts new file mode 100644 index 0000000..2706367 --- /dev/null +++ b/packages/gpt-runner-shared/src/common/types/common.ts @@ -0,0 +1 @@ +export type Rule = string | RegExp | ((filePath: string) => boolean) diff --git a/packages/gpt-runner-shared/src/common/types/config.ts b/packages/gpt-runner-shared/src/common/types/config.ts new file mode 100644 index 0000000..c6e6808 --- /dev/null +++ b/packages/gpt-runner-shared/src/common/types/config.ts @@ -0,0 +1,87 @@ +import type { Rule } from './common' +import type { ChatRole } from './enum' + +export interface OpenaiConfig { + openaiKey: string + model?: string + temperature?: number + maxTokens?: number + topP?: number + topK?: number + frequencyPenalty?: number + presencePenalty?: number +} + +export interface UserConfig { + mode?: 'openai' + + openai?: { + openaiKey: string + model?: string + temperature?: number + maxTokens?: number + topP?: number + topK?: number + frequencyPenalty?: number + presencePenalty?: number + } + + rootPath?: string + includes?: Rule[] + excludes?: Rule[] + exts?: string[] + respectGitignore?: boolean +} + +export interface SingleChatMessage { + name: ChatRole + text: string +} + +export interface SingleFileConfig { + mode?: 'openai' + openai?: Partial + title?: string + userPrompt?: string + systemPrompt?: string + messages?: SingleChatMessage[] + forms?: Record +} + +export interface FormOption { + label?: string + value: string +} + +export interface FormInputConfig { + type: 'input' + defaultValue?: string +} + +export interface FormTextareaConfig { + type: 'textarea' + defaultValue?: string + row?: number +} + +export interface FormSelectConfig { + type: 'select' + defaultValue?: string + options: FormOption[] +} + +export interface FormCheckboxGroupConfig { + type: 'checkbox-group' + defaultValue?: string[] + options: FormOption[] +} + +export interface FormRadioGroupConfig { + type: 'radio-group' + defaultValue?: string + options: FormOption[] +} + +export type FormItemConfig = FormInputConfig | FormTextareaConfig | FormSelectConfig | FormCheckboxGroupConfig | FormRadioGroupConfig diff --git a/packages/gpt-runner-shared/src/common/types/enum.ts b/packages/gpt-runner-shared/src/common/types/enum.ts new file mode 100644 index 0000000..8df6aeb --- /dev/null +++ b/packages/gpt-runner-shared/src/common/types/enum.ts @@ -0,0 +1,16 @@ +export enum ChatRole { + User = 'user', + ASSISTANT = 'assistant', + SYSTEM = 'system', +} + +export enum ChatMessageStatus { + Idle = 'idle', + Pending = 'pending', + Success = 'success', + Error = 'error', +} + +export const enum ClientEventName { + AddMessageAction = 'add-message-action', +} diff --git a/packages/gpt-runner-shared/src/common/types/eventemitter.ts b/packages/gpt-runner-shared/src/common/types/eventemitter.ts new file mode 100644 index 0000000..b079901 --- /dev/null +++ b/packages/gpt-runner-shared/src/common/types/eventemitter.ts @@ -0,0 +1,5 @@ +import type { ClientEventName } from './enum' + +export interface ClientEventData { + [ClientEventName.AddMessageAction]: void +} diff --git a/packages/gpt-runner-shared/src/common/types/index.ts b/packages/gpt-runner-shared/src/common/types/index.ts new file mode 100644 index 0000000..2cbf5a2 --- /dev/null +++ b/packages/gpt-runner-shared/src/common/types/index.ts @@ -0,0 +1,6 @@ +export * from './client' +export * from './common' +export * from './config' +export * from './enum' +export * from './eventemitter' +export * from './server' diff --git a/packages/gpt-runner-shared/src/common/types/server.ts b/packages/gpt-runner-shared/src/common/types/server.ts new file mode 100644 index 0000000..0d34172 --- /dev/null +++ b/packages/gpt-runner-shared/src/common/types/server.ts @@ -0,0 +1,24 @@ +import type { ChatRole } from './enum' + +export interface BaseResponse { + type: 'Success' | 'Fail' + status?: number + message?: string + data?: T +} + +export type SuccessResponse = Omit, 'type'> & { type: 'Success' } +export type FailResponse = Omit, 'type'> & { type: 'Fail' } + +export interface ChatMessage { + name: ChatRole + text: string +} + +export interface ChatStreamReqParams { + messages: ChatMessage[] + prompt: string + openaiKey?: string + systemPrompt?: string + temperature?: number +} diff --git a/packages/gpt-runner-shared/src/index.ts b/packages/gpt-runner-shared/src/index.ts deleted file mode 100644 index 18d9d52..0000000 --- a/packages/gpt-runner-shared/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export const pkg = 'shared' diff --git a/packages/gpt-runner-shared/src/node/helpers/index.ts b/packages/gpt-runner-shared/src/node/helpers/index.ts new file mode 100644 index 0000000..582b1a3 --- /dev/null +++ b/packages/gpt-runner-shared/src/node/helpers/index.ts @@ -0,0 +1 @@ +export * from './request' diff --git a/packages/gpt-runner-web/server/src/utils/request.ts b/packages/gpt-runner-shared/src/node/helpers/request.ts similarity index 100% rename from packages/gpt-runner-web/server/src/utils/request.ts rename to packages/gpt-runner-shared/src/node/helpers/request.ts diff --git a/packages/gpt-runner-shared/src/node/index.ts b/packages/gpt-runner-shared/src/node/index.ts new file mode 100644 index 0000000..b2a4c75 --- /dev/null +++ b/packages/gpt-runner-shared/src/node/index.ts @@ -0,0 +1 @@ +export * from './helpers' diff --git a/packages/gpt-runner-shared/tsconfig.json b/packages/gpt-runner-shared/tsconfig.json new file mode 100644 index 0000000..c57eb56 --- /dev/null +++ b/packages/gpt-runner-shared/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + } +} diff --git a/packages/gpt-runner-vscode/package.json b/packages/gpt-runner-vscode/package.json index b4b9dc6..349cf43 100644 --- a/packages/gpt-runner-vscode/package.json +++ b/packages/gpt-runner-vscode/package.json @@ -69,10 +69,11 @@ "devDependencies": { "@types/vscode": "^1.71.0", "@nicepkg/gpt-runner": "workspace:*", + "@nicepkg/gpt-runner-shared": "workspace:*", "esno": "^0.16.3", "jiti": "^1.18.2", "prettier": "^2.8.8", "tsup": "^6.7.0", "unconfig": "^0.3.7" } -} +} \ No newline at end of file diff --git a/packages/gpt-runner-web/client/src/components/chat-message-item/index.tsx b/packages/gpt-runner-web/client/src/components/chat-message-item/index.tsx index d114b27..2847b73 100644 --- a/packages/gpt-runner-web/client/src/components/chat-message-item/index.tsx +++ b/packages/gpt-runner-web/client/src/components/chat-message-item/index.tsx @@ -1,9 +1,10 @@ import type { FC } from 'react' import { useCallback } from 'react' import clsx from 'clsx' +import type { SingleChatMessage } from '@nicepkg/gpt-runner-shared/common' +import { ChatMessageStatus } from '@nicepkg/gpt-runner-shared/common' +import { ChatRole } from '@nicepkg/gpt-runner-shared' import { MessageTextView } from '../chat-message-text-view' -import type { SingleChatMessage } from '../../store/zustand/global/chat.slice' -import { ChatMessageStatus, ChatRole } from '../../store/zustand/global/chat.slice' import { Icon } from '../icon' import { IconButton } from '../icon-button' import { useHover } from '../../hooks/use-hover.hook' diff --git a/packages/gpt-runner-web/client/src/helpers/utils.ts b/packages/gpt-runner-web/client/src/helpers/utils.ts index a5430b3..97b182a 100644 --- a/packages/gpt-runner-web/client/src/helpers/utils.ts +++ b/packages/gpt-runner-web/client/src/helpers/utils.ts @@ -1,4 +1,5 @@ import type { ParsedUrlQuery } from 'node:querystring' +import { formatSourceValue } from '@nicepkg/gpt-runner-shared/common' import type { MutableRefObject, Ref } from 'react' export function createEl(tag: T, @@ -10,10 +11,6 @@ export function createEl(tag: T, return el } -export function sleep(ms: number) { - return new Promise(resolve => setTimeout(resolve, ms)) -} - export function mergeRefs(...refs: (Ref | undefined)[]) { return (value: T) => { refs.forEach((ref) => { @@ -25,43 +22,6 @@ export function mergeRefs(...refs: (Ref | undefined)[]) { } } -/** - * Checks if an object has its own property with the specified name. - * - * @param obj - The object to check. - * @param prop - The name of the property to check for. - * @returns True if the object has its own property with the specified name, false otherwise. - */ -export function hasOwn( - obj: T, - prop: K, -): boolean { - return Object.prototype.hasOwnProperty.call(obj, prop) -} - -export function formatSourceValue(value: any): T { - let result - if (value === 'true') { - result = true - } - else if (value === 'false') { - result = false - } - else if (/^-?\d*\.?\d+$/.test(value)) { - // regex pattern for matching float numbers - result = parseFloat(value) - } - else if (/^-?\d+$/.test(value)) { - // regex pattern for matching integer numbers - result = parseInt(value, 10) - } - else { - result = value - } - - return result as T -} - export function formatRouteQuery(query?: ParsedUrlQuery): Partial { if (!query) return {} as Partial @@ -85,51 +45,3 @@ export function getErrorMsg(error: any) { ) return errorMessage } - -export function getSearchParams(val: string, url?: string): string { - const defaultUrl = typeof window !== 'undefined' ? window.location.href : '' - const finalUrl = url || defaultUrl || '' - const searchParams = finalUrl.split('?')?.[1] || '' - const params = new URLSearchParams(searchParams) - return params.get(val) || '' -} - -export function addSearchParams(urlLike: string, - searchParams: Record) { - const [urlBase = '', urlSearch = ''] = urlLike.split('?') - const params = new URLSearchParams(urlSearch) - Object.keys(searchParams).forEach((key) => { - params.set(key, searchParams[key]) - }) - const urlSearchParams = params.toString() - if (!urlSearchParams) - return urlBase - return `${urlBase}?${urlSearchParams}` -} - -export function removeSearchParams(urlLike: string, - searchParamKeys: string[]) { - const [urlBase = '', urlSearch = ''] = urlLike.split('?') - const params = new URLSearchParams(urlSearch) - searchParamKeys.forEach((key) => { - params.delete(key) - }) - const urlSearchParams = params.toString() - if (!urlSearchParams) - return urlBase - return `${urlBase}?${urlSearchParams}` -} - -type TreeItem = T & { children?: TreeItem[] } -export function travelTree>, R extends TreeItem> = TreeItem> >(tree: T[], callback: (item: T, parent?: T) => void | R): R[] { - const travel = (tree: T[], parent?: T) => { - return tree.map((item) => { - const finalItem = callback(item, parent) || item - if (item.children) - finalItem.children = travel(item.children as T[], item) - - return finalItem - }) - } - return travel(tree) as R[] -} diff --git a/packages/gpt-runner-web/client/src/hooks/use-emitter.hook.ts b/packages/gpt-runner-web/client/src/hooks/use-emitter.hook.ts index 92ed4a8..0ad8432 100644 --- a/packages/gpt-runner-web/client/src/hooks/use-emitter.hook.ts +++ b/packages/gpt-runner-web/client/src/hooks/use-emitter.hook.ts @@ -1,10 +1,6 @@ +import type { ClientEventData, ClientEventName } from '@nicepkg/gpt-runner-shared/common' import { EventEmitter } from 'eventemitter3' import { useEffect, useRef } from 'react' -import type { ClientEventName } from '../../../index' - -export interface ClientEventData { - [ClientEventName.AddMessageAction]: void -} if (!window.__emitter__) window.__emitter__ = new EventEmitter() diff --git a/packages/gpt-runner-web/client/src/networks/chatgpt.ts b/packages/gpt-runner-web/client/src/networks/chatgpt.ts index 07ac6a6..f435217 100644 --- a/packages/gpt-runner-web/client/src/networks/chatgpt.ts +++ b/packages/gpt-runner-web/client/src/networks/chatgpt.ts @@ -1,7 +1,7 @@ import type { EventSourceMessage } from '@microsoft/fetch-event-source' import { fetchEventSource } from '@microsoft/fetch-event-source' -import type { ChatStreamReqParams } from '../../../server/src/controllers/chatgpt.controller' -import { EnvConfig } from '../../../env-config' +import type { ChatStreamReqParams } from '@nicepkg/gpt-runner-shared/common' +import { EnvConfig } from '@nicepkg/gpt-runner-shared/common' export interface fetchChatStreamReqParams extends ChatStreamReqParams { namespace?: string diff --git a/packages/gpt-runner-web/client/src/networks/gpt-files.ts b/packages/gpt-runner-web/client/src/networks/gpt-files.ts index 93afc21..a66ef30 100644 --- a/packages/gpt-runner-web/client/src/networks/gpt-files.ts +++ b/packages/gpt-runner-web/client/src/networks/gpt-files.ts @@ -1,6 +1,6 @@ import type { GptFilesInfoToTree } from '@nicepkg/gpt-runner-core' -import { EnvConfig } from '../../../env-config' -import type { BaseResponse } from '../types/common' +import type { BaseResponse } from '@nicepkg/gpt-runner-shared/common' +import { EnvConfig } from '@nicepkg/gpt-runner-shared/common' export interface FetchGptFilesTreeParams { rootPath: string diff --git a/packages/gpt-runner-web/client/src/pages/chat/chat-sidebar.tsx b/packages/gpt-runner-web/client/src/pages/chat/chat-sidebar.tsx index f0ea5f0..cd90874 100644 --- a/packages/gpt-runner-web/client/src/pages/chat/chat-sidebar.tsx +++ b/packages/gpt-runner-web/client/src/pages/chat/chat-sidebar.tsx @@ -1,11 +1,11 @@ import type { FC } from 'react' import { useEffect, useState } from 'react' import { useQuery } from '@tanstack/react-query' +import { travelTree } from '@nicepkg/gpt-runner-shared/common' import type { SidebarProps } from '../../components/sidebar' import { Sidebar } from '../../components/sidebar' import { fetchGptFilesTree } from '../../networks/gpt-files' import type { TreeItemProps } from '../../components/tree-item' -import { travelTree } from '../../helpers/utils' export interface ChatSidebarProps { rootPath: string diff --git a/packages/gpt-runner-web/client/src/pages/chat/index.tsx b/packages/gpt-runner-web/client/src/pages/chat/index.tsx index 13426a6..f012e1e 100644 --- a/packages/gpt-runner-web/client/src/pages/chat/index.tsx +++ b/packages/gpt-runner-web/client/src/pages/chat/index.tsx @@ -1,14 +1,14 @@ import type { CSSProperties, FC } from 'react' import { useCallback, useEffect, useState } from 'react' import { VSCodePanelTab, VSCodePanelView } from '@vscode/webview-ui-toolkit/react' +import type { SingleChat } from '@nicepkg/gpt-runner-shared/common' +import { ChatMessageStatus, ChatRole } from '@nicepkg/gpt-runner-shared/common' import { useIsMobile } from '../../hooks/use-is-mobile.hook' import type { ChatMessagePanelProps } from '../../components/chat-message-panel' import { ChatMessagePanel } from '../../components/chat-message-panel' import { FlexRow } from '../../styles/global.styles' import { ChatMessageInput } from '../../components/chat-message-input' import { useGlobalStore } from '../../store/zustand/global' -import type { SingleChat } from '../../store/zustand/global/chat.slice' -import { ChatMessageStatus, ChatRole } from '../../store/zustand/global/chat.slice' import { useScrollDown } from '../../hooks/use-scroll-down.hook' import { IconButton } from '../../components/icon-button' import { ChatPanelWrapper, SidebarWrapper, StyledVSCodePanels } from './chat.styles' diff --git a/packages/gpt-runner-web/client/src/store/zustand/global/chat.slice.ts b/packages/gpt-runner-web/client/src/store/zustand/global/chat.slice.ts index 719018c..e9facc6 100644 --- a/packages/gpt-runner-web/client/src/store/zustand/global/chat.slice.ts +++ b/packages/gpt-runner-web/client/src/store/zustand/global/chat.slice.ts @@ -1,35 +1,9 @@ -import type { BaseChatMessage } from 'langchain/schema' import type { StateCreator } from 'zustand' +import type { SingleChat } from '@nicepkg/gpt-runner-shared/common' +import { ChatMessageStatus, ChatRole } from '@nicepkg/gpt-runner-shared/common' import type { GetState } from '../types' import { fetchChatgptStream } from '../../../networks/chatgpt' -export enum ChatMessageStatus { - Idle = 'idle', - Pending = 'pending', - Success = 'success', - Error = 'error', -} - -export enum ChatRole { - User = 'user', - ASSISTANT = 'assistant', - SYSTEM = 'system', -} - -export type SingleChatMessage = Pick & { - name: ChatRole -} - -export interface SingleChat { - id: string - title: string - inputtingPrompt: string - systemPrompt: string - temperature: number - messages: SingleChatMessage[] - status: ChatMessageStatus -} - export interface ChatSlice { openaiKey: string chatInstances: SingleChat[] diff --git a/packages/gpt-runner-web/client/src/store/zustand/utils.ts b/packages/gpt-runner-web/client/src/store/zustand/utils.ts index 20dd843..2b19c5b 100644 --- a/packages/gpt-runner-web/client/src/store/zustand/utils.ts +++ b/packages/gpt-runner-web/client/src/store/zustand/utils.ts @@ -1,7 +1,7 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' import cloneDeep from 'lodash-es/cloneDeep' -import { EnvConfig } from '../../../../env-config' +import { EnvConfig } from '@nicepkg/gpt-runner-shared' /** * The resetStateQueue is an array that holds callbacks to reset all stores. diff --git a/packages/gpt-runner-web/client/src/types/common.ts b/packages/gpt-runner-web/client/src/types/common.ts index b31184b..50ff3c5 100644 --- a/packages/gpt-runner-web/client/src/types/common.ts +++ b/packages/gpt-runner-web/client/src/types/common.ts @@ -1,10 +1,3 @@ import type { Component } from 'react' export type GetComponentProps = T extends Component ? P : never - -export interface BaseResponse { - type: 'Success' | 'Fail' - status?: number - message?: string - data?: T -} diff --git a/packages/gpt-runner-web/index.ts b/packages/gpt-runner-web/index.ts index 090cbdf..40cd797 100644 --- a/packages/gpt-runner-web/index.ts +++ b/packages/gpt-runner-web/index.ts @@ -1,5 +1 @@ -export const enum ClientEventName { - AddMessageAction = 'add-message-action', -} - -export * from './env-config' +export const pkg = 'gpt-runner-web' diff --git a/packages/gpt-runner-web/package.json b/packages/gpt-runner-web/package.json index 97f1245..1ff7680 100644 --- a/packages/gpt-runner-web/package.json +++ b/packages/gpt-runner-web/package.json @@ -9,7 +9,7 @@ "repository": { "type": "git", "url": "https://github.com/nicepkg/gpt-runner", - "directory": "packages/core" + "directory": "packages/gpt-runner-web" }, "bugs": { "url": "https://github.com/nicepkg/gpt-runner/issues" @@ -45,6 +45,7 @@ "dependencies": { "@microsoft/fetch-event-source": "^2.0.1", "@nicepkg/gpt-runner-core": "workspace:*", + "@nicepkg/gpt-runner-shared": "workspace:*", "@tanstack/react-query": "^4.29.11", "@vscode/webview-ui-toolkit": "^1.2.2", "clsx": "^1.2.1", diff --git a/packages/gpt-runner-web/server/src/controllers/chatgpt.controller.ts b/packages/gpt-runner-web/server/src/controllers/chatgpt.controller.ts index 5e25421..73fcaf4 100644 --- a/packages/gpt-runner-web/server/src/controllers/chatgpt.controller.ts +++ b/packages/gpt-runner-web/server/src/controllers/chatgpt.controller.ts @@ -1,19 +1,11 @@ import type { Request, Response } from 'express' -import type { ChatMessage } from '../services' +import type { ChatStreamReqParams } from '@nicepkg/gpt-runner-shared/common' +import { EnvConfig } from '@nicepkg/gpt-runner-shared/common' +import type { FailResponse, SuccessResponse } from '@nicepkg/gpt-runner-shared/node' +import { buildFailResponse, buildSuccessResponse, sendSuccessResponse } from '@nicepkg/gpt-runner-shared/node' import { chatgptChain } from '../services' -import type { FailResponse, SuccessResponse } from '../utils/request' -import { buildFailResponse, buildSuccessResponse, sendSuccessResponse } from '../utils/request' -import { EnvConfig } from '../../../env-config' import type { ControllerConfig } from './../types' -export interface ChatStreamReqParams { - messages: ChatMessage[] - prompt: string - openaiKey?: string - systemPrompt?: string - temperature?: number -} - export const chatgptControllers: ControllerConfig = { namespacePath: '/chatgpt', controllers: [ diff --git a/packages/gpt-runner-web/server/src/controllers/config.controller.ts b/packages/gpt-runner-web/server/src/controllers/config.controller.ts index ff7602d..56b34a3 100644 --- a/packages/gpt-runner-web/server/src/controllers/config.controller.ts +++ b/packages/gpt-runner-web/server/src/controllers/config.controller.ts @@ -1,6 +1,6 @@ +import { sendSuccessResponse } from '@nicepkg/gpt-runner-shared/node' import pkg from '../../../package.json' import type { ControllerConfig } from '../types' -import { sendSuccessResponse } from '../utils/request' export const configControllers: ControllerConfig = { namespacePath: '/config', diff --git a/packages/gpt-runner-web/server/src/controllers/gpt-files.controller.ts b/packages/gpt-runner-web/server/src/controllers/gpt-files.controller.ts index 55be615..20c06d9 100644 --- a/packages/gpt-runner-web/server/src/controllers/gpt-files.controller.ts +++ b/packages/gpt-runner-web/server/src/controllers/gpt-files.controller.ts @@ -1,8 +1,8 @@ import fs from 'node:fs' import path from 'node:path' import { getGptFiles, getGptFilesInfo, gptFilesInfoToTree, loadUserConfig } from '@nicepkg/gpt-runner-core' +import { sendFailResponse, sendSuccessResponse } from '@nicepkg/gpt-runner-shared/node' import type { ControllerConfig } from '../types' -import { sendFailResponse, sendSuccessResponse } from '../utils/request' export const gptFilesControllers: ControllerConfig = { namespacePath: '/gpt-files', diff --git a/packages/gpt-runner-web/server/src/types.ts b/packages/gpt-runner-web/server/src/types.ts index 3f1273b..69bd9b0 100644 --- a/packages/gpt-runner-web/server/src/types.ts +++ b/packages/gpt-runner-web/server/src/types.ts @@ -1,29 +1,5 @@ import type { Request, Response } from 'express' -export interface RequestProps { - prompt: string - options?: ChatContext - systemMessage: string - temperature?: number - top_p?: number -} - -export interface ChatContext { - conversationId?: string - parentMessageId?: string -} - -export interface ModelConfig { - apiModel?: ApiModel - reverseProxy?: string - timeoutMs?: number - socksProxy?: string - httpsProxy?: string - usage?: string -} - -export type ApiModel = 'ChatGPTAPI' | undefined - export interface ControllerConfig { namespacePath: string controllers: Controller[] diff --git a/packages/gpt-runner/package.json b/packages/gpt-runner/package.json index f49eb35..4bd2a25 100644 --- a/packages/gpt-runner/package.json +++ b/packages/gpt-runner/package.json @@ -45,6 +45,7 @@ "stub": "unbuild --stub" }, "dependencies": { - "@nicepkg/gpt-runner-core": "workspace:*" + "@nicepkg/gpt-runner-core": "workspace:*", + "@nicepkg/gpt-runner-shared": "workspace:*" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d73c0c..d2bcc06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -124,6 +124,9 @@ importers: '@nicepkg/gpt-runner-core': specifier: workspace:* version: link:../gpt-runner-core + '@nicepkg/gpt-runner-shared': + specifier: workspace:* + version: link:../gpt-runner-shared packages/gpt-runner-cli: dependencies: @@ -136,6 +139,9 @@ importers: '@nicepkg/gpt-runner-core': specifier: workspace:* version: link:../gpt-runner-core + '@nicepkg/gpt-runner-shared': + specifier: workspace:* + version: link:../gpt-runner-shared '@rollup/pluginutils': specifier: ^5.0.2 version: 5.0.2(rollup@3.21.7) @@ -169,12 +175,18 @@ importers: '@nicepkg/gpt-runner': specifier: workspace:* version: link:../gpt-runner + '@nicepkg/gpt-runner-shared': + specifier: workspace:* + version: link:../gpt-runner-shared unconfig: specifier: ^0.3.7 version: 0.3.7 packages/gpt-runner-core: dependencies: + '@nicepkg/gpt-runner-shared': + specifier: workspace:* + version: link:../gpt-runner-shared ignore: specifier: ^5.2.4 version: 5.2.4 @@ -186,16 +198,22 @@ importers: version: 0.3.9 packages/gpt-runner-shared: - dependencies: - '@nicepkg/gpt-runner-core': - specifier: workspace:* - version: link:../gpt-runner-core + devDependencies: + '@types/express': + specifier: ^4.17.17 + version: 4.17.17 + express: + specifier: ^4.18.2 + version: 4.18.2 packages/gpt-runner-vscode: devDependencies: '@nicepkg/gpt-runner': specifier: workspace:* version: link:../gpt-runner + '@nicepkg/gpt-runner-shared': + specifier: workspace:* + version: link:../gpt-runner-shared '@types/vscode': specifier: ^1.71.0 version: 1.78.0 @@ -223,6 +241,9 @@ importers: '@nicepkg/gpt-runner-core': specifier: workspace:* version: link:../gpt-runner-core + '@nicepkg/gpt-runner-shared': + specifier: workspace:* + version: link:../gpt-runner-shared '@tanstack/react-query': specifier: ^4.29.11 version: 4.29.11(react-dom@18.2.0)(react@18.2.0) @@ -2868,7 +2889,6 @@ packages: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: false /acorn-jsx@5.3.2(acorn@8.8.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -3001,7 +3021,6 @@ packages: /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: false /array-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} @@ -3145,7 +3164,6 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: false /boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -3240,7 +3258,6 @@ packages: /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - dev: false /c12@1.4.1: resolution: {integrity: sha512-0x7pWfLZpZsgtyotXtuepJc0rZYE0Aw8PwNAXs0jSG9zq6Sl5xmbWnFqfmRY01ieZLHNbvneSFm9/x88CvzAuw==} @@ -3573,19 +3590,16 @@ packages: engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 - dev: false /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - dev: false /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: false /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} @@ -3595,7 +3609,6 @@ packages: /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - dev: false /copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} @@ -3706,7 +3719,6 @@ packages: optional: true dependencies: ms: 2.0.0 - dev: false /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} @@ -3819,7 +3831,6 @@ packages: /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: false /detect-indent@7.0.1: resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} @@ -3901,7 +3912,6 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: false /electron-to-chromium@1.4.394: resolution: {integrity: sha512-0IbC2cfr8w5LxTz+nmn2cJTGafsK9iauV2r5A5scfzyovqLrxuLoxOHE5OBobP3oVIggJT+0JfKnw9sm87c8Hw==} @@ -3917,7 +3927,6 @@ packages: /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} - dev: false /encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -4494,7 +4503,6 @@ packages: /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -4937,7 +4945,6 @@ packages: /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - dev: false /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -5027,7 +5034,6 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: false /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -5135,7 +5141,6 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: false /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -5209,7 +5214,6 @@ packages: /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - dev: false /framer-motion@10.12.16(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-w/SfWEIWJkYSgRHYBmln7EhcNo31ao8Xexol8lGXf1pR/tlnBtf1HcxoUmEiEh6pacB4/geku5ami53AAQWHMQ==} @@ -5232,7 +5236,6 @@ packages: /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - dev: false /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} @@ -5605,7 +5608,6 @@ packages: setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: false /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} @@ -5760,7 +5762,6 @@ packages: /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - dev: false /is-alphabetical@1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} @@ -6653,11 +6654,9 @@ packages: /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - dev: false /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: false /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -6670,7 +6669,6 @@ packages: /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - dev: false /micromark-core-commonmark@1.0.6: resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} @@ -6878,7 +6876,6 @@ packages: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true - dev: false /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -7080,7 +7077,6 @@ packages: /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: false /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -7413,7 +7409,6 @@ packages: engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 - dev: false /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -7623,7 +7618,6 @@ packages: /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} - dev: false /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -7657,7 +7651,6 @@ packages: /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: false /path-to-regexp@6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} @@ -7866,7 +7859,6 @@ packages: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: false /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -7882,7 +7874,6 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 - dev: false /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -7894,7 +7885,6 @@ packages: /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - dev: false /raw-body@2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} @@ -7904,7 +7894,6 @@ packages: http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: false /rc9@2.1.0: resolution: {integrity: sha512-ROO9bv8PPqngWKoiUZU3JDQ4sugpdRs9DfwHnzDSxK25XtQn6BEHL6EOd/OtKuDT2qodrtNR+0WkPT6l0jxH5Q==} @@ -8425,7 +8414,6 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: false /serialize-error@7.0.1: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} @@ -8444,7 +8432,6 @@ packages: send: 0.18.0 transitivePeerDependencies: - supports-color - dev: false /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -8461,7 +8448,6 @@ packages: /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: false /shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} @@ -8707,7 +8693,6 @@ packages: /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - dev: false /std-env@3.3.3: resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} @@ -9031,7 +9016,6 @@ packages: /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - dev: false /totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} @@ -9216,7 +9200,6 @@ packages: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: false /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} @@ -9441,7 +9424,6 @@ packages: /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - dev: false /unplugin-auto-import@0.15.3(rollup@3.21.7): resolution: {integrity: sha512-RLT8SqbPn4bT7yBshZId0uPSofKWnwr66RyDaxWaFb/+f7OTDOWAsVNz+hOQLBWSjvbekr2xZY9ccS8TDHJbCQ==} @@ -9534,7 +9516,6 @@ packages: /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - dev: false /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} @@ -9569,7 +9550,6 @@ packages: /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - dev: false /vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} diff --git a/tsconfig.json b/tsconfig.json index 05db915..9066c7a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,7 +22,9 @@ "@nicepkg/gpt-runner-core": ["./packages/gpt-runner-core/src/index.ts"], "@nicepkg/gpt-runner-web/client": ["./packages/gpt-runner-web/client/src/index"], "@nicepkg/gpt-runner-web/server": ["./packages/gpt-runner-web/server/src/index"], - "@nicepkg/gpt-runner-shared": ["./packages/gpt-runner-shared/src/index.ts"], + "@nicepkg/gpt-runner-shared/browser": ["./packages/gpt-runner-shared/src/browser/index.ts"], + "@nicepkg/gpt-runner-shared/common": ["./packages/gpt-runner-shared/src/common/index.ts"], + "@nicepkg/gpt-runner-shared/node": ["./packages/gpt-runner-shared/src/node/index.ts"], } }, "exclude": [