relaycast 0.3.2 → 1.1.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 (69) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +9 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/index.d.ts +35 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +452 -126
  8. package/dist/index.js.map +1 -1
  9. package/dist/version.d.ts +2 -0
  10. package/dist/version.d.ts.map +1 -0
  11. package/dist/version.js +2 -0
  12. package/dist/version.js.map +1 -0
  13. package/package.json +21 -26
  14. package/dist/commands/agent.d.ts +0 -3
  15. package/dist/commands/agent.d.ts.map +0 -1
  16. package/dist/commands/agent.js +0 -51
  17. package/dist/commands/agent.js.map +0 -1
  18. package/dist/commands/billing.d.ts +0 -3
  19. package/dist/commands/billing.d.ts.map +0 -1
  20. package/dist/commands/billing.js +0 -37
  21. package/dist/commands/billing.js.map +0 -1
  22. package/dist/commands/channel.d.ts +0 -3
  23. package/dist/commands/channel.d.ts.map +0 -1
  24. package/dist/commands/channel.js +0 -67
  25. package/dist/commands/channel.js.map +0 -1
  26. package/dist/commands/config.d.ts +0 -3
  27. package/dist/commands/config.d.ts.map +0 -1
  28. package/dist/commands/config.js +0 -23
  29. package/dist/commands/config.js.map +0 -1
  30. package/dist/commands/files.d.ts +0 -3
  31. package/dist/commands/files.d.ts.map +0 -1
  32. package/dist/commands/files.js +0 -52
  33. package/dist/commands/files.js.map +0 -1
  34. package/dist/commands/messaging.d.ts +0 -3
  35. package/dist/commands/messaging.d.ts.map +0 -1
  36. package/dist/commands/messaging.js +0 -54
  37. package/dist/commands/messaging.js.map +0 -1
  38. package/dist/commands/openclaw.d.ts +0 -3
  39. package/dist/commands/openclaw.d.ts.map +0 -1
  40. package/dist/commands/openclaw.js +0 -51
  41. package/dist/commands/openclaw.js.map +0 -1
  42. package/dist/commands/reactions.d.ts +0 -3
  43. package/dist/commands/reactions.d.ts.map +0 -1
  44. package/dist/commands/reactions.js +0 -32
  45. package/dist/commands/reactions.js.map +0 -1
  46. package/dist/commands/read.d.ts +0 -3
  47. package/dist/commands/read.d.ts.map +0 -1
  48. package/dist/commands/read.js +0 -80
  49. package/dist/commands/read.js.map +0 -1
  50. package/dist/commands/search.d.ts +0 -3
  51. package/dist/commands/search.d.ts.map +0 -1
  52. package/dist/commands/search.js +0 -31
  53. package/dist/commands/search.js.map +0 -1
  54. package/dist/commands/telemetry.d.ts +0 -4
  55. package/dist/commands/telemetry.d.ts.map +0 -1
  56. package/dist/commands/telemetry.js +0 -45
  57. package/dist/commands/telemetry.js.map +0 -1
  58. package/dist/commands/workspace.d.ts +0 -3
  59. package/dist/commands/workspace.d.ts.map +0 -1
  60. package/dist/commands/workspace.js +0 -35
  61. package/dist/commands/workspace.js.map +0 -1
  62. package/dist/config.d.ts +0 -9
  63. package/dist/config.d.ts.map +0 -1
  64. package/dist/config.js +0 -29
  65. package/dist/config.js.map +0 -1
  66. package/dist/telemetry.d.ts +0 -17
  67. package/dist/telemetry.d.ts.map +0 -1
  68. package/dist/telemetry.js +0 -214
  69. package/dist/telemetry.js.map +0 -1
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerReadCommands(program: Command): void;
3
- //# sourceMappingURL=read.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE3D"}
@@ -1,80 +0,0 @@
1
- import { RelayCast } from '@relaycast/sdk';
2
- import { loadConfig } from '../config.js';
3
- function getAgent() {
4
- const config = loadConfig();
5
- if (!config.apiKey) {
6
- throw new Error('No API key configured. Run: relay config set api-key <key>');
7
- }
8
- if (!config.agentToken) {
9
- throw new Error('No agent token configured. Run: relay config set agent-token <token>');
10
- }
11
- const relay = new RelayCast({ apiKey: config.apiKey, baseUrl: config.endpoint });
12
- return relay.as(config.agentToken);
13
- }
14
- export function registerReadCommands(program) {
15
- program
16
- .command('messages <channel>')
17
- .description('List messages in a channel')
18
- .option('--limit <n>', 'Message limit', '50')
19
- .action(async (channel, opts) => {
20
- const agent = getAgent();
21
- const msgs = await agent.messages(channel, { limit: parseInt(opts.limit, 10) });
22
- if (msgs.length === 0) {
23
- console.log('No messages.');
24
- return;
25
- }
26
- for (const m of msgs) {
27
- console.log(`[${m.id}] ${m.agent_name}: ${m.text}`);
28
- }
29
- });
30
- program
31
- .command('thread <msg_id>')
32
- .description('Show thread for a message')
33
- .action(async (msgId) => {
34
- const agent = getAgent();
35
- const result = await agent.thread(msgId);
36
- console.log(`[${result.parent.id}] ${result.parent.agent_name}: ${result.parent.text}`);
37
- for (const r of result.replies) {
38
- console.log(` [${r.id}] ${r.agent_name}: ${r.text}`);
39
- }
40
- });
41
- program
42
- .command('inbox')
43
- .description('Show inbox')
44
- .action(async () => {
45
- const agent = getAgent();
46
- const inbox = await agent.inbox();
47
- console.log(JSON.stringify(inbox, null, 2));
48
- });
49
- program
50
- .command('dms <agent>')
51
- .description('Show DMs with an agent')
52
- .action(async (agentName) => {
53
- const agent = getAgent();
54
- const convos = await agent.dms.conversations();
55
- const convo = convos.find((c) => c.participants?.some((p) => p === agentName) ?? false);
56
- if (!convo) {
57
- console.log(`No DM conversation found with ${agentName}`);
58
- return;
59
- }
60
- const msgs = await agent.dms.messages(convo.id);
61
- for (const m of msgs) {
62
- console.log(`[${m.id}] ${m.agent_name}: ${m.text}`);
63
- }
64
- });
65
- program
66
- .command('readers <msg_id>')
67
- .description('Show who read a message')
68
- .action(async (msgId) => {
69
- const agent = getAgent();
70
- const readers = await agent.readers(msgId);
71
- if (readers.length === 0) {
72
- console.log('No readers yet.');
73
- return;
74
- }
75
- for (const r of readers) {
76
- console.log(`${r.agent_name} — read at ${r.read_at}`);
77
- }
78
- });
79
- }
80
- //# sourceMappingURL=read.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerSearchCommands(program: Command): void;
3
- //# sourceMappingURL=search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgB7D"}
@@ -1,31 +0,0 @@
1
- import { RelayCast } from '@relaycast/sdk';
2
- import { loadConfig } from '../config.js';
3
- function getAgent() {
4
- const config = loadConfig();
5
- if (!config.apiKey) {
6
- throw new Error('No API key configured. Run: relay config set api-key <key>');
7
- }
8
- if (!config.agentToken) {
9
- throw new Error('No agent token configured. Run: relay config set agent-token <token>');
10
- }
11
- const relay = new RelayCast({ apiKey: config.apiKey, baseUrl: config.endpoint });
12
- return relay.as(config.agentToken);
13
- }
14
- export function registerSearchCommands(program) {
15
- program
16
- .command('search <query>')
17
- .description('Search messages')
18
- .option('--channel <channel>', 'Filter by channel')
19
- .action(async (query, opts) => {
20
- const agent = getAgent();
21
- const results = await agent.search(query, { channel: opts.channel });
22
- if (results.length === 0) {
23
- console.log('No results.');
24
- return;
25
- }
26
- for (const r of results) {
27
- console.log(JSON.stringify(r));
28
- }
29
- });
30
- }
31
- //# sourceMappingURL=search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,SAAS,QAAQ;IACf,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjF,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAA0B,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,4 +0,0 @@
1
- import { Command } from 'commander';
2
- import type { CliTelemetry } from '../telemetry.js';
3
- export declare function registerTelemetryCommands(program: Command, telemetryInstance: CliTelemetry): void;
4
- //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AA6BrE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,YAAY,GAAG,IAAI,CA2BjG"}
@@ -1,45 +0,0 @@
1
- const TELEMETRY_DOCS_URL = 'https://github.com/AgentWorkforce/relaycast/blob/main/TELEMETRY.md';
2
- function reasonMessage(status) {
3
- if (status.reason === 'enabled')
4
- return 'Telemetry is enabled.';
5
- if (status.reason === 'env_opt_out') {
6
- return 'Telemetry disabled by environment variable (DO_NOT_TRACK or RELAYCAST_TELEMETRY_DISABLED).';
7
- }
8
- return 'Telemetry disabled by user preference.';
9
- }
10
- function printStatus(status) {
11
- console.log(JSON.stringify({
12
- enabled: status.enabled,
13
- reason: status.reason,
14
- env_opt_out: status.envOptOut,
15
- user_opt_out: status.userOptOut,
16
- message: reasonMessage(status),
17
- documentation: TELEMETRY_DOCS_URL,
18
- }, null, 2));
19
- }
20
- export function registerTelemetryCommands(program, telemetryInstance) {
21
- const telemetry = program
22
- .command('telemetry')
23
- .description('Anonymous usage telemetry settings (opt-out)');
24
- telemetry
25
- .command('status')
26
- .description('Show telemetry status and opt-out source')
27
- .action(() => {
28
- printStatus(telemetryInstance.status());
29
- });
30
- telemetry
31
- .command('enable')
32
- .description('Enable telemetry')
33
- .action(() => {
34
- const status = telemetryInstance.setEnabled(true);
35
- printStatus(status);
36
- });
37
- telemetry
38
- .command('disable')
39
- .description('Disable telemetry')
40
- .action(() => {
41
- const status = telemetryInstance.setEnabled(false);
42
- printStatus(status);
43
- });
44
- }
45
- //# sourceMappingURL=telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"AAGA,MAAM,kBAAkB,GAAG,oEAAoE,CAAC;AAEhG,SAAS,aAAa,CAAC,MAAuB;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,uBAAuB,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QACpC,OAAO,4FAA4F,CAAC;IACtG,CAAC;IACD,OAAO,wCAAwC,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB;IAC1C,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;QACE,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,SAAS;QAC7B,YAAY,EAAE,MAAM,CAAC,UAAU;QAC/B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;QAC9B,aAAa,EAAE,kBAAkB;KAClC,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAgB,EAAE,iBAA+B;IACzF,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAE/D,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,GAAG,EAAE;QACX,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClD,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnD,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerWorkspaceCommands(program: Command): void;
3
- //# sourceMappingURL=workspace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBhE"}
@@ -1,35 +0,0 @@
1
- import { RelayCast } from '@relaycast/sdk';
2
- import { loadConfig } from '../config.js';
3
- function createRelay() {
4
- const cfg = loadConfig();
5
- if (!cfg.apiKey) {
6
- throw new Error('Missing API key. Run: relay config set api-key <value>');
7
- }
8
- return new RelayCast({ apiKey: cfg.apiKey, baseUrl: cfg.endpoint });
9
- }
10
- function printJson(value) {
11
- console.log(JSON.stringify(value, null, 2));
12
- }
13
- export function registerWorkspaceCommands(program) {
14
- const ws = program.command('workspace').description('Workspace management');
15
- ws.command('create <name>')
16
- .description('Create workspace (updates current workspace name)')
17
- .action(async (name) => {
18
- const relay = createRelay();
19
- const workspace = await relay.workspace.update({ name });
20
- printJson(workspace);
21
- });
22
- ws.command('info')
23
- .description('Show workspace info')
24
- .action(async () => {
25
- const relay = createRelay();
26
- const workspace = await relay.workspace.info();
27
- printJson(workspace);
28
- });
29
- ws.command('delete')
30
- .description('Delete workspace')
31
- .action(() => {
32
- console.log('Workspace deletion must be done via the dashboard.');
33
- });
34
- }
35
- //# sourceMappingURL=workspace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAE5E,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC/C,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/config.d.ts DELETED
@@ -1,9 +0,0 @@
1
- export interface RelayConfig {
2
- apiKey?: string;
3
- agentToken?: string;
4
- endpoint?: string;
5
- }
6
- export declare function getConfigPath(): string;
7
- export declare function loadConfig(): RelayConfig;
8
- export declare function saveConfig(config: RelayConfig): void;
9
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,WAAW,CAYxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAKpD"}
package/dist/config.js DELETED
@@ -1,29 +0,0 @@
1
- import fs from 'node:fs';
2
- import os from 'node:os';
3
- import path from 'node:path';
4
- export function getConfigPath() {
5
- return path.join(os.homedir(), '.relay', 'config.json');
6
- }
7
- export function loadConfig() {
8
- const configPath = getConfigPath();
9
- try {
10
- const raw = fs.readFileSync(configPath, 'utf8');
11
- const parsed = JSON.parse(raw);
12
- if (parsed && typeof parsed === 'object')
13
- return parsed;
14
- return {};
15
- }
16
- catch (err) {
17
- const e = err;
18
- if (e && e.code === 'ENOENT')
19
- return {};
20
- throw err;
21
- }
22
- }
23
- export function saveConfig(config) {
24
- const configPath = getConfigPath();
25
- const dir = path.dirname(configPath);
26
- fs.mkdirSync(dir, { recursive: true });
27
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
28
- }
29
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAqB,CAAC;QACvE,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAA4B,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/E,CAAC"}
@@ -1,17 +0,0 @@
1
- import { type ClientTelemetryEventName } from '@relaycast/types';
2
- export interface TelemetryStatus {
3
- enabled: boolean;
4
- reason: 'enabled' | 'env_opt_out' | 'user_opt_out';
5
- envOptOut: boolean;
6
- userOptOut: boolean;
7
- }
8
- export interface CliTelemetry {
9
- capture: (event: ClientTelemetryEventName, properties?: Record<string, unknown>) => void;
10
- captureFirstRunIfNeeded: () => void;
11
- flush: (timeoutMs?: number) => Promise<void>;
12
- status: () => TelemetryStatus;
13
- setEnabled: (enabled: boolean) => TelemetryStatus;
14
- getAnonymousId: () => string;
15
- }
16
- export declare function createCliTelemetry(cliVersion?: string): CliTelemetry;
17
- //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,kBAAkB,CAAC;AAQ1B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,cAAc,CAAC;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,wBAAwB,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACzF,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,MAAM,eAAe,CAAC;IAC9B,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,eAAe,CAAC;IAClD,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B;AAoJD,wBAAgB,kBAAkB,CAAC,UAAU,SAAY,GAAG,YAAY,CA8FvE"}
package/dist/telemetry.js DELETED
@@ -1,214 +0,0 @@
1
- import fs from 'node:fs';
2
- import http from 'node:http';
3
- import https from 'node:https';
4
- import os from 'node:os';
5
- import path from 'node:path';
6
- import { randomUUID } from 'node:crypto';
7
- import { parseTelemetryIngestionEvent, sanitizeTelemetryProperties, } from '@relaycast/types';
8
- const TELEMETRY_PATH = path.join(os.homedir(), '.relay', 'telemetry.json');
9
- const DEFAULT_POSTHOG_HOST = 'https://us.i.posthog.com';
10
- const DEFAULT_POSTHOG_PUBLIC_KEY = 'phc_OAqBdey9pESZCcwaen9Fpyz6Ez8QKiMmLOnvFknXzg4';
11
- function isTruthy(value) {
12
- if (!value)
13
- return false;
14
- const normalized = value.trim().toLowerCase();
15
- return normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on';
16
- }
17
- function normalizeHost(host) {
18
- const value = host?.trim();
19
- if (!value)
20
- return DEFAULT_POSTHOG_HOST;
21
- return value.endsWith('/') ? value.slice(0, -1) : value;
22
- }
23
- function getPosthogHost() {
24
- return normalizeHost(process.env.RELAYCAST_POSTHOG_HOST
25
- ?? process.env.POSTHOG_HOST);
26
- }
27
- function getPosthogApiKey() {
28
- return (process.env.RELAYCAST_POSTHOG_API_KEY
29
- ?? process.env.POSTHOG_API_KEY
30
- ?? DEFAULT_POSTHOG_PUBLIC_KEY);
31
- }
32
- function loadState() {
33
- try {
34
- const raw = fs.readFileSync(TELEMETRY_PATH, 'utf8');
35
- const parsed = JSON.parse(raw);
36
- if (parsed &&
37
- typeof parsed === 'object' &&
38
- 'anonymousId' in parsed &&
39
- typeof parsed.anonymousId === 'string') {
40
- return parsed;
41
- }
42
- }
43
- catch (err) {
44
- const e = err;
45
- if (e.code !== 'ENOENT') {
46
- // Ignore malformed telemetry files and overwrite with fresh state.
47
- }
48
- }
49
- const state = { anonymousId: randomUUID() };
50
- saveState(state);
51
- return state;
52
- }
53
- function saveState(state) {
54
- try {
55
- const dir = path.dirname(TELEMETRY_PATH);
56
- fs.mkdirSync(dir, { recursive: true });
57
- fs.writeFileSync(TELEMETRY_PATH, JSON.stringify(state, null, 2) + '\n', 'utf8');
58
- }
59
- catch {
60
- // Best-effort persistence: if filesystem is read-only or unavailable,
61
- // telemetry will still work with in-memory state
62
- }
63
- }
64
- function getStatus(state) {
65
- const envOptOut = isTruthy(process.env.DO_NOT_TRACK) || isTruthy(process.env.RELAYCAST_TELEMETRY_DISABLED);
66
- const userOptOut = state.telemetryDisabled === true;
67
- if (envOptOut) {
68
- return {
69
- enabled: false,
70
- reason: 'env_opt_out',
71
- envOptOut,
72
- userOptOut,
73
- };
74
- }
75
- if (userOptOut) {
76
- return {
77
- enabled: false,
78
- reason: 'user_opt_out',
79
- envOptOut,
80
- userOptOut,
81
- };
82
- }
83
- return {
84
- enabled: true,
85
- reason: 'enabled',
86
- envOptOut,
87
- userOptOut,
88
- };
89
- }
90
- function postJson(urlString, payload, headers) {
91
- return new Promise((resolve) => {
92
- let resolved = false;
93
- const finish = () => {
94
- if (resolved)
95
- return;
96
- resolved = true;
97
- resolve();
98
- };
99
- try {
100
- const url = new URL(urlString);
101
- const body = JSON.stringify(payload);
102
- const client = url.protocol === 'http:' ? http : https;
103
- const req = client.request({
104
- hostname: url.hostname,
105
- port: url.port ? parseInt(url.port, 10) : undefined,
106
- path: `${url.pathname}${url.search}`,
107
- method: 'POST',
108
- headers: {
109
- 'content-type': 'application/json',
110
- 'content-length': Buffer.byteLength(body),
111
- ...headers,
112
- },
113
- }, (res) => {
114
- res.resume();
115
- res.on('end', finish);
116
- res.on('error', finish);
117
- });
118
- req.on('error', finish);
119
- req.setTimeout(1000, () => {
120
- req.destroy();
121
- finish();
122
- });
123
- req.write(body);
124
- req.end();
125
- }
126
- catch {
127
- finish();
128
- }
129
- });
130
- }
131
- export function createCliTelemetry(cliVersion = 'unknown') {
132
- const state = loadState();
133
- const posthogHost = getPosthogHost();
134
- const posthogApiKey = getPosthogApiKey();
135
- const sessionId = randomUUID();
136
- const pending = new Set();
137
- const distinctId = process.env.RELAYCAST_TELEMETRY_DISTINCT_ID || state.anonymousId;
138
- const distinctIdSource = process.env.RELAYCAST_TELEMETRY_DISTINCT_ID
139
- ? 'env'
140
- : 'generated';
141
- const capture = (event, properties = {}) => {
142
- const status = getStatus(state);
143
- if (!status.enabled)
144
- return;
145
- const parsed = parseTelemetryIngestionEvent({
146
- event,
147
- distinct_id: distinctId,
148
- properties: sanitizeTelemetryProperties({
149
- surface: 'cli',
150
- cli_version: cliVersion,
151
- session_id: sessionId,
152
- node_version: process.version,
153
- platform: process.platform,
154
- arch: process.arch,
155
- distinct_id_source: distinctIdSource,
156
- ...properties,
157
- }),
158
- });
159
- const payload = {
160
- api_key: posthogApiKey,
161
- event: parsed.event,
162
- distinct_id: parsed.distinct_id,
163
- properties: {
164
- ...parsed.properties,
165
- origin_surface: 'cli',
166
- origin_client: 'relaycast-cli',
167
- origin_version: cliVersion,
168
- },
169
- };
170
- const promise = postJson(`${posthogHost}/capture/`, payload, {});
171
- pending.add(promise);
172
- void promise.finally(() => pending.delete(promise));
173
- };
174
- const captureFirstRunIfNeeded = () => {
175
- if (state.firstRunCaptured)
176
- return;
177
- const status = getStatus(state);
178
- if (!status.enabled)
179
- return;
180
- state.firstRunCaptured = true;
181
- saveState(state);
182
- capture('relaycast_cli_first_run', {
183
- install_source: process.env.RELAYCAST_INSTALL_SOURCE ?? 'unknown',
184
- install_ref: process.env.RELAYCAST_INSTALL_REF ?? null,
185
- command_count: Math.max(process.argv.length - 2, 0),
186
- });
187
- };
188
- const flush = async (timeoutMs = 300) => {
189
- const tasks = Array.from(pending);
190
- if (tasks.length === 0)
191
- return;
192
- await Promise.race([
193
- Promise.allSettled(tasks).then(() => undefined),
194
- new Promise((resolve) => {
195
- const timer = setTimeout(resolve, timeoutMs);
196
- timer.unref?.();
197
- }),
198
- ]);
199
- };
200
- const setEnabled = (enabled) => {
201
- state.telemetryDisabled = !enabled;
202
- saveState(state);
203
- return getStatus(state);
204
- };
205
- return {
206
- capture,
207
- captureFirstRunIfNeeded,
208
- flush,
209
- status: () => getStatus(state),
210
- setEnabled,
211
- getAnonymousId: () => state.anonymousId,
212
- };
213
- }
214
- //# sourceMappingURL=telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}