primitive-admin 1.1.0-alpha.83 → 1.1.0-alpha.85

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 (121) hide show
  1. package/README.md +43 -1
  2. package/assets/skill/skills/primitive-platform/SKILL.md +105 -675
  3. package/dist/src/commands/admins.js +29 -32
  4. package/dist/src/commands/admins.js.map +1 -1
  5. package/dist/src/commands/analytics.js +2 -1
  6. package/dist/src/commands/analytics.js.map +1 -1
  7. package/dist/src/commands/apps.js +12 -5
  8. package/dist/src/commands/apps.js.map +1 -1
  9. package/dist/src/commands/blob-buckets.js +2 -1
  10. package/dist/src/commands/blob-buckets.js.map +1 -1
  11. package/dist/src/commands/catalog.js +26 -10
  12. package/dist/src/commands/catalog.js.map +1 -1
  13. package/dist/src/commands/collection-type-configs.js +2 -1
  14. package/dist/src/commands/collection-type-configs.js.map +1 -1
  15. package/dist/src/commands/collections.js +88 -18
  16. package/dist/src/commands/collections.js.map +1 -1
  17. package/dist/src/commands/connections.js +8 -9
  18. package/dist/src/commands/connections.js.map +1 -1
  19. package/dist/src/commands/cron-triggers.js +2 -1
  20. package/dist/src/commands/cron-triggers.js.map +1 -1
  21. package/dist/src/commands/database-type-configs.js +3 -2
  22. package/dist/src/commands/database-type-configs.js.map +1 -1
  23. package/dist/src/commands/databases.js +26 -10
  24. package/dist/src/commands/databases.js.map +1 -1
  25. package/dist/src/commands/documents.d.ts +38 -0
  26. package/dist/src/commands/documents.js +258 -64
  27. package/dist/src/commands/documents.js.map +1 -1
  28. package/dist/src/commands/email-templates.js +2 -1
  29. package/dist/src/commands/email-templates.js.map +1 -1
  30. package/dist/src/commands/env.js +11 -1
  31. package/dist/src/commands/env.js.map +1 -1
  32. package/dist/src/commands/feature-flags.js +2 -1
  33. package/dist/src/commands/feature-flags.js.map +1 -1
  34. package/dist/src/commands/functions.js +3 -2
  35. package/dist/src/commands/functions.js.map +1 -1
  36. package/dist/src/commands/group-type-configs.js +2 -1
  37. package/dist/src/commands/group-type-configs.js.map +1 -1
  38. package/dist/src/commands/groups.js +29 -8
  39. package/dist/src/commands/groups.js.map +1 -1
  40. package/dist/src/commands/guides.js +17 -11
  41. package/dist/src/commands/guides.js.map +1 -1
  42. package/dist/src/commands/integrations.js +26 -9
  43. package/dist/src/commands/integrations.js.map +1 -1
  44. package/dist/src/commands/locks.js +2 -1
  45. package/dist/src/commands/locks.js.map +1 -1
  46. package/dist/src/commands/metadata-category-configs.js +2 -1
  47. package/dist/src/commands/metadata-category-configs.js.map +1 -1
  48. package/dist/src/commands/metadata.js +8 -1
  49. package/dist/src/commands/metadata.js.map +1 -1
  50. package/dist/src/commands/prompts.js +28 -11
  51. package/dist/src/commands/prompts.js.map +1 -1
  52. package/dist/src/commands/rule-sets.js +2 -1
  53. package/dist/src/commands/rule-sets.js.map +1 -1
  54. package/dist/src/commands/scripts.js +15 -6
  55. package/dist/src/commands/scripts.js.map +1 -1
  56. package/dist/src/commands/secrets.js +2 -1
  57. package/dist/src/commands/secrets.js.map +1 -1
  58. package/dist/src/commands/sessions.js +10 -9
  59. package/dist/src/commands/sessions.js.map +1 -1
  60. package/dist/src/commands/sync.d.ts +64 -0
  61. package/dist/src/commands/sync.js +347 -17
  62. package/dist/src/commands/sync.js.map +1 -1
  63. package/dist/src/commands/tokens.js +2 -1
  64. package/dist/src/commands/tokens.js.map +1 -1
  65. package/dist/src/commands/users.js +16 -9
  66. package/dist/src/commands/users.js.map +1 -1
  67. package/dist/src/commands/vars.js +2 -1
  68. package/dist/src/commands/vars.js.map +1 -1
  69. package/dist/src/commands/waitlist.js +2 -1
  70. package/dist/src/commands/waitlist.js.map +1 -1
  71. package/dist/src/commands/webhooks.js +17 -10
  72. package/dist/src/commands/webhooks.js.map +1 -1
  73. package/dist/src/commands/workflows.js +36 -18
  74. package/dist/src/commands/workflows.js.map +1 -1
  75. package/dist/src/lib/api-client.d.ts +111 -1
  76. package/dist/src/lib/api-client.js +179 -66
  77. package/dist/src/lib/api-client.js.map +1 -1
  78. package/dist/src/lib/config-object-descriptor.js +29 -7
  79. package/dist/src/lib/config-object-descriptor.js.map +1 -1
  80. package/dist/src/lib/config-payload.js +27 -2
  81. package/dist/src/lib/config-payload.js.map +1 -1
  82. package/dist/src/lib/config-surface.d.ts +2 -1
  83. package/dist/src/lib/config-surface.js +50 -3
  84. package/dist/src/lib/config-surface.js.map +1 -1
  85. package/dist/src/lib/db-codegen/dbTypeIR.js +8 -0
  86. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -1
  87. package/dist/src/lib/document-ingest-rows.d.ts +137 -0
  88. package/dist/src/lib/document-ingest-rows.js +181 -0
  89. package/dist/src/lib/document-ingest-rows.js.map +1 -0
  90. package/dist/src/lib/document-ingest.d.ts +25 -2
  91. package/dist/src/lib/document-ingest.js +184 -31
  92. package/dist/src/lib/document-ingest.js.map +1 -1
  93. package/dist/src/lib/function-db-types.d.ts +1 -1
  94. package/dist/src/lib/function-db-types.js +1 -1
  95. package/dist/src/lib/function-document-types.js +23 -2
  96. package/dist/src/lib/function-document-types.js.map +1 -1
  97. package/dist/src/lib/generated-config-surfaces.d.ts +182 -1
  98. package/dist/src/lib/generated-config-surfaces.js +441 -2
  99. package/dist/src/lib/generated-config-surfaces.js.map +1 -1
  100. package/dist/src/lib/generated-sdk-types.d.ts +1 -1
  101. package/dist/src/lib/generated-sdk-types.js +1 -1
  102. package/dist/src/lib/generated-sdk-types.js.map +1 -1
  103. package/dist/src/lib/list-options.d.ts +68 -0
  104. package/dist/src/lib/list-options.js +89 -0
  105. package/dist/src/lib/list-options.js.map +1 -0
  106. package/dist/src/lib/log-inspection.d.ts +16 -0
  107. package/dist/src/lib/log-inspection.js +23 -0
  108. package/dist/src/lib/log-inspection.js.map +1 -1
  109. package/dist/src/lib/paginate.d.ts +15 -0
  110. package/dist/src/lib/paginate.js +17 -0
  111. package/dist/src/lib/paginate.js.map +1 -1
  112. package/dist/src/lib/resolve-owner.d.ts +19 -0
  113. package/dist/src/lib/resolve-owner.js +20 -0
  114. package/dist/src/lib/resolve-owner.js.map +1 -0
  115. package/dist/src/lib/skill-installer.d.ts +49 -3
  116. package/dist/src/lib/skill-installer.js +275 -100
  117. package/dist/src/lib/skill-installer.js.map +1 -1
  118. package/dist/src/lib/snapshot-build.d.ts +50 -0
  119. package/dist/src/lib/snapshot-build.js +111 -0
  120. package/dist/src/lib/snapshot-build.js.map +1 -0
  121. package/package.json +2 -2
