@poping/yome 0.0.2 → 0.0.3

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 (185) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +11 -0
  3. package/README.md +308 -27
  4. package/README.zh-CN.md +335 -0
  5. package/dist/agent.d.ts +24 -2
  6. package/dist/agent.js +34 -2
  7. package/dist/agent.js.map +1 -1
  8. package/dist/context.d.ts +2 -0
  9. package/dist/context.js +116 -11
  10. package/dist/context.js.map +1 -1
  11. package/dist/index.js +147 -9
  12. package/dist/index.js.map +1 -1
  13. package/dist/llm.js +45 -2
  14. package/dist/llm.js.map +1 -1
  15. package/dist/loops/chain.js +8 -0
  16. package/dist/loops/chain.js.map +1 -1
  17. package/dist/loops/evaluator.js +8 -0
  18. package/dist/loops/evaluator.js.map +1 -1
  19. package/dist/loops/orchestrator.js +8 -0
  20. package/dist/loops/orchestrator.js.map +1 -1
  21. package/dist/loops/parallel.js.map +1 -1
  22. package/dist/loops/route.js +8 -0
  23. package/dist/loops/route.js.map +1 -1
  24. package/dist/loops/simple.js +15 -0
  25. package/dist/loops/simple.js.map +1 -1
  26. package/dist/permissions/index.d.ts +1 -1
  27. package/dist/permissions/index.js +1 -1
  28. package/dist/permissions/index.js.map +1 -1
  29. package/dist/permissions/loader.d.ts +20 -1
  30. package/dist/permissions/loader.js +51 -0
  31. package/dist/permissions/loader.js.map +1 -1
  32. package/dist/redact.d.ts +56 -0
  33. package/dist/redact.js +191 -0
  34. package/dist/redact.js.map +1 -0
  35. package/dist/skills/runner/applescript.d.ts +49 -0
  36. package/dist/skills/runner/applescript.js +100 -0
  37. package/dist/skills/runner/applescript.js.map +1 -0
  38. package/dist/skills/runner/dispatcher.d.ts +57 -0
  39. package/dist/skills/runner/dispatcher.js +407 -0
  40. package/dist/skills/runner/dispatcher.js.map +1 -0
  41. package/dist/skills/runner/kernel.d.ts +8 -0
  42. package/dist/skills/runner/kernel.js +732 -0
  43. package/dist/skills/runner/kernel.js.map +1 -0
  44. package/dist/skills/runner/tokenizer.d.ts +36 -0
  45. package/dist/skills/runner/tokenizer.js +177 -0
  46. package/dist/skills/runner/tokenizer.js.map +1 -0
  47. package/dist/threadCli.d.ts +11 -0
  48. package/dist/threadCli.js +177 -0
  49. package/dist/threadCli.js.map +1 -0
  50. package/dist/threadShare.d.ts +21 -0
  51. package/dist/threadShare.js +121 -0
  52. package/dist/threadShare.js.map +1 -0
  53. package/dist/threadSubmit.d.ts +32 -0
  54. package/dist/threadSubmit.js +199 -0
  55. package/dist/threadSubmit.js.map +1 -0
  56. package/dist/tools/bash.js +68 -13
  57. package/dist/tools/bash.js.map +1 -1
  58. package/dist/tools/index.d.ts +22 -2
  59. package/dist/tools/index.js +41 -5
  60. package/dist/tools/index.js.map +1 -1
  61. package/dist/tools/skillCall.d.ts +2 -0
  62. package/dist/tools/skillCall.js +77 -0
  63. package/dist/tools/skillCall.js.map +1 -0
  64. package/dist/ui/AgentPicker.js +3 -3
  65. package/dist/ui/AgentPicker.js.map +1 -1
  66. package/dist/ui/App.js +214 -61
  67. package/dist/ui/App.js.map +1 -1
  68. package/dist/ui/Banner.d.ts +2 -1
  69. package/dist/ui/Banner.js +23 -4
  70. package/dist/ui/Banner.js.map +1 -1
  71. package/dist/ui/InputBar.js +6 -3
  72. package/dist/ui/InputBar.js.map +1 -1
  73. package/dist/ui/Markdown.d.ts +2 -2
  74. package/dist/ui/Markdown.js +22 -7
  75. package/dist/ui/Markdown.js.map +1 -1
  76. package/dist/ui/MarketplacePicker.d.ts +7 -0
  77. package/dist/ui/MarketplacePicker.js +122 -0
  78. package/dist/ui/MarketplacePicker.js.map +1 -0
  79. package/dist/ui/MessageList.d.ts +4 -1
  80. package/dist/ui/MessageList.js +72 -7
  81. package/dist/ui/MessageList.js.map +1 -1
  82. package/dist/ui/ModelPicker.js +4 -4
  83. package/dist/ui/ModelPicker.js.map +1 -1
  84. package/dist/ui/PermissionPrompt.d.ts +16 -4
  85. package/dist/ui/PermissionPrompt.js +60 -15
  86. package/dist/ui/PermissionPrompt.js.map +1 -1
  87. package/dist/ui/SessionPicker.js +2 -2
  88. package/dist/ui/SessionPicker.js.map +1 -1
  89. package/dist/ui/ShimmerText.d.ts +8 -0
  90. package/dist/ui/ShimmerText.js +40 -0
  91. package/dist/ui/ShimmerText.js.map +1 -0
  92. package/dist/ui/Spinner.js +3 -9
  93. package/dist/ui/Spinner.js.map +1 -1
  94. package/dist/ui/TogglePicker.js +4 -4
  95. package/dist/ui/TogglePicker.js.map +1 -1
  96. package/dist/ui/ToolResult.js +6 -0
  97. package/dist/ui/ToolResult.js.map +1 -1
  98. package/dist/ui/UnifiedSkillsPicker.d.ts +10 -0
  99. package/dist/ui/UnifiedSkillsPicker.js +63 -0
  100. package/dist/ui/UnifiedSkillsPicker.js.map +1 -0
  101. package/dist/ui/animation.d.ts +3 -0
  102. package/dist/ui/animation.js +48 -0
  103. package/dist/ui/animation.js.map +1 -0
  104. package/dist/ui/useThrottledStream.d.ts +7 -0
  105. package/dist/ui/useThrottledStream.js +63 -0
  106. package/dist/ui/useThrottledStream.js.map +1 -0
  107. package/dist/yomeSkills/auth.d.ts +20 -0
  108. package/dist/yomeSkills/auth.js +70 -0
  109. package/dist/yomeSkills/auth.js.map +1 -0
  110. package/dist/yomeSkills/blacklist.d.ts +33 -0
  111. package/dist/yomeSkills/blacklist.js +101 -0
  112. package/dist/yomeSkills/blacklist.js.map +1 -0
  113. package/dist/yomeSkills/capabilities.d.ts +54 -0
  114. package/dist/yomeSkills/capabilities.js +175 -0
  115. package/dist/yomeSkills/capabilities.js.map +1 -0
  116. package/dist/yomeSkills/capabilityGuard.d.ts +31 -0
  117. package/dist/yomeSkills/capabilityGuard.js +113 -0
  118. package/dist/yomeSkills/capabilityGuard.js.map +1 -0
  119. package/dist/yomeSkills/cli.d.ts +17 -0
  120. package/dist/yomeSkills/cli.js +477 -0
  121. package/dist/yomeSkills/cli.js.map +1 -0
  122. package/dist/yomeSkills/devLink.d.ts +17 -0
  123. package/dist/yomeSkills/devLink.js +91 -0
  124. package/dist/yomeSkills/devLink.js.map +1 -0
  125. package/dist/yomeSkills/doctor.d.ts +13 -0
  126. package/dist/yomeSkills/doctor.js +152 -0
  127. package/dist/yomeSkills/doctor.js.map +1 -0
  128. package/dist/yomeSkills/enable.d.ts +8 -0
  129. package/dist/yomeSkills/enable.js +67 -0
  130. package/dist/yomeSkills/enable.js.map +1 -0
  131. package/dist/yomeSkills/hubPing.d.ts +1 -0
  132. package/dist/yomeSkills/hubPing.js +41 -0
  133. package/dist/yomeSkills/hubPing.js.map +1 -0
  134. package/dist/yomeSkills/install.d.ts +18 -0
  135. package/dist/yomeSkills/install.js +143 -0
  136. package/dist/yomeSkills/install.js.map +1 -0
  137. package/dist/yomeSkills/installGithub.d.ts +26 -0
  138. package/dist/yomeSkills/installGithub.js +192 -0
  139. package/dist/yomeSkills/installGithub.js.map +1 -0
  140. package/dist/yomeSkills/installMeta.d.ts +8 -0
  141. package/dist/yomeSkills/installMeta.js +76 -0
  142. package/dist/yomeSkills/installMeta.js.map +1 -0
  143. package/dist/yomeSkills/integrity.d.ts +26 -0
  144. package/dist/yomeSkills/integrity.js +107 -0
  145. package/dist/yomeSkills/integrity.js.map +1 -0
  146. package/dist/yomeSkills/invoke.d.ts +29 -0
  147. package/dist/yomeSkills/invoke.js +103 -0
  148. package/dist/yomeSkills/invoke.js.map +1 -0
  149. package/dist/yomeSkills/list.d.ts +11 -0
  150. package/dist/yomeSkills/list.js +55 -0
  151. package/dist/yomeSkills/list.js.map +1 -0
  152. package/dist/yomeSkills/login.d.ts +41 -0
  153. package/dist/yomeSkills/login.js +221 -0
  154. package/dist/yomeSkills/login.js.map +1 -0
  155. package/dist/yomeSkills/manifest.d.ts +60 -0
  156. package/dist/yomeSkills/manifest.js +47 -0
  157. package/dist/yomeSkills/manifest.js.map +1 -0
  158. package/dist/yomeSkills/paths.d.ts +13 -0
  159. package/dist/yomeSkills/paths.js +33 -0
  160. package/dist/yomeSkills/paths.js.map +1 -0
  161. package/dist/yomeSkills/publish.d.ts +16 -0
  162. package/dist/yomeSkills/publish.js +109 -0
  163. package/dist/yomeSkills/publish.js.map +1 -0
  164. package/dist/yomeSkills/rollback.d.ts +10 -0
  165. package/dist/yomeSkills/rollback.js +83 -0
  166. package/dist/yomeSkills/rollback.js.map +1 -0
  167. package/dist/yomeSkills/search.d.ts +21 -0
  168. package/dist/yomeSkills/search.js +31 -0
  169. package/dist/yomeSkills/search.js.map +1 -0
  170. package/dist/yomeSkills/skillsIndex.d.ts +36 -0
  171. package/dist/yomeSkills/skillsIndex.js +111 -0
  172. package/dist/yomeSkills/skillsIndex.js.map +1 -0
  173. package/dist/yomeSkills/unified.d.ts +53 -0
  174. package/dist/yomeSkills/unified.js +187 -0
  175. package/dist/yomeSkills/unified.js.map +1 -0
  176. package/dist/yomeSkills/uninstall.d.ts +7 -0
  177. package/dist/yomeSkills/uninstall.js +22 -0
  178. package/dist/yomeSkills/uninstall.js.map +1 -0
  179. package/dist/yomeSkills/update.d.ts +18 -0
  180. package/dist/yomeSkills/update.js +75 -0
  181. package/dist/yomeSkills/update.js.map +1 -0
  182. package/dist/yomeSkills/validate.d.ts +11 -0
  183. package/dist/yomeSkills/validate.js +99 -0
  184. package/dist/yomeSkills/validate.js.map +1 -0
  185. package/package.json +14 -5
