feat: restructure command for Claude models and add new remote routes

- Deleted the old cc.ts command and created a new cc.ts under src/command/claude for better organization.
- Added support for a new model 'bailian' in the command.
- Implemented remote app connection status and connection routes in assistant/src/routes/remote/index.ts.
- Updated index.ts to reflect the new path for the cc command.
- Added a placeholder for future management of plugin operations in src/command/opencode/plugin.ts.
This commit is contained in:
2026-01-21 23:22:58 +08:00
parent a911334459
commit 028a6ac726
15 changed files with 469 additions and 276 deletions

View File

@@ -42,15 +42,16 @@
}, },
"devDependencies": { "devDependencies": {
"@kevisual/ai": "^0.0.21", "@kevisual/ai": "^0.0.21",
"@kevisual/api": "^0.0.22",
"@kevisual/load": "^0.0.6", "@kevisual/load": "^0.0.6",
"@kevisual/local-app-manager": "^0.1.32", "@kevisual/local-app-manager": "^0.1.32",
"@kevisual/logger": "^0.0.4", "@kevisual/logger": "^0.0.4",
"@kevisual/query": "0.0.35", "@kevisual/query": "0.0.37",
"@kevisual/query-login": "0.0.7", "@kevisual/query-login": "0.0.7",
"@kevisual/router": "^0.0.57", "@kevisual/router": "^0.0.60",
"@kevisual/types": "^0.0.11", "@kevisual/types": "^0.0.12",
"@kevisual/use-config": "^1.0.28", "@kevisual/use-config": "^1.0.28",
"@opencode-ai/plugin": "^1.1.26", "@opencode-ai/plugin": "^1.1.28",
"@types/bun": "^1.3.6", "@types/bun": "^1.3.6",
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/node": "^25.0.9", "@types/node": "^25.0.9",
@@ -62,7 +63,7 @@
"dayjs": "^1.11.19", "dayjs": "^1.11.19",
"dotenv": "^17.2.3", "dotenv": "^17.2.3",
"get-port": "^7.1.0", "get-port": "^7.1.0",
"inquirer": "^13.2.0", "inquirer": "^13.2.1",
"lodash-es": "^4.17.22", "lodash-es": "^4.17.22",
"nanoid": "^5.1.6", "nanoid": "^5.1.6",
"send": "^1.2.1", "send": "^1.2.1",
@@ -77,11 +78,11 @@
"access": "public" "access": "public"
}, },
"dependencies": { "dependencies": {
"@aws-sdk/client-s3": "^3.971.0", "@aws-sdk/client-s3": "^3.972.0",
"@kevisual/ha-api": "^0.0.6", "@kevisual/ha-api": "^0.0.6",
"@kevisual/oss": "^0.0.16", "@kevisual/oss": "^0.0.16",
"@kevisual/video-tools": "^0.0.13", "@kevisual/video-tools": "^0.0.13",
"@opencode-ai/sdk": "^1.1.26", "@opencode-ai/sdk": "^1.1.28",
"es-toolkit": "^1.44.0", "es-toolkit": "^1.44.0",
"eventemitter3": "^5.0.4", "eventemitter3": "^5.0.4",
"lowdb": "^7.0.1", "lowdb": "^7.0.1",

View File

@@ -94,6 +94,15 @@ export type AssistantConfigData = {
* 例子: { path: '/root/home', target: 'https://kevisual.cn', pathname: '/root/home' } * 例子: { path: '/root/home', target: 'https://kevisual.cn', pathname: '/root/home' }
*/ */
proxy?: ProxyInfo[]; proxy?: ProxyInfo[];
/**
* Router代理, 会自动获取 {path: 'router', key: 'list'}的路由信息,然后注入到整个router应用当中.
* 例子: { proxy: [ { type: 'router', api: 'https://localhost:50002/api/router' } ] }
* base: 是否使用 /api/router的基础路径默认false
*/
router?: {
proxy: ProxyInfo[];
base?: boolean;
}
/** /**
* API 代理配置, 比如api开头的v1开头的等等 * API 代理配置, 比如api开头的v1开头的等等
*/ */

View File

@@ -7,12 +7,16 @@ import glob from 'fast-glob';
import type { App } from '@kevisual/router'; import type { App } from '@kevisual/router';
import { RemoteApp } from '@/module/remote-app/remote-app.ts'; import { RemoteApp } from '@/module/remote-app/remote-app.ts';
import { logger } from '@/module/logger.ts'; import { logger } from '@/module/logger.ts';
import { getEnvToken } from '@/module/http-token.ts';
import { initApi } from '@kevisual/api/proxy'
import { Query } from '@kevisual/query';
export class AssistantApp extends Manager { export class AssistantApp extends Manager {
config: AssistantConfig; config: AssistantConfig;
pagesPath: string; pagesPath: string;
remoteIsConnected = false; remoteIsConnected = false;
attemptedConnectTimes = 0; attemptedConnectTimes = 0;
remoteApp: RemoteApp | null = null; remoteApp: RemoteApp | null = null;
remoteUrl: string | null = null;
constructor(config: AssistantConfig, mainApp?: App) { constructor(config: AssistantConfig, mainApp?: App) {
config.checkMounted(); config.checkMounted();
const appsPath = config?.configPath?.appsDir || path.join(process.cwd(), 'apps'); const appsPath = config?.configPath?.appsDir || path.join(process.cwd(), 'apps');
@@ -71,11 +75,17 @@ export class AssistantApp extends Manager {
return pagesParse; return pagesParse;
} }
async initRemoteApp() { async initRemoteApp(opts?: { token?: string, enabled?: boolean }) {
const config = this.config.getConfig(); const config = this.config.getConfig();
const share = config?.share; const share = config?.share;
if (share && share.enabled !== false) { const enabled = opts?.enabled ?? share?.enabled ?? false;
const token = config?.token; if (share && enabled !== false) {
if (this.remoteApp) {
this.remoteApp.ws?.close();
this.remoteApp = null;
this.remoteIsConnected = false;
}
const token = config?.token || opts?.token || getEnvToken() as string;
const url = new URL(share.url || 'https://kevisual.cn/ws/proxy'); const url = new URL(share.url || 'https://kevisual.cn/ws/proxy');
const id = config?.app?.id; const id = config?.app?.id;
if (token && url && id) { if (token && url && id) {
@@ -99,12 +109,63 @@ export class AssistantApp extends Manager {
}, 5 * 1000); // 第一次断开5秒后重连 }, 5 * 1000); // 第一次断开5秒后重连
}); });
logger.debug('链接到了远程应用服务器'); logger.debug('链接到了远程应用服务器');
const appId = id;
const username = config?.auth.username || 'unknown';
const url = new URL(`/${username}/v1/${appId}`, 'https://kevisual.cn/');
this.remoteUrl = url.toString();
console.log('远程地址', this.remoteUrl);
} else { } else {
console.log('Not connected to remote app server'); console.log('Not connected to remote app server');
} }
this.remoteApp = remoteApp; this.remoteApp = remoteApp;
} else { } else {
// if (!token) {
logger.error('Token是远程应用连接必须的参数');
}
}
}
}
async initRouterApp() {
const config = this.config.getConfig();
const routerProxy = config.router.proxy || [];
const base = config.router.base ?? false;
if (base) {
routerProxy.push({
type: 'router',
router: {
url: `${this.config.getRegistry()}/api/router`,
}
})
}
if (routerProxy.length === 0) {
return
}
for (const proxyInfo of routerProxy) {
if (proxyInfo.type !== 'router') {
console.warn('路由的type必须是"router"');
continue;
}
const url = proxyInfo.router!.url;
if (!url) {
console.warn('路由的api地址不能为空', proxyInfo.router);
continue;
}
const query = new Query({ url });
try {
initApi({
router: this.mainApp,
item: {
type: 'api',
api: {
url,
query: query as any,
}
},
exclude: "WHERE path = 'auth' OR path = 'router' OR path = 'call'",
})
console.log('Router API 已初始化', url.toString());
} catch (err) {
console.error('Router API 初始化失败', url.toString(), err);
} }
} }
} }
@@ -119,9 +180,10 @@ export class AssistantApp extends Manager {
remoteApp.listenProxy(); remoteApp.listenProxy();
this.attemptedConnectTimes = 0; this.attemptedConnectTimes = 0;
console.log('重新连接到了远程应用服务器'); console.log('重新连接到了远程应用服务器');
this.reconnectRemoteApp();
} else { } else {
setTimeout(() => { setTimeout(() => {
this.reconnectRemoteApp(); this.initRouterApp()
}, 30 * 1000 + this.attemptedConnectTimes * 10 * 1000); // 30秒后重连 + 每次增加10秒 }, 30 * 1000 + this.attemptedConnectTimes * 10 * 1000); // 30秒后重连 + 每次增加10秒
} }
} }

View File