@@ -5,18 +5,81 @@ import { homedir } from "os";
5
5
  import { join, dirname } from "path";
6
6
  import { fileURLToPath } from "url";
7
7
  import chalk from "chalk";
8
- const CLAUDE_DIR = join(homedir(), ".claude");
9
- const SKILLS_DIR = join(CLAUDE_DIR, "skills");
10
- const SKILL_DIR = join(SKILLS_DIR, "primitive-platform");
11
- const SKILL_FILE = join(SKILL_DIR, "SKILL.md");
12
- const HASH_FILE = join(SKILL_DIR, ".version");
13
- // Internal skill (Primitive-Labs members only). Not bundled with the CLI —
14
- // fetched from the private js-bao-wss repo via `gh`, so repo access is the gate.
8
+ /**
9
+ * `~/.claude`, or `PRIMITIVE_CLAUDE_DIR` when set. The override exists for the
10
+ * unit tests: `os.homedir()` reads the real process environment, which a
11
+ * vitest worker's `process.env` does not reach, so a test cannot stage a
12
+ * home directory by moving HOME.
13
+ */
14
+ function claudeDir() {
15
+ return process.env.PRIMITIVE_CLAUDE_DIR || join(homedir(), ".claude");
16
+ }
17
+ function skillsDir() {
18
+ return join(claudeDir(), "skills");
19
+ }
20
+ // The public skill, bundled with the CLI.
21
+ const PUBLIC_SKILL_NAME = "primitive-platform";
22
+ function publicSkillDir() {
23
+ return join(skillsDir(), PUBLIC_SKILL_NAME);
24
+ }
25
+ function publicSkillFile() {
26
+ return join(publicSkillDir(), "SKILL.md");
27
+ }
28
+ function publicHashFile() {
29
+ return join(publicSkillDir(), ".version");
30
+ }
15
31
  const INTERNAL_SKILL_NAME = "primitive-platform-internal";