@@ -0,0 +1,477 @@
1
+ // `yome skill <subcommand>` dispatcher. Returns the desired process exit code.
2
+ import { installFromLocal } from './install.js';
3
+ import { installFromGithub, isGithubSource } from './installGithub.js';
4
+ import { listInstalled } from './list.js';
5
+ import { uninstallBySlug } from './uninstall.js';
6
+ import { getYomeSkillsRoot } from './paths.js';
7
+ import { pingHubInstall } from './hubPing.js';
8
+ import { performLogin } from './login.js';
9
+ import { readAuthState, clearAuthState } from './auth.js';
10
+ import { setSkillEnabled, isSkillDisabled } from './enable.js';
11
+ import { updateSkills } from './update.js';
12
+ import { linkSkill, unlinkSkill } from './devLink.js';
13
+ import { publishSkill } from './publish.js';
14
+ import { searchHub } from './search.js';
15
+ import { readInstallMeta } from './installMeta.js';
16
+ import { KNOWN_CAPABILITIES, normaliseDeclared, readAllowedCapabilities, grantCapability, revokeCapability, describeCapability, } from './capabilities.js';
17
+ import { refreshIndex } from './skillsIndex.js';
18
+ import { readManifest } from './manifest.js';
19
+ import { installPathForSlug } from './paths.js';
20
+ import { validateSkillDir } from './validate.js';
21
+ import { runDoctor } from './doctor.js';
22
+ import { rollbackBySlug } from './rollback.js';
23
+ export async function runSkillSubcommand(args, flags) {
24
+ const sub = args[0];
25
+ switch (sub) {
26
+ case 'install': return await doInstall(args.slice(1), flags);
27
+ case 'uninstall':
28
+ case 'rm': return doUninstall(args.slice(1));
29
+ case 'list':
30
+ case 'ls': return doList(flags);
31
+ case 'enable': return doEnable(args.slice(1), true);
32
+ case 'disable': return doEnable(args.slice(1), false);
33
+ case 'update': return doUpdate(args.slice(1), flags);
34
+ case 'link': return doLink(args.slice(1), flags);
35
+ case 'unlink': return doUnlink(args.slice(1));
36
+ case 'search': return await doSearch(args.slice(1), flags);
37
+ case 'publish': return await doPublish(args.slice(1), flags);
38
+ case 'perms': return doPerms(args.slice(1), flags);
39
+ case 'validate': return doValidate(args.slice(1), flags);
40
+ case 'doctor': return doDoctor(flags);
41
+ case 'rollback': return await doRollback(args.slice(1), flags);
42
+ case undefined:
43
+ case 'help':
44
+ case '--help':
45
+ printSkillHelp();
46
+ return 0;
47
+ default:
48
+ console.error(`Unknown subcommand: yome skill ${sub}`);
49
+ printSkillHelp();
50
+ return 2;
51
+ }
52
+ }
53
+ // `yome login / logout / whoami` are top-level (no `skill` prefix), so
54
+ // the entry point in cli/src/index.tsx routes them straight here.
55
+ //
56
+ // Identity model: these talk to Yome (yome_token), not GitHub directly.
57
+ // GitHub is one of the providers the user can log in *through*.
58
+ const HUB_BASE = (process.env.YOME_HUB_BASE || 'https://yome.work').replace(/\/+$/, '');
59
+ export async function runLogin() {
60
+ const result = await performLogin();
61
+ if (!result.ok) {
62
+ console.error(`✗ login failed: ${result.reason}`);
63
+ if (result.code === 'yome_user_not_found') {
64
+ console.error(' Hint: open https://yome.work, sign in once with the same GitHub account, then re-run `yome login`.');
65
+ }
66
+ return 1;
67
+ }
68
+ const provider = result.state.provider_login ?? '(provider account)';
69
+ console.log(`✓ logged in to Yome as ${provider} via ${result.state.provider}`);
70
+ console.log(` yome user id: ${result.state.yome_user_id}`);
71
+ return 0;
72
+ }
73
+ export async function runLogout() {
74
+ const s = readAuthState();
75
+ if (!s) {
76
+ console.log('(was not logged in)');
77
+ return 0;
78
+ }
79
+ // Best-effort: tell the hub to revoke the token, then drop the local file.
80
+ try {
81
+ await fetch(`${HUB_BASE}/api/cli/auth/revoke`, {
82
+ method: 'POST',
83
+ headers: { Authorization: `Bearer ${s.yome_token}` },
84
+ });
85
+ }
86
+ catch { /* offline is fine — local clear still happens */ }
87
+ clearAuthState();
88
+ console.log('✓ logged out');
89
+ return 0;
90
+ }
91
+ export async function runWhoami() {
92
+ const s = readAuthState();
93
+ if (!s) {
94
+ console.log('Not logged in. Run `yome login`.');
95
+ return 0;
96
+ }
97
+ // Try to fetch the live view from the hub. Fall back to the cached
98
+ // ~/.yome/auth.json if the hub is unreachable so `whoami` still works
99
+ // offline.
100
+ try {
101
+ const r = await fetch(`${HUB_BASE}/api/cli/auth/whoami`, {
102
+ headers: { Authorization: `Bearer ${s.yome_token}` },
103
+ });
104
+ if (r.ok) {
105
+ const j = (await r.json());
106
+ if (j.ok && j.user) {
107
+ const u = j.user;
108
+ const ct = j.cli_token ?? {};
109
+ console.log(`Yome user: ${u.email ?? '(no email)'} (${u.user_id})`);
110
+ if (u.github_username)
111
+ console.log(` github: ${u.github_username}`);
112
+ console.log(` cli session: ${ct.client_label ?? 'yome-cli'}, provider=${ct.provider}, last_used=${ct.last_used_at}`);
113
+ console.log(` expires at: ${ct.expires_at}`);
114
+ return 0;
115
+ }
116
+ if (r.status === 401) {
117
+ console.error('✗ session is no longer valid — run `yome login`');
118
+ return 1;
119
+ }
120
+ }
121
+ }
122
+ catch { /* fall through to cached */ }
123
+ // Offline / hub unreachable
124
+ console.log(`Yome user (cached): ${s.yome_user_id}`);
125
+ console.log(` provider: ${s.provider} (${s.provider_login ?? '?'})`);
126
+ console.log(` obtained at: ${s.obtained_at}`);
127
+ console.log(` expires at: ${s.expires_at || '(unknown)'}`);
128
+ console.log(' (hub unreachable — showing cached values)');
129
+ return 0;
130
+ }
131
+ // ── skill subcommands ───────────────────────────────────────────────
132
+ async function doInstall(args, flags) {
133
+ const source = args[0];
134
+ if (!source) {
135
+ console.error('Usage: yome skill install <source> [--force] [--verbose]');
136
+ console.error(' <source> can be a local path, github:owner/repo[@ref][#subpath],');
137
+ console.error(' or https://github.com/owner/repo[/tree/<ref>/<subpath>]');
138
+ return 2;
139
+ }
140
+ const installOpts = {
141
+ force: flags.force,
142
+ verbose: flags.verbose,
143
+ yes: flags.yes,
144
+ skipVerify: flags.skipVerify,
145
+ };
146
+ const result = isGithubSource(source)
147
+ ? await installFromGithub(source, installOpts)
148
+ : await installFromLocal(source, installOpts);
149
+ if (!result.ok) {
150
+ console.error(`✗ install failed: ${result.reason}`);
151
+ return 1;
152
+ }
153
+ console.log(`✓ installed ${result.slug} → ${result.installedAt} (${result.copiedFiles} files)`);
154
+ if (result.slug) {
155
+ try {
156
+ await pingHubInstall(result.slug);
157
+ }
158
+ catch { /* unreachable */ }
159
+ }
160
+ return 0;
161
+ }
162
+ function doUninstall(args) {
163
+ const slug = args[0];
164
+ if (!slug) {
165
+ console.error('Usage: yome skill uninstall <@owner/name>');
166
+ return 2;
167
+ }
168
+ const result = uninstallBySlug(slug);
169
+ if (!result.ok) {
170
+ console.error(`✗ uninstall failed: ${result.reason}`);
171
+ return 1;
172
+ }
173
+ console.log(`✓ removed ${result.slug} (was at ${result.removedFrom})`);
174
+ return 0;
175
+ }
176
+ function doList(flags) {
177
+ const items = listInstalled();
178
+ // Enrich with status + source for the new STATUS / SOURCE columns.
179
+ const rows = items.map((i) => {
180
+ const meta = readInstallMeta(i.slug);
181
+ const disabled = isSkillDisabled(i.slug);
182
+ return {
183
+ slug: i.slug,
184
+ version: i.version,
185
+ domain: i.domain,
186
+ name: i.name ?? null,
187
+ status: disabled ? 'disabled' : 'enabled',
188
+ source: meta?.source ?? '(legacy)',
189
+ };
190
+ });
191
+ if (flags.json) {
192
+ process.stdout.write(JSON.stringify(rows, null, 2) + '\n');
193
+ return 0;
194
+ }
195
+ if (rows.length === 0) {
196
+ console.log(`No skills installed under ${getYomeSkillsRoot()}.`);
197
+ console.log('Try: yome skill install ./skills/yome-skill-ppt');
198
+ return 0;
199
+ }
200
+ console.log(`Installed skills (${getYomeSkillsRoot()}):`);
201
+ console.log('');
202
+ const slugW = Math.max(4, ...rows.map((r) => r.slug.length));
203
+ const verW = Math.max(7, ...rows.map((r) => r.version.length));
204
+ const domainW = Math.max(6, ...rows.map((r) => r.domain.length));
205
+ const statusW = Math.max(6, ...rows.map((r) => r.status.length));
206
+ const pad = (s, w) => s + ' '.repeat(Math.max(0, w - s.length));
207
+ console.log(` ${pad('SLUG', slugW)} ${pad('VERSION', verW)} ${pad('DOMAIN', domainW)} ${pad('STATUS', statusW)} SOURCE`);
208
+ for (const r of rows) {
209
+ console.log(` ${pad(r.slug, slugW)} ${pad(r.version, verW)} ${pad(r.domain, domainW)} ${pad(r.status, statusW)} ${r.source}`);
210
+ }
211
+ return 0;
212
+ }
213
+ function doEnable(args, enabled) {
214
+ const slug = args[0];
215
+ if (!slug) {
216
+ console.error(`Usage: yome skill ${enabled ? 'enable' : 'disable'} <@owner/name>`);
217
+ return 2;
218
+ }
219
+ const r = setSkillEnabled(slug, enabled);
220
+ if (!r.ok) {
221
+ console.error(`✗ ${enabled ? 'enable' : 'disable'} failed: ${r.reason}`);
222
+ return 1;
223
+ }
224
+ console.log(`✓ ${r.slug} is now ${r.state}`);
225
+ return 0;
226
+ }
227
+ async function doUpdate(args, flags) {
228
+ const slug = args[0]; // optional
229
+ const summary = await updateSkills(slug, { verbose: flags.verbose });
230
+ if (summary.rows.length === 0) {
231
+ console.log(slug ? `No installed skill named ${slug}.` : 'No skills installed.');
232
+ return 0;
233
+ }
234
+ for (const r of summary.rows) {
235
+ if (!r.ok) {
236
+ console.error(`✗ ${r.slug} ${r.reason}`);
237
+ continue;
238
+ }
239
+ if (r.changed) {
240
+ console.log(`↑ ${r.slug} ${r.before} → ${r.after}`);
241
+ }
242
+ else {
243
+ console.log(`= ${r.slug} ${r.before}${r.reason ? ` (${r.reason})` : ''}`);
244
+ }
245
+ }
246
+ return summary.allOk ? 0 : 1;
247
+ }
248
+ function doLink(args, flags) {
249
+ const path = args[0];
250
+ if (!path) {
251
+ console.error('Usage: yome skill link <path-to-skill> [--force]');
252
+ return 2;
253
+ }
254
+ const r = linkSkill(path, { force: flags.force });
255
+ if (!r.ok) {
256
+ console.error(`✗ link failed: ${r.reason}`);
257
+ return 1;
258
+ }
259
+ console.log(`✓ linked ${r.slug} → ${r.installedAt} (target: ${r.linkedTo})`);
260
+ return 0;
261
+ }
262
+ function doUnlink(args) {
263
+ const slug = args[0];
264
+ if (!slug) {
265
+ console.error('Usage: yome skill unlink <@owner/name>');
266
+ return 2;
267
+ }
268
+ const r = unlinkSkill(slug);
269
+ if (!r.ok) {
270
+ console.error(`✗ unlink failed: ${r.reason}`);
271
+ return 1;
272
+ }
273
+ console.log(`✓ unlinked ${r.slug} (removed ${r.unlinkedAt})`);
274
+ return 0;
275
+ }
276
+ async function doSearch(args, flags) {
277
+ const query = args[0];
278
+ if (!query) {
279
+ console.error('Usage: yome skill search <query> [--json]');
280
+ return 2;
281
+ }
282
+ const r = await searchHub(query);
283
+ if (!r.ok) {
284
+ console.error(`✗ search failed: ${r.reason}`);
285
+ return 1;
286
+ }
287
+ if (flags.json) {
288
+ process.stdout.write(JSON.stringify(r.hits, null, 2) + '\n');
289
+ return 0;
290
+ }
291
+ if (r.hits.length === 0) {
292
+ console.log(`No skills match "${query}".`);
293
+ return 0;
294
+ }
295
+ const slugW = Math.max(4, ...r.hits.map((h) => h.slug.length));
296
+ const verW = Math.max(7, ...r.hits.map((h) => (h.latest_version ?? '-').length));
297
+ const pad = (s, w) => s + ' '.repeat(Math.max(0, w - s.length));
298
+ console.log(` ${pad('SLUG', slugW)} ${pad('VERSION', verW)} ★ ↓ NAME`);
299
+ for (const h of r.hits) {
300
+ const stars = String(h.star_count ?? 0).padStart(4);
301
+ const installs = String(h.install_count ?? 0).padStart(4);
302
+ const flag = h.is_official ? ' [OFFICIAL]' : '';
303
+ console.log(` ${pad(h.slug, slugW)} ${pad(h.latest_version ?? '-', verW)} ${stars} ${installs} ${h.name ?? ''}${flag}`);
304
+ }
305
+ return 0;
306
+ }
307
+ async function doPublish(_args, flags) {
308
+ const r = await publishSkill(process.cwd(), { force: flags.force });
309
+ if (!r.ok) {
310
+ console.error(`✗ publish failed: ${r.reason}`);
311
+ return 1;
312
+ }
313
+ console.log(`✓ published ${r.slug} v${r.version}`);
314
+ return 0;
315
+ }
316
+ function doPerms(args, flags) {
317
+ const slug = args[0];
318
+ if (!slug) {
319
+ console.error('Usage: yome skill perms <@owner/name> [--grant=<cap>] [--revoke=<cap>]');
320
+ console.error(`Capabilities: ${KNOWN_CAPABILITIES.join(', ')}`);
321
+ return 2;
322
+ }
323
+ const dir = installPathForSlug(slug);
324
+ if (!dir) {
325
+ console.error(`malformed slug: ${slug}`);
326
+ return 2;
327
+ }
328
+ const manifest = readManifest(dir);
329
+ if (!manifest) {
330
+ console.error(`✗ ${slug} is not installed`);
331
+ return 1;
332
+ }
333
+ const declared = normaliseDeclared(manifest.system_capabilities);
334
+ // Mutating action?
335
+ const cap = (flags.grant ?? flags.revoke);
336
+ if (cap) {
337
+ if (!KNOWN_CAPABILITIES.includes(cap)) {
338
+ console.error(`unknown capability: ${cap} (allowed: ${KNOWN_CAPABILITIES.join(', ')})`);
339
+ return 2;
340
+ }
341
+ if (flags.grant && !declared.includes(cap)) {
342
+ console.error(`✗ cannot grant "${cap}" — not declared in manifest (declared: ${declared.join(', ') || '(none)'})`);
343
+ return 1;
344
+ }
345
+ const changed = flags.grant ? grantCapability(slug, cap) : revokeCapability(slug, cap);
346
+ if (changed) {
347
+ try {
348
+ refreshIndex();
349
+ }
350
+ catch { /* best-effort */ }
351
+ console.log(`✓ ${flags.grant ? 'granted' : 'revoked'} ${cap} on ${slug}`);
352
+ }
353
+ else {
354
+ console.log(`(${cap} was already ${flags.grant ? 'granted' : 'not granted'})`);
355
+ }
356
+ }
357
+ // Print current state.
358
+ const ac = readAllowedCapabilities(slug);
359
+ const allowed = ac?.allowed ?? [];
360
+ if (flags.json) {
361
+ process.stdout.write(JSON.stringify({ slug, declared, allowed, granted_at: ac?.granted_at, granted_by: ac?.granted_by }, null, 2) + '\n');
362
+ return 0;
363
+ }
364
+ console.log(`Capabilities for ${slug}:`);
365
+ if (declared.length === 0) {
366
+ console.log(' (manifest declares no capabilities)');
367
+ }
368
+ else {
369
+ for (const c of declared) {
370
+ const mark = allowed.includes(c) ? '[x]' : '[ ]';
371
+ console.log(` ${mark} ${c.padEnd(12)} ${describeCapability(c)}`);
372
+ }
373
+ }
374
+ if (ac)
375
+ console.log(` (granted ${ac.granted_at} by ${ac.granted_by})`);
376
+ return 0;
377
+ }
378
+ function doValidate(args, flags) {
379
+ const target = args[0] ?? '.';
380
+ const r = validateSkillDir(target);
381
+ if (flags.json) {
382
+ process.stdout.write(JSON.stringify(r, null, 2) + '\n');
383
+ return r.ok ? 0 : 1;
384
+ }
385
+ if (r.manifest) {
386
+ console.log(`Validating ${r.manifest.slug} v${r.manifest.version} (domain=${r.manifest.domain})`);
387
+ }
388
+ for (const w of r.warnings)
389
+ console.log(` ! ${w}`);
390
+ for (const e of r.errors)
391
+ console.log(` ✗ ${e}`);
392
+ if (r.ok) {
393
+ console.log(`✓ ${r.manifest ? r.manifest.slug : target} passes validation` +
394
+ (r.warnings.length ? ` (${r.warnings.length} warning${r.warnings.length === 1 ? '' : 's'})` : ''));
395
+ return 0;
396
+ }
397
+ console.error(`✗ validation failed (${r.errors.length} error${r.errors.length === 1 ? '' : 's'})`);
398
+ return 1;
399
+ }
400
+ function doDoctor(flags) {
401
+ const r = runDoctor();
402
+ if (flags.json) {
403
+ process.stdout.write(JSON.stringify(r, null, 2) + '\n');
404
+ return r.ok ? 0 : 1;
405
+ }
406
+ console.log(`Scanned ${r.scanned} installed skill${r.scanned === 1 ? '' : 's'}.`);
407
+ if (r.issues.length === 0) {
408
+ console.log('✓ no issues found');
409
+ return 0;
410
+ }
411
+ for (const it of r.issues) {
412
+ const tag = it.level === 'error' ? '✗ ERROR ' : '! warning';
413
+ const where = it.slug ? ` ${it.slug}` : '';
414
+ console.log(` ${tag}${where}: ${it.message}`);
415
+ }
416
+ const errCount = r.issues.filter(i => i.level === 'error').length;
417
+ return errCount === 0 ? 0 : 1;
418
+ }
419
+ async function doRollback(args, flags) {
420
+ const slug = args[0];
421
+ if (!slug) {
422
+ console.error('Usage: yome skill rollback <slug>');
423
+ return 2;
424
+ }
425
+ const r = await rollbackBySlug(slug);
426
+ if (flags.json) {
427
+ process.stdout.write(JSON.stringify(r, null, 2) + '\n');
428
+ return r.ok ? 0 : 1;
429
+ }
430
+ if (!r.ok) {
431
+ console.error(`✗ rollback failed: ${r.reason ?? 'unknown error'}`);
432
+ return 1;
433
+ }
434
+ const from = r.previousVersion ? ` from ${r.previousVersion}` : '';
435
+ const to = r.restoredVersion ? ` to ${r.restoredVersion}` : '';
436
+ console.log(`✓ rolled back ${r.slug ?? slug}${from}${to}`);
437
+ return 0;
438
+ }
439
+ function printSkillHelp() {
440
+ console.log(`
441
+ yome skill — manage installed yome-skill.json skills
442
+
443
+ Subcommands:
444
+ install <source> Install from local dir, github:owner/repo[@ref][#subpath],
445
+ or https://github.com/owner/repo[/tree/<ref>/<subpath>]
446
+ uninstall <slug> Remove an installed skill
447
+ list Show all installed skills (--json for machine-readable)
448
+ enable <slug> Enable a previously-disabled skill
449
+ disable <slug> Disable a skill (agent loader will skip it)
450
+ update [<slug>] Re-pull installed skills from their original source
451
+ link <path> Symlink a working dir into the registry (dev mode)
452
+ unlink <slug> Remove a dev-link
453
+ search <query> Search the public hub (--json for machine-readable)
454
+ publish Publish the cwd skill to the hub (requires 'yome login')
455
+ perms <slug> View / change capability grants
456
+ e.g. yome skill perms @yome/ppt --revoke=fs:write
457
+ validate [<path>] Lint a skill directory (defaults to cwd)
458
+ doctor Sanity-check the local skill registry
459
+ rollback <slug> Swap back to the previous version (one level of undo)
460
+
461
+ Top-level commands (run as 'yome login', not 'yome skill login'):
462
+ login GitHub OAuth Device Flow
463
+ logout Forget the saved credentials
464
+ whoami Show currently logged-in user
465
+
466
+ Examples:
467
+ yome skill install ./skills/yome-skill-ppt
468
+ yome skill install github:Whopus/yome-skill-ppt
469
+ yome skill list
470
+ yome skill disable @yome/ppt
471
+ yome skill update @yome/ppt
472
+ yome skill link ./my-new-skill
473
+ yome login
474
+ yome skill publish
475
+ `);
476
+ }
477
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/yomeSkills/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface LinkResult {
2
+ ok: boolean;
3
+ slug?: string;
4
+ installedAt?: string;
5
+ linkedTo?: string;
6
+ reason?: string;
7
+ }
8
+ export interface UnlinkResult {
9
+ ok: boolean;
10
+ slug: string;
11
+ unlinkedAt?: string;
12
+ reason?: string;
13
+ }
14
+ export declare function linkSkill(source: string, opts?: {
15
+ force?: boolean;
16
+ }): LinkResult;
17
+ export declare function unlinkSkill(slug: string): UnlinkResult;
@@ -0,0 +1,91 @@
1
+ // `yome skill link <path>` / `yome skill unlink <slug>` — point a slug
2
+ // in the registry at a working-directory copy on disk.
3
+ //
4
+ // Why symlinks (vs copying): the whole point of dev-link is "edit
5
+ // signature/viewer/cases live and have the agent see changes without
6
+ // reinstalling". A symlink at ~/.yome/skills/<owner>/<name>/ → user's
7
+ // working dir achieves that with zero machinery.
8
+ //
9
+ // On Windows, symlink creation requires admin or developer mode. We fall
10
+ // back to a junction or — worst case — print an actionable error.
11
+ import { existsSync, lstatSync, symlinkSync, unlinkSync, mkdirSync, rmSync } from 'fs';
12
+ import { resolve, dirname } from 'path';
13
+ import { readManifest, validateManifest } from './manifest.js';
14
+ import { installPathForSlug, parseSlug } from './paths.js';
15
+ import { writeInstallMeta, clearInstallMeta } from './installMeta.js';
16
+ import { refreshIndex } from './skillsIndex.js';
17
+ export function linkSkill(source, opts = {}) {
18
+ const abs = resolve(source);
19
+ if (!existsSync(abs))
20
+ return { ok: false, reason: `path does not exist: ${abs}` };
21
+ const manifest = readManifest(abs);
22
+ if (!manifest)
23
+ return { ok: false, reason: `${abs}/yome-skill.json missing or unreadable` };
24
+ const v = validateManifest(manifest);
25
+ if (!v.ok)
26
+ return { ok: false, reason: `manifest invalid: ${v.errors.join('; ')}` };
27
+ const slugP = parseSlug(manifest.slug);
28
+ if (!slugP)
29
+ return { ok: false, reason: `slug "${manifest.slug}" is malformed` };
30
+ const dest = installPathForSlug(manifest.slug);
31
+ if (!dest)
32
+ return { ok: false, reason: `cannot derive install path for ${manifest.slug}` };
33
+ if (existsSync(dest) || isSymlink(dest)) {
34
+ if (!opts.force) {
35
+ return { ok: false, reason: `${manifest.slug} already at ${dest} (use --force to replace)` };
36
+ }
37
+ rmSync(dest, { recursive: true, force: true });
38
+ }
39
+ mkdirSync(dirname(dest), { recursive: true });
40
+ try {
41
+ symlinkSync(abs, dest, 'dir');
42
+ }
43
+ catch (e) {
44
+ return { ok: false, reason: `symlink failed: ${e.message}` };
45
+ }
46
+ try {
47
+ writeInstallMeta(manifest.slug, {
48
+ source: `dev-link:${abs}`,
49
+ installed_at: new Date().toISOString(),
50
+ manifest_version: manifest.version,
51
+ });
52
+ }
53
+ catch { /* best effort */ }
54
+ try {
55
+ refreshIndex();
56
+ }
57
+ catch { /* best effort */ }
58
+ return { ok: true, slug: manifest.slug, installedAt: dest, linkedTo: abs };
59
+ }
60
+ export function unlinkSkill(slug) {
61
+ const dest = installPathForSlug(slug);
62
+ if (!dest)
63
+ return { ok: false, slug, reason: `slug "${slug}" is malformed` };
64
+ if (!existsSync(dest) && !isSymlink(dest)) {
65
+ return { ok: false, slug, reason: `${slug} is not installed at ${dest}` };
66
+ }
67
+ if (!isSymlink(dest)) {
68
+ return { ok: false, slug, reason: `${slug} is installed but not a dev-link (use 'yome skill uninstall' instead)` };
69
+ }
70
+ try {
71
+ unlinkSync(dest);
72
+ }
73
+ catch (e) {
74
+ return { ok: false, slug, reason: `unlink failed: ${e.message}` };
75
+ }
76
+ clearInstallMeta(slug);
77
+ try {
78
+ refreshIndex();
79
+ }
80
+ catch { /* best effort */ }
81
+ return { ok: true, slug, unlinkedAt: dest };
82
+ }
83
+ function isSymlink(p) {
84
+ try {
85
+ return lstatSync(p).isSymbolicLink();
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ }
91
+ //# sourceMappingURL=devLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devLink.js","sourceRoot":"","sources":["../../src/yomeSkills/devLink.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,uDAAuD;AACvD,EAAE;AACF,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,iDAAiD;AACjD,EAAE;AACF,yEAAyE;AACzE,kEAAkE;AAElE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAiBhD,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,OAA4B,EAAE;IACtE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,GAAG,EAAE,EAAE,CAAC;IAClF,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,wCAAwC,EAAE,CAAC;IAC5F,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACpF,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC;IACjF,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kCAAkC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAE3F,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,eAAe,IAAI,2BAA2B,EAAE,CAAC;QAC/F,CAAC;QACD,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAoB,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC;QACH,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC9B,MAAM,EAAE,YAAY,GAAG,EAAE;YACzB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtC,gBAAgB,EAAE,QAAQ,CAAC,OAAO;SACnC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE7B,IAAI,CAAC;QAAC,YAAY,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,gBAAgB,EAAE,CAAC;IAC7E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,wBAAwB,IAAI,EAAE,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,uEAAuE,EAAE,CAAC;IACrH,CAAC;IACD,IAAI,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAmB,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC;IAC/E,CAAC;IACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC;QAAC,YAAY,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC;QAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,13 @@
1
+ interface DoctorIssue {
2
+ level: 'error' | 'warning';
3
+ slug?: string;
4
+ path?: string;
5
+ message: string;
6
+ }
7
+ export interface DoctorReport {
8
+ ok: boolean;
9
+ scanned: number;
10
+ issues: DoctorIssue[];
11
+ }
12
+ export declare function runDoctor(): DoctorReport;
13
+ export {};