@hypercli.com/cli 0.0.0-stage → 0.9.1

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,258 @@
1
+ /**
2
+ * `hyper me` — composite identity check (golden sample of an authenticated
3
+ * read command).
4
+ *
5
+ * Three authorities, reported independently:
6
+ * 1. Product identity — client.user.authMe() (GET /api/auth/me)
7
+ * 2. Agent entitlement — client.agent.subscriptionSummary() (agents section;
8
+ * a 401/403 here reports "unavailable" and must NOT erase section 1)
9
+ * 3. Runtime identity — client.deployments.accessIdentity() (cheap probe;
10
+ * only an agent runtime key can name its Agent — skip silently otherwise)
11
+ *
12
+ * When section 3 says the key IS an agent runtime key, a fourth step resolves
13
+ * the Agent record itself (client.deployments.get('self') — name, handle,
14
+ * runtime); its failure must leave the output exactly as it was.
15
+ *
16
+ * The API key itself is never printed (keyId/keyName are identifiers, not the
17
+ * secret).
18
+ */
19
+ import { APIError, hasActivePlan, } from '@hypercli.com/sdk';
20
+ import { parseCommandArgs } from '../core/argv.js';
21
+ import { CliError } from '../core/errors.js';
22
+ import { renderGroupHelp } from '../core/help.js';
23
+ export const name = 'me';
24
+ export const summary = 'Resolve the current auth context and show key capabilities.';
25
+ export const usage = ['hyper me [--json]'];
26
+ /** Map an authMe failure to a precise CliError. Never retried. */
27
+ function toAuthError(err) {
28
+ if (err instanceof APIError && err.statusCode === 401) {
29
+ const detail = err.detail ? `: ${err.detail}` : '';
30
+ // "API key is inactive" => the key was recognized but deactivated.
31
+ const message = /inactive/i.test(err.detail)
32
+ ? `API key recognized but inactive${detail}. Reactivate or replace the key at its source, then run 'hyper me' again`
33
+ : `API key invalid or expired${detail}. Run 'hyper configure' to set a valid key`;
34
+ return new CliError(message, 1);
35
+ }
36
+ if (err instanceof CliError)
37
+ return err;
38
+ if (err instanceof APIError) {
39
+ return new CliError(`failed to resolve identity (HTTP ${err.statusCode}): ${err.detail}`);
40
+ }
41
+ return new CliError(`failed to resolve identity: ${err instanceof Error ? err.message : String(err)}`);
42
+ }
43
+ function describeError(err) {
44
+ if (err instanceof APIError)
45
+ return `${err.statusCode}: ${err.detail}`;
46
+ return err instanceof Error ? err.message : String(err);
47
+ }
48
+ /** Latest expiresAt among ACTIVE entitlement items (python parity). */
49
+ function latestActiveExpiry(summary) {
50
+ const dates = summary.entitlementItems
51
+ .filter((item) => item.status.toUpperCase() === 'ACTIVE')
52
+ .map((item) => item.expiresAt)
53
+ .filter((d) => d instanceof Date && Number.isFinite(d.getTime()))
54
+ .sort((a, b) => a.getTime() - b.getTime());
55
+ return dates.length > 0 ? dates[dates.length - 1] : null;
56
+ }
57
+ /** e.g. "3d 4h", "2h 15m", "40m", "expired" (python parity). */
58
+ function formatTimeLeft(expiresAt, now = new Date()) {
59
+ const remainingMs = expiresAt.getTime() - now.getTime();
60
+ if (remainingMs <= 0)
61
+ return 'expired';
62
+ const totalMinutes = Math.floor(remainingMs / 60000);
63
+ const days = Math.floor(totalMinutes / 1440);
64
+ const hours = Math.floor((totalMinutes % 1440) / 60);
65
+ const minutes = totalMinutes % 60;
66
+ if (days)
67
+ return `${days}d ${hours}h`;
68
+ if (hours)
69
+ return `${hours}h ${minutes}m`;
70
+ return `${minutes}m`;
71
+ }
72
+ function thousands(n) {
73
+ return n.toLocaleString('en-US');
74
+ }
75
+ // ---------- table rendering ----------
76
+ function rowsBlock(rows) {
77
+ const width = Math.max(0, ...rows.map(([key]) => key.length));
78
+ return rows.map(([key, value]) => ` ${key.padEnd(width)} ${value}`.trimEnd());
79
+ }
80
+ function identityRows(authMe, agentIdentity, selfAgent) {
81
+ const rows = [
82
+ ['user_id', authMe.userId],
83
+ ['orchestra_user_id', authMe.orchestraUserId ?? ''],
84
+ ['external_id', authMe.externalId ?? ''],
85
+ ['privy_user_id', authMe.privyUserId ?? ''],
86
+ ['wallet_address', authMe.walletAddress ?? ''],
87
+ ['team_id', authMe.teamId],
88
+ ['plan_id', authMe.planId],
89
+ ['email', authMe.email ?? ''],
90
+ ['user_type', authMe.userType ?? ''],
91
+ ['auth_type', authMe.authType],
92
+ ['has_active_subscription', authMe.hasActiveSubscription ? 'yes' : 'no'],
93
+ ['key_id', authMe.keyId ?? ''],
94
+ ['key_name', authMe.keyName ?? ''],
95
+ ];
96
+ if (authMe.runtime)
97
+ rows.push(['runtime', authMe.runtime.runtime]);
98
+ if (agentIdentity) {
99
+ rows.push(['agent_id', agentIdentity.agentId ?? '']);
100
+ if (selfAgent) {
101
+ rows.push(['agent_name', selfAgent.displayName ?? selfAgent.name ?? '']);
102
+ if (selfAgent.handle)
103
+ rows.push(['agent_handle', selfAgent.handle]);
104
+ if (selfAgent.runtime)
105
+ rows.push(['agent_runtime', selfAgent.runtime]);
106
+ }
107
+ if (agentIdentity.capabilities.length > 0) {
108
+ rows.push(['agent_capabilities', agentIdentity.capabilities.join(', ')]);
109
+ }
110
+ }
111
+ return rows;
112
+ }
113
+ function agentsRows(summary, agentsError) {
114
+ if (!summary) {
115
+ return [['entitlements', `unavailable (${agentsError ?? 'unknown error'})`]];
116
+ }
117
+ const rows = [
118
+ ['has_active_plan', hasActivePlan(summary) ? 'yes' : 'no'],
119
+ ['effective_plan', summary.effectivePlanId],
120
+ ['current_entitlement', summary.currentEntitlementId ?? ''],
121
+ ['active_subscriptions', String(summary.activeSubscriptionCount)],
122
+ ['active_entitlements', String(summary.activeEntitlementCount)],
123
+ ];
124
+ const expiresAt = latestActiveExpiry(summary);
125
+ if (expiresAt) {
126
+ rows.push(['expires_at', expiresAt.toISOString()]);
127
+ rows.push(['time_left', formatTimeLeft(expiresAt)]);
128
+ }
129
+ rows.push([
130
+ 'limits',
131
+ `${thousands(summary.pooledTpmLimit)} TPM / ${thousands(summary.pooledRpmLimit)} RPM / ${thousands(summary.pooledTpd)} TPD`,
132
+ ]);
133
+ return rows;
134
+ }
135
+ function renderTable(authMe, agentIdentity, selfAgent, summary, agentsError) {
136
+ const identity = ['Identity', ...rowsBlock(identityRows(authMe, agentIdentity, selfAgent))].join('\n');
137
+ const capabilityLines = authMe.capabilities.length > 0 ? authMe.capabilities.map((c) => ` ${c}`) : [' (none)'];
138
+ const capabilities = ['Capabilities', ...capabilityLines].join('\n');
139
+ const agents = ['Agents', ...rowsBlock(agentsRows(summary, agentsError))].join('\n');
140
+ return `${identity}\n\n${capabilities}\n\n${agents}`;
141
+ }
142
+ // ---------- json rendering ----------
143
+ function identityJson(authMe, agentIdentity, selfAgent) {
144
+ const identity = {
145
+ userId: authMe.userId,
146
+ orchestraUserId: authMe.orchestraUserId,
147
+ externalId: authMe.externalId,
148
+ privyUserId: authMe.privyUserId,
149
+ walletAddress: authMe.walletAddress,
150
+ userType: authMe.userType,
151
+ teamId: authMe.teamId,
152
+ planId: authMe.planId,
153
+ email: authMe.email,
154
+ authType: authMe.authType,
155
+ hasActiveSubscription: authMe.hasActiveSubscription,
156
+ keyId: authMe.keyId,
157
+ keyName: authMe.keyName,
158
+ tags: authMe.tags,
159
+ };
160
+ if (authMe.runtime)
161
+ identity.runtime = authMe.runtime;
162
+ if (agentIdentity) {
163
+ identity.agent_id = agentIdentity.agentId;
164
+ if (selfAgent) {
165
+ identity.agent_name = selfAgent.displayName ?? selfAgent.name ?? null;
166
+ identity.agent_handle = selfAgent.handle ?? null;
167
+ identity.agent_runtime = selfAgent.runtime ?? null;
168
+ }
169
+ identity.agent_capabilities = agentIdentity.capabilities;
170
+ }
171
+ return identity;
172
+ }
173
+ function agentsJson(summary) {
174
+ return {
175
+ hasActivePlan: hasActivePlan(summary),
176
+ effectivePlanId: summary.effectivePlanId,
177
+ currentSubscriptionId: summary.currentSubscriptionId,
178
+ currentEntitlementId: summary.currentEntitlementId,
179
+ activeSubscriptionCount: summary.activeSubscriptionCount,
180
+ activeEntitlementCount: summary.activeEntitlementCount,
181
+ pooledTpmLimit: summary.pooledTpmLimit,
182
+ pooledRpmLimit: summary.pooledRpmLimit,
183
+ pooledTpd: summary.pooledTpd,
184
+ billingResetAt: summary.billingResetAt ? summary.billingResetAt.toISOString() : null,
185
+ entitlementItems: summary.entitlementItems.map((item) => ({
186
+ id: item.id,
187
+ planId: item.planId,
188
+ planName: item.planName,
189
+ provider: item.provider,
190
+ status: item.status,
191
+ startsAt: item.startsAt ? item.startsAt.toISOString() : null,
192
+ expiresAt: item.expiresAt ? item.expiresAt.toISOString() : null,
193
+ tpmLimit: item.tpmLimit,
194
+ rpmLimit: item.rpmLimit,
195
+ tpdLimit: item.tpdLimit,
196
+ agentTier: item.agentTier,
197
+ features: item.features,
198
+ tags: item.tags,
199
+ })),
200
+ };
201
+ }
202
+ export async function run(ctx, args) {
203
+ const parsed = parseCommandArgs(args);
204
+ if (parsed.help) {
205
+ process.stdout.write(`${renderGroupHelp({ name, summary, usage, run })}\n`);
206
+ return;
207
+ }
208
+ const client = await ctx.client();
209
+ // 1. Product identity — the command's spine. A 401 here is fatal, no retry.
210
+ let authMe;
211
+ try {
212
+ authMe = await client.user.authMe();
213
+ }
214
+ catch (err) {
215
+ throw toAuthError(err);
216
+ }
217
+ // 2. Agent entitlement — failure degrades to "unavailable", never erases 1.
218
+ let entitlementSummary = null;
219
+ let agentsError = null;
220
+ try {
221
+ entitlementSummary = await client.agent.subscriptionSummary();
222
+ }
223
+ catch (err) {
224
+ agentsError = describeError(err);
225
+ }
226
+ // 3. Runtime identity — only an agent runtime key can name its Agent;
227
+ // a failure here must leave `hyper me` exactly as it was.
228
+ let agentIdentity = null;
229
+ try {
230
+ const resolved = await client.deployments.accessIdentity();
231
+ if (resolved.isAgentRuntimeKey)
232
+ agentIdentity = resolved;
233
+ }
234
+ catch {
235
+ agentIdentity = null;
236
+ }
237
+ // 4. Agent record (self) — resolves the runtime key's Agent display name,
238
+ // handle, and runtime family. Same degradation rule as 3.
239
+ let selfAgent = null;
240
+ if (agentIdentity) {
241
+ try {
242
+ selfAgent = await client.deployments.get('self');
243
+ }
244
+ catch {
245
+ selfAgent = null;
246
+ }
247
+ }
248
+ const agents = entitlementSummary ? agentsJson(entitlementSummary) : null;
249
+ const payload = {
250
+ identity: identityJson(authMe, agentIdentity, selfAgent),
251
+ capabilities: authMe.capabilities,
252
+ agents,
253
+ };
254
+ if (agents === null)
255
+ payload.agents_error = agentsError ?? 'unknown error';
256
+ ctx.output.result(payload, renderTable(authMe, agentIdentity, selfAgent, entitlementSummary, agentsError));
257
+ }
258
+ //# sourceMappingURL=me.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"me.js","sourceRoot":"","sources":["../../src/commands/me.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CommandContext } from '../core/types.js';
2
+ export declare const name = "memory";
3
+ export declare const summary = "Search session memory, fetch summaries and history, or rebuild a summary (once per 24h).";
4
+ export declare const usage: string[];
5
+ export declare function run(ctx: CommandContext, args: string[]): Promise<void>;
@@ -0,0 +1,110 @@
1
+ import { APIError } from '@hypercli.com/sdk';
2
+ import { parseCommandArgs } from '../core/argv.js';
3
+ import { UsageError } from '../core/errors.js';
4
+ import { renderGroupHelp } from '../core/help.js';
5
+ export const name = 'memory';
6
+ export const summary = 'Search session memory, fetch summaries and history, or rebuild a summary (once per 24h).';
7
+ export const usage = [
8
+ 'hyper memory search <query...> [-s|--session-id ID] [-a|--agent-id ID] [--cursor CURSOR] [--limit N] [--json]',
9
+ 'hyper memory summary <ID> [--json]',
10
+ 'hyper memory chunks <ID> [--cursor CURSOR] [--limit N] [--json]',
11
+ 'hyper memory tail <ID> [--n N] [--json]',
12
+ 'hyper memory rebuild <ID> [--json]',
13
+ ];
14
+ function positiveInteger(value, flag) {
15
+ if (value === undefined)
16
+ return undefined;
17
+ const number = Number(value);
18
+ if (!/^\d+$/.test(String(value)) || !Number.isSafeInteger(number) || number < 1 || number > 100) {
19
+ throw new UsageError(`${flag} must be an integer from 1 to 100`);
20
+ }
21
+ return number;
22
+ }
23
+ const FULL_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
24
+ const ARG_SPEC = {
25
+ 'session-id': { type: 'string', short: 's' },
26
+ 'agent-id': { type: 'string', short: 'a' },
27
+ limit: { type: 'string' },
28
+ cursor: { type: 'string' },
29
+ n: { type: 'string' },
30
+ };
31
+ export async function run(ctx, args) {
32
+ const parsed = parseCommandArgs(args, ARG_SPEC);
33
+ if (parsed.help || parsed.positionals.length === 0) {
34
+ process.stdout.write(`${renderGroupHelp({ name, summary, usage, run })}\n`);
35
+ return;
36
+ }
37
+ const [command, ...rest] = parsed.positionals;
38
+ const allowed = {
39
+ search: ['session-id', 'agent-id', 'cursor', 'limit'], summary: [], chunks: ['cursor', 'limit'], tail: ['n'], rebuild: [],
40
+ };
41
+ if (!Object.hasOwn(allowed, command))
42
+ throw new UsageError(`unknown memory command '${command}'`);
43
+ for (const flag of Object.keys(ARG_SPEC)) {
44
+ if (parsed.values[flag] !== undefined && !allowed[command].includes(flag)) {
45
+ throw new UsageError(`--${flag} is not supported by memory ${command}`);
46
+ }
47
+ }
48
+ if (command === 'search' ? !rest.join(' ').trim() : rest.length !== 1 || !rest[0].trim()) {
49
+ throw new UsageError(command === 'search' ? 'memory search requires a query' : `memory ${command} requires one session ID`);
50
+ }
51
+ const limit = positiveInteger(parsed.values.limit, '--limit');
52
+ const n = positiveInteger(parsed.values.n, '--n');
53
+ const sessionId = parsed.values['session-id'];
54
+ if (sessionId !== undefined && !sessionId.trim())
55
+ throw new UsageError('--session-id must not be empty');
56
+ const agentId = parsed.values['agent-id'];
57
+ if (agentId !== undefined && !FULL_UUID.test(agentId.trim()))
58
+ throw new UsageError('--agent-id must be a UUID');
59
+ const api = (await ctx.client()).memory;
60
+ switch (command) {
61
+ case 'search': {
62
+ const result = await api.search(rest.join(' '), { sessionId, agentId, cursor: parsed.values.cursor, limit });
63
+ ctx.output.result(result, result.items.length ? {
64
+ columns: ['SESSION', 'CHUNK', 'SCORE', 'TEXT'],
65
+ rows: result.items.map((row) => [row.sessionId, row.id, row.score, row.text]),
66
+ } : 'No results.');
67
+ if (ctx.format !== 'json' && result.hasMore && result.nextCursor !== null) {
68
+ ctx.output.info(`Next cursor: ${result.nextCursor}`);
69
+ }
70
+ return;
71
+ }
72
+ case 'summary': {
73
+ const result = await api.getSummary(rest[0]);
74
+ ctx.output.result(result, result.summaryText ?? (result.pending ? 'Summary pending.' : 'No summary yet.'));
75
+ return;
76
+ }
77
+ case 'rebuild': {
78
+ try {
79
+ const result = await api.rebuild(rest[0]);
80
+ ctx.output.result(result, `Summary rebuild ${result.status}: ${result.sessionId}`);
81
+ }
82
+ catch (error) {
83
+ if (error instanceof APIError && error.retryAfterSeconds !== undefined) {
84
+ throw new APIError(error.statusCode, `${error.detail} (retry after ${error.retryAfterSeconds}s)`, error.method, error.url, error.responseText, error.retryAfterSeconds);
85
+ }
86
+ throw error;
87
+ }
88
+ return;
89
+ }
90
+ case 'chunks': {
91
+ const result = await api.getChunks(rest[0], { cursor: parsed.values.cursor, limit });
92
+ ctx.output.result(result, result.items.length ? {
93
+ columns: ['ID', 'START', 'END', 'TEXT'],
94
+ rows: result.items.map((row) => [row.id, row.seqStart, row.seqEnd, row.text]),
95
+ } : 'No chunks.');
96
+ if (ctx.format !== 'json' && result.hasMore && result.nextCursor !== null) {
97
+ ctx.output.info(`Next cursor: ${result.nextCursor}`);
98
+ }
99
+ return;
100
+ }
101
+ case 'tail': {
102
+ const result = await api.getTail(rest[0], n ?? 20);
103
+ ctx.output.result(result, result.items.length ? {
104
+ columns: ['START', 'END', 'ROLE', 'TEXT'],
105
+ rows: result.items.map((row) => [row.seqStart, row.seqEnd, row.role, row.text]),
106
+ } : 'No messages.');
107
+ }
108
+ }
109
+ }
110
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
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 { type Routine } from '@hypercli.com/sdk';
21
+ import type { CommandContext } from '../core/types.js';
22
+ export declare const name = "routines";
23
+ export declare const summary = "Manage scheduled agent routines and run them on demand.";
24
+ export declare const usage: string[];
25
+ /** Exported for the desktop-parity test matrix in tests/routines.test.ts. */
26
+ export declare function describeSchedule(routine: Routine): string;
27
+ export declare function run(ctx: CommandContext, args: string[]): Promise<number | void>;