costaff-workspace 0.1.5 → 0.1.7

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 CHANGED
@@ -95,6 +95,7 @@ Names, folders, and who may read each file are managed at
95
95
  | `costaff-workspace pull <token> [dir]` | fetch a published file's source |
96
96
  | `costaff-workspace theme push\|list\|pull\|rm` | keep the project's `themes/` folder in the workspace |
97
97
  | `costaff-workspace whoami` | what this machine is signed in as |
98
+ | `costaff-workspace skills` | install the agent skill into this project |
98
99
  | `costaff-workspace login` | sign this machine in |
99
100
  | `costaff-workspace logout` | forget this machine's sign-in |
100
101
 
package/README.zh-TW.md CHANGED
@@ -88,6 +88,7 @@ q3-numbers → https://workspace.costaffs.app/8fjq2ldk3nx7yrpv
88
88
  | `costaff-workspace pull <token> [dir]` | 取回某份已發佈檔案的原始碼 |
89
89
  | `costaff-workspace theme push\|list\|pull\|rm` | 把專案的 `themes/` 資料夾留在工作區 |
90
90
  | `costaff-workspace whoami` | 這台機器登入的是誰 |
91
+ | `costaff-workspace skills` | 把 agent skill 裝進這個專案 |
91
92
  | `costaff-workspace login` | 讓這台機器登入 |
92
93
  | `costaff-workspace logout` | 忘掉這台機器的登入 |
93
94
 
@@ -0,0 +1,115 @@
1
+ /**
2
+ * 把 skill 裝進使用者的專案。
3
+ *
4
+ * skill 隨套件一起發,所以裝了 CLI 就有了 —— 但 agent 讀的是專案裡的
5
+ * `.claude/skills/`,不是 node_modules。這個指令做的就是那一段複製,並且說得出
6
+ * 哪幾份變了。
7
+ *
8
+ * 覆蓋而不是合併:這些檔案是這個套件的產物,不是使用者的稿子。想改的人應該改自己
9
+ * 的那一份、換個名字,而不是編輯一個下次升級就會被蓋掉的檔案。
10
+ */
11
+ import { existsSync } from 'node:fs';
12
+ import fs from 'node:fs/promises';
13
+ import path from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+ import { done, line } from "./report.js";
16
+ const USAGE = `costaff-workspace skills — install the agent skill into this project
17
+
18
+ costaff-workspace skills [--dry-run] [--json]
19
+
20
+ Writes into .claude/skills/ and .agents/skills/, overwriting what is there.
21
+ `;
22
+ /* 兩個都寫:Claude Code 讀前者,其他工具讀後者,而同一份東西不該要人選邊。 */
23
+ const TARGETS = ['.claude/skills', '.agents/skills'];
24
+ /**
25
+ * 套件裡 skills/ 的位置。
26
+ *
27
+ * 從這個模組往上找,而不是從 cwd —— 執行時 cwd 是使用者的專案。編譯後這個檔案在
28
+ * `dist/`,所以答案是它的上一層。
29
+ */
30
+ export function builtinSkillsDir(from = fileURLToPath(import.meta.url)) {
31
+ return path.resolve(path.dirname(from), '..', 'skills');
32
+ }
33
+ async function tree(dir) {
34
+ const out = new Map();
35
+ const walk = async (at) => {
36
+ for (const entry of await fs.readdir(at, { withFileTypes: true })) {
37
+ const abs = path.join(at, entry.name);
38
+ if (entry.isDirectory())
39
+ await walk(abs);
40
+ else
41
+ out.set(path.relative(dir, abs), await fs.readFile(abs, 'utf8'));
42
+ }
43
+ };
44
+ await walk(dir);
45
+ return out;
46
+ }
47
+ async function same(src, dst) {
48
+ if (!existsSync(dst))
49
+ return false;
50
+ const [a, b] = await Promise.all([tree(src), tree(dst)]);
51
+ if (a.size !== b.size)
52
+ return false;
53
+ for (const [file, text] of a)
54
+ if (b.get(file) !== text)
55
+ return false;
56
+ return true;
57
+ }
58
+ export async function skillChanges(builtin, cwd) {
59
+ if (!existsSync(builtin))
60
+ return [];
61
+ const names = (await fs.readdir(builtin, { withFileTypes: true }))
62
+ .filter((e) => e.isDirectory())
63
+ .map((e) => e.name)
64
+ .sort();
65
+ const changes = [];
66
+ for (const name of names) {
67
+ /* 以第一個目標判斷。兩個目標寫的是同一份,分開比對只會report出兩次同一件事。 */
68
+ const dst = path.join(cwd, TARGETS[0] ?? '', name);
69
+ const status = !existsSync(dst)
70
+ ? 'added'
71
+ : (await same(path.join(builtin, name), dst))
72
+ ? 'unchanged'
73
+ : 'updated';
74
+ changes.push({ name, status });
75
+ }
76
+ return changes;
77
+ }
78
+ export async function installSkills(builtin, cwd, dryRun) {
79
+ const changes = await skillChanges(builtin, cwd);
80
+ if (dryRun)
81
+ return changes;
82
+ for (const { name, status } of changes) {
83
+ if (status === 'unchanged')
84
+ continue;
85
+ for (const target of TARGETS) {
86
+ const dst = path.join(cwd, target, name);
87
+ await fs.rm(dst, { recursive: true, force: true });
88
+ await fs.mkdir(path.dirname(dst), { recursive: true });
89
+ await fs.cp(path.join(builtin, name), dst, { recursive: true });
90
+ }
91
+ }
92
+ return changes;
93
+ }
94
+ export async function runSkills(argv) {
95
+ if (argv.includes('--help') || argv.includes('-h')) {
96
+ process.stdout.write(USAGE);
97
+ return;
98
+ }
99
+ const dryRun = argv.includes('--dry-run');
100
+ const builtin = builtinSkillsDir();
101
+ const cwd = process.cwd();
102
+ const changes = await installSkills(builtin, cwd, dryRun);
103
+ if (changes.length === 0) {
104
+ line('no skills in this package\n');
105
+ }
106
+ else {
107
+ for (const { name, status } of changes) {
108
+ line(` ${name.padEnd(20)} ${dryRun && status !== 'unchanged' ? `would be ${status}` : status}\n`);
109
+ }
110
+ if (!dryRun)
111
+ line(`\nwritten to ${TARGETS.join(' and ')}\n`);
112
+ }
113
+ done({ command: 'skills', dryRun, targets: TARGETS, skills: changes });
114
+ }
115
+ //# sourceMappingURL=cli-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-skills.js","sourceRoot":"","sources":["../src/cli-skills.ts"],"names":[],"mappings":"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"}
@@ -220,12 +220,22 @@ export function checkOutput(surface, files) {
220
220
  }
