minecodex 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +149 -0
- package/apps/dashboard/DESIGN.md +45 -0
- package/features/images/DESIGN.md +71 -0
- package/features/images/README.md +2 -0
- package/features/images/codex-feature.json +2 -1
- package/features/images/src/adapters/codex/cloud-import.mjs +52 -0
- package/features/images/src/adapters/codex/image-prompt.mjs +22 -0
- package/features/images/src/adapters/codex/library-api.mjs +55 -0
- package/features/images/src/adapters/codex/library-viewer.mjs +18 -0
- package/features/images/src/adapters/codex/prompt-resolver-source.mjs +8 -0
- package/features/images/src/backend/cloud-library.mjs +10 -0
- package/features/images/src/domain/library-prompt.mjs +7 -0
- package/features/images/src/library-prompt-page.mjs +8 -76
- package/features/images/src/library-prompt-source.mjs +10 -0
- package/features/images/web/app.js +9 -9
- package/features/images/web/styles.css +219 -219
- package/features/model-slider/DESIGN.md +34 -0
- package/features/model-slider/src/adapters/codex/controller.mjs +93 -0
- package/features/model-slider/src/domain/model-rules.mjs +143 -0
- package/features/model-slider/src/frontend/install.mjs +2110 -0
- package/features/model-slider/src/injection-source.mjs +10 -0
- package/features/notes/DESIGN.md +19 -15
- package/features/notes/README.md +10 -2
- package/features/notes/assets/default-prompts.json +170 -0
- package/features/notes/assets/dsh-prompt-LICENSE.txt +24 -0
- package/features/notes/assets/icons/book-open-nav-fill.svg +1 -0
- package/features/notes/codex-feature.json +5 -1
- package/features/notes/src/backend/default-prompts.mjs +29 -0
- package/features/notes/src/{product.mjs → backend/product.mjs} +3 -1
- package/features/notes/src/{quick-prompts-server.mjs → backend/quick-prompts-server.mjs} +2 -2
- package/features/notes/src/{quick-prompts-page.mjs → frontend/entry.mjs} +78 -266
- package/features/notes/src/frontend/icons.json +13 -0
- package/features/notes/src/frontend/styles.css +110 -0
- package/features/notes/src/main.mjs +2 -2
- package/features/notes/vendor/phosphor-LICENSE +21 -0
- package/features/session-status/DESIGN.md +7 -7
- package/features/session-status/README.md +4 -0
- package/features/session-status/codex-feature.json +1 -1
- package/features/session-status/src/adapters/codex/context-usage.mjs +39 -0
- package/features/session-status/src/adapters/codex/session-log.mjs +81 -0
- package/features/session-status/src/adapters/codex/session-reader.mjs +106 -0
- package/features/session-status/src/domain/session-stats.mjs +141 -0
- package/features/session-status/src/injection-source.mjs +6 -0
- package/features/session-status/src/session-status.mjs +43 -103
- package/features/sidebar-focus/DESIGN.md +6 -5
- package/features/sidebar-focus/codex-feature.json +2 -1
- package/features/sidebar-focus/src/adapters/codex/renderer.mjs +28 -0
- package/features/sidebar-focus/src/injection-source.mjs +6 -0
- package/features/sidebar-focus/src/sidebar-focus.mjs +19 -66
- package/features/sites/DESIGN.md +60 -0
- package/features/sites/README.md +27 -0
- package/features/sites/codex-feature.json +28 -0
- package/features/sites/src/adapters/codex/catalog.mjs +26 -0
- package/features/sites/src/adapters/codex/renderer.mjs +83 -0
- package/features/sites/src/backend/discovery.mjs +73 -0
- package/features/sites/src/backend/project-sites.mjs +34 -0
- package/features/sites/src/backend/site-launcher.mjs +54 -0
- package/features/sites/src/backend/sites-preview.mjs +53 -0
- package/features/sites/src/backend/sites-service.mjs +162 -0
- package/features/sites/src/domain/site.mjs +40 -0
- package/features/sites/src/frontend/entry.mjs +383 -0
- package/features/sites/src/frontend/icons.json +12 -0
- package/features/sites/src/frontend/styles.css +72 -0
- package/features/sites/src/injection-source.mjs +7 -0
- package/features/sites/vendor/lucide-LICENSE +35 -0
- package/features/unread-inbox/DESIGN.md +6 -2
- package/features/unread-inbox/codex-feature.json +2 -1
- package/features/unread-inbox/src/adapters/codex/renderer.mjs +66 -0
- package/features/unread-inbox/src/injection-source.mjs +6 -0
- package/features/unread-inbox/src/unread-inbox.mjs +36 -91
- package/features/usage-meter/DESIGN.md +9 -9
- package/features/usage-meter/README.md +2 -1
- package/features/usage-meter/codex-feature.json +3 -3
- package/features/usage-meter/src/adapters/codex/renderer.mjs +61 -0
- package/features/usage-meter/src/injection-source.mjs +6 -0
- package/features/usage-meter/src/usage-meter.mjs +27 -66
- package/package.json +17 -4
- package/packages/cli/src/config.mjs +2 -1
- package/packages/codex-adapter/README.md +15 -0
- package/packages/codex-adapter/package.json +1 -0
- package/packages/codex-adapter/src/renderer/environment.mjs +53 -0
- package/packages/runtime-host/README.md +27 -0
- package/packages/runtime-host/src/codex-injection.mjs +36 -2393
- package/packages/runtime-host/src/codex-runtime.mjs +21 -3
- package/packages/runtime-host/src/feature-registry.mjs +28 -3
- package/packages/ui/DESIGN.md +31 -0
- package/packages/ui/package.json +8 -0
- package/packages/ui/src/components/button.mjs +21 -0
- package/packages/ui/src/components/composer-menu.mjs +18 -0
- package/packages/ui/src/components/dialog.mjs +55 -0
- package/packages/ui/src/components/navigation-rail.mjs +77 -0
- package/packages/ui/src/components/page.mjs +8 -0
- package/packages/ui/src/components/tooltip.mjs +96 -0
- package/packages/ui/src/foundation/layers.mjs +14 -0
- package/packages/ui/src/foundation/surfaces.mjs +34 -0
- package/packages/ui/src/install.mjs +22 -0
- package/packages/ui/src/native/navigation-rail.mjs +33 -0
- package/packages/ui/src/native/theme.mjs +35 -0
- package/packages/{runtime-host/src/codex-design-contract.mjs → ui/src/native/tokens.mjs} +67 -24
- package/packages/runtime-host/src/cloud-images.mjs +0 -123
- package/packages/runtime-host/src/session-status-reader.mjs +0 -340
- /package/features/notes/src/{prompt-schema.mjs → backend/prompt-schema.mjs} +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createModelControllerAdapter } from "./adapters/codex/controller.mjs";
|
|
2
|
+
import { createModelRules } from "./domain/model-rules.mjs";
|
|
3
|
+
import { installModelSlider } from "./frontend/install.mjs";
|
|
4
|
+
|
|
5
|
+
// 两部分均显式序列化,Renderer 不捕获 Node imports。
|
|
6
|
+
export function createModelSliderInstallerSource() {
|
|
7
|
+
return `function installModelSliderFeature(signal, context) {
|
|
8
|
+
return (${installModelSlider.toString()})(signal, context, (${createModelRules.toString()})(), ${createModelControllerAdapter.toString()});
|
|
9
|
+
}`;
|
|
10
|
+
}
|
package/features/notes/DESIGN.md
CHANGED
|
@@ -1,37 +1,35 @@
|
|
|
1
1
|
# Prompts 设计约定
|
|
2
2
|
|
|
3
|
+
通用视觉、材质、按钮、Tooltip 与原生 sidebar 层级遵循根 [DESIGN.md](../../DESIGN.md)。本文件只记录功能特有组件、布局、数据语义与通用组件选型。
|
|
4
|
+
|
|
3
5
|
## 范围与数据
|
|
4
6
|
Prompts 页面负责新增、编辑、分类、Emoji、排序和统计;Quick Prompts Popover 只浏览和插入。移除旧顶部 Notes 入口、固定摘要、Todo 和 Files 界面。沿用 `notes` 功能 ID 与 SQLite,保留已有提示词、历史 Todo / Files 数据和用户文件。
|
|
5
7
|
|
|
6
8
|
## 原生依据
|
|
7
9
|
2026-09-27 在隔离 Codex 实测导航扩展区、Library 页面及 Add files and more。
|
|
8
10
|
- Prompts 导航项位于固定扩展区末尾,顺序跟随扩展区而非硬编码 Projects。仅定位 `data-app-navigation-rail`,不匹配设置菜单。
|
|
9
|
-
- Quick Prompts 位于 Add 与 Change permissions 之间,克隆 Add 的按钮 classes 与响应式图标容器。入口采用 Lucide book-open
|
|
11
|
+
- Quick Prompts 位于 Add 与 Change permissions 之间,克隆 Add 的按钮 classes 与响应式图标容器。入口采用 Lucide book-open;保留 16 / 20px 图标容器,viewBox 扩为 27,将图形缩小约 11%;non-scaling-stroke 保持 1.5px 笔画,热区仍为 28px。
|
|
10
12
|
- 页面沿用 Library 的大标题和胶囊 Tabs;分类图标取自当前 Codex 原生 SymbolBrowser / project appearance catalogue,记录于 `assets/native-prompt-icons.json`,不手绘路径。
|
|
11
13
|
|
|
12
14
|
| 角色 | Token / 权威来源 | 值或用途 |
|
|
13
15
|
| --- | --- | --- |
|
|
14
16
|
| 输入框入口热区 | 原生 Add 的 h-token-button-composer / aspect-square | 28×28px |
|
|
15
17
|
| 入口图标 | 原生 CompactSource / LeadingSource | 16 / 20px |
|
|
16
|
-
| 字体 | --font-sans-default、--text-sm | 13px,原生字重 |
|
|
17
|
-
| 页面标题 | --text-heading-lg | 24px / 36px,600 |
|
|
18
18
|
| 页面内容 | 原生 Library header | 最大 1440px,左右 48px / 窄屏 30px |
|
|
19
19
|
| Tabs | 原生 Library tablist | 36px 高,胶囊,左右 16px |
|
|
20
|
-
| 文字 | --color-text-primary / secondary / tertiary | 标题、操作、辅助信息 |
|
|
21
|
-
| 面板 / 页面 | --color-surface-elevated-secondary、--color-token-border-default | 原生 surface、1px 边框,无额外阴影 |
|
|
22
20
|
| Popover 圆角 | --radius-suggestion-menu,回退 --radius-2xl | 20px |
|
|
23
21
|
| Popover 内边距 | --spacing | 4px,底部保留内边距 |
|
|
24
22
|
| Popover 列表行 | --suggestion-menu-item-padding / --app-menu-item-padding / --padding-row-y、--padding-row-x | 5px 8px |
|
|
25
23
|
| 行圆角 | --suggestion-menu-item-radius / --radius-xl | 15px |
|
|
26
|
-
|
|
|
27
|
-
|
|
|
24
|
+
| Popover 位置 | Add 所属的 `[data-composer-body]` 上方 | 与输入框主体等宽,间隔 4px;外层 Root 的 diff / request stack 不参与定位 |
|
|
25
|
+
| 页面条目正文预览宽度 | `.pm-preview` 的 `max-width:65%` | 相对于条目文字区域 `.pm-info`,单行省略;标题与点击区域保持全宽 |
|
|
28
26
|
|
|
29
27
|
分类颜色复用原生选择器的亮 / 暗模式色值:blue #0285ff / #339cff、green #04b84c / #40c977、orange #fb6a22 / #ff8549、pink #ff66ad / #ff8cc1、purple #924ff7 / #ad7bf9、red #fa423e / #ff6764、yellow #ffc300 / #ffd240;black 使用原生次级文字 token。
|
|
30
28
|
|
|
31
29
|
## 页面
|
|
32
|
-
Header 为 Prompts;右侧依次为排序图标、分类调节图标、常驻搜索框、New prompt。搜索框直接采用原生 Library 的透明背景、1px outline、32px 高、胶囊圆角、12px 水平 padding 和 16px 搜索 SVG。分类管理使用原生 sliders 图标,不再放在 Tabs
|
|
30
|
+
Header 为 Prompts;右侧依次为排序图标、分类调节图标、常驻搜索框、New prompt。搜索框直接采用原生 Library 的透明背景、1px outline、32px 高、胶囊圆角、12px 水平 padding 和 16px 搜索 SVG。分类管理使用原生 sliders 图标,不再放在 Tabs 行。排序菜单选择通用 Dropdown 的 menu 分支,内容密度跟随原生 Library。Tabs 仅包含 All、分类和 Other。默认分类生图、编程、文案、研究、翻译、效率、思考、学习,允许新增、改名、删除、换图标和颜色。删除分类仅解除归属,保留提示词和统计。
|
|
33
31
|
|
|
34
|
-
|
|
32
|
+
分类管理选择通用 Dialog 的 opaque 分支(Sites Share),宽440px;提示词编辑同一分支,宽520px。当前通过 `config.ui` 接入。分类编辑在标题前保留24px箭头返回热区,不使用文字 Back 或整页替换。挂载与焦点契约遵循根规范。
|
|
35
33
|
|
|
36
34
|
单条提示词通过图标弹出框选择 Emoji,沿用原生 Thread SymbolBrowser 的搜索和八列网格,不使用文本输入框;可恢复继承分类图标。分类选择为图标加名称的自定义菜单,不使用浏览器 select。列表显示标题、正文摘要;Manual order 和 Most used 显示累计调用次数,Recently used 在相同位置显示上次调用时间,未调用显示 Never used;点击进入编辑。手动排序采用右侧三横手柄拖拽,提示词限制组内排序;分类管理同样拖拽排序。Alt + ↑ / ↓ 提供键盘操作。另支持按调用次数、最近调用排序。搜索及统计排序期间不显示手动重排控件,避免操作含义不明确。
|
|
37
35
|
|
|
@@ -40,27 +38,33 @@ Header 为 Prompts;右侧依次为排序图标、分类调节图标、常驻
|
|
|
40
38
|
|
|
41
39
|
点击提示词只插入当前输入框,保留原草稿且不发送。Escape 关闭并回到入口;点击外部关闭;方向键移动列表焦点。原生 Add 或权限面板打开时关闭。切换输入框时关闭,异步结果不得插入另一会话。沿用原生焦点与 hover,无额外进场动画。
|
|
42
40
|
|
|
41
|
+
入口仅挂载到可见 Codex 输入框;原生可见的 Add 或菜单按钮展开时关闭 Popover。Session Status 的 Context 展开状态不是弹出菜单,不作为冲突条件;隐藏输入框和隐藏控件不参与锚点定位或菜单判断。
|
|
42
|
+
|
|
43
43
|
## 统计
|
|
44
44
|
成功插入后原子增加 `use_count` 并更新 `called_at`,保存于现有 SQLite。创建、编辑、复制和排序不计数。历史次数未知,从 0 开始,不从旧 `last_used_at` 推断。删除分类、切换页面、重启不清零。
|
|
45
45
|
|
|
46
46
|
本地数据只以 textContent 和表单值渲染,不执行提示词里的 HTML。页面关闭恢复底层原生视图的焦点能力;功能禁用移除所有本功能入口和视图。
|
|
47
47
|
|
|
48
48
|
## 空状态与编辑细节
|
|
49
|
-
空分类和搜索无结果沿用 Scheduled 的
|
|
49
|
+
空分类和搜索无结果沿用 Scheduled 的48px Emoji、18px medium标题、次级说明布局;空分类提供 New prompt。All 分组副标题采用 text-sm、500字重与 text-tertiary。Cancel 选择通用 ghost,保存选择 primary,Delete 选择 danger;非空分类删除前独立确认,明确提示词移到 Other,内容与调用次数保留。
|
|
50
50
|
|
|
51
|
-
导航栏 book-open 单独采用 20px 容器、27×27 viewBox,实际轮廓约 16.15px,描边折算 1.33px,与原生导航一致。Lucide 两个描边子路径合为一个 path,一次绘制半透明 currentColor
|
|
51
|
+
导航栏 book-open 单独采用 20px 容器、27×27 viewBox,实际轮廓约 16.15px,描边折算 1.33px,与原生导航一致。Lucide 两个描边子路径合为一个 path,一次绘制半透明 currentColor,避免书脊交叠变深。选中态使用 Phosphor 官方 book-open-fill 的20px资源;授权见 vendor/phosphor-LICENSE。输入框入口尺寸不变。
|
|
52
52
|
|
|
53
53
|
拖拽排序使用等高 Drop Placeholder,原生拖影跟随指针;同组条目以 180ms ease-out 让位,落位淡入 140ms。放到范围外或取消恢复原位,不写入排序。遵循 prefers-reduced-motion。
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
深浅主题层级:页面使用 `--color-surface`;弹窗/菜单使用 `--color-surface-elevated-secondary`。标题跟随原生 heading-lg(`--text-heading-lg`、`--font-weight-medium`、1.2 行高)。正文用 text-primary,摘要用 text-secondary,分组与辅助信息用 text-tertiary。主按钮使用 background-primary-solid / text-primary-solid 配对;警戒按钮使用 danger-soft-alpha,不使用浅色固定粉红底。边界统一使用 `--color-border` 或输入框的 `--color-border-primary-outline`。
|
|
55
|
+
页面选择通用 Page 外壳,保留原生 Home sidebar 的悬浮与导航行为。
|
|
58
56
|
|
|
59
57
|
提示词编辑沿用原生 Project 的复合标题输入:40px 图标段位于标题前,细分隔线,共用圆角边框与 focus-within 状态。图标选择入口不再单独占一行;Title 通过 aria-label 标识。
|
|
60
58
|
|
|
61
|
-
Prompts
|
|
59
|
+
Prompts 导航状态调用通用 `ui.navigationRail`:未选中/hover使用outline,选中使用filled,打开页面时取消原生视觉选中,关闭或卸载恢复。原生图标资源读取与选中属性恢复由通用层维护;Navbar Tooltip 使用通用右侧定位与原生延迟。
|
|
62
60
|
|
|
63
61
|
Category 下拉面板与触发栏等宽、左右对齐,宽度包含内边距;每次打开按当前触发栏尺寸计算。
|
|
64
62
|
|
|
65
63
|
## 语言
|
|
66
64
|
界面名称、操作、Tooltip、无障碍标签、空状态、错误提示与图标/颜色名称按 Codex 的语言显示中英文;日期按对应 locale 格式化。用户保存的提示词与分类名称原样展示,不随界面语言改写。
|
|
65
|
+
|
|
66
|
+
## 内置提示词与 Tooltip
|
|
67
|
+
|
|
68
|
+
内置 24 条来自 dsh-prompt 0.1.13 的 MIT 提示词,正文保持原样,按思考、学习、编程、效率分类并配 Emoji。来源与许可保存在 assets/dsh-prompt-LICENSE.txt。首次启动或旧库升级时单次导入;随后允许编辑和删除,重启不还原,也不重建被删除的分类。用户个人内容只保留在本机数据库,不纳入默认资源。
|
|
69
|
+
|
|
70
|
+
简短悬浮提示调用共享 Tooltip;具体文案由本功能维护。Quick Prompts 通过通用 ComposerMenu 使用原生浮动建议列表材质和输入框主体锚点。排序、分类与图标菜单显式选择 Dropdown。
|
package/features/notes/README.md
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
导航栏扩展区最后的 **Prompts** 页面管理提示词;输入框 Add 与权限按钮之间的 **Quick Prompts** 只浏览和调用。
|
|
4
4
|
|
|
5
|
+
Quick Prompts 以当前可见 Codex 输入框定位;打开原生 Add、权限或模型菜单时关闭,Session Status 的展开状态不会关闭提示词列表。离开聊天后移除输入框入口与 Popover。
|
|
6
|
+
|
|
5
7
|
## 管理页面
|
|
6
8
|
- All 与分类 Tabs,搜索、新增、编辑、删除。
|
|
7
|
-
-
|
|
9
|
+
- 默认分类:生图、编程、文案、研究、翻译、效率、思考、学习;支持新增、改名、删除与排序。
|
|
8
10
|
- 分类图标和颜色复用 Codex 原生 SymbolBrowser 的资源。单条提示词可设置一个 Emoji,否则继承分类图标。
|
|
9
11
|
- 使用右侧三横手柄拖拽调整组内顺序,也可按调用次数、最近调用排序。
|
|
10
12
|
- 删除分类会将提示词移至其他,保留正文、Emoji 和统计。
|
|
@@ -22,4 +24,10 @@
|
|
|
22
24
|
|
|
23
25
|
运行入口为 `src/main.mjs` → `quick-prompts-server.mjs`,仅开放提示词、分类、排序、调用记录及健康检查。页面经已认证 Runtime Host binding 访问固定允许的接口。旧 HTTP 服务、网页、Todo / Files 操作及文件清理代码已删除。`prompt-schema.mjs` 只负责向前迁移;`product.mjs` 负责提示词、分类和统计的事务读写。历史 Todo / Files 表保持原样。
|
|
24
26
|
|
|
25
|
-
服务仅监听 loopback,默认端口 47832。沿用 CODEX_NOTES_PORT、CODEX_NOTES_DATA_DIR、CODEX_NOTES_DATABASE。设计依据见 [DESIGN.md](./DESIGN.md)
|
|
27
|
+
服务仅监听 loopback,默认端口 47832。沿用 CODEX_NOTES_PORT、CODEX_NOTES_DATA_DIR、CODEX_NOTES_DATABASE。设计依据见 [DESIGN.md](./DESIGN.md)。未选中入口采用 Lucide book-open,选中导航入口采用 Phosphor book-open-fill(MIT,许可见 [phosphor-LICENSE](./vendor/phosphor-LICENSE)),拖拽手柄采用 Lucide menu。分类 SVG 来自当前 Codex 原生图标目录,未手绘替代路径。
|
|
28
|
+
|
|
29
|
+
内置 24 条已分类、带 Emoji 的快捷提示词,来自 MIT 授权的 dsh-prompt 0.1.13。首次启动或升级仅导入一次,后续编辑与删除不会被覆盖。个人提示词不随包发布。来源和完整许可见 [dsh-prompt-LICENSE.txt](./assets/dsh-prompt-LICENSE.txt)。
|
|
30
|
+
|
|
31
|
+
弹窗与浮层统一调用 UI 组件库提供的 `config.ui`(由 Runtime Host 注入),共享主题材质、标题、Close 和表单操作区;插件只维护内容及交互。
|
|
32
|
+
|
|
33
|
+
Quick Prompts 与原生 Add 一样定位到 `data-composer-body` 上沿;`data-codex-composer-root` 仅用于会话识别和控件检测。diff、request stack 等上方组件不抬高浮窗,层级沿用原生 z-index 50。
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "dsh-fp",
|
|
4
|
+
"title": "第一性原理拆解",
|
|
5
|
+
"body": "请用第一性原理分析以下主题,按编号结构化输出,结论先行:\n1. 这个问题的基本组成单元是什么?\n2. 哪些是真正不可改变的真理(而非假设)?\n3. 如果去掉所有既有假设,问题本身还剩下什么?\n4. 有哪些被大多数人默认为常识、但其实可以颠覆的?\n5. 基于以上推演给出你的原创见解,并说明它与主流看法的差异。\n主题:",
|
|
6
|
+
"categoryId": "thinking",
|
|
7
|
+
"emoji": "🧱"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "dsh-socratic",
|
|
11
|
+
"title": "苏格拉底式追问",
|
|
12
|
+
"body": "请用苏格拉底式追问帮助我思考,按编号结构化输出:\n1. 先复述我当前的观点或核心假设;\n2. 提出 3 个最有力的质疑;\n3. 找出一个我尚未考虑到的视角;\n4. 如果你是深思熟虑的对话者,你会问我哪几个我没想到的问题?\n5. 追问结束后,把整个过程浓缩成一个更精准的问题。\n主题:",
|
|
13
|
+
"categoryId": "thinking",
|
|
14
|
+
"emoji": "❓"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "dsh-deep",
|
|
18
|
+
"title": "深度多维分析",
|
|
19
|
+
"body": "请从多个维度深度分析以下主题,按编号结构化输出,结论先行:\n1. 本质是什么?\n2. 有哪些常见的误解?\n3. 支持和反对的证据分别是什么?\n4. 这个问题的边界在哪里(什么情况下它不再成立)?\n5. 如果你必须做出一个判断,会是什么?\n6. 你最强的那个结论,弱点在哪里?\n主题:",
|
|
20
|
+
"categoryId": "thinking",
|
|
21
|
+
"emoji": "🔬"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "dsh-adversarial",
|
|
25
|
+
"title": "对抗式审查",
|
|
26
|
+
"body": "请对以下方案/结论做对抗式审查(红队角色),先给一段结论摘要,再按编号展开:\n1. 找出其中最强的 5 个假设,逐一论证它们可能如何失效;\n2. 构造最可能推翻它的 3 个反例或失败场景;\n3. 指出其中隐藏的认知偏差与利益相关方视角的盲区;\n4. 给出「如果这个方案失败,最可能的原因是什么」的排序清单;\n5. 最后给出:在何种条件下你才会认为它是错的——以及何种证据能让你改变立场。\n方案 / 结论:",
|
|
27
|
+
"categoryId": "thinking",
|
|
28
|
+
"emoji": "🛡️"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "dsh-decision",
|
|
32
|
+
"title": "决策博弈分析",
|
|
33
|
+
"body": "你是一位冷静的决策分析师。请分析我的处境,按编号结构化输出(你的选择仅作参考,重点是分析过程):\n1. 列出每个选项最坏的结果是什么;\n2. 每个选项最好的结果是什么;\n3. 最可能的结果是什么;\n4. 如果 10 年后回头看,我可能会后悔什么;\n5. 有没有哪条路是「没有回头路」的;\n6. 给出你本人的选择并说明理由;再指出我可能忽略的第三个选项。\n我的处境(选项与背景):",
|
|
34
|
+
"categoryId": "thinking",
|
|
35
|
+
"emoji": "⚖️"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "dsh-premortem",
|
|
39
|
+
"title": "事前验尸",
|
|
40
|
+
"body": "假设以下方案/项目已经在一年后彻底失败。请以「事后回溯」的方式写失败分析,按编号结构化输出:\n1. 按可能性从高到低列出 8 个失败原因;\n2. 对前 3 个原因,给出现在就能做的预防措施;\n3. 指出哪些早期信号现在就该监控;\n4. 最后说明:这个方案是否从一开始就有致命缺陷。\n方案描述:",
|
|
41
|
+
"categoryId": "thinking",
|
|
42
|
+
"emoji": "🚧"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "dsh-feynman",
|
|
46
|
+
"title": "费曼技巧",
|
|
47
|
+
"body": "请用费曼技巧确认我是否真正理解了以下概念,按编号结构化输出:\n1. 用最简单的语言、面向完全不懂的人解释这个概念(禁止术语);\n2. 给出 2 个生动类比和 2 个反例;\n3. 指出我理解中的错误或不准确之处;\n4. 设计 3 个判断题检验我是否真的懂了。\n概念:\n我的理解(可选):",
|
|
48
|
+
"categoryId": "learning",
|
|
49
|
+
"emoji": "💡"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "dsh-fivewhys",
|
|
53
|
+
"title": "五个为什么",
|
|
54
|
+
"body": "针对以下问题,请连续追问五个「为什么」,每层基于上一层的事实回答,最后区分根本原因与表层触发因素并给出解决方向:\n问题描述:",
|
|
55
|
+
"categoryId": "thinking",
|
|
56
|
+
"emoji": "🔎"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "dsh-mece",
|
|
60
|
+
"title": "MECE 拆解",
|
|
61
|
+
"body": "请用 MECE 原则拆解以下问题,按编号结构化输出:\n1. 给出 3~6 个相互独立(Mutually Exclusive)的分类维度;\n2. 每个维度下列出所有子项,确保完全穷尽(Collectively Exhaustive);\n3. 指出拆解中可能的遗漏与重叠;\n4. 给出按重要性排序后的关键子问题清单。\n问题:",
|
|
62
|
+
"categoryId": "thinking",
|
|
63
|
+
"emoji": "🧩"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": "dsh-bias",
|
|
67
|
+
"title": "认知偏差检查",
|
|
68
|
+
"body": "请审查以下推理/计划/结论中的认知偏差,按编号结构化输出:\n1. 列出可能影响它的偏差(确认偏误、沉没成本、可得性、锚定、乐观/悲观偏差、群体思维等),并指出具体证据;\n2. 对每条偏差,给出「如何检验是否真的受影响」的方法;\n3. 给出一个反事实检验:如果结论被证明是错的,最可能因为哪条偏差?\n推理 / 计划 / 结论:",
|
|
69
|
+
"categoryId": "thinking",
|
|
70
|
+
"emoji": "🪞"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "dsh-learnpath",
|
|
74
|
+
"title": "学习路线设计",
|
|
75
|
+
"body": "请为以下领域/技能设计一条从零到可实战的学习路线,按编号结构化输出:\n1. 按阶段拆分(入门→进阶→实战),每个阶段给出学习目标;\n2. 每个阶段推荐 2~3 个核心主题和练习方式;\n3. 指出常见的「伪学习陷阱」(只收藏不练习等);\n4. 给出一个 30 天内可完成的最小闭环,以及检验掌握程度的基准。\n领域 / 技能:\n当前水平(可选):\n目标(可选):",
|
|
76
|
+
"categoryId": "learning",
|
|
77
|
+
"emoji": "🗺️"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "dsh-concept",
|
|
81
|
+
"title": "概念澄清",
|
|
82
|
+
"body": "请帮我彻底理解以下概念,按编号结构化输出:\n1. 一句话定义 + 一个最小例子;\n2. 它与常见相近概念的本质区别(各给一个对比场景);\n3. 这个概念在什么情况下不适用(边界);\n4. 给出 3 个由浅入深的练习场景让我检验理解。\n概念:\n相近概念(可选,不知道可留空,AI 自行选常见相近概念对比):",
|
|
83
|
+
"categoryId": "learning",
|
|
84
|
+
"emoji": "📖"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "dsh-quiz",
|
|
88
|
+
"title": "AI 反向考验",
|
|
89
|
+
"body": "请通过出题检验我是否真正理解了以下主题/交付内容:\n1. 设计选择题/判断题/简答题/案例题(由浅入深);\n2. 我作答后指出错误与盲区;\n3. 直到回答正确、知识点无盲区后再确认交付。\n主题 / 交付内容:",
|
|
90
|
+
"categoryId": "learning",
|
|
91
|
+
"emoji": "🎯"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "dsh-codereview",
|
|
95
|
+
"title": "代码审查",
|
|
96
|
+
"body": "请审查以下代码,先给总体结论,再按严重程度排序输出,每个问题附具体修改建议(含示例代码):\n1. 正确性:潜在 bug、边界条件、并发/异步问题;\n2. 安全:注入、鉴权、敏感信息、依赖风险;\n3. 可维护性:命名、结构、重复、可读性;\n4. 性能:明显的低效点。\n代码过长时可分段审查,但最终汇总为一页结论。\n代码 / 文件 / 技术栈:",
|
|
97
|
+
"categoryId": "code",
|
|
98
|
+
"emoji": "🔍"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": "dsh-testdesign",
|
|
102
|
+
"title": "测试用例设计",
|
|
103
|
+
"body": "请为以下功能设计测试用例,按编号结构化输出:\n1. 正常路径用例(含输入/预期输出);\n2. 边界与极端值用例;\n3. 异常与错误处理用例;\n4. 并发/重复/幂等场景(如适用);\n5. 指出哪些用例最容易漏、以及对应的风险。\n功能描述:",
|
|
104
|
+
"categoryId": "code",
|
|
105
|
+
"emoji": "🧪"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "dsh-refactor",
|
|
109
|
+
"title": "重构方案",
|
|
110
|
+
"body": "请为以下代码提出重构方案,按编号结构化输出:\n1. 指出当前结构的主要问题(职责、耦合、可测试性);\n2. 给出目标结构(抽象与拆分建议,含示例);\n3. 按「小步重构」顺序列出步骤,每一步可独立提交且行为不变;\n4. 指出哪些重构有风险、需要测试保护。\n代码 / 模块:",
|
|
111
|
+
"categoryId": "code",
|
|
112
|
+
"emoji": "🛠️"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "dsh-explain",
|
|
116
|
+
"title": "解释代码",
|
|
117
|
+
"body": "请解释以下代码,按编号结构化输出:\n1. 这段代码做什么(一句话);\n2. 逐段讲解执行流程与关键数据结构;\n3. 指出其中「为什么这样写」的设计取舍;\n4. 指出潜在问题与改进点;\n5. 用一句话概括它在我更大的系统里扮演的角色。\n代码:",
|
|
118
|
+
"categoryId": "code",
|
|
119
|
+
"emoji": "💻"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "dsh-blindspot",
|
|
123
|
+
"title": "盲区检查",
|
|
124
|
+
"body": "在我开始以下任务之前,请帮我做一次盲区检查,按编号结构化输出:\n1. 我可能遗漏的关键变量有哪些?\n2. 潜在的风险与最容易忽略的影响因素?\n3. 哪些点需要提前决策、哪些可以后置?\n4. 给我一个 3 分钟内可完成的快速检查清单。\n我的计划(目标 / 约束):",
|
|
125
|
+
"categoryId": "productivity",
|
|
126
|
+
"emoji": "👁️"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "dsh-snapshot",
|
|
130
|
+
"title": "零丢失快照",
|
|
131
|
+
"body": "请执行一次「零丢失快照」:\n1. 把我们从会话开始至今的关键信息,按「目的地 / 约束与偏好 / 已确认的决定 / 待决问题 / 雾区(隐约可见但还不清晰)」五类逐条列出——不压缩、不合并,宁可啰嗦不可省略;\n2. 每条标注出处(引用我原话);\n3. 单独列一节「可疑遗漏」:凡是我提过但你觉得与主线无关、太模糊或像执行细节而没纳入的,全部摆出并写明理由;\n4. 列完后停下等我逐条核对,确认后再落盘。",
|
|
132
|
+
"categoryId": "productivity",
|
|
133
|
+
"emoji": "📸"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "dsh-kickoff",
|
|
137
|
+
"title": "任务启动",
|
|
138
|
+
"body": "在开始以下任务之前,请先确认起点并澄清细节,按编号结构化输出:\n1. 最终目标(要做什么);\n2. 当前进度(目前想到哪一步);\n3. 经验水平(新手 / 有经验 / 专家);\n4. 不熟悉的地方;\n5. 成功的标准;\n6. 通过提问澄清细节(成功标准之外还有哪些约束、有哪些风险现在就该知道)。\n最终目标:\n当前进度(可选):\n经验水平(新手 / 有经验 / 专家):\n不熟悉的地方(可选):",
|
|
139
|
+
"categoryId": "productivity",
|
|
140
|
+
"emoji": "🚀"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "dsh-prototype",
|
|
144
|
+
"title": "原型验证",
|
|
145
|
+
"body": "请为以下主题/想法做原型验证,每轮输出保持克制(方向概要即可,不要太长):\n1. 给出 2~4 个方向差距很大的候选方案;\n2. 每个方向给出最小的验证方式(怎么快速试错);\n3. 由我选择和反馈,几轮后逐步收敛到满意的方向;\n4. 收敛后给出下一步的执行计划要点。\n主题 / 想法:",
|
|
146
|
+
"categoryId": "productivity",
|
|
147
|
+
"emoji": "🧫"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "dsh-plan",
|
|
151
|
+
"title": "执行计划",
|
|
152
|
+
"body": "请为以下目标制定执行计划,按编号结构化输出(时间安排是可调整的草案):\n1. 明确步骤(含顺序与依赖);\n2. 时间安排(每步预计时长/里程碑);\n3. 所需资源和工具;\n4. 交付物和验收标准;\n5. 风险和应对方案。\n目标:\n约束(可选):",
|
|
153
|
+
"categoryId": "productivity",
|
|
154
|
+
"emoji": "📋"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"id": "dsh-deviation",
|
|
158
|
+
"title": "记录偏离",
|
|
159
|
+
"body": "请担任我的过程记录员(多轮持续角色):从现在起,在每次交互后更新一份简洁的偏离记录,按编号结构化:\n1. 遇到了什么新的情况?\n2. 为什么改变了方案?\n3. 做了哪些关键决定?\n4. 对结果有什么影响?\n每次只输出「新增/变更」条目,不要重复已记录内容。",
|
|
160
|
+
"categoryId": "productivity",
|
|
161
|
+
"emoji": "📝"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "dsh-retro",
|
|
165
|
+
"title": "过程复盘",
|
|
166
|
+
"body": "请帮我复盘刚刚完成的以下任务/项目,按编号结构化输出:\n1. 整体步骤回顾(实际 vs 计划的差异);\n2. 使用的资料和工具;\n3. 遇到的困难;\n4. 解决思路与可复用经验;\n5. 如果重来一次,哪些地方会做得不同?\n任务 / 项目:",
|
|
167
|
+
"categoryId": "productivity",
|
|
168
|
+
"emoji": "🔄"
|
|
169
|
+
}
|
|
170
|
+
]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Default prompt text from dsh-prompt v0.1.13
|
|
2
|
+
https://github.com/FeatherHunter/dsh-prompt
|
|
3
|
+
|
|
4
|
+
MIT License
|
|
5
|
+
|
|
6
|
+
Copyright (c) 2026 王辰浩
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in all
|
|
16
|
+
copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor"><path d="M240,56V200a8,8,0,0,1-8,8H160a24,24,0,0,0-24,23.94,7.9,7.9,0,0,1-5.12,7.55A8,8,0,0,1,120,232a24,24,0,0,0-24-24H24a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H88a32,32,0,0,1,32,32v87.73a8.17,8.17,0,0,0,7.47,8.25,8,8,0,0,0,8.53-8V80a32,32,0,0,1,32-32h64A8,8,0,0,1,240,56Z"/></svg>
|
|
@@ -14,7 +14,11 @@
|
|
|
14
14
|
"healthUrl": "http://127.0.0.1:47832/api/health",
|
|
15
15
|
"entry": {
|
|
16
16
|
"kind": "page-script",
|
|
17
|
-
"script": "src/
|
|
17
|
+
"script": "src/frontend/entry.mjs",
|
|
18
|
+
"resources": {
|
|
19
|
+
"icons": "src/frontend/icons.json",
|
|
20
|
+
"styles": "src/frontend/styles.css"
|
|
21
|
+
}
|
|
18
22
|
},
|
|
19
23
|
"placement": {
|
|
20
24
|
"order": 20
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import prompts from "../../assets/default-prompts.json" with { type: "json" };
|
|
2
|
+
|
|
3
|
+
// 单次导入后全部归用户管理,删除和编辑不会在下次启动时被还原。
|
|
4
|
+
export function seedDefaultPrompts(db, now) {
|
|
5
|
+
db.exec("BEGIN IMMEDIATE");
|
|
6
|
+
try {
|
|
7
|
+
if (!db.prepare("SELECT 1 FROM metadata WHERE key = 'default_prompts_v1'").get()) {
|
|
8
|
+
const categoryOrder = db.prepare("SELECT COALESCE(MAX(sort_order), -1) + 1 AS n FROM prompt_categories").get().n;
|
|
9
|
+
const categories = [
|
|
10
|
+
["thinking", "思考", "flask", "purple"],
|
|
11
|
+
["learning", "学习", "book", "green"],
|
|
12
|
+
["code", "编程", "terminal", "blue"],
|
|
13
|
+
["productivity", "效率", "logs", "black"],
|
|
14
|
+
];
|
|
15
|
+
categories.forEach((row, i) => db.prepare("INSERT OR IGNORE INTO prompt_categories VALUES (?, ?, ?, ?, ?)").run(...row, categoryOrder + i));
|
|
16
|
+
const order = db.prepare("SELECT COALESCE(MAX(sort_order), -1) + 1 AS n FROM prompts").get().n;
|
|
17
|
+
const insert = db.prepare(`INSERT INTO prompts
|
|
18
|
+
(id,title,body,starred,created_at,updated_at,last_used_at,category_id,emoji,sort_order)
|
|
19
|
+
VALUES (?,?,?,0,?,?,?,?,?,?)`);
|
|
20
|
+
prompts.forEach((p, i) => insert.run(p.id, p.title, p.body, now, now, 0, p.categoryId, p.emoji, order + i));
|
|
21
|
+
db.prepare("INSERT INTO metadata VALUES ('default_prompts_v1', 1)").run();
|
|
22
|
+
db.prepare("UPDATE metadata SET value = value + 1 WHERE key = 'revision'").run();
|
|
23
|
+
}
|
|
24
|
+
db.exec("COMMIT");
|
|
25
|
+
} catch (error) {
|
|
26
|
+
db.exec("ROLLBACK");
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { seedDefaultPrompts } from "./default-prompts.mjs";
|
|
1
2
|
import { migratePromptSchema } from "./prompt-schema.mjs";
|
|
2
3
|
import { randomUUID } from "node:crypto";
|
|
3
4
|
import { chmod, mkdir, open as openFile } from "node:fs/promises";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
import { DatabaseSync } from "node:sqlite";
|
|
6
|
-
import nativePromptIcons from "
|
|
7
|
+
import nativePromptIcons from "../../assets/native-prompt-icons.json" with { type: "json" };
|
|
7
8
|
const PROMPT_CATEGORY_ICONS = new Set(Object.keys(nativePromptIcons));
|
|
8
9
|
|
|
9
10
|
const PROMPT_CHANGE_FIELDS = new Set([
|
|
@@ -120,6 +121,7 @@ export class CodexNotesProduct {
|
|
|
120
121
|
);
|
|
121
122
|
try {
|
|
122
123
|
migratePromptSchema(this.db);
|
|
124
|
+
seedDefaultPrompts(this.db, this.clock());
|
|
123
125
|
} catch (error) {
|
|
124
126
|
this.close();
|
|
125
127
|
throw error;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
|
-
import nativeIcons from "
|
|
3
|
-
import nativeEmojis from "
|
|
2
|
+
import nativeIcons from "../../assets/native-prompt-icons.json" with { type: "json" };
|
|
3
|
+
import nativeEmojis from "../../assets/native-emojis.json" with { type: "json" };
|
|
4
4
|
import { ProductError } from "./product.mjs";
|
|
5
5
|
|
|
6
6
|
// 沿用已有提示词存储;不再暴露 Todo、Files 或旧版网页。
|