@qingflow-tech/qingflow-cli 1.1.58 → 1.1.60

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.
Files changed (43) hide show
  1. package/README.md +4 -4
  2. package/npm/lib/runtime.mjs +29 -13
  3. package/package.json +1 -1
  4. package/pyproject.toml +1 -1
  5. package/skills/qingflow-cli/SKILL.md +92 -430
  6. package/skills/qingflow-cli/manifest.yaml +1 -1
  7. package/skills/qingflow-cli/reference/00-INDEX.md +4 -4
  8. package/skills/qingflow-cli/reference/QINGFLOW_CLI_ADMIN_CHEATSHEET.md +1 -1
  9. package/skills/qingflow-cli/reference/QINGFLOW_CLI_DATA_RETRIEVAL_WORKFLOW.md +3 -137
  10. package/skills/qingflow-cli/reference/QINGFLOW_CLI_EXPLORATION_REPORT.md +6 -4
  11. package/skills/qingflow-cli/reference/QINGFLOW_CLI_FIELD_DATA_TYPES.md +14 -14
  12. package/skills/qingflow-cli/reference/QINGFLOW_CLI_MEMBER_CHEATSHEET.md +20 -19
  13. package/skills/qingflow-cli/reference/QINGFLOW_CLI_ONE_SHOT_CHEATSHEET.md +18 -14
  14. package/skills/qingflow-cli/reference/QINGFLOW_CLI_RECORD_CREATE_WORKFLOW.md +7 -12
  15. package/skills/qingflow-cli/reference/QINGFLOW_CLI_RECORD_UPDATE_WORKFLOW.md +2 -1
  16. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_ADMIN_CHEATSHEET.md +1 -1
  17. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_DATA_RETRIEVAL_WORKFLOW.md +76 -95
  18. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_EXPLORATION_REPORT.md +6 -4
  19. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_FIELD_DATA_TYPES.md +13 -13
  20. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_MEMBER_CHEATSHEET.md +20 -19
  21. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_ONE_SHOT_CHEATSHEET.md +18 -14
  22. package/skills/qingflow-cli/reference/data/README.md +32 -0
  23. package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_SPECIALIZED_WORKFLOW.md +50 -0
  24. package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_UPDATE_WORKFLOW.md +2 -1
  25. package/skills/qingflow-cli/reference/record/analysis/README.md +21 -113
  26. package/skills/qingflow-cli/reference/record/analysis/analysis-gotchas.md +10 -10
  27. package/skills/qingflow-cli/reference/record/analysis/analysis-patterns.md +9 -9
  28. package/skills/qingflow-cli/reference/record/analysis/business-context.md +1 -1
  29. package/skills/qingflow-cli/reference/record/analysis/confidence-reporting.md +10 -10
  30. package/skills/qingflow-cli/reference/record/analysis/data-access-playbook.md +52 -80
  31. package/skills/qingflow-cli/reference/record/analysis/pandas-recipes.md +2 -2
  32. package/skills/qingflow-common/SKILL.md +7 -4
  33. package/src/qingflow_mcp/cli/commands/__init__.py +2 -1
  34. package/src/qingflow_mcp/cli/commands/data.py +134 -0
  35. package/src/qingflow_mcp/cli/commands/record.py +1 -1
  36. package/src/qingflow_mcp/cli/context.py +3 -0
  37. package/src/qingflow_mcp/cli/formatters.py +97 -1
  38. package/src/qingflow_mcp/public_surface.py +5 -0
  39. package/src/qingflow_mcp/server.py +2 -0
  40. package/src/qingflow_mcp/server_app_user.py +4 -0
  41. package/src/qingflow_mcp/tools/csv_export.py +168 -0
  42. package/src/qingflow_mcp/tools/data_tools.py +284 -0
  43. package/src/qingflow_mcp/tools/record_tools.py +11 -46
package/README.md CHANGED
@@ -7,7 +7,7 @@ Qingflow CLI 是轻流面向开发者和 AI Agent 的命令行工具。它把轻
7
7
  ## 安装
8
8
 
9
9
  ```bash
10
- npm install @qingflow-tech/qingflow-cli@1.1.58
10
+ npm install @qingflow-tech/qingflow-cli@1.1.60
11
11
  ```
12
12
 
13
13
  推荐从官网复制这一条一键安装 Qingflow CLI:
@@ -21,7 +21,7 @@ npx qingflow-cli@latest install
21
21
  ## 运行
22
22
 
23
23
  ```bash
24
- npx -y -p @qingflow-tech/qingflow-cli@1.1.58 qingflow
24
+ npx -y -p @qingflow-tech/qingflow-cli@1.1.60 qingflow
25
25
  ```
26
26
 
27
27
  全局安装后可以直接运行:
@@ -46,7 +46,7 @@ qingflow
46
46
 
47
47
  ## Skill 分层
48
48
 
