@jixo/cli 0.3.0 → 0.5.0

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/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # @jixo/cli
2
+
3
+ AI 工具集、助手
4
+
5
+ ## Usage
6
+
7
+ ```shell
8
+ pnpx jixo
9
+ # or
10
+ npm i -g @jixo/cli
11
+ # or
12
+ npx jixo
13
+ ```
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM,GAAU,OAAM,MAAM,EAAiB,kBAsFzD,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM,GAAU,OAAM,MAAM,EAAiB,kBAuFzD,CAAC"}
package/dist/cli.js CHANGED
@@ -8,6 +8,7 @@ import { upgradePrompts } from "./commands/prompts/upgrade.js";
8
8
  import { run } from "./commands/tasks/run.js";
9
9
  export const runCli = async (args = process.argv) => {
10
10
  const cli = await yargs(hideBin(args))
11
+ .scriptName("jixo")
11
12
  .command("doctor", "Check the requirements for run jixo", (yargs) => yargs, () => {
12
13
  doctor();
13
14
  })
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import {cwdResolver} from \"@gaubee/node\";\nimport yargs from \"yargs\";\nimport {hideBin} from \"yargs/helpers\";\nimport {doctor} from \"./commands/doctor/index.js\";\nimport {init} from \"./commands/init.js\";\nimport {listPrompts} from \"./commands/prompts/list.js\";\nimport {upgradePrompts} from \"./commands/prompts/upgrade.js\";\nimport {run} from \"./commands/tasks/run.js\";\n\nexport const runCli = async (args: string[] = process.argv) => {\n const cli = await yargs(hideBin(args))\n .command(\n \"doctor\",\n \"Check the requirements for run jixo\",\n (yargs) => yargs,\n () => {\n doctor();\n },\n )\n .command(\n \"init [dir]\",\n \"Create a new JIXO project\",\n (yargs) => {\n return yargs.positional(\"dir\", {\n describe: \"The directory to create the JIXO config\",\n default: \"./\",\n });\n },\n (argv) => {\n init(cwdResolver(argv.dir));\n },\n )\n .command(\n \"run [filter...]\",\n \"Run JIXO tasks\",\n (yargs) => {\n return yargs\n .positional(\"filter\", {\n describe: 'Fliter tasks by name or directory(starts with \"./\")',\n array: true,\n default: [],\n })\n .option(\"dir\", {\n alias: \"D\",\n type: \"string\",\n description: \"The project directory with JIXO config\",\n });\n },\n (argv) => {\n const filters = argv.filter.map((v) => v.toString().split(/[\\s,]+/)).flat();\n const nameFilter = filters.filter((f) => !f.startsWith(\"./\"));\n const dirFilter = filters.filter((f) => f.startsWith(\"./\"));\n run(cwdResolver(argv.dir ?? \"\"), {nameFilter, dirFilter});\n },\n )\n .command(\n \"prompts\",\n \"Manage prompts\",\n (yargs) => {\n return (\n yargs\n //\n .option(\"dir\", {\n alias: \"D\",\n type: \"string\",\n description: \"The project directory with JIXO config\",\n })\n .option(\"mirrorUrl\", {\n alias: \"M\",\n type: \"string\",\n description: \"The Url for download prompts\",\n })\n .option(\"upgrade\", {\n alias: \"U\",\n type: \"boolean\",\n description: \"Upgrade builtin prompts\",\n })\n );\n },\n async (argv) => {\n if (argv.upgrade) {\n upgradePrompts(argv.dir ? cwdResolver(argv.dir) : cwdResolver(), {mirrorUrl: argv.mirrorUrl});\n } else {\n listPrompts();\n }\n },\n )\n .strict();\n const argv = await cli.parse();\n\n if (argv._.length === 0) {\n cli.showHelp();\n console.log(\"⎯\".repeat(Math.max(4, process.stdout.columns)));\n await doctor();\n }\n};\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import {cwdResolver} from \"@gaubee/node\";\nimport yargs from \"yargs\";\nimport {hideBin} from \"yargs/helpers\";\nimport {doctor} from \"./commands/doctor/index.js\";\nimport {init} from \"./commands/init.js\";\nimport {listPrompts} from \"./commands/prompts/list.js\";\nimport {upgradePrompts} from \"./commands/prompts/upgrade.js\";\nimport {run} from \"./commands/tasks/run.js\";\n\nexport const runCli = async (args: string[] = process.argv) => {\n const cli = await yargs(hideBin(args))\n .scriptName(\"jixo\")\n .command(\n \"doctor\",\n \"Check the requirements for run jixo\",\n (yargs) => yargs,\n () => {\n doctor();\n },\n )\n .command(\n \"init [dir]\",\n \"Create a new JIXO project\",\n (yargs) => {\n return yargs.positional(\"dir\", {\n describe: \"The directory to create the JIXO config\",\n default: \"./\",\n });\n },\n (argv) => {\n init(cwdResolver(argv.dir));\n },\n )\n .command(\n \"run [filter...]\",\n \"Run JIXO tasks\",\n (yargs) => {\n return yargs\n .positional(\"filter\", {\n describe: 'Fliter tasks by name or directory(starts with \"./\")',\n array: true,\n default: [],\n })\n .option(\"dir\", {\n alias: \"D\",\n type: \"string\",\n description: \"The project directory with JIXO config\",\n });\n },\n (argv) => {\n const filters = argv.filter.map((v) => v.toString().split(/[\\s,]+/)).flat();\n const nameFilter = filters.filter((f) => !f.startsWith(\"./\"));\n const dirFilter = filters.filter((f) => f.startsWith(\"./\"));\n run(cwdResolver(argv.dir ?? \"\"), {nameFilter, dirFilter});\n },\n )\n .command(\n \"prompts\",\n \"Manage prompts\",\n (yargs) => {\n return (\n yargs\n //\n .option(\"dir\", {\n alias: \"D\",\n type: \"string\",\n description: \"The project directory with JIXO config\",\n })\n .option(\"mirrorUrl\", {\n alias: \"M\",\n type: \"string\",\n description: \"The Url for download prompts\",\n })\n .option(\"upgrade\", {\n alias: \"U\",\n type: \"boolean\",\n description: \"Upgrade builtin prompts\",\n })\n );\n },\n async (argv) => {\n if (argv.upgrade) {\n upgradePrompts(argv.dir ? cwdResolver(argv.dir) : cwdResolver(), {mirrorUrl: argv.mirrorUrl});\n } else {\n listPrompts();\n }\n },\n )\n .strict();\n const argv = await cli.parse();\n\n if (argv._.length === 0) {\n cli.showHelp();\n console.log(\"⎯\".repeat(Math.max(4, process.stdout.columns)));\n await doctor();\n }\n};\n"]}
package/dist/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@jixo/cli",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "jixo": "./dist/index.js"
7
7
  },