221
221
  return problems;
222
222
  }
223
+ /**
224
+ * 指到根目錄、而不是指到自己那段前綴的資產。
225
+ *
226
+ * `//cdn…` 是協定相對的絕對網址,不是本地路徑;`/prefix/…` 已經對了。剩下以 `/`
227
+ * 開頭的,都會在掛到子路徑之後去敲錯的地方。
228
+ */
229
+ export function rootAbsoluteRefs(html, prefix) {
230
+ return [...html.matchAll(/(?:src|href)="([^"]+)"/g)]
231
+ .map((m) => m[1] ?? '')
232
+ .filter((r) => r.startsWith('/') && !r.startsWith('//') && !r.startsWith(`${prefix}`));
233
+ }
223
234
  /** The mounted SPA must reference its assets under its own mount, not the root. */
224
235
  export function checkBase(surface, indexHtml) {
225
236
  if (surface.type !== 'spa')
226
237
  return [];
227
- const refs = [...indexHtml.matchAll(/(?:src|href)="([^"]+)"/g)].map((m) => m[1]);
228
- const wrong = refs.filter((r) => r.startsWith('/') && !r.startsWith(`/${surface.mount}/`));
238
+ const wrong = rootAbsoluteRefs(indexHtml, `/${surface.mount}/`);
229
239
  return wrong.length === 0
230
240
  ? []
231
241
  : [
@@ -1 +1 @@
1
- {"version":3,"file":"integration.js","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integration.js","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -7,6 +7,7 @@
7
7
  * 還有哪些兄弟指令存在。
8
8
  */
9
9
  import { runPull } from "./cli-pull.js";
10
+ import { runSkills } from "./cli-skills.js";
10
11
  import { runTheme } from "./cli-theme.js";
11
12
  import { runWhoami } from "./cli-whoami.js";
12
13
  import { runPush } from "./cli.js";
@@ -20,6 +21,7 @@ const USAGE = `costaff-workspace — publish to and pull back from CoStaff Works
20
21
  pull <token> fetch a published file's source back out
21
22
  theme push, list, pull and remove the themes/ folder
22
23
  whoami what this machine is signed in as
24
+ skills install the agent skill into this project
23
25
  login sign this machine in
24
26
  logout forget this machine's sign-in
25
27
 
@@ -48,6 +50,8 @@ async function main() {
48
50
  return runTheme(rest);
49
51
  case 'whoami':
50
52
  return runWhoami(rest);
53
+ case 'skills':
54
+ return runSkills(rest);
51
55
  /* login 和 logout 走的是 push 那條路:它們本來就是同一組憑證。 */
52
56
  case 'login':
53
57
  return runPush([...rest, '--login']);
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,KAAK,GAAG;;;;;;;;;;;;;;uBAcS,gBAAgB;;CAEtC,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB;;;;OAIG;IACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,8CAA8C;QAC9C,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QACxC,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO;QACT;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,QAAQ,KAAK,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;uBAeS,gBAAgB;;CAEtC,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB;;;;OAIG;IACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,8CAA8C;QAC9C,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QACxC,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO;QACT;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,QAAQ,KAAK,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/push.js CHANGED
@@ -1,5 +1,8 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
1
3
  import { createBundle } from "./bundle.js";
2
4
  import { PublishError, discover, formatBytes, pollDeviceAuth, startDeviceAuth, upload } from "./client.js";
5
+ import { rootAbsoluteRefs } from "./integration.js";
3
6
  import { jsonMode } from "./report.js";
4
7
  import { clearCredential, loadCredential, saveCredential } from "./credentials.js";
5
8
  import { collectSource } from "./source.js";
@@ -70,6 +73,31 @@ async function resolveBearer(opts, name) {
70
73
  refuseInteractiveLogin();
71
74
  return login(opts, name);
72
75
  }
76
+ /**
77
+ * 建置出來的位址有沒有帶著 token。
78
+ *
79
+ * 每份檔案掛在 `/<token>/` 底下,所以 bundle 的資產路徑必須是相對的、或以那段
80
+ * 前綴開頭。Vite 的 `base` 預設是 `/`,一個照著自己專案 `pnpm build` 的人拿到的
81
+ * 就是 `/assets/index-xxx.js` —— 推上去之後頁面打得開、外框也在,只有內容是一片
82
+ * 黑:那些請求敲的是網站根目錄,那裡沒有那個檔案。
83
+ *
84
+ * 專案推送不會走到這裡,它的建置設定是 CLI 自己寫的。會撞上的是手動推一份自己
85
+ * 建好的站台的人,而那正是最沒有線索可循的情況 —— 黑畫面不會說出原因。
86
+ */
87
+ async function checkBakedBase(siteDir, entry, token) {
88
+ const html = await fs.readFile(path.join(siteDir, entry), 'utf8').catch(() => null);
89
+ if (html === null)
90
+ return;
91
+ const wrong = rootAbsoluteRefs(html, `/${token}/`);
92
+ if (wrong.length === 0)
93
+ return;
94
+ throw new PublishError(`${entry} points its assets at the site root (${wrong.slice(0, 2).join(', ')}), but this ` +
95
+ `file is served from /${token}/, so every one of them would 404 and the page would ` +
96
+ `render blank.\n` +
97
+ ` Build with that base and push again:\n` +
98
+ ` base: '/${token}/' in your vite config, or\n` +
99
+ ` vite build --base=/${token}/`);
100
+ }
73
101
  export async function push(opts) {
74
102
  const write = opts.out ?? (() => { });
75
103
  const cwd = opts.cwd ?? process.cwd();
@@ -89,6 +117,7 @@ export async function push(opts) {
89
117
  // were baked against it at build time, so discovering it late would mean
90
118
  // discovering it wrong.
91
119
  const token = opts.token ?? (await tokenFor(cwd, endpoint, opts.kind, opts.slug));
120
+ await checkBakedBase(opts.siteDir, opts.entry ?? 'index.html', token);
92
121
  const source = opts.sourceRoot === undefined || opts.sourceDir === undefined
93
122
  ? undefined
94
123
  : await collectSource({
package/dist/push.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "costaff-workspace",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Publish documents, decks and workbooks to CoStaff Workspace, and pull their source back out",
5
5
  "keywords": [
6
6
  "costaff",
@@ -31,6 +31,7 @@
31
31
  },
32
32
  "files": [
33
33
  "dist",
34
+ "skills",
34
35
  "README.zh-TW.md"
35
36
  ],
36
37
  "scripts": {
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: costaff-workspace
3
+ description: Publish a built open-doc, open-slide or open-sheet project to CoStaff Workspace and get shareable links back, pull a published file's source onto this machine to keep working on it, or keep a project's themes/ folder in the workspace. Use whenever the user asks to publish, ship, share, upload or "put this online", asks for the link to something they published, wants to continue editing something that lives in the workspace, or mentions costaff-workspace, workspace.costaffs.app, or a token that looks like a workspace address.
4
+ ---
5
+
6
+ # Publishing to CoStaff Workspace
7
+
8
+ The `costaff-workspace` CLI is the only way files get into the workspace — there
9
+ is no browser upload. Every command takes `--json`, which prints one line on
10
+ stdout and nothing else. Use it: the prose output is for people and its wording
11
+ is not a contract.
12
+
13
+ ## Before anything else: is this machine signed in?
14
+
15
+ ```bash
16
+ costaff-workspace whoami --json
17
+ ```
18
+
19
+ ```json
20
+ {"ok":true,"command":"whoami","endpoint":"https://workspace.costaffs.app","signedIn":false,"source":"none","account":null,"expiresAt":null}
21
+ ```
22
+
23
+ **If `signedIn` is false, stop and ask the user to run `costaff-workspace login`
24
+ themselves.** Signing in prints a device code that has to be approved in a
25
+ browser; you cannot do that, and you must not try. Under `--json` every command
26
+ that would need it fails immediately rather than waiting, so a run that skips
27
+ this check does not hang — it just fails later with less to say.
28
+
29
+ `source` tells you where a credential came from: `flag`, `env`, `stored`, or
30
+ `none`. `whoami` reads local state only, so a token revoked on the server still
31
+ reads as signed in until something uses it.
32
+
33
+ ## Publishing
34
+
35
+ Publishing sends the **built** output, so build first. Then, from the project
36
+ folder:
37
+
38
+ ```bash
39
+ pnpm build
40
+ costaff-workspace push --dry-run --json # packages and reports, uploads nothing
41
+ costaff-workspace push --json
42
+ ```
43
+
44
+ Always dry-run first and show the user what it found. `push` guesses the slug
45
+ from the folder name and the kind from `package.json`; a wrong guess publishes
46
+ under the wrong identity, and the dry run is where that is cheap to catch.
47
+
48
+ ```json
49
+ {"ok":true,"command":"push","endpoint":"https://workspace.costaffs.app","dryRun":false,
50
+ "items":[{"slug":"q3-report","kind":"deck","token":"8fjq2ldk3nx7yrpv0aet",
51
+ "url":"https://workspace.costaffs.app/8fjq2ldk3nx7yrpv0aet"}]}
52
+ ```
53
+
54
+ Give the user the `url`. Keep the `token`: it is what `pull` takes.
55
+
56
+ **Ask before pushing.** A push puts the user's work on a public host under an
57
+ address they can hand to other people. It is private until they share it, and
58
+ re-pushing keeps the same address, so this is not dangerous — but it is theirs
59
+ to decide, and an unasked-for publish is a surprise.
60
+
61
+ A project with several documents publishes each as its own bundle, so `items`
62
+ usually has more than one entry. Report all of them.
63
+
64
+ ## Continuing somewhere else
65
+
66
+ ```bash
67
+ costaff-workspace pull <token> ./my-doc --json
68
+ cd my-doc && pnpm install
69
+ ```
70
+
71
+ What comes back is a complete project. Build it, push it, and the same address
72
+ updates — that is how a document moves between machines without the link
73
+ changing.
74
+
75
+ ## Themes
76
+
77
+ A theme is a house style the next document can start from: `themes/<id>.md`
78
+ describes it, an optional `themes/<id>.demo.tsx` shows it. Themes belong to the
79
+ account rather than to one file.
80
+
81
+ ```bash
82
+ costaff-workspace theme list --json # what the account already has
83
+ costaff-workspace theme pull aurora # copy one into ./themes to follow it
84
+ costaff-workspace theme push # send this project's themes up
85
+ ```
86
+
87
+ When the user asks for a document that should look like their others, check
88
+ `theme list` first and pull the spec rather than inventing a look.
89
+
90
+ ## When something fails
91
+
92
+ Every failure is the same shape, with exit status 1:
93
+
94
+ ```json
95
+ {"ok":false,"error":"not signed in — run `costaff-workspace login` once, or set COSTAFF_WORKSPACE_TOKEN"}
96
+ ```
97
+
98
+ Read `error` and say what it says. Two worth recognising:
99
+
100
+ - **not signed in** — ask the user to run `login`. Do not retry.
101
+ - **a guess it could not make** — `push` refuses rather than inventing a slug or
102
+ kind. Pass `--slug` or `--kind` once you and the user agree what they are.
103
+
104
+ ## What not to do
105
+
106
+ - Do not open a browser, or tell the user you will sign in for them.
107
+ - Do not parse the human-readable output. `--json` exists for this.
108
+ - Do not push without building first; the workspace serves what `dist/` held.
109
+ - Do not push a project you have not been asked to publish.