@andocorp/cli 0.1.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.
- package/README.md +136 -0
- package/package.json +42 -0
- package/src/adapters.test.ts +50 -0
- package/src/adapters.ts +215 -0
- package/src/args.test.ts +28 -0
- package/src/args.ts +98 -0
- package/src/cli-helpers.test.ts +82 -0
- package/src/cli-helpers.ts +149 -0
- package/src/client.test.ts +235 -0
- package/src/client.ts +378 -0
- package/src/components/prompt-line.ts +179 -0
- package/src/components/transcript-pane.test.ts +26 -0
- package/src/components/transcript-pane.ts +457 -0
- package/src/config.ts +53 -0
- package/src/emoji-suggestions.ts +152 -0
- package/src/format.test.ts +54 -0
- package/src/format.ts +611 -0
- package/src/help.test.ts +13 -0
- package/src/help.ts +48 -0
- package/src/index.ts +466 -0
- package/src/interactive.ts +832 -0
- package/src/test-helpers.ts +207 -0
- package/src/types.ts +24 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import * as Shared from "@ando/shared";
|
|
2
|
+
|
|
3
|
+
const BASE_DATE = new Date("2026-04-09T12:00:00.000Z");
|
|
4
|
+
|
|
5
|
+
export function createFile(
|
|
6
|
+
overrides: Partial<Shared.Contracts.FileExtended> = {}
|
|
7
|
+
): Shared.Contracts.FileExtended {
|
|
8
|
+
return {
|
|
9
|
+
id: overrides.id ?? "file-1",
|
|
10
|
+
workspace_id: overrides.workspace_id ?? "workspace-1",
|
|
11
|
+
uploader_member_id: overrides.uploader_member_id ?? "member-1",
|
|
12
|
+
r2_key: overrides.r2_key ?? "files/file-1",
|
|
13
|
+
filename: overrides.filename ?? "notes.txt",
|
|
14
|
+
content_type: overrides.content_type ?? "text/plain",
|
|
15
|
+
size_bytes: overrides.size_bytes ?? 128,
|
|
16
|
+
width: overrides.width ?? null,
|
|
17
|
+
height: overrides.height ?? null,
|
|
18
|
+
thumbnail_r2_key: overrides.thumbnail_r2_key ?? null,
|
|
19
|
+
duration_seconds: overrides.duration_seconds ?? null,
|
|
20
|
+
extracted_text: overrides.extracted_text ?? null,
|
|
21
|
+
description: overrides.description ?? null,
|
|
22
|
+
extraction_status:
|
|
23
|
+
overrides.extraction_status ?? Shared.Models.FileExtractionStatus.UNINITIALIZED,
|
|
24
|
+
created_at: overrides.created_at ?? BASE_DATE,
|
|
25
|
+
updated_at: overrides.updated_at ?? BASE_DATE,
|
|
26
|
+
presigned_url: overrides.presigned_url ?? "https://files.example.com/file-1",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function createMember(
|
|
31
|
+
overrides: Partial<Shared.Contracts.MemberExtended> = {}
|
|
32
|
+
): Shared.Contracts.MemberExtended {
|
|
33
|
+
return {
|
|
34
|
+
id: overrides.id ?? "member-1",
|
|
35
|
+
stytch_member_id: overrides.stytch_member_id ?? "stytch-member-1",
|
|
36
|
+
email: overrides.email ?? "alex@ando.so",
|
|
37
|
+
display_name: overrides.display_name ?? "Alex",
|
|
38
|
+
profile_image_url: overrides.profile_image_url ?? null,
|
|
39
|
+
profile_image_file_id: overrides.profile_image_file_id ?? null,
|
|
40
|
+
avatar_asset_key: overrides.avatar_asset_key ?? null,
|
|
41
|
+
avatar_width: overrides.avatar_width ?? null,
|
|
42
|
+
avatar_height: overrides.avatar_height ?? null,
|
|
43
|
+
avatar_source_kind: overrides.avatar_source_kind ?? null,
|
|
44
|
+
pinned_membership_ids: overrides.pinned_membership_ids ?? [],
|
|
45
|
+
title: overrides.title ?? null,
|
|
46
|
+
time_zone: overrides.time_zone ?? "America/Chicago",
|
|
47
|
+
workspace_id: overrides.workspace_id ?? "workspace-1",
|
|
48
|
+
member_type: overrides.member_type ?? Shared.Models.MemberType.HUMAN,
|
|
49
|
+
workspace_role: overrides.workspace_role ?? Shared.Models.WorkspaceRole.MEMBER,
|
|
50
|
+
total_unread_count: overrides.total_unread_count ?? 0,
|
|
51
|
+
e164: overrides.e164 ?? null,
|
|
52
|
+
from_e164: overrides.from_e164 ?? null,
|
|
53
|
+
linq_chat_id: overrides.linq_chat_id ?? null,
|
|
54
|
+
archived_at: overrides.archived_at ?? null,
|
|
55
|
+
last_active_at: overrides.last_active_at ?? BASE_DATE,
|
|
56
|
+
last_caught_up_at: overrides.last_caught_up_at ?? BASE_DATE,
|
|
57
|
+
onboarding_completed_at: overrides.onboarding_completed_at ?? null,
|
|
58
|
+
summary_text: overrides.summary_text ?? null,
|
|
59
|
+
last_summary_at: overrides.last_summary_at ?? null,
|
|
60
|
+
buffer_text: overrides.buffer_text ?? null,
|
|
61
|
+
updated_at: overrides.updated_at ?? BASE_DATE,
|
|
62
|
+
created_at: overrides.created_at ?? BASE_DATE,
|
|
63
|
+
color_theme: overrides.color_theme ?? Shared.Models.ColorTheme.AUTO,
|
|
64
|
+
show_thread_trees: overrides.show_thread_trees ?? false,
|
|
65
|
+
profile_image_file: overrides.profile_image_file ?? null,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function createConversation(
|
|
70
|
+
overrides: Partial<Shared.Contracts.ConversationExtended> = {}
|
|
71
|
+
): Shared.Contracts.ConversationExtended {
|
|
72
|
+
return {
|
|
73
|
+
id: overrides.id ?? "conversation-1",
|
|
74
|
+
name: overrides.name ?? "engineering",
|
|
75
|
+
description: overrides.description ?? null,
|
|
76
|
+
type: overrides.type ?? Shared.Models.ConversationType.CHANNEL,
|
|
77
|
+
origin: overrides.origin ?? Shared.Models.ConversationOrigin.USER,
|
|
78
|
+
access_control_type:
|
|
79
|
+
overrides.access_control_type ?? Shared.Models.ConversationAccessControlType.PUBLIC,
|
|
80
|
+
workspace_id: overrides.workspace_id ?? "workspace-1",
|
|
81
|
+
human_members_count: overrides.human_members_count ?? 2,
|
|
82
|
+
agent_members_count: overrides.agent_members_count ?? 0,
|
|
83
|
+
last_message_at: overrides.last_message_at ?? BASE_DATE,
|
|
84
|
+
preview_member_ids: overrides.preview_member_ids ?? ["member-1"],
|
|
85
|
+
everyone_member_group_id: overrides.everyone_member_group_id ?? "group-1",
|
|
86
|
+
updated_at: overrides.updated_at ?? BASE_DATE,
|
|
87
|
+
created_at: overrides.created_at ?? BASE_DATE,
|
|
88
|
+
summary_text: overrides.summary_text ?? null,
|
|
89
|
+
last_summary_at: overrides.last_summary_at ?? null,
|
|
90
|
+
buffer_text: overrides.buffer_text ?? null,
|
|
91
|
+
archived_at: overrides.archived_at ?? null,
|
|
92
|
+
agent_responding_thread_id: overrides.agent_responding_thread_id ?? null,
|
|
93
|
+
creator_member_id: overrides.creator_member_id ?? "member-1",
|
|
94
|
+
participant_signature: overrides.participant_signature ?? null,
|
|
95
|
+
superseded_by_conversation_id: overrides.superseded_by_conversation_id ?? null,
|
|
96
|
+
preview_members: overrides.preview_members ?? [createMember()],
|
|
97
|
+
creator_member: overrides.creator_member ?? createMember(),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function createMembership(
|
|
102
|
+
overrides: Partial<Shared.Contracts.MembershipExtended> = {}
|
|
103
|
+
): Shared.Contracts.MembershipExtended {
|
|
104
|
+
return {
|
|
105
|
+
id: overrides.id ?? "membership-1",
|
|
106
|
+
member_id: overrides.member_id ?? "member-1",
|
|
107
|
+
conversation_id: overrides.conversation_id ?? "conversation-1",
|
|
108
|
+
unread_mentions_count: overrides.unread_mentions_count ?? 0,
|
|
109
|
+
last_seen_at: overrides.last_seen_at ?? BASE_DATE,
|
|
110
|
+
updated_at: overrides.updated_at ?? BASE_DATE,
|
|
111
|
+
created_at: overrides.created_at ?? BASE_DATE,
|
|
112
|
+
member: overrides.member ?? createMember(),
|
|
113
|
+
conversation: overrides.conversation ?? createConversation(),
|
|
114
|
+
thread_subscriptions: overrides.thread_subscriptions ?? [],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function createWorkspace(
|
|
119
|
+
overrides: Partial<Shared.Contracts.WorkspaceExtended> = {}
|
|
120
|
+
): Shared.Contracts.WorkspaceExtended {
|
|
121
|
+
return {
|
|
122
|
+
id: overrides.id ?? "workspace-1",
|
|
123
|
+
stytch_organization_id: overrides.stytch_organization_id ?? "org-1",
|
|
124
|
+
name: overrides.name ?? "Ando",
|
|
125
|
+
slug: overrides.slug ?? "ando",
|
|
126
|
+
image_url: overrides.image_url ?? null,
|
|
127
|
+
icon_image_file_id: overrides.icon_image_file_id ?? null,
|
|
128
|
+
description: overrides.description ?? null,
|
|
129
|
+
invite_link_id: overrides.invite_link_id ?? "invite-1",
|
|
130
|
+
created_at: overrides.created_at ?? BASE_DATE,
|
|
131
|
+
updated_at: overrides.updated_at ?? BASE_DATE,
|
|
132
|
+
workspace_invite_link: overrides.workspace_invite_link ?? {
|
|
133
|
+
id: "invite-1",
|
|
134
|
+
workspace_id: "workspace-1",
|
|
135
|
+
slug: "ando",
|
|
136
|
+
code: "ANDO1234",
|
|
137
|
+
created_at: BASE_DATE,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function createMe(
|
|
143
|
+
overrides: Partial<Shared.Contracts.MeExtended> = {}
|
|
144
|
+
): Shared.Contracts.MeExtended {
|
|
145
|
+
return {
|
|
146
|
+
...createMember(overrides),
|
|
147
|
+
workspace: overrides.workspace ?? createWorkspace(),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export function createReaction(
|
|
152
|
+
overrides: Partial<Shared.Models.ConversationMessageReaction> = {}
|
|
153
|
+
): Shared.Models.ConversationMessageReaction {
|
|
154
|
+
return {
|
|
155
|
+
id: overrides.id ?? "reaction-1",
|
|
156
|
+
member_id: overrides.member_id ?? "member-2",
|
|
157
|
+
conversation_id: overrides.conversation_id ?? "conversation-1",
|
|
158
|
+
message_id: overrides.message_id ?? "message-1",
|
|
159
|
+
emoji_text: overrides.emoji_text ?? "👍",
|
|
160
|
+
created_at: overrides.created_at ?? BASE_DATE,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export function createMessage(
|
|
165
|
+
overrides: Partial<Shared.Contracts.ConversationMessageExtended> = {}
|
|
166
|
+
): Shared.Contracts.ConversationMessageExtended {
|
|
167
|
+
return {
|
|
168
|
+
id: overrides.id ?? "message-1",
|
|
169
|
+
client_request_id: overrides.client_request_id ?? null,
|
|
170
|
+
status: overrides.status ?? Shared.Models.ConversationMessageStatus.SENT,
|
|
171
|
+
type: overrides.type ?? Shared.Models.ConversationMessageType.USER,
|
|
172
|
+
system_event_type: overrides.system_event_type ?? null,
|
|
173
|
+
markdown_content: overrides.markdown_content ?? "hello",
|
|
174
|
+
explicit_context_message_ids: overrides.explicit_context_message_ids ?? [],
|
|
175
|
+
image_urls: overrides.image_urls ?? [],
|
|
176
|
+
file_ids: overrides.file_ids ?? [],
|
|
177
|
+
suppressed_link_preview_urls: overrides.suppressed_link_preview_urls ?? [],
|
|
178
|
+
conversation_id: overrides.conversation_id ?? "conversation-1",
|
|
179
|
+
workspace_id: overrides.workspace_id ?? "workspace-1",
|
|
180
|
+
message_reaction_ids: overrides.message_reaction_ids ?? [],
|
|
181
|
+
response_message_ids: overrides.response_message_ids ?? [],
|
|
182
|
+
initiator_id: overrides.initiator_id ?? null,
|
|
183
|
+
author_id: overrides.author_id ?? "member-1",
|
|
184
|
+
thread_root_id: overrides.thread_root_id ?? null,
|
|
185
|
+
agent_output_id: overrides.agent_output_id ?? null,
|
|
186
|
+
agent_session_id: overrides.agent_session_id ?? null,
|
|
187
|
+
call_id: overrides.call_id ?? null,
|
|
188
|
+
call_root_id: overrides.call_root_id ?? null,
|
|
189
|
+
replies_count: overrides.replies_count ?? 0,
|
|
190
|
+
replies_preview_member_ids: overrides.replies_preview_member_ids ?? [],
|
|
191
|
+
pinned_at: overrides.pinned_at ?? null,
|
|
192
|
+
last_reply_at: overrides.last_reply_at ?? null,
|
|
193
|
+
archived_at: overrides.archived_at ?? null,
|
|
194
|
+
created_at: overrides.created_at ?? BASE_DATE,
|
|
195
|
+
updated_at: overrides.updated_at ?? BASE_DATE,
|
|
196
|
+
edited_at: overrides.edited_at ?? null,
|
|
197
|
+
author: overrides.author ?? createMember(),
|
|
198
|
+
agent_output: overrides.agent_output ?? null,
|
|
199
|
+
llm_response_messages: overrides.llm_response_messages ?? [],
|
|
200
|
+
replies_preview_members: overrides.replies_preview_members ?? [],
|
|
201
|
+
latest_reply_at: overrides.latest_reply_at ?? undefined,
|
|
202
|
+
thread_root_message: overrides.thread_root_message ?? null,
|
|
203
|
+
message_reactions: overrides.message_reactions ?? [],
|
|
204
|
+
files: overrides.files ?? [],
|
|
205
|
+
call: overrides.call ?? null,
|
|
206
|
+
};
|
|
207
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as Shared from "@ando/shared";
|
|
2
|
+
|
|
3
|
+
export type SavedConfig = {
|
|
4
|
+
convexUrl: string;
|
|
5
|
+
sessionToken: string;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type CliConfig = SavedConfig;
|
|
9
|
+
|
|
10
|
+
export type Me = Shared.Contracts.MeExtended;
|
|
11
|
+
export type Membership = Shared.Contracts.MembershipExtended;
|
|
12
|
+
export type Message = Shared.Contracts.ConversationMessageExtended;
|
|
13
|
+
export type DiscoveredWorkspace = Shared.Contracts.DiscoveredWorkspace;
|
|
14
|
+
|
|
15
|
+
export type ConversationPage = {
|
|
16
|
+
items: Message[];
|
|
17
|
+
cursor: string | null;
|
|
18
|
+
hasMore: boolean;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type ParsedArgs = {
|
|
22
|
+
flags: Map<string, string | true>;
|
|
23
|
+
positionals: string[];
|
|
24
|
+
};
|