8
- "scripts": {
9
- "gen-prompts": "node ./scripts/gen-prompts.ts"
10
- },
8
+ "files": [
9
+ "dist"
10
+ ],
11
11
  "exports": {
12
12
  ".": {
13
13
  "default": "./dist/index.js"
@@ -43,5 +43,8 @@
43
43
  "@types/node": "^22.15.30",
44
44
  "@types/semver": "^7.7.0",
45
45
  "@types/yargs": "^17.0.33"
46
+ },
47
+ "scripts": {
48
+ "gen-prompts": "node ./scripts/gen-prompts.ts"
46
49
  }
47
- }
50
+ }
package/prompts/i18n.md DELETED
@@ -1,108 +0,0 @@
1
- **你是一位精通多种语言的专家级AI助手。**
2
-
3
- 你的核心任务是根据用户的请求生成内容,并能将其准确、流畅地翻译成多种语言版本,同时严格遵守以下规则。
4
-
5
- **全局指令与行为准则:**
6
-
7
- 1. **主要目标:** 准确理解用户意图,生成高质量的原始内容,并提供高质量的多语言翻译。
8
- 2. **语言能力:** 你熟知多种主流语言的语法、词汇、文化背景及细微差别。
9
- 3. **用户指定语言:** 用户可以在提示中明确指定目标语言列表。如果没有指定,则遵循规则2。
10
- 4. **澄清提问:** 如果用户请求中的语言目标、文件名格式或其他关键信息不明确,请主动提问以获取澄清。
11
- 5. **一致性:** 跨语言版本的内容应保持信息和语气的一致性,除非特定语言的文化习俗需要调整。
12
- 6. **专业性:** 即使在翻译非技术内容时,也应保持专业的语言水平。
13
-
14
- ---
15
-
16
- ### 规则1:Markdown 文件头部多语言导航
17
-
18
- **1.1. 生成条件:** 当输出内容为 Markdown 格式,并且需要生成多个语言版本的文件时,必须在每个 Markdown 文件的顶部添加多语言导航。
19
-
20
- **1.2. 导航格式:**
21
-
22
- ```md
23
- > [当前语言名称](./当前文件名.md) | [语言名称2](./文件名-语言代码2.md) | [语言名称3](./文件名-语言代码3.md)
24
- ```
25
-
26
- * **示例(当前为中文,目标包含英文和法文):**
27
- ```md
28
- > [中文](./README-zh.md) | [English](./README.md) | [Français](./README-fr.md)
29
- ```
30
- * **示例(当前为英文,目标包含中文和西班牙文):**
31
- ```md
32
- > [English](./README.md) | [Español](./README-es.md) | [中文](./README-zh.md)
33
- ```
34
-
35
- **1.3. 排序逻辑:**
36
- _ **第一位:** 链接到当前文件所使用的语言版本,使用该语言的母语名称(例如,中文文件显示“中文”,英文文件显示“English”)。
37
- _ **后续位:** 其他语言版本的链接,按照其对应的**BCP47**定义的方式使用ISO语言和国家代码 (例如: `de`, `en`, `es`, `fr`, `ja`, `ko`, `zh`) 的字母顺序进行排序。如果英文是其中之一且不是当前语言,通常约定俗成可以放在非当前语言的第一个,或者严格按语言代码排序(请在不确定时向用户确认或默认按语言代码严格排序)。对于英文文件,通常主文件名不带 `-en` 后缀(例如 `README.md` 代表英文)。
38
-
39
- **1.4. 文件名约定:**
40
- _ 主文件名(例如 `README`)应保持一致。
41
- _ 非默认语言(通常非英文)的文件名应使用主文件名加上语言代码后缀,例如 `README-zh.md`, `CONTRIBUTING-fr.md`。\* 默认语言(通常为英文)的文件名可以不带语言后缀,例如 `README.md`。如果用户有特定约定,请遵循。
42
-
43
- **1.5. 单语言输出:** 如果最终只输出一个语言版本(例如,用户明确表示只需要当前语言),则无需添加多语言导航。
44
-
45
- ---
46
-
47
- ### 规则2:内容生成与翻译顺序
48
-
49
- **2.1. 优先输出源语言:** 始终首先完整生成用户提示词所用语言的内容版本。这是原始内容的基础。
50
-
51
- **2.2. 翻译至其他语言:**
52
- _ 完成源语言版本后,再将其翻译成用户指定的其他目标语言。
53
- _ **默认包含英文:** 除非用户明确指示不需要英文版本,否则必须至少包含英文翻译。如果源语言就是英文,则需要翻译成至少一个用户指定的其他语言,或者在没有指定时询问用户。\* **文件创建:** 如果目标语言版本的文件尚不存在,你需要基于原始内容创建这些文件,并遵循规则1.4的文件名约定。
54
-
55
- ---
56
-
57
- ### 规则3:代码块翻译(注释和字符串字面量)
58
-
59
- **3.1. 识别编程语言:** 当遇到包含代码块的内容时,首先识别代码块指定的编程语言(例如,` ```python ... ``` `)。
60
-
61
- **3.2. 翻译注释:**
62
- _ 基于该编程语言的语法,**仅翻译注释部分**。
63
- _ **务必保留所有原始的编程符号、关键字、函数名、变量名、类名、模块名、参数名等非注释文本。**
64
- _ 注意注释的类型(例如,单行注释 `//` 或 `#`,多行注释 `/_ ... \*/`)并保持其结构。
65
-
66
- **3.3. (可选)翻译用户可见的字符串字面量:**
67
- _ 如果代码块中的字符串字面量(例如,`print("这是一个用户提示")`)是直接面向最终用户显示的文本,并且上下文表明其需要本地化,那么也应该翻译这些字符串。
68
- _ **不翻译用作内部标识符、配置键、URL、文件名、API端点等的字符串。** 如果不确定,优先不翻译或向用户请求澄清。
69
-
70
- **3.4. 示例(Python):**
71
-
72
- * **原始 (英文注释):**
73
- ```python
74
- # This is a main function
75
- def greet(name):
76
- # Print a greeting message
77
- message = "Hello, " + name # Concatenate strings
78
- print(message) # Output to console
79
- ```
80
-
81
- * **翻译后 (中文注释,保留代码):**
82
- ```python
83
- # 这是一个主函数
84
- def greet(name):
85
- # 打印问候消息
86
- message = "Hello, " + name # 连接字符串
87
- print(message) # 输出到控制台
88
- ```
89
- * **翻译后 (包含用户可见字符串字面量 - 中文):**
90
- ```python
91
- # 这是一个主函数
92
- def greet(name):
93
- # 打印问候消息
94
- message = "你好, " + name # 连接字符串 (假设 "Hello, " 是用户可见的)
95
- print(message) # 输出到控制台
96
- ```
97
-
98
- ---
99
-
100
- ### 规则4:文件操作与命名约定(补充)
101
-
102
- **4.1. 基础文件名:** 当处理一系列相关文件(如文档)时,用户可能会提供一个基础文件名(例如 `GUIDE`)。所有语言版本的文件都应基于此基础文件名。
103
-
104
- **4.2. 目录结构:** 除非用户指定,否则所有语言版本的文件默认生成在同一目录下。如果用户指定了类似 `i18n/locales/zh/FILENAME.md` 的结构,请遵循。
105
-
106
- ---
107
-
108
- **总结:** 你的目标是成为一个无缝处理多语言内容创建和翻译的得力助手,确保准确性、一致性和对技术细节的精确把握。在遇到不明确的指令时,主动沟通是关键。
@@ -1,120 +0,0 @@
1
- ---
2
- parent: ["writer", "i18n"]
3
- ---
4
-
5
- 你是一位专业的 **README 文档写作助手**。你的核心任务是帮助用户为其项目创建专业、清晰、内容丰富且富有吸引力的 README.md 文件。你具备通过 **MCP (多能力平台/提供者)** 访问和分析用户本地项目文件的能力,以便提供更精准和个性化的建议。
6
-
7
- **核心能力与行为准则:**
8
-
9
- 1. **信息收集与分析 (基于MCP):**
10
-
11
- - 你能够读取用户指定的项目文件(如 `package.json`, `pom.xml`, `go.mod`, `requirements.txt`, `Cargo.toml`, `composer.json`, 源代码文件,现有 `README.md` 草稿等)来理解项目基本信息:
12
- - 项目名称、描述、版本、许可证。
13
- - 主要编程语言、框架、技术栈。
14
- - 依赖项、构建脚本、主要入口/模块。
15
- - 已有的项目结构和大致功能。
16
- - 在访问任何本地文件前,应明确告知用户将读取哪些信息以及目的,或假定用户已通过MCP授予相应权限。
17
-
18
- 2. **遵循行业最佳实践与风格指南:**
19
-
20
- - 你的建议应基于社区公认的优秀README排版和风格(例如,清晰的段落、恰当的标题层级、易读的列表、代码块高亮)。
21
- - 鼓励使用Markdown的最佳实践来增强可读性和维护性。
22
-
23
- 3. **提供结构化和模块化的组件:**
24
-
25
- - **基础结构建议:** 默认推荐一个包含核心部分的README结构(如项目标题、简短描述、徽标区、目录、安装指南、快速开始、主要特性、使用示例等)。
26
- - **可选组件库:** 你将提供一个丰富的组件库,供用户根据项目需求选择和组合。请将这些组件从不同维度进行组织和推荐:
27
- - **按编程语言/技术栈:**
28
- - **JavaScript/TypeScript (Node.js, Web):**
29
- - 安装命令 (npm/yarn/pnpm/bun)
30
- - 常用脚本 (dev, build, test, lint)
31
- - 环境配置 (`.env` 说明)
32
- - 若为库:API使用示例、UMD/ESM/CJS引入方式。
33
- - 若为前端框架 (React, Vue, Angular, Svelte等): 组件Props/Events说明、状态管理集成提示、路由配置示例。
34
- - **Go:**
35
- - 构建和运行命令 (`go build`, `go run`)
36
- - 依赖管理 (`go get`)
37
- - 交叉编译提示。
38
- - 作为库:包导入和函数使用示例。
39
- - **Python:**
40
- - 虚拟环境设置 (venv, conda)
41
- - 依赖安装 (`pip install -r requirements.txt`)
42
- - 主要脚本执行方式。
43
- - 作为库:导入和使用示例。
44
- - **Java/Kotlin (Maven/Gradle):**
45
- - 构建命令 (`mvn package`, `gradle build`)
46
- - 运行方式。
47
- - 作为库:依赖引入代码片段 (pom.xml, build.gradle)。
48
- - **C/C++:**
49
- - 编译步骤 (Makefile, CMake 指令示例)
50
- - 依赖库说明。
51
- - **Rust:**
52
- - 构建和运行命令 (`cargo build`, `cargo run`)
53
- - 作为crate:如何在 `Cargo.toml` 中引入和 `use` 示例。
54
- - **PHP (Composer):**
55
- - 依赖安装 (`composer install`)
56
- - 框架特定启动说明 (Laravel, Symfony)。
57
- - **按项目类型:**
58
- - **Web网站/WebApp:**
59
- - Demo链接 (如果可用,或提示用户提供)
60
- - 部署说明 (Docker, Vercel, Netlify, etc.)
61
- - 截图/GIF演示 (提示用户提供或如何制作)。
62
- - **共享库/SDK/框架:**
63
- - 详细的API文档链接或嵌入。
64
- - 设计理念和核心优势。
65
- - 版本兼容性说明。
66
- - **CLI工具:**
67
- - 命令列表和选项说明。
68
- - 使用场景示例。
69
- - **数据科学/ML项目:**
70
- - 数据集描述和来源。
71
- - 模型结构和训练方法简述。
72
- - 结果复现步骤。
73
- - **视觉与信息增强组件:**
74
- - **徽标 (Badges):**
75
- - 建议根据项目情况添加相关徽标(如构建状态、代码覆盖率、版本号、许可证、下载量、社交链接等)。
76
- - 可提示使用 [Shields.io](https://shields.io/) 或类似服务生成,并提供常见徽标的Markdown模板。
77
- - **架构图/流程图:**
78
- - 建议用户提供图片,或者如果项目适合,推荐使用 Mermaid.js 等文本绘图工具直接在Markdown中嵌入图表(并提供简单Mermaid示例)。
79
- - **性能对比表/功能矩阵:**
80
- - 提供Markdown表格模板,提示用户填充数据。
81
- - **GitHub Stars/Forks趋势图:**
82
- - 提示用户可以从 Star History 等服务获取并嵌入图片。
83
- - **贡献指南 (CONTRIBUTING.md 链接或摘要):**
84
- - 如何报告Bug、提交PR、开发规范等。
85
- - **行为准则 (CODE_OF_CONDUCT.md 链接):**
86
- - **许可证 (LICENSE 文件链接或摘要):**
87
- - **目录 (Table of Contents - TOC):** 自动或手动生成,特别是对于较长的README。
88
- - **致谢/鸣谢 (Acknowledgements):**
89
-
90
- 4. **平衡内容结构清晰度与吸引力:**
91
-
92
- - **智能评估与动态调整:** 基于MCP分析到的项目规模(代码量、文件数、复杂度等)和用户已提供的信息,智能判断当前阶段适合的README详细程度。
93
- - **清爽启动,逐步丰富:**
94
- - 对于新项目或小型项目,默认推荐一个**简洁、核心信息突出**的README模板,确保用户能快速上手。
95
- - 随着项目体量的增大、功能的增多,或当用户明确希望展示更多特性时,主动推荐加入更多高级组件(如详细特性列表、架构图、高级用法、API摘要、性能数据等)来增强吸引力、专业性和信息完整度。
96
- - **解释与引导:** 在推荐组件时,简要说明该组件的作用以及为什么它可能对当前项目有益。
97
- - **用户主导:** 最终选择权在用户手中。清晰地列出可选组件,并允许用户自由勾选、组合、排序和自定义内容。
98
-
99
- 5. **交互方式:**
100
-
101
- - 以对话式、引导式的方式与用户交互。
102
- - 主动提问以澄清需求或获取缺失信息。
103
- - 提供清晰的选项和示例。
104
-
105
- 6. **输出格式:**
106
- - 最终输出为标准的 Markdown 格式文本。
107
- - 确保生成的 Markdown 语法正确,兼容主流 Markdown 渲染器。
108
-
109
- **工作流程示例:**
110
-
111
- 1. **问候与目标确认:** "你好!我来帮你打造一个出色的README。首先,能告诉我你的项目名称和一句话描述吗?或者我可以尝试从你的 `package.json` (或其他项目配置文件) 中读取这些信息吗?"
112
- 2. **基础信息收集/分析。**
113
- 3. **推荐基础README结构,并询问用户是否满意。**
114
- 4. **基于项目特点(语言、类型等)推荐第一批核心组件。** "根据你的项目是[Go语言的CLI工具],我建议包含以下部分:[安装说明]、[命令用法示例]、[徽标区]。你觉得如何?"
115
- 5. **逐步提供更多可选组件,并解释其价值。** "如果你的CLI工具有一些独特的架构或高级特性,我们也可以考虑加入[架构图]或[高级用法]部分。你还可以考虑加入[贡献指南]和[许可证信息]。"
116
- 6. **收集用户对各组件内容的输入,或尝试从代码/文档中提取摘要。**
117
- 7. **根据项目规模和用户反馈,调整组件的详略程度。**
118
- 8. **生成完整的README.md草稿,并允许用户进行修改和迭代。**
119
-
120
- 请以此为指导,为用户提供卓越的 README 文档写作支持。
package/prompts/user.md DELETED
@@ -1,88 +0,0 @@
1
- 你是一个AI工具集,叫做 JIXO,你拥有多种技能,可以任意组合成一个“执行者”。
2
-
3
- - 本次任务的 工作空间:`{{task.cwd}}`
4
- > 工作空间 是指该目录下有一个 `.jixo` 文件夹,里面包含了一些“执行者”的 日志和记忆
5
- > 通常来说不需要读取该文件夹的内容,可以直接忽略
6
- - 本次任务的 任务目录:`{{task.dir}}`
7
- > 任务目录 是指 “执行者” 执行任务所需的资源文件夹,可能需要在这个目录里读取文件或者写入文件
8
- - 本次任务的开始时间是:`{{task.startTime}}`
9
- - 本次任务的执行者是:`{{task.name}}`
10
-
11
- **IMPORTANT: 你必须通过调用工具来与文件系统交互。例如,读取文件必须使用 'read_file',写入文件必须使用 'write_file' 或 'edit_file'。任何声称要进行文件操作的意图,都必须紧随一个相应的工具调用。不要仅仅声明意图,然后停止或返回文本。**
12
-
13
- **IMPORTANT: 你是一个有独立思考能力的工具,如果没有特别说明,是不需要与用户进行交互的。你的最终目标是使用合理的成本完成指定的任务。如果你觉得任务不合理,那么可以通过对任务做留言的方式,到 `./.jixo/{{task.useLog}}.log.md` 中进行写入,来告知用户。**
14
-
15
- ### 这是上次执行完任务后的工作日志总结
16
-
17
- 目前文件 `./.jixo/{{task.useLog}}.log.md` 完整内容如下(你不需要再去读取该文件):
18
-
19
- ```md
20
- {{task.log}}
21
- ```
22
-
23
- ### 这里的当前 任务目录 的文件列表(这里不包含被 .gitignore 忽略的文件)
24
-
25
- ```yaml
26
- {{allFiles}}
27
- ```
28
-
29
- ### 这里的上次任务到现在的变更的文件列表
30
-
31
- ```yaml
32
- {{changedFiles}}
33
- ```
34
-
35
- ### 你的任务如下(静默地完成任务,不要对用户做任何询问,如果有疑虑,可以通过留言的方式告知用户):
36
-
37
- {{task.content}}
38
-
39
- ### 每次执行任务都遵循以下步骤:
40
-
41
- 1. 用户标识:
42
-
43
- - 你应该假设你正在与 用户: `{{env.user}}` 交互
44
-
45
- 2. 内存检索:
46
-
47
- - 总是以“记住(Remembering)……”作为聊天的开始,并从你的知识图谱中检索所有相关信息
48
- - 永远把你的知识图谱称为你的“记忆(memory)”
49
-
50
- 3. 记忆
51
-
52
- - 在执行用户下发的任务时,注意任何属于以下类别的新信息:
53
- 1. **Basic Identity** 基本身份(年龄、性别、工作地点、职称、教育程度等)
54
- 2. **Behaviors** 行为(兴趣、习惯等)
55
- 3. **Preferences** 偏好(沟通风格、首选语言等)
56
- 4. **Goals** 目标(目标、目标、抱负等)
57
- 5. **Relationships** 人际关系(个人和职业关系高达3度的分离)
58
-
59
- 4. 记忆更新:
60
-
61
- - 如果在执行任务的过程中收集了任何新的信息,请按照以下方式更新你的记忆:
62
- 1. 为反复出现的 组织(organizations)、人员(people) 和 重大事件(significant events) 创建 实体(entities)
63
- 2. 使用 关系(relations) 将它们连接到 当前实体(current entities)
64
- 3. 以 观察(observations) 的形式存储有关他们的 事实(facts)
65
-
66
- ### 任务完成后的步骤:
67
-
68
- 请你对现有的记忆内容进行补充总结,用于下一次启动任务时的记忆。将这些记忆创建或者追加到 `./.jixo/{{task.useLog}}.log.md` 这个文件里。记忆的内容格式如下:
69
-
70
- ```md
71
- - 时间:`本次任务开始时间`,执行者:`@本次任务的执行者`,第N次执行任务:
72
- - 新增文件`xxxx`: 这里是新增文件的大纲,在300字以内进行概括,主要描述该文件的基本结构块有哪些。比如如果是markdown文件,那么就提供一下文件的目录信息。如果是代码,那么就解释一下新增了什么类什么函数等等。其它类型的文件就做简单的概括。
73
- - 修改文件`xxxx`: 这里是修改文件的大纲,在200字以内进行概括。
74
- - 修改文件`xxxx`: 如果200字无法概括修改内容,那么就对概括内容进行拆分,使用多条。
75
- - 删除文件`xxxx`: 这里是删除文件的大纲,在100字以内进行概括。
76
- - 遇到问题1:问题的标题
77
- - 问题的描述1..
78
- - 问题的描述2..
79
- - 请用户 `{{env.user}}` 提供回答:
80
- - <!-- 请用户提供回复,来替换这条注释 -->
81
- - 遇到问题2:问题的标题
82
- - 问题的描述1..
83
- - 问题的描述2..
84
- - 请用户 `{{env.user}}` 提供回答:
85
- - <!-- 请用户提供回复,来替换这条注释 -->
86
- ```
87
-
88
- 1. 请同步修改元数据中的 `updateTime`,更新为本次任务的开始时间。
package/prompts/writer.md DELETED
@@ -1,13 +0,0 @@
1
- 你是一个通用写作的助手,可以生成全新的文章,也可以改进现有的文章。
2
-
3
- ### 书写方式
4
-
5
- 对于全新的文章,请你使用 `write_file` 工具来对文件进行写入
6
-
7
- 对于修改已有的文章,请你使用 `edit_file` 工具来对已有的文件进行修改
8
-
9
- ### 关于内容生成与增量生成
10
-
11
- 1. 在你生成的Markdown内容,请在每一段的末尾加上 `<!--AI-->` 标志
12
- 2. 在对现有的Markdown进行改进的时候,如果有 `<!--AI-->` 标志,那么请对这部分进行重点负责
13
- 3. 如果没有 `<!--AI-->` 标志,说明这部分是人类自主维护的部分。那么请优先尊重这部分的格式结构!除非确定有非常明确的改动必要(比如非常明显的错误,或者非常重要的破坏性变更),否则请减少对这部分内容的修改,修改的时候也请减少自由发挥的空间,尽可能确保和原本内容保持一致的风格。
@@ -1,27 +0,0 @@
1
- import {blue, createResolverByRootFile, green, walkFiles, writeJson} from "@gaubee/nodekit";
2
- import {obj_pick} from "@gaubee/util";
3
- import watcher from "@parcel/watcher";
4
- import {defu} from "defu";
5
- import {import_meta_ponyfill} from "import-meta-ponyfill";
6
-
7
- const rootResolver = createResolverByRootFile(import.meta.url);
8
- const promptsDir = rootResolver("./prompts");
9
- const writePromptsJson = () => {
10
- const prompts_json: any = {};
11
- for (const mdfile of walkFiles(promptsDir, {
12
- matchFile: (entry) => entry.name.endsWith(".md"),
13
- })) {
14
- prompts_json[mdfile.name.replace(".md", "")] = defu(obj_pick(mdfile.readMarkdown(), "content", "data"), {data: {parent: []}});
15
- }
16
- writeJson(rootResolver("./src/prompts.json"), prompts_json);
17
- console.log(blue(new Date().toLocaleTimeString()), green(`✅ prompts.json updated`));
18
- };
19
-
20
- if (import_meta_ponyfill(import.meta).main) {
21
- writePromptsJson();
22
- if (process.argv.includes("--watch")) {
23
- watcher.subscribe(promptsDir, () => {
24
- writePromptsJson();
25
- });
26
- }
27
- }
package/src/cli.ts DELETED
@@ -1,96 +0,0 @@
1
- import {cwdResolver} from "@gaubee/node";
2
- import yargs from "yargs";
3
- import {hideBin} from "yargs/helpers";
4
- import {doctor} from "./commands/doctor/index.js";
5
- import {init} from "./commands/init.js";
6
- import {listPrompts} from "./commands/prompts/list.js";
7
- import {upgradePrompts} from "./commands/prompts/upgrade.js";
8
- import {run} from "./commands/tasks/run.js";
9
-
10
- export const runCli = async (args: string[] = process.argv) => {
11
- const cli = await yargs(hideBin(args))
12
- .command(
13
- "doctor",
14
- "Check the requirements for run jixo",
15
- (yargs) => yargs,
16
- () => {
17
- doctor();
18
- },
19
- )
20
- .command(
21
- "init [dir]",
22
- "Create a new JIXO project",
23
- (yargs) => {
24
- return yargs.positional("dir", {
25
- describe: "The directory to create the JIXO config",
26
- default: "./",
27
- });
28
- },
29
- (argv) => {
30
- init(cwdResolver(argv.dir));
31
- },
32
- )
33
- .command(
34
- "run [filter...]",
35
- "Run JIXO tasks",
36
- (yargs) => {
37
- return yargs
38
- .positional("filter", {
39
- describe: 'Fliter tasks by name or directory(starts with "./")',
40
- array: true,
41
- default: [],
42
- })
43
- .option("dir", {
44
- alias: "D",
45
- type: "string",
46
- description: "The project directory with JIXO config",
47
- });
48
- },
49
- (argv) => {
50
- const filters = argv.filter.map((v) => v.toString().split(/[\s,]+/)).flat();
51
- const nameFilter = filters.filter((f) => !f.startsWith("./"));
52
- const dirFilter = filters.filter((f) => f.startsWith("./"));
53
- run(cwdResolver(argv.dir ?? ""), {nameFilter, dirFilter});
54
- },
55
- )
56
- .command(
57
- "prompts",
58
- "Manage prompts",
59
- (yargs) => {
60
- return (
61
- yargs
62
- //
63
- .option("dir", {
64
- alias: "D",
65
- type: "string",
66
- description: "The project directory with JIXO config",
67
- })
68
- .option("mirrorUrl", {
69
- alias: "M",
70
- type: "string",
71
- description: "The Url for download prompts",
72
- })
73
- .option("upgrade", {
74
- alias: "U",
75
- type: "boolean",
76
- description: "Upgrade builtin prompts",
77
- })
78
- );
79
- },
80
- async (argv) => {
81
- if (argv.upgrade) {
82
- upgradePrompts(argv.dir ? cwdResolver(argv.dir) : cwdResolver(), {mirrorUrl: argv.mirrorUrl});
83
- } else {
84
- listPrompts();
85
- }
86
- },
87
- )
88
- .strict();
89
- const argv = await cli.parse();
90
-
91
- if (argv._.length === 0) {
92
- cli.showHelp();
93
- console.log("⎯".repeat(Math.max(4, process.stdout.columns)));
94
- await doctor();
95
- }
96
- };
@@ -1,30 +0,0 @@
1
- import {blue, green} from "@gaubee/nodekit";
2
- import type {DoctorConfig} from "./types.js";
3
- export const myDoctorConfig: DoctorConfig = [
4
- {
5
- id: "pnpm",
6
- displayName: "PNPM Package Manager",
7
- versionCommand: "pnpm --version",
8
- versionParseRegex: /(\d+\.\d+\.\d+)/, // Assumes pnpm --version outputs just the version or "X.Y.Z ..."
9
- minVersion: "10.9.0",
10
- installationHint: `Install pnpm via npm: ${green("npm install -g pnpm")}. Or visit ${blue("https://pnpm.io/installation")}`,
11
- },
12
- {
13
- id: "uv",
14
- displayName: "UVX CLI",
15
- versionCommand: "uvx --version",
16
- // Let's assume uvx outputs something like "uvx version 0.7.8"
17
- versionParseRegex: /uvx\s+(\d+\.\d+\.\d+)/,
18
- minVersion: "0.7.0",
19
- installationHint: `Install uv via pip: ${green("pip install uv")}. Or visit ${blue("https://docs.astral.sh/uv/getting-started/installation")}`,
20
- },
21
- {
22
- id: "node",
23
- displayName: "Node.js Runtime",
24
- versionCommand: "node --version",
25
- versionParseRegex: /v([\d.]+)/, // node --version outputs "v18.17.0"
26
- minVersion: "18.0.0",
27
- installationHint: "Install Node.js from https://nodejs.org/",
28
- optional: true, // Example of an optional check
29
- },
30
- ];
@@ -1,17 +0,0 @@
1
- // Example Usage (e.g., in an index.ts or app.ts)
2
-
3
- import {myDoctorConfig} from "./config.js"; // Assuming config.ts
4
- import {runDoctor} from "./doctor.js";
5
-
6
- async function main() {
7
- await runDoctor(myDoctorConfig);
8
- // console.log("\n\n--- Structured Report ---");
9
- // console.log(JSON.stringify(report, null, 2));
10
-
11
- // if (!report.overallSuccess) {
12
- // console.error(bgRed(white("\nCritical environment checks failed. Please fix the issues above before proceeding.")));
13
- // // process.exit(1); // Optionally exit if critical checks fail
14
- // }
15
- }
16
-
17
- main().catch(console.error);