@hypercli.com/cli 0.0.0-stage → 0.9.2

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 (98) hide show
  1. package/README.md +25 -2
  2. package/dist/commands/acp.d.ts +5 -0
  3. package/dist/commands/acp.js +51 -0
  4. package/dist/commands/acp.js.map +1 -0
  5. package/dist/commands/agent-login.d.ts +97 -0
  6. package/dist/commands/agent-login.js +547 -0
  7. package/dist/commands/agent-login.js.map +1 -0
  8. package/dist/commands/agents.d.ts +48 -0
  9. package/dist/commands/agents.js +2026 -0
  10. package/dist/commands/agents.js.map +1 -0
  11. package/dist/commands/configure.d.ts +11 -0
  12. package/dist/commands/configure.js +59 -0
  13. package/dist/commands/configure.js.map +1 -0
  14. package/dist/commands/files.d.ts +15 -0
  15. package/dist/commands/files.js +176 -0
  16. package/dist/commands/files.js.map +1 -0
  17. package/dist/commands/flow.d.ts +20 -0
  18. package/dist/commands/flow.js +360 -0
  19. package/dist/commands/flow.js.map +1 -0
  20. package/dist/commands/integrations.d.ts +32 -0
  21. package/dist/commands/integrations.js +460 -0
  22. package/dist/commands/integrations.js.map +1 -0
  23. package/dist/commands/jobs.d.ts +5 -0
  24. package/dist/commands/jobs.js +496 -0
  25. package/dist/commands/jobs.js.map +1 -0
  26. package/dist/commands/me.d.ts +23 -0
  27. package/dist/commands/me.js +258 -0
  28. package/dist/commands/me.js.map +1 -0
  29. package/dist/commands/memory.d.ts +5 -0
  30. package/dist/commands/memory.js +110 -0
  31. package/dist/commands/memory.js.map +1 -0
  32. package/dist/commands/routines.d.ts +27 -0
  33. package/dist/commands/routines.js +493 -0
  34. package/dist/commands/routines.js.map +1 -0
  35. package/dist/commands/skills.d.ts +36 -0
  36. package/dist/commands/skills.js +369 -0
  37. package/dist/commands/skills.js.map +1 -0
  38. package/dist/commands/voice.d.ts +15 -0
  39. package/dist/commands/voice.js +378 -0
  40. package/dist/commands/voice.js.map +1 -0
  41. package/dist/commands/websearch-core.d.ts +10 -0
  42. package/dist/commands/websearch-core.js +56 -0
  43. package/dist/commands/websearch-core.js.map +1 -0
  44. package/dist/commands/websearch.d.ts +13 -0
  45. package/dist/commands/websearch.js +20 -0
  46. package/dist/commands/websearch.js.map +1 -0
  47. package/dist/core/argv.d.ts +51 -0
  48. package/dist/core/argv.js +81 -0
  49. package/dist/core/argv.js.map +1 -0
  50. package/dist/core/captured-logs.d.ts +9 -0
  51. package/dist/core/captured-logs.js +52 -0
  52. package/dist/core/captured-logs.js.map +1 -0
  53. package/dist/core/client.d.ts +18 -0
  54. package/dist/core/client.js +31 -0
  55. package/dist/core/client.js.map +1 -0
  56. package/dist/core/config-file.d.ts +13 -0
  57. package/dist/core/config-file.js +79 -0
  58. package/dist/core/config-file.js.map +1 -0
  59. package/dist/core/errors.d.ts +22 -0
  60. package/dist/core/errors.js +37 -0
  61. package/dist/core/errors.js.map +1 -0
  62. package/dist/core/help.d.ts +13 -0
  63. package/dist/core/help.js +55 -0
  64. package/dist/core/help.js.map +1 -0
  65. package/dist/core/integrations-mcp.d.ts +2 -0
  66. package/dist/core/integrations-mcp.js +115 -0
  67. package/dist/core/integrations-mcp.js.map +1 -0
  68. package/dist/core/output.d.ts +29 -0
  69. package/dist/core/output.js +34 -0
  70. package/dist/core/output.js.map +1 -0
  71. package/dist/core/skills-runtime.d.ts +37 -0
  72. package/dist/core/skills-runtime.js +101 -0
  73. package/dist/core/skills-runtime.js.map +1 -0
  74. package/dist/core/table.d.ts +17 -0
  75. package/dist/core/table.js +34 -0
  76. package/dist/core/table.js.map +1 -0
  77. package/dist/core/types.d.ts +65 -0
  78. package/dist/core/types.js +40 -0
  79. package/dist/core/types.js.map +1 -0
  80. package/dist/index.d.ts +11 -0
  81. package/dist/index.js +73 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/registry.d.ts +10 -0
  84. package/dist/registry.js +39 -0
  85. package/dist/registry.js.map +1 -0
  86. package/dist/version.d.ts +1 -0
  87. package/dist/version.js +3 -0
  88. package/dist/version.js.map +1 -0
  89. package/package.json +33 -4
  90. package/skills/hypercli-account.json +17 -0
  91. package/skills/hypercli-agents.json +23 -0
  92. package/skills/hypercli-auth.json +11 -0
  93. package/skills/hypercli-compute.json +20 -0
  94. package/skills/hypercli-flows.json +11 -0
  95. package/skills/hypercli-knowledge.json +13 -0
  96. package/skills/hypercli-voice.json +10 -0
  97. package/skills/hypercli.json +23 -0
  98. package/skills/index.json +124 -0