@@ -14,7 +14,7 @@ export type ProxyInfo = {
/** /**
* 类型 * 类型
*/ */
type?: 'file' | 'dynamic' | 'minio' | 'http' | 's3'; type?: 'file' | 'dynamic' | 'minio' | 'http' | 's3' | 'router';
/** /**
* 目标的 pathname 默认为请求的url.pathname, 设置了pathname则会使用pathname作为请求的url.pathname * 目标的 pathname 默认为请求的url.pathname, 设置了pathname则会使用pathname作为请求的url.pathname
* @default undefined * @default undefined
@@ -41,6 +41,10 @@ export type ProxyInfo = {
id?: string; id?: string;
indexPath?: string; indexPath?: string;
rootPath?: string; rootPath?: string;
},
router?: {
id?: string;
url?: string;
} }
}; };

View File

@@ -1,3 +1,4 @@
import { useKey } from '@kevisual/use-config';
import http from 'node:http'; import http from 'node:http';
export const error = (msg: string, code = 500) => { export const error = (msg: string, code = 500) => {
return JSON.stringify({ code, message: msg }); return JSON.stringify({ code, message: msg });
@@ -32,3 +33,7 @@ export const getToken = async (req: http.IncomingMessage) => {
return { token }; return { token };
}; };
export const getEnvToken = () => {
const envTokne = useKey('KEVISUAL_TOKEN') || '';
return envTokne;
}

View File

@@ -10,10 +10,12 @@ import './call/index.ts'
// TODO: 移除 // TODO: 移除
// import './hot-api/key-sender/index.ts'; // import './hot-api/key-sender/index.ts';
import './opencode/index.ts'; import './opencode/index.ts';
import './remote/index.ts';
import os from 'node:os'; import os from 'node:os';
import { authCache } from '@/module/cache/auth.ts'; import { authCache } from '@/module/cache/auth.ts';
import { createSkill } from '@kevisual/router'; import { createSkill } from '@kevisual/router';
import { logger } from '@/module/logger.ts';
const getTokenUser = async (token: string) => { const getTokenUser = async (token: string) => {
const query = assistantConfig.query const query = assistantConfig.query
const res = await query.post({ const res = await query.post({
@@ -41,7 +43,7 @@ export const checkAuth = async (ctx: any, isAdmin = false) => {
const config = assistantConfig.getConfig(); const config = assistantConfig.getConfig();
const { auth = {} } = config; const { auth = {} } = config;
const token = ctx.query.token; const token = ctx.query.token;
console.log('checkAuth', ctx.query, { token }); logger.debug('checkAuth', ctx.query, { token });
if (!token) { if (!token) {
return { return {
code: 401, code: 401,
@@ -120,7 +122,7 @@ app
description: '管理员鉴权, 获取用户信息,并验证是否为管理员。', description: '管理员鉴权, 获取用户信息,并验证是否为管理员。',
}) })
.define(async (ctx) => { .define(async (ctx) => {
console.log('query', ctx.query); logger.debug('query', ctx.query);
if (!ctx.query?.token && ctx.appId === app.appId) { if (!ctx.query?.token && ctx.appId === app.appId) {
return; return;
} }

View File

@@ -0,0 +1,54 @@
import { useContextKey } from "@kevisual/context";
import { app } from "../../app.ts";
import { AssistantApp } from "@/lib.ts";
app.route({
path: 'remote',
key: 'status',
middleware: ['admin-auth'],
description: '获取远程app连接状态',
}).define(async (ctx) => {
const manager = useContextKey('manager') as AssistantApp;
if (manager?.remoteApp?.isConnect()) {
const url = manager.remoteUrl || ''
ctx.body = {
content: `远程app已经链接, 访问地址:${url}`,
}
} else {
ctx.body = {
content: '远程app未连接',
}
}
}).addTo(app);
app.route({
path: 'remote',
key: 'connect',
middleware: ['admin-auth'],
description: '连接远程app',
}).define(async (ctx) => {
const manager = useContextKey('manager') as AssistantApp;
if (!manager) {
ctx.body = {
content: '远程app管理器未初始化',
}
return;
}
if (manager?.remoteApp?.isConnect()) {
const url = manager.remoteUrl || ''
ctx.body = {
content: `远程app已经链接, 访问地址:${url}`,
}
return;
}
await manager.initRemoteApp({ enabled: true, token: ctx.query?.token }).then(() => {
ctx.body = {
content: '远程app连接成功',
}
}).catch((err) => {
ctx.body = {
content: `远程app连接失败: ${err.message}`,
}
});
}).addTo(app);

View File

@@ -1,3 +1,4 @@
import { useContextKey } from '@kevisual/context';
import { app, assistantConfig } from './app.ts'; import { app, assistantConfig } from './app.ts';
import { proxyRoute, proxyWs } from './services/proxy/proxy-page-index.ts'; import { proxyRoute, proxyWs } from './services/proxy/proxy-page-index.ts';
import './routes/index.ts'; import './routes/index.ts';
@@ -50,12 +51,13 @@ export const runServer = async (port: number = 51515, listenPath = '127.0.0.1')
...proxyWs(), ...proxyWs(),
qwenAsr, qwenAsr,
]); ]);
const manager = new AssistantApp(assistantConfig, app); const manager = useContextKey('manager', new AssistantApp(assistantConfig, app));
setTimeout(() => { setTimeout(() => {
manager.load({ runtime: 'client' }).then(() => { manager.load({ runtime: 'client' }).then(() => {
console.log('Assistant App Loaded'); console.log('Assistant App Loaded');
}); });
manager.initRemoteApp() manager.initRemoteApp()
manager.initRouterApp()
}, 1000); }, 1000);
return { return {

View File

@@ -36,9 +36,9 @@ export class AssistantInit extends AssistantConfig {
} }
// 1. 检查助手路径是否存在 // 1. 检查助手路径是否存在
if (!this.checkConfigPath()) { if (!this.checkConfigPath()) {
console.log(chalk.blue('助手路径不存在,正在创建...'));
super.init(configDir); super.init(configDir);
if (!this.initWorkspace) { return } if (!this.initWorkspace) { return }
console.log(chalk.blue('助手路径不存在,正在创建...'));
} else { } else {
super.init(configDir); super.init(configDir);
if (!this.initWorkspace) { return } if (!this.initWorkspace) { return }

View File

@@ -1,7 +1,7 @@
import { createApiProxy, ProxyInfo, proxy } from '@/module/assistant/index.ts'; import { createApiProxy, ProxyInfo, proxy } from '@/module/assistant/index.ts';
import http from 'node:http'; import http from 'node:http';
import { LocalProxy } from './local-proxy.ts'; import { LocalProxy } from './local-proxy.ts';
import { assistantConfig, app, simpleRouter } from '@/app.ts'; import { assistantConfig, simpleRouter } from '@/app.ts';
import { log, logger } from '@/module/logger.ts'; import { log, logger } from '@/module/logger.ts';
import { getToken } from '@/module/http-token.ts'; import { getToken } from '@/module/http-token.ts';
import { getTokenUserCache } from '@/routes/index.ts'; import { getTokenUserCache } from '@/routes/index.ts';
@@ -12,7 +12,7 @@ const localProxy = new LocalProxy({});
localProxy.initFromAssistantConfig(assistantConfig); localProxy.initFromAssistantConfig(assistantConfig);
const isOpenPath = (pathname: string): boolean => { const isOpenPath = (pathname: string): boolean => {
const openPaths = ['/root/home', '/root/cli']; const openPaths = ['/root/home', '/root/cli', '/root/login'];
for (const openPath of openPaths) { for (const openPath of openPaths) {
if (pathname.startsWith(openPath)) { if (pathname.startsWith(openPath)) {
return true; return true;
@@ -31,7 +31,7 @@ const authFilter = async (req: http.IncomingMessage, res: http.ServerResponse) =
const auth = _assistantConfig?.auth || {}; const auth = _assistantConfig?.auth || {};
const share = auth.share || 'protected'; const share = auth.share || 'protected';
const noAdmin = !auth.username; const noAdmin = !auth.username;
if (noAdmin) return { code: 500, message: '没有管理员' }; if (noAdmin) return { code: 200, message: '没有管理员, 直接放过, 让管理登录和自己设置' };
const admin = auth.username; const admin = auth.username;
const admins = auth.admin || []; const admins = auth.admin || [];
if (admin) { if (admin) {
@@ -160,7 +160,7 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp
return; return;
} }
const isOpen = isOpenPath(pathname) const isOpen = isOpenPath(pathname)
log.debug('proxyRoute', { _user, _app, pathname, noAdmin, isOpen }); logger.debug('proxyRoute', { _user, _app, pathname, noAdmin, isOpen });
if (noAdmin && !isOpen) { if (noAdmin && !isOpen) {
return toSetting(); return toSetting();
} }
@@ -172,19 +172,20 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp
const proxyApiList = _assistantConfig?.proxy || []; const proxyApiList = _assistantConfig?.proxy || [];
const proxyApi = proxyApiList.find((item) => pathname.startsWith(item.path)); const proxyApi = proxyApiList.find((item) => pathname.startsWith(item.path));
if (proxyApi) { if (proxyApi) {
log.debug('proxyPage', { proxyApi, pathname }); logger.debug('proxyPage', { proxyApi, pathname });
return proxyFn(req, res, proxyApi); return proxyFn(req, res, proxyApi);
} }
const filter = await authFilter(req, res); const filter = await authFilter(req, res);
if (filter.code !== 200) { if (filter.code !== 200) {
console.log('auth filter deny', filter); logger.debug('auth filter deny', filter);
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
// TODO: 这里可以做成可配置的登录页面
return res.end(renderNoAuthAndLogin('Not Authorized Proxy')); return res.end(renderNoAuthAndLogin('Not Authorized Proxy'));
} }
const localProxyProxyList = localProxy.getLocalProxyList(); const localProxyProxyList = localProxy.getLocalProxyList();
const localProxyProxy = localProxyProxyList.find((item) => pathname.startsWith(item.path)); const localProxyProxy = localProxyProxyList.find((item) => pathname.startsWith(item.path));
if (localProxyProxy) { if (localProxyProxy) {
log.log('localProxyProxy', { localProxyProxy, url: req.url }); logger.debug('localProxyProxy', { localProxyProxy, url: req.url });
return proxyFn(req, res, { return proxyFn(req, res, {
path: localProxyProxy.path, path: localProxyProxy.path,
"type": 'file', "type": 'file',
@@ -203,7 +204,7 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp
type: 'http', type: 'http',
}); });
} }
log.debug('handle by router 404', req.url); logger.debug('handle by router 404', req.url);
res.statusCode = 404; res.statusCode = 404;
res.end('Not Found Proxy'); res.end('Not Found Proxy');

View File

@@ -1,6 +1,6 @@
{ {
"name": "@kevisual/cli", "name": "@kevisual/cli",
"version": "0.0.90", "version": "0.0.91",
"description": "envision 命令行工具", "description": "envision 命令行工具",
"type": "module", "type": "module",
"basename": "/root/cli", "basename": "/root/cli",
@@ -48,7 +48,7 @@
"@kevisual/app": "^0.0.2", "@kevisual/app": "^0.0.2",
"@kevisual/context": "^0.0.4", "@kevisual/context": "^0.0.4",
"@kevisual/use-config": "^1.0.28", "@kevisual/use-config": "^1.0.28",
"@opencode-ai/sdk": "^1.1.26", "@opencode-ai/sdk": "^1.1.28",
"@types/busboy": "^1.5.4", "@types/busboy": "^1.5.4",
"busboy": "^1.6.0", "busboy": "^1.6.0",
"eventemitter3": "^5.0.4", "eventemitter3": "^5.0.4",
@@ -63,7 +63,7 @@
"@kevisual/dts": "^0.0.3", "@kevisual/dts": "^0.0.3",
"@kevisual/load": "^0.0.6", "@kevisual/load": "^0.0.6",
"@kevisual/logger": "^0.0.4", "@kevisual/logger": "^0.0.4",
"@kevisual/query": "0.0.35", "@kevisual/query": "0.0.37",
"@kevisual/query-login": "0.0.7", "@kevisual/query-login": "0.0.7",
"@types/bun": "^1.3.6", "@types/bun": "^1.3.6",
"@types/crypto-js": "^4.2.2", "@types/crypto-js": "^4.2.2",
@@ -80,7 +80,7 @@
"ignore": "^7.0.5", "ignore": "^7.0.5",
"jsonwebtoken": "^9.0.3", "jsonwebtoken": "^9.0.3",
"pm2": "^6.0.14", "pm2": "^6.0.14",
"tar": "^7.5.4", "tar": "^7.5.6",
"zustand": "^5.0.10" "zustand": "^5.0.10"
}, },
"engines": { "engines": {

521
pnpm-lock.yaml generated
View File

@@ -21,8 +21,8 @@ importers:
specifier: ^1.0.28 specifier: ^1.0.28
version: 1.0.28(dotenv@17.2.3) version: 1.0.28(dotenv@17.2.3)
'@opencode-ai/sdk': '@opencode-ai/sdk':
specifier: ^1.1.26 specifier: ^1.1.28
version: 1.1.26 version: 1.1.28
'@types/busboy': '@types/busboy':
specifier: ^1.5.4 specifier: ^1.5.4
version: 1.5.4 version: 1.5.4
@@ -41,6 +41,9 @@ importers:
micromatch: micromatch:
specifier: ^4.0.8 specifier: ^4.0.8
version: 4.0.8 version: 4.0.8
pm2:
specifier: latest
version: 6.0.14(supports-color@10.2.2)
semver: semver:
specifier: ^7.7.3 specifier: ^7.7.3
version: 7.7.3 version: 7.7.3
@@ -58,11 +61,11 @@ importers:
specifier: ^0.0.4 specifier: ^0.0.4
version: 0.0.4 version: 0.0.4
'@kevisual/query': '@kevisual/query':
specifier: 0.0.35 specifier: 0.0.37
version: 0.0.35 version: 0.0.37
'@kevisual/query-login': '@kevisual/query-login':
specifier: 0.0.7 specifier: 0.0.7
version: 0.0.7(@kevisual/query@0.0.35) version: 0.0.7(@kevisual/query@0.0.37)
'@types/bun': '@types/bun':
specifier: ^1.3.6 specifier: ^1.3.6
version: 1.3.6 version: 1.3.6
@@ -105,12 +108,9 @@ importers:
jsonwebtoken: jsonwebtoken:
specifier: ^9.0.3 specifier: ^9.0.3
version: 9.0.3 version: 9.0.3
pm2:
specifier: ^6.0.14
version: 6.0.14(supports-color@10.2.2)
tar: tar:
specifier: ^7.5.4 specifier: ^7.5.6
version: 7.5.4 version: 7.5.6
zustand: zustand:
specifier: ^5.0.10 specifier: ^5.0.10
version: 5.0.10(@types/react@19.2.8)(react@19.2.3) version: 5.0.10(@types/react@19.2.8)(react@19.2.3)
@@ -118,8 +118,8 @@ importers:
assistant: assistant:
dependencies: dependencies:
'@aws-sdk/client-s3': '@aws-sdk/client-s3':
specifier: ^3.971.0 specifier: ^3.972.0
version: 3.971.0 version: 3.972.0
'@kevisual/ha-api': '@kevisual/ha-api':
specifier: ^0.0.6 specifier: ^0.0.6
version: 0.0.6 version: 0.0.6
@@ -130,8 +130,8 @@ importers:
specifier: ^0.0.13 specifier: ^0.0.13
version: 0.0.13(dotenv@17.2.3)(supports-color@10.2.2) version: 0.0.13(dotenv@17.2.3)(supports-color@10.2.2)
'@opencode-ai/sdk': '@opencode-ai/sdk':
specifier: ^1.1.26 specifier: ^1.1.28
version: 1.1.26 version: 1.1.28
es-toolkit: es-toolkit:
specifier: ^1.44.0 specifier: ^1.44.0
version: 1.44.0 version: 1.44.0
@@ -154,6 +154,9 @@ importers:
'@kevisual/ai': '@kevisual/ai':
specifier: ^0.0.21 specifier: ^0.0.21
version: 0.0.21 version: 0.0.21
'@kevisual/api':
specifier: ^0.0.22
version: 0.0.22
'@kevisual/load': '@kevisual/load':
specifier: ^0.0.6 specifier: ^0.0.6
version: 0.0.6 version: 0.0.6
@@ -164,23 +167,23 @@ importers:
specifier: ^0.0.4 specifier: ^0.0.4
version: 0.0.4 version: 0.0.4
'@kevisual/query': '@kevisual/query':
specifier: 0.0.35 specifier: 0.0.37
version: 0.0.35 version: 0.0.37
'@kevisual/query-login': '@kevisual/query-login':
specifier: 0.0.7 specifier: 0.0.7
version: 0.0.7(@kevisual/query@0.0.35) version: 0.0.7(@kevisual/query@0.0.37)
'@kevisual/router': '@kevisual/router':
specifier: ^0.0.57 specifier: ^0.0.60
version: 0.0.57 version: 0.0.60
'@kevisual/types': '@kevisual/types':
specifier: ^0.0.11 specifier: ^0.0.12
version: 0.0.11 version: 0.0.12
'@kevisual/use-config': '@kevisual/use-config':
specifier: ^1.0.28 specifier: ^1.0.28
version: 1.0.28(dotenv@17.2.3) version: 1.0.28(dotenv@17.2.3)
'@opencode-ai/plugin': '@opencode-ai/plugin':
specifier: ^1.1.26 specifier: ^1.1.28
version: 1.1.26 version: 1.1.28
'@types/bun': '@types/bun':
specifier: ^1.3.6 specifier: ^1.3.6
version: 1.3.6 version: 1.3.6
@@ -215,8 +218,8 @@ importers:
specifier: ^7.1.0 specifier: ^7.1.0
version: 7.1.0 version: 7.1.0
inquirer: inquirer:
specifier: ^13.2.0 specifier: ^13.2.1
version: 13.2.0(@types/node@25.0.9) version: 13.2.1(@types/node@25.0.9)
lodash-es: lodash-es:
specifier: ^4.17.22 specifier: ^4.17.22
version: 4.17.22 version: 4.17.22
@@ -456,131 +459,131 @@ packages:
'@aws-crypto/util@5.2.0': '@aws-crypto/util@5.2.0':
resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
'@aws-sdk/client-s3@3.971.0': '@aws-sdk/client-s3@3.972.0':
resolution: {integrity: sha512-BBUne390fKa4C4QvZlUZ5gKcu+Uyid4IyQ20N4jl0vS7SK2xpfXlJcgKqPW5ts6kx6hWTQBk6sH5Lf12RvuJxg==} resolution: {integrity: sha512-ghpDQtjZvbhbnHWymq/V5TL8NppdAGF2THAxYRRBLCJ5JRlq71T24NdovAzvzYaGdH7HtcRkgErBRsFT1gtq4g==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/client-sso@3.971.0': '@aws-sdk/client-sso@3.972.0':
resolution: {integrity: sha512-Xx+w6DQqJxDdymYyIxyKJnRzPvVJ4e/Aw0czO7aC9L/iraaV7AG8QtRe93OGW6aoHSh72CIiinnpJJfLsQqP4g==} resolution: {integrity: sha512-5qw6qLiRE4SUiz0hWy878dSR13tSVhbTWhsvFT8mGHe37NRRiaobm5MA2sWD0deRAuO98djSiV+dhWXa1xIFNw==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/core@3.970.0': '@aws-sdk/core@3.972.0':
resolution: {integrity: sha512-klpzObldOq8HXzDjDlY6K8rMhYZU6mXRz6P9F9N+tWnjoYFfeBMra8wYApydElTUYQKP1O7RLHwH1OKFfKcqIA==} resolution: {integrity: sha512-nEeUW2M9F+xdIaD98F5MBcQ4ITtykj3yKbgFZ6J0JtL3bq+Z90szQ6Yy8H/BLPYXTs3V4n9ifnBo8cprRDiE6A==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/crc64-nvme@3.969.0': '@aws-sdk/crc64-nvme@3.972.0':
resolution: {integrity: sha512-IGNkP54HD3uuLnrPCYsv3ZD478UYq+9WwKrIVJ9Pdi3hxPg8562CH3ZHf8hEgfePN31P9Kj+Zu9kq2Qcjjt61A==} resolution: {integrity: sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/credential-provider-env@3.970.0': '@aws-sdk/credential-provider-env@3.972.0':
resolution: {integrity: sha512-rtVzXzEtAfZBfh+lq3DAvRar4c3jyptweOAJR2DweyXx71QSMY+O879hjpMwES7jl07a3O1zlnFIDo4KP/96kQ==} resolution: {integrity: sha512-kKHoNv+maHlPQOAhYamhap0PObd16SAb3jwaY0KYgNTiSbeXlbGUZPLioo9oA3wU10zItJzx83ClU7d7h40luA==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/credential-provider-http@3.970.0': '@aws-sdk/credential-provider-http@3.972.0':
resolution: {integrity: sha512-CjDbWL7JxjLc9ZxQilMusWSw05yRvUJKRpz59IxDpWUnSMHC9JMMUUkOy5Izk8UAtzi6gupRWArp4NG4labt9Q==} resolution: {integrity: sha512-xzEi81L7I5jGUbpmqEHCe7zZr54hCABdj4H+3LzktHYuovV/oqnvoDdvZpGFR0e/KAw1+PL38NbGrpG30j6qlA==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/credential-provider-ini@3.971.0': '@aws-sdk/credential-provider-ini@3.972.0':
resolution: {integrity: sha512-c0TGJG4xyfTZz3SInXfGU8i5iOFRrLmy4Bo7lMyH+IpngohYMYGYl61omXqf2zdwMbDv+YJ9AviQTcCaEUKi8w==} resolution: {integrity: sha512-ruhAMceUIq2aknFd3jhWxmO0P0Efab5efjyIXOkI9i80g+zDY5VekeSxfqRKStEEJSKSCHDLQuOu0BnAn4Rzew==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/credential-provider-login@3.971.0': '@aws-sdk/credential-provider-login@3.972.0':
resolution: {integrity: sha512-yhbzmDOsk0RXD3rTPhZra4AWVnVAC4nFWbTp+sUty1hrOPurUmhuz8bjpLqYTHGnlMbJp+UqkQONhS2+2LzW2g==} resolution: {integrity: sha512-SsrsFJsEYAJHO4N/r2P0aK6o8si6f1lprR+Ej8J731XJqTckSGs/HFHcbxOyW/iKt+LNUvZa59/VlJmjhF4bEQ==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/credential-provider-node@3.971.0': '@aws-sdk/credential-provider-node@3.972.0':
resolution: {integrity: sha512-epUJBAKivtJqalnEBRsYIULKYV063o/5mXNJshZfyvkAgNIzc27CmmKRXTN4zaNOZg8g/UprFp25BGsi19x3nQ==} resolution: {integrity: sha512-wwJDpEGl6+sOygic8QKu0OHVB8SiodqF1fr5jvUlSFfS6tJss/E9vBc2aFjl7zI6KpAIYfIzIgM006lRrZtWCQ==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/credential-provider-process@3.970.0': '@aws-sdk/credential-provider-process@3.972.0':
resolution: {integrity: sha512-0XeT8OaT9iMA62DFV9+m6mZfJhrD0WNKf4IvsIpj2Z7XbaYfz3CoDDvNoALf3rPY9NzyMHgDxOspmqdvXP00mw==} resolution: {integrity: sha512-nmzYhamLDJ8K+v3zWck79IaKMc350xZnWsf/GeaXO6E3MewSzd3lYkTiMi7lEp3/UwDm9NHfPguoPm+mhlSWQQ==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/credential-provider-sso@3.971.0': '@aws-sdk/credential-provider-sso@3.972.0':
resolution: {integrity: sha512-dY0hMQ7dLVPQNJ8GyqXADxa9w5wNfmukgQniLxGVn+dMRx3YLViMp5ZpTSQpFhCWNF0oKQrYAI5cHhUJU1hETw==} resolution: {integrity: sha512-6mYyfk1SrMZ15cH9T53yAF4YSnvq4yU1Xlgm3nqV1gZVQzmF5kr4t/F3BU3ygbvzi4uSwWxG3I3TYYS5eMlAyg==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/credential-provider-web-identity@3.971.0': '@aws-sdk/credential-provider-web-identity@3.972.0':
resolution: {integrity: sha512-F1AwfNLr7H52T640LNON/h34YDiMuIqW/ZreGzhRR6vnFGaSPtNSKAKB2ssAMkLM8EVg8MjEAYD3NCUiEo+t/w==} resolution: {integrity: sha512-vsJXBGL8H54kz4T6do3p5elATj5d1izVGUXMluRJntm9/I0be/zUYtdd4oDTM2kSUmd4Zhyw3fMQ9lw7CVhd4A==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-bucket-endpoint@3.969.0': '@aws-sdk/middleware-bucket-endpoint@3.972.0':
resolution: {integrity: sha512-MlbrlixtkTVhYhoasblKOkr7n2yydvUZjjxTnBhIuHmkyBS1619oGnTfq/uLeGYb4NYXdeQ5OYcqsRGvmWSuTw==} resolution: {integrity: sha512-IrIjAehc3PrseAGfk2ldtAf+N0BAnNHR1DCZIDh9IAcFrTVWC3Fi9KJdtabrxcY3Onpt/8opOco4EIEAWgMz7A==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-expect-continue@3.969.0': '@aws-sdk/middleware-expect-continue@3.972.0':
resolution: {integrity: sha512-qXygzSi8osok7tH9oeuS3HoKw6jRfbvg5Me/X5RlHOvSSqQz8c5O9f3MjUApaCUSwbAU92KrbZWasw2PKiaVHg==} resolution: {integrity: sha512-xyhDoY0qse8MvQC4RZCpT5WoIQ4/kwqv71Dh1s3mdXjL789Z4a6L/khBTSXECR5+egSZ960AInj3aR+CrezDRQ==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-flexible-checksums@3.971.0': '@aws-sdk/middleware-flexible-checksums@3.972.0':
resolution: {integrity: sha512-+hGUDUxeIw8s2kkjfeXym0XZxdh0cqkHkDpEanWYdS1gnWkIR+gf9u/DKbKqGHXILPaqHXhWpLTQTVlaB4sI7Q==} resolution: {integrity: sha512-zxK0ezmT7fLEPJ650S8QBc4rGDq5+5rdsLnnuZ6hPaZE4/+QtUoTw+gSDETyiWodNcRuz2ZWnqi17K+7nKtSRg==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-host-header@3.969.0': '@aws-sdk/middleware-host-header@3.972.0':
resolution: {integrity: sha512-AWa4rVsAfBR4xqm7pybQ8sUNJYnjyP/bJjfAw34qPuh3M9XrfGbAHG0aiAfQGrBnmS28jlO6Kz69o+c6PRw1dw==} resolution: {integrity: sha512-3eztFI6F9/eHtkIaWKN3nT+PM+eQ6p1MALDuNshFk323ixuCZzOOVT8oUqtZa30Z6dycNXJwhlIq7NhUVFfimw==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-location-constraint@3.969.0': '@aws-sdk/middleware-location-constraint@3.972.0':
resolution: {integrity: sha512-zH7pDfMLG/C4GWMOpvJEoYcSpj7XsNP9+irlgqwi667sUQ6doHQJ3yyDut3yiTk0maq1VgmriPFELyI9lrvH/g==} resolution: {integrity: sha512-WpsxoVPzbGPQGb/jupNYjpE0REcCPtjz7Q7zAt+dyo7fxsLBn4J+Rp6AYzSa04J9VrmrvCqCbVLu6B88PlSKSQ==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-logger@3.969.0': '@aws-sdk/middleware-logger@3.972.0':
resolution: {integrity: sha512-xwrxfip7Y2iTtCMJ+iifN1E1XMOuhxIHY9DreMCvgdl4r7+48x2S1bCYPWH3eNY85/7CapBWdJ8cerpEl12sQQ==} resolution: {integrity: sha512-ZvdyVRwzK+ra31v1pQrgbqR/KsLD+wwJjHgko6JfoKUBIcEfAwJzQKO6HspHxdHWTVUz6MgvwskheR/TTYZl2g==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-recursion-detection@3.969.0': '@aws-sdk/middleware-recursion-detection@3.972.0':
resolution: {integrity: sha512-2r3PuNquU3CcS1Am4vn/KHFwLi8QFjMdA/R+CRDXT4AFO/0qxevF/YStW3gAKntQIgWgQV8ZdEtKAoJvLI4UWg==} resolution: {integrity: sha512-F2SmUeO+S6l1h6dydNet3BQIk173uAkcfU1HDkw/bUdRLAnh15D3HP9vCZ7oCPBNcdEICbXYDmx0BR9rRUHGlQ==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-sdk-s3@3.970.0': '@aws-sdk/middleware-sdk-s3@3.972.0':
resolution: {integrity: sha512-v/Y5F1lbFFY7vMeG5yYxuhnn0CAshz6KMxkz1pDyPxejNE9HtA0w8R6OTBh/bVdIm44QpjhbI7qeLdOE/PLzXQ==} resolution: {integrity: sha512-0bcKFXWx+NZ7tIlOo7KjQ+O2rydiHdIQahrq+fN6k9Osky29v17guy68urUKfhTobR6iY6KvxkroFWaFtTgS5w==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-ssec@3.971.0': '@aws-sdk/middleware-ssec@3.972.0':
resolution: {integrity: sha512-QGVhvRveYG64ZhnS/b971PxXM6N2NU79Fxck4EfQ7am8v1Br0ctoeDDAn9nXNblLGw87we9Z65F7hMxxiFHd3w==} resolution: {integrity: sha512-cEr2HtK4R2fi8Y0P95cjbr4KJOjKBt8ms95mEJhabJN8KM4CpD4iS/J1lhvMj+qWir0KBTV6gKmxECXdfL9S6w==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/middleware-user-agent@3.970.0': '@aws-sdk/middleware-user-agent@3.972.0':
resolution: {integrity: sha512-dnSJGGUGSFGEX2NzvjwSefH+hmZQ347AwbLhAsi0cdnISSge+pcGfOFrJt2XfBIypwFe27chQhlfuf/gWdzpZg==} resolution: {integrity: sha512-kFHQm2OCBJCzGWRafgdWHGFjitUXY/OxXngymcX4l8CiyiNDZB27HDDBg2yLj3OUJc4z4fexLMmP8r9vgag19g==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/nested-clients@3.971.0': '@aws-sdk/nested-clients@3.972.0':
resolution: {integrity: sha512-TWaILL8GyYlhGrxxnmbkazM4QsXatwQgoWUvo251FXmUOsiXDFDVX3hoGIfB3CaJhV2pJPfebHUNJtY6TjZ11g==} resolution: {integrity: sha512-QGlbnuGzSQJVG6bR9Qw6G0Blh6abFR4VxNa61ttMbzy9jt28xmk2iGtrYLrQPlCCPhY6enHqjTWm3n3LOb0wAw==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/region-config-resolver@3.969.0': '@aws-sdk/region-config-resolver@3.972.0':
resolution: {integrity: sha512-scj9OXqKpcjJ4jsFLtqYWz3IaNvNOQTFFvEY8XMJXTv+3qF5I7/x9SJtKzTRJEBF3spjzBUYPtGFbs9sj4fisQ==} resolution: {integrity: sha512-JyOf+R/6vJW8OEVFCAyzEOn2reri/Q+L0z9zx4JQSKWvTmJ1qeFO25sOm8VIfB8URKhfGRTQF30pfYaH2zxt/A==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/signature-v4-multi-region@3.970.0': '@aws-sdk/signature-v4-multi-region@3.972.0':
resolution: {integrity: sha512-z3syXfuK/x/IsKf/AeYmgc2NT7fcJ+3fHaGO+fkghkV9WEba3fPyOwtTBX4KpFMNb2t50zDGZwbzW1/5ighcUQ==} resolution: {integrity: sha512-2udiRijmjpN81Pvajje4TsjbXDZNP6K9bYUanBYH8hXa/tZG5qfGCySD+TyX0sgDxCQmEDMg3LaQdfjNHBDEgQ==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/token-providers@3.971.0': '@aws-sdk/token-providers@3.972.0':
resolution: {integrity: sha512-4hKGWZbmuDdONMJV0HJ+9jwTDb0zLfKxcCLx2GEnBY31Gt9GeyIQ+DZ97Bb++0voawj6pnZToFikXTyrEq2x+w==} resolution: {integrity: sha512-kWlXG+y5nZhgXGEtb72Je+EvqepBPs8E3vZse//1PYLWs2speFqbGE/ywCXmzEJgHgVqSB/u/lqBvs5WlYmSqQ==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/types@3.969.0': '@aws-sdk/types@3.972.0':
resolution: {integrity: sha512-7IIzM5TdiXn+VtgPdVLjmE6uUBUtnga0f4RiSEI1WW10RPuNvZ9U+pL3SwDiRDAdoGrOF9tSLJOFZmfuwYuVYQ==} resolution: {integrity: sha512-U7xBIbLSetONxb2bNzHyDgND3oKGoIfmknrEVnoEU4GUSs+0augUOIn9DIWGUO2ETcRFdsRUnmx9KhPT9Ojbug==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/util-arn-parser@3.968.0': '@aws-sdk/util-arn-parser@3.972.0':
resolution: {integrity: sha512-gqqvYcitIIM2K4lrDX9de9YvOfXBcVdxfT/iLnvHJd4YHvSXlt+gs+AsL4FfPCxG4IG9A+FyulP9Sb1MEA75vw==} resolution: {integrity: sha512-RM5Mmo/KJ593iMSrALlHEOcc9YOIyOsDmS5x2NLOMdEmzv1o00fcpAkCQ02IGu1eFneBFT7uX0Mpag0HI+Cz2g==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/util-endpoints@3.970.0': '@aws-sdk/util-endpoints@3.972.0':
resolution: {integrity: sha512-TZNZqFcMUtjvhZoZRtpEGQAdULYiy6rcGiXAbLU7e9LSpIYlRqpLa207oMNfgbzlL2PnHko+eVg8rajDiSOYCg==} resolution: {integrity: sha512-6JHsl1V/a1ZW8D8AFfd4R52fwZPnZ5H4U6DS8m/bWT8qad72NvbOFAC7U2cDtFs2TShqUO3TEiX/EJibtY3ijg==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/util-locate-window@3.965.2': '@aws-sdk/util-locate-window@3.965.2':
resolution: {integrity: sha512-qKgO7wAYsXzhwCHhdbaKFyxd83Fgs8/1Ka+jjSPrv2Ll7mB55Wbwlo0kkfMLh993/yEc8aoDIAc1Fz9h4Spi4Q==} resolution: {integrity: sha512-qKgO7wAYsXzhwCHhdbaKFyxd83Fgs8/1Ka+jjSPrv2Ll7mB55Wbwlo0kkfMLh993/yEc8aoDIAc1Fz9h4Spi4Q==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws-sdk/util-user-agent-browser@3.969.0': '@aws-sdk/util-user-agent-browser@3.972.0':
resolution: {integrity: sha512-bpJGjuKmFr0rA6UKUCmN8D19HQFMLXMx5hKBXqBlPFdalMhxJSjcxzX9DbQh0Fn6bJtxCguFmRGOBdQqNOt49g==} resolution: {integrity: sha512-eOLdkQyoRbDgioTS3Orr7iVsVEutJyMZxvyZ6WAF95IrF0kfWx5Rd/KXnfbnG/VKa2CvjZiitWfouLzfVEyvJA==}
'@aws-sdk/util-user-agent-node@3.971.0': '@aws-sdk/util-user-agent-node@3.972.0':
resolution: {integrity: sha512-Eygjo9mFzQYjbGY3MYO6CsIhnTwAMd3WmuFalCykqEmj2r5zf0leWrhPaqvA5P68V5JdGfPYgj7vhNOd6CtRBQ==} resolution: {integrity: sha512-GOy+AiSrE9kGiojiwlZvVVSXwylu4+fmP0MJfvras/MwP09RB/YtQuOVR1E0fKQc6OMwaTNBjgAbOEhxuWFbAw==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
peerDependencies: peerDependencies:
aws-crt: '>=1.0.0' aws-crt: '>=1.0.0'
@@ -588,8 +591,8 @@ packages:
aws-crt: aws-crt:
optional: true optional: true
'@aws-sdk/xml-builder@3.969.0': '@aws-sdk/xml-builder@3.972.0':
resolution: {integrity: sha512-BSe4Lx/qdRQQdX8cSSI7Et20vqBspzAjBy8ZmXVoyLkol3y4sXBXzn+BiLtR+oh60ExQn6o2DU4QjdOZbXaKIQ==} resolution: {integrity: sha512-POaGMcXnozzqBUyJM3HLUZ9GR6OKJWPGJEmhtTnxZXt8B6JcJ/6K3xRJ5H/j8oovVLz8Wg6vFxAHv8lvuASxMg==}
engines: {node: '>=20.0.0'} engines: {node: '>=20.0.0'}
'@aws/lambda-invoke-store@0.2.3': '@aws/lambda-invoke-store@0.2.3':
@@ -1275,6 +1278,9 @@ packages:
'@kevisual/api@0.0.17': '@kevisual/api@0.0.17':
resolution: {integrity: sha512-hW3Q182Lm8wggWfHTEKVTKsmp8MWFINB9l82nEbnwTnd1Lh9DPeQo1hMft7aeL8aGe4vjFCTv4MHixXjmQTzGg==} resolution: {integrity: sha512-hW3Q182Lm8wggWfHTEKVTKsmp8MWFINB9l82nEbnwTnd1Lh9DPeQo1hMft7aeL8aGe4vjFCTv4MHixXjmQTzGg==}
'@kevisual/api@0.0.22':
resolution: {integrity: sha512-e+C6zmSg6zGy7elyo68ZVJ67YdG+8lFbw3wDjMKcPyUIg51x4DqbbW8NZMNzK5k0YsM8p+HAZv43wMB4SeSNqQ==}
'@kevisual/app@0.0.1': '@kevisual/app@0.0.1':
resolution: {integrity: sha512-PEx8P3l0iNSqrz9Ib9kVCYfqNMX6/LfNu+cEafmY6ECP1cV5Vmv+TH2fuasMosKjtbH2fAdDi97sbd29tdEK+g==} resolution: {integrity: sha512-PEx8P3l0iNSqrz9Ib9kVCYfqNMX6/LfNu+cEafmY6ECP1cV5Vmv+TH2fuasMosKjtbH2fAdDi97sbd29tdEK+g==}
@@ -1300,6 +1306,9 @@ packages:
'@kevisual/js-filter@0.0.3': '@kevisual/js-filter@0.0.3':
resolution: {integrity: sha512-vgUB2fUAWS75GUFr/a/tGSSDrPUUmVDktO38k3hIKwU3ZE4tpuhcVxrpUbkXlFS5i0rbL2mAQeID1C6kIlMGRg==} resolution: {integrity: sha512-vgUB2fUAWS75GUFr/a/tGSSDrPUUmVDktO38k3hIKwU3ZE4tpuhcVxrpUbkXlFS5i0rbL2mAQeID1C6kIlMGRg==}
'@kevisual/js-filter@0.0.5':
resolution: {integrity: sha512-+S+Sf3K/aP6XtZI2s7TgKOr35UuvUvtpJ9YDW30a+mY0/N8gRuzyKhieBzQN7Ykayzz70uoMavBXut2rUlLgzw==}
'@kevisual/kv-code@0.0.4': '@kevisual/kv-code@0.0.4':
resolution: {integrity: sha512-9T7//119inomxhddfp0IRrXRzP0nbe0U7hiy+qgfghEbjKGTMkc8rdznz61xBjjMlonTPZnDikedYwNRTykWEw==} resolution: {integrity: sha512-9T7//119inomxhddfp0IRrXRzP0nbe0U7hiy+qgfghEbjKGTMkc8rdznz61xBjjMlonTPZnDikedYwNRTykWEw==}
@@ -1332,6 +1341,9 @@ packages:
'@kevisual/query@0.0.35': '@kevisual/query@0.0.35':
resolution: {integrity: sha512-80dyy2LMCmEC72g+X4QWUKlZErhawQPgnGSBNR4yhrBcFgHIJQ14LR1Z+bS5S1I7db+1PDNpaxBTjIaoYoXunw==} resolution: {integrity: sha512-80dyy2LMCmEC72g+X4QWUKlZErhawQPgnGSBNR4yhrBcFgHIJQ14LR1Z+bS5S1I7db+1PDNpaxBTjIaoYoXunw==}
'@kevisual/query@0.0.37':
resolution: {integrity: sha512-ukBhExI7PdQZMfPYjLGbgf7/MJWtNcJbiHcvI1YLwEQnPotjNn5gLxeizfgCR1iW62+fg5Rj2s7Lq9FrvvxaYw==}
'@kevisual/registry@0.0.1': '@kevisual/registry@0.0.1':
resolution: {integrity: sha512-//OHu9m4JDrMjgP8o8dcjZd3D3IAUkRVlkTSviouZEH7r5m7mccA3Hvzw0XJ/lelx6exC6LWsyv6c4uV0Dp+gw==} resolution: {integrity: sha512-//OHu9m4JDrMjgP8o8dcjZd3D3IAUkRVlkTSviouZEH7r5m7mccA3Hvzw0XJ/lelx6exC6LWsyv6c4uV0Dp+gw==}
@@ -1344,12 +1356,15 @@ packages:
'@kevisual/router@0.0.51': '@kevisual/router@0.0.51':
resolution: {integrity: sha512-i9qYBeS/um78oC912oWJD3iElB+5NTKyTrz1Hzf4DckiUFnjLL81UPwjIh5I2l9+ul0IZ/Pxx+sFSF99fJkzKg==} resolution: {integrity: sha512-i9qYBeS/um78oC912oWJD3iElB+5NTKyTrz1Hzf4DckiUFnjLL81UPwjIh5I2l9+ul0IZ/Pxx+sFSF99fJkzKg==}
'@kevisual/router@0.0.57': '@kevisual/router@0.0.60':
resolution: {integrity: sha512-ZkbzsZD0FEXKBwLfjT4Evki8akHTPWUTZmnz7eGYnfloWDGudRtPJxqSLhzQ1AqfFuSDKJ8XR52Aa4CKdR05lA==} resolution: {integrity: sha512-2v/ZzUstsaq+Uqo+tZX9ys5E+/2erPggCtljv9jTb3NA88ZdHsYUAsd5wUFvLtf9QucpJCzyWEt+InDV/98FKw==}
'@kevisual/types@0.0.11': '@kevisual/types@0.0.11':
resolution: {integrity: sha512-idNLDTEKVdNXZHFQq8PTN62nflh94kvGtx+v8YDcMxt0Zo+HWVZTFElm+dMQxAs/vn4wo8F2r3VwzWNX/vcqwQ==} resolution: {integrity: sha512-idNLDTEKVdNXZHFQq8PTN62nflh94kvGtx+v8YDcMxt0Zo+HWVZTFElm+dMQxAs/vn4wo8F2r3VwzWNX/vcqwQ==}
'@kevisual/types@0.0.12':
resolution: {integrity: sha512-zJXH2dosir3jVrQ6QG4i0+iLQeT9gJ3H+cKXs8ReWboxBSYzUZO78XssVeVrFPsJ33iaAqo4q3DWbSS1dWGn7Q==}
'@kevisual/use-config@1.0.28': '@kevisual/use-config@1.0.28':
resolution: {integrity: sha512-ngF+LDbjxpXWrZNmnShIKF/jPpAa+ezV+DcgoZIIzHlRnIjE+rr9sLkN/B7WJbiH9C/j1tQXOILY8ujBqILrow==} resolution: {integrity: sha512-ngF+LDbjxpXWrZNmnShIKF/jPpAa+ezV+DcgoZIIzHlRnIjE+rr9sLkN/B7WJbiH9C/j1tQXOILY8ujBqILrow==}
peerDependencies: peerDependencies:
@@ -1411,11 +1426,11 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
'@opencode-ai/plugin@1.1.26': '@opencode-ai/plugin@1.1.28':
resolution: {integrity: sha512-GnhLZuw9NHDJwY5msUZnFIWiLc0SnoBXWZNfnWF5+hu0fcVLgul8gqB2VK4kUv+KOQlzCVMILYikSSQkMYp7RQ==} resolution: {integrity: sha512-EGHjxobzEC2HffJmXtTgWCtmyp6dRELLw/VGtEPsNPkg2wQ21G1RqxpuipNzR+730K2MSElw/bdAr1zNhd2T6A==}
'@opencode-ai/sdk@1.1.26': '@opencode-ai/sdk@1.1.28':
resolution: {integrity: sha512-5s+yxNJy7DpWwDq0L//F2sqKERz4640DmDLyrRlFXmckx5prnzFl3liEOOTySOL2WaxgVwjYw8OBiT15v2mAgA==} resolution: {integrity: sha512-fR5mPWu4O6Pu1u+Bj5eUpZix1PCOSSDh7GeE/KyM5pFEqLLoxcNjon5XRMNVggGI4zEFjq48pxdpP4z4mbGeew==}
'@oslojs/encoding@1.1.0': '@oslojs/encoding@1.1.0':
resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==}
@@ -3442,8 +3457,8 @@ packages:
inline-style-parser@0.2.7: inline-style-parser@0.2.7:
resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
inquirer@13.2.0: inquirer@13.2.1:
resolution: {integrity: sha512-4CBv58vLrL4CnMgrscW/T5cLvfWM2nRLevttTiZTQyku7YV7/pc2IKyABBU2rDfVl4PiIB0sTRcwOac7BIYKLA==} resolution: {integrity: sha512-kjIN+joqgbSncQJ6GfN7gV9AbDQlMA+hJ96xcwkQUwP9KN/ZIusoJ2mAfdt0LPrZJQsEyk5i/YrgJQTxSgzlPw==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies: peerDependencies:
'@types/node': '>=18' '@types/node': '>=18'
@@ -4662,8 +4677,8 @@ packages:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'} engines: {node: '>=6'}
tar@7.5.4: tar@7.5.6:
resolution: {integrity: sha512-AN04xbWGrSTDmVwlI4/GTlIIwMFk/XEv7uL8aa57zuvRy6s4hdBed+lVq2fAZ89XDa7Us3ANXcE3Tvqvja1kTA==} resolution: {integrity: sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==}
engines: {node: '>=18'} engines: {node: '>=18'}
throttle-debounce@5.0.2: throttle-debounce@5.0.2:
@@ -5254,20 +5269,20 @@ snapshots:
'@aws-crypto/crc32@5.2.0': '@aws-crypto/crc32@5.2.0':
dependencies: dependencies:
'@aws-crypto/util': 5.2.0 '@aws-crypto/util': 5.2.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-crypto/crc32c@5.2.0': '@aws-crypto/crc32c@5.2.0':
dependencies: dependencies:
'@aws-crypto/util': 5.2.0 '@aws-crypto/util': 5.2.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-crypto/sha1-browser@5.2.0': '@aws-crypto/sha1-browser@5.2.0':
dependencies: dependencies:
'@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0 '@aws-crypto/util': 5.2.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/util-locate-window': 3.965.2 '@aws-sdk/util-locate-window': 3.965.2
'@smithy/util-utf8': 2.3.0 '@smithy/util-utf8': 2.3.0
tslib: 2.8.1 tslib: 2.8.1
@@ -5277,7 +5292,7 @@ snapshots:
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0 '@aws-crypto/util': 5.2.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/util-locate-window': 3.965.2 '@aws-sdk/util-locate-window': 3.965.2
'@smithy/util-utf8': 2.3.0 '@smithy/util-utf8': 2.3.0
tslib: 2.8.1 tslib: 2.8.1
@@ -5285,7 +5300,7 @@ snapshots:
'@aws-crypto/sha256-js@5.2.0': '@aws-crypto/sha256-js@5.2.0':
dependencies: dependencies:
'@aws-crypto/util': 5.2.0 '@aws-crypto/util': 5.2.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-crypto/supports-web-crypto@5.2.0': '@aws-crypto/supports-web-crypto@5.2.0':
@@ -5294,33 +5309,33 @@ snapshots:
'@aws-crypto/util@5.2.0': '@aws-crypto/util@5.2.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/util-utf8': 2.3.0 '@smithy/util-utf8': 2.3.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/client-s3@3.971.0': '@aws-sdk/client-s3@3.972.0':
dependencies: dependencies:
'@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha1-browser': 5.2.0
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/credential-provider-node': 3.971.0 '@aws-sdk/credential-provider-node': 3.972.0
'@aws-sdk/middleware-bucket-endpoint': 3.969.0 '@aws-sdk/middleware-bucket-endpoint': 3.972.0
'@aws-sdk/middleware-expect-continue': 3.969.0 '@aws-sdk/middleware-expect-continue': 3.972.0
'@aws-sdk/middleware-flexible-checksums': 3.971.0 '@aws-sdk/middleware-flexible-checksums': 3.972.0
'@aws-sdk/middleware-host-header': 3.969.0 '@aws-sdk/middleware-host-header': 3.972.0
'@aws-sdk/middleware-location-constraint': 3.969.0 '@aws-sdk/middleware-location-constraint': 3.972.0
'@aws-sdk/middleware-logger': 3.969.0 '@aws-sdk/middleware-logger': 3.972.0
'@aws-sdk/middleware-recursion-detection': 3.969.0 '@aws-sdk/middleware-recursion-detection': 3.972.0
'@aws-sdk/middleware-sdk-s3': 3.970.0 '@aws-sdk/middleware-sdk-s3': 3.972.0
'@aws-sdk/middleware-ssec': 3.971.0 '@aws-sdk/middleware-ssec': 3.972.0
'@aws-sdk/middleware-user-agent': 3.970.0 '@aws-sdk/middleware-user-agent': 3.972.0
'@aws-sdk/region-config-resolver': 3.969.0 '@aws-sdk/region-config-resolver': 3.972.0
'@aws-sdk/signature-v4-multi-region': 3.970.0 '@aws-sdk/signature-v4-multi-region': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/util-endpoints': 3.970.0 '@aws-sdk/util-endpoints': 3.972.0
'@aws-sdk/util-user-agent-browser': 3.969.0 '@aws-sdk/util-user-agent-browser': 3.972.0
'@aws-sdk/util-user-agent-node': 3.971.0 '@aws-sdk/util-user-agent-node': 3.972.0
'@smithy/config-resolver': 4.4.6 '@smithy/config-resolver': 4.4.6
'@smithy/core': 3.20.6 '@smithy/core': 3.20.6
'@smithy/eventstream-serde-browser': 4.2.8 '@smithy/eventstream-serde-browser': 4.2.8
@@ -5358,20 +5373,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/client-sso@3.971.0': '@aws-sdk/client-sso@3.972.0':
dependencies: dependencies:
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/middleware-host-header': 3.969.0 '@aws-sdk/middleware-host-header': 3.972.0
'@aws-sdk/middleware-logger': 3.969.0 '@aws-sdk/middleware-logger': 3.972.0
'@aws-sdk/middleware-recursion-detection': 3.969.0 '@aws-sdk/middleware-recursion-detection': 3.972.0
'@aws-sdk/middleware-user-agent': 3.970.0 '@aws-sdk/middleware-user-agent': 3.972.0
'@aws-sdk/region-config-resolver': 3.969.0 '@aws-sdk/region-config-resolver': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/util-endpoints': 3.970.0 '@aws-sdk/util-endpoints': 3.972.0
'@aws-sdk/util-user-agent-browser': 3.969.0 '@aws-sdk/util-user-agent-browser': 3.972.0
'@aws-sdk/util-user-agent-node': 3.971.0 '@aws-sdk/util-user-agent-node': 3.972.0
'@smithy/config-resolver': 4.4.6 '@smithy/config-resolver': 4.4.6
'@smithy/core': 3.20.6 '@smithy/core': 3.20.6
'@smithy/fetch-http-handler': 5.3.9 '@smithy/fetch-http-handler': 5.3.9
@@ -5401,10 +5416,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/core@3.970.0': '@aws-sdk/core@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/xml-builder': 3.969.0 '@aws-sdk/xml-builder': 3.972.0
'@smithy/core': 3.20.6 '@smithy/core': 3.20.6
'@smithy/node-config-provider': 4.3.8 '@smithy/node-config-provider': 4.3.8
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
@@ -5417,23 +5432,23 @@ snapshots:
'@smithy/util-utf8': 4.2.0 '@smithy/util-utf8': 4.2.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/crc64-nvme@3.969.0': '@aws-sdk/crc64-nvme@3.972.0':
dependencies: dependencies:
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-env@3.970.0': '@aws-sdk/credential-provider-env@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-http@3.970.0': '@aws-sdk/credential-provider-http@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/fetch-http-handler': 5.3.9 '@smithy/fetch-http-handler': 5.3.9
'@smithy/node-http-handler': 4.4.8 '@smithy/node-http-handler': 4.4.8
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
@@ -5443,17 +5458,17 @@ snapshots:
'@smithy/util-stream': 4.5.10 '@smithy/util-stream': 4.5.10
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-ini@3.971.0': '@aws-sdk/credential-provider-ini@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/credential-provider-env': 3.970.0 '@aws-sdk/credential-provider-env': 3.972.0
'@aws-sdk/credential-provider-http': 3.970.0 '@aws-sdk/credential-provider-http': 3.972.0
'@aws-sdk/credential-provider-login': 3.971.0 '@aws-sdk/credential-provider-login': 3.972.0
'@aws-sdk/credential-provider-process': 3.970.0 '@aws-sdk/credential-provider-process': 3.972.0
'@aws-sdk/credential-provider-sso': 3.971.0 '@aws-sdk/credential-provider-sso': 3.972.0
'@aws-sdk/credential-provider-web-identity': 3.971.0 '@aws-sdk/credential-provider-web-identity': 3.972.0
'@aws-sdk/nested-clients': 3.971.0 '@aws-sdk/nested-clients': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/credential-provider-imds': 4.2.8 '@smithy/credential-provider-imds': 4.2.8
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
'@smithy/shared-ini-file-loader': 4.4.3 '@smithy/shared-ini-file-loader': 4.4.3
@@ -5462,11 +5477,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-login@3.971.0': '@aws-sdk/credential-provider-login@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/nested-clients': 3.971.0 '@aws-sdk/nested-clients': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
'@smithy/shared-ini-file-loader': 4.4.3 '@smithy/shared-ini-file-loader': 4.4.3
@@ -5475,15 +5490,15 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-node@3.971.0': '@aws-sdk/credential-provider-node@3.972.0':
dependencies: dependencies:
'@aws-sdk/credential-provider-env': 3.970.0 '@aws-sdk/credential-provider-env': 3.972.0
'@aws-sdk/credential-provider-http': 3.970.0 '@aws-sdk/credential-provider-http': 3.972.0
'@aws-sdk/credential-provider-ini': 3.971.0 '@aws-sdk/credential-provider-ini': 3.972.0
'@aws-sdk/credential-provider-process': 3.970.0 '@aws-sdk/credential-provider-process': 3.972.0
'@aws-sdk/credential-provider-sso': 3.971.0 '@aws-sdk/credential-provider-sso': 3.972.0
'@aws-sdk/credential-provider-web-identity': 3.971.0 '@aws-sdk/credential-provider-web-identity': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/credential-provider-imds': 4.2.8 '@smithy/credential-provider-imds': 4.2.8
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
'@smithy/shared-ini-file-loader': 4.4.3 '@smithy/shared-ini-file-loader': 4.4.3
@@ -5492,21 +5507,21 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-process@3.970.0': '@aws-sdk/credential-provider-process@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
'@smithy/shared-ini-file-loader': 4.4.3 '@smithy/shared-ini-file-loader': 4.4.3
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-sso@3.971.0': '@aws-sdk/credential-provider-sso@3.972.0':
dependencies: dependencies:
'@aws-sdk/client-sso': 3.971.0 '@aws-sdk/client-sso': 3.972.0
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/token-providers': 3.971.0 '@aws-sdk/token-providers': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
'@smithy/shared-ini-file-loader': 4.4.3 '@smithy/shared-ini-file-loader': 4.4.3
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
@@ -5514,11 +5529,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-web-identity@3.971.0': '@aws-sdk/credential-provider-web-identity@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/nested-clients': 3.971.0 '@aws-sdk/nested-clients': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
'@smithy/shared-ini-file-loader': 4.4.3 '@smithy/shared-ini-file-loader': 4.4.3
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
@@ -5526,31 +5541,31 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/middleware-bucket-endpoint@3.969.0': '@aws-sdk/middleware-bucket-endpoint@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/util-arn-parser': 3.968.0 '@aws-sdk/util-arn-parser': 3.972.0
'@smithy/node-config-provider': 4.3.8 '@smithy/node-config-provider': 4.3.8
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
'@smithy/util-config-provider': 4.2.0 '@smithy/util-config-provider': 4.2.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-expect-continue@3.969.0': '@aws-sdk/middleware-expect-continue@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-flexible-checksums@3.971.0': '@aws-sdk/middleware-flexible-checksums@3.972.0':
dependencies: dependencies:
'@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32': 5.2.0
'@aws-crypto/crc32c': 5.2.0 '@aws-crypto/crc32c': 5.2.0
'@aws-crypto/util': 5.2.0 '@aws-crypto/util': 5.2.0
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/crc64-nvme': 3.969.0 '@aws-sdk/crc64-nvme': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/is-array-buffer': 4.2.0 '@smithy/is-array-buffer': 4.2.0
'@smithy/node-config-provider': 4.3.8 '@smithy/node-config-provider': 4.3.8
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
@@ -5560,38 +5575,38 @@ snapshots:
'@smithy/util-utf8': 4.2.0 '@smithy/util-utf8': 4.2.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-host-header@3.969.0': '@aws-sdk/middleware-host-header@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-location-constraint@3.969.0': '@aws-sdk/middleware-location-constraint@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-logger@3.969.0': '@aws-sdk/middleware-logger@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-recursion-detection@3.969.0': '@aws-sdk/middleware-recursion-detection@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws/lambda-invoke-store': 0.2.3 '@aws/lambda-invoke-store': 0.2.3
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-sdk-s3@3.970.0': '@aws-sdk/middleware-sdk-s3@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/util-arn-parser': 3.968.0 '@aws-sdk/util-arn-parser': 3.972.0
'@smithy/core': 3.20.6 '@smithy/core': 3.20.6
'@smithy/node-config-provider': 4.3.8 '@smithy/node-config-provider': 4.3.8
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
@@ -5604,36 +5619,36 @@ snapshots:
'@smithy/util-utf8': 4.2.0 '@smithy/util-utf8': 4.2.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-ssec@3.971.0': '@aws-sdk/middleware-ssec@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-user-agent@3.970.0': '@aws-sdk/middleware-user-agent@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/util-endpoints': 3.970.0 '@aws-sdk/util-endpoints': 3.972.0
'@smithy/core': 3.20.6 '@smithy/core': 3.20.6
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/nested-clients@3.971.0': '@aws-sdk/nested-clients@3.972.0':
dependencies: dependencies:
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/middleware-host-header': 3.969.0 '@aws-sdk/middleware-host-header': 3.972.0
'@aws-sdk/middleware-logger': 3.969.0 '@aws-sdk/middleware-logger': 3.972.0
'@aws-sdk/middleware-recursion-detection': 3.969.0 '@aws-sdk/middleware-recursion-detection': 3.972.0
'@aws-sdk/middleware-user-agent': 3.970.0 '@aws-sdk/middleware-user-agent': 3.972.0
'@aws-sdk/region-config-resolver': 3.969.0 '@aws-sdk/region-config-resolver': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@aws-sdk/util-endpoints': 3.970.0 '@aws-sdk/util-endpoints': 3.972.0
'@aws-sdk/util-user-agent-browser': 3.969.0 '@aws-sdk/util-user-agent-browser': 3.972.0
'@aws-sdk/util-user-agent-node': 3.971.0 '@aws-sdk/util-user-agent-node': 3.972.0
'@smithy/config-resolver': 4.4.6 '@smithy/config-resolver': 4.4.6
'@smithy/core': 3.20.6 '@smithy/core': 3.20.6
'@smithy/fetch-http-handler': 5.3.9 '@smithy/fetch-http-handler': 5.3.9
@@ -5663,28 +5678,28 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/region-config-resolver@3.969.0': '@aws-sdk/region-config-resolver@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/config-resolver': 4.4.6 '@smithy/config-resolver': 4.4.6
'@smithy/node-config-provider': 4.3.8 '@smithy/node-config-provider': 4.3.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/signature-v4-multi-region@3.970.0': '@aws-sdk/signature-v4-multi-region@3.972.0':
dependencies: dependencies:
'@aws-sdk/middleware-sdk-s3': 3.970.0 '@aws-sdk/middleware-sdk-s3': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/protocol-http': 5.3.8 '@smithy/protocol-http': 5.3.8
'@smithy/signature-v4': 5.3.8 '@smithy/signature-v4': 5.3.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/token-providers@3.971.0': '@aws-sdk/token-providers@3.972.0':
dependencies: dependencies:
'@aws-sdk/core': 3.970.0 '@aws-sdk/core': 3.972.0
'@aws-sdk/nested-clients': 3.971.0 '@aws-sdk/nested-clients': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/property-provider': 4.2.8 '@smithy/property-provider': 4.2.8
'@smithy/shared-ini-file-loader': 4.4.3 '@smithy/shared-ini-file-loader': 4.4.3
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
@@ -5692,18 +5707,18 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/types@3.969.0': '@aws-sdk/types@3.972.0':
dependencies: dependencies:
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/util-arn-parser@3.968.0': '@aws-sdk/util-arn-parser@3.972.0':
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/util-endpoints@3.970.0': '@aws-sdk/util-endpoints@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
'@smithy/url-parser': 4.2.8 '@smithy/url-parser': 4.2.8
'@smithy/util-endpoints': 3.2.8 '@smithy/util-endpoints': 3.2.8
@@ -5713,22 +5728,22 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/util-user-agent-browser@3.969.0': '@aws-sdk/util-user-agent-browser@3.972.0':
dependencies: dependencies:
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
bowser: 2.13.1 bowser: 2.13.1
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/util-user-agent-node@3.971.0': '@aws-sdk/util-user-agent-node@3.972.0':
dependencies: dependencies:
'@aws-sdk/middleware-user-agent': 3.970.0 '@aws-sdk/middleware-user-agent': 3.972.0
'@aws-sdk/types': 3.969.0 '@aws-sdk/types': 3.972.0
'@smithy/node-config-provider': 4.3.8 '@smithy/node-config-provider': 4.3.8
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/xml-builder@3.969.0': '@aws-sdk/xml-builder@3.972.0':
dependencies: dependencies:
'@smithy/types': 4.12.0 '@smithy/types': 4.12.0
fast-xml-parser: 5.2.5 fast-xml-parser: 5.2.5
@@ -6398,6 +6413,14 @@ snapshots:
eventemitter3: 5.0.4 eventemitter3: 5.0.4
nanoid: 5.1.6 nanoid: 5.1.6
'@kevisual/api@0.0.22':
dependencies:
'@kevisual/js-filter': 0.0.5
'@kevisual/load': 0.0.6
es-toolkit: 1.44.0
eventemitter3: 5.0.4
nanoid: 5.1.6
'@kevisual/app@0.0.1(dotenv@17.2.3)': '@kevisual/app@0.0.1(dotenv@17.2.3)':
dependencies: dependencies:
'@kevisual/ai': 0.0.19 '@kevisual/ai': 0.0.19
@@ -6454,6 +6477,8 @@ snapshots:
'@kevisual/js-filter@0.0.3': {} '@kevisual/js-filter@0.0.3': {}
'@kevisual/js-filter@0.0.5': {}
'@kevisual/kv-code@0.0.4(@types/react@19.2.8)(dotenv@17.2.3)': '@kevisual/kv-code@0.0.4(@types/react@19.2.8)(dotenv@17.2.3)':
dependencies: dependencies:
'@codemirror/autocomplete': 6.20.0 '@codemirror/autocomplete': 6.20.0
@@ -6507,6 +6532,12 @@ snapshots:
'@kevisual/query': 0.0.35 '@kevisual/query': 0.0.35
dotenv: 17.2.3 dotenv: 17.2.3
'@kevisual/query-login@0.0.7(@kevisual/query@0.0.37)':
dependencies:
'@kevisual/cache': 0.0.3
'@kevisual/query': 0.0.37
dotenv: 17.2.3
'@kevisual/query@0.0.31': {} '@kevisual/query@0.0.31': {}
'@kevisual/query@0.0.32': {} '@kevisual/query@0.0.32': {}
@@ -6515,6 +6546,10 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@kevisual/query@0.0.37':
dependencies:
tslib: 2.8.1
'@kevisual/registry@0.0.1(typescript@5.8.2)': '@kevisual/registry@0.0.1(typescript@5.8.2)':
dependencies: dependencies:
class-variance-authority: 0.7.1 class-variance-authority: 0.7.1
@@ -6557,12 +6592,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@kevisual/router@0.0.57': '@kevisual/router@0.0.60':
dependencies: dependencies:
hono: 4.11.4 hono: 4.11.4
'@kevisual/types@0.0.11': {} '@kevisual/types@0.0.11': {}
'@kevisual/types@0.0.12': {}
'@kevisual/use-config@1.0.28(dotenv@17.2.3)': '@kevisual/use-config@1.0.28(dotenv@17.2.3)':
dependencies: dependencies:
'@kevisual/load': 0.0.6 '@kevisual/load': 0.0.6
@@ -6672,12 +6709,12 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1 fastq: 1.17.1
'@opencode-ai/plugin@1.1.26': '@opencode-ai/plugin@1.1.28':
dependencies: dependencies:
'@opencode-ai/sdk': 1.1.26 '@opencode-ai/sdk': 1.1.28
zod: 4.1.8 zod: 4.1.8
'@opencode-ai/sdk@1.1.26': {} '@opencode-ai/sdk@1.1.28': {}
'@oslojs/encoding@1.1.0': {} '@oslojs/encoding@1.1.0': {}
@@ -9205,7 +9242,7 @@ snapshots:
inline-style-parser@0.2.7: {} inline-style-parser@0.2.7: {}
inquirer@13.2.0(@types/node@25.0.9): inquirer@13.2.1(@types/node@25.0.9):
dependencies: dependencies:
'@inquirer/ansi': 2.0.3 '@inquirer/ansi': 2.0.3
'@inquirer/core': 11.1.1(@types/node@25.0.9) '@inquirer/core': 11.1.1(@types/node@25.0.9)
@@ -10827,7 +10864,7 @@ snapshots:
tapable@2.3.0: {} tapable@2.3.0: {}
tar@7.5.4: tar@7.5.6:
dependencies: dependencies:
'@isaacs/fs-minipass': 4.0.1 '@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0 chownr: 3.0.0

View File

@@ -1,5 +1,5 @@
import { program, Command } from '@/program.ts'; import { program, Command } from '@/program.ts';
import { chalk } from '../module/chalk.ts'; import { chalk } from '../../module/chalk.ts';
import path from 'node:path'; import path from 'node:path';
import { spawn } from 'node:child_process'; import { spawn } from 'node:child_process';
import { useKey } from '@kevisual/use-config'; import { useKey } from '@kevisual/use-config';
@@ -7,7 +7,7 @@ import os from 'node:os'
import fs from 'node:fs'; import fs from 'node:fs';
import { select } from '@inquirer/prompts'; import { select } from '@inquirer/prompts';
const MODELS = ['minimax', 'glm', 'volcengine'] as const; const MODELS = ['minimax', 'glm', 'volcengine', 'bailian'] as const;
type Model = typeof MODELS[number]; type Model = typeof MODELS[number];
const changeMinimax = (token?: string) => { const changeMinimax = (token?: string) => {
@@ -53,7 +53,20 @@ const changeVolcengine = (token?: string) => {
} }
} }
} }
const changeBailian = (token?: string) => {
const auth_token = token || useKey('BAILIAN_API_KEY')
return {
"env": {
"ANTHROPIC_AUTH_TOKEN": auth_token,
"ANTHROPIC_BASE_URL": "https://coding.dashscope.aliyuncs.com/apps/anthropic",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "qwen3-coder-plus",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "qwen3-coder-plus",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "qwen3-coder-plus",
"ANTHROPIC_MODEL": "qwen3-coder-plus"
},
"includeCoAuthoredBy": false
}
}
/** /**
* ~/.claude.json "hasCompletedOnboarding": true * ~/.claude.json "hasCompletedOnboarding": true
*/ */
@@ -83,6 +96,7 @@ const modelConfig: Record<Model, (token?: string) => object> = {
minimax: changeMinimax, minimax: changeMinimax,
glm: changeGLM, glm: changeGLM,
volcengine: changeVolcengine, volcengine: changeVolcengine,
bailian: changeBailian,
}; };
const readOrCreateConfig = (configPath: string): Record<string, unknown> => { const readOrCreateConfig = (configPath: string): Record<string, unknown> => {

View File

@@ -0,0 +1,2 @@
// TODO: 对 .opencode/plugin/agent.ts 的内容进行管理
// 例如添加、删除、列出等操作

View File

@@ -17,7 +17,7 @@ import './command/gist/index.ts';
import './command/config-remote.ts'; import './command/config-remote.ts';
import './command/config-secret-remote.ts'; import './command/config-secret-remote.ts';
import './command/ai.ts'; import './command/ai.ts';
import './command/cc.ts' import './command/claude/cc.ts'
import './command/docker.ts'; import './command/docker.ts';
// program.parse(process.argv); // program.parse(process.argv);