@lark-base-open/base-database-cli 1.0.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.
Files changed (149) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +169 -0
  3. package/changelog/CHANGELOG-0.x.md +103 -0
  4. package/config-schema.json +28 -0
  5. package/dist/agent-guide.d.ts +18 -0
  6. package/dist/agent-guide.d.ts.map +1 -0
  7. package/dist/agent-guide.js +30 -0
  8. package/dist/agent-guide.js.map +1 -0
  9. package/dist/archive.d.ts +16 -0
  10. package/dist/archive.d.ts.map +1 -0
  11. package/dist/archive.js +162 -0
  12. package/dist/archive.js.map +1 -0
  13. package/dist/assets.d.ts +4 -0
  14. package/dist/assets.d.ts.map +1 -0
  15. package/dist/assets.js +6 -0
  16. package/dist/assets.js.map +1 -0
  17. package/dist/auth.d.ts +17 -0
  18. package/dist/auth.d.ts.map +1 -0
  19. package/dist/auth.js +63 -0
  20. package/dist/auth.js.map +1 -0
  21. package/dist/cli.d.ts +3 -0
  22. package/dist/cli.d.ts.map +1 -0
  23. package/dist/cli.js +15 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/config.d.ts +5 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +50 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/database-skill.d.ts +22 -0
  30. package/dist/database-skill.d.ts.map +1 -0
  31. package/dist/database-skill.js +135 -0
  32. package/dist/database-skill.js.map +1 -0
  33. package/dist/deploy.d.ts +28 -0
  34. package/dist/deploy.d.ts.map +1 -0
  35. package/dist/deploy.js +476 -0
  36. package/dist/deploy.js.map +1 -0
  37. package/dist/environment.d.ts +12 -0
  38. package/dist/environment.d.ts.map +1 -0
  39. package/dist/environment.js +27 -0
  40. package/dist/environment.js.map +1 -0
  41. package/dist/function-schema.d.ts +3 -0
  42. package/dist/function-schema.d.ts.map +1 -0
  43. package/dist/function-schema.js +310 -0
  44. package/dist/function-schema.js.map +1 -0
  45. package/dist/init.d.ts +77 -0
  46. package/dist/init.d.ts.map +1 -0
  47. package/dist/init.js +418 -0
  48. package/dist/init.js.map +1 -0
  49. package/dist/lark-cli.d.ts +8 -0
  50. package/dist/lark-cli.d.ts.map +1 -0
  51. package/dist/lark-cli.js +228 -0
  52. package/dist/lark-cli.js.map +1 -0
  53. package/dist/npm.d.ts +13 -0
  54. package/dist/npm.d.ts.map +1 -0
  55. package/dist/npm.js +93 -0
  56. package/dist/npm.js.map +1 -0
  57. package/dist/page-title.d.ts +3 -0
  58. package/dist/page-title.d.ts.map +1 -0
  59. package/dist/page-title.js +47 -0
  60. package/dist/page-title.js.map +1 -0
  61. package/dist/preview-receipt.d.ts +23 -0
  62. package/dist/preview-receipt.d.ts.map +1 -0
  63. package/dist/preview-receipt.js +133 -0
  64. package/dist/preview-receipt.js.map +1 -0
  65. package/dist/process.d.ts +17 -0
  66. package/dist/process.d.ts.map +1 -0
  67. package/dist/process.js +53 -0
  68. package/dist/process.js.map +1 -0
  69. package/dist/program.d.ts +12 -0
  70. package/dist/program.d.ts.map +1 -0
  71. package/dist/program.js +204 -0
  72. package/dist/program.js.map +1 -0
  73. package/dist/pull.d.ts +18 -0
  74. package/dist/pull.d.ts.map +1 -0
  75. package/dist/pull.js +324 -0
  76. package/dist/pull.js.map +1 -0
  77. package/dist/skill.d.ts +7 -0
  78. package/dist/skill.d.ts.map +1 -0
  79. package/dist/skill.js +28 -0
  80. package/dist/skill.js.map +1 -0
  81. package/dist/types.d.ts +32 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/types.js +2 -0
  84. package/dist/types.js.map +1 -0
  85. package/dist/workspace-fingerprint.d.ts +8 -0
  86. package/dist/workspace-fingerprint.d.ts.map +1 -0
  87. package/dist/workspace-fingerprint.js +64 -0
  88. package/dist/workspace-fingerprint.js.map +1 -0
  89. package/package.json +54 -0
  90. package/skills/lark-base-database/SKILL.md +307 -0
  91. package/skills/lark-base-database/references/base-capability-routing.md +81 -0
  92. package/skills/lark-base-database/references/base-sql-unsupported.md +42 -0
  93. package/skills/lark-base-database/references/database-capability-skill.md +24 -0
  94. package/skills/lark-base-database/references/development.md +642 -0
  95. package/skills/lark-base-database/references/file-transfer.md +275 -0
  96. package/skills/lark-base-database/references/permission-design.md +138 -0
  97. package/skills/lark-base-database/references/release.md +81 -0
  98. package/skills/lark-base-database/references/sql-function.md +276 -0
  99. package/skills/lark-base-database/references/style-guide.md +88 -0
  100. package/templates/database-capability/SKILL.md.tmpl +41 -0
  101. package/templates/database-starter/README.md +11 -0
  102. package/templates/database-starter/gitignore +3 -0
  103. package/templates/database-starter/page/.prettierignore +4 -0
  104. package/templates/database-starter/page/.prettierrc.json +7 -0
  105. package/templates/database-starter/page/README.md +29 -0
  106. package/templates/database-starter/page/index.html +24 -0
  107. package/templates/database-starter/page/package-lock.json +2675 -0
  108. package/templates/database-starter/page/package.json +44 -0
  109. package/templates/database-starter/page/public/favicon.png +0 -0
  110. package/templates/database-starter/page/src/App.tsx +18 -0
  111. package/templates/database-starter/page/src/components/UserSelectorEditor/index.tsx +267 -0
  112. package/templates/database-starter/page/src/components/UserSelectorPanel/index.css +32 -0
  113. package/templates/database-starter/page/src/components/UserSelectorPanel/index.test.ts +24 -0
  114. package/templates/database-starter/page/src/components/UserSelectorPanel/index.tsx +478 -0
  115. package/templates/database-starter/page/src/components/UserSelectorPanel/user-search.test.ts +175 -0
  116. package/templates/database-starter/page/src/components/UserSelectorPanel/user-search.ts +201 -0
  117. package/templates/database-starter/page/src/components/database-runtime-ready.tsx +21 -0
  118. package/templates/database-starter/page/src/components/database-user-menu/index.tsx +238 -0
  119. package/templates/database-starter/page/src/components/feedback/page-state.tsx +66 -0
  120. package/templates/database-starter/page/src/components/floating-button/chatbot-entry.test.ts +23 -0
  121. package/templates/database-starter/page/src/components/floating-button/chatbot-entry.tsx +873 -0
  122. package/templates/database-starter/page/src/components/floating-button/index.tsx +196 -0
  123. package/templates/database-starter/page/src/components/floating-button/local-chat-panel.test.ts +25 -0
  124. package/templates/database-starter/page/src/components/floating-button/local-chat-panel.tsx +197 -0
  125. package/templates/database-starter/page/src/components/floating-button/utils/current-user.ts +56 -0
  126. package/templates/database-starter/page/src/components/floating-button/utils/env.ts +18 -0
  127. package/templates/database-starter/page/src/components/floating-button/utils/project-meta.test.ts +79 -0
  128. package/templates/database-starter/page/src/components/floating-button/utils/project-meta.ts +252 -0
  129. package/templates/database-starter/page/src/components/ui/button.tsx +56 -0
  130. package/templates/database-starter/page/src/index.css +67 -0
  131. package/templates/database-starter/page/src/lib/cn.test.ts +9 -0
  132. package/templates/database-starter/page/src/lib/cn.ts +7 -0
  133. package/templates/database-starter/page/src/lib/database-runtime-attachment.test.ts +168 -0
  134. package/templates/database-starter/page/src/lib/database-runtime-context.test.ts +111 -0
  135. package/templates/database-starter/page/src/lib/database-runtime.test.ts +103 -0
  136. package/templates/database-starter/page/src/lib/database-runtime.ts +389 -0
  137. package/templates/database-starter/page/src/main.tsx +34 -0
  138. package/templates/database-starter/page/src/vite-env.d.ts +1 -0
  139. package/templates/database-starter/page/tsconfig.json +23 -0
  140. package/templates/database-starter/page/vite.config.ts +13 -0
  141. package/templates/database-starter/prettierignore +1 -0
  142. package/templates/database-starter/server-functions/.prettierignore +3 -0
  143. package/templates/database-starter/server-functions/.prettierrc.json +7 -0
  144. package/templates/database-starter/server-functions/README.md +11 -0
  145. package/templates/database-starter/server-functions/package-lock.json +1687 -0
  146. package/templates/database-starter/server-functions/package.json +22 -0
  147. package/templates/database-starter/server-functions/scripts/run-tsc.mjs +50 -0
  148. package/templates/database-starter/server-functions/tsconfig.json +20 -0
  149. package/templates/database-starter/sql/README.md +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../src/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type SkillTarget = 'codex' | 'agents' | 'claude' | 'all';