@@ -0,0 +1,493 @@
1
+ /**
2
+ * `hyper routines` — scheduled prompts for agents, plus on-demand runs.
3
+ *
4
+ * `hyper agents routines list|create|delete` stays untouched and rides
5
+ * client.routines; this group is the top-level test surface (jobs.ts/voice.ts
6
+ * shape: self-contained module, local helpers).
7
+ *
8
+ * `routines run` NOTE (no server-side run-now): the backend service
9
+ * (hyperclaw-backend/routines/app/main.py) exposes only
10
+ * list/create/get/patch/delete, and ts-sdk/src/routines.ts mirrors that.
11
+ * `run` therefore replays the executor's semantics locally: fetch the
12
+ * routine's agent, require RUNNING and an ACP-family runtime (mirror of
13
+ * routines/app/executor.py `execute_routine`), then send the prompt over the
14
+ * backend ACP session proxy (/ws/acp) — session_id bound -> socket attach +
15
+ * session/load (new session on failure), else session/new. The turn
16
+ * inherently runs to a stop reason
17
+ * (closing the socket would cancel it), so --wait only controls whether the
18
+ * assistant reply is printed.
19
+ */
20
+ import { createInterface } from 'node:readline/promises';
21
+ import { APIError, } from '@hypercli.com/sdk';
22
+ import { parseCommandArgs, parseUniversal } from '../core/argv.js';
23
+ import { CliError, UsageError } from '../core/errors.js';
24
+ import { closestMatch, renderGroupHelp } from '../core/help.js';
25
+ import { resolveAgentRef } from './agents.js';
26
+ export const name = 'routines';
27
+ export const summary = 'Manage scheduled agent routines and run them on demand.';
28
+ export const usage = [
29
+ 'hyper routines list [--agent ID] [--json]',
30
+ 'hyper routines get <routine-id> [--json]',
31
+ 'hyper routines create (--cron EXPR | --run-at ISO) --prompt TEXT [--agent ID] [--name N] [--session ID] [--disabled]',
32
+ 'hyper routines run <routine-id> [--wait] [--timeout S] [--json]',
33
+ 'hyper routines delete <routine-id> [--yes] [--json]',
34
+ ];
35
+ const COMMANDS = ['list', 'ls', 'get', 'create', 'run', 'delete'];
36
+ /** Runtimes the routines executor accepts (routines/app/executor.py ACP_RUNTIMES). */
37
+ const ACP_RUNTIMES = new Set([
38
+ 'buzz-agent',
39
+ 'opencode',
40
+ 'codex',
41
+ 'claude-code',
42
+ 'goose',
43
+ 'kimi-code',
44
+ 'pi',
45
+ ]);
46
+ function printHelp() {
47
+ process.stdout.write(`${renderGroupHelp({ name, summary, usage, run })}\n`);
48
+ }
49
+ // ---------------------------------------------------------------------------
50
+ // shared helpers (agents.ts/jobs.ts parity: label/value blocks, error mapping)
51
+ // ---------------------------------------------------------------------------
52
+ function describeError(err) {
53
+ if (err instanceof APIError)
54
+ return `HTTP ${err.statusCode}: ${err.detail}`;
55
+ return err instanceof Error ? err.message : String(err);
56
+ }
57
+ /** Wrap one SDK call: CliError/UsageError pass through, the rest -> CliError. */
58
+ async function api(what, call) {
59
+ try {
60
+ return await call();
61
+ }
62
+ catch (err) {
63
+ if (err instanceof CliError)
64
+ throw err;
65
+ throw new CliError(`${what} failed: ${describeError(err)}`);
66
+ }
67
+ }
68
+ function onePositional(parsed, what) {
69
+ if (parsed.positionals.length === 0)
70
+ throw new UsageError(`missing ${what}`);
71
+ if (parsed.positionals.length > 1) {
72
+ throw new UsageError(`unexpected extra arguments: ${parsed.positionals.slice(1).join(' ')}`);
73
+ }
74
+ return parsed.positionals[0];
75
+ }
76
+ function str(parsed, key) {
77
+ const value = parsed.values[key];
78
+ return typeof value === 'string' ? value : undefined;
79
+ }
80
+ /** Parse a seconds flag to milliseconds; bad input -> UsageError. */
81
+ function secondsFlag(parsed, key, fallback) {
82
+ const raw = str(parsed, key);
83
+ if (raw === undefined)
84
+ return Math.round(fallback * 1000);
85
+ const seconds = Number(raw);
86
+ if (!Number.isFinite(seconds) || seconds <= 0) {
87
+ throw new UsageError(`--${key} must be a positive number of seconds (got '${raw}')`);
88
+ }
89
+ return Math.round(seconds * 1000);
90
+ }
91
+ function recordLabelValue(rows) {
92
+ const width = Math.max(0, ...rows.map(([key]) => key.length));
93
+ return rows.map(([key, value]) => `${key.padEnd(width)} ${value}`.trimEnd()).join('\n');
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // confirmation gate — only when interactive stdout, no --yes, not --json
97
+ // ---------------------------------------------------------------------------
98
+ function needsConfirmation(ctx, yes) {
99
+ return !yes && ctx.format !== 'json' && process.stdout.isTTY === true;
100
+ }
101
+ async function confirm(question) {
102
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
103
+ try {
104
+ return /^\s*y(es)?\s*$/i.test(await rl.question(question));
105
+ }
106
+ finally {
107
+ rl.close();
108
+ }
109
+ }
110
+ // ---------------------------------------------------------------------------
111
+ // record shaping + schedule humanization
112
+ // describeSchedule is a camelCase port of desktop's describeRoutine
113
+ // (desktop/src/schedule.ts) — same humanizations, Routine fields directly.
114
+ // Keep in lockstep: tests/routines.test.ts mirrors the pinned matrix in
115
+ // desktop/src/schedule.test.ts; the first divergence should fail here.
116
+ // ---------------------------------------------------------------------------
117
+ function routineJson(routine) {
118
+ return {
119
+ id: routine.id,
120
+ name: routine.name,
121
+ agent_id: routine.agentId,
122
+ cron: routine.cron,
123
+ run_at: routine.runAt,
124
+ session_id: routine.sessionId,
125
+ next_run_at: routine.nextRunAt,
126
+ prompt: routine.prompt,
127
+ enabled: routine.enabled,
128
+ created_at: routine.createdAt,
129
+ updated_at: routine.updatedAt,
130
+ };
131
+ }
132
+ const WEEKDAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
133
+ const MONTH_NAMES = [
134
+ 'January', 'February', 'March', 'April', 'May', 'June',
135
+ 'July', 'August', 'September', 'October', 'November', 'December',
136
+ ];
137
+ function pad2(value) {
138
+ return String(value).padStart(2, '0');
139
+ }
140
+ function ordinal(day) {
141
+ const tens = day % 100;
142
+ if (tens >= 11 && tens <= 13)
143
+ return `${day}th`;
144
+ switch (day % 10) {
145
+ case 1:
146
+ return `${day}st`;
147
+ case 2:
148
+ return `${day}nd`;
149
+ case 3:
150
+ return `${day}rd`;
151
+ default:
152
+ return `${day}th`;
153
+ }
154
+ }
155
+ function formatTime12h(hour, minute) {
156
+ const h = ((hour % 24) + 24) % 24;
157
+ const m = ((minute % 60) + 60) % 60;
158
+ const suffix = h < 12 ? 'AM' : 'PM';
159
+ const h12 = h % 12 === 0 ? 12 : h % 12;
160
+ return `${h12}:${pad2(m)} ${suffix}`;
161
+ }
162
+ function dateInputValue(value) {
163
+ return `${value.getFullYear()}-${pad2(value.getMonth() + 1)}-${pad2(value.getDate())}`;
164
+ }
165
+ /** Exported for the desktop-parity test matrix in tests/routines.test.ts. */
166
+ export function describeSchedule(routine) {
167
+ const runAt = routine.runAt?.trim();
168
+ if (runAt) {
169
+ const value = new Date(runAt);
170
+ if (!Number.isNaN(value.getTime())) {
171
+ return `Once on ${dateInputValue(value)} at ${formatTime12h(value.getHours(), value.getMinutes())}`;
172
+ }
173
+ }
174
+ const cron = routine.cron?.trim() ?? '';
175
+ const parts = cron.split(/\s+/);
176
+ if (parts.length === 5) {
177
+ const [minute, hour, dom, month, dow] = parts;
178
+ if (hour === '*' && /^\d+$/.test(minute))
179
+ return `Hourly at :${pad2(Number(minute))}`;
180
+ if (/^\d+$/.test(hour) && /^\d+$/.test(minute)) {
181
+ const time = formatTime12h(Number(hour), Number(minute));
182
+ if (dow === '1-5' && dom === '*' && month === '*')
183
+ return `Weekdays at ${time}`;
184
+ if (dow === '*' && dom === '*' && month === '*')
185
+ return `Every day at ${time}`;
186
+ if (/^[0-6]$/.test(dow) && dom === '*' && month === '*') {
187
+ return `${WEEKDAY_NAMES[Number(dow)]}s at ${time}`;
188
+ }
189
+ if (dow === '*' && /^\d{1,2}$/.test(dom) && month === '*') {
190
+ return `Monthly on the ${ordinal(Number(dom))} at ${time}`;
191
+ }
192
+ if (dow === '*' && /^\d{1,2}$/.test(dom) && /^\d{1,2}$/.test(month)) {
193
+ const monthIndex = Number(month);
194
+ if (monthIndex >= 1 && monthIndex <= 12) {
195
+ return `${MONTH_NAMES[monthIndex - 1]} ${ordinal(Number(dom))} at ${time}`;
196
+ }
197
+ }
198
+ }
199
+ }
200
+ return cron;
201
+ }
202
+ function truncate(text, max) {
203
+ const flat = text.replace(/\s+/g, ' ').trim();
204
+ return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
205
+ }
206
+ // ---------------------------------------------------------------------------
207
+ // list / get
208
+ // ---------------------------------------------------------------------------
209
+ async function cmdList(ctx, args) {
210
+ const parsed = parseCommandArgs(args, { agent: { type: 'string' } });
211
+ if (parsed.help)
212
+ return printHelp();
213
+ const client = await ctx.client();
214
+ const agentRef = str(parsed, 'agent');
215
+ // Same resolution contract as `create`: prefixes resolve against the roster,
216
+ // no match is a CliError — never pass a raw fragment to the backend (it
217
+ // expects a UUID and 422s).
218
+ const agentId = agentRef ? await resolveAgentRef(client.deployments, agentRef) : undefined;
219
+ const routines = await api('list routines', () => client.routines.list(agentId ? { agentId } : {}));
220
+ ctx.output.info(`total ${routines.length}`);
221
+ ctx.output.result(routines.map(routineJson), routines.length === 0
222
+ ? 'No routines found.'
223
+ : {
224
+ columns: ['NAME', 'PROMPT', 'SCHEDULE', 'NEXT RUN', 'ENABLED', 'SESSION', 'ID'],
225
+ rows: routines.map((r) => [
226
+ r.name ?? '',
227
+ truncate(r.prompt, 40),
228
+ describeSchedule(r),
229
+ r.nextRunAt ?? '',
230
+ r.enabled ? 'yes' : 'no',
231
+ r.sessionId ? r.sessionId.slice(0, 12) : '',
232
+ r.id,
233
+ ]),
234
+ });
235
+ }
236
+ async function cmdGet(ctx, args) {
237
+ const parsed = parseCommandArgs(args);
238
+ if (parsed.help)
239
+ return printHelp();
240
+ const routineId = onePositional(parsed, 'routine id');
241
+ const client = await ctx.client();
242
+ const routine = await api('get routine', () => client.routines.get(routineId));
243
+ ctx.output.result(routineJson(routine), recordLabelValue([
244
+ ['id', routine.id],
245
+ ['name', routine.name ?? ''],
246
+ ['agent_id', routine.agentId],
247
+ ['schedule', describeSchedule(routine)],
248
+ ['cron', routine.cron ?? ''],
249
+ ['run_at', routine.runAt ?? ''],
250
+ ['session_id', routine.sessionId ?? ''],
251
+ ['next_run_at', routine.nextRunAt ?? ''],
252
+ ['prompt', routine.prompt],
253
+ ['enabled', routine.enabled ? 'yes' : 'no'],
254
+ ['created_at', routine.createdAt ?? ''],
255
+ ['updated_at', routine.updatedAt ?? ''],
256
+ ].filter(([, value]) => value !== '')));
257
+ }
258
+ // ---------------------------------------------------------------------------
259
+ // create / delete — flag surface identical to `hyper agents routines create`
260
+ // ---------------------------------------------------------------------------
261
+ async function cmdCreate(ctx, args) {
262
+ const parsed = parseCommandArgs(args, {
263
+ name: { type: 'string' },
264
+ cron: { type: 'string' },
265
+ 'run-at': { type: 'string' },
266
+ prompt: { type: 'string' },
267
+ agent: { type: 'string' },
268
+ session: { type: 'string' },
269
+ disabled: { type: 'boolean', default: false },
270
+ });
271
+ if (parsed.help)
272
+ return printHelp();
273
+ if (parsed.positionals.length > 0) {
274
+ throw new UsageError(`unexpected arguments: ${parsed.positionals.join(' ')}`);
275
+ }
276
+ const prompt = str(parsed, 'prompt');
277
+ if (!prompt)
278
+ throw new UsageError('--prompt is required');
279
+ const cron = str(parsed, 'cron');
280
+ const runAt = str(parsed, 'run-at');
281
+ if ((cron === undefined) === (runAt === undefined)) {
282
+ throw new UsageError('exactly one of --cron or --run-at is required');
283
+ }
284
+ const client = await ctx.client();
285
+ const agentRef = str(parsed, 'agent');
286
+ const body = {
287
+ ...(agentRef ? { agentId: await resolveAgentRef(client.deployments, agentRef) } : {}),
288
+ prompt,
289
+ ...(cron !== undefined ? { cron } : {}),
290
+ ...(runAt !== undefined ? { runAt } : {}),
291
+ ...(str(parsed, 'name') ? { name: str(parsed, 'name') } : {}),
292
+ ...(str(parsed, 'session') ? { sessionId: str(parsed, 'session') } : {}),
293
+ enabled: parsed.values.disabled !== true,
294
+ };
295
+ const routine = await api('create routine', () => client.routines.create(body));
296
+ ctx.output.result(routineJson(routine), recordLabelValue([
297
+ ['created', routine.id],
298
+ ['name', routine.name ?? ''],
299
+ ['schedule', describeSchedule(routine)],
300
+ ['agent', routine.agentId],
301
+ ['next_run_at', routine.nextRunAt ?? ''],
302
+ ]));
303
+ }
304
+ async function cmdDelete(ctx, args) {
305
+ const parsed = parseCommandArgs(args, { yes: { type: 'boolean', short: 'y', default: false } });
306
+ if (parsed.help)
307
+ return printHelp();
308
+ const routineId = onePositional(parsed, 'routine id');
309
+ if (needsConfirmation(ctx, parsed.values.yes === true)) {
310
+ if (!(await confirm(`Delete routine ${routineId}? [y/N] `))) {
311
+ ctx.output.info('aborted');
312
+ return;
313
+ }
314
+ }
315
+ const client = await ctx.client();
316
+ await api('delete routine', () => client.routines.delete(routineId));
317
+ ctx.output.result({ deleted: routineId }, `deleted ${routineId}`);
318
+ }
319
+ // ---------------------------------------------------------------------------
320
+ // run — no server-side run-now exists, so this replays executor semantics
321
+ // (routines/app/executor.py): agent must be RUNNING and an ACP-family runtime;
322
+ // session_id bound -> session/load with new-session fallback, else session/new;
323
+ // one session/prompt turn, awaited to its stop reason.
324
+ // ---------------------------------------------------------------------------
325
+ /** Default run timeout — mirrors the backend executor
326
+ (routines/app/config.py: executor_turn_timeout_seconds = 1800). */
327
+ const DEFAULT_RUN_TIMEOUT_SECONDS = 1800;
328
+ /** Text of one ACP content block (or block array); non-text blocks fold to ''. */
329
+ function acpContentText(content) {
330
+ if (typeof content === 'string')
331
+ return content;
332
+ if (Array.isArray(content))
333
+ return content.map(acpContentText).join('');
334
+ if (content && typeof content === 'object') {
335
+ const block = content;
336
+ if (block.type === 'text' && typeof block.text === 'string')
337
+ return block.text;
338
+ }
339
+ return '';
340
+ }
341
+ async function cmdRunNow(ctx, args) {
342
+ const parsed = parseCommandArgs(args, {
343
+ wait: { type: 'boolean', short: 'w', default: false },
344
+ timeout: { type: 'string' },
345
+ });
346
+ if (parsed.help)
347
+ return printHelp();
348
+ const routineId = onePositional(parsed, 'routine id');
349
+ const wait = parsed.values.wait === true;
350
+ const timeoutMs = secondsFlag(parsed, 'timeout', DEFAULT_RUN_TIMEOUT_SECONDS);
351
+ const client = await ctx.client();
352
+ const routine = await api('get routine', () => client.routines.get(routineId));
353
+ const agent = await api('get agent', () => client.deployments.get(routine.agentId));
354
+ const state = String(agent.state ?? '').toUpperCase();
355
+ if (state !== 'RUNNING') {
356
+ throw new CliError(`routine run: agent ${agent.id} is ${agent.state} — start it first (hyper agents start ${agent.id.slice(0, 12)})`);
357
+ }
358
+ const runtime = (agent.runtime ?? '').toLowerCase();
359
+ if (!ACP_RUNTIMES.has(runtime)) {
360
+ throw new CliError(`routine run is only supported on coding-agent runtimes (${[...ACP_RUNTIMES].join(', ')}); `
361
+ + `agent ${agent.id.slice(0, 12)} is '${agent.runtime ?? 'unknown'}'`);
362
+ }
363
+ ctx.output.info(`running routine ${routine.name ?? routine.id} on agent ${agent.id.slice(0, 12)}`);
364
+ let stage = 'connect';
365
+ let closeActive;
366
+ let timedOut = false;
367
+ let timer;
368
+ // The SDK's prompt path takes no AbortSignal; on timeout close the live ACP
369
+ // connection, which rejects the in-flight turn (agents chat parity).
370
+ const guard = new Promise((_, reject) => {
371
+ timer = setTimeout(() => {
372
+ timedOut = true;
373
+ closeActive?.();
374
+ reject(new Error('timed out'));
375
+ }, timeoutMs);
376
+ if (typeof timer.unref === 'function')
377
+ timer.unref();
378
+ });
379
+ const work = (async () => {
380
+ let reply = '';
381
+ const acpBase = {
382
+ clientInfo: { name: 'hypercli-cli' },
383
+ onUpdate: (notification) => {
384
+ const update = notification.update;
385
+ if (update.sessionUpdate !== 'agent_message_chunk')
386
+ return;
387
+ reply += acpContentText(update.content);
388
+ },
389
+ };
390
+ // A bound routine must retain its exact conversation, including on failure.
391
+ let acp;
392
+ if (routine.sessionId) {
393
+ try {
394
+ acp = await agent.acpConnect({ ...acpBase, sessionId: routine.sessionId });
395
+ }
396
+ catch (err) {
397
+ throw new CliError(`could not attach bound session ${routine.sessionId}: ${describeError(err)}`);
398
+ }
399
+ }
400
+ else {
401
+ acp = await agent.acpConnect(acpBase);
402
+ }
403
+ try {
404
+ closeActive = () => acp.close();
405
+ stage = 'session';
406
+ let sessionId;
407
+ let resume = false;
408
+ if (routine.sessionId) {
409
+ // acpConnect has already awaited attachment to this exact session.
410
+ sessionId = routine.sessionId;
411
+ resume = true;
412
+ }
413
+ else {
414
+ sessionId = (await acp.newSession()).sessionId;
415
+ }
416
+ stage = 'prompt';
417
+ const turn = await acp.prompt(sessionId, routine.prompt);
418
+ return { sessionId, resume, stopReason: turn.stopReason ?? undefined, reply };
419
+ }
420
+ finally {
421
+ closeActive = undefined;
422
+ acp.close();
423
+ }
424
+ })();
425
+ // The timeout guard can win while work is in flight — mark the loser handled.
426
+ work.catch(() => { });
427
+ let result;
428
+ try {
429
+ result = await Promise.race([work, guard]);
430
+ }
431
+ catch (err) {
432
+ if (timedOut) {
433
+ throw new CliError(`routine run: ${stage} stage failed: timed out after ${timeoutMs / 1000}s`);
434
+ }
435
+ if (err instanceof CliError)
436
+ throw err;
437
+ throw new CliError(`routine run: ${stage} stage failed: ${describeError(err)}`);
438
+ }
439
+ finally {
440
+ clearTimeout(timer);
441
+ }
442
+ const payload = {
443
+ routine_id: routine.id,
444
+ routine_name: routine.name,
445
+ agent_id: agent.id,
446
+ runtime: agent.runtime ?? '',
447
+ session_id: result.sessionId,
448
+ resumed: result.resume,
449
+ stop_reason: result.stopReason ?? null,
450
+ ...(wait ? { reply: result.reply } : {}),
451
+ };
452
+ const block = recordLabelValue([
453
+ ['routine', routine.name ?? routine.id],
454
+ ['agent', agent.id.slice(0, 12)],
455
+ ['session', result.sessionId],
456
+ ['resumed', result.resume ? 'yes' : 'no'],
457
+ ['stop_reason', result.stopReason ?? ''],
458
+ ]);
459
+ ctx.output.result(payload, wait && result.reply ? `${block}\n\n${result.reply}` : block);
460
+ }
461
+ // ---------------------------------------------------------------------------
462
+ // dispatch
463
+ // ---------------------------------------------------------------------------
464
+ export async function run(ctx, args) {
465
+ const pre = parseUniversal(args);
466
+ if (pre.help || pre.positionals.length === 0) {
467
+ printHelp();
468
+ return;
469
+ }
470
+ const [sub] = pre.positionals;
471
+ // Splice at the first positional TOKEN — never indexOf the word, which can
472
+ // hit an earlier flag value (e.g. `routines --agent list list`).
473
+ const subArgs = [...args];
474
+ subArgs.splice(pre.firstPositionalIndex, 1);
475
+ switch (sub) {
476
+ case 'list':
477
+ case 'ls':
478
+ return cmdList(ctx, subArgs);
479
+ case 'get':
480
+ return cmdGet(ctx, subArgs);
481
+ case 'create':
482
+ return cmdCreate(ctx, subArgs);
483
+ case 'run':
484
+ return cmdRunNow(ctx, subArgs);
485
+ case 'delete':
486
+ return cmdDelete(ctx, subArgs);
487
+ default: {
488
+ const hint = closestMatch(sub, COMMANDS);
489
+ throw new UsageError(`unknown routines command '${sub}'${hint ? ` — did you mean '${hint}'?` : ''}\nusage: ${usage.join('\n ')}`);
490
+ }
491
+ }
492
+ }
493
+ //# sourceMappingURL=routines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routines.js","sourceRoot":"","sources":["../../src/commands/routines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `hyper skills` — inventory, inspect, export, and install bundled skills.
3
+ *
4
+ * hyper skills inventory table: name, description, commands
5
+ * hyper skills list | ls alias of bare `hyper skills`
6
+ * hyper skills <name-or-prefix> print the skill body markdown (like cat)
7
+ * hyper skills export <dir> write every bundled skill as <dir>/<name>/SKILL.md
8
+ * hyper skills install <agent-id> [--dir PATH]
9
+ *
10
+ * export is offline by design: skill data is read from <pkg>/skills/*.json,
11
+ * so it never touches ctx.client() and works with no API key.
12
+ *
13
+ * install is the fused convenience of the documented two-step:
14
+ * hyper skills export /tmp/sk
15
+ * hyper agents exec <id> -- mkdir -p <skills-dir>/<name>
16
+ * hyper agents cp /tmp/sk/<name>/SKILL.md <id>:<skills-dir>/<name>/SKILL.md
17
+ *
18
+ * Two path forms are needed because of today's SDK surface:
19
+ * - Deployments.cpTo is file-only and sync-root-relative (the Reef file
20
+ * API rejects absolute paths), so each SKILL.md is pushed individually
21
+ * under the relative target dir;
22
+ * - Deployments.exec has no cwd option, so the mkdir -p argv carries the
23
+ * absolute path (agent sync root + relative dir).
24
+ * The sync root comes from the agent's launchConfig.sync_root when set,
25
+ * else the runtime default (/home/node for openclaw/coding runtimes,
26
+ * /home/hermes for hermes-agent; ts-sdk agents.ts:142/311/1364).
27
+ *
28
+ * Local duplication note: resolveAgentRef/api/describeFailure/onePositional/
29
+ * str are small copies of the agents.ts helpers, which are not exported;
30
+ * keep them in step with cli/src/commands/agents.ts.
31
+ */
32
+ import type { CommandContext } from '../core/types.js';
33
+ export declare const name = "skills";
34
+ export declare const summary = "List, inspect, export, and install bundled skills.";
35
+ export declare const usage: string[];
36
+ export declare function run(ctx: CommandContext, args: string[]): Promise<void>;