relaycast 0.3.1 → 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 -43
  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 -16
  67. package/dist/telemetry.d.ts.map +0 -1
  68. package/dist/telemetry.js +0 -197
  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;AA0BrE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,YAAY,GAAG,IAAI,CA2BjG"}
@@ -1,43 +0,0 @@
1
- function reasonMessage(status) {
2
- if (status.reason === 'enabled')
3
- return 'Telemetry is enabled.';
4
- if (status.reason === 'env_opt_out') {
5
- return 'Telemetry disabled by environment variable (DO_NOT_TRACK or RELAYCAST_TELEMETRY_DISABLED).';
6
- }
7
- return 'Telemetry disabled by user preference.';
8
- }
9
- function printStatus(status) {
10
- console.log(JSON.stringify({
11
- enabled: status.enabled,
12
- reason: status.reason,
13
- env_opt_out: status.envOptOut,
14
- user_opt_out: status.userOptOut,
15
- message: reasonMessage(status),
16
- }, null, 2));
17
- }
18
- export function registerTelemetryCommands(program, telemetryInstance) {
19
- const telemetry = program
20
- .command('telemetry')
21
- .description('Anonymous usage telemetry settings (opt-out)');
22
- telemetry
23
- .command('status')
24
- .description('Show telemetry status and opt-out source')
25
- .action(() => {
26
- printStatus(telemetryInstance.status());
27
- });
28
- telemetry
29
- .command('enable')
30
- .description('Enable telemetry')
31
- .action(() => {
32
- const status = telemetryInstance.setEnabled(true);
33
- printStatus(status);
34
- });
35
- telemetry
36
- .command('disable')
37
- .description('Disable telemetry')
38
- .action(() => {
39
- const status = telemetryInstance.setEnabled(false);
40
- printStatus(status);
41
- });
42
- }
43
- //# sourceMappingURL=telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"AAGA,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;KAC/B,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,16 +0,0 @@
1
- export interface TelemetryStatus {
2
- enabled: boolean;
3
- reason: 'enabled' | 'env_opt_out' | 'user_opt_out';
4
- envOptOut: boolean;
5
- userOptOut: boolean;
6
- }
7
- export interface CliTelemetry {
8
- capture: (event: string, properties?: Record<string, unknown>) => void;
9
- captureFirstRunIfNeeded: () => void;
10
- flush: (timeoutMs?: number) => Promise<void>;
11
- status: () => TelemetryStatus;
12
- setEnabled: (enabled: boolean) => TelemetryStatus;
13
- getAnonymousId: () => string;
14
- }
15
- export declare function createCliTelemetry(cliVersion?: string): CliTelemetry;
16
- //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAaA,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,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvE,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;AAwID,wBAAgB,kBAAkB,CAAC,UAAU,SAAY,GAAG,YAAY,CA6EvE"}
package/dist/telemetry.js DELETED
@@ -1,197 +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
- const TELEMETRY_PATH = path.join(os.homedir(), '.relay', 'telemetry.json');
8
- const DEFAULT_POSTHOG_HOST = 'https://us.i.posthog.com';
9
- const DEFAULT_POSTHOG_KEY = 'phc_OAqBdey9pESZCcwaen9Fpyz6Ez8QKiMmLOnvFknXzg4';
10
- function isTruthy(value) {
11
- if (!value)
12
- return false;
13
- const normalized = value.trim().toLowerCase();
14
- return normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on';
15
- }
16
- function getPostHogKey() {
17
- return process.env.POSTHOG_API_KEY ??
18
- process.env.RELAYCAST_POSTHOG_KEY ??
19
- process.env.POSTHOG_KEY ??
20
- DEFAULT_POSTHOG_KEY;
21
- }
22
- function getPostHogHost() {
23
- const configured = process.env.POSTHOG_HOST ??
24
- process.env.RELAYCAST_POSTHOG_HOST ??
25
- DEFAULT_POSTHOG_HOST;
26
- return configured.endsWith('/') ? configured.slice(0, -1) : configured;
27
- }
28
- function loadState() {
29
- try {
30
- const raw = fs.readFileSync(TELEMETRY_PATH, 'utf8');
31
- const parsed = JSON.parse(raw);
32
- if (parsed &&
33
- typeof parsed === 'object' &&
34
- 'anonymousId' in parsed &&
35
- typeof parsed.anonymousId === 'string') {
36
- return parsed;
37
- }
38
- }
39
- catch (err) {
40
- const e = err;
41
- if (e.code !== 'ENOENT') {
42
- // Ignore malformed telemetry files and overwrite with fresh state.
43
- }
44
- }
45
- const state = { anonymousId: randomUUID() };
46
- saveState(state);
47
- return state;
48
- }
49
- function saveState(state) {
50
- try {
51
- const dir = path.dirname(TELEMETRY_PATH);
52
- fs.mkdirSync(dir, { recursive: true });
53
- fs.writeFileSync(TELEMETRY_PATH, JSON.stringify(state, null, 2) + '\n', 'utf8');
54
- }
55
- catch {
56
- // Best-effort persistence: if filesystem is read-only or unavailable,
57
- // telemetry will still work with in-memory state
58
- }
59
- }
60
- function getStatus(state) {
61
- const envOptOut = isTruthy(process.env.DO_NOT_TRACK) || isTruthy(process.env.RELAYCAST_TELEMETRY_DISABLED);
62
- const userOptOut = state.telemetryDisabled === true;
63
- if (envOptOut) {
64
- return {
65
- enabled: false,
66
- reason: 'env_opt_out',
67
- envOptOut,
68
- userOptOut,
69
- };
70
- }
71
- if (userOptOut) {
72
- return {
73
- enabled: false,
74
- reason: 'user_opt_out',
75
- envOptOut,
76
- userOptOut,
77
- };
78
- }
79
- return {
80
- enabled: true,
81
- reason: 'enabled',
82
- envOptOut,
83
- userOptOut,
84
- };
85
- }
86
- function postJson(urlString, payload) {
87
- return new Promise((resolve) => {
88
- let resolved = false;
89
- const finish = () => {
90
- if (resolved)
91
- return;
92
- resolved = true;
93
- resolve();
94
- };
95
- try {
96
- const url = new URL(urlString);
97
- const body = JSON.stringify(payload);
98
- const client = url.protocol === 'http:' ? http : https;
99
- const req = client.request({
100
- hostname: url.hostname,
101
- port: url.port ? parseInt(url.port, 10) : undefined,
102
- path: `${url.pathname}${url.search}`,
103
- method: 'POST',
104
- headers: {
105
- 'content-type': 'application/json',
106
- 'content-length': Buffer.byteLength(body),
107
- },
108
- }, (res) => {
109
- res.resume();
110
- res.on('end', finish);
111
- res.on('error', finish);
112
- });
113
- req.on('error', finish);
114
- req.setTimeout(1000, () => {
115
- req.destroy();
116
- finish();
117
- });
118
- req.write(body);
119
- req.end();
120
- }
121
- catch {
122
- finish();
123
- }
124
- });
125
- }
126
- export function createCliTelemetry(cliVersion = 'unknown') {
127
- const state = loadState();
128
- const sessionId = randomUUID();
129
- const pending = new Set();
130
- const distinctId = process.env.RELAYCAST_TELEMETRY_DISTINCT_ID || state.anonymousId;
131
- const distinctIdSource = process.env.RELAYCAST_TELEMETRY_DISTINCT_ID
132
- ? 'env'
133
- : 'generated';
134
- const capture = (event, properties = {}) => {
135
- const status = getStatus(state);
136
- if (!status.enabled)
137
- return;
138
- const payload = {
139
- api_key: getPostHogKey(),
140
- event,
141
- distinct_id: distinctId,
142
- properties: {
143
- surface: 'cli',
144
- cli_version: cliVersion,
145
- session_id: sessionId,
146
- node_version: process.version,
147
- platform: process.platform,
148
- arch: process.arch,
149
- distinct_id_source: distinctIdSource,
150
- ...properties,
151
- },
152
- };
153
- const promise = postJson(`${getPostHogHost()}/capture/`, payload);
154
- pending.add(promise);
155
- void promise.finally(() => pending.delete(promise));
156
- };
157
- const captureFirstRunIfNeeded = () => {
158
- if (state.firstRunCaptured)
159
- return;
160
- const status = getStatus(state);
161
- if (!status.enabled)
162
- return;
163
- state.firstRunCaptured = true;
164
- saveState(state);
165
- capture('relaycast_cli_first_run', {
166
- install_source: process.env.RELAYCAST_INSTALL_SOURCE ?? 'unknown',
167
- install_ref: process.env.RELAYCAST_INSTALL_REF ?? null,
168
- command_count: Math.max(process.argv.length - 2, 0),
169
- });
170
- };
171
- const flush = async (timeoutMs = 300) => {
172
- const tasks = Array.from(pending);
173
- if (tasks.length === 0)
174
- return;
175
- await Promise.race([
176
- Promise.allSettled(tasks).then(() => undefined),
177
- new Promise((resolve) => {
178
- const timer = setTimeout(resolve, timeoutMs);
179
- timer.unref?.();
180
- }),
181
- ]);
182
- };
183
- const setEnabled = (enabled) => {
184
- state.telemetryDisabled = !enabled;
185
- saveState(state);
186
- return getStatus(state);
187
- };
188
- return {
189
- capture,
190
- captureFirstRunIfNeeded,
191
- flush,
192
- status: () => getStatus(state),
193
- setEnabled,
194
- getAnonymousId: () => state.anonymousId,
195
- };
196
- }
197
- //# sourceMappingURL=telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}