@tianacloud/agent-skills 1.0.10 → 1.0.12
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 +9 -8
- package/bin/tiana-skills.mjs +3 -2
- package/package.json +2 -2
- package/plugin.json +2 -2
- package/skills/tiana/SKILL.md +11 -7
- package/skills/tiana/references/connector-updates.md +39 -0
- package/skills/tiana/references/getting-started.md +40 -12
- package/skills/tiana/references/windows-install.md +1 -1
- package/skills/tiana-function/SKILL.md +38 -0
- package/skills/tiana-function/references/commands.md +115 -0
- package/skills/tiana-function/references/go-backend.md +116 -0
- package/skills/tiana-git/SKILL.md +10 -7
- package/skills/tiana-git/references/source-releases.md +5 -5
- package/skills/tiana-sqlite/SKILL.md +9 -6
- package/skills/tiana-web/SKILL.md +32 -13
- package/skills/tiana-web/references/backend-apps.md +40 -0
- package/skills/tiana-web/references/csr-apps.md +56 -4
- package/skills/tiana-web/references/files.md +4 -0
- package/skills/tiana-web/references/function-templates.md +74 -0
- package/skills/tiana-web/references/share-template.md +19 -6
- package/skills/tiana-web/references/storage-and-assets.md +49 -0
- package/skills/tiana-web/references/template-files.md +95 -0
- package/skills/tiana-web/references/template-init.md +13 -2
- package/skills/tiana-web/scripts/pack-template.py +150 -7
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Tiana Agent Skills
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
五个基础技能覆盖 Tiana 账号与实例、SQLite、Git、后端服务和 Web 应用。应用模板由在线目录提供,用户描述需求后,Agent 根据实时目录决定使用模板还是直接开发。
|
|
4
4
|
|
|
5
5
|
## 从 npm 安装
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
npx --yes @tianacloud/agent-skills@latest install --agent codex
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
安装器调用精确依赖的 skills 工具,把 npm
|
|
13
|
+
安装器调用精确依赖的 skills 工具,把 npm 包中的全部技能复制到客户端的持久目录;Codex 当前工具使用 `~/.agents/skills/`。不传目标时选择客户端:
|
|
14
14
|
|
|
15
15
|
```sh
|
|
16
16
|
npx --yes @tianacloud/agent-skills@latest install
|
|
@@ -22,22 +22,23 @@ npx --yes @tianacloud/agent-skills@latest install
|
|
|
22
22
|
npx --yes @tianacloud/agent-skills@latest install --dir /path/to/client/skills
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Windows PowerShell 使用 `npx.cmd
|
|
25
|
+
Windows PowerShell 使用 `npx.cmd`。目录可以含空格,用引号包住。重复安装会更新包内全部技能并补齐新版新增技能,其他技能保留。安装完成后让客户端重载技能或开始新会话。
|
|
26
26
|
|
|
27
|
-
WorkBuddy、豆包按所用版本的目录/ZIP
|
|
27
|
+
WorkBuddy、豆包按所用版本的目录/ZIP 导入方式加载这五个目录,保留 SKILL.md 和 references。若要求 ZIP,可将每个技能目录的内容打包,SKILL.md 位于包根部。WorkBuddy 专用本地化 ZIP 由维护者构建流程提供;本仓验证 ZIP 格式和内容,不声称已验收这些客户端的运行行为。
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## 五个入口
|
|
30
30
|
|
|
31
31
|
| 技能 | 职责 |
|
|
32
32
|
| --- | --- |
|
|
33
33
|
| [tiana](skills/tiana/SKILL.md) | CLI 安装、登录、账号额度和通用实例管理 |
|
|
34
34
|
| [tiana-sqlite](skills/tiana-sqlite/SKILL.md) | SQL、表结构、SDK 连接和数据库分支 |
|
|
35
35
|
| [tiana-git](skills/tiana-git/SKILL.md) | Git 实例、原生仓库操作和源码版本同步 |
|
|
36
|
+
| [tiana-function](skills/tiana-function/SKILL.md) | Go 后端服务源码、构建发布、参数/CORS 与数据库后端 |
|
|
36
37
|
| [tiana-web](skills/tiana-web/SKILL.md) | 实时模板选择、工程与数据初始化、通用开发、构建发布 |
|
|
37
38
|
|
|
38
39
|
Web 技能每次任务都实际执行 `tiana web list-template --json`,使用当前 name/description 判断需求。模板 ZIP 原样下载解压到独立项目目录;Agent 按根部 metadata.json 替换变量、先 schema 后 seeds。模板源码和制作规范见 [template-apps](https://github.com/tianacloud/template-apps),客户安装模板由 CLI 和 MGR 目录完成。
|
|
39
40
|
|
|
40
|
-
技能安装器只安装技能。Agent 首次执行 Tiana 任务时检查 CLI,缺少时自动执行下面的安装并继续原任务;CLI 要求 1.0.
|
|
41
|
+
技能安装器只安装技能。Agent 首次执行 Tiana 任务时检查 CLI,缺少时自动执行下面的安装并继续原任务;CLI 要求 1.0.4 或更新正式版,需要 Node.js 20+。
|
|
41
42
|
|
|
42
43
|
```sh
|
|
43
44
|
npm install -g @tianacloud/cli@latest --registry=https://registry.npmjs.org/
|
|
@@ -55,9 +56,9 @@ WorkBuddy Connector 固定 online,配置和当前使用说明见 [Connector](d
|
|
|
55
56
|
|
|
56
57
|
## 检查与更新
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
各 Tiana 技能调用 CLI 检查两个 npm 包的 latest。两个包各自最多每 24 小时尝试检查一次,CLI 普通终端与 Skills 共用每 24 小时一次提醒。Agent 发现 CLI 或 Skills 新正式版后自动安装并核验,无需再次询问;should_notify 不限制自动更新。每个会话首次检查后简短报告检查、两个包的更新结果及新增技能。
|
|
59
60
|
|
|
60
|
-
|
|
61
|
+
CLI 在当前实际使用的安装位置升级并核验版本和所需命令;Skills 安装新版包中的全部技能,覆盖已有技能并补齐新增技能,核验 metadata.version 与宿主加载结果。Connector 只分发初始版本,后续两个包独立更新,无需等待 Connector 发版。已加载的会话不会因磁盘替换而自动更换指令;需要重载时明确提示。具体步骤及失败后的继续条件见 [开始使用](skills/tiana/references/getting-started.md#更新),各宿主安装位置及加载核验见[连接器与宿主中的自动更新](skills/tiana/references/connector-updates.md)。
|
|
61
62
|
|
|
62
63
|
## 维护与其他分发格式
|
|
63
64
|
|
package/bin/tiana-skills.mjs
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { cp, mkdir, rm, realpath, readFile, mkdtemp, rename } from 'node:fs/promises';
|
|
2
|
+
import { cp, mkdir, rm, realpath, readFile, readdir, mkdtemp, rename } from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { createRequire } from 'node:module';
|
|
6
6
|
import { spawnSync } from 'node:child_process';
|
|
7
7
|
|
|
8
8
|
const root = fileURLToPath(new URL('../', import.meta.url));
|
|
9
|
-
const names = ['tiana', 'tiana-sqlite', 'tiana-git', 'tiana-web'];
|
|
10
9
|
const usage = 'tiana-skills install [--agent NAME | --dir PATH]';
|
|
11
10
|
try {
|
|
12
11
|
const args = process.argv.slice(2);
|
|
@@ -24,6 +23,8 @@ try {
|
|
|
24
23
|
}
|
|
25
24
|
if (agent && directory) throw new Error('Choose --agent or --dir.');
|
|
26
25
|
const source = path.join(root, 'skills');
|
|
26
|
+
const names = (await readdir(source, { withFileTypes: true }))
|
|
27
|
+
.filter(entry => entry.isDirectory()).map(entry => entry.name).sort();
|
|
27
28
|
const pkg = JSON.parse(await readFile(path.join(root, 'package.json'), 'utf8'));
|
|
28
29
|
if (directory) {
|
|
29
30
|
const target = path.resolve(directory);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tianacloud/agent-skills",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Tiana Cloud Skills for accounts, SQLite, Git and Web applications",
|
|
3
|
+
"version": "1.0.12",
|
|
4
|
+
"description": "Tiana Cloud Skills for accounts, SQLite, Git, Functions and Web applications",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
package/plugin.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "tiana",
|
|
4
|
-
"version": "1.0.
|
|
5
|
-
"description": "Tiana Cloud account, SQLite, Git and Web application workflows",
|
|
4
|
+
"version": "1.0.12",
|
|
5
|
+
"description": "Tiana Cloud account, SQLite, Git, Functions and Web application workflows",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Tiana Cloud",
|
|
8
8
|
"url": "https://github.com/tianacloud"
|
package/skills/tiana/SKILL.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tiana
|
|
3
|
-
description: 使用 Tiana Cloud 管理实例、安装 CLI、登录和恢复账号会话。通用 Tiana 任务从此技能开始;Web 应用创建发布使用 tiana-web,数据库和分支使用 tiana-sqlite,Git 仓库和源码同步使用 tiana-git。
|
|
3
|
+
description: 使用 Tiana Cloud 管理实例、安装 CLI、登录和恢复账号会话。通用 Tiana 任务从此技能开始;Web 应用创建发布使用 tiana-web,数据库和分支使用 tiana-sqlite,Git 仓库和源码同步使用 tiana-git,后端服务与数据库后端使用 tiana-function。
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Tiana Cloud
|
|
7
|
-
version: "1.0.
|
|
7
|
+
version: "1.0.12"
|
|
8
8
|
source: https://github.com/tianacloud/agent-skills/tree/main/skills/tiana
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -16,19 +16,23 @@ metadata:
|
|
|
16
16
|
|
|
17
17
|
**本会话首次使用任一 Tiana 技能时,先完成以下步骤,再开始登录、查询模板或操作应用:**
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
2. CLI 满足最低版本后,**仍须实际执行** `tiana version check --skills-version 1.0.10 --json`;版本号取实际加载的 metadata.version。这一步检查是否有更新版本。
|
|
21
|
-
3. 实际发起检查命令后,才在会话中记为已尝试,并保留返回结果或执行错误。仅运行 `tiana version` 只完成第 1 步。
|
|
19
|
+
CLI 与 Skills 各自独立比较本包的 npm 最新正式版。下面的版本检查与安装只访问公共包仓库,不需要 Tiana 登录,不操作 Tiana 云端资源;用户要求暂不登录或不操作云端资源时仍执行。用户明确要求离线、禁止联网或禁止安装时遵从该限制。
|
|
22
20
|
|
|
23
|
-
|
|
21
|
+
1. 执行 `tiana version`,按[开始使用](references/getting-started.md)核验最低版本;缺少 CLI 或版本过低时,自动安装 npm latest 正式版并重新核验。
|
|
22
|
+
2. CLI 满足最低版本后,从本会话实际加载的 SKILL.md 的 `metadata.version` 取得 `SKILLS_VERSION`,在同一次 shell 调用中赋值并**实际执行** `tiana version check --skills-version "$SKILLS_VERSION" --json`。这一步检查是否有更新版本。
|
|
23
|
+
3. `updates` 中 CLI 或 Skills 有新正式版时,**自动安装各项实际返回的 `latest_version`,无需再次询问**;`should_notify=false` 也执行。Skills 按新版包完整安装,覆盖已有技能并补齐新增技能。各连接器初始版本仅用于分发,后续更新独立于连接器发版;安装目标及重载按[更新流程](references/getting-started.md#更新),连接器内使用时再读其中链接的宿主说明。
|
|
24
|
+
4. 在对话中简短报告实际 CLI/Skills 版本、检查状态与更新结果(包括新增技能及是否需要重载);检查不可用时明确说明未能确认是否有新版,更新失败时说明实际错误。
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
实际发起检查命令后才记录已尝试,保留检查结果或执行错误,以及两个包的安装与核验结果。各 Tiana 技能共享这份记录;后续轮次、重复加载或切换技能复用记录,每个包失败后本会话不自动重试。上下文压缩或任务交接时保留记录,新会话重新检查。仅运行 `tiana version` 只完成第 1 步。
|
|
27
|
+
|
|
28
|
+
CLI 仍管理检查缓存和共同的 24 小时提醒额度;该额度不限制自动更新或本会话首次结果报告。更新核验完成后继续原任务;失败时按更新流程判断可否继续。
|
|
26
29
|
|
|
27
30
|
## 选择工作流程
|
|
28
31
|
|
|
29
32
|
| 任务 | 技能 |
|
|
30
33
|
| --- | --- |
|
|
31
34
|
| 创建、修改、预览、发布 Web 应用 | [tiana-web](../tiana-web/SKILL.md) |
|
|
35
|
+
| Go 后端服务、源码、参数及编译发布 | [tiana-function](../tiana-function/SKILL.md) |
|
|
32
36
|
| SQLite 查询、连接、建表及数据库分支 | [tiana-sqlite](../tiana-sqlite/SKILL.md) |
|
|
33
37
|
| Git 实例、仓库、源码版本同步 | [tiana-git](../tiana-git/SKILL.md) |
|
|
34
38
|
| 登录、账号、额度、通用实例管理 | 本技能 |
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 连接器与宿主中的自动更新
|
|
2
|
+
|
|
3
|
+
在任意连接器中首次使用 Tiana、发现 CLI/Skills 新版或安装后仍运行旧版时读取。更新决策与会话记录按[开始使用](getting-started.md#更新)。Connector 提供初始 CLI 和技能;Agent 独立跟踪两个 npm 包的正式版,自动更新 CLI 与整套 Skills,安装新增技能,使用各自实际返回的目标版本。后续更新通过这两个 npm 包分发,无需等待 Connector 重新发版。
|
|
4
|
+
|
|
5
|
+
## CLI:沿用当前托管安装
|
|
6
|
+
|
|
7
|
+
在 Agent 实际执行命令的环境定位运行时和安装位置;CLI 需要 Node.js 20+,Skills 安装器需要 Node.js 22.20+。宿主提供隔离运行时或安装 prefix 时沿用其环境;系统终端的全局 npm 列表不能代表连接器中的安装。先核对:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
command -v node
|
|
11
|
+
command -v npm
|
|
12
|
+
command -v tiana
|
|
13
|
+
npm prefix --global
|
|
14
|
+
npm root --global
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Windows PowerShell 使用 `Get-Command node,npm.cmd,tiana.cmd`、`npm.cmd prefix --global` 和 `npm.cmd root --global`。沿入口解析符号链接或 npm shim,确认实际 `@tianacloud/cli/package.json` 所在位置及版本。
|
|
18
|
+
|
|
19
|
+
当前 CLI 包位于返回的 npm root 下时,沿用该 Node/npm、prefix 和 PATH,执行开始使用中的精确版本全局安装。若当前 shell 的 npm prefix 与实际 CLI 所属位置不同,从实际包位置确认原安装 prefix,再用相应 npm 显式指定该 prefix:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
npm install -g --prefix "CLI_PREFIX" @tianacloud/cli@VERSION --registry=https://registry.npmjs.org/
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
CLI_PREFIX 来自实际安装位置,VERSION 来自更新回执。后续独立命令调用都沿用已核实的命令路径与运行环境,包括 Git helper 所需 PATH 和本任务 TIANA_API_ORIGIN。安装后核验实际入口的 `tiana version` 及任务所需命令帮助。安装位置取自当前宿主,不在指令中固化某个客户端的私有目录。
|
|
26
|
+
|
|
27
|
+
## Skills:更新整套并补齐新增目录
|
|
28
|
+
|
|
29
|
+
从宿主返回的当前 SKILL.md 绝对路径确认实际技能根目录:其直接子目录分别包含各技能的 SKILL.md。连接器内置技能使用其已安装的 skills 根目录;普通目录安装沿用原目标。该目录就是开始使用中 `install --dir "SKILLS_DIR"` 的目标。
|
|
30
|
+
|
|
31
|
+
执行新版 Skills 包的完整安装,不指定旧技能名单。安装器返回的名单包含新版包全部技能,因此连接器初始包没有的新增技能也会安装。逐份核验 metadata.version,读取本任务所需的新技能和引用;其他已安装技能由安装器保留。
|
|
32
|
+
|
|
33
|
+
让宿主重载技能,或提示用户开始新会话;随后核对实际加载路径、版本及新增技能是否出现在技能列表。若存在同名副本,按实际加载路径处理更新,避免继续读取旧副本。实际目录不可写或重载后仍只加载旧内容时,报告具体安装或宿主加载阻塞;分别报告文件安装与技能启用状态。
|
|
34
|
+
|
|
35
|
+
## 宿主权限与加载验收
|
|
36
|
+
|
|
37
|
+
安装目录尚未出现在任务 PATH 时,后续调用使用已核实的完整 CLI 路径,或在每次命令调用中传入相应 PATH。宿主可能单独显示安装或新命令入口的执行授权;按当前权限及用户已授权范围处理后继续,分别报告执行授权与版本检查结果。
|
|
38
|
+
|
|
39
|
+
在真实宿主中验证:CLI/Skills 分别发现新版时各自升级;should_notify=false 仍升级;实际 CLI 入口使用新版本;新版包中新增技能目录安装并可加载;重启后核对实际版本与登录状态。归档内容、本地安装夹具和文件核验分别记录,结合宿主中的实际加载结果报告验收结论。
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# 开始使用
|
|
2
2
|
|
|
3
|
-
在 Agent 实际执行命令的环境检查 `tiana version`。本技能要求 CLI 1.0.4 或更新正式版,具备分步登录、sqlite、git、web、file、list-template/init-template 和 version check。CLI
|
|
3
|
+
在 Agent 实际执行命令的环境检查 `tiana version`。本技能要求 CLI 1.0.4 或更新正式版,具备分步登录、sqlite、git、web、file、list-template/init-template 和 version check。CLI 不存在、版本过低或无法核实时,直接执行下面的 npm latest 安装并重新核验,无需再次询问;核验通过后再执行资源操作。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
连接器环境中,安装或更新前先按[宿主说明](connector-updates.md)定位实际 Node/npm、CLI 安装 prefix 和技能根目录,沿用宿主运行环境。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
最低版本是可用性基线;通过后仍须检查并自动安装已发现的新正式版。0.x、预发行版、dev 或无法核实的版本不满足基线。CLI 与 Skills 独立编号,`--skills-version` 传实际加载的 Skills 版本。
|
|
8
8
|
|
|
9
9
|
## 安装
|
|
10
10
|
|
|
@@ -16,25 +16,55 @@ npm install -g @tianacloud/cli@latest --registry=https://registry.npmjs.org/
|
|
|
16
16
|
|
|
17
17
|
该包提供 `tiana` 和 `git-remote-tiana`,npm optionalDependencies 选择当前平台原生包;保持 optional 依赖启用,`--ignore-scripts` 也可以正常安装。缺少平台包时按实际错误修复安装,不能只凭命令入口存在宣称成功。Windows PowerShell 使用 `npm.cmd`,详情见 [Windows 安装](windows-install.md)和 [Git helper 排查](windows-git-helper.md)。
|
|
18
18
|
|
|
19
|
-
安装 Skills 使用 Node.js 22.20
|
|
19
|
+
安装 Skills 使用 Node.js 22.20+;CLIENT 取实际受支持的客户端标识:
|
|
20
20
|
|
|
21
21
|
```sh
|
|
22
|
-
npx --yes @tianacloud/agent-skills@latest install --agent
|
|
22
|
+
npx --yes @tianacloud/agent-skills@latest install --agent CLIENT
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
其他客户端按自己的安装目录使用 `install --dir PATH
|
|
25
|
+
其他客户端按自己的安装目录使用 `install --dir PATH`,或不传目标运行客户端选择流程。Skills 来自 npm 包内全部技能目录,安装后是持久文件副本。导入 Skill 与安装 CLI 是两步。
|
|
26
26
|
|
|
27
27
|
核验安装后,先完成入口 SKILL.md 中的会话更新检查,再执行 `tiana status`,按实际结果继续任务或恢复登录。用户同时要求创建应用时,完成安装和登录后继续原始需求。当前会话可以读取新安装的 SKILL.md 及其引用文件;宿主必须重载才可使用时,明确提示重载,并保留应用需求及本次环境选择。安装失败时报告实际阶段;没有执行过的登录、资源创建或发布仍然未知。
|
|
28
28
|
|
|
29
29
|
## 更新
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
CLI 与 Skills 独立编号,分别与自身 npm latest 比较。版本检查和 npm 安装访问公共包仓库,不要求 Tiana 登录,也不查询或修改 Tiana 云端资源;“暂不登录/不操作云端资源”不影响这一步。用户明确要求离线、禁止联网或禁止安装时遵从其限制。
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
会话检查顺序和记录规则见入口 [SKILL.md](../SKILL.md#每个会话一次的更新检查)。最低版本核验通过后,从本会话实际加载的 SKILL.md 的 metadata.version 读取 SKILLS_VERSION,在同一次 shell 调用中赋值后执行 `tiana version check --skills-version "$SKILLS_VERSION" --json`。结果是直接 JSON,包含 should_notify、check_status 和 updates。逐项处理 package 为 `@tianacloud/cli` 或 `@tianacloud/agent-skills` 的新正式版,直接安装对应 latest_version,无需再次询问。should_notify 只控制提醒,值为 false 或 check_status=cached 时也处理已返回的更新项。
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
保留本会话实际检查结果、执行错误及两个包的安装与核验结果;每个包最多自动尝试安装一次。首次检查和更新结束后,在对话中简短报告实际 CLI/Skills 版本、检查状态与各包结果、新增技能及重载要求。检查不可用时说明未能确认是否有新版;后续复用本会话记录时无需重复报告。
|
|
36
36
|
|
|
37
|
-
CLI
|
|
37
|
+
### CLI 自动更新
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
npm install -g @tianacloud/cli@VERSION --registry=https://registry.npmjs.org/
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
VERSION 取 CLI 更新项的 latest_version。Windows PowerShell 使用 `npm.cmd`。升级使用 Agent 实际调用的 CLI 所属 Node/npm 和安装 prefix;保留宿主注入的运行环境。连接器的实际安装位置与运行环境按[连接器与宿主中的自动更新](connector-updates.md)核验。
|
|
44
|
+
|
|
45
|
+
安装后核验实际 `tiana version` 与目标版本一致,以及本任务所需命令的 `--help`。npm 安装成功但仍运行旧版本时,按 [PATH 与 helper 排查](windows-git-helper.md)核对命令位置,完成前报告为尚未生效。
|
|
46
|
+
|
|
47
|
+
### Skills 自动更新与新增技能
|
|
48
|
+
|
|
49
|
+
VERSION 取 Skills 更新项的 latest_version。原来通过受支持客户端安装的,使用同一 CLIENT:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
npx --yes @tianacloud/agent-skills@VERSION install --agent CLIENT
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
目录安装或连接器内置技能使用已核实的实际技能根目录(其中直接包含各技能目录),安装整个新版包:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
npx --yes @tianacloud/agent-skills@VERSION install --dir "SKILLS_DIR"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Windows PowerShell 使用 `npx.cmd`。从当前加载的 SKILL.md 实际路径确认安装目标;重用原安装方式,各连接器均按[宿主说明](connector-updates.md)操作。安装器枚举新版包 skills/ 下的全部技能目录,覆盖对应已安装目录并安装新增目录,保留其他技能。Connector 版本只决定初始分发内容,后续 CLI/Skills 独立跟踪 npm 正式版;各连接器使用同一更新流程,无需等待 Connector 发版。
|
|
62
|
+
|
|
63
|
+
检查安装器返回的版本、技能名单及目录,逐份核验已安装 SKILL.md 的 metadata.version 与目标一致;名单以新版包为准。读取本任务所需的新 SKILL.md 和引用,按新指令继续;需要宿主重载才能启用时提示重载或开始新会话,保留原任务、环境选择和检查记录。文件安装成功与宿主加载成功分别报告,新增技能需确认出现在宿主技能列表并可加载后才算启用。
|
|
64
|
+
|
|
65
|
+
### 失败后继续
|
|
66
|
+
|
|
67
|
+
检查不可用且没有可用更新项时,或安装失败时,保留并简短报告实际错误,分别记录两个包的结果。核实 CLI 仍满足基线且具备所需命令、所需技能可加载后,可继续原任务;否则报告具体阻塞。部分安装失败时按安装器返回的已完成/未安装名单核对现状。安装缺失 CLI 或提升过低版本失败后,同样须核验通过才能继续资源操作。
|
|
38
68
|
|
|
39
69
|
## 环境与地址
|
|
40
70
|
|
|
@@ -53,8 +83,6 @@ tiana status
|
|
|
53
83
|
|
|
54
84
|
staging CLI 自动加载内置公共根证书,无需另设 CA 文件;开发者须已接入 staging VPN/DNS,并为浏览器一次性安装 staging CA。证书来源、指纹和安装步骤见 [CLI staging 信任说明](https://github.com/tianacloud/cli/blob/main/docs/staging-ca.md)。证书故障按实际提示处理,不能关闭验证或切到另一个环境。
|
|
55
85
|
|
|
56
|
-
WorkBuddy Connector 由自身命令环境固定 online,其安装、登录及业务命令沿用该环境。
|
|
57
|
-
|
|
58
86
|
Console/管理 API、用户 Web 地址、数据库 Endpoint 各有用途:全部取实际 CLI/服务回执,不猜域名或把管理地址作为数据库连接地址。应用地址使用回执中的 application_url,Git URL 使用用户 Git 实例的 Endpoint。
|
|
59
87
|
|
|
60
88
|
## 对话中的登录
|
|
@@ -15,4 +15,4 @@ npm 通过 os/cpu 选择 cli-win32-x64 或 cli-win32-arm64;二进制直接在
|
|
|
15
15
|
|
|
16
16
|
成功后核验 `tiana.cmd version`、`tiana.cmd login --help`、`tiana.cmd web list-template --help`、`tiana.cmd web init-template --help`。需要 Git 时安装 Git for Windows,按 [helper 与 PATH 排查](windows-git-helper.md)确认命令位置。npm 安装成功但 PATH 不可见时先检查 prefix 和 Agent 实际环境。
|
|
17
17
|
|
|
18
|
-
[开始使用](getting-started.md)
|
|
18
|
+
[开始使用](getting-started.md)说明登录、CLI 与 Skills 自动更新及新增技能安装。命令尚未执行时如实说明,不把安装阶段的问题当成服务登录或发布故障。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tiana-function
|
|
3
|
+
description: 使用 Tiana 创建和管理 Go 后端服务,读取及保存 Git 源码、编译发布、修改参数与 CORS;为 Web 应用开发访问 SQLite 的后端服务时使用。前端页面开发配合 tiana-web。
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: Tiana Cloud
|
|
7
|
+
version: "1.0.12"
|
|
8
|
+
parent: tiana
|
|
9
|
+
source: https://github.com/tianacloud/agent-skills/tree/main/skills/tiana-function
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Tiana Function
|
|
13
|
+
|
|
14
|
+
本 skill 负责后端服务的创建与管理、源码、运行参数、Go 接口及数据库访问、编译发布。为 Web 开发后端时,接收 [Tiana Web](../tiana-web/SKILL.md)确定的 Git ID、接口需求和数据依赖;完成后返回服务 ID、source_dir、发布回执、接口契约和参数生效结果,由 Web skill 继续前端接入、绑定、发布及分享验收。
|
|
15
|
+
|
|
16
|
+
安装、账号与环境选择按 [Tiana](../tiana/SKILL.md)。共享各 Tiana 技能本会话的实际更新检查记录;尚未检查时先完成该入口的检查,包括从本会话实际加载的 SKILL.md 的 `metadata.version` 取得 `SKILLS_VERSION`,在同一次 shell 调用中赋值并实际执行 `tiana version check --skills-version "$SKILLS_VERSION" --json` 并按结果自动更新 CLI 和整套 Skills、补齐新增技能并核验,在对话中报告结果与重载要求;`should_notify=false` 也执行。两个包各自比较自身 npm 最新版,检查与安装无需 Tiana 登录;暂不登录或不操作云端资源时仍完成此流程。执行前确认 `tiana function --help` 可用;当前最新正式 CLI 仍缺少命令时,报告配套能力尚未可用及两个包的实际版本,等待已验证的配套发布。
|
|
17
|
+
|
|
18
|
+
## 创建与修改
|
|
19
|
+
|
|
20
|
+
按 [后端服务命令](references/commands.md)操作。先确认目标后端服务及其源码 Git,再读取源码。只编辑所需文件,保存得到 Git commit 后显式编译发布。保存源码不会自动编译;发布完成也不会中断正在处理请求的旧进程。如需立即结束当前执行,可在 Console 使用“强制休眠”,下一次请求使用新版本。
|
|
21
|
+
|
|
22
|
+
新后端服务不自动写入示例。为 Web 开发时传入该应用已确定的 `--git-instance-id GIT_ID`,默认复用 Web 仓库;独立创建且未指定 Git 时由平台创建源码仓库。用 `--source-dir /services/orders` 指定仓库内目录,`/` 表示根目录;省略时默认 `/functions/<名称>/`,中文和大小写保留,名称中的空格替换为下划线;手动指定的目录保留空格。创建后读取 `function show` 的 source_dir,不根据名称或 ID 推导;改名不改变目录。目录是 package main 的编译入口,go.mod 可在该目录或仓库内上级目录;首次保存创建缺失目录,构建只编译指定入口。允许多个服务共享同一目录和源码,分别发布。不要把前端文件或其他后端服务的目录当作本后端服务源码覆盖。
|
|
23
|
+
|
|
24
|
+
命令回执中的 commit 是仓库主分支提交。并发保存冲突后先保留本地编辑,重读并合并实际变化,再用新 commit 保存;不强推主分支。多文件或二进制资源也可按 [Tiana Git](../tiana-git/SKILL.md)用原生 Git 管理。
|
|
25
|
+
|
|
26
|
+
## 参数与数据库后端
|
|
27
|
+
|
|
28
|
+
涉及数据库 Token、第三方 API Key 等敏感配置时,必须先按[参数配置与生效](references/commands.md#参数配置与生效)配置,再按 [Go 后端服务开发](references/go-backend.md)读取与使用。参数更新无需重新编译,但要核对保存回执的应用状态和实际请求结果。
|
|
29
|
+
|
|
30
|
+
数据库 Endpoint、Token 和第三方密钥保存在后端服务参数中,不写入 Git、前端源码、业务响应或日志。缺少实际凭据时说明待配置项,不使用占位值宣称联调成功。Web 的数据访问方式、资源绑定与模板制作由 Tiana Web 负责。
|
|
31
|
+
|
|
32
|
+
调用方身份通过 SDK 从请求上下文读取,业务需要区分用户数据时使用该身份,不能相信请求体中自报的用户 ID。完成接口核验后,将所需调用身份与数据范围一并交给 Web skill 验证。
|
|
33
|
+
|
|
34
|
+
App 作者专属的初始化和权限管理接口,按 [App 作者与初始权限](references/go-backend.md#app-作者与初始权限)使用 `caller.IsAppOwner()` 校验;作者指本次来源 Web 的创建者,与租户角色分开。前端的 `is_app_owner` 展示由 Tiana Web 负责。
|
|
35
|
+
|
|
36
|
+
## 结果与恢复
|
|
37
|
+
|
|
38
|
+
`accepted` 表示已受理,`publish --wait` 成功才表示发布完成。构建失败后读取 `builds` 和 `logs`,修正源码、额度或配置后重试。响应不确定时沿用原 request ID 和 commit 查询或恢复;不要把再次发起构建当作状态查询。删除后端服务会删除其制品,CLI 保留关联 Git。
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# 后端服务命令
|
|
2
|
+
|
|
3
|
+
沿用本会话已选择的 CLI 环境与登录。示例中的 `FUNCTION_ID`、`GIT_ID`、commit 和构建 ID 均替换为实际回执,名称有歧义时使用 ID。
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
tiana function list --page 1 --json
|
|
7
|
+
tiana function show FUNCTION_ID --json
|
|
8
|
+
tiana function create "订单后端" -m "订单业务接口" --git-instance-id GIT_ID --source-dir /services/orders --wait --json
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
不传 `--git-instance-id` 则创建独立源码 Git。列表每次读取一页,按需要用 `--page` 继续,不为查找已知 ID 遍历整个租户。
|
|
12
|
+
|
|
13
|
+
## 源码
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
tiana function source list FUNCTION_ID --json
|
|
17
|
+
tiana function source read FUNCTION_ID main.go --commit COMMIT > main.go
|
|
18
|
+
tiana function source list FUNCTION_ID handlers --commit COMMIT --offset 0 --json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
目录结果含 `commit`、`root`、`entries`、`next_offset`。路径相对于该后端服务的源码根,子目录翻页使用原 commit 与 next_offset。`needs_initial_source=true` 表示还需要保存初始代码。`read` 默认输出原始文件,`--json` 输出包含路径、commit 和 UTF-8 内容的结构。
|
|
22
|
+
|
|
23
|
+
编辑本地文件后,只列出需要保存的文件:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
tiana function source save FUNCTION_ID --base-commit COMMIT --file main.go=./main.go --file go.mod=./go.mod --json
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
完全空的 Git 首次保存用 `--base-commit empty`。已有前端提交的共享仓库使用 `source list` 返回的 commit,不用 empty;命令会将文件写到新后端服务目录,保留其他文件。保存返回新的 commit。二进制文件、删除文件、仓库根部共享模块及跨目录整理用原生 Git。
|
|
30
|
+
|
|
31
|
+
## 构建和发布
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
tiana function publish FUNCTION_ID --commit COMMIT --wait --json
|
|
35
|
+
tiana function builds FUNCTION_ID --json
|
|
36
|
+
tiana function builds FUNCTION_ID --before SEQUENCE --json
|
|
37
|
+
tiana function logs FUNCTION_ID --build SUBMISSION_ID --json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
省略 `--commit` 时读取 main。已是最新发布的 commit 时直接返回 `already_published`,不重新编译。构建历史每页 20 条;继续读取时以本页最后一条的 sequence 作为 before。
|
|
41
|
+
|
|
42
|
+
提交时 stderr 显示 request ID 与 commit;JSON 回执也携带这两项。响应未知时先查询 builds;需要恢复原请求时使用相同 `--request-id REQUEST_ID --commit COMMIT`。中断等待不会取消服务端构建。
|
|
43
|
+
|
|
44
|
+
## 参数配置与生效
|
|
45
|
+
|
|
46
|
+
先列出代码实际需要的参数名和用途,例如 `SQLITE_ENDPOINT`(数据库连接地址)、`SQLITE_TOKEN`(该数据库实例 Token)、`PAYMENT_API_KEY`(第三方接口密钥)。使用已核实的目标资源取得实际值;缺少第三方密钥时请用户在 Console 配置,不要求在对话中粘贴。
|
|
47
|
+
|
|
48
|
+
Console 操作:打开目标后端服务 →「参数配置」→「参数列表」,分别填写参数名和值并保存。参数名须与代码 Get 的名称一致。当前只支持 `kind=plain`;敏感值也通过此入口配置,不能将它描述为已支持密钥引用管理。
|
|
49
|
+
|
|
50
|
+
CLI 操作:
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
tiana function parameters get FUNCTION_ID --json
|
|
54
|
+
tiana function parameters set FUNCTION_ID --file parameters.json --json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
set 替换整个参数对象。get 的 JSON 回执从 `data.parameters` 取出已有参数,再修改目标项,保留其他值;不能把完整 get 回执直接交给 set。parameters.json 根部直接是参数名到类型和值的对象,不再包一层 parameters。下面仅展示格式,使用前替换为实际值:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"MESSAGE": {"kind": "plain", "value": "欢迎使用订单服务"},
|
|
62
|
+
"SQLITE_ENDPOINT": {"kind": "plain", "value": "<实际数据库 Endpoint>"},
|
|
63
|
+
"SQLITE_TOKEN": {"kind": "plain", "value": "<实际数据库实例 Token>"}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
含凭据的文件放在 Git 和前端构建目录之外,使用仅当前用户可读写的临时文件,用完删除。get 和 set 回执都可能包含参数值,同样写入受限临时文件处理,不打印到对话或交付日志。仅报告参数名称与生效状态。
|
|
68
|
+
|
|
69
|
+
核对 set 返回的 `data.application`:
|
|
70
|
+
|
|
71
|
+
| 结果 | 后续动作 |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| `applied` | 当前执行已接收配置,再发一个实际业务请求验证读取与使用成功。 |
|
|
74
|
+
| `next_start` | 配置已保存,下次启动使用;调用已发布的服务完成唤醒并验证。 |
|
|
75
|
+
| `pending` | 已保存但当前执行尚未确认收到。可在 Console 点击「重试下发」,再核对结果;不能报告已生效。 |
|
|
76
|
+
|
|
77
|
+
更新参数无需重新编译。Go 读取与使用按[Go 后端服务开发](go-backend.md);验证数据库连接或上游调用是否成功,不通过回显密钥来验证。参数读取、必需值缺失和下游拒绝都要有明确业务错误。轮换凭据后再验证新请求,避免代码启动时缓存旧值造成“配置改了仍失败”。
|
|
78
|
+
|
|
79
|
+
## CORS
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
tiana function cors get FUNCTION_ID --json
|
|
83
|
+
tiana function cors set FUNCTION_ID --file cors.json --json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
CORS set 同样替换整个配置对象,先读取保留仍需使用的规则。
|
|
87
|
+
|
|
88
|
+
cors.json 示例:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"origins": ["https://app.example.test"],
|
|
93
|
+
"methods": ["GET", "POST"],
|
|
94
|
+
"headers": ["Authorization", "Content-Type"],
|
|
95
|
+
"expose_headers": ["X-Request-ID"]
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
origins 决定可发起跨域浏览器调用的来源;methods 和 headers 决定预检允许的方法及请求头;expose_headers 决定浏览器脚本能读取的额外响应头。CORS 不替代调用鉴权。
|
|
100
|
+
|
|
101
|
+
## 启停和删除
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
tiana function disable FUNCTION_ID --json
|
|
105
|
+
tiana function enable FUNCTION_ID --json
|
|
106
|
+
tiana function delete FUNCTION_ID --force --wait --json
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
停用阻止访问;删除清理后端服务和制品,源码 Git 保留。删除必须是用户要求的操作;非交互命令用 --force 跳过已完成的人工确认。结果未知时保留回执,使用原实例 ID 和 `--request-id` 恢复。
|
|
110
|
+
|
|
111
|
+
## 交付 Web 使用
|
|
112
|
+
|
|
113
|
+
为 Web 开发后端时,将服务 ID、源码 Git 和 source_dir、发布回执、接口契约及参数生效结果交回 [Tiana Web 接入流程](../../tiana-web/references/backend-apps.md)。Web 绑定、前端预览与模板安装由该 skill 负责。
|
|
114
|
+
|
|
115
|
+
源码目录支持根目录 `/`,创建后固定。服务改名不改路径,保存提交信息为 `Save source of <当前服务名称>`。多个入口目录可共用上级 go.mod;同仓同目录也可被多个服务共享。
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Go 后端服务开发
|
|
2
|
+
|
|
3
|
+
后端服务是监听 `PORT` 环境变量指定端口的 Go HTTP 程序。平台固定 Go 1.26 工具链。source_dir 包含 package main,所属 go.mod 可在该目录或仓库内上级目录,多个入口可共享模块;依赖由构建流程下载。使用 SDK 时选择包含 function 包的已发布版本,记录在 go.mod 中,具体版本以当前配套 SDK 发布为准。
|
|
4
|
+
|
|
5
|
+
最小程序返回 JSON:
|
|
6
|
+
|
|
7
|
+
```go
|
|
8
|
+
package main
|
|
9
|
+
|
|
10
|
+
import (
|
|
11
|
+
"encoding/json"
|
|
12
|
+
"net/http"
|
|
13
|
+
"os"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
func main() {
|
|
17
|
+
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
18
|
+
w.Header().Set("Content-Type", "application/json")
|
|
19
|
+
json.NewEncoder(w).Encode(map[string]string{"message": "Hello from Tiana"})
|
|
20
|
+
})
|
|
21
|
+
if err := http.ListenAndServe(":"+os.Getenv("PORT"), nil); err != nil {
|
|
22
|
+
panic(err)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 读取业务参数
|
|
28
|
+
|
|
29
|
+
例如希望返回可修改的欢迎语:在后端服务参数中新增名为 `MESSAGE` 的参数,值填写 `欢迎使用订单服务` 并保存。`MESSAGE` 只是示例业务参数名,可以换成业务自己的名称。
|
|
30
|
+
|
|
31
|
+
在 handler 内读取配置,使之后的请求能读取更新的值:
|
|
32
|
+
|
|
33
|
+
```go
|
|
34
|
+
params, err := function.ReadConfig()
|
|
35
|
+
if err != nil {
|
|
36
|
+
http.Error(w, "读取参数失败", http.StatusInternalServerError)
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
message, ok := params.Get("MESSAGE")
|
|
40
|
+
if !ok {
|
|
41
|
+
http.Error(w, "尚未配置欢迎语", http.StatusInternalServerError)
|
|
42
|
+
return
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
导入 `github.com/tianacloud/sdk-go/function`。SDK 使用平台提供的 `FUNCTION_CONFIG_FILE` 读取配置,不自行拼接宿主路径。Get 返回字符串和是否存在;已配置空字符串也会返回 true,必需且非空的业务凭据还需检查空值。不要返回整个参数对象,其中可能有数据库凭据。
|
|
47
|
+
|
|
48
|
+
## 使用敏感配置
|
|
49
|
+
|
|
50
|
+
先按[参数配置与生效](commands.md#参数配置与生效)保存真实值。业务参数通过 ReadConfig/Get 获取,不用 `os.Getenv("SQLITE_TOKEN")` 读取;参数不是同名环境变量。以下片段均放在 handler 内,沿用上面已成功读取的 params。
|
|
51
|
+
|
|
52
|
+
例如 `PAYMENT_API_KEY` 是业务自定义的第三方密钥参数名,req 是业务已创建的上游 HTTP 请求:
|
|
53
|
+
|
|
54
|
+
```go
|
|
55
|
+
apiKey, ok := params.Get("PAYMENT_API_KEY")
|
|
56
|
+
if !ok || apiKey == "" {
|
|
57
|
+
http.Error(w, "支付服务尚未配置", http.StatusServiceUnavailable)
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
req.Header.Set("Authorization", "Bearer "+apiKey)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
按上游真实协议设置凭据,并检查调用结果。密钥仅用于后端向上游发请求;响应只返回业务需要的结果,不返回密钥或原始请求头。配置热更新时每次请求读取;如果复用依赖密钥的客户端,须在参数变化后更新客户端,不能一直使用启动时的旧凭据。
|
|
64
|
+
|
|
65
|
+
## 访问 SQLite
|
|
66
|
+
|
|
67
|
+
先用 [Tiana SQLite](../../tiana-sqlite/SKILL.md)核实数据库实例、表结构及初始化 SQL。数据库 Endpoint 和实例 Token 分别保存为后端服务参数 `SQLITE_ENDPOINT`、`SQLITE_TOKEN`,Token 在该数据库的连接管理中创建。只在后端服务内读取并传给 SDK:
|
|
68
|
+
|
|
69
|
+
```go
|
|
70
|
+
endpoint, endpointOK := params.Get("SQLITE_ENDPOINT")
|
|
71
|
+
secret, tokenOK := params.Get("SQLITE_TOKEN")
|
|
72
|
+
if !endpointOK || !tokenOK || endpoint == "" || secret == "" {
|
|
73
|
+
http.Error(w, "数据库参数未配置", http.StatusInternalServerError)
|
|
74
|
+
return
|
|
75
|
+
}
|
|
76
|
+
token, err := tiana.NewToken(secret)
|
|
77
|
+
if err != nil {
|
|
78
|
+
http.Error(w, "数据库凭据无效", http.StatusInternalServerError)
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
connector, err := tianasqlite.NewConnector(tianasqlite.Config{
|
|
82
|
+
Gateway: tiana.Config{Endpoint: endpoint, Token: token},
|
|
83
|
+
RequestTimeout: 30 * time.Second,
|
|
84
|
+
})
|
|
85
|
+
if err != nil {
|
|
86
|
+
http.Error(w, "数据库连接失败", http.StatusInternalServerError)
|
|
87
|
+
return
|
|
88
|
+
}
|
|
89
|
+
db := sql.OpenDB(connector)
|
|
90
|
+
defer db.Close()
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
对应导入为 `database/sql`、`time`、`tiana "github.com/tianacloud/sdk-go"`、`tianasqlite "github.com/tianacloud/sdk-go-sqlite"`。OpenDB 创建句柄并不证明数据库已连接,继续执行实际查询并检查错误。后续 SQL 使用 `r.Context()` 与占位符绑定业务值。对需要按用户隔离的数据,从 SDK 读取可信请求身份并在查询条件中限定所属用户;不要提供任意 SQL 执行接口。
|
|
94
|
+
|
|
95
|
+
沙箱内包含公共 CA 包,正式环境公共证书通常无需业务配置 RootCAs。本地环境私有 CA 按该环境的测试指导提供,不关闭证书验证。只有 tmpfs 用于临时写入,持久业务数据保存到 SQLite 或平台文件存储。
|
|
96
|
+
|
|
97
|
+
## App 作者与初始权限
|
|
98
|
+
|
|
99
|
+
在需要作者权限的 HTTP handler 内使用 Go SDK `v1.1.0-function.4` 或包含 IsAppOwner 的后续配套版本,并将实际依赖固定到 go.mod:
|
|
100
|
+
|
|
101
|
+
```go
|
|
102
|
+
caller, present := function.CallerFromRequest(r)
|
|
103
|
+
if !present || !caller.IsAppOwner() {
|
|
104
|
+
http.Error(w, "仅 App 作者可操作", http.StatusForbidden)
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
// 在这里执行作者专属初始化或权限管理。
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
导入 `github.com/tianacloud/sdk-go/function`。`caller.AppOwnerID` 是本次调用来源 Web 的创建者 ID;同一个后端被多个 Web 使用时按本次来源分别判断。普通机器 Token 和没有来源 Web 的 Console 直接调用返回 false。前端会话 `is_app_owner` 只用于界面展示,不能将前端提交的布尔值或用户 ID 作为后端授权依据。模板安装的新 Web 使用安装后新创建者,作者账号和另一账号都需验证;CLI Web 预览要使用配套的来源 Web 授权流程。
|
|
111
|
+
|
|
112
|
+
## 异步任务与休眠
|
|
113
|
+
|
|
114
|
+
在启动后台 goroutine 前调用 `job, err := function.StartJob(jobID)`,成功后才启动任务,任务结束调用 `job.Finish()` 并处理错误。不同任务使用不同 ID;活跃期间相同 ID 的重复 Start 幂等,Finish 可重试,Finish 后复用 ID 表示新任务。已登记 Job 会阻止自动休眠;重启会清空登记,强制休眠和故障仍可中断任务。需要恢复的进度写入持久存储。
|
|
115
|
+
|
|
116
|
+
本地参数文件采用 `{"MESSAGE":{"kind":"plain","value":"欢迎使用订单服务"}}`,设置 `FUNCTION_CONFIG_FILE` 指向它即可使用 SDK,不需解密密钥。平台提供的加密参数由 SDK 解密,业务继续使用 Get;读取错误应返回业务错误,不泄露参数内容。
|
|
@@ -4,7 +4,7 @@ description: 使用 Tiana Git 管理 Git 实例和原生仓库,关联项目远
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Tiana Cloud
|
|
7
|
-
version: "1.0.
|
|
7
|
+
version: "1.0.12"
|
|
8
8
|
parent: tiana
|
|
9
9
|
source: https://github.com/tianacloud/agent-skills/tree/main/skills/tiana-git
|
|
10
10
|
---
|
|
@@ -17,13 +17,16 @@ metadata:
|
|
|
17
17
|
|
|
18
18
|
**本会话首次使用任一 Tiana 技能时,先完成以下步骤,再开始登录、查询模板或操作应用:**
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
2. CLI 满足最低版本后,**仍须实际执行** `tiana version check --skills-version 1.0.10 --json`;版本号取实际加载的 metadata.version。这一步检查是否有更新版本。
|
|
22
|
-
3. 实际发起检查命令后,才在会话中记为已尝试,并保留返回结果或执行错误。仅运行 `tiana version` 只完成第 1 步。
|
|
20
|
+
CLI 与 Skills 各自独立比较本包的 npm 最新正式版。下面的版本检查与安装只访问公共包仓库,不需要 Tiana 登录,不操作 Tiana 云端资源;用户要求暂不登录或不操作云端资源时仍执行。用户明确要求离线、禁止联网或禁止安装时遵从该限制。
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
1. 执行 `tiana version`,按[开始使用](../tiana/references/getting-started.md)核验最低版本;缺少 CLI 或版本过低时,自动安装 npm latest 正式版并重新核验。
|
|
23
|
+
2. CLI 满足最低版本后,从本会话实际加载的 SKILL.md 的 `metadata.version` 取得 `SKILLS_VERSION`,在同一次 shell 调用中赋值并**实际执行** `tiana version check --skills-version "$SKILLS_VERSION" --json`。这一步检查是否有更新版本。
|
|
24
|
+
3. `updates` 中 CLI 或 Skills 有新正式版时,**自动安装各项实际返回的 `latest_version`,无需再次询问**;`should_notify=false` 也执行。Skills 按新版包完整安装,覆盖已有技能并补齐新增技能。各连接器初始版本仅用于分发,后续更新独立于连接器发版;安装目标及重载按[更新流程](../tiana/references/getting-started.md#更新),连接器内使用时再读其中链接的宿主说明。
|
|
25
|
+
4. 在对话中简短报告实际 CLI/Skills 版本、检查状态与更新结果(包括新增技能及是否需要重载);检查不可用时明确说明未能确认是否有新版,更新失败时说明实际错误。
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
实际发起检查命令后才记录已尝试,保留检查结果或执行错误,以及两个包的安装与核验结果。各 Tiana 技能共享这份记录;后续轮次、重复加载或切换技能复用记录,每个包失败后本会话不自动重试。上下文压缩或任务交接时保留记录,新会话重新检查。仅运行 `tiana version` 只完成第 1 步。
|
|
28
|
+
|
|
29
|
+
CLI 仍管理检查缓存和共同的 24 小时提醒额度;该额度不限制自动更新或本会话首次结果报告。更新核验完成后继续原任务;失败时按更新流程判断可否继续。
|
|
27
30
|
|
|
28
31
|
## 实例与仓库
|
|
29
32
|
|
|
@@ -36,4 +39,4 @@ metadata:
|
|
|
36
39
|
|
|
37
40
|
阅读 [源码与版本](references/source-releases.md),确认项目托管选择和实际推送范围。全新 Tiana 应用创建自己的 Tiana Git;已有外部仓库首次同步时确认用户选择。提交源码与锁文件,排除凭据,普通推送并核验远端对应版本引用。
|
|
38
41
|
|
|
39
|
-
Web
|
|
42
|
+
Web 发布时从干净、确定的源码提交构建,在交付记录中保存实际 `git_instance_id`、完整源码提交号和对应发布回执。推送失败停止关联的 Web 发布,结果不明先读取远端状态。Web 构建和上传见 [Tiana Web](../tiana-web/SKILL.md)。
|