@bowenqt/qiniu-ai-sdk 0.47.0 → 0.49.2
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 +171 -40
- package/README.zh-CN.md +185 -41
- package/bin/qiniu-ai.mjs +8 -1
- package/dist/ai/agent-graph.d.ts +21 -0
- package/dist/ai/agent-graph.d.ts.map +1 -1
- package/dist/ai/agent-graph.js +141 -8
- package/dist/ai/agent-graph.js.map +1 -1
- package/dist/ai/agent-graph.mjs +142 -9
- package/dist/ai/control-plane/contracts.d.ts +197 -0
- package/dist/ai/control-plane/contracts.d.ts.map +1 -0
- package/dist/ai/control-plane/contracts.js +43 -0
- package/dist/ai/control-plane/contracts.js.map +1 -0
- package/dist/ai/control-plane/contracts.mjs +36 -0
- package/dist/ai/control-plane/index.d.ts +11 -0
- package/dist/ai/control-plane/index.d.ts.map +1 -0
- package/dist/ai/control-plane/index.js +33 -0
- package/dist/ai/control-plane/index.js.map +1 -0
- package/dist/ai/control-plane/index.mjs +6 -0
- package/dist/ai/control-plane/optimizer.d.ts +48 -0
- package/dist/ai/control-plane/optimizer.d.ts.map +1 -0
- package/dist/ai/control-plane/optimizer.js +111 -0
- package/dist/ai/control-plane/optimizer.js.map +1 -0
- package/dist/ai/control-plane/optimizer.mjs +104 -0
- package/dist/ai/control-plane/reflection.d.ts +70 -0
- package/dist/ai/control-plane/reflection.d.ts.map +1 -0
- package/dist/ai/control-plane/reflection.js +157 -0
- package/dist/ai/control-plane/reflection.js.map +1 -0
- package/dist/ai/control-plane/reflection.mjs +152 -0
- package/dist/ai/control-plane/revisions.d.ts +40 -0
- package/dist/ai/control-plane/revisions.d.ts.map +1 -0
- package/dist/ai/control-plane/revisions.js +208 -0
- package/dist/ai/control-plane/revisions.js.map +1 -0
- package/dist/ai/control-plane/revisions.mjs +202 -0
- package/dist/ai/control-plane/runtime.d.ts +50 -0
- package/dist/ai/control-plane/runtime.d.ts.map +1 -0
- package/dist/ai/control-plane/runtime.js +117 -0
- package/dist/ai/control-plane/runtime.js.map +1 -0
- package/dist/ai/control-plane/runtime.mjs +108 -0
- package/dist/ai/create-agent.d.ts +119 -0
- package/dist/ai/create-agent.d.ts.map +1 -1
- package/dist/ai/create-agent.js +322 -19
- package/dist/ai/create-agent.js.map +1 -1
- package/dist/ai/create-agent.mjs +322 -19
- package/dist/ai/generate-object.js +3 -3
- package/dist/ai/generate-object.js.map +1 -1
- package/dist/ai/generate-object.mjs +4 -4
- package/dist/ai/generate-text.d.ts +16 -0
- package/dist/ai/generate-text.d.ts.map +1 -1
- package/dist/ai/generate-text.js +71 -25
- package/dist/ai/generate-text.js.map +1 -1
- package/dist/ai/generate-text.mjs +72 -26
- package/dist/ai/graph/checkpointer.d.ts +1 -0
- package/dist/ai/graph/checkpointer.d.ts.map +1 -1
- package/dist/ai/graph/checkpointer.js +34 -7
- package/dist/ai/graph/checkpointer.js.map +1 -1
- package/dist/ai/graph/checkpointer.mjs +34 -7
- package/dist/ai/graph/state-graph.d.ts.map +1 -1
- package/dist/ai/graph/state-graph.js +14 -4
- package/dist/ai/graph/state-graph.js.map +1 -1
- package/dist/ai/graph/state-graph.mjs +14 -4
- package/dist/ai/guardrails/chain.d.ts +1 -1
- package/dist/ai/guardrails/chain.d.ts.map +1 -1
- package/dist/ai/guardrails/chain.js +3 -2
- package/dist/ai/guardrails/chain.js.map +1 -1
- package/dist/ai/guardrails/chain.mjs +4 -3
- package/dist/ai/guardrails/governance.d.ts +71 -0
- package/dist/ai/guardrails/governance.d.ts.map +1 -0
- package/dist/ai/guardrails/governance.js +151 -0
- package/dist/ai/guardrails/governance.js.map +1 -0
- package/dist/ai/guardrails/governance.mjs +143 -0
- package/dist/ai/guardrails/index.d.ts +4 -1
- package/dist/ai/guardrails/index.d.ts.map +1 -1
- package/dist/ai/guardrails/index.js +10 -1
- package/dist/ai/guardrails/index.js.map +1 -1
- package/dist/ai/guardrails/index.mjs +3 -0
- package/dist/ai/guardrails/input-filter.js +1 -1
- package/dist/ai/guardrails/input-filter.js.map +1 -1
- package/dist/ai/guardrails/input-filter.mjs +1 -1
- package/dist/ai/guardrails/output-filter.js +1 -1
- package/dist/ai/guardrails/output-filter.js.map +1 -1
- package/dist/ai/guardrails/output-filter.mjs +1 -1
- package/dist/ai/guardrails/token-limiter.js +1 -1
- package/dist/ai/guardrails/token-limiter.js.map +1 -1
- package/dist/ai/guardrails/token-limiter.mjs +1 -1
- package/dist/ai/guardrails/tool-filter.d.ts +9 -0
- package/dist/ai/guardrails/tool-filter.d.ts.map +1 -0
- package/dist/ai/guardrails/tool-filter.js +19 -0
- package/dist/ai/guardrails/tool-filter.js.map +1 -0
- package/dist/ai/guardrails/tool-filter.mjs +16 -0
- package/dist/ai/guardrails/types.d.ts +23 -1
- package/dist/ai/guardrails/types.d.ts.map +1 -1
- package/dist/ai/guardrails/types.js +25 -1
- package/dist/ai/guardrails/types.js.map +1 -1
- package/dist/ai/guardrails/types.mjs +22 -0
- package/dist/ai/nodes/execute-node.d.ts +7 -1
- package/dist/ai/nodes/execute-node.d.ts.map +1 -1
- package/dist/ai/nodes/execute-node.js +118 -5
- package/dist/ai/nodes/execute-node.js.map +1 -1
- package/dist/ai/nodes/execute-node.mjs +118 -5
- package/dist/ai/session-store.d.ts +70 -0
- package/dist/ai/session-store.d.ts.map +1 -0
- package/dist/ai/session-store.js +271 -0
- package/dist/ai/session-store.js.map +1 -0
- package/dist/ai/session-store.mjs +261 -0
- package/dist/ai/stream-object.js +3 -3
- package/dist/ai/stream-object.js.map +1 -1
- package/dist/ai/stream-object.mjs +4 -4
- package/dist/ai/stream-text.d.ts +17 -0
- package/dist/ai/stream-text.d.ts.map +1 -1
- package/dist/ai/stream-text.js +53 -6
- package/dist/ai/stream-text.js.map +1 -1
- package/dist/ai/stream-text.mjs +53 -6
- package/dist/browser/index.d.ts +13 -4
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +29 -2
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +5 -0
- package/dist/cli/doctor.d.ts +21 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +481 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/doctor.mjs +445 -0
- package/dist/cli/eval-gate.d.ts +10 -0
- package/dist/cli/eval-gate.d.ts.map +1 -0
- package/dist/cli/eval-gate.js +92 -0
- package/dist/cli/eval-gate.js.map +1 -0
- package/dist/cli/eval-gate.mjs +53 -0
- package/dist/cli/init.d.ts +17 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +112 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/init.mjs +73 -0
- package/dist/cli/live-verify-gate.d.ts +3 -0
- package/dist/cli/live-verify-gate.d.ts.map +1 -0
- package/dist/cli/live-verify-gate.js +270 -0
- package/dist/cli/live-verify-gate.js.map +1 -0
- package/dist/cli/live-verify-gate.mjs +267 -0
- package/dist/cli/live-verify-render.d.ts +3 -0
- package/dist/cli/live-verify-render.d.ts.map +1 -0
- package/dist/cli/live-verify-render.js +138 -0
- package/dist/cli/live-verify-render.js.map +1 -0
- package/dist/cli/live-verify-render.mjs +135 -0
- package/dist/cli/live-verify.d.ts +4 -0
- package/dist/cli/live-verify.d.ts.map +1 -0
- package/dist/cli/live-verify.internal.d.ts +274 -0
- package/dist/cli/live-verify.internal.d.ts.map +1 -0
- package/dist/cli/live-verify.internal.js +1135 -0
- package/dist/cli/live-verify.internal.js.map +1 -0
- package/dist/cli/live-verify.internal.mjs +1095 -0
- package/dist/cli/live-verify.js +23 -0
- package/dist/cli/live-verify.js.map +1 -0
- package/dist/cli/live-verify.mjs +4 -0
- package/dist/cli/package-workflow.d.ts +138 -0
- package/dist/cli/package-workflow.d.ts.map +1 -0
- package/dist/cli/package-workflow.js +352 -0
- package/dist/cli/package-workflow.js.map +1 -0
- package/dist/cli/package-workflow.mjs +288 -0
- package/dist/cli/skill-cli.d.ts +18 -8
- package/dist/cli/skill-cli.d.ts.map +1 -1
- package/dist/cli/skill-cli.js +632 -139
- package/dist/cli/skill-cli.js.map +1 -1
- package/dist/cli/skill-cli.mjs +632 -139
- package/dist/cli/verification-report.d.ts +160 -0
- package/dist/cli/verification-report.d.ts.map +1 -0
- package/dist/cli/verification-report.js +562 -0
- package/dist/cli/verification-report.js.map +1 -0
- package/dist/cli/verification-report.mjs +549 -0
- package/dist/cli/worktree.d.ts +56 -0
- package/dist/cli/worktree.d.ts.map +1 -0
- package/dist/cli/worktree.js +303 -0
- package/dist/cli/worktree.js.map +1 -0
- package/dist/cli/worktree.mjs +260 -0
- package/dist/core/index.d.ts +9 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +54 -13
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +6 -5
- package/dist/index.d.ts +16 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -1
- package/dist/lib/capability-evidence.generated.d.ts +308 -0
- package/dist/lib/capability-evidence.generated.d.ts.map +1 -0
- package/dist/lib/capability-evidence.generated.js +832 -0
- package/dist/lib/capability-evidence.generated.js.map +1 -0
- package/dist/lib/capability-evidence.generated.mjs +829 -0
- package/dist/lib/capability-registry.d.ts +17 -0
- package/dist/lib/capability-registry.d.ts.map +1 -0
- package/dist/lib/capability-registry.js +140 -0
- package/dist/lib/capability-registry.js.map +1 -0
- package/dist/lib/capability-registry.mjs +130 -0
- package/dist/lib/capability-source.d.ts +11 -0
- package/dist/lib/capability-source.d.ts.map +1 -0
- package/dist/lib/capability-source.js +69 -0
- package/dist/lib/capability-source.js.map +1 -0
- package/dist/lib/capability-source.mjs +61 -0
- package/dist/lib/capability-types.d.ts +60 -0
- package/dist/lib/capability-types.d.ts.map +1 -0
- package/dist/lib/capability-types.js +3 -0
- package/dist/lib/capability-types.js.map +1 -0
- package/dist/lib/capability-types.mjs +2 -0
- package/dist/lib/content-converter.d.ts +9 -3
- package/dist/lib/content-converter.d.ts.map +1 -1
- package/dist/lib/content-converter.js +92 -6
- package/dist/lib/content-converter.js.map +1 -1
- package/dist/lib/content-converter.mjs +90 -6
- package/dist/lib/eval-gate.d.ts +90 -0
- package/dist/lib/eval-gate.d.ts.map +1 -0
- package/dist/lib/eval-gate.js +151 -0
- package/dist/lib/eval-gate.js.map +1 -0
- package/dist/lib/eval-gate.mjs +146 -0
- package/dist/lib/qiniu-auth.d.ts +31 -0
- package/dist/lib/qiniu-auth.d.ts.map +1 -0
- package/dist/lib/qiniu-auth.js +78 -0
- package/dist/lib/qiniu-auth.js.map +1 -0
- package/dist/lib/qiniu-auth.mjs +73 -0
- package/dist/lib/task-handle.d.ts +12 -0
- package/dist/lib/task-handle.d.ts.map +1 -0
- package/dist/lib/task-handle.js +9 -0
- package/dist/lib/task-handle.js.map +1 -0
- package/dist/lib/task-handle.mjs +6 -0
- package/dist/lib/types.d.ts +28 -5
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/lib/version.mjs +1 -1
- package/dist/modules/account/index.d.ts.map +1 -1
- package/dist/modules/account/index.js +7 -58
- package/dist/modules/account/index.js.map +1 -1
- package/dist/modules/account/index.mjs +7 -58
- package/dist/modules/admin/index.d.ts +39 -4
- package/dist/modules/admin/index.d.ts.map +1 -1
- package/dist/modules/admin/index.js +78 -17
- package/dist/modules/admin/index.js.map +1 -1
- package/dist/modules/admin/index.mjs +78 -17
- package/dist/modules/anthropic/index.d.ts +26 -11
- package/dist/modules/anthropic/index.d.ts.map +1 -1
- package/dist/modules/anthropic/index.js +59 -3
- package/dist/modules/anthropic/index.js.map +1 -1
- package/dist/modules/anthropic/index.mjs +59 -3
- package/dist/modules/asr/index.d.ts.map +1 -1
- package/dist/modules/asr/index.js +14 -10
- package/dist/modules/asr/index.js.map +1 -1
- package/dist/modules/asr/index.mjs +14 -10
- package/dist/modules/batch/index.d.ts +101 -0
- package/dist/modules/batch/index.d.ts.map +1 -0
- package/dist/modules/batch/index.js +119 -0
- package/dist/modules/batch/index.js.map +1 -0
- package/dist/modules/batch/index.mjs +115 -0
- package/dist/modules/censor/index.d.ts +41 -4
- package/dist/modules/censor/index.d.ts.map +1 -1
- package/dist/modules/censor/index.js +84 -10
- package/dist/modules/censor/index.js.map +1 -1
- package/dist/modules/censor/index.mjs +84 -10
- package/dist/modules/chat/index.d.ts.map +1 -1
- package/dist/modules/chat/index.js +12 -2
- package/dist/modules/chat/index.js.map +1 -1
- package/dist/modules/chat/index.mjs +12 -2
- package/dist/modules/file/index.d.ts +109 -3
- package/dist/modules/file/index.d.ts.map +1 -1
- package/dist/modules/file/index.js +232 -1
- package/dist/modules/file/index.js.map +1 -1
- package/dist/modules/file/index.mjs +232 -1
- package/dist/modules/image/index.d.ts +7 -5
- package/dist/modules/image/index.d.ts.map +1 -1
- package/dist/modules/image/index.js +31 -13
- package/dist/modules/image/index.js.map +1 -1
- package/dist/modules/image/index.mjs +31 -13
- package/dist/modules/ocr/index.d.ts.map +1 -1
- package/dist/modules/ocr/index.js +9 -6
- package/dist/modules/ocr/index.js.map +1 -1
- package/dist/modules/ocr/index.mjs +9 -6
- package/dist/modules/response/index.d.ts +355 -4
- package/dist/modules/response/index.d.ts.map +1 -1
- package/dist/modules/response/index.js +925 -4
- package/dist/modules/response/index.js.map +1 -1
- package/dist/modules/response/index.mjs +916 -3
- package/dist/modules/tts/index.d.ts +12 -0
- package/dist/modules/tts/index.d.ts.map +1 -1
- package/dist/modules/tts/index.js +40 -4
- package/dist/modules/tts/index.js.map +1 -1
- package/dist/modules/tts/index.mjs +40 -4
- package/dist/modules/video/index.d.ts +2 -1
- package/dist/modules/video/index.d.ts.map +1 -1
- package/dist/modules/video/index.js +33 -5
- package/dist/modules/video/index.js.map +1 -1
- package/dist/modules/video/index.mjs +33 -5
- package/dist/node/index.d.ts +9 -4
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +26 -10
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +5 -0
- package/dist/node/mcp/http-transport.d.ts +100 -1
- package/dist/node/mcp/http-transport.d.ts.map +1 -1
- package/dist/node/mcp/http-transport.js +289 -17
- package/dist/node/mcp/http-transport.js.map +1 -1
- package/dist/node/mcp/http-transport.mjs +289 -17
- package/dist/node/mcp/index.d.ts +3 -3
- package/dist/node/mcp/index.d.ts.map +1 -1
- package/dist/node/mcp/index.js +4 -1
- package/dist/node/mcp/index.js.map +1 -1
- package/dist/node/mcp/index.mjs +2 -2
- package/dist/node/mcp/oauth.d.ts +30 -0
- package/dist/node/mcp/oauth.d.ts.map +1 -1
- package/dist/node/mcp/oauth.js +70 -0
- package/dist/node/mcp/oauth.js.map +1 -1
- package/dist/node/mcp/oauth.mjs +67 -0
- package/dist/node/mcp/server.d.ts.map +1 -1
- package/dist/node/mcp/server.js +4 -2
- package/dist/node/mcp/server.js.map +1 -1
- package/dist/node/mcp/server.mjs +4 -2
- package/dist/node/mcp/types.d.ts +40 -1
- package/dist/node/mcp/types.d.ts.map +1 -1
- package/dist/node/mcp/types.js +2 -0
- package/dist/node/mcp/types.js.map +1 -1
- package/dist/node/mcp/types.mjs +2 -0
- package/dist/node/mcp-host.d.ts +88 -15
- package/dist/node/mcp-host.d.ts.map +1 -1
- package/dist/node/mcp-host.js +276 -44
- package/dist/node/mcp-host.js.map +1 -1
- package/dist/node/mcp-host.mjs +275 -43
- package/dist/node/sandbox/index.d.ts +2 -0
- package/dist/node/sandbox/index.d.ts.map +1 -1
- package/dist/node/sandbox/index.js +3 -1
- package/dist/node/sandbox/index.js.map +1 -1
- package/dist/node/sandbox/index.mjs +1 -0
- package/dist/node/sandbox/skill-trial.d.ts +22 -0
- package/dist/node/sandbox/skill-trial.d.ts.map +1 -0
- package/dist/node/sandbox/skill-trial.js +51 -0
- package/dist/node/sandbox/skill-trial.js.map +1 -0
- package/dist/node/sandbox/skill-trial.mjs +47 -0
- package/dist/node/skills/index.d.ts +4 -0
- package/dist/node/skills/index.d.ts.map +1 -1
- package/dist/node/skills/index.js +10 -1
- package/dist/node/skills/index.js.map +1 -1
- package/dist/node/skills/index.mjs +2 -0
- package/dist/node/skills/promotion.d.ts +94 -0
- package/dist/node/skills/promotion.d.ts.map +1 -0
- package/dist/node/skills/promotion.js +214 -0
- package/dist/node/skills/promotion.js.map +1 -0
- package/dist/node/skills/promotion.mjs +208 -0
- package/dist/node/skills/registry.d.ts +30 -0
- package/dist/node/skills/registry.d.ts.map +1 -1
- package/dist/node/skills/registry.js +111 -1
- package/dist/node/skills/registry.js.map +1 -1
- package/dist/node/skills/registry.mjs +111 -1
- package/dist/node/skills/trial.d.ts +61 -0
- package/dist/node/skills/trial.d.ts.map +1 -0
- package/dist/node/skills/trial.js +100 -0
- package/dist/node/skills/trial.js.map +1 -0
- package/dist/node/skills/trial.mjs +93 -0
- package/dist/qiniu/client.d.ts +3 -0
- package/dist/qiniu/client.d.ts.map +1 -1
- package/dist/qiniu/client.js +6 -0
- package/dist/qiniu/client.js.map +1 -1
- package/dist/qiniu/client.mjs +6 -0
- package/dist/qiniu/index.d.ts +10 -5
- package/dist/qiniu/index.d.ts.map +1 -1
- package/dist/qiniu/index.js +19 -1
- package/dist/qiniu/index.js.map +1 -1
- package/dist/qiniu/index.mjs +3 -1
- package/package.json +18 -2
- package/templates/starters/agent/.env.example +1 -0
- package/templates/starters/agent/README.md +13 -0
- package/templates/starters/agent/package.json +18 -0
- package/templates/starters/agent/src/index.ts +32 -0
- package/templates/starters/agent/tsconfig.json +12 -0
- package/templates/starters/chat/.env.example +1 -0
- package/templates/starters/chat/README.md +13 -0
- package/templates/starters/chat/package.json +17 -0
- package/templates/starters/chat/src/index.ts +12 -0
- package/templates/starters/chat/tsconfig.json +12 -0
- package/templates/starters/node-agent/.env.example +1 -0
- package/templates/starters/node-agent/README.md +13 -0
- package/templates/starters/node-agent/package.json +19 -0
- package/templates/starters/node-agent/src/index.ts +28 -0
- package/templates/starters/node-agent/tsconfig.json +12 -0
package/README.md
CHANGED
|
@@ -34,12 +34,13 @@
|
|
|
34
34
|
- 🏭 **createAgent** — Reusable agent factory with configurable behaviors
|
|
35
35
|
|
|
36
36
|
### Advanced Capabilities
|
|
37
|
+
- 🧭 **Capability Registry** — Query model capabilities and module maturity from the SDK
|
|
37
38
|
- 📋 **Skills Injection** — Markdown-based agent knowledge (Claude Skills compatible)
|
|
38
39
|
- 🏪 **Skill Marketplace** — Remote skill loading with SHA256 integrity verification (v0.32.0+)
|
|
39
40
|
- 🔐 **Security Hardening** — Atomic remote install, cumulative size limits, deny-first tool policy (v0.38.0+)
|
|
40
41
|
- ⚡ **MCP Tool Policy** — SDK-native timeout, progress reset, output truncation per server (v0.38.0+)
|
|
41
42
|
- 🔗 **MCP Host** — `NodeMCPHost` with stdio + HTTP transport + per-server tool policies
|
|
42
|
-
- 🖥️ **MCP Server** — Built-in Qiniu MCP server for OCR/
|
|
43
|
+
- 🖥️ **MCP Server** — Built-in Qiniu MCP server for chat, OCR, image/video censor, and image generation
|
|
43
44
|
- 💾 **Checkpointer** — State persistence (Memory, Redis, PostgreSQL, Kodo)
|
|
44
45
|
- 🧠 **Memory Manager** — Short-term + long-term memory with LLM summarization
|
|
45
46
|
- ✅ **Tool Approval (HITL)** — Human-in-the-loop with deny-first source policy (v0.38.0+)
|
|
@@ -57,19 +58,119 @@
|
|
|
57
58
|
npm install @bowenqt/qiniu-ai-sdk
|
|
58
59
|
```
|
|
59
60
|
|
|
60
|
-
###
|
|
61
|
+
### Choose Your Entry
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
| I want to... | Use |
|
|
64
|
+
|--------------|-----|
|
|
65
|
+
| Call Qiniu cloud APIs directly | `@bowenqt/qiniu-ai-sdk/qiniu` |
|
|
66
|
+
| Build agent/runtime workflows | `@bowenqt/qiniu-ai-sdk/qiniu` + `@bowenqt/qiniu-ai-sdk/core` |
|
|
67
|
+
| Add MCP, sandbox, skills, or non-memory checkpointers | `@bowenqt/qiniu-ai-sdk/qiniu` + `@bowenqt/qiniu-ai-sdk/core` + `@bowenqt/qiniu-ai-sdk/node` |
|
|
67
68
|
|
|
68
69
|
### Entry Guarantees
|
|
69
70
|
|
|
70
71
|
- `@bowenqt/qiniu-ai-sdk/node` is the only supported Node integration surface for MCP, sandbox, audit sinks, and non-memory checkpointers.
|
|
71
72
|
- `@bowenqt/qiniu-ai-sdk/core` and `@bowenqt/qiniu-ai-sdk/browser` are kept free of Node-only transitive dependencies.
|
|
72
|
-
- `ResponseAPI`
|
|
73
|
+
- `ResponseAPI` is promoted to beta for the core subset only: `create`, `followUp`, `createTextResult`, and `followUpTextResult`; the stronger evidence-backed beta basis only applies when fresh nightly `response-api` evidence is present.
|
|
74
|
+
- Other `ResponseAPI` helpers remain deferred/provider-only in this phase, including stream, JSON/messages, reasoning, and chat-completion projection helpers. The recommended access path for that deferred surface is `client.response.experimental.*`; legacy direct helper methods remain compatibility aliases and are not part of the official beta surface.
|
|
75
|
+
- `NodeMCPHost` remains `beta (held)`; it only forwards already-resolved bearer tokens via `token` or `tokenProvider`, and the remaining deferred risks are OAuth token acquisition beyond that boundary plus cross-server routing.
|
|
76
|
+
- The current management surface is intentionally narrow: `client.account` is limited to `usage()`, and `client.admin` is limited to API key CRUD (`createKeys`, `listKeys`, `getKey`, `revokeKey`), not quota/billing/project/tenant administration.
|
|
77
|
+
- The runtime story smoke in this branch is intentionally local-first: it validates `createAgent` plus session/checkpointer, approval resume, and MCP host composition, while leaving the final runtime/node contract to the dedicated lane workers.
|
|
78
|
+
- The root entry remains a compatibility surface, not the recommended teaching surface for new projects.
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
const text = await client.response.createTextResult({
|
|
82
|
+
model: 'openai/gpt-5',
|
|
83
|
+
input: 'Summarize the request.',
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const json = await client.response.experimental.createJson({
|
|
87
|
+
model: 'openai/gpt-5',
|
|
88
|
+
input: 'Return {"ok":true}.',
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Cloud API Quickstart
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
import { QiniuAI } from '@bowenqt/qiniu-ai-sdk/qiniu';
|
|
96
|
+
|
|
97
|
+
const client = new QiniuAI({
|
|
98
|
+
apiKey: process.env.QINIU_API_KEY || '',
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
const result = await client.chat.create({
|
|
102
|
+
model: 'gemini-2.5-flash',
|
|
103
|
+
messages: [{ role: 'user', content: 'Introduce Qiniu AI SDK in one sentence.' }],
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
console.log(result.choices[0]?.message?.content ?? '');
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Agent Quickstart
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { z } from 'zod';
|
|
113
|
+
import { zodToJsonSchema } from '@bowenqt/qiniu-ai-sdk/ai-tools';
|
|
114
|
+
import { QiniuAI } from '@bowenqt/qiniu-ai-sdk/qiniu';
|
|
115
|
+
import { generateText } from '@bowenqt/qiniu-ai-sdk/core';
|
|
116
|
+
|
|
117
|
+
const calculatorSchema = z.object({ a: z.number(), b: z.number() });
|
|
118
|
+
|
|
119
|
+
const client = new QiniuAI({
|
|
120
|
+
apiKey: process.env.QINIU_API_KEY || '',
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
const result = await generateText({
|
|
124
|
+
client,
|
|
125
|
+
model: 'gemini-2.5-flash',
|
|
126
|
+
prompt: 'What is 42 multiplied by 17?',
|
|
127
|
+
tools: {
|
|
128
|
+
calculator: {
|
|
129
|
+
description: 'Perform arithmetic',
|
|
130
|
+
parameters: zodToJsonSchema(calculatorSchema),
|
|
131
|
+
execute: async (args) => {
|
|
132
|
+
const { a, b } = calculatorSchema.parse(args);
|
|
133
|
+
return a * b;
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
console.log(result.text);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Node Agent Quickstart
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
import { z } from 'zod';
|
|
146
|
+
import { zodToJsonSchema } from '@bowenqt/qiniu-ai-sdk/ai-tools';
|
|
147
|
+
import { createAgent } from '@bowenqt/qiniu-ai-sdk/core';
|
|
148
|
+
import { createNodeQiniuAI } from '@bowenqt/qiniu-ai-sdk/node';
|
|
149
|
+
|
|
150
|
+
const nowSchema = z.object({});
|
|
151
|
+
|
|
152
|
+
const client = createNodeQiniuAI({
|
|
153
|
+
apiKey: process.env.QINIU_API_KEY || '',
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
const agent = createAgent({
|
|
157
|
+
client,
|
|
158
|
+
model: 'gemini-2.5-flash',
|
|
159
|
+
tools: {
|
|
160
|
+
now: {
|
|
161
|
+
description: 'Return the current ISO timestamp',
|
|
162
|
+
parameters: zodToJsonSchema(nowSchema),
|
|
163
|
+
execute: async () => ({ now: new Date().toISOString() }),
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
const result = await agent.run({
|
|
169
|
+
prompt: 'Use the now tool, then explain why ISO timestamps are useful.',
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
console.log(result.text);
|
|
173
|
+
```
|
|
73
174
|
|
|
74
175
|
### v0.46 Migration
|
|
75
176
|
|
|
@@ -113,6 +214,45 @@ npm install ioredis
|
|
|
113
214
|
npm install pg
|
|
114
215
|
```
|
|
115
216
|
|
|
217
|
+
### Capability Metadata
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
import {
|
|
221
|
+
getModelCapabilities,
|
|
222
|
+
getModuleMaturity,
|
|
223
|
+
listModels,
|
|
224
|
+
} from '@bowenqt/qiniu-ai-sdk/qiniu';
|
|
225
|
+
|
|
226
|
+
const featuredChatModels = listModels({ type: 'chat' }).slice(0, 3);
|
|
227
|
+
const responseApi = getModuleMaturity('ResponseAPI');
|
|
228
|
+
const gemini = getModelCapabilities('gemini-2.5-flash');
|
|
229
|
+
|
|
230
|
+
console.log(featuredChatModels.map((model) => model.id));
|
|
231
|
+
console.log(responseApi?.maturity); // beta
|
|
232
|
+
console.log(gemini?.capabilities);
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Worktree Delivery
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# Create the integration worktree and default .worktrees/ layout
|
|
239
|
+
qiniu-ai worktree init
|
|
240
|
+
|
|
241
|
+
# Spawn a lane from codex/vnext-integration
|
|
242
|
+
qiniu-ai worktree spawn --lane foundation
|
|
243
|
+
|
|
244
|
+
# Inspect current worktrees and inferred lanes
|
|
245
|
+
qiniu-ai worktree status
|
|
246
|
+
|
|
247
|
+
# Merge a lane back into the integration branch
|
|
248
|
+
qiniu-ai worktree integrate --lane foundation
|
|
249
|
+
|
|
250
|
+
# Run the default live probe for a lane
|
|
251
|
+
qiniu-ai verify live --lane runtime
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Use worktree lanes for broad SDK upgrades. Keep the root workspace focused on orchestration and integration, and let each lane own a single subsystem group.
|
|
255
|
+
|
|
116
256
|
### Kodo Audit Sink
|
|
117
257
|
|
|
118
258
|
```typescript
|
|
@@ -130,36 +270,6 @@ const logger = auditLogger({
|
|
|
130
270
|
});
|
|
131
271
|
```
|
|
132
272
|
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## 🚀 Quick Start
|
|
136
|
-
|
|
137
|
-
```typescript
|
|
138
|
-
import { QiniuAI } from '@bowenqt/qiniu-ai-sdk/qiniu';
|
|
139
|
-
|
|
140
|
-
const client = new QiniuAI({
|
|
141
|
-
apiKey: 'Sk-xxxxxxxxxxxxxxxx',
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
// Chat completion
|
|
145
|
-
const chat = await client.chat.create({
|
|
146
|
-
model: 'gemini-2.5-flash',
|
|
147
|
-
messages: [{ role: 'user', content: 'Hello!' }],
|
|
148
|
-
});
|
|
149
|
-
console.log(chat.choices[0].message.content);
|
|
150
|
-
|
|
151
|
-
// Streaming chat
|
|
152
|
-
const stream = await client.chat.createStream({
|
|
153
|
-
model: 'gemini-2.5-flash',
|
|
154
|
-
messages: [{ role: 'user', content: 'Explain AI briefly' }],
|
|
155
|
-
});
|
|
156
|
-
for await (const chunk of stream) {
|
|
157
|
-
process.stdout.write(chunk.choices[0]?.delta?.content || '');
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
273
|
## 🤖 Agentic Usage
|
|
164
274
|
|
|
165
275
|
### Tool Execution with generateText
|
|
@@ -241,6 +351,7 @@ const videoTask = await client.video.create({
|
|
|
241
351
|
});
|
|
242
352
|
const videoResult = await client.video.waitForCompletion(videoTask.id);
|
|
243
353
|
console.log(videoResult.task_result?.videos[0].url);
|
|
354
|
+
// videoTask.cancel() currently rejects explicitly because remote media-task cancellation is unsupported
|
|
244
355
|
|
|
245
356
|
// viduq video generation (v0.36.0+)
|
|
246
357
|
const viduqTask = await client.video.create({
|
|
@@ -251,6 +362,7 @@ const viduqTask = await client.video.create({
|
|
|
251
362
|
// Use full handle for reliable polling
|
|
252
363
|
const viduqResult = await client.video.waitForCompletion(viduqTask);
|
|
253
364
|
console.log(viduqResult.task_result?.videos[0].url);
|
|
365
|
+
// Use AbortSignal to stop local waiting; viduqTask.cancel() still fails fast today
|
|
254
366
|
|
|
255
367
|
// kling-image-o1 high-quality image (v0.36.0+)
|
|
256
368
|
const klingImg = await client.image.generate({
|
|
@@ -485,8 +597,27 @@ await instance.kill();
|
|
|
485
597
|
|
|
486
598
|
## 🛠️ CLI Tools
|
|
487
599
|
|
|
600
|
+
### Project Setup
|
|
601
|
+
|
|
602
|
+
```bash
|
|
603
|
+
npx qiniu-ai init --template chat
|
|
604
|
+
npx qiniu-ai init --template agent
|
|
605
|
+
npx qiniu-ai init --template node-agent
|
|
606
|
+
npx qiniu-ai doctor --template agent
|
|
607
|
+
```
|
|
608
|
+
|
|
488
609
|
### MCP Server
|
|
489
610
|
|
|
611
|
+
The built-in `QiniuMCPServer` currently exposes these built-in tools:
|
|
612
|
+
|
|
613
|
+
- `qiniu_chat`
|
|
614
|
+
- `qiniu_ocr`
|
|
615
|
+
- `qiniu_image_censor`
|
|
616
|
+
- `qiniu_video_censor`
|
|
617
|
+
- `qiniu_image_generate`
|
|
618
|
+
|
|
619
|
+
It does not currently expose `qiniu_vframe`. If you need frame extraction, use the SDK's `@bowenqt/qiniu-ai-sdk/ai-tools` / `QINIU_TOOLS` or asset resolver surface directly.
|
|
620
|
+
|
|
490
621
|
```bash
|
|
491
622
|
npx qiniu-mcp-server
|
|
492
623
|
```
|
|
@@ -494,6 +625,7 @@ npx qiniu-mcp-server
|
|
|
494
625
|
### Skill Manager (v0.39.0+)
|
|
495
626
|
|
|
496
627
|
```bash
|
|
628
|
+
npx qiniu-ai doctor --template node-agent # Validate env, peers, and import choices
|
|
497
629
|
npx qiniu-ai skill list # List installed skills
|
|
498
630
|
npx qiniu-ai skill add <url> # Install a remote skill from manifest URL
|
|
499
631
|
npx qiniu-ai skill add <url> --sha256 <hash> # With integrity verification
|
|
@@ -503,8 +635,7 @@ npx qiniu-ai skill remove <name> # Remove skill + lockfile entry
|
|
|
503
635
|
```
|
|
504
636
|
|
|
505
637
|
**Environment variables:**
|
|
506
|
-
- `QINIU_API_KEY` — API key for
|
|
507
|
-
- `QINIU_ACCESS_KEY` / `QINIU_SECRET_KEY` — For Vframe/signed operations
|
|
638
|
+
- `QINIU_API_KEY` — Required API key for the built-in MCP server tools listed above
|
|
508
639
|
|
|
509
640
|
---
|
|
510
641
|
|
package/README.zh-CN.md
CHANGED
|
@@ -34,12 +34,13 @@
|
|
|
34
34
|
- 🏭 **createAgent** — 可复用的 Agent 工厂
|
|
35
35
|
|
|
36
36
|
### 高级能力
|
|
37
|
+
- 🧭 **能力注册表** — 通过 SDK 查询模型能力和模块成熟度
|
|
37
38
|
- 📋 **技能注入** — Markdown 格式的 Agent 知识库(兼容 Claude Skills)
|
|
38
39
|
- 🏪 **Skill 市场** — 远程技能加载 + SHA256 完整性验证 (v0.32.0+)
|
|
39
40
|
- 🔐 **安全加固** — 原子远程安装、累计大小限制、deny-first 工具策略 (v0.38.0+)
|
|
40
41
|
- ⚡ **MCP 工具策略** — SDK 原生 timeout、进度重置、输出截断,按服务器配置 (v0.38.0+)
|
|
41
42
|
- 🔗 **MCP Host** — `NodeMCPHost` 支持 stdio + HTTP 传输 + 按服务器工具策略
|
|
42
|
-
- 🖥️ **MCP 服务端** — 内置七牛 MCP Server
|
|
43
|
+
- 🖥️ **MCP 服务端** — 内置七牛 MCP Server(对话、OCR、图片/视频审核、图片生成)
|
|
43
44
|
- 💾 **Checkpointer** — 状态持久化(Memory、Redis、PostgreSQL、Kodo)
|
|
44
45
|
- 🧠 **Memory Manager** — 短期 + 长期记忆,LLM 自动摘要
|
|
45
46
|
- ✅ **工具审批 (HITL)** — 敏感操作人工确认 + deny-first 来源策略 (v0.38.0+)
|
|
@@ -57,19 +58,119 @@
|
|
|
57
58
|
npm install @bowenqt/qiniu-ai-sdk
|
|
58
59
|
```
|
|
59
60
|
|
|
60
|
-
###
|
|
61
|
+
### 如何选择入口
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
| 我想做什么 | 使用哪个入口 |
|
|
64
|
+
|------------|--------------|
|
|
65
|
+
| 直接调用七牛云 API | `@bowenqt/qiniu-ai-sdk/qiniu` |
|
|
66
|
+
| 构建 agent/runtime 工作流 | `@bowenqt/qiniu-ai-sdk/qiniu` + `@bowenqt/qiniu-ai-sdk/core` |
|
|
67
|
+
| 接入 MCP、sandbox、skills 或非内存 checkpointer | `@bowenqt/qiniu-ai-sdk/qiniu` + `@bowenqt/qiniu-ai-sdk/core` + `@bowenqt/qiniu-ai-sdk/node` |
|
|
67
68
|
|
|
68
69
|
### 入口契约
|
|
69
70
|
|
|
70
71
|
- `@bowenqt/qiniu-ai-sdk/node` 是 MCP、sandbox、audit sink 以及非内存 checkpointer 的唯一正式 Node integration 入口。
|
|
71
72
|
- `@bowenqt/qiniu-ai-sdk/core` 和 `@bowenqt/qiniu-ai-sdk/browser` 保持不含 Node-only 传递依赖。
|
|
72
|
-
- `ResponseAPI`
|
|
73
|
+
- `ResponseAPI` 仅核心子集晋级为 beta:`create`、`followUp`、`createTextResult`、`followUpTextResult`;只有在存在 fresh nightly `response-api` 证据时,才会启用更强的 evidence-backed beta 结论。
|
|
74
|
+
- 其余 `ResponseAPI` helpers 仍处于 deferred/provider-only(包括 stream、JSON/messages、reasoning、chat-completion projection)。推荐通过 `client.response.experimental.*` 访问这部分 deferred surface;旧的直接 helper 仍保留为兼容别名,但不属于官方 beta surface。
|
|
75
|
+
- `NodeMCPHost` 仍为 `beta (held)`;当前只负责透传已经解析好的 bearer token(`token` / `tokenProvider`),剩余 deferred risks 为超出该边界的 OAuth token acquisition 与 cross-server routing。
|
|
76
|
+
- 当前管理面有意保持很窄:`client.account` 只有 `usage()`,`client.admin` 只覆盖 API key CRUD(`createKeys`、`listKeys`、`getKey`、`revokeKey`),并不代表 quota/billing/project/tenant 一类更大的管理平台能力。
|
|
77
|
+
- 本分支的 runtime story smoke 保持本地优先:只验证 `createAgent` + session/checkpointer、approval resume、MCP host 组合,最终 runtime/node contract 仍由对应 lane worker 收敛。
|
|
78
|
+
- root 入口继续保留兼容性,但不再作为新项目的默认教学入口。
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
const text = await client.response.createTextResult({
|
|
82
|
+
model: 'openai/gpt-5',
|
|
83
|
+
input: '请总结这个请求。',
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const json = await client.response.experimental.createJson({
|
|
87
|
+
model: 'openai/gpt-5',
|
|
88
|
+
input: '返回 {"ok":true}。',
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Cloud API Quickstart
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
import { QiniuAI } from '@bowenqt/qiniu-ai-sdk/qiniu';
|
|
96
|
+
|
|
97
|
+
const client = new QiniuAI({
|
|
98
|
+
apiKey: process.env.QINIU_API_KEY || '',
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
const result = await client.chat.create({
|
|
102
|
+
model: 'gemini-2.5-flash',
|
|
103
|
+
messages: [{ role: 'user', content: '用一句话介绍七牛 AI SDK。' }],
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
console.log(result.choices[0]?.message?.content ?? '');
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Agent Quickstart
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { z } from 'zod';
|
|
113
|
+
import { zodToJsonSchema } from '@bowenqt/qiniu-ai-sdk/ai-tools';
|
|
114
|
+
import { QiniuAI } from '@bowenqt/qiniu-ai-sdk/qiniu';
|
|
115
|
+
import { generateText } from '@bowenqt/qiniu-ai-sdk/core';
|
|
116
|
+
|
|
117
|
+
const calculatorSchema = z.object({ a: z.number(), b: z.number() });
|
|
118
|
+
|
|
119
|
+
const client = new QiniuAI({
|
|
120
|
+
apiKey: process.env.QINIU_API_KEY || '',
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
const result = await generateText({
|
|
124
|
+
client,
|
|
125
|
+
model: 'gemini-2.5-flash',
|
|
126
|
+
prompt: '42 乘以 17 等于多少?',
|
|
127
|
+
tools: {
|
|
128
|
+
calculator: {
|
|
129
|
+
description: '做乘法计算',
|
|
130
|
+
parameters: zodToJsonSchema(calculatorSchema),
|
|
131
|
+
execute: async (args) => {
|
|
132
|
+
const { a, b } = calculatorSchema.parse(args);
|
|
133
|
+
return a * b;
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
console.log(result.text);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Node Agent Quickstart
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
import { z } from 'zod';
|
|
146
|
+
import { zodToJsonSchema } from '@bowenqt/qiniu-ai-sdk/ai-tools';
|
|
147
|
+
import { createAgent } from '@bowenqt/qiniu-ai-sdk/core';
|
|
148
|
+
import { createNodeQiniuAI } from '@bowenqt/qiniu-ai-sdk/node';
|
|
149
|
+
|
|
150
|
+
const nowSchema = z.object({});
|
|
151
|
+
|
|
152
|
+
const client = createNodeQiniuAI({
|
|
153
|
+
apiKey: process.env.QINIU_API_KEY || '',
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
const agent = createAgent({
|
|
157
|
+
client,
|
|
158
|
+
model: 'gemini-2.5-flash',
|
|
159
|
+
tools: {
|
|
160
|
+
now: {
|
|
161
|
+
description: '返回当前 ISO 时间戳',
|
|
162
|
+
parameters: zodToJsonSchema(nowSchema),
|
|
163
|
+
execute: async () => ({ now: new Date().toISOString() }),
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
const result = await agent.run({
|
|
169
|
+
prompt: '先调用 now 工具,再说明为什么 ISO 时间戳适合做系统集成。',
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
console.log(result.text);
|
|
173
|
+
```
|
|
73
174
|
|
|
74
175
|
### v0.46 迁移表
|
|
75
176
|
|
|
@@ -113,6 +214,45 @@ npm install ioredis
|
|
|
113
214
|
npm install pg
|
|
114
215
|
```
|
|
115
216
|
|
|
217
|
+
### 能力元数据
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
import {
|
|
221
|
+
getModelCapabilities,
|
|
222
|
+
getModuleMaturity,
|
|
223
|
+
listModels,
|
|
224
|
+
} from '@bowenqt/qiniu-ai-sdk/qiniu';
|
|
225
|
+
|
|
226
|
+
const featuredChatModels = listModels({ type: 'chat' }).slice(0, 3);
|
|
227
|
+
const responseApi = getModuleMaturity('ResponseAPI');
|
|
228
|
+
const gemini = getModelCapabilities('gemini-2.5-flash');
|
|
229
|
+
|
|
230
|
+
console.log(featuredChatModels.map((model) => model.id));
|
|
231
|
+
console.log(responseApi?.maturity); // beta
|
|
232
|
+
console.log(gemini?.capabilities);
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Worktree 交付流
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# 初始化 integration worktree,并建立默认 .worktrees/ 目录
|
|
239
|
+
qiniu-ai worktree init
|
|
240
|
+
|
|
241
|
+
# 从 codex/vnext-integration 派生 lane
|
|
242
|
+
qiniu-ai worktree spawn --lane foundation
|
|
243
|
+
|
|
244
|
+
# 查看当前 worktree 与推断出来的 lane
|
|
245
|
+
qiniu-ai worktree status
|
|
246
|
+
|
|
247
|
+
# 把 lane 合流回 integration branch
|
|
248
|
+
qiniu-ai worktree integrate --lane foundation
|
|
249
|
+
|
|
250
|
+
# 运行该 lane 的默认 live probe
|
|
251
|
+
qiniu-ai verify live --lane runtime
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
适用于跨模块的大规模 SDK 演进:root 工作区只负责编排和集成,每个 lane 只负责一组子系统。
|
|
255
|
+
|
|
116
256
|
### Kodo 审计 Sink
|
|
117
257
|
|
|
118
258
|
```typescript
|
|
@@ -130,36 +270,6 @@ const logger = auditLogger({
|
|
|
130
270
|
});
|
|
131
271
|
```
|
|
132
272
|
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## 🚀 快速开始
|
|
136
|
-
|
|
137
|
-
```typescript
|
|
138
|
-
import { QiniuAI } from '@bowenqt/qiniu-ai-sdk/qiniu';
|
|
139
|
-
|
|
140
|
-
const client = new QiniuAI({
|
|
141
|
-
apiKey: 'Sk-xxxxxxxxxxxxxxxx',
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
// 对话补全
|
|
145
|
-
const chat = await client.chat.create({
|
|
146
|
-
model: 'gemini-2.5-flash',
|
|
147
|
-
messages: [{ role: 'user', content: '你好!' }],
|
|
148
|
-
});
|
|
149
|
-
console.log(chat.choices[0].message.content);
|
|
150
|
-
|
|
151
|
-
// 流式对话
|
|
152
|
-
const stream = await client.chat.createStream({
|
|
153
|
-
model: 'gemini-2.5-flash',
|
|
154
|
-
messages: [{ role: 'user', content: '简单介绍一下 AI' }],
|
|
155
|
-
});
|
|
156
|
-
for await (const chunk of stream) {
|
|
157
|
-
process.stdout.write(chunk.choices[0]?.delta?.content || '');
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
273
|
## 🤖 Agent 使用
|
|
164
274
|
|
|
165
275
|
### 使用 generateText 执行工具
|
|
@@ -241,6 +351,7 @@ const videoTask = await client.video.create({
|
|
|
241
351
|
});
|
|
242
352
|
const videoResult = await client.video.waitForCompletion(videoTask.id);
|
|
243
353
|
console.log(videoResult.task_result?.videos[0].url);
|
|
354
|
+
// videoTask.cancel() 当前会显式报错,因为远端媒体任务取消还不支持
|
|
244
355
|
|
|
245
356
|
// viduq 视频生成 (v0.36.0+)
|
|
246
357
|
const viduqTask = await client.video.create({
|
|
@@ -251,6 +362,7 @@ const viduqTask = await client.video.create({
|
|
|
251
362
|
// 使用完整句柄进行可靠轮询
|
|
252
363
|
const viduqResult = await client.video.waitForCompletion(viduqTask);
|
|
253
364
|
console.log(viduqResult.task_result?.videos[0].url);
|
|
365
|
+
// 如需停止本地等待,请使用 AbortSignal;viduqTask.cancel() 当前仍为 fail-fast
|
|
254
366
|
|
|
255
367
|
// kling-image-o1 高质量图像 (v0.36.0+)
|
|
256
368
|
const klingImg = await client.image.generate({
|
|
@@ -489,17 +601,49 @@ await instance.kill();
|
|
|
489
601
|
|
|
490
602
|
---
|
|
491
603
|
|
|
492
|
-
## 🛠️ CLI
|
|
604
|
+
## 🛠️ CLI
|
|
605
|
+
|
|
606
|
+
### 项目初始化与诊断
|
|
607
|
+
|
|
608
|
+
```bash
|
|
609
|
+
npx qiniu-ai init --template chat
|
|
610
|
+
npx qiniu-ai init --template agent
|
|
611
|
+
npx qiniu-ai init --template node-agent
|
|
612
|
+
npx qiniu-ai doctor --template agent
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
### MCP Server
|
|
493
616
|
|
|
494
617
|
运行内置的七牛 MCP Server:
|
|
495
618
|
|
|
619
|
+
当前内置 `QiniuMCPServer` 提供的 built-in tools 为:
|
|
620
|
+
|
|
621
|
+
- `qiniu_chat`
|
|
622
|
+
- `qiniu_ocr`
|
|
623
|
+
- `qiniu_image_censor`
|
|
624
|
+
- `qiniu_video_censor`
|
|
625
|
+
- `qiniu_image_generate`
|
|
626
|
+
|
|
627
|
+
当前不包含 `qiniu_vframe`。如果你需要抽帧,请直接使用 SDK 的 `@bowenqt/qiniu-ai-sdk/ai-tools` / `QINIU_TOOLS` 或 asset resolver 能力。
|
|
628
|
+
|
|
496
629
|
```bash
|
|
497
630
|
npx qiniu-mcp-server
|
|
498
631
|
```
|
|
499
632
|
|
|
633
|
+
### Skill CLI
|
|
634
|
+
|
|
635
|
+
```bash
|
|
636
|
+
npx qiniu-ai doctor --template node-agent # 检查环境、peer deps 与导入路径
|
|
637
|
+
npx qiniu-ai skill list # 列出已安装 skills
|
|
638
|
+
npx qiniu-ai skill add <url> # 从 manifest URL 安装远端 skill
|
|
639
|
+
npx qiniu-ai skill add <url> --sha256 <hash> # 附带完整性校验
|
|
640
|
+
npx qiniu-ai skill verify # 校验 lockfile 与本地文件
|
|
641
|
+
npx qiniu-ai skill verify --fix # 从本地目录重建 lockfile
|
|
642
|
+
npx qiniu-ai skill remove <name> # 删除 skill 与 lockfile 条目
|
|
643
|
+
```
|
|
644
|
+
|
|
500
645
|
**环境变量:**
|
|
501
|
-
- `QINIU_API_KEY` —
|
|
502
|
-
- `QINIU_ACCESS_KEY` / `QINIU_SECRET_KEY` — 抽帧/签名操作的密钥对
|
|
646
|
+
- `QINIU_API_KEY` — 运行上述内置 MCP tools 所需的 API Key
|
|
503
647
|
|
|
504
648
|
---
|
|
505
649
|
|
package/bin/qiniu-ai.mjs
CHANGED
|
@@ -3,11 +3,18 @@
|
|
|
3
3
|
* Qiniu AI CLI — Skill management and SDK utilities.
|
|
4
4
|
*
|
|
5
5
|
* Usage:
|
|
6
|
+
* npx qiniu-ai init --template <chat|agent|node-agent>
|
|
7
|
+
* npx qiniu-ai doctor [--template <chat|agent|node-agent>] [--lane <name>]
|
|
8
|
+
* npx qiniu-ai worktree <init|spawn|status|integrate>
|
|
9
|
+
* npx qiniu-ai verify live --lane <name>
|
|
6
10
|
* npx qiniu-ai skill list [--dir <skills-dir>]
|
|
7
11
|
* npx qiniu-ai skill verify [--fix] [--dir <skills-dir>]
|
|
8
12
|
* npx qiniu-ai skill remove <name> [--dir <skills-dir>]
|
|
9
13
|
*/
|
|
10
14
|
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
11
16
|
import { runCLI } from '../dist/cli/skill-cli.mjs';
|
|
12
17
|
|
|
13
|
-
runCLI(process.argv.slice(2)
|
|
18
|
+
await runCLI(process.argv.slice(2), {
|
|
19
|
+
packageRoot: fileURLToPath(new URL('..', import.meta.url)),
|
|
20
|
+
});
|
package/dist/ai/agent-graph.d.ts
CHANGED
|
@@ -9,12 +9,14 @@ import type { ResponseFormat } from '../lib/types';
|
|
|
9
9
|
import type { RegisteredTool } from '../lib/tool-registry';
|
|
10
10
|
import type { Skill } from '../modules/skills/types';
|
|
11
11
|
import type { ReferenceMode } from '../modules/skills/reference-mode';
|
|
12
|
+
import type { Guardrail } from './guardrails';
|
|
12
13
|
import { type TokenEstimatorConfig } from '../lib/token-estimator';
|
|
13
14
|
import type { MemoryManager } from './memory';
|
|
14
15
|
import type { AgentState, InternalMessage, StepResult, AgentGraphEvents } from './internal-types';
|
|
15
16
|
import type { ApprovalConfig } from './tool-approval';
|
|
16
17
|
import type { Checkpointer, PendingApproval } from './graph/checkpointer';
|
|
17
18
|
import { type AgentMetrics } from '../lib/metrics';
|
|
19
|
+
import type { ControlPlaneRunMetadata, CriticPolicy, PricePolicy, ReflectionLimits, TraceStore, VerifierPolicy } from './control-plane';
|
|
18
20
|
/** AgentGraph options */
|
|
19
21
|
export interface AgentGraphOptions {
|
|
20
22
|
client: LanguageModelClient;
|
|
@@ -45,12 +47,28 @@ export interface AgentGraphOptions {
|
|
|
45
47
|
memory?: MemoryManager;
|
|
46
48
|
/** Thread ID for memory isolation (used with memory option) */
|
|
47
49
|
threadId?: string;
|
|
50
|
+
/** Guardrails applied across runtime phases */
|
|
51
|
+
guardrails?: Guardrail[];
|
|
52
|
+
/** Agent ID for guardrail attribution */
|
|
53
|
+
agentId?: string;
|
|
48
54
|
/** Auto-retry configuration for RecoverableError handling */
|
|
49
55
|
autoRetry?: AutoRetryConfig;
|
|
50
56
|
/** Skill reference injection mode (default: 'none') */
|
|
51
57
|
skillReferenceMode?: ReferenceMode;
|
|
52
58
|
/** Token-level event callback for streaming. Fault-isolated at predict-node level. */
|
|
53
59
|
onTokenEvent?: (event: TokenEvent) => void;
|
|
60
|
+
/** Optional structured trace sink for control-plane integrations */
|
|
61
|
+
traceStore?: TraceStore;
|
|
62
|
+
/** Optional model pricing lookup for per-step cost attribution */
|
|
63
|
+
pricePolicy?: PricePolicy;
|
|
64
|
+
/** Optional run metadata/revision references attached to emitted traces */
|
|
65
|
+
runMetadata?: ControlPlaneRunMetadata;
|
|
66
|
+
/** Optional critic policy for bounded reflection scaffolding */
|
|
67
|
+
criticPolicy?: CriticPolicy;
|
|
68
|
+
/** Optional verifier policy for bounded reflection scaffolding */
|
|
69
|
+
verifierPolicy?: VerifierPolicy;
|
|
70
|
+
/** Optional stop conditions for bounded reflection scaffolding */
|
|
71
|
+
reflectionLimits?: ReflectionLimits;
|
|
54
72
|
}
|
|
55
73
|
/** Token-level event emitted during graph execution */
|
|
56
74
|
export type TokenEvent = {
|
|
@@ -164,6 +182,7 @@ export declare class AgentGraph {
|
|
|
164
182
|
private compactionOccurred;
|
|
165
183
|
private droppedSkills;
|
|
166
184
|
private droppedMessages;
|
|
185
|
+
private traceSteps;
|
|
167
186
|
constructor(options: AgentGraphOptions);
|
|
168
187
|
/**
|
|
169
188
|
* Get current metrics snapshot.
|
|
@@ -236,5 +255,7 @@ export declare class AgentGraph {
|
|
|
236
255
|
* Each skill becomes a separate system message with _meta.
|
|
237
256
|
*/
|
|
238
257
|
private injectSkills;
|
|
258
|
+
private resolveToolTraceSource;
|
|
259
|
+
private flushRunTrace;
|
|
239
260
|
}
|
|
240
261
|
//# sourceMappingURL=agent-graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-graph.d.ts","sourceRoot":"","sources":["../../src/ai/agent-graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-graph.d.ts","sourceRoot":"","sources":["../../src/ai/agent-graph.ts"],"names":[],"mappings":"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"}
|