generated from template/astro-template
update
This commit is contained in:
parent
eff66be037
commit
33f70e0564
@ -1,5 +1,7 @@
|
||||
在 shadcn/ui 中,`Neutral`、`Gray`、`Zinc`、`Stone` 和 `Slate` 都是预设的灰色调色板(neutral color palettes),但它们的色调倾向和适用场景略有不同。以下是它们的区别和特点:
|
||||
|
||||
|
||||
```md
|
||||
---
|
||||
|
||||
### 1. **`Neutral`**
|
||||
@ -47,5 +49,5 @@
|
||||
|
||||
### 对比图(从冷到暖):
|
||||
`Slate` → `Gray` → `Neutral` → `Zinc` → `Stone`
|
||||
|
||||
```
|
||||
如果需要更直观的对比,可以在 [shadcn/ui 官网](https://ui.shadcn.com/docs) 或 [Tailwind 调色板](https://tailwindcss.com/docs/customizing-colors) 查看色值示例。
|
46
src/data/blogs/logger-life/25-06-05-viz-think.md
Normal file
46
src/data/blogs/logger-life/25-06-05-viz-think.md
Normal file
@ -0,0 +1,46 @@
|
||||
# viz 的思考
|
||||
|
||||
对于任何用户都能够展示的各自自己的页面。
|
||||
|
||||
用户只需要配置要的窗口的内容,和初始化的位置信息。
|
||||
|
||||
**超级副屏**
|
||||
|
||||
> 实时统计
|
||||
|
||||
使用点:
|
||||
1. 实时获取语音的信息展示,生成的文本内容
|
||||
2. 任务管理ToDo
|
||||
3. ai对话生成结果记录,比较重要的agent的消息。多端的糅合,如果手机端的对话,可以实时同步到电脑端
|
||||
4. 听歌,页面,操作。
|
||||
|
||||
## 定义最基本的框架数据类型
|
||||
|
||||
**显示内容相关的数据**
|
||||
|
||||
类型:页面类型 html的cssobject,或者原本的threejs渲染的内容。
|
||||
|
||||
### html的相关信息信息
|
||||
宽度,大小,位置
|
||||
隐藏或显示
|
||||
刷新
|
||||
|
||||
### 原本的threejs渲染类型
|
||||
|
||||
## think
|
||||
|
||||
我第一步关注点在于,页面的内容的显示
|
||||
|
||||
-- iframe 内嵌(类似于内置浏览器)
|
||||
-- render by router 路由渲染
|
||||
-- 代码 执行代码
|
||||
-- 控制面板,跟随用户的面板
|
||||
|
||||
|
||||
## 多终端交互同步
|
||||
|
||||
所有的内容,语音,知识库调度,任务调度,都需要汇集在viz中心,可以观看。
|
||||
|
||||
|
||||
|
||||
|
9
src/data/blogs/logger-life/25-06-05-z01-直觉编程.md
Normal file
9
src/data/blogs/logger-life/25-06-05-z01-直觉编程.md
Normal file
@ -0,0 +1,9 @@
|
||||
# 直觉
|
||||
|
||||
智能编程,自然语言转为代码。首要的条件是理解函数的执行过程,运行顺序。
|
||||
|
||||
执行的过程,程序是按顺序运行的,也就如果直觉下,知晓对应的线性关系,代码能够被更智能和更有效的生成。
|
||||
|
||||
## 顺序
|
||||
|
||||
代码的执行,在编程语言当中,是有关键字来确定要做什么。自然语言去生成,就需要通过描述和定义去定义形成的方案,同时借用已有的示例的内容去实现代码,去适配已有的代码库和风格。
|
41
src/data/blogs/logger-life/25-06-05-z02-task.md
Normal file
41
src/data/blogs/logger-life/25-06-05-z02-task.md
Normal file
@ -0,0 +1,41 @@
|
||||
# 任务
|
||||
|
||||
## minio 的事件的监听
|
||||
|
||||
### 初始化
|
||||
|
||||
删除所有的 db 的数据,列出 minio 的所有文件,同步内容到 db 数据库
|
||||
|
||||
### 监听任务
|
||||
|
||||
minio 的事件,更新,删除,修改文件,触发同步事件。
|
||||
|
||||
## 关于实现 client 服务
|
||||
|
||||
gitea 的 token,实时获取 我的 可共享的内容。
|
||||
|
||||
`https://kevisual.xiongxiao.me/root/me/`
|
||||
|
||||
## 关于 assistant 的 storage 的模块的数据的存储
|
||||
|
||||
```sh
|
||||
npm i @kevisual/storage
|
||||
```
|
||||
1. 类名为 AssistantStorage
|
||||
|
||||
2. opts 对象类型 可选configPath 为字符串
|
||||
可选 app 为字符串
|
||||
|
||||
3. 结构体 定义configPath,如果不存在,则为process.cwd(); app不存在为 名称 app
|
||||
dir为 path.join(configPath, app);
|
||||
|
||||
4. getData(name='data.json'), 先检测 dir,不存在则创建。
|
||||
|
||||
然后获取data.json的内容,如果不存在,则创建文件, 切返回{}
|
||||
|
||||
5. setData(name='data.json', data, opts) , 获取 getData,并merge数据,opts有参数 overwrite,的时候不merge,直接覆盖。
|
||||
|
||||
|
||||
configPath 默认为 `path.join(process.cwd(), 'storage', '__user_app__')`
|
||||
|
||||
|
27
src/data/blogs/logger-life/25-06-06-minio-listen.md
Normal file
27
src/data/blogs/logger-life/25-06-06-minio-listen.md
Normal file
@ -0,0 +1,27 @@
|
||||
# minio 文件监听
|
||||
|
||||
昨天提及,minio 的内容的监听,为什么要有这个文件的监听,是因为,minio 不支持高级搜索,过滤的搜索内容。只能基于 prefix 和 maxKey 和 ContinuationToken 去拆页面获取。不够灵活,所以需要把目录的信息同步到数据库 postgres 当中。
|
||||
|
||||
为了同步数据到数据库当中,要实现文件创建和删除的监听。
|
||||
|
||||
为了避免同一个文件多次修改,任务的处理一般要延迟运行,创建了一个文件,debounce 延迟 2 分钟录入到数据库,检测和刷新。因为数据可能一直在修改。
|
||||
|
||||
其中也有一个原因是因为,本地数据 kevisual.json 的数据同步到服务器当中,会出现一个问题,要知道那些内容未更新,更新了的文件才上传,没有更新的文件就不需要再次上传了。
|
||||
|
||||
## 如何实现
|
||||
|
||||
minio 的 listen 的服务的内容是依据,事件监听,监听其中的 createObject 和 removeObeject 俩个事件。
|
||||
|
||||
触发动作后,把需要操作的事情 push 到 router 当中,router 当中,把请求 push 打哦 bullmq 当中,bullmq 进行队列执行
|
||||
|
||||
**第一次运行**
|
||||
|
||||
监测是否是第一次运行
|
||||
|
||||
如果是第一次运行,同步所有的 minio 当中的数据到数据库当中
|
||||
|
||||
## 定时器
|
||||
|
||||
需要有一个定时的任务,任务的主要的功能模块是,检测数据库一个月以前的数据,如果其中在 minio 中的数据不一致了,那么进行同步数据库的内容,更新 check,因为数据是同步来自 minio,所以具有不确定性,把不确定性的东西实现变得更加的稳定。
|
||||
|
||||
这里介绍一下不稳定的地方:minio 是一个数组,数据是一个数组,这两个中的数据要一致的话,需要 a 的列表和 b 的列表都遍历一次才能知道,如果出了 minio 中文件不存在,而数据库存在,就有问题。
|
34
src/data/blogs/logger-life/25-06-07-listen-operate.md
Normal file
34
src/data/blogs/logger-life/25-06-07-listen-operate.md
Normal file
@ -0,0 +1,34 @@
|
||||
# 监听实时的声音
|
||||
|
||||
实时对话,然后进行实现一些辅助功能。
|
||||
|
||||
## 大概的可能的功能模块
|
||||
|
||||
小小是智能助手的名称。
|
||||
|
||||
### 单句话
|
||||
|
||||
如果以小小开头的一段话,那吗是开启记录的事件内容,同时把生成的那一条数据记录下来。说的下一句话,不做记录。
|
||||
|
||||
### 多句话
|
||||
|
||||
如果是小小,记录事件,这是开启记录的事件的语音指令,其他的任何行为都是记录事件,时刻保持监听。
|
||||
|
||||
暂停和继续的指令
|
||||
|
||||
退出指令:并在触发退出的音频是 退出,停止,关闭等语音指令进行关闭。
|
||||
|
||||
### 自定义的指令模块
|
||||
|
||||
其他的额外的可能附加的指令。
|
||||
|
||||
## 因为功能的局限性
|
||||
|
||||
具体只需要实现的功能,单句话。把内容传递到服务器的 logger-list 的数据当中。
|
||||
|
||||
logger-list 可以操作一些额外的事件。
|
||||
|
||||
|
||||
## 获取ai的storage的today的数据
|
||||
|
||||
每次推送一端文字?
|
1
src/data/blogs/logger-life/25-06-07-服务.md
Normal file
1
src/data/blogs/logger-life/25-06-07-服务.md
Normal file
@ -0,0 +1 @@
|
||||
你要多想想自己,服务亮点是什么,有没有特殊的优势,考虑的够不够周全。
|
7
src/data/blogs/logger-life/25-06-07-记录列表.md
Normal file
7
src/data/blogs/logger-life/25-06-07-记录列表.md
Normal file
@ -0,0 +1,7 @@
|
||||
## 需要一个库
|
||||
|
||||
获取 ai 下的资源的 json 的数据的内容。然后保存。
|
||||
|
||||
## 通过api
|
||||
|
||||
使用html的页面的代码,直接实现,获取页面的内容。
|
27
src/data/blogs/logger-life/25-06-08-关于ai生成项目的方案.md
Normal file
27
src/data/blogs/logger-life/25-06-08-关于ai生成项目的方案.md
Normal file
@ -0,0 +1,27 @@
|
||||
# ai-editor 创建项目
|
||||
|
||||
在打开文件夹的时候,显示一个操作弹窗。
|
||||
|
||||
创建一个前或者后端项目,直接生成保存代码内容。根据提示词生成。
|
||||
|
||||
例外的思考需要后端的。创建 kevisual.json,如果是 node 端的程序,可以下载到本地的助手的开发环境下,自己手动运行。
|
||||
|
||||
纯前端的页面的内容,部署方式,前端的开发预览。
|
||||
|
||||
|
||||
## ai
|
||||
|
||||
要做什么,等于是插件式的功能
|
||||
|
||||
AI,属于应用插件。
|
||||
|
||||
|
||||
## 构思一个开发的一个流程过程
|
||||
|
||||
web上开发,同时进行部署。(预览使用开源的项目)
|
||||
|
||||
web上开发,就是页面打开这个文件夹,然后触发 `deploy` 的 `ai` 动作.
|
||||
|
||||
|
||||
|
||||
|
11
src/data/blogs/logger-life/25-06-08-目录命名-kevisual命名.md
Normal file
11
src/data/blogs/logger-life/25-06-08-目录命名-kevisual命名.md
Normal file
@ -0,0 +1,11 @@
|
||||
# kevisual 命名
|
||||
|
||||
两级命名,在寻常的开发过程,路由的使用的时候我推荐 route 使用两级命名,但是我在开发 editor 编辑器的过程中,实际发现,在日常的时候也有效果。
|
||||
|
||||
在系统的文件夹管理当中,当一个目录的文件夹过多,是比较难去找到自己想要找到的目录,除非是通过搜索目录。人能够很简单的找到,量不多的时候,有记忆,我大概位置,那么对整个文件的掌控性是非常强的。能够通过直觉知道这个目录在哪里。
|
||||
|
||||
一般情况下,一个目录中最多 100 个子的目录,每一个子目录也是。所有的目录的包函的内容,就能够包函 10000 个。每一个目录等于是一个标签,在查询方面,更加的迅速。
|
||||
|
||||
## 延伸能做的一个
|
||||
|
||||
可以开发一个图的结构的文件夹模式。然后创建文件和创建文件夹,然后对内容进行操作更加的便捷。
|
20
src/data/blogs/logger-life/25-06-09-弱智能代码.md
Normal file
20
src/data/blogs/logger-life/25-06-09-弱智能代码.md
Normal file
@ -0,0 +1,20 @@
|
||||
# 代码
|
||||
|
||||
当前的 ai 因为是弱智能的,所以要生成的代码都需要先人为的固定生成的模式,才能继续去生成。
|
||||
|
||||
## 关联
|
||||
|
||||
如何把 ai 关联到开发的项目当中。
|
||||
|
||||
## 在浏览器当中
|
||||
|
||||
通过 import-map,直接实现在页面能够直接跑代码,
|
||||
|
||||
比如设定提示词,直接能够在页面中使用。
|
||||
|
||||
```ts
|
||||
const propmts = {
|
||||
role: 'assistant',
|
||||
content: '你是一个前端开发',
|
||||
};
|
||||
```
|
@ -163,6 +163,10 @@ export class QueryLogin extends BaseQuery {
|
||||
return this.post(
|
||||
{ key: 'refreshToken', data },
|
||||
{
|
||||
noStop: true,
|
||||
beforeRequest: async (config) => {
|
||||
return config;
|
||||
},
|
||||
afterResponse: async (response, ctx) => {
|
||||
setBaseResponse(response);
|
||||
return response as any;
|
||||
@ -239,6 +243,7 @@ export class QueryLogin extends BaseQuery {
|
||||
) {
|
||||
const that = this;
|
||||
const refetch = opts?.refetch ?? false;
|
||||
|
||||
if (response?.code === 401) {
|
||||
if (that.query.stop === true) {
|
||||
return { code: 500, success: false, message: 'refresh token loading...' };
|
||||
@ -266,6 +271,7 @@ export class QueryLogin extends BaseQuery {
|
||||
return that.post(
|
||||
{ key: 'me' },
|
||||
{
|
||||
noStop: true,
|
||||
beforeRequest: async (config) => {
|
||||
if (config.headers) {
|
||||
config.headers['Authorization'] = `Bearer ${_token}`;
|
||||
@ -397,6 +403,20 @@ export class QueryLogin extends BaseQuery {
|
||||
},
|
||||
);
|
||||
}
|
||||
async getLoginUser() {
|
||||
const that = this;
|
||||
const userInfo = await that.checkLocalUser();
|
||||
const token = await that.getToken();
|
||||
if (userInfo) {
|
||||
return userInfo;
|
||||
} else if (token) {
|
||||
const userinfo = await that.getLoginUserByToken(token);
|
||||
if (userinfo) {
|
||||
return userinfo;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
async getLoginUserByToken(token: string): Promise<User | null> {
|
||||
const me = await this.getMe(token, false);
|
||||
if (me.code === 200) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user