16
- const INTERNAL_SKILL_DIR = join(SKILLS_DIR, INTERNAL_SKILL_NAME);
17
- const INTERNAL_SKILL_FILE = join(INTERNAL_SKILL_DIR, "SKILL.md");
18
- const INTERNAL_VERSION_FILE = join(INTERNAL_SKILL_DIR, ".version");
19
- const INTERNAL_SKILL_REPO_PATH = "repos/Primitive-Labs/js-bao-wss/contents/internal-skills/primitive-platform-internal/SKILL.md";
32
+ const FILE_ISSUE_SKILL_NAME = "file-issue";
33
+ // file-issue runs `_shared` scripts and reads `_shared` templates. In the
34
+ // repo `_shared` is a sibling of the skill (.claude/skills/_shared); in user
35
+ // space it is installed inside the skill directory, which the skill's own
36
+ // `$SHARED` resolution expects. check-filing.sh carries its section lists
37
+ // inline (it does not read the templates), but the skill drafts from the
38
+ // templates, so they ship too. linked-issue.sh sources closing-refs.sh.
39
+ const SHARED = ".claude/skills/_shared";
40
+ const FILE_ISSUE_SHARED_FILES = [
41
+ "check-filing.sh",
42
+ "resolve-sponsor.sh",
43
+ "linked-issue.sh",
44
+ "closing-refs.sh",
45
+ "filing-conventions.md",
46
+ "templates/bug-filing.md",
47
+ "templates/feature-filing.md",
48
+ "templates/docs-filing.md",
49
+ ];
50
+ export const FETCHED_SKILLS = [
51
+ {
52
+ name: INTERNAL_SKILL_NAME,
53
+ files: [
54
+ {
55
+ repoPath: `internal-skills/${INTERNAL_SKILL_NAME}/SKILL.md`,
56
+ localPath: "SKILL.md",
57
+ },
58
+ ],
59
+ },
60
+ {
61
+ name: FILE_ISSUE_SKILL_NAME,
62
+ files: [
63
+ { repoPath: `.claude/skills/${FILE_ISSUE_SKILL_NAME}/SKILL.md`, localPath: "SKILL.md" },
64
+ ...FILE_ISSUE_SHARED_FILES.map((f) => ({
65
+ repoPath: `${SHARED}/${f}`,
66
+ localPath: `_shared/${f}`,
67
+ })),
68
+ ],
69
+ },
70
+ ];
71
+ function fetchedSkillDir(skill) {
72
+ return join(skillsDir(), skill.name);
73
+ }
74
+ /**
75
+ * One stamp for all fetched skills, kept where the first fetched skill's
76
+ * stamp has always lived (`primitive-platform-internal/.version`) so installs
77
+ * made before file-issue was added upgrade in place: an old-format stamp has
78
+ * no `skills` map, and the next per-version refresh fills it in.
79
+ */
80
+ function membersStampFile() {
81
+ return join(skillsDir(), INTERNAL_SKILL_NAME, ".version");
82
+ }
20
83
  const __dirname = dirname(fileURLToPath(import.meta.url));