2
+ export declare function installSkill(options: {
3
+ target: SkillTarget;
4
+ directory?: string;
5
+ force: boolean;
6
+ }): string[];
7
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEhE,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,MAAM,EAAE,CAyBX"}
package/dist/skill.js ADDED
@@ -0,0 +1,28 @@
1
+ import { cpSync, existsSync, mkdirSync, rmSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { skillRoot } from './assets.js';
5
+ export function installSkill(options) {
6
+ const home = homedir();
7
+ const locations = {
8
+ codex: join(process.env.CODEX_HOME || join(home, '.codex'), 'skills'),
9
+ agents: join(home, '.agents/skills'),
10
+ claude: join(home, '.claude/skills'),
11
+ };
12
+ const roots = options.directory
13
+ ? [resolve(options.directory)]
14
+ : options.target === 'all'
15
+ ? Object.values(locations)
16
+ : [locations[options.target]];
17
+ return roots.map((root) => {
18
+ const destination = join(root, 'lark-base-database');
19
+ if (existsSync(destination) && !options.force) {
20
+ throw new Error(`${destination} already exists; pass --force to replace it`);
21
+ }
22
+ rmSync(destination, { recursive: true, force: true });
23
+ mkdirSync(dirname(destination), { recursive: true });
24
+ cpSync(skillRoot, destination, { recursive: true });
25
+ return destination;
26
+ });
27
+ }
28
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,MAAM,UAAU,YAAY,CAAC,OAI5B;IACC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAgD;QAC7D,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACrE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC;QACpC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC;KACrC,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS;QAC7B,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;YACxB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YAC1B,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAElC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,GAAG,WAAW,6CAA6C,CAC5D,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,32 @@
1
+ export declare const ENVIRONMENT_NAMES: readonly ['online'];
2
+ export type EnvironmentName = (typeof ENVIRONMENT_NAMES)[number];
3
+ export interface BaseDatabaseConfig {
4
+ $schema?: string;
5
+ configVersion: 1;
6
+ name?: string;
7
+ runtimeProfile?: string;
8
+ appToken: string;
9
+ bindings?: unknown;
10
+ }
11
+ export interface FieldSchema {
12
+ name: string;
13
+ type: string;
14
+ [key: string]: unknown;
15
+ }
16
+ export interface TableSchema {
17
+ name: string;
18
+ fields: FieldSchema[];
19
+ }
20
+ export interface BaseSchema {
21
+ tables: TableSchema[];
22
+ }
23
+ export interface CreatedTable {
24
+ name: string;
25
+ tableId: string;
26
+ }
27
+ export interface CommandResult {
28
+ ok: true;
29
+ data?: unknown;
30
+ [key: string]: unknown;
31
+ }
32
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,YAAI,QAAQ,CAAU,CAAC;AAErD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,CAAC,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export const ENVIRONMENT_NAMES = ['online'];
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAQ,CAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const WORKSPACE_INPUT_FINGERPRINT_ALGORITHM = "sha256-path-content-v1";
2
+ export interface WorkspaceInputFingerprint {
3
+ algorithm: typeof WORKSPACE_INPUT_FINGERPRINT_ALGORITHM;
4
+ sha256: string;
5
+ fileCount: number;
6
+ }
7
+ export declare function workspaceInputFingerprint(workspace: string): WorkspaceInputFingerprint;
8
+ //# sourceMappingURL=workspace-fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-fingerprint.d.ts","sourceRoot":"","sources":["../src/workspace-fingerprint.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qCAAqC,2BAA2B,CAAC;AAgB9E,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,OAAO,qCAAqC,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,GAChB,yBAAyB,CAuD3B"}
@@ -0,0 +1,64 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readdirSync, readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ export const WORKSPACE_INPUT_FINGERPRINT_ALGORITHM = 'sha256-path-content-v1';
5
+ const MAX_WORKSPACE_INPUT_FILES = 20_000;
6
+ const EXCLUDED_DIRECTORIES = new Set([
7
+ '.base-database-cli',
8
+ '.cache',
9
+ '.git',
10
+ '.next',
11
+ '.npm',
12
+ '.pnpm-store',
13
+ 'coverage',
14
+ 'dist',
15
+ 'node_modules',
16
+ ]);
17
+ const EXCLUDED_FILES = new Set(['.DS_Store', '.git']);
18
+ function portablePath(path) {
19
+ return path.replaceAll('\\', '/');
20
+ }
21
+ export function workspaceInputFingerprint(workspace) {
22
+ const hash = createHash('sha256');
23
+ let fileCount = 0;
24
+ const visit = (directory, prefix) => {
25
+ const entries = readdirSync(directory, { withFileTypes: true }).sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0);
26
+ for (const entry of entries) {
27
+ if (EXCLUDED_DIRECTORIES.has(entry.name) &&
28
+ (entry.isDirectory() || entry.isSymbolicLink())) {
29
+ continue;
30
+ }
31
+ if (!entry.isDirectory() && EXCLUDED_FILES.has(entry.name)) {
32
+ continue;
33
+ }
34
+ const relative = portablePath(prefix === '' ? entry.name : `${prefix}/${entry.name}`);
35
+ const absolute = join(directory, entry.name);
36
+ if (entry.isDirectory()) {
37
+ hash.update(`directory\0${relative}\0`);
38
+ visit(absolute, relative);
39
+ continue;
40
+ }
41
+ if (entry.isFile()) {
42
+ fileCount += 1;
43
+ if (fileCount > MAX_WORKSPACE_INPUT_FILES) {
44
+ throw new Error(`application workspace cannot exceed ${MAX_WORKSPACE_INPUT_FILES} input files`);
45
+ }
46
+ const contentHash = createHash('sha256')
47
+ .update(readFileSync(absolute))
48
+ .digest('hex');
49
+ hash.update(`file\0${relative}\0${contentHash}\0`);
50
+ continue;
51
+ }
52
+ if (entry.isSymbolicLink()) {
53
+ throw new Error(`application workspace input cannot contain symbolic links: ${relative}`);
54
+ }
55
+ }
56
+ };
57
+ visit(workspace, '');
58
+ return {
59
+ algorithm: WORKSPACE_INPUT_FINGERPRINT_ALGORITHM,
60
+ sha256: hash.digest('hex'),
61
+ fileCount,
62
+ };
63
+ }
64
+ //# sourceMappingURL=workspace-fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-fingerprint.js","sourceRoot":"","sources":["../src/workspace-fingerprint.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@lark-base-open/base-database-cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI and Agent Skill for building database applications on Lark Base.",
5
+ "type": "module",
6
+ "bin": {
7
+ "base-database-cli": "dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "config-schema.json",
12
+ "skills/lark-base-database/SKILL.md",
13
+ "skills/lark-base-database/references",
14
+ "!skills/lark-base-database/references/frontend-design-guide.md",
15
+ "templates",
16
+ "README.md",
17
+ "CHANGELOG.md",
18
+ "changelog"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "engines": {
24
+ "node": ">=20.19.0"
25
+ },
26
+ "scripts": {
27
+ "build": "node scripts/clean.mjs && tsc -p tsconfig.json",
28
+ "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.{js,mjs,ts,tsx}\" \"templates/**/*.{js,mjs,ts,tsx}\"",
29
+ "format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.{js,mjs,ts,tsx}\" \"templates/**/*.{js,mjs,ts,tsx}\"",
30
+ "check": "tsc -p tsconfig.json --noEmit",
31
+ "validate": "pnpm format:check && pnpm check && node scripts/validate.mjs",
32
+ "test": "tsx --test test/**/*.test.ts",
33
+ "install:skill": "pnpm build && node dist/cli.js skill install",
34
+ "prepack": "pnpm build && pnpm validate && pnpm test && pnpm validate:starter-dependencies",
35
+ "validate:starter-dependencies": "node scripts/check-starter-dependencies.mjs"
36
+ },
37
+ "dependencies": {
38
+ "ajv": "8.17.1",
39
+ "archiver": "8.0.0",
40
+ "commander": "14.0.3",
41
+ "crc-32": "1.2.2",
42
+ "jsonc-parser": "3.3.1",
43
+ "npm": "10.9.2",
44
+ "yauzl": "3.2.0"
45
+ },
46
+ "devDependencies": {
47
+ "@types/archiver": "8.0.0",
48
+ "@types/node": "24.1.0",
49
+ "@types/yauzl": "2.10.3",
50
+ "prettier": "3.6.2",
51
+ "tsx": "4.23.1",
52
+ "typescript": "7.0.2"
53
+ }
54
+ }
@@ -0,0 +1,307 @@
1
+ ---
2
+ name: lark-base-database
3
+ description: 当用户希望以飞书多维表格为业务数据后端,从零或基于已有 Base 搭建、修改、发布、验收或排查数据库业务应用时使用。通过 lark-cli 建模、读取和查询原生 Base 能力,并实现 Catalog、Base SQL、FaaS、Page 和发布链路;无法确认某项能力时也必须使用本 Skill 先完成能力发现。
4
+ ---
5
+
6
+ # Lark Base Database
7
+
8
+ 基于飞书多维表格实现数据模型、SQL 查询、FaaS 业务操作和应用页面。工程初始化与发布统一使用 `npx @lark-base-open/base-database-cli`;原生多维表格能力的发现与配置使用 `lark-cli base +...`。本 Skill 提供从需求建模到发布交付的完整主流程。
9
+
10
+ ## 开始任务
11
+
12
+ 本文面向数据库应用开发;Base 承载业务数据,应用组织页面、Functions 与发布版本。
13
+ CLI 使用 `--app-token`、配置字段 `appToken`、`base-database.jsonc` 和 `.base-database-cli/state/`,不读取旧配置或旧状态,不接受旧参数。服务端 `/sites/` 路径、SDK 的 `siteToken` 和宿主 `BASE_SITE_BUILDER_*` 环境变量保持原协议;将宿主提供的应用 token 传给 `--app-token`,不要改造外部协议。
14
+
15
+ - **新建系统**:自动判定 Base 来源,不向用户展示来源选择题。Prompt 未明确指定已有 Base 时默认从零创建;明确指定已有 Base 时复用该 Base。随后按本文 1~6 步执行。
16
+ - **修改系统**:先一次性获取应用、binding、Catalog、源码和发布状态,再执行受影响阶段;保留需求外内容和用户未提交修改。
17
+ - **设计或评审**:读取 [风格手册](references/style-guide.md),只分析和输出,不创建资源或发布。
18
+
19
+ 开始先一次性完整读取本文、[代码开发手册](references/development.md)、[风格手册](references/style-guide.md)、[权限与访问设计](references/permission-design.md)、[SQL Function 专项](references/sql-function.md) 和 [发布与验收](references/release.md)。托管 Builder 必须先读取 `BASE_SITE_BUILDER_WORKSPACE_SOURCE`,该值由宿主判定,Agent 不得自行猜测应当 init、pull 还是直接修改。非托管环境没有该变量时,才按用户请求判断新建或修改流程。需求包含本文无法确认、或不明显属于 Page/SQL/FaaS 的能力时,还必须读取[原生 Base 能力发现与路由](references/base-capability-routing.md)。新建流程默认从零设计 Base schema;只有 Prompt 明确指定已有 Base 时,才取得其 Base token 并由 `init` 读取全部表。随后都以应用 Catalog 为准执行开发。
20
+
21
+ 需求涉及附件的上传、展示、下载或删除时,还必须读取[文件传输](references/file-transfer.md)——上传、展示、写单元格走三条不同的路,不要按普通字段推断。
22
+
23
+ 正常开发只使用 SQL Function 专项明确列出的支持集。需要判断支持集之外的 SQL 语法是否可用、评审或排查 SQL,或者处理 SQL 编译与运行兼容失败时,再完整读取 [Base SQL 不支持能力](references/base-sql-unsupported.md)。
24
+
25
+ 仅 `BASE_SITE_BUILDER_WORKSPACE_SOURCE=empty` 或明确的新建流程执行一次 `init` 和一次 `deploy`。`init --schema` 负责创建 Base 和全部表;`init --base-token` 只读已有 Base,不创建或修改表。宿主未提供应用时,`init` 创建新应用;托管 empty 模式必须额外传入 `--app-token "$BASE_SITE_BUILDER_SITE_TOKEN"`,把目标 Base 绑定到该已有应用,不得创建另一个应用。两种入口都会获取 Catalog 并生成 starter。`deploy` 负责依赖安装、production build、归档、SQL 编译校验、Functions 更新、Artifact 上传、源码回读、Preview 发布和状态轮询。项目级 `base-database-cli lark-cli -- ...` 用于修改流程中追加 Table binding、排查应用控制面请求,以及从零搭建应用在 Preview 发布后写入示例记录和调用 SQL Function 回读;其他原生 Base 能力发现和配置直接使用 `lark-cli base +...`。
26
+
27
+ 每个阶段先完整获取所需上下文,再连续完成该阶段。实现每个 Page/FaaS operation 前,先在内部规划中列出远程调用、每个调用的已知输入和响应依赖,不额外创建设计文件。能在一个 SQL Function 内完成的关联读取先合并;输入已经确定且无响应依赖的读取或请求同时启动,只在业务正确性、平台顺序或后一步确实需要前一步响应时串行。
28
+
29
+ ## 无法确认能力时的强制路由
30
+
31
+ 不要因为本文、Base Database CLI 或现有 Catalog 没有描述某项能力,就直接判断“多维表格不支持”或把需求降级。遇到以下任一情况,先执行[原生 Base 能力发现与路由](references/base-capability-routing.md):
32
+
33
+ - 无法确认需求应由 Page、SQL Function、FaaS 还是原生 Base 实现;
34
+ - 需求涉及表和字段以外的能力,如视图、表单、仪表盘、工作流、提醒、通知、角色或高级权限;
35
+ - 准备把某项需求标记为不支持、能力缺口或本期无法实现;
36
+ - 数据库应用的文档、CLI 或运行时没有对应入口,但该需求可能属于多维表格本体。
37
+
38
+ 能力查询使用 `lark-cli base --help`、对应 shortcut 的 `--help`,以及目标 Base 的只读 list/get 命令;当前环境提供 `lark-base` Skill 时同时读取并遵守它。查询后按证据选择实现归属:原生 Base 已支持则通过 `lark-cli base +...` 配置;数据库应用开发链路已支持则使用 Page/SQL/FaaS;两边各承担一部分时组合实现。只有完成查询仍无法找到入口,才能记录缺口,并区分“原生能力不支持”“当前 lark-cli 未暴露该能力”和“权限或环境阻塞”,附上实际查询过的命令与结果。
39
+
40
+ ## 危险操作确认
41
+
42
+ 危险操作一律使用“Agent 文字询问 → 用户文字回复”的两阶段确认,不依赖按钮、卡片、默认选项或隐式授权。危险操作包括:删除或不可恢复地覆盖 Base、应用、表、字段、业务记录、Function 或 binding;关闭 workflow、高级权限或改变已有角色权限;发布 Prod;以及其他可能造成不可逆外部影响的动作。常规工程文件增量修改、只读查询、非破坏性配置和 Preview 发布不属于此范围。
43
+
44
+ 1. 当前 turn 只用文字说明拟操作对象、影响范围、不可逆结果和将执行的具体动作,并明确要求用户用文字确认;说明后必须立即结束本轮,不得调用对应的写入、删除、关闭或发布工具。
45
+ 2. 只有用户在后续消息中针对同一对象给出明确肯定答复,才执行该危险操作。任务开始时的“全部完成”“帮我搭建并发布”等笼统指令不能代替这次确认;Preview 交付后用户明确回复“部署正式版”可以作为本次 Prod 发布确认。
46
+ 3. 用户拒绝、改变对象、缩小或扩大范围,或回复仍有歧义时,不执行原动作;按新范围重新说明并再次等待文字确认。
47
+ 4. 确认只授权已说明的对象和动作。执行目标、影响范围或 payload 发生变化时,必须重新确认,不得沿用旧确认。
48
+
49
+ ## 平台不变量
50
+
51
+ 1. 公开 CLI 只使用 `online` 环境,并显式传入 `--env online`;内部托管运行时使用宿主提供的唯一默认环境。CLI、OpenAPI、Accounts、应用管理后台和 Page 运行时必须保持同一环境,并始终使用 `--as user` 身份。
52
+ 2. 托管 Builder 严格按 `snapshot|artifact|empty` 分支执行;只有 empty 分支进入新建顺序。非托管新建顺序为自动判定 Base 来源 → 默认从零设计完整 schema,或按 Prompt 明确指定的已有 Base 取得 token → CLI `init` → 读取 Catalog并开发 → CLI `deploy` Preview。从零搭建应用还必须在交付 Preview 前完成 `lark-cli` 写入示例数据、页面 SQL Function 回读的真实数据闭环。用户确认效果后回复“部署正式版”,再执行 CLI `deploy --production --yes`。
53
+ 3. 优先缩短用户首次体验时间。代码完成后尽快发布 Preview 并交给用户体验,以用户反馈驱动后续迭代。
54
+ 4. Base 是业务事实源,`catalog.json` 是已绑定表的 schema 事实源。表名、字段名、ID、类型和选项以 Catalog 为准。
55
+ 5. Base 读取使用 SQL Function;每个 SQL Function 必须引用至少一个已绑定 Catalog 真实表,纯常量、纯参数或不依赖真实表的派生表/CTE 查询在 Page/FaaS 中用代码处理。由 Page 主动发起的记录创建、更新和删除,通过 FaaS 调用目标环境的三个固定批量写入路由;附件追加和移除使用两条专用增量路由,受[文件传输](references/file-transfer.md)中的能力与并发边界约束。Page 不传 Base token;FaaS 写入的路径参数固定取 `catalog.json` 中该表的 `tables[].baseToken` 与 table ID,这两个值是工程常量,请求由 FaaS runtime 识别后转成服务端回调,由服务端校验表绑定关系并以应用所有者 身份落库。同表每批创建、更新或删除 1~200 条记录。批量更新和删除会跳过不存在的记录,以 `code: 0` 和 `data.record_not_found` 返回部分成功结果;FaaS 必须保留已完成与未找到的记录,不得误判为下游协议异常或自动整体重试。从零搭建应用的示例数据在 Preview 发布后通过 `lark-cli base +record-batch-create` 写入真实 Base,再调用页面实际使用的 SQL Function 回读;不得用 Page 自动播种、静态 fixture、`localStorage` 或 mock 代替真实记录。环境地址、鉴权机制及完整请求和响应协议见[代码开发手册](references/development.md#应用记录写入协议)。
56
+ 6. Page 和 FaaS 只调用固定 operation。用户输入不能决定 SQL、URL、method、Base token、table ID、字段名、Function ID 或平台凭证。
57
+ 7. Functions 更新是全量覆盖。修改已有应用时保留需求外 Function;删除 Base、表、字段、Function、binding 或应用必须遵守[危险操作确认](#危险操作确认),先完成 Agent 询问与用户回复两阶段文字确认。
58
+ 8. Preview 是常规发布的强制前置流程。从零搭建应用发布成功后先按[示例数据验收](#从零搭建应用示例数据验收)完成窄范围运行态验证,再展示命令返回的顶层 `baseAppUrl` 和限制并停止;其他场景发布成功后立即交付并停止。管理后台 URL、旧 Preview URL 和发布平台静态资源 `staticUrl` 都不向用户展示。只有用户体验后明确回复“部署正式版”,才发布 Prod。
59
+ 9. 浏览器 SDK 的 `invokeFunction<TData>` 对 SQL 和 FaaS 都只返回一层 `{data,code,msg}`;`TData` 只描述当前 operation 约定的顶层 `data`,不得套入 FaaS handler 的返回类型或二次解包。
60
+ 10. FaaS 写入先确定一致性、部分成功和重试语义,再按已确认的业务要求设计最短远程调用链;不通过堆叠请求模拟 Base 不具备的事务能力。
61
+ 11. FaaS 下游失败使用稳定业务码和 `data.errors` 白名单诊断分层返回;保留安全的上游 `code`、`msg`、LogID 和失败步骤,不透传完整请求、响应、headers、stack 或凭证。具体协议见[代码开发手册](references/development.md#下游错误归一化)。
62
+ 12. 新建应用必须提供非空 `description`。优先使用用户原文;用户未提供时,根据已确认需求生成一句客观描述,概括使用对象和核心用途,不写营销口号、实现细节、目标环境或 Preview/Prod 发布状态。
63
+ 13. 创建或修改 Page 时,必须保留 starter 中的 `createArgusCsrfPlugin()` 配置;不得复制插件实现或手写 `x-secsdk-csrf-token`。旧应用需升级 JSSDK 并重新构建发布。
64
+ 14. 原生 workflow 为本应用发送通知时,按固定优先级确定每个 `LarkMessageAction` 的入口策略:用户明确要求进入多维表格时使用 `base_action`;用户明确要求通知纯展示、无需任何点击入口时才使用 `informational`;其他所有与应用业务对象关联的通知一律使用 `site_action`。不得因为通知正文已包含业务信息、用户未指定跳转目标或原生 workflow 更容易跳 Base,就推断为 `informational`。访客登记后通知被访人属于 `site_action`,即使正文已包含访客姓名、公司和来访事由,也必须提供进入当前访客登记详情的显式入口。`site_action` 必须提供显式 `openLink` 按钮,指向与通知业务动作对应的应用内功能路由,并使用 workflow 上下文中的最小稳定标识直接定位目标对象;Page 必须先实现该路由,考试通知同理进入对应考试或答题页,而不是应用首页。CLI 返回的顶层 `baseAppUrl` 是唯一可信用户入口;禁止使用发布平台静态资源 `staticUrl`、Base `recordLink`、Base URL、应用管理后台 URL 或根据应用 token 猜测的地址。新 workflow 延后到 Preview 发布成功后创建,取得命令返回的顶层 `baseAppUrl` 后直接在 `+workflow-create` 中写入最终应用链接,再执行 `+workflow-enable` 和 `+workflow-get`;只有修改已有 workflow 才执行 `+workflow-get` → 完整 read-modify-write `+workflow-update` → `+workflow-enable` → `+workflow-get`。`informational` 可以使用 `btn_list=[]`,但必须记录用户明确要求纯展示的原文;空按钮不代表通知不可点击,也不能证明它不会沿平台默认行为跳转 Base。任一应用路由、对象标识、最终链接或回读不满足约束时,立即执行 `+workflow-disable`,并把交付标记为 partial 或 blocked;不得降级成 `informational` 或宣称通知完成。CLI 发布应用不会自动修改 Base workflow;Preview 和 Prod 每次发布后都必须显式完成对应环境的通知入口收尾。
65
+
66
+ ## 1. 理解需求并判定 Base 来源
67
+
68
+ 明确应用名称、应用描述、用户角色、核心对象、对象关系、状态流转、页面任务和一条可验收的端到端路径。应用描述用一句话概括使用对象和核心用途;通常只使用一个 Base。同时按[权限与访问设计](references/permission-design.md)回答访问模型三问——谁能打开应用、门内谁能看什么、谁能做什么;后续 binding 范围、SQL Function 和写入链路的设计都受该访问模型约束。
69
+
70
+ 不要询问用户选择数据来源,也不要展示“从零创建”与“使用已有 Base”的选项。按 Prompt 自动路由:
71
+
72
+ - **默认从零创建 Base**:Prompt 未明确指定已有 Base 时,直接根据需求设计完整 schema,每类核心对象一张表,再执行 `init --schema`。用户描述需要哪些业务表或字段属于建模需求,不代表存在已有 Base。
73
+ - **使用已有 Base**:仅当 Prompt 明确提供 Base token、Base 链接,或明确要求基于某个已有 Base 搭建时进入该路径。优先从 Prompt 解析 token;若明确指定了已有 Base 但无法取得 token,只补问 Base token,不再询问来源选择。随后执行 `init --base-token`。`init` 会只读列出该 Base 的全部表、创建并绑定新应用、获取 Catalog;不得先复制 Base,也不得在初始化阶段创建、删除或修改已有表和字段。
74
+
75
+ 已有 Base 路径不根据 prompt 猜测字段,默认将该 Base 的全部表绑定到新应用;绑定全部表不代表页面需要暴露全部数据。初始化后先把 `catalog.json` 与用户需求逐项映射,确定需求实际使用的表、字段、关系和选项,再设计相应的页面与 operation。若 Catalog 缺少完成需求所必需的数据结构,先向用户说明缺口并取得修改 Base 的明确授权;未授权时按现有 Catalog 实现可支持范围。
76
+
77
+ 例如 Todo 系统:
78
+
79
+ ```text
80
+ 应用名称:Todo 管理
81
+ 应用描述:供个人集中创建、跟踪和完成日常任务
82
+ 对象:任务
83
+ 状态:待处理 → 进行中 → 已完成
84
+ 页面:任务列表、创建任务、任务详情
85
+ 查询:listTasks、getTask
86
+ 写入:createTask、updateTaskStatus
87
+ 验收:创建任务 → SQL 查到记录 → 更新状态 → SQL 查到新状态
88
+ ```
89
+
90
+ 常用 Field JSON:
91
+
92
+ | 业务数据 | Field JSON |
93
+ | ---------------- | -------------------------------------------------------------------------------- |
94
+ | 标题、备注、电话 | `{"type":"text","name":"标题"}` |
95
+ | 数量、金额 | `{"type":"number","name":"金额"}` |
96
+ | 单选状态 | `{"type":"select","name":"状态","multiple":false,"options":[{"name":"待处理"}]}` |
97
+ | 多标签 | `{"type":"select","name":"标签","multiple":true,"options":[{"name":"高优"}]}` |
98
+ | 日期时间 | `{"type":"datetime","name":"截止时间","style":{"format":"yyyy-MM-dd HH:mm"}}` |
99
+ | 布尔值 | `{"type":"checkbox","name":"已完成"}` |
100
+ | 表间关系 | `{"type":"link","name":"关联任务","link_table":"任务"}` |
101
+ | 审计字段 | `created_at`、`updated_at`、`created_by`、`updated_by` |
102
+ | 附件 | `{"type":"attachment","name":"附件"}`;读写见[文件传输](references/file-transfer.md) |
103
+
104
+ `datetime.style.format` 使用 Base 支持的固定枚举;当前可配置格式最多显示到分钟,底层时间值仍可保留秒级精度。
105
+
106
+ 首个字段是表的主字段。公式和 lookup 是只读派生字段,只在结果需要长期展示在 Base 时使用。
107
+
108
+ ## 2. 初始化数据库应用
109
+
110
+ 初始化前检查 `BASE_SITE_BUILDER_SITE_TOKEN`。变量非空表示宿主已经创建目标应用:使用 Sandbox 已安装的 `base-database-cli` 可执行文件,并在本节的 `init` 命令中追加 `--app-token "$BASE_SITE_BUILDER_SITE_TOKEN"`。该模式仍按需求创建或复用 Base,但只调用已有应用的 `bind_base` 和 `catalog`,不会调用应用创建接口。不要手写 `base-database.jsonc`、不要绕过 CLI 拼装低层 `lark-cli` 请求,也不要用新应用掩盖绑定失败。
111
+
112
+ ### 从零创建 Base
113
+
114
+ 把全部表写入一个 schema 文件。这个文件是 `init` 的输入,不是平台请求缓存:
115
+
116
+ ```json
117
+ {
118
+ "tables": [
119
+ {
120
+ "name": "任务",
121
+ "fields": [
122
+ { "type": "text", "name": "任务名称" },
123
+ {
124
+ "type": "select",
125
+ "name": "状态",
126
+ "multiple": false,
127
+ "options": [
128
+ { "name": "待处理" },
129
+ { "name": "进行中" },
130
+ { "name": "已完成" }
131
+ ]
132
+ },
133
+ {
134
+ "type": "datetime",
135
+ "name": "截止时间",
136
+ "style": { "format": "yyyy-MM-dd HH:mm" }
137
+ },
138
+ { "type": "text", "name": "备注" }
139
+ ]
140
+ }
141
+ ]
142
+ }
143
+ ```
144
+
145
+ 在项目目录执行初始化命令:
146
+
147
+ ```bash
148
+ npx @lark-base-open/base-database-cli init . \
149
+ --env online \
150
+ --name 'Todo 管理' \
151
+ --description '供个人集中创建、跟踪和完成日常任务' \
152
+ --schema ./base-schema.json
153
+ ```
154
+
155
+ 托管 Sandbox 已有应用场景执行:
156
+
157
+ ```bash
158
+ base-database-cli init . \
159
+ --name 'Todo 管理' \
160
+ --description '供个人集中创建、跟踪和完成日常任务' \
161
+ --schema ./base-schema.json \
162
+ --app-token "$BASE_SITE_BUILDER_SITE_TOKEN"
163
+ ```
164
+
165
+ ### 使用已有 Base
166
+
167
+ 取得已有 Base 的 `bas...` token 后执行:
168
+
169
+ ```bash
170
+ npx @lark-base-open/base-database-cli init . \
171
+ --env online \
172
+ --name 'Todo 管理' \
173
+ --description '供个人集中创建、跟踪和完成日常任务' \
174
+ --base-token basxxxxxxxx
175
+ ```
176
+
177
+ 托管 Sandbox 复用已有 Base 与已有应用时,同样改用 `base-database-cli init` 并追加 `--app-token "$BASE_SITE_BUILDER_SITE_TOKEN"`。
178
+
179
+ 该命令调用只读 Base 接口获取 Base 信息并分页列出全部表。未指定 `--app-token` 时,通过应用创建接口的 `baseBindings` 绑定这些表;指定时,通过目标应用的 `bind_base` 绑定这些表。最后从目标应用获取 Catalog。它不会创建或修改 Base、表、字段和记录。
180
+
181
+ 两种路径必须且只能传入 `--schema` 或 `--base-token` 之一,并始终传入非空 `--description`。公开 CLI 的 `--env` 默认且只支持 `online`;托管 Sandbox 使用内部运行时的默认环境。从零路径连续建表会串行等待 2 秒。
182
+
183
+ 成功结果的 `baseSource` 和 `databaseSource` 分别为 `created` 或 `existing`;新建资源位于 `created`,复用资源位于 `reused`,同时列出表、应用、binding 和工程文件。开始开发前确认以下产物:
184
+
185
+ ```text
186
+ base-database.jsonc # 应用 token 与 Base binding
187
+ base-schema.json # 仅从零路径存在,是本次建库输入
188
+ catalog.json # 已绑定数据表的真实 schema
189
+ page/ # React 页面
190
+ sql/ # SQL Functions
191
+ server-functions/ # 服务端 FaaS Functions
192
+ .base-database-cli/ # 被 Git 忽略的 CLI 本地状态与临时制品
193
+ ```
194
+
195
+ 只从 `catalog.json` 读取表名、字段名、ID、选项和 SQL 类型,不根据建表输入猜测 Catalog 结果。
196
+
197
+ ### 应用控制面调试
198
+
199
+ 除修改已有应用时追加 Table binding 外,正常应用开发不直接调用项目级 `base-database-cli lark-cli -- ...`。仅排查应用控制面接口、授权或 LogID 时,进入包含 `base-database.jsonc` 的项目根目录执行:
200
+
201
+ ```bash
202
+ npx @lark-base-open/base-database-cli lark-cli -- \
203
+ api GET /open-apis/base/v3/sites/list \
204
+ --params '{"pageSize":1}' --json
205
+ ```
206
+
207
+ 该命令校验当前目录的项目配置,并在线上环境原样运行后续参数;`api` 和 `base` 命令自动使用 `--as user`。它不是原生 Base 业务能力的唯一入口;能力发现与配置按[原生 Base 能力发现与路由](references/base-capability-routing.md)直接执行 `lark-cli base +...`。
208
+
209
+ ## 3. 开发
210
+
211
+ 读取 `catalog.json` 和 starter 源码,确定 operation 的固定输入与输出,然后在 `sql/`、`server-functions/` 和 `page/` 中完整实现 SQL、服务端 FaaS Functions 和 Page;不创建额外的 operation 设计文件。保持以下边界:
212
+
213
+ - Page 读取 Base 使用 SQL Function;
214
+ - Page 写入使用 FaaS;
215
+ - 示例数据写入与业务写入实现分离:示例数据只用于发布后初始化真实 Base,不要求为了播种额外创建 FaaS Function;页面业务写入仍使用 FaaS;
216
+ - SQL 和 FaaS 调用都使用 `params`,但 SQL 是按 `$1`、`$2` 排列的数组,FaaS 是传给 handler `rawParams` 的业务对象;
217
+ - 页面不直接调用 Base records OpenAPI;
218
+ - 附件上传走 `siteRuntime.uploadAttachment()`;缩略图用 `buildAttachmentCoverUrl(context, ref)`,下载用 `fetchAttachmentDownloadUrl(context, ref)`,业务代码只提供业务坐标、不自己拼 `extra`;追加/移除附件经 FaaS 调 `append_attachments` / `remove_attachments` 增量路由,`batch_update` 只用于整格置空或明确重设。目标环境须已支持该链路;服务端仍有并发覆盖窗口,append 不去重、不幂等,超时后保留已上传 token 并核对,不自动重提或重新上传。详见[文件传输](references/file-transfer.md)。
219
+
220
+ 实现代码前,对每个首屏加载和用户动作做一次远程调用拓扑检查:
221
+
222
+ 1. 列出 SQL Function、FaaS Function、`context.fetch` 和写入 OpenAPI 调用,并标记每个调用在 operation 开始时已经具备的输入。
223
+ 2. 如果后一个 SQL 的参数只是前一个 SQL 返回的关联 ID,先把关系下推到同一个 SQL Function;这种数据库内部关系不是保留两次远程调用的理由。
224
+ 3. 如果多个无副作用读取的输入均已确定,先创建全部 Promise,再在共同消费结果的位置一次 `await Promise.all(...)`;不要按代码书写顺序连续等待。
225
+ 4. 只有按需加载、权限或失败语义隔离、结果规模明显放大、SQL 方言无法表达,或后一步确实依赖前一步业务判断时才拆分,并在实现或交付说明中记录原因。
226
+
227
+ 从零搭建应用在实现阶段同时设计一组小而完整的示例数据,覆盖默认展示需要的核心对象、典型状态和必要关联。示例值必须非敏感、可被用户识别,并在业务主字段中使用稳定的“示例”标记;不为示例数据额外污染 schema。存在列表、详情、看板、统计或其他业务数据展示时,Page 必须调用真实 SQL Function 查询 Base 并渲染结果,不能把示例数组硬编码在 Page、FaaS、`localStorage` 或 fallback mock 中。页面加载时不得静默自动播种,避免多用户访问或刷新产生重复记录。
228
+
229
+ 代码完成后进入 Preview 发布;依赖安装、production build 和服务端 SQL 校验由 `deploy` 统一执行。
230
+
231
+ ## 4. 发布 Preview
232
+
233
+ 在包含 `base-database.jsonc` 的目录执行唯一的发布命令:
234
+
235
+ ```bash
236
+ npx @lark-base-open/base-database-cli deploy
237
+ ```
238
+
239
+ `deploy` 通常需要约 30 秒到 1 分钟,中间不显示阶段进度。等待该命令返回最终结果;依赖安装、构建、校验和发布均由 CLI 内部完成。
240
+
241
+ ### 从零搭建应用示例数据验收
242
+
243
+ 本节只适用于本次创建了新 Base 的从零搭建应用;复用已有 Base、修改已有应用时不得擅自添加示例记录。
244
+
245
+ 1. 从 `catalog.json` 读取真实 `baseToken`、table ID、字段类型和选项。先通过项目路由执行 `npx @lark-base-open/base-database-cli lark-cli -- base +field-list --base-token <base-token> --table-id <table-id>` 核对可写字段,再使用 `npx @lark-base-open/base-database-cli lark-cli -- base +record-batch-create --base-token <base-token> --table-id <table-id> --json '<payload>'` 写入已经设计的示例数据。当前环境提供等价的 Base Database CLI 命令时只替换命令前缀,不改变 `lark-cli` shortcut、参数或 payload;没有项目级路由时才直接执行同名 `lark-cli base +... --as user`。只写存储字段,单批不超过 200 条,不写 formula、lookup、系统字段或附件。
246
+ 2. `--json` 使用 `{"create_records":[{...}]}`;成功必须返回与请求数量一致的 `record_id_list`,并检查可选 `ignored_fields`。多表或有关联记录时按真实依赖串行写入,后续关联只使用前一步返回的 record ID。
247
+ 3. 存在列表、详情、看板、统计等业务数据展示时,通过项目路由调用页面实际使用的 SQL Function,而不是用 `+record-list` 代替展示链路验收:`npx @lark-base-open/base-database-cli lark-cli -- api POST /open-apis/base/v3/sites/<app-token>/invoke_function/<function-id> --params '{"env":"preview"}' --data '{"params":[...]}' --json`。检查 Function 顶层业务码与 ResultJSON,并确认刚写入的示例记录、关系和统计真实可见。
248
+ 4. 重复验证或修复后重试前,先用同一 SQL Function 按稳定示例标记或已返回的 record ID 确认当前状态,只补写缺失数据。创建结果未知时禁止盲目重试,避免生成重复记录。
249
+ 5. `lark-cli` 写入失败、返回记录数不符、SQL Function 返回非零业务码、响应结构不符合契约,或查询不到已确认写入的数据,都视为示例数据闭环未完成。保存脱敏错误和 LogID;写入问题检查 Catalog、字段、CellValue、关联 ID 和权限,查询问题检查 SQL、参数及响应解析。实现问题修复后重新 `deploy`,再从本节第 1 步验证。
250
+ 6. 只有认证、权限或平台服务存在证据充分的外部阻塞时才标记 `blocked`;不得声称示例数据或整体从零搭建应用已完成。示例写入与 SQL 回读均通过后,才进入通知 workflow 收尾并向用户交付 Preview。
251
+
252
+ 该闭环不需要浏览器,也不替代用户对 Page 真实写入流程、交互状态和 UI 的 E2E 验收,更不构成 Prod 发布授权。不得读取、输出或代填用户凭证。
253
+
254
+ 非从零场景,或从零场景完成上述闭环后,只把命令返回的顶层 `baseAppUrl` 交给用户,提示用户在飞书登录态继续体验页面,然后立即停止。不要展示管理后台 URL、旧 Preview URL 或内部静态资源 `staticUrl`;除上述闭环外,不要打开浏览器或直调 SQL/FaaS 做运行态验收。
255
+
256
+ 本次存在原生通知 workflow 时,示例数据验收通过后再按入口策略完成发布收尾,避免示例记录触发面向真实接收人的通知。`site_action` 只使用本次 `deploy` 返回的顶层 `baseAppUrl`:新 workflow 此时才执行 `+workflow-create`,一次性保留该 URL 的 `mode=edit` 等既有查询参数,并加入 Page 已实现的功能定位参数和 workflow 中的目标对象标识,再启用并回读;已有 workflow 才先 `+workflow-get`,用完整定义执行 `+workflow-update`,随后启用并回读。不得使用内部静态资源 `staticUrl`、`recordLink`、Base URL、管理后台 URL 或猜测的 Preview URL。`informational` 必须有用户明确要求纯展示的原文,并回读确认没有按钮;`base_action` 必须有用户明确要求进入多维表格的原文。回读时逐个核对本次创建或修改的 `LarkMessageAction`,并在交付清单记录 workflow ID、入口策略、按钮字段路径和环境无关的功能定位参数。任一配置或回读不满足约束时立即执行 `+workflow-disable`,并把交付标记为 partial 或 blocked,不得报告通知或整体系统已完成。完成原生配置后再向用户交付 Preview 并停止;这不授权继续调用 Function 或发布 Prod。
257
+
258
+ ### 部署后自动安装应用 Skill
259
+
260
+ 每次 Preview / Prod 发布成功后,CLI 会从模板生成本应用专属 Skill,自动安装到当前执行用户的 `$CODEX_HOME/skills`(未配置时为 `~/.codex/skills`);同一应用和平台环境使用固定目录,每次部署更新生成的 `SKILL.md`,不覆盖其他 Skill 或附加文件。无需再询问用户是否安装,也不要自行重复安装。
261
+
262
+ 交付时读取 `agentGuide.skill` 和 `agentGuide.message`:安装成功后简短告知用户“已安装/更新本应用 Skill,后续可直接让 Agent 使用本应用能力”,并给出 `$<skill.name>`。客户端尚未刷新 Skill 列表时提示开启新会话。Preview 同时说明 Skill 发现的是正式版,不代表本次 Preview;不得因为安装成功就自动执行发现、业务写入或 Prod 发布。
263
+
264
+ 安装失败不改变已经成功的发布结果。单独报告原因;需要修复安装时读取[应用能力 Skill](references/database-capability-skill.md),不要重新部署掩盖安装失败。托管环境的执行用户目录不等于终端用户电脑,不能把沙箱内安装描述成已安装到用户本机。
265
+
266
+ ## 5. 等待用户体验
267
+
268
+ 此前任务中的“搭建并发布”不包含 Prod 授权。用户没有明确回复“部署正式版”时,不继续调用接口、修改代码或发布。
269
+
270
+ ## 6. 发布 Prod
271
+
272
+ 用户体验后明确回复“部署正式版”,才执行:
273
+
274
+ ```bash
275
+ npx @lark-base-open/base-database-cli deploy --production --yes
276
+ ```
277
+
278
+ 该命令读取 `.base-database-cli/state/preview.json`,校验本地 Artifact SHA-256 和生成 Preview 时记录的工作区输入指纹后,直接把同一份已验证制品发布到 Prod,不重新构建或上传。没有 Preview 记录、应用 token 不匹配、回执缺少输入指纹、Artifact 变化或 Preview 之后源码/配置/文件结构发生变化时停止,重新执行普通 `deploy` 并等待用户验证新的 Preview。
279
+
280
+ Prod 发布应用本身不会自动更新 Base workflow。只要本次应用存在通知业务入口,无论当前链接看起来是否已正确,Prod 发布成功后都必须使用命令返回的顶层 `baseAppUrl`,按 Preview 交付清单逐个更新 workflow:只替换环境入口,逐字保留功能定位参数、动态对象参数、其他步骤和启用状态,然后回读确认所有应用 `openLink` 都以生产 `baseAppUrl` 为基础,且不再包含 `mode=edit`。任一 workflow 更新或回读失败时,必须明确报告“Prod 已发布,但通知入口切换未完成”,保留失败证据且不得把整体 Prod 交付报告为完成;不得通过重新发布 Prod 掩盖外部配置失败。
281
+
282
+ 正式发布后只交付生产 `baseAppUrl` 作为访问 URL,并附页面/表/operation 清单、用户已确认的 Preview,以及 FaaS 运行时等仍存在的平台限制。若本次需求涉及附件而目标环境尚未开通该能力,按[文件传输](references/file-transfer.md)的门禁把它记为平台限制。
283
+
284
+ ## 修改已有数据库应用
285
+
286
+ 托管 Builder 必须按宿主变量执行:
287
+
288
+ - `snapshot`:完整工程已经恢复;禁止 `init` 和 `pull`,读取 `base-database.jsonc`、`catalog.json` 与现有源码后只实现需求差异。
289
+ - `artifact`:第一项工程操作固定为 `base-database-cli pull . --app-token "$BASE_SITE_BUILDER_SITE_TOKEN"`;pull 失败立即停止,禁止退回 `init`。成功后读取工程并增量修改。
290
+ - `empty`:仅用于应用没有源码且没有 Base binding 的新建流程;执行一次带 `--app-token` 的 `init`,不得创建另一个应用。
291
+
292
+ 修改已有应用时需要使用当前已绑定 Base 中的新 Table,不重新执行 `init` 或 `pull`。先用 `lark-cli base +table-list/get` 的真实返回取得 Table ID,再在项目根目录执行:
293
+
294
+ ```bash
295
+ npx @lark-base-open/base-database-cli lark-cli -- api POST /open-apis/base/v3/sites/Prjxxxxxxxx/bind_base --data '{"baseToken":"basxxxxxxxx","tableIds":["tbl_new"]}' --json
296
+ npx @lark-base-open/base-database-cli lark-cli -- api GET /open-apis/base/v3/sites/Prjxxxxxxxx/catalog --json
297
+ ```
298
+
299
+ `bind_base` 只向同一 Base 追加并去重 Table ID,不覆盖原绑定。成功后把 Catalog 返回 envelope 的 `data` 对象写入 `catalog.json`,并在 `base-database.jsonc` 保留原 binding 的前提下把新 ID 合并进 `tableIds`。删除本地 Table ID 不会触发远程解绑;解绑须另行调用 unbind 接口并先完成[危险操作确认](#危险操作确认)。
300
+
301
+ 故障恢复时若宿主明确说明 Pi Session 未恢复,但 Workspace 已恢复有效工程,禁止 `init` 和 `pull`,先读取当前工程再继续本轮需求。所有修改流程都要保护需求外源码、Base schema、应用元信息 和 bindings;完成后重新执行 CLI `deploy`,等待用户确认 Preview,再发布 Prod。
302
+
303
+ ## 失败与交付
304
+
305
+ 环境、授权、生产数据边界或关键平台协议不可用时,停在受影响阶段,一次性汇总目标环境、method/path、脱敏响应和 LogID/Edge request ID。发布状态成功但访问 URL 返回 404/5xx 时,同时保留 URL、HTTP 状态和响应 LogID;不要猜替代协议、改写 URL、回退正式环境或用新资源掩盖错误。
306
+
307
+ Preview 交付至少包含顶层 `baseAppUrl`、业务页面和 operation 清单、发布制品摘要,以及仍存在的平台限制。从零搭建应用还要列出示例数据覆盖的核心对象、实际执行的写入命令、查询 Function 和验证结果;未完成时明确标记 `blocked`,不能省略。托管页面由用户在飞书登录态下体验;管理后台 URL、旧 Preview URL 和内部静态资源 `staticUrl` 不向用户展示。