49
- 该包通过 `qingflow-common` 提供公共概念和路由,并由 `qingflow-cli` 提供命令、JSON 文件和 CLI 专属静态校验说明。
49
+ 该包通过 `qingflow-common` 提供公共概念和路由,并由聚合 `qingflow-cli` 提供命令、JSON 文件、data 操作和 CLI 专属静态校验说明。
50
50
 
51
51
  CLI 和 MCP 可以覆盖同一业务流程,但它们只是在调用方式上不同:公共 Skill 定义业务对象、声明契约和路由;领域 Skill 只描述当前包可执行的命令或 MCP 工具。统一 MCP 中的记录操作和系统搭建是任务路由,不是独立 MCP 服务。不要假定安装一个包就能调用另一个包的入口。
52
52
 
@@ -62,7 +62,7 @@ qingflow-skills install --agent codex --scope user
62
62
  如果你通过一次性 `npx -p` 执行 skills 安装,建议加 `--copy`,避免 symlink 指向 npm 临时执行缓存:
63
63
 
64
64
  ```bash
65
- npx -y -p @qingflow-tech/qingflow-cli@1.1.58 qingflow-skills install --agent codex --scope user --copy
65
+ npx -y -p @qingflow-tech/qingflow-cli@1.1.60 qingflow-skills install --agent codex --scope user --copy
66
66
  ```
67
67
 
68
68
  `qingflow-skills install` 默认使用 symlink,且遇到同名 skill 不会覆盖;只有显式传入 `--force` 才会替换。
@@ -569,6 +569,34 @@ function findOfflineProjectWheel(findLinksDir) {
569
569
  return path.join(findLinksDir, wheels[wheels.length - 1]);
570
570
  }
571
571
 
572
+ function hasEnv(env, name) {
573
+ return Object.prototype.hasOwnProperty.call(env, name);
574
+ }
575
+
576
+ export function buildPipInstallArgs(env = process.env) {
577
+ const standardNoIndexConfigured = hasEnv(env, "PIP_NO_INDEX");
578
+ const standardFindLinksConfigured = hasEnv(env, "PIP_FIND_LINKS");
579
+
580
+ const noIndex = (standardNoIndexConfigured ? env.PIP_NO_INDEX : env.QINGFLOW_MCP_PIP_NO_INDEX) === "1";
581
+ const findLinks = String(
582
+ standardFindLinksConfigured ? env.PIP_FIND_LINKS ?? "" : env.QINGFLOW_MCP_PIP_FIND_LINKS ?? "",
583
+ ).trim();
584
+
585
+ const pipArgs = ["install", "--disable-pip-version-check"];
586
+ if (noIndex) {
587
+ pipArgs.push("--no-index");
588
+ }
589
+ if (findLinks) {
590
+ pipArgs.push("--find-links", findLinks);
591
+ }
592
+ if (noIndex && findLinks) {
593
+ pipArgs.push(findOfflineProjectWheel(findLinks));
594
+ } else {
595
+ pipArgs.push(".");
596
+ }
597
+ return pipArgs;
598
+ }
599
+
572
600
  export function findPython() {
573
601
  const preferred = process.env.QINGFLOW_MCP_PYTHON?.trim();
574
602
  const candidates = preferred
@@ -629,19 +657,7 @@ export function ensurePythonEnv(packageRoot, { force = false, commandName = "qin
629
657
  }
630
658
 
631
659
  const pip = getVenvPip(packageRoot);
632
- const pipArgs = ["install", "--disable-pip-version-check"];
633
- const offlineFindLinks = process.env.QINGFLOW_MCP_PIP_FIND_LINKS?.trim();
634
- if (process.env.QINGFLOW_MCP_PIP_NO_INDEX === "1") {
635
- pipArgs.push("--no-index");
636
- }
637
- if (offlineFindLinks) {
638
- pipArgs.push("--find-links", offlineFindLinks);
639
- }
640
- if (process.env.QINGFLOW_MCP_PIP_NO_INDEX === "1" && offlineFindLinks) {
641
- pipArgs.push(findOfflineProjectWheel(offlineFindLinks));
642
- } else {
643
- pipArgs.push(".");
644
- }
660
+ const pipArgs = buildPipInstallArgs();
645
661
  runChecked(pip, pipArgs, { cwd: packageRoot });
646
662
 
647
663
  const probe = probePythonRuntime(packageRoot, commandName);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qingflow-tech/qingflow-cli",
3
- "version": "1.1.58",
3
+ "version": "1.1.60",
4
4
  "description": "Human-friendly Qingflow command line interface for auth, record operations, import, tasks, and stable builder flows.",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "qingflow-mcp"
7
- version = "1.1.58"
7
+ version = "1.1.60"
8
8
  description = "User-authenticated MCP server for Qingflow"
9
9
  readme = "README.md"
10
10
  license = "MIT"