21
84
  function getBundledSkillPath() {
22
85
  // In dist: dist/src/lib/skill-installer.js -> ../../../assets/...
@@ -26,7 +89,7 @@ function getBundledSkillPath() {
26
89
  return distPath;
27
90
  return fileURLToPath(new URL("../../assets/skill/skills/primitive-platform/SKILL.md", import.meta.url));
28
91
  }
29
- function getCliVersion() {
92
+ export function getCliVersion() {
30
93
  // Same dual-path layout as getBundledSkillPath: dist/src/lib -> package root
31
94
  // is three levels up; src/lib (tsx) -> two levels up.
32
95
  // Both candidates can exist (from source, ../../../ is the repo root), so
@@ -52,9 +115,9 @@ function computeHash(content) {
52
115
  }
53
116
  function getInstalledHash() {
54
117
  try {
55
- if (!existsSync(HASH_FILE))
118
+ if (!existsSync(publicHashFile()))
56
119
  return null;
57
- return readFileSync(HASH_FILE, "utf-8").trim();
120
+ return readFileSync(publicHashFile(), "utf-8").trim();
58
121
  }
59
122
  catch {
60
123
  return null;
@@ -66,11 +129,12 @@ function getInstalledHash() {
66
129
  export function isSkillInstalled() {
67
130
  return getInstalledHash() !== null;
68
131
  }
69
- function getInternalStamp() {
132
+ function getMembersStamp() {
70
133
  try {
71
- if (!existsSync(INTERNAL_VERSION_FILE))
134
+ const file = membersStampFile();
135
+ if (!existsSync(file))
72
136
  return null;
73
- const stamp = JSON.parse(readFileSync(INTERNAL_VERSION_FILE, "utf-8"));
137
+ const stamp = JSON.parse(readFileSync(file, "utf-8"));
74
138
  if (typeof stamp.cliVersion === "string" && typeof stamp.hash === "string") {
75
139
  return stamp;
76
140
  }
@@ -80,61 +144,142 @@ function getInternalStamp() {
80
144
  return null;
81
145
  }
82
146
  }
83
- function writeInternalStamp(stamp) {
84
- writeFileSync(INTERNAL_VERSION_FILE, JSON.stringify(stamp, null, 2));
147
+ function writeMembersStamp(stamp) {
148
+ mkdirSync(dirname(membersStampFile()), { recursive: true });
149
+ writeFileSync(membersStampFile(), JSON.stringify(stamp, null, 2));
150
+ }
151
+ /** The installed hash of a fetched skill, from the stamp; null when absent. */
152
+ function installedFetchedHash(skill, stamp) {
153
+ if (!stamp)
154
+ return null;
155
+ if (!existsSync(join(fetchedSkillDir(skill), "SKILL.md")))
156
+ return null;
157
+ if (skill.name === INTERNAL_SKILL_NAME && !stamp.skills)
158
+ return stamp.hash;
159
+ return stamp.skills?.[skill.name] ?? null;
85
160
  }
86
161
  /**
87
- * Fetch the internal skill from the private js-bao-wss repo (main branch)
88
- * via `gh`. Returns null if gh is missing, unauthenticated, or the caller
89
- * lacks access to the repo — access failure is how non-members are gated.
162
+ * Read one file of the private js-bao-wss repo (main branch) via the GitHub
163
+ * contents API through `gh`. Returns null if gh is missing, unauthenticated,
164
+ * or the caller lacks access to the repo — access failure is how non-members
165
+ * are gated.
166
+ *
167
+ * `PRIMITIVE_SKILL_SOURCE_DIR` reads the same repo paths from a local
168
+ * checkout instead, to try a skill edit before it is merged (and for the
169
+ * unit tests, which install from this repo's own files).
90
170
  */
91
- async function fetchInternalSkill() {
171
+ export async function fetchRepoFile(repoPath) {
172
+ const sourceDir = process.env.PRIMITIVE_SKILL_SOURCE_DIR;
173
+ if (sourceDir) {
174
+ try {
175
+ return await readFile(join(sourceDir, repoPath), "utf-8");
176
+ }
177
+ catch {
178
+ return null;
179
+ }
180
+ }
92
181
  try {
93
182
  const { execFile } = await import("child_process");
94
183
  const { promisify } = await import("util");
95
- const { stdout } = await promisify(execFile)("gh", ["api", "-H", "Accept: application/vnd.github.raw", INTERNAL_SKILL_REPO_PATH], { timeout: 15000, maxBuffer: 4 * 1024 * 1024 });
96
- // Sanity check: must be the skill file, not an error payload.
97
- if (!stdout.startsWith("---") || !stdout.includes(`name: ${INTERNAL_SKILL_NAME}`)) {
98
- return null;
99
- }
184
+ const { stdout } = await promisify(execFile)("gh", ["api", "-H", "Accept: application/vnd.github.raw", `repos/Primitive-Labs/js-bao-wss/contents/${repoPath}`], { timeout: 15000, maxBuffer: 4 * 1024 * 1024 });
100
185
  return stdout;
101
186
  }
102
187
  catch {
103
188
  return null;
104
189
  }
105
190
  }
106
- function writeInternalSkill(content, cliVersion) {
107
- const hash = computeHash(content);
108
- mkdirSync(INTERNAL_SKILL_DIR, { recursive: true });
109
- writeFileSync(INTERNAL_SKILL_FILE, content);
110
- writeInternalStamp({ cliVersion, hash });
111
- return hash;
191
+ /**
192
+ * Fetch every file of a members' skill. Null if any file is unavailable, so
193
+ * a partial skill is never written over a complete one.
194
+ */
195
+ async function fetchSkill(skill) {
196
+ const files = new Map();
197
+ for (const file of skill.files) {
198
+ const content = await fetchRepoFile(file.repoPath);
199
+ if (content === null || content.length === 0)
200
+ return null;
201
+ // Sanity check the skill file itself: must be a skill, not an error payload.
202
+ if (file.localPath === "SKILL.md" && (!content.startsWith("---") || !content.includes(`name: ${skill.name}`))) {
203
+ return null;
204
+ }
205
+ files.set(file.localPath, content);
206
+ }
207
+ return files;
208
+ }
209
+ /** Hash of a fetched skill: every file's path and content, in manifest order. */
210
+ function hashSkillFiles(skill, files) {
211
+ const h = createHash("sha256");
212
+ for (const file of skill.files) {
213
+ h.update(file.localPath).update("\0").update(files.get(file.localPath) ?? "").update("\0");
214
+ }
215
+ return h.digest("hex").slice(0, 12);
216
+ }
217
+ function writeFetchedSkill(skill, files) {
218
+ const dir = fetchedSkillDir(skill);
219
+ for (const [localPath, content] of files) {
220
+ const target = join(dir, localPath);
221
+ mkdirSync(dirname(target), { recursive: true });
222
+ writeFileSync(target, content);
223
+ }
224
+ return hashSkillFiles(skill, files);
225
+ }
226
+ /**
227
+ * Fetch and write every members' skill. Returns the per-skill hash of what
228
+ * is now installed (a skill whose fetch failed keeps its previous hash, or
229
+ * is absent from the result when it was never installed).
230
+ */
231
+ async function installFetchedSkills(previous) {
232
+ const installed = {};
233
+ const fetched = [];
234
+ const failed = [];
235
+ for (const skill of FETCHED_SKILLS) {
236
+ const files = await fetchSkill(skill);
237
+ if (files) {
238
+ installed[skill.name] = writeFetchedSkill(skill, files);
239
+ fetched.push(skill.name);
240
+ }
241
+ else {
242
+ const kept = installedFetchedHash(skill, previous);
243
+ if (kept)
244
+ installed[skill.name] = kept;
245
+ failed.push(skill.name);
246
+ }
247
+ }
248
+ return { installed, fetched, failed };
249
+ }
250
+ function stampFrom(cliVersion, installed) {
251
+ return {
252
+ cliVersion,
253
+ hash: installed[INTERNAL_SKILL_NAME] ?? "",
254
+ skills: installed,
255
+ };
112
256
  }
113
257
  /**
114
- * Refresh an already-installed internal skill if the CLI version changed
115
- * since the last attempt. One fetch per CLI release: the stamp is advanced
116
- * even when the fetch fails, so an offline or revoked user isn't retried
117
- * on every command (an explicit `primitive skill install` always refetches).
258
+ * Refresh the members' skills if the CLI version changed since the last
259
+ * attempt. One fetch per CLI release: the stamp is advanced even when the
260
+ * fetch fails, so an offline or revoked user isn't retried on every command
261
+ * (an explicit `primitive skill install` always refetches). Only runs when
262
+ * a members' skill is already installed — a first install is explicit only.
118
263
  */
119
- async function refreshInternalSkill() {
120
- const stamp = getInternalStamp();
264
+ async function refreshFetchedSkills() {
265
+ const stamp = getMembersStamp();
121
266
  if (!stamp)
122
267
  return; // not installed — explicit install only
123
268
  const cliVersion = getCliVersion();
124
269
  if (!cliVersion || stamp.cliVersion === cliVersion)
125
270
  return;
126
- const content = await fetchInternalSkill();
127
- if (content) {
128
- const hash = writeInternalSkill(content, cliVersion);
129
- if (hash !== stamp.hash) {
130
- // Diagnostic, not payload: post-command notices must stay off stdout so
131
- // `primitive <verb> --json | jq .` parses (#2357). Same stream choice as
132
- // the update banner in version-check.ts.
133
- console.error(chalk.dim("Updated Primitive internal skill for Claude Code"));
134
- }
271
+ const { installed, fetched } = await installFetchedSkills(stamp);
272
+ if (fetched.length === 0) {
273
+ writeMembersStamp({ ...stamp, cliVersion });
274
+ return;
135
275
  }
136
- else {
137
- writeInternalStamp({ ...stamp, cliVersion });
276
+ const changed = fetched.filter((name) => installed[name] !== installedFetchedHash(FETCHED_SKILLS.find((s) => s.name === name), stamp));
277
+ writeMembersStamp(stampFrom(cliVersion, installed));
278
+ if (changed.length > 0) {
279
+ // Diagnostic, not payload: post-command notices must stay off stdout so
280
+ // `primitive <verb> --json | jq .` parses (#2357). Same stream choice as
281
+ // the update banner in version-check.ts.
282
+ console.error(chalk.dim(`Updated Primitive members' skills for Claude Code (${changed.join(", ")})`));
138
283
  }
139
284
  }
140
285
  /**
@@ -148,7 +293,7 @@ export async function checkSkillStatus() {
148
293
  const bundledPath = getBundledSkillPath();
149
294
  if (!existsSync(bundledPath))
150
295
  return;
151
- if (!existsSync(CLAUDE_DIR))
296
+ if (!existsSync(claudeDir()))
152
297
  return;
153
298
  const bundledContent = await readFile(bundledPath, "utf-8");
154
299
  const bundledHash = computeHash(bundledContent);
@@ -156,14 +301,14 @@ export async function checkSkillStatus() {
156
301
  if (installedHash) {
157
302
  // Already installed — silently auto-update if needed
158
303
  if (installedHash !== bundledHash) {
159
- mkdirSync(SKILL_DIR, { recursive: true });
160
- writeFileSync(SKILL_FILE, bundledContent);
161
- writeFileSync(HASH_FILE, bundledHash);
304
+ mkdirSync(publicSkillDir(), { recursive: true });
305
+ writeFileSync(publicSkillFile(), bundledContent);
306
+ writeFileSync(publicHashFile(), bundledHash);
162
307
  console.error(chalk.dim("Updated Primitive platform skill for Claude Code"));
163
308
  }
164
- // Internal skill (if installed) refreshes from the private repo, at
309
+ // Members' skills (if installed) refresh from the private repo, at
165
310
  // most once per CLI release.
166
- await refreshInternalSkill();
311
+ await refreshFetchedSkills();
167
312
  }
168
313
  else {
169
314
  // Not installed — show a non-blocking hint
@@ -176,8 +321,9 @@ export async function checkSkillStatus() {
176
321
  }
177
322
  /**
178
323
  * Explicitly install or reinstall the skill. Shows output.
179
- * Also installs the internal skill when the caller has access to the
180
- * private repo (Primitive-Labs members); silently skipped otherwise.
324
+ * Also installs the members' skills (primitive-platform-internal and
325
+ * file-issue) when the caller has access to the private repo
326
+ * (Primitive-Labs members); silently skipped otherwise.
181
327
  */
182
328
  export async function installSkillExplicit() {
183
329
  const bundledPath = getBundledSkillPath();
@@ -185,82 +331,111 @@ export async function installSkillExplicit() {
185
331
  console.error(chalk.red("Skill assets not found. Reinstall the CLI."));
186
332
  return false;
187
333
  }
188
- if (!existsSync(CLAUDE_DIR)) {
334
+ if (!existsSync(claudeDir())) {
189
335
  console.error(chalk.red("Claude Code not found (~/.claude does not exist)."));
190
336
  console.error(chalk.dim("Install Claude Code first: https://claude.ai/code"));
191
337
  return false;
192
338
  }
193
339
  const bundledContent = readFileSync(bundledPath, "utf-8");
194
340
  const bundledHash = computeHash(bundledContent);
195
- mkdirSync(SKILL_DIR, { recursive: true });
196
- writeFileSync(SKILL_FILE, bundledContent);
197
- writeFileSync(HASH_FILE, bundledHash);
341
+ mkdirSync(publicSkillDir(), { recursive: true });
342
+ writeFileSync(publicSkillFile(), bundledContent);
343
+ writeFileSync(publicHashFile(), bundledHash);
198
344
  console.log(chalk.green("Primitive platform skill installed for Claude Code."));
199
- console.log(chalk.dim(`Location: ${SKILL_FILE}`));
345
+ console.log(chalk.dim(`Location: ${publicSkillFile()}`));
200
346
  console.log(chalk.dim(`Version: ${bundledHash}`));
201
- const wasInstalled = getInternalStamp() !== null;
202
- const internalContent = await fetchInternalSkill();
203
- if (internalContent) {
204
- const hash = writeInternalSkill(internalContent, getCliVersion() ?? "unknown");
205
- console.log(chalk.green("Primitive internal skill installed (Primitive-Labs members)."));
206
- console.log(chalk.dim(`Location: ${INTERNAL_SKILL_FILE}`));
207
- console.log(chalk.dim(`Version: ${hash}`));
347
+ const previous = getMembersStamp();
348
+ const { installed, fetched, failed } = await installFetchedSkills(previous);
349
+ if (Object.keys(installed).length > 0) {
350
+ writeMembersStamp(stampFrom(getCliVersion() ?? "unknown", installed));
351
+ }
352
+ for (const skill of FETCHED_SKILLS) {
353
+ if (fetched.includes(skill.name)) {
354
+ console.log(chalk.green(`Primitive ${skill.name} skill installed (Primitive-Labs members).`));
355
+ console.log(chalk.dim(`Location: ${fetchedSkillDir(skill)}`));
356
+ console.log(chalk.dim(`Version: ${installed[skill.name]}`));
357
+ }
358
+ else if (installed[skill.name]) {
359
+ // Keep the existing copy; just tell the user the refresh didn't happen.
360
+ console.log(chalk.yellow(`Could not refresh the ${skill.name} skill (gh unavailable or no repo access); keeping the installed copy.`));
361
+ }
208
362
  }
209
- else if (wasInstalled) {
210
- // Keep the existing copy; just tell the user the refresh didn't happen.
211
- console.log(chalk.yellow("Could not refresh the internal skill (gh unavailable or no repo access); keeping the installed copy."));
363
+ // A member with one skill installed and another that failed to fetch
364
+ // (a transient error) is told; a non-member (nothing fetched, nothing
365
+ // installed) is told nothing.
366
+ if (fetched.length > 0 && failed.length > 0) {
367
+ console.log(chalk.yellow(`Could not fetch: ${failed.join(", ")}. Run primitive skill install again to retry.`));
212
368
  }
213
369
  return true;
214
370
  }
215
371
  /**
216
- * Uninstall the skill (and the internal skill, if present).
372
+ * Uninstall the skill (and the members' skills, if present).
217
373
  */
218
374
  export function uninstallSkill() {
219
- if (!existsSync(SKILL_DIR) && !existsSync(INTERNAL_SKILL_DIR)) {
375
+ const fetchedDirs = FETCHED_SKILLS.map((skill) => ({ skill, dir: fetchedSkillDir(skill) }));
376
+ if (!existsSync(publicSkillDir()) && !fetchedDirs.some(({ dir }) => existsSync(dir))) {
220
377
  console.log(chalk.dim("Skill is not installed."));
221
378
  return true;
222
379
  }
223
- if (existsSync(SKILL_DIR)) {
224
- rmSync(SKILL_DIR, { recursive: true });
380
+ if (existsSync(publicSkillDir())) {
381
+ rmSync(publicSkillDir(), { recursive: true });
225
382
  console.log(chalk.green("Primitive platform skill uninstalled."));
226
383
  }
227
- if (existsSync(INTERNAL_SKILL_DIR)) {
228
- rmSync(INTERNAL_SKILL_DIR, { recursive: true });
229
- console.log(chalk.green("Primitive internal skill uninstalled."));
384
+ for (const { skill, dir } of fetchedDirs) {
385
+ if (existsSync(dir)) {
386
+ rmSync(dir, { recursive: true });
387
+ console.log(chalk.green(`Primitive ${skill.name} skill uninstalled.`));
388
+ }
230
389
  }
231
390
  return true;
232
391
  }
392
+ /** The data `skillStatus()` prints; exported so tests can read it directly. */
393
+ export function getSkillStatus() {
394
+ const bundledPath = getBundledSkillPath();
395
+ const stamp = getMembersStamp();
396
+ const fetched = {};
397
+ for (const skill of FETCHED_SKILLS) {
398
+ const hash = installedFetchedHash(skill, stamp);
399
+ fetched[skill.name] = hash && stamp
400
+ ? { hash, cliVersion: stamp.cliVersion, location: fetchedSkillDir(skill) }
401
+ : null;
402
+ }
403
+ return {
404
+ installedHash: getInstalledHash(),
405
+ bundledHash: existsSync(bundledPath) ? computeHash(readFileSync(bundledPath, "utf-8")) : null,
406
+ location: publicSkillFile(),
407
+ fetched,
408
+ };
409
+ }
233
410
  /**
234
411
  * Show current skill installation status.
235
412
  */
236
413
  export function skillStatus() {
237
- const installedHash = getInstalledHash();
238
- const bundledPath = getBundledSkillPath();
239
- const bundledHash = existsSync(bundledPath)
240
- ? computeHash(readFileSync(bundledPath, "utf-8"))
241
- : null;
242
- if (!installedHash) {
414
+ const status = getSkillStatus();
415
+ if (!status.installedHash) {
243
416
  console.log(chalk.yellow("Skill is not installed."));
244
417
  }
245
418
  else {
246
419
  console.log(chalk.green("Skill is installed."));
247
- console.log(chalk.dim(` Location: ${SKILL_FILE}`));
248
- console.log(chalk.dim(` Version: ${installedHash}`));
420
+ console.log(chalk.dim(` Location: ${status.location}`));
421
+ console.log(chalk.dim(` Version: ${status.installedHash}`));
249
422
  }
250
- if (bundledHash) {
251
- console.log(chalk.dim(` Bundled: ${bundledHash}`));
252
- if (installedHash && installedHash !== bundledHash) {
423
+ if (status.bundledHash) {
424
+ console.log(chalk.dim(` Bundled: ${status.bundledHash}`));
425
+ if (status.installedHash && status.installedHash !== status.bundledHash) {
253
426
  console.log(chalk.yellow(" Update available — run: primitive skill install"));
254
427
  }
255
428
  }
256
- const internalStamp = getInternalStamp();
257
- if (internalStamp) {
258
- console.log(chalk.green("Internal skill is installed (Primitive-Labs members)."));
259
- console.log(chalk.dim(` Location: ${INTERNAL_SKILL_FILE}`));
260
- console.log(chalk.dim(` Version: ${internalStamp.hash} (fetched for CLI ${internalStamp.cliVersion})`));
261
- }
262
- else {
263
- console.log(chalk.dim("Internal skill is not installed (Primitive-Labs members: primitive skill install)."));
429
+ for (const skill of FETCHED_SKILLS) {
430
+ const entry = status.fetched[skill.name];
431
+ if (entry) {
432
+ console.log(chalk.green(`${skill.name} skill is installed (Primitive-Labs members).`));
433
+ console.log(chalk.dim(` Location: ${entry.location}`));
434
+ console.log(chalk.dim(` Version: ${entry.hash} (fetched for CLI ${entry.cliVersion})`));
435
+ }
436
+ else {
437
+ console.log(chalk.dim(`${skill.name} skill is not installed (Primitive-Labs members: primitive skill install).`));
438
+ }
264
439
  }
265
440
  }
266
441
  //# sourceMappingURL=skill-installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../../src/lib/skill-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../../src/lib/skill-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Asking for a snapshot and, optionally, watching the build that follows
3
+ * (#3666, criterion 7).
4
+ *
5
+ * The request itself is one call; what this module is for is the waiting.
6
+ * The build does not exist when the route answers — a seal arms the alarm and
7
+ * the alarm's first tick begins the build — so the id the caller holds names
8
+ * nothing for a moment, and a read that says "no such build" is `not yet`
9
+ * rather than a failure.
10
+ *
11
+ * Exit codes follow `documents ingest`, as `docs/cli-design.md` records them:
12
+ * 0 the build verified, 1 it failed, 124 a wait that gave up, 130 Ctrl-C.
13
+ * Both ways of giving up on the WATCHING are 124/130 and both say the build
14
+ * keeps running; only the build itself failing is 1. The word `failed`
15
+ * belongs to the build, so nothing this module prints about giving up uses it.
16
+ */
17
+ /** The two calls driving a request; `ApiClient` supplies them in the verb. */
18
+ export interface SnapshotBuildDriverClient {
19
+ requestSnapshot(documentId: string): Promise<any>;
20
+ getSnapshot(documentId: string, buildId: string): Promise<any>;
21
+ }
22
+ export interface DriveSnapshotBuildOptions {
23
+ client: SnapshotBuildDriverClient;
24
+ documentId: string;
25
+ /** Poll until the build settles; `--wait` sets this. */
26
+ wait?: boolean;
27
+ /** `--timeout`, in milliseconds; null waits indefinitely. */
28
+ timeoutMs?: number | null;
29
+ /** Ctrl-C. */
30
+ signal?: AbortSignal;
31
+ /** State changes and progress; stderr in the verb. */
32
+ onProgress?: (line: string) => void;
33
+ now?: () => number;
34
+ sleep?: (ms: number) => Promise<void>;
35
+ }
36
+ /** What the run settled on. */
37
+ export interface SnapshotBuildOutcome {
38
+ /** 0 verified, 1 the build failed, 124 timed out, 130 interrupted. */
39
+ exitCode: number;
40
+ /** The route's answer, as received. */
41
+ response: any;
42
+ /** The terminal build view, when the wait read one. */
43
+ build: any | null;
44
+ /** The reason, for stderr. */
45
+ message?: string;
46
+ }
47
+ /**
48
+ * Ask for a snapshot, and watch the build if the caller asked to (#3666).
49
+ */
50
+ export declare function driveSnapshotBuild(options: DriveSnapshotBuildOptions): Promise<SnapshotBuildOutcome>;