@scindo/cli 1.2.0 → 1.4.0

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.
@@ -1,2 +1,2 @@
1
- export declare function agentCommand(channelName: string, message: string): Promise<void>;
1
+ export declare function agentCommand(workspaceName: string, message: string): Promise<void>;
2
2
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAQA,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGtF"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AASA,wBAAsB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmExF"}
@@ -1,49 +1,27 @@
1
1
  import chalk from 'chalk';
2
2
  import { getSupabase } from '../supabase.js';
3
- import { getConfig, setConfig } from '../config.js';
3
+ import { getConfig } from '../config.js';
4
4
  import { consumeSSEStream } from '../stream.js';
5
- const AGENT_USER_ID = process.env.SCINDO_AGENT_USER_ID ?? '';
6
- const APP_URL = process.env.SCINDO_APP_URL ?? 'https://app.scindo.one';
7
- export async function agentCommand(channelName, message) {
5
+ import { APP_URL } from '../constants.js';
6
+ import { resolveWorkspace } from '../resolve-workspace.js';
7
+ const AGENT_USER_ID = '00000000-0000-0000-0000-000000000001';
8
+ export async function agentCommand(workspaceName, message) {
8
9
  const supabase = getSupabase();
9
10
  const config = getConfig();
10
11
  if (!config.userId) {
11
12
  console.log(chalk.red('Not logged in. Run: scindo login'));
12
13
  return;
13
14
  }
14
- const slug = channelName.replace(/^#/, '');
15
- let workspaceId = config.lastWorkspaceId;
16
- if (!workspaceId) {
17
- const { data: member } = await supabase
18
- .from('workspace_members')
19
- .select('workspace_id')
20
- .limit(1)
21
- .single();
22
- if (!member) {
23
- console.log(chalk.red('No workspaces found'));
24
- return;
25
- }
26
- workspaceId = member.workspace_id;
27
- setConfig({ lastWorkspaceId: workspaceId });
28
- }
29
- // Find channel
30
- const { data: channel, error: chErr } = await supabase
31
- .from('channels')
32
- .select('id, name')
33
- .eq('workspace_id', workspaceId)
34
- .eq('slug', slug)
35
- .single();
36
- if (chErr || !channel) {
37
- console.log(chalk.red(`Channel #${slug} not found`));
15
+ const resolved = await resolveWorkspace(supabase, workspaceName);
16
+ if (!resolved)
38
17
  return;
39
- }
40
- // Auto-prepend @Scindo mention if not already present
41
- const content = message.includes('@Scindo') ? message : `@Scindo ${message}`;
42
- const mentions = AGENT_USER_ID ? [AGENT_USER_ID] : [];
18
+ // Auto-prepend @Agent mention if not already present
19
+ const content = message.includes('@Agent') ? message : `@Agent ${message}`;
20
+ const mentions = [AGENT_USER_ID];
43
21
  // Send message
44
22
  const { error: sendErr } = await supabase.from('messages').insert({
45
- workspace_id: workspaceId,
46
- channel_id: channel.id,
23
+ workspace_id: resolved.workspaceId,
24
+ channel_id: resolved.channelId,
47
25
  user_id: config.userId,
48
26
  content,
49
27
  mentions,
@@ -63,24 +41,22 @@ export async function agentCommand(channelName, message) {
63
41
  'Authorization': `Bearer ${config.accessToken}`,
64
42
  },
65
43
  body: JSON.stringify({
66
- channelId: channel.id,
67
- workspaceId,
44
+ channelId: resolved.channelId,
45
+ workspaceId: resolved.workspaceId,
68
46
  stream: true,
69
47
  }),
70
48
  });
71
49
  const contentType = res.headers.get('content-type') ?? '';
72
50
  if (contentType.includes('text/event-stream')) {
73
- // Stream tokens to stdout
74
51
  await consumeSSEStream(res, (token) => process.stdout.write(token), () => process.stdout.write('\n'));
75
52
  }
76
53
  else {
77
- // Non-streaming response — wait for agent to post via Supabase
78
54
  const body = await res.json();
79
55
  if (body.error) {
80
56
  console.log(chalk.red(`Agent error: ${body.error}`));
81
57
  }
82
58
  else {
83
- console.log(chalk.dim('Agent is processing... check the channel for a response.'));
59
+ console.log(chalk.dim('Agent is processing... check the workspace for a response.'));
84
60
  }
85
61
  }
86
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAmClD;AAkDD,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA4ClD;AAkDD,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
@@ -15,6 +15,12 @@ export async function loginCommand() {
15
15
  console.log('Waiting for login...');
16
16
  try {
17
17
  const { accessToken, refreshToken } = await tokenPromise;
18
+ if (!accessToken || !refreshToken) {
19
+ console.log(chalk.red('Received empty tokens from callback'));
20
+ server.close();
21
+ process.exit(1);
22
+ return;
23
+ }
18
24
  // Decode the JWT to get the user ID
19
25
  const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);
20
26
  const { data } = await supabase.auth.getUser(accessToken);
@@ -30,9 +36,9 @@ export async function loginCommand() {
30
36
  catch (err) {
31
37
  console.log(chalk.red(`Login failed: ${err instanceof Error ? err.message : 'Unknown error'}`));
32
38
  }
33
- finally {
34
- server.close();
35
- }
39
+ // Close the server and let Node exit naturally
40
+ server.close();
41
+ server.unref();
36
42
  }
37
43
  function startCallbackServer() {
38
44
  return new Promise((resolveSetup) => {
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  interface PushOptions {
2
- channel: string;
2
+ workspace: string;
3
3
  mentionAgent?: boolean;
4
4
  }
5
5
  export declare function pushCommand(options: PushOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAQA,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4GrE"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFrE"}
@@ -1,9 +1,10 @@
1
1
  import chalk from 'chalk';
2
2
  import { getSupabase } from '../supabase.js';
3
- import { getConfig, setConfig } from '../config.js';
3
+ import { getConfig } from '../config.js';
4
4
  import { consumeSSEStream } from '../stream.js';
5
- const AGENT_USER_ID = process.env.SCINDO_AGENT_USER_ID ?? '';
6
- const APP_URL = process.env.SCINDO_APP_URL ?? 'https://app.scindo.one';
5
+ import { APP_URL } from '../constants.js';
6
+ import { resolveWorkspace } from '../resolve-workspace.js';
7
+ const AGENT_USER_ID = '00000000-0000-0000-0000-000000000001';
7
8
  export async function pushCommand(options) {
8
9
  const supabase = getSupabase();
9
10
  const config = getConfig();
@@ -21,42 +22,19 @@ export async function pushCommand(options) {
21
22
  console.log(chalk.red('No input received from stdin'));
22
23
  return;
23
24
  }
24
- const slug = options.channel.replace(/^#/, '');
25
- let workspaceId = config.lastWorkspaceId;
26
- if (!workspaceId) {
27
- const { data: member } = await supabase
28
- .from('workspace_members')
29
- .select('workspace_id')
30
- .limit(1)
31
- .single();
32
- if (!member) {
33
- console.log(chalk.red('No workspaces found'));
34
- return;
35
- }
36
- workspaceId = member.workspace_id;
37
- setConfig({ lastWorkspaceId: workspaceId });
38
- }
39
- // Find channel
40
- const { data: channel, error: chErr } = await supabase
41
- .from('channels')
42
- .select('id, name')
43
- .eq('workspace_id', workspaceId)
44
- .eq('slug', slug)
45
- .single();
46
- if (chErr || !channel) {
47
- console.log(chalk.red(`Channel #${slug} not found`));
25
+ const resolved = await resolveWorkspace(supabase, options.workspace);
26
+ if (!resolved)
48
27
  return;
49
- }
50
28
  // Optionally mention agent
51
29
  const mentions = [];
52
- if (options.mentionAgent && AGENT_USER_ID) {
53
- content = `@Scindo ${content}`;
30
+ if (options.mentionAgent) {
31
+ content = `@Agent ${content}`;
54
32
  mentions.push(AGENT_USER_ID);
55
33
  }
56
34
  // Send message
57
35
  const { error: sendErr } = await supabase.from('messages').insert({
58
- workspace_id: workspaceId,
59
- channel_id: channel.id,
36
+ workspace_id: resolved.workspaceId,
37
+ channel_id: resolved.channelId,
60
38
  user_id: config.userId,
61
39
  content,
62
40
  mentions: mentions.length > 0 ? mentions : undefined,
@@ -65,9 +43,9 @@ export async function pushCommand(options) {
65
43
  console.log(chalk.red(`Failed to send: ${sendErr.message}`));
66
44
  return;
67
45
  }
68
- console.log(chalk.green(`Pushed to #${channel.name}`));
46
+ console.log(chalk.green(`Pushed to ${options.workspace}`));
69
47
  // If agent mentioned, trigger streaming response
70
- if (options.mentionAgent && AGENT_USER_ID) {
48
+ if (options.mentionAgent) {
71
49
  try {
72
50
  const res = await fetch(`${APP_URL}/api/agent/channel-respond`, {
73
51
  method: 'POST',
@@ -76,8 +54,8 @@ export async function pushCommand(options) {
76
54
  'Authorization': `Bearer ${config.accessToken}`,
77
55
  },
78
56
  body: JSON.stringify({
79
- channelId: channel.id,
80
- workspaceId,
57
+ channelId: resolved.channelId,
58
+ workspaceId: resolved.workspaceId,
81
59
  stream: true,
82
60
  }),
83
61
  });
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare function readCommand(channelName: string, options: {
1
+ export declare function readCommand(workspaceName: string, options: {
2
2
  limit?: string;
3
3
  }): Promise<void>;
4
4
  //# sourceMappingURL=read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAkCA,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFjG"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAmCA,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDnG"}
@@ -1,6 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import { getSupabase } from '../supabase.js';
3
- import { getConfig, setConfig } from '../config.js';
3
+ import { getConfig } from '../config.js';
4
+ import { resolveWorkspace } from '../resolve-workspace.js';
4
5
  function formatTime(iso) {
5
6
  const d = new Date(iso);
6
7
  return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
@@ -21,41 +22,17 @@ function getDisplayName(profiles) {
21
22
  return profiles[0]?.display_name ?? 'Unknown';
22
23
  return profiles?.display_name ?? 'Unknown';
23
24
  }
24
- export async function readCommand(channelName, options) {
25
+ export async function readCommand(workspaceName, options) {
25
26
  const supabase = getSupabase();
26
27
  const config = getConfig();
27
- const slug = channelName.replace(/^#/, '');
28
- let workspaceId = config.lastWorkspaceId;
29
- if (!workspaceId) {
30
- const { data: member } = await supabase
31
- .from('workspace_members')
32
- .select('workspace_id')
33
- .limit(1)
34
- .single();
35
- if (!member) {
36
- console.log(chalk.red('No workspaces found'));
37
- return;
38
- }
39
- workspaceId = member.workspace_id;
40
- setConfig({ lastWorkspaceId: workspaceId });
41
- }
42
- // Find channel
43
- const { data: channel, error: chErr } = await supabase
44
- .from('channels')
45
- .select('id, name')
46
- .eq('workspace_id', workspaceId)
47
- .eq('slug', slug)
48
- .single();
49
- if (chErr || !channel) {
50
- console.log(chalk.red(`Channel #${slug} not found`));
28
+ const resolved = await resolveWorkspace(supabase, workspaceName);
29
+ if (!resolved)
51
30
  return;
52
- }
53
- setConfig({ lastChannelId: channel.id });
54
31
  const limit = parseInt(options.limit ?? '20', 10);
55
32
  const { data: messages, error } = await supabase
56
33
  .from('messages')
57
34
  .select('id, content, created_at, user_id, is_edited, reply_count, profiles:user_id(display_name)')
58
- .eq('channel_id', channel.id)
35
+ .eq('channel_id', resolved.channelId)
59
36
  .is('thread_id', null)
60
37
  .is('deleted_at', null)
61
38
  .order('created_at', { ascending: false })
@@ -65,7 +42,7 @@ export async function readCommand(channelName, options) {
65
42
  return;
66
43
  }
67
44
  const msgs = (messages ?? []).reverse();
68
- console.log(chalk.bold(`#${channel.name}`));
45
+ console.log(chalk.bold(workspaceName));
69
46
  console.log();
70
47
  let lastDate = '';
71
48
  for (const msg of msgs) {
@@ -86,7 +63,7 @@ export async function readCommand(channelName, options) {
86
63
  await supabase
87
64
  .from('channel_members')
88
65
  .update({ last_read_at: new Date().toISOString() })
89
- .eq('channel_id', channel.id)
66
+ .eq('channel_id', resolved.channelId)
90
67
  .eq('user_id', config.userId);
91
68
  }
92
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare function sendCommand(channelName: string, message: string): Promise<void>;
1
+ export declare function sendCommand(workspaceName: string, message: string): Promise<void>;
2
2
  //# sourceMappingURL=send.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDrF"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBvF"}
@@ -1,42 +1,20 @@
1
1
  import chalk from 'chalk';
2
2
  import { getSupabase } from '../supabase.js';
3
- import { getConfig, setConfig } from '../config.js';
4
- export async function sendCommand(channelName, message) {
3
+ import { getConfig } from '../config.js';
4
+ import { resolveWorkspace } from '../resolve-workspace.js';
5
+ export async function sendCommand(workspaceName, message) {
5
6
  const supabase = getSupabase();
6
7
  const config = getConfig();
7
8
  if (!config.userId) {
8
9
  console.log(chalk.red('Not logged in. Run: scindo login'));
9
10
  return;
10
11
  }
11
- const slug = channelName.replace(/^#/, '');
12
- let workspaceId = config.lastWorkspaceId;
13
- if (!workspaceId) {
14
- const { data: member } = await supabase
15
- .from('workspace_members')
16
- .select('workspace_id')
17
- .limit(1)
18
- .single();
19
- if (!member) {
20
- console.log(chalk.red('No workspaces found'));
21
- return;
22
- }
23
- workspaceId = member.workspace_id;
24
- setConfig({ lastWorkspaceId: workspaceId });
25
- }
26
- // Find channel
27
- const { data: channel, error: chErr } = await supabase
28
- .from('channels')
29
- .select('id, name')
30
- .eq('workspace_id', workspaceId)
31
- .eq('slug', slug)
32
- .single();
33
- if (chErr || !channel) {
34
- console.log(chalk.red(`Channel #${slug} not found`));
12
+ const resolved = await resolveWorkspace(supabase, workspaceName);
13
+ if (!resolved)
35
14
  return;
36
- }
37
15
  const { error } = await supabase.from('messages').insert({
38
- workspace_id: workspaceId,
39
- channel_id: channel.id,
16
+ workspace_id: resolved.workspaceId,
17
+ channel_id: resolved.channelId,
40
18
  user_id: config.userId,
41
19
  content: message,
42
20
  });
@@ -44,6 +22,6 @@ export async function sendCommand(channelName, message) {
44
22
  console.log(chalk.red(`Failed to send: ${error.message}`));
45
23
  return;
46
24
  }
47
- console.log(chalk.green(`Message sent to #${channel.name}`));
25
+ console.log(chalk.green(`Message sent to ${workspaceName}`));
48
26
  }
49
27
  //# sourceMappingURL=send.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAe;IACpE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;QAC1D,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC1C,IAAI,WAAW,GAAG,MAAM,CAAC,eAAe,CAAA;IAExC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ;aACpC,IAAI,CAAC,mBAAmB,CAAC;aACzB,MAAM,CAAC,cAAc,CAAC;aACtB,KAAK,CAAC,CAAC,CAAC;aACR,MAAM,EAAE,CAAA;QAEX,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAA;YAC7C,OAAM;QACR,CAAC;QACD,WAAW,GAAG,MAAM,CAAC,YAAY,CAAA;QACjC,SAAS,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,eAAe;IACf,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ;SACnD,IAAI,CAAC,UAAU,CAAC;SAChB,MAAM,CAAC,UAAU,CAAC;SAClB,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;SAC/B,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;SAChB,MAAM,EAAE,CAAA;IAEX,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC,CAAA;QACpD,OAAM;IACR,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACvD,YAAY,EAAE,WAAW;QACzB,UAAU,EAAE,OAAO,CAAC,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC1D,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAC9D,CAAC"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,aAAqB,EAAE,OAAe;IACtE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;QAC1D,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IAChE,IAAI,CAAC,QAAQ;QAAE,OAAM;IAErB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACvD,YAAY,EAAE,QAAQ,CAAC,WAAW;QAClC,UAAU,EAAE,QAAQ,CAAC,SAAS;QAC9B,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC1D,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC,CAAA;AAC9D,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function tasksCommand(options: {
2
+ workspace?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAcA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoGjF"}
@@ -0,0 +1,101 @@
1
+ import chalk from 'chalk';
2
+ import { getSupabase } from '../supabase.js';
3
+ import { getConfig, setConfig } from '../config.js';
4
+ const STATUS_ICONS = {
5
+ open: chalk.yellow('●'),
6
+ running: chalk.blue('●'),
7
+ needs_approval: chalk.magenta('●'),
8
+ completed: chalk.green('●'),
9
+ failed: chalk.red('●'),
10
+ ci_pending: chalk.cyan('●'),
11
+ shipped: chalk.green('✓'),
12
+ };
13
+ export async function tasksCommand(options) {
14
+ const supabase = getSupabase();
15
+ const config = getConfig();
16
+ let workspaceId = config.lastWorkspaceId;
17
+ if (options.workspace) {
18
+ const slug = options.workspace.toLowerCase();
19
+ const { data: members } = await supabase
20
+ .from('workspace_members')
21
+ .select('workspace_id, workspaces(id, name, slug)');
22
+ const match = (members ?? []).find((m) => {
23
+ const ws = m.workspaces;
24
+ return ws?.slug === slug || ws?.name?.toLowerCase() === slug;
25
+ });
26
+ if (!match?.workspaces) {
27
+ console.log(chalk.red(`Workspace "${options.workspace}" not found`));
28
+ return;
29
+ }
30
+ const ws = match.workspaces;
31
+ workspaceId = ws.id;
32
+ setConfig({ lastWorkspaceId: workspaceId });
33
+ console.log(chalk.dim(`Workspace: ${ws.name}\n`));
34
+ }
35
+ else if (!workspaceId) {
36
+ const { data: member } = await supabase
37
+ .from('workspace_members')
38
+ .select('workspace_id, workspaces(id, name, slug)')
39
+ .limit(1)
40
+ .single();
41
+ if (!member?.workspaces) {
42
+ console.log(chalk.red('No workspaces found'));
43
+ return;
44
+ }
45
+ const ws = member.workspaces;
46
+ workspaceId = ws.id;
47
+ setConfig({ lastWorkspaceId: workspaceId });
48
+ console.log(chalk.dim(`Workspace: ${ws.name}\n`));
49
+ }
50
+ // Fetch tasks (exclude subtasks)
51
+ const { data: tasks, error } = await supabase
52
+ .from('tasks')
53
+ .select('id, title, status, updated_at, parent_task_id, sort_order')
54
+ .eq('workspace_id', workspaceId)
55
+ .is('parent_task_id', null)
56
+ .order('sort_order', { ascending: true, nullsFirst: false })
57
+ .order('updated_at', { ascending: false });
58
+ if (error) {
59
+ console.log(chalk.red(`Error: ${error.message}`));
60
+ return;
61
+ }
62
+ if (!tasks || tasks.length === 0) {
63
+ console.log(chalk.dim('No tasks found'));
64
+ return;
65
+ }
66
+ // Fetch unread counts
67
+ const { data: unreads } = await supabase.rpc('get_task_unread_counts', {
68
+ p_workspace_id: workspaceId,
69
+ p_user_id: config.userId,
70
+ });
71
+ const unreadMap = new Map();
72
+ if (unreads) {
73
+ for (const u of unreads) {
74
+ if (u.unread_count > 0)
75
+ unreadMap.set(u.task_id, u.unread_count);
76
+ }
77
+ }
78
+ // Split into active and done
79
+ const active = tasks.filter((t) => t.status !== 'completed' && t.status !== 'shipped');
80
+ const done = tasks.filter((t) => t.status === 'completed' || t.status === 'shipped');
81
+ console.log(chalk.bold('Tasks'));
82
+ console.log();
83
+ for (const task of active) {
84
+ const icon = STATUS_ICONS[task.status] ?? '○';
85
+ const unread = unreadMap.get(task.id);
86
+ let line = ` ${icon} ${task.title}`;
87
+ if (unread) {
88
+ line += chalk.yellow(` (${unread} unread)`);
89
+ }
90
+ console.log(line);
91
+ }
92
+ if (done.length > 0) {
93
+ console.log();
94
+ console.log(chalk.dim(` Done (${done.length})`));
95
+ for (const task of done) {
96
+ const icon = STATUS_ICONS[task.status] ?? '○';
97
+ console.log(chalk.dim(` ${icon} ${task.title}`));
98
+ }
99
+ }
100
+ }
101
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAEnD,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAClC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAC3B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC3B,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;CAC1B,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA+B;IAChE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,IAAI,WAAW,GAAG,MAAM,CAAC,eAAe,CAAA;IACxC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;QAC5C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ;aACrC,IAAI,CAAC,mBAAmB,CAAC;aACzB,MAAM,CAAC,0CAA0C,CAAC,CAAA;QAErD,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACvC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAmE,CAAA;YAChF,OAAO,EAAE,EAAE,IAAI,KAAK,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAA;QAC9D,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,SAAS,aAAa,CAAC,CAAC,CAAA;YACpE,OAAM;QACR,CAAC;QAED,MAAM,EAAE,GAAG,KAAK,CAAC,UAAmE,CAAA;QACpF,WAAW,GAAG,EAAE,CAAC,EAAE,CAAA;QACnB,SAAS,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;IACnD,CAAC;SAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ;aACpC,IAAI,CAAC,mBAAmB,CAAC;aACzB,MAAM,CAAC,0CAA0C,CAAC;aAClD,KAAK,CAAC,CAAC,CAAC;aACR,MAAM,EAAE,CAAA;QAEX,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAA;YAC7C,OAAM;QACR,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,UAAmE,CAAA;QACrF,WAAW,GAAG,EAAE,CAAC,EAAE,CAAA;QACnB,SAAS,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,iCAAiC;IACjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ;SAC1C,IAAI,CAAC,OAAO,CAAC;SACb,MAAM,CAAC,2DAA2D,CAAC;SACnE,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;SAC/B,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC;SAC1B,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;SAC3D,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;IAE5C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACxC,OAAM;IACR,CAAC;IAED,sBAAsB;IACtB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,wBAAwB,EAAE;QACrE,cAAc,EAAE,WAAW;QAC3B,SAAS,EAAE,MAAM,CAAC,MAAM;KACzB,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,IAAI,OAA2D,EAAE,CAAC;YAC5E,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC;gBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;IACtF,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;IAEpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAChC,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;QAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACrC,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;QACpC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,UAAU,CAAC,CAAA;QAC7C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACjD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function workspacesCommand(): Promise<void>;
2
+ //# sourceMappingURL=workspaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/commands/workspaces.ts"],"names":[],"mappings":"AAIA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDvD"}
@@ -0,0 +1,55 @@
1
+ import chalk from 'chalk';
2
+ import { getSupabase } from '../supabase.js';
3
+ import { getConfig } from '../config.js';
4
+ export async function workspacesCommand() {
5
+ const supabase = getSupabase();
6
+ const config = getConfig();
7
+ const { data: members, error } = await supabase
8
+ .from('workspace_members')
9
+ .select('workspace_id, role, workspaces(id, name, slug)')
10
+ .eq('user_id', config.userId)
11
+ .order('created_at');
12
+ if (error) {
13
+ console.log(chalk.red(`Error: ${error.message}`));
14
+ return;
15
+ }
16
+ if (!members || members.length === 0) {
17
+ console.log(chalk.dim('No workspaces found'));
18
+ return;
19
+ }
20
+ // Collect unique workspaces
21
+ const workspaces = [];
22
+ const seen = new Set();
23
+ for (const m of members) {
24
+ const ws = m.workspaces;
25
+ if (!ws || seen.has(ws.id))
26
+ continue;
27
+ seen.add(ws.id);
28
+ workspaces.push({ ...ws, role: m.role });
29
+ }
30
+ // Fetch unread counts for each workspace
31
+ const unreadMap = new Map();
32
+ for (const ws of workspaces) {
33
+ const { data: unreads } = await supabase.rpc('get_unread_counts', {
34
+ p_workspace_id: ws.id,
35
+ p_user_id: config.userId,
36
+ });
37
+ if (unreads) {
38
+ let total = 0;
39
+ for (const u of unreads) {
40
+ total += u.unread_count;
41
+ }
42
+ if (total > 0)
43
+ unreadMap.set(ws.id, total);
44
+ }
45
+ }
46
+ console.log(chalk.bold('Workspaces'));
47
+ console.log();
48
+ for (const ws of workspaces) {
49
+ const active = ws.id === config.lastWorkspaceId ? chalk.green(' ←') : '';
50
+ const unread = unreadMap.get(ws.id);
51
+ const badge = unread ? chalk.yellow(` (${unread} unread)`) : '';
52
+ console.log(` ${ws.name}${badge}${active}`);
53
+ }
54
+ }
55
+ //# sourceMappingURL=workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/commands/workspaces.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,12 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import { loginCommand, logoutCommand } from './commands/login.js';
4
- import { channelsCommand } from './commands/channels.js';
5
4
  import { readCommand } from './commands/read.js';
6
5
  import { sendCommand } from './commands/send.js';
7
- import { dmCommand } from './commands/dm.js';
8
- import { threadCommand, replyCommand } from './commands/thread.js';
9
- import { unreadCommand } from './commands/unread.js';
6
+ import { tasksCommand } from './commands/tasks.js';
7
+ import { workspacesCommand } from './commands/workspaces.js';
10
8
  import { agentCommand } from './commands/agent.js';
11
9
  import { pushCommand } from './commands/push.js';
12
10
  import { isLoggedIn } from './config.js';
@@ -32,53 +30,37 @@ program
32
30
  .description('Log out of Scindo')
33
31
  .action(logoutCommand);
34
32
  program
35
- .command('channels')
36
- .description('List channels with unread counts')
37
- .option('-w, --workspace <name>', 'Workspace name or slug')
38
- .action(channelsCommand);
33
+ .command('workspaces')
34
+ .description('List all workspaces with unread counts')
35
+ .action(workspacesCommand);
39
36
  program
40
37
  .command('read')
41
- .description('Read recent messages from a channel')
42
- .argument('<channel>', 'Channel name (e.g. #general or general)')
38
+ .description('Read recent messages in a workspace')
39
+ .argument('<workspace>', 'Workspace name (e.g. scindo)')
43
40
  .option('-n, --limit <count>', 'Number of messages to show', '20')
44
41
  .action(readCommand);
45
42
  program
46
43
  .command('send')
47
- .description('Send a message to a channel')
48
- .argument('<channel>', 'Channel name (e.g. #general)')
44
+ .description('Send a message to a workspace')
45
+ .argument('<workspace>', 'Workspace name (e.g. scindo)')
49
46
  .argument('<message>', 'Message content')
50
47
  .action(sendCommand);
51
48
  program
52
- .command('dm')
53
- .description('Send a direct message')
54
- .argument('<user>', 'Username (e.g. @alice)')
55
- .argument('<message>', 'Message content')
56
- .action(dmCommand);
57
- program
58
- .command('thread')
59
- .description('Read the latest thread in a channel')
60
- .argument('<channel>', 'Channel name (e.g. #general)')
61
- .action(threadCommand);
62
- program
63
- .command('reply')
64
- .description('Reply to the last viewed thread')
65
- .argument('<message>', 'Reply content')
66
- .action(replyCommand);
67
- program
68
- .command('unread')
69
- .description('Show all unread messages across channels and DMs')
70
- .action(unreadCommand);
49
+ .command('tasks')
50
+ .description('List tasks in a workspace')
51
+ .option('-w, --workspace <name>', 'Workspace name or slug')
52
+ .action(tasksCommand);
71
53
  program
72
54
  .command('agent')
73
- .description('Send a message to the AI agent in a channel and stream the response')
74
- .argument('<channel>', 'Channel name (e.g. #general)')
55
+ .description('Send a message to the AI agent and stream the response')
56
+ .argument('<workspace>', 'Workspace name (e.g. scindo)')
75
57
  .argument('<message>', 'Message to send to the agent')
76
58
  .action(agentCommand);
77
59
  program
78
60
  .command('push')
79
- .description('Push stdin content to a channel')
80
- .requiredOption('--channel <name>', 'Channel name (e.g. general)')
81
- .option('--mention-agent', 'Mention @Scindo to trigger the agent')
61
+ .description('Push stdin content to a workspace')
62
+ .requiredOption('--workspace <name>', 'Workspace name (e.g. scindo)')
63
+ .option('--mention-agent', 'Mention @Agent to trigger the agent')
82
64
  .action(pushCommand);
83
65
  program.parse();
84
66
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,yDAAyD,CAAC;KACtE,OAAO,CAAC,OAAO,CAAC;KAChB,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;IACvC,mDAAmD;IACnD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAA;IAC/B,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,IAAI,UAAU,EAAE,EAAE,CAAC;QAC1D,MAAM,cAAc,EAAE,CAAA;IACxB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAE5B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,QAAQ,CAAC,aAAa,EAAE,8BAA8B,CAAC;KACvD,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,EAAE,IAAI,CAAC;KACjE,MAAM,CAAC,WAAW,CAAC,CAAA;AAEtB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+BAA+B,CAAC;KAC5C,QAAQ,CAAC,aAAa,EAAE,8BAA8B,CAAC;KACvD,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;KACxC,MAAM,CAAC,WAAW,CAAC,CAAA;AAEtB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;KAC1D,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,QAAQ,CAAC,aAAa,EAAE,8BAA8B,CAAC;KACvD,QAAQ,CAAC,WAAW,EAAE,8BAA8B,CAAC;KACrD,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,cAAc,CAAC,oBAAoB,EAAE,8BAA8B,CAAC;KACpE,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;KAChE,MAAM,CAAC,WAAW,CAAC,CAAA;AAEtB,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { SupabaseClient } from '@supabase/supabase-js';
2
+ /**
3
+ * Resolve a workspace name to its workspace ID and primary channel ID.
4
+ * Since each workspace has one channel, this replaces channel lookup.
5
+ */
6
+ export declare function resolveWorkspace(supabase: SupabaseClient, workspaceName: string): Promise<{
7
+ workspaceId: string;
8
+ channelId: string;
9
+ } | null>;
10
+ //# sourceMappingURL=resolve-workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-workspace.d.ts","sourceRoot":"","sources":["../src/resolve-workspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAGtD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAqC5D"}
@@ -0,0 +1,38 @@
1
+ import chalk from 'chalk';
2
+ import { getConfig, setConfig } from './config.js';
3
+ /**
4
+ * Resolve a workspace name to its workspace ID and primary channel ID.
5
+ * Since each workspace has one channel, this replaces channel lookup.
6
+ */
7
+ export async function resolveWorkspace(supabase, workspaceName) {
8
+ const config = getConfig();
9
+ const slug = workspaceName.toLowerCase().replace(/^#/, '');
10
+ // Find workspace by name or slug
11
+ const { data: members } = await supabase
12
+ .from('workspace_members')
13
+ .select('workspace_id, workspaces(id, name, slug)')
14
+ .eq('user_id', config.userId);
15
+ const match = (members ?? []).find((m) => {
16
+ const ws = m.workspaces;
17
+ return ws?.slug === slug || ws?.name?.toLowerCase() === slug;
18
+ });
19
+ if (!match?.workspaces) {
20
+ console.log(chalk.red(`Workspace "${workspaceName}" not found`));
21
+ return null;
22
+ }
23
+ const ws = match.workspaces;
24
+ setConfig({ lastWorkspaceId: ws.id });
25
+ // Get the workspace's channel
26
+ const { data: channel } = await supabase
27
+ .from('channels')
28
+ .select('id')
29
+ .eq('workspace_id', ws.id)
30
+ .limit(1)
31
+ .single();
32
+ if (!channel) {
33
+ console.log(chalk.red(`No channel found in workspace "${ws.name}"`));
34
+ return null;
35
+ }
36
+ return { workspaceId: ws.id, channelId: channel.id };
37
+ }
38
+ //# sourceMappingURL=resolve-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-workspace.js","sourceRoot":"","sources":["../src/resolve-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAElD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAwB,EACxB,aAAqB;IAErB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAE1D,iCAAiC;IACjC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ;SACrC,IAAI,CAAC,mBAAmB,CAAC;SACzB,MAAM,CAAC,0CAA0C,CAAC;SAClD,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAE/B,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAmE,CAAA;QAChF,OAAO,EAAE,EAAE,IAAI,KAAK,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,aAAa,aAAa,CAAC,CAAC,CAAA;QAChE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,EAAE,GAAG,KAAK,CAAC,UAAmE,CAAA;IACpF,SAAS,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IAErC,8BAA8B;IAC9B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ;SACrC,IAAI,CAAC,UAAU,CAAC;SAChB,MAAM,CAAC,IAAI,CAAC;SACZ,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;SACzB,KAAK,CAAC,CAAC,CAAC;SACR,MAAM,EAAE,CAAA;IAEX,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;QACpE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAA;AACtD,CAAC"}
package/dist/supabase.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createClient } from '@supabase/supabase-js';
2
2
  import { SUPABASE_URL, SUPABASE_ANON_KEY } from './constants.js';
3
- import { getConfig, setConfig, clearConfig } from './config.js';
3
+ import { getConfig, setConfig } from './config.js';
4
4
  let client = null;
5
5
  export function getSupabase() {
6
6
  if (client)
@@ -29,7 +29,7 @@ export async function refreshSession() {
29
29
  refresh_token: config.refreshToken,
30
30
  });
31
31
  if (error || !data.session) {
32
- clearConfig();
32
+ // Don't wipe config — the access token may still be valid
33
33
  return false;
34
34
  }
35
35
  setConfig({
@@ -1 +1 @@
1
- {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE/D,IAAI,MAAM,GAA0B,IAAI,CAAA;AAExC,MAAM,UAAU,WAAW;IACzB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,GAAG,YAAY,CAAC,YAAY,EAAE,iBAAiB,EAAE;QACrD,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE;aAC9C;SACF;KACF,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;IAC9D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;QACzD,aAAa,EAAE,MAAM,CAAC,YAAY;KACnC,CAAC,CAAA;IAEF,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,WAAW,EAAE,CAAA;QACb,OAAO,KAAK,CAAA;IACd,CAAC;IAED,SAAS,CAAC;QACR,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;QACtC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;KACzC,CAAC,CAAA;IAEF,4CAA4C;IAC5C,MAAM,GAAG,IAAI,CAAA;IAEb,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAElD,IAAI,MAAM,GAA0B,IAAI,CAAA;AAExC,MAAM,UAAU,WAAW;IACzB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,GAAG,YAAY,CAAC,YAAY,EAAE,iBAAiB,EAAE;QACrD,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE;aAC9C;SACF;KACF,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;IAC9D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;QACzD,aAAa,EAAE,MAAM,CAAC,YAAY;KACnC,CAAC,CAAA;IAEF,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,0DAA0D;QAC1D,OAAO,KAAK,CAAA;IACd,CAAC;IAED,SAAS,CAAC;QACR,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;QACtC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;KACzC,CAAC,CAAA;IAEF,4CAA4C;IAC5C,MAAM,GAAG,IAAI,CAAA;IAEb,OAAO,IAAI,CAAA;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scindo/cli",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "private": false,
5
5
  "description": "Scindo CLI — team chat with AI agents from the terminal",
6
6
  "type": "module",