linkedin-automation-cli 1.0.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.
Files changed (314) hide show
  1. package/.env.example +12 -0
  2. package/.github/workflows/ci.yml +66 -0
  3. package/.github/workflows/publish.yml +48 -0
  4. package/.husky/pre-commit +6 -0
  5. package/.prettierignore +4 -0
  6. package/.prettierrc +10 -0
  7. package/AGENTS.md +294 -0
  8. package/CHANGELOG.md +40 -0
  9. package/GIT_RELEASE.md +167 -0
  10. package/LICENSE +21 -0
  11. package/Makefile +30 -0
  12. package/NPM_PUBLISHING.md +230 -0
  13. package/PYEOF +0 -0
  14. package/README.md +295 -0
  15. package/TESTING-GUIDE.md +151 -0
  16. package/cmd/linkedin/main.go +9 -0
  17. package/dist/agent/action-executor.d.ts +81 -0
  18. package/dist/agent/action-executor.d.ts.map +1 -0
  19. package/dist/agent/action-executor.js +170 -0
  20. package/dist/agent/action-executor.js.map +1 -0
  21. package/dist/agent/action-executor.test.d.ts +2 -0
  22. package/dist/agent/action-executor.test.d.ts.map +1 -0
  23. package/dist/agent/action-executor.test.js +366 -0
  24. package/dist/agent/action-executor.test.js.map +1 -0
  25. package/dist/agent/claude-client.d.ts +74 -0
  26. package/dist/agent/claude-client.d.ts.map +1 -0
  27. package/dist/agent/claude-client.js +314 -0
  28. package/dist/agent/claude-client.js.map +1 -0
  29. package/dist/agent/claude-client.test.d.ts +2 -0
  30. package/dist/agent/claude-client.test.d.ts.map +1 -0
  31. package/dist/agent/claude-client.test.js +590 -0
  32. package/dist/agent/claude-client.test.js.map +1 -0
  33. package/dist/agent/dom-extractor.d.ts +50 -0
  34. package/dist/agent/dom-extractor.d.ts.map +1 -0
  35. package/dist/agent/dom-extractor.js +374 -0
  36. package/dist/agent/dom-extractor.js.map +1 -0
  37. package/dist/agent/dom-extractor.test.d.ts +7 -0
  38. package/dist/agent/dom-extractor.test.d.ts.map +1 -0
  39. package/dist/agent/dom-extractor.test.js +504 -0
  40. package/dist/agent/dom-extractor.test.js.map +1 -0
  41. package/dist/agent/extension-client.d.ts +75 -0
  42. package/dist/agent/extension-client.d.ts.map +1 -0
  43. package/dist/agent/extension-client.js +245 -0
  44. package/dist/agent/extension-client.js.map +1 -0
  45. package/dist/agent/index.d.ts +8 -0
  46. package/dist/agent/index.d.ts.map +1 -0
  47. package/dist/agent/index.js +16 -0
  48. package/dist/agent/index.js.map +1 -0
  49. package/dist/agent/page-agent.d.ts +76 -0
  50. package/dist/agent/page-agent.d.ts.map +1 -0
  51. package/dist/agent/page-agent.js +236 -0
  52. package/dist/agent/page-agent.js.map +1 -0
  53. package/dist/agent/types.d.ts +236 -0
  54. package/dist/agent/types.d.ts.map +1 -0
  55. package/dist/agent/types.js +37 -0
  56. package/dist/agent/types.js.map +1 -0
  57. package/dist/cli/agent-commands.d.ts +3 -0
  58. package/dist/cli/agent-commands.d.ts.map +1 -0
  59. package/dist/cli/agent-commands.js +250 -0
  60. package/dist/cli/agent-commands.js.map +1 -0
  61. package/dist/cli/auth.d.ts +3 -0
  62. package/dist/cli/auth.d.ts.map +1 -0
  63. package/dist/cli/auth.js +288 -0
  64. package/dist/cli/auth.js.map +1 -0
  65. package/dist/cli/company.d.ts +3 -0
  66. package/dist/cli/company.d.ts.map +1 -0
  67. package/dist/cli/company.js +55 -0
  68. package/dist/cli/company.js.map +1 -0
  69. package/dist/cli/connection.d.ts +3 -0
  70. package/dist/cli/connection.d.ts.map +1 -0
  71. package/dist/cli/connection.js +79 -0
  72. package/dist/cli/connection.js.map +1 -0
  73. package/dist/cli/index.d.ts +7 -0
  74. package/dist/cli/index.d.ts.map +1 -0
  75. package/dist/cli/index.js +17 -0
  76. package/dist/cli/index.js.map +1 -0
  77. package/dist/cli/messages.d.ts +3 -0
  78. package/dist/cli/messages.d.ts.map +1 -0
  79. package/dist/cli/messages.js +268 -0
  80. package/dist/cli/messages.js.map +1 -0
  81. package/dist/cli/profile.d.ts +3 -0
  82. package/dist/cli/profile.d.ts.map +1 -0
  83. package/dist/cli/profile.js +81 -0
  84. package/dist/cli/profile.js.map +1 -0
  85. package/dist/cli/profile.test.d.ts +2 -0
  86. package/dist/cli/profile.test.d.ts.map +1 -0
  87. package/dist/cli/profile.test.js +15 -0
  88. package/dist/cli/profile.test.js.map +1 -0
  89. package/dist/cli/reply.d.ts +3 -0
  90. package/dist/cli/reply.d.ts.map +1 -0
  91. package/dist/cli/reply.js +129 -0
  92. package/dist/cli/reply.js.map +1 -0
  93. package/dist/core/audit.d.ts +17 -0
  94. package/dist/core/audit.d.ts.map +1 -0
  95. package/dist/core/audit.js +121 -0
  96. package/dist/core/audit.js.map +1 -0
  97. package/dist/core/audit.test.d.ts +2 -0
  98. package/dist/core/audit.test.d.ts.map +1 -0
  99. package/dist/core/audit.test.js +142 -0
  100. package/dist/core/audit.test.js.map +1 -0
  101. package/dist/core/browser-cookies.d.ts +19 -0
  102. package/dist/core/browser-cookies.d.ts.map +1 -0
  103. package/dist/core/browser-cookies.js +181 -0
  104. package/dist/core/browser-cookies.js.map +1 -0
  105. package/dist/core/browser.d.ts +50 -0
  106. package/dist/core/browser.d.ts.map +1 -0
  107. package/dist/core/browser.js +318 -0
  108. package/dist/core/browser.js.map +1 -0
  109. package/dist/core/config.d.ts +20 -0
  110. package/dist/core/config.d.ts.map +1 -0
  111. package/dist/core/config.js +103 -0
  112. package/dist/core/config.js.map +1 -0
  113. package/dist/core/config.test.d.ts +2 -0
  114. package/dist/core/config.test.d.ts.map +1 -0
  115. package/dist/core/config.test.js +111 -0
  116. package/dist/core/config.test.js.map +1 -0
  117. package/dist/core/storage.d.ts +19 -0
  118. package/dist/core/storage.d.ts.map +1 -0
  119. package/dist/core/storage.js +124 -0
  120. package/dist/core/storage.js.map +1 -0
  121. package/dist/core/storage.test.d.ts +2 -0
  122. package/dist/core/storage.test.d.ts.map +1 -0
  123. package/dist/core/storage.test.js +142 -0
  124. package/dist/core/storage.test.js.map +1 -0
  125. package/dist/index.d.ts +3 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +63 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/linkedin/auth.d.ts +22 -0
  130. package/dist/linkedin/auth.d.ts.map +1 -0
  131. package/dist/linkedin/auth.js +167 -0
  132. package/dist/linkedin/auth.js.map +1 -0
  133. package/dist/linkedin/company-extractor.d.ts +36 -0
  134. package/dist/linkedin/company-extractor.d.ts.map +1 -0
  135. package/dist/linkedin/company-extractor.js +211 -0
  136. package/dist/linkedin/company-extractor.js.map +1 -0
  137. package/dist/linkedin/company-extractor.test.d.ts +2 -0
  138. package/dist/linkedin/company-extractor.test.d.ts.map +1 -0
  139. package/dist/linkedin/company-extractor.test.js +52 -0
  140. package/dist/linkedin/company-extractor.test.js.map +1 -0
  141. package/dist/linkedin/connector.d.ts +45 -0
  142. package/dist/linkedin/connector.d.ts.map +1 -0
  143. package/dist/linkedin/connector.js +245 -0
  144. package/dist/linkedin/connector.js.map +1 -0
  145. package/dist/linkedin/message-sender.d.ts +32 -0
  146. package/dist/linkedin/message-sender.d.ts.map +1 -0
  147. package/dist/linkedin/message-sender.js +112 -0
  148. package/dist/linkedin/message-sender.js.map +1 -0
  149. package/dist/linkedin/messages.d.ts +78 -0
  150. package/dist/linkedin/messages.d.ts.map +1 -0
  151. package/dist/linkedin/messages.js +745 -0
  152. package/dist/linkedin/messages.js.map +1 -0
  153. package/dist/linkedin/profile.d.ts +37 -0
  154. package/dist/linkedin/profile.d.ts.map +1 -0
  155. package/dist/linkedin/profile.js +268 -0
  156. package/dist/linkedin/profile.js.map +1 -0
  157. package/dist/linkedin/profile.test.d.ts +2 -0
  158. package/dist/linkedin/profile.test.d.ts.map +1 -0
  159. package/dist/linkedin/profile.test.js +68 -0
  160. package/dist/linkedin/profile.test.js.map +1 -0
  161. package/dist/linkedin/reply.d.ts +21 -0
  162. package/dist/linkedin/reply.d.ts.map +1 -0
  163. package/dist/linkedin/reply.js +76 -0
  164. package/dist/linkedin/reply.js.map +1 -0
  165. package/dist/linkedin/selector-engine.d.ts +69 -0
  166. package/dist/linkedin/selector-engine.d.ts.map +1 -0
  167. package/dist/linkedin/selector-engine.js +339 -0
  168. package/dist/linkedin/selector-engine.js.map +1 -0
  169. package/dist/linkedin/selector-engine.test.d.ts +2 -0
  170. package/dist/linkedin/selector-engine.test.d.ts.map +1 -0
  171. package/dist/linkedin/selector-engine.test.js +135 -0
  172. package/dist/linkedin/selector-engine.test.js.map +1 -0
  173. package/dist/linkedin/selectors.d.ts +65 -0
  174. package/dist/linkedin/selectors.d.ts.map +1 -0
  175. package/dist/linkedin/selectors.js +261 -0
  176. package/dist/linkedin/selectors.js.map +1 -0
  177. package/dist/templates/engine.d.ts +37 -0
  178. package/dist/templates/engine.d.ts.map +1 -0
  179. package/dist/templates/engine.js +215 -0
  180. package/dist/templates/engine.js.map +1 -0
  181. package/dist/templates/engine.test.d.ts +2 -0
  182. package/dist/templates/engine.test.d.ts.map +1 -0
  183. package/dist/templates/engine.test.js +212 -0
  184. package/dist/templates/engine.test.js.map +1 -0
  185. package/dist/templates/index.d.ts +2 -0
  186. package/dist/templates/index.d.ts.map +1 -0
  187. package/dist/templates/index.js +7 -0
  188. package/dist/templates/index.js.map +1 -0
  189. package/dist/types/index.d.ts +113 -0
  190. package/dist/types/index.d.ts.map +1 -0
  191. package/dist/types/index.js +3 -0
  192. package/dist/types/index.js.map +1 -0
  193. package/dist/types/index.test.d.ts +2 -0
  194. package/dist/types/index.test.d.ts.map +1 -0
  195. package/dist/types/index.test.js +90 -0
  196. package/dist/types/index.test.js.map +1 -0
  197. package/dist/utils/paths.d.ts +8 -0
  198. package/dist/utils/paths.d.ts.map +1 -0
  199. package/dist/utils/paths.js +68 -0
  200. package/dist/utils/paths.js.map +1 -0
  201. package/dist/utils/rate-limiter.d.ts +22 -0
  202. package/dist/utils/rate-limiter.d.ts.map +1 -0
  203. package/dist/utils/rate-limiter.js +57 -0
  204. package/dist/utils/rate-limiter.js.map +1 -0
  205. package/dist/utils/retry.d.ts +18 -0
  206. package/dist/utils/retry.d.ts.map +1 -0
  207. package/dist/utils/retry.js +49 -0
  208. package/dist/utils/retry.js.map +1 -0
  209. package/docs/connection-command.md +52 -0
  210. package/docs/plans/2025-03-03-linkedin-cli-design.md +280 -0
  211. package/docs/plans/2025-03-03-linkedin-cli-implementation-plan.md +2087 -0
  212. package/docs/plans/2025-03-03-linkedin-cli-implementation.md +2420 -0
  213. package/docs/plans/2026-02-19-linkedin-connection-feature.md +596 -0
  214. package/docs/plans/2026-02-28-messages-send-feature.md +480 -0
  215. package/docs/plans/2026-02-28-messages-show-design.md +243 -0
  216. package/docs/plans/2026-03-03-linkedin-cli-oss-publishing-design.md +394 -0
  217. package/docs/plans/2026-03-03-linkedin-cli-oss-publishing-plan.md +1592 -0
  218. package/docs/superpowers/plans/2026-03-13-linkedin-automation-resilience-migration.md +425 -0
  219. package/docs/superpowers/plans/2026-03-13-playwright-fara-migration.md +1112 -0
  220. package/docs/superpowers/plans/2026-03-14-page-agent-plan.md +1598 -0
  221. package/docs/superpowers/plans/2026-03-15-company-profile-extraction.md +591 -0
  222. package/docs/superpowers/plans/2026-03-15-profile-extraction-plan.md +943 -0
  223. package/docs/superpowers/specs/2026-03-14-company-profile-extraction-design.md +371 -0
  224. package/docs/superpowers/specs/2026-03-14-page-agent-design.md +385 -0
  225. package/docs/superpowers/specs/2026-03-15-profile-extraction-design.md +409 -0
  226. package/eslint.config.mjs +58 -0
  227. package/go.mod +9 -0
  228. package/go.sum +10 -0
  229. package/import-cookies.js +376 -0
  230. package/internal/cmd/actions.go +123 -0
  231. package/internal/cmd/auth.go +108 -0
  232. package/internal/cmd/connect.go +42 -0
  233. package/internal/cmd/message.go +44 -0
  234. package/internal/cmd/people.go +454 -0
  235. package/internal/cmd/profiles.go +121 -0
  236. package/internal/cmd/root.go +89 -0
  237. package/internal/cmd/sequence.go +192 -0
  238. package/internal/config/config.go +187 -0
  239. package/internal/config/config_test.go +121 -0
  240. package/internal/config/profile.go +65 -0
  241. package/internal/linkedin/navigator.go +195 -0
  242. package/internal/linkedin/selectors.go +39 -0
  243. package/internal/linkedin/validator.go +69 -0
  244. package/internal/pinchtab/client.go +183 -0
  245. package/internal/pinchtab/client_test.go +67 -0
  246. package/internal/pinchtab/types.go +50 -0
  247. package/internal/ratelimit/limiter.go +115 -0
  248. package/internal/ratelimit/limits.go +32 -0
  249. package/package.json +67 -0
  250. package/release.sh +66 -0
  251. package/scripts/debug-linkedin.js +156 -0
  252. package/scripts/debug-login.js +193 -0
  253. package/scripts/extract-from-edge.js +96 -0
  254. package/scripts/import-cookies.js +101 -0
  255. package/scripts/poc-show-data.js +205 -0
  256. package/scripts/proof-of-access.js +87 -0
  257. package/scripts/prove-connection.js +110 -0
  258. package/scripts/show-linkedin-data.js +173 -0
  259. package/src/agent/action-executor.test.ts +464 -0
  260. package/src/agent/action-executor.ts +203 -0
  261. package/src/agent/claude-client.test.ts +707 -0
  262. package/src/agent/claude-client.ts +422 -0
  263. package/src/agent/dom-extractor.test.ts +574 -0
  264. package/src/agent/dom-extractor.ts +437 -0
  265. package/src/agent/extension-client.ts +306 -0
  266. package/src/agent/index.ts +28 -0
  267. package/src/agent/page-agent.ts +292 -0
  268. package/src/agent/types.ts +288 -0
  269. package/src/cli/agent-commands.ts +274 -0
  270. package/src/cli/auth.ts +343 -0
  271. package/src/cli/company.ts +66 -0
  272. package/src/cli/connection.ts +89 -0
  273. package/src/cli/index.ts +7 -0
  274. package/src/cli/messages.ts +338 -0
  275. package/src/cli/profile.test.ts +14 -0
  276. package/src/cli/profile.ts +95 -0
  277. package/src/cli/reply.ts +110 -0
  278. package/src/core/audit.test.ts +134 -0
  279. package/src/core/audit.ts +98 -0
  280. package/src/core/browser-cookies.ts +203 -0
  281. package/src/core/browser.ts +304 -0
  282. package/src/core/config.test.ts +90 -0
  283. package/src/core/config.ts +81 -0
  284. package/src/core/storage.test.ts +129 -0
  285. package/src/core/storage.ts +100 -0
  286. package/src/index.ts +70 -0
  287. package/src/linkedin/auth.ts +218 -0
  288. package/src/linkedin/company-extractor.test.ts +58 -0
  289. package/src/linkedin/company-extractor.ts +222 -0
  290. package/src/linkedin/connector.ts +336 -0
  291. package/src/linkedin/message-sender.ts +141 -0
  292. package/src/linkedin/messages.ts +894 -0
  293. package/src/linkedin/profile.test.ts +79 -0
  294. package/src/linkedin/profile.ts +314 -0
  295. package/src/linkedin/reply.ts +96 -0
  296. package/src/linkedin/selector-engine.test.ts +167 -0
  297. package/src/linkedin/selector-engine.ts +393 -0
  298. package/src/linkedin/selectors.ts +268 -0
  299. package/src/templates/defaults/followup.txt +14 -0
  300. package/src/templates/defaults/meeting.txt +16 -0
  301. package/src/templates/defaults/welcome.txt +14 -0
  302. package/src/templates/engine.test.ts +228 -0
  303. package/src/templates/engine.ts +208 -0
  304. package/src/templates/index.ts +1 -0
  305. package/src/types/index.test.ts +94 -0
  306. package/src/types/index.ts +143 -0
  307. package/src/types/sql.js.d.ts +23 -0
  308. package/src/utils/paths.ts +33 -0
  309. package/src/utils/rate-limiter.ts +75 -0
  310. package/src/utils/retry.ts +78 -0
  311. package/test-cli.sh +85 -0
  312. package/test-real-data.sh +97 -0
  313. package/tsconfig.json +23 -0
  314. package/vitest.config.ts +35 -0
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Agent Types Module
3
+ *
4
+ * Type definitions for the Page Agent system.
5
+ * Used for DOM-text based automation with Claude API integration.
6
+ */
7
+ /**
8
+ * Bounding box for an element's position and dimensions
9
+ */
10
+ export interface BoundingBox {
11
+ x: number;
12
+ y: number;
13
+ width: number;
14
+ height: number;
15
+ }
16
+ /**
17
+ * Represents a single DOM element extracted from the page
18
+ */
19
+ export interface DOMElement {
20
+ /** Unique identifier for the element within the page */
21
+ id: string;
22
+ /** HTML tag name (e.g., 'button', 'input', 'a') */
23
+ tag: string;
24
+ /** ARIA role if present (e.g., 'button', 'link', 'textbox') */
25
+ role?: string;
26
+ /** ARIA label if present */
27
+ ariaLabel?: string;
28
+ /** Visible text content of the element */
29
+ text: string;
30
+ /** Input type for form elements (e.g., 'text', 'email', 'password') */
31
+ type?: string;
32
+ /** Current value for input elements */
33
+ value?: string;
34
+ /** Whether the element is currently visible */
35
+ visible: boolean;
36
+ /** Whether the element is enabled (not disabled) */
37
+ enabled: boolean;
38
+ /** Bounding box for element location */
39
+ bbox: BoundingBox;
40
+ }
41
+ /**
42
+ * Page type classification for LinkedIn pages
43
+ */
44
+ export type PageType = 'profile' | 'search' | 'messaging' | 'notifications' | 'feed' | 'unknown';
45
+ /**
46
+ * Connection state for profile pages
47
+ */
48
+ export type ConnectionState = 'connected' | 'not_connected' | 'pending' | 'unknown';
49
+ /**
50
+ * Metadata extracted from the page
51
+ */
52
+ export interface PageMetadata {
53
+ /** Type of page detected */
54
+ pageType: PageType;
55
+ /** Name of the profile owner (if on a profile page) */
56
+ profileName?: string;
57
+ /** Title/headline of the profile (if on a profile page) */
58
+ profileTitle?: string;
59
+ /** Connection status with the profile owner */
60
+ connectionState?: ConnectionState;
61
+ /** Status messages or notifications displayed on the page */
62
+ statusMessages?: string[];
63
+ }
64
+ /**
65
+ * Complete DOM representation of a page
66
+ */
67
+ export interface DOMRepresentation {
68
+ /** Current page URL */
69
+ url: string;
70
+ /** Page title */
71
+ title: string;
72
+ /** Array of interactive elements */
73
+ elements: DOMElement[];
74
+ /** Extracted metadata about the page */
75
+ metadata: PageMetadata;
76
+ }
77
+ /**
78
+ * Base action interface
79
+ */
80
+ export interface BaseAction {
81
+ /** Human-readable description of what this action does */
82
+ description: string;
83
+ }
84
+ /**
85
+ * Click action - simulates a mouse click on an element
86
+ */
87
+ export interface ClickAction extends BaseAction {
88
+ type: 'click';
89
+ /** ID of the element to click (from DOMElement.id) */
90
+ elementId: string;
91
+ }
92
+ /**
93
+ * Type action - enters text into an input field
94
+ */
95
+ export interface TypeAction extends BaseAction {
96
+ type: 'type';
97
+ /** ID of the input element (from DOMElement.id) */
98
+ elementId: string;
99
+ /** Text to type into the element */
100
+ text: string;
101
+ }
102
+ /**
103
+ * Wait action - pauses execution for a specified duration
104
+ */
105
+ export interface WaitAction extends BaseAction {
106
+ type: 'wait';
107
+ /** Duration to wait in milliseconds */
108
+ durationMs: number;
109
+ }
110
+ /**
111
+ * Navigate action - navigates to a different URL
112
+ */
113
+ export interface NavigateAction extends BaseAction {
114
+ type: 'navigate';
115
+ /** URL to navigate to */
116
+ url: string;
117
+ }
118
+ /**
119
+ * Union type of all possible actions
120
+ */
121
+ export type Action = ClickAction | TypeAction | WaitAction | NavigateAction;
122
+ /**
123
+ * Type guard for ClickAction
124
+ */
125
+ export declare function isClickAction(action: Action): action is ClickAction;
126
+ /**
127
+ * Type guard for TypeAction
128
+ */
129
+ export declare function isTypeAction(action: Action): action is TypeAction;
130
+ /**
131
+ * Type guard for WaitAction
132
+ */
133
+ export declare function isWaitAction(action: Action): action is WaitAction;
134
+ /**
135
+ * Type guard for NavigateAction
136
+ */
137
+ export declare function isNavigateAction(action: Action): action is NavigateAction;
138
+ /**
139
+ * Status of an action plan execution
140
+ */
141
+ export type ActionPlanStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'cancelled';
142
+ /**
143
+ * Action plan generated by Claude for task execution
144
+ */
145
+ export interface ActionPlan {
146
+ /** Reasoning behind the planned actions */
147
+ reasoning: string;
148
+ /** Expected outcome after executing the actions */
149
+ expectedOutcome: string;
150
+ /** Sequence of actions to execute */
151
+ actions: Action[];
152
+ /** Current status of the plan */
153
+ status: ActionPlanStatus;
154
+ /** Error message if plan generation or execution failed */
155
+ error?: string;
156
+ }
157
+ /**
158
+ * Configuration for Claude API client
159
+ */
160
+ export interface ClaudeClientConfig {
161
+ /** Anthropic API key */
162
+ apiKey: string;
163
+ /** Base URL for API requests (optional, for custom endpoints) */
164
+ baseUrl?: string;
165
+ /** Claude model to use (e.g., 'claude-3-5-sonnet-20241022') */
166
+ model: string;
167
+ }
168
+ /**
169
+ * Task to be executed by the agent
170
+ */
171
+ export interface Task {
172
+ /** High-level goal to accomplish */
173
+ goal: string;
174
+ /** LinkedIn profile URL (if applicable) */
175
+ profileUrl?: string;
176
+ /** Optional note for connection requests */
177
+ note?: string;
178
+ /** Optional message to send */
179
+ message?: string;
180
+ }
181
+ /**
182
+ * Result of task execution
183
+ */
184
+ export interface TaskResult {
185
+ /** Whether the task was completed successfully */
186
+ success: boolean;
187
+ /** Human-readable message describing the outcome */
188
+ message: string;
189
+ /** List of actions that were executed */
190
+ actionsTaken: Action[];
191
+ /** Final URL after task completion */
192
+ finalUrl?: string;
193
+ }
194
+ /**
195
+ * Result of a connection request task
196
+ */
197
+ export interface ConnectionResult extends TaskResult {
198
+ /** Whether the connection request was sent */
199
+ sent: boolean;
200
+ /** Whether the request is pending approval */
201
+ pending: boolean;
202
+ /** Whether already connected to this user */
203
+ alreadyConnected?: boolean;
204
+ }
205
+ /**
206
+ * Result of a message sending task
207
+ */
208
+ export interface MessageResult extends TaskResult {
209
+ /** Whether the message was successfully sent */
210
+ sent: boolean;
211
+ }
212
+ /**
213
+ * Context for action execution
214
+ */
215
+ export interface ActionContext {
216
+ /** Actions that have already been executed */
217
+ previousActions: ExecutedAction[];
218
+ /** Original task goal */
219
+ goal: string;
220
+ /** Number of retry attempts for the current action */
221
+ retryCount: number;
222
+ }
223
+ /**
224
+ * Record of an executed action
225
+ */
226
+ export interface ExecutedAction {
227
+ /** The action that was executed */
228
+ action: Action;
229
+ /** Whether the action executed successfully */
230
+ success: boolean;
231
+ /** Timestamp when the action was executed */
232
+ timestamp: Date;
233
+ /** Error message if the action failed */
234
+ error?: string;
235
+ }
236
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * Agent Types Module
4
+ *
5
+ * Type definitions for the Page Agent system.
6
+ * Used for DOM-text based automation with Claude API integration.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.isClickAction = isClickAction;
10
+ exports.isTypeAction = isTypeAction;
11
+ exports.isWaitAction = isWaitAction;
12
+ exports.isNavigateAction = isNavigateAction;
13
+ /**
14
+ * Type guard for ClickAction
15
+ */
16
+ function isClickAction(action) {
17
+ return action.type === 'click';
18
+ }
19
+ /**
20
+ * Type guard for TypeAction
21
+ */
22
+ function isTypeAction(action) {
23
+ return action.type === 'type';
24
+ }
25
+ /**
26
+ * Type guard for WaitAction
27
+ */
28
+ function isWaitAction(action) {
29
+ return action.type === 'wait';
30
+ }
31
+ /**
32
+ * Type guard for NavigateAction
33
+ */
34
+ function isNavigateAction(action) {
35
+ return action.type === 'navigate';
36
+ }
37
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA4IH,sCAEC;AAKD,oCAEC;AAKD,oCAEC;AAKD,4CAEC;AA1BD;;GAEG;AACH,SAAgB,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;AACpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAgentCommands(program: Command): void;
3
+ //# sourceMappingURL=agent-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-commands.d.ts","sourceRoot":"","sources":["../../src/cli/agent-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+N5D"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerAgentCommands = registerAgentCommands;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const agent_1 = require("../agent");
9
+ const browser_1 = require("../core/browser");
10
+ const config_1 = require("../core/config");
11
+ // Constants
12
+ const DASHSCOPE_API_KEY_ENV = 'DASHSCOPE_API_KEY';
13
+ const LINKEDIN_URL_REGEX = /^https?:\/\/www\.linkedin\.com\/in\/[^\/]+\/?$/;
14
+ const DEFAULT_CLAUDE_CONFIG = {
15
+ baseUrl: 'https://coding.dashscope.aliyuncs.com/apps/anthropic/v1',
16
+ model: 'qwen3.5-plus',
17
+ };
18
+ /**
19
+ * Check if a CDP-enabled browser is available
20
+ * @returns true if browser is listening on localhost:9222
21
+ */
22
+ async function isCDPBrowserAvailable(port = 9222) {
23
+ try {
24
+ const response = await fetch(`http://localhost:${port}/json/version`, {
25
+ signal: AbortSignal.timeout(2000),
26
+ });
27
+ return response.ok;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ // Validation functions
34
+ function validateApiKey() {
35
+ const apiKey = process.env[DASHSCOPE_API_KEY_ENV];
36
+ if (!apiKey) {
37
+ console.error(chalk_1.default.red(`✗ ${DASHSCOPE_API_KEY_ENV} environment variable is required`));
38
+ console.log(chalk_1.default.gray('Set it with: export DASHSCOPE_API_KEY=your_key'));
39
+ return null;
40
+ }
41
+ return apiKey;
42
+ }
43
+ function validateLinkedInUrl(url) {
44
+ if (!LINKEDIN_URL_REGEX.test(url)) {
45
+ console.error(chalk_1.default.red('✗ Invalid profile URL'));
46
+ console.log(chalk_1.default.gray('Expected format: https://www.linkedin.com/in/username/'));
47
+ return false;
48
+ }
49
+ return true;
50
+ }
51
+ function registerAgentCommands(program) {
52
+ // Create agent subcommand
53
+ const agentCmd = program.command('agent').description('AI-powered LinkedIn automation');
54
+ // Connect command (auto-detects extension, falls back to Playwright)
55
+ agentCmd
56
+ .command('connect <url>')
57
+ .description('Send connection request (auto-detects fastest method)')
58
+ .option('--note <text>', 'Personal note')
59
+ .option('--debug', 'Enable debug output')
60
+ .option('--playwright', 'Force Playwright mode (ignore extension)')
61
+ .action(async (url, options) => {
62
+ // Validate API key and URL
63
+ const apiKey = validateApiKey();
64
+ if (!apiKey)
65
+ return;
66
+ if (!validateLinkedInUrl(url))
67
+ return;
68
+ const note = options.note || 'Hi, I would like to connect with you.';
69
+ // Check if CDP browser is available
70
+ if (!options.playwright && (await isCDPBrowserAvailable())) {
71
+ // Extension mode (fast)
72
+ console.log(chalk_1.default.blue('Using Page Agent Extension (fast mode)...'));
73
+ console.log(chalk_1.default.gray('Profile: ' + url));
74
+ try {
75
+ const extClient = new agent_1.PageAgentExtensionClient({
76
+ authToken: (0, agent_1.getAuthToken)(),
77
+ apiKey,
78
+ debug: options.debug,
79
+ });
80
+ const result = await extClient.connect(url, note);
81
+ if (result.success) {
82
+ console.log(chalk_1.default.green('✓ Connection request prepared!'));
83
+ console.log(chalk_1.default.gray(`Note: "${note}"`));
84
+ console.log(chalk_1.default.yellow('→ Ready for review - Send button NOT clicked'));
85
+ }
86
+ else {
87
+ console.error(chalk_1.default.red('✗ Failed: ' + result.message));
88
+ process.exit(1);
89
+ }
90
+ }
91
+ catch (error) {
92
+ console.error(chalk_1.default.red('✗ Extension mode failed:'), error instanceof Error ? error.message : error);
93
+ process.exit(1);
94
+ }
95
+ }
96
+ else {
97
+ // Playwright mode (fallback)
98
+ const modeReason = options.playwright
99
+ ? '--playwright flag specified'
100
+ : 'CDP browser not available';
101
+ console.log(chalk_1.default.blue(`Using Playwright Agent (${modeReason})...`));
102
+ console.log(chalk_1.default.gray('Profile: ' + url));
103
+ let browser = null;
104
+ try {
105
+ const config = (0, config_1.getConfig)();
106
+ browser = new browser_1.BrowserController({
107
+ headless: config.getValue('headless'),
108
+ debug: options.debug,
109
+ });
110
+ const page = await browser.launch();
111
+ const claudeConfig = {
112
+ apiKey,
113
+ ...DEFAULT_CLAUDE_CONFIG,
114
+ };
115
+ const agent = new agent_1.PageAgent({
116
+ claudeConfig,
117
+ debug: options.debug,
118
+ });
119
+ const result = await agent.connect(url, options.note, page);
120
+ if (result.sent) {
121
+ console.log(chalk_1.default.green('✓ Connection request sent!'));
122
+ }
123
+ else if (result.alreadyConnected) {
124
+ console.log(chalk_1.default.yellow('✓ Already connected'));
125
+ }
126
+ else {
127
+ console.error(chalk_1.default.red('✗ Failed: ' + result.message));
128
+ process.exit(1);
129
+ }
130
+ }
131
+ catch (error) {
132
+ console.error(chalk_1.default.red('✗ Playwright mode failed:'), error instanceof Error ? error.message : error);
133
+ process.exit(1);
134
+ }
135
+ finally {
136
+ if (browser) {
137
+ await browser.close();
138
+ }
139
+ }
140
+ }
141
+ });
142
+ // Message command
143
+ agentCmd
144
+ .command('message <url>')
145
+ .description('Send message using AI agent')
146
+ .requiredOption('--message <text>', 'Message to send')
147
+ .option('--debug', 'Enable debug output')
148
+ .action(async (url, options) => {
149
+ // Validate API key and URL
150
+ const apiKey = validateApiKey();
151
+ if (!apiKey)
152
+ return;
153
+ if (!validateLinkedInUrl(url))
154
+ return;
155
+ let browser = null;
156
+ try {
157
+ console.log(chalk_1.default.blue(`Preparing to send message to ${url} using AI agent...`));
158
+ // Launch browser
159
+ const config = (0, config_1.getConfig)();
160
+ browser = new browser_1.BrowserController({
161
+ headless: config.getValue('headless'),
162
+ debug: options.debug,
163
+ });
164
+ const page = await browser.launch();
165
+ // Create PageAgent with config
166
+ const claudeConfig = {
167
+ apiKey,
168
+ ...DEFAULT_CLAUDE_CONFIG,
169
+ };
170
+ const agent = new agent_1.PageAgent({
171
+ claudeConfig,
172
+ debug: options.debug,
173
+ });
174
+ // Call agent.sendMessage
175
+ const result = await agent.sendMessage(url, options.message, page);
176
+ // Print result
177
+ if (result.sent) {
178
+ console.log(chalk_1.default.green('✓ Message sent successfully!'));
179
+ console.log(chalk_1.default.gray(`Message: "${options.message}"`));
180
+ }
181
+ else {
182
+ console.error(chalk_1.default.red('✗ Failed to send message'));
183
+ console.error(chalk_1.default.gray(result.message));
184
+ }
185
+ }
186
+ catch (error) {
187
+ console.error(chalk_1.default.red('✗ Message failed:'), error instanceof Error ? error.message : error);
188
+ process.exit(1);
189
+ }
190
+ finally {
191
+ // Ensure browser closes
192
+ if (browser) {
193
+ await browser.close();
194
+ }
195
+ }
196
+ });
197
+ // Playwright command (explicit Playwright mode)
198
+ agentCmd
199
+ .command('playwright <url>')
200
+ .description('Send connection request using Playwright (slower, explicit)')
201
+ .option('--note <text>', 'Personal note')
202
+ .option('--debug', 'Enable debug output')
203
+ .action(async (url, options) => {
204
+ const apiKey = validateApiKey();
205
+ if (!apiKey)
206
+ return;
207
+ if (!validateLinkedInUrl(url))
208
+ return;
209
+ let browser = null;
210
+ try {
211
+ console.log(chalk_1.default.blue('Using Playwright Agent (explicit mode)...'));
212
+ console.log(chalk_1.default.gray('Profile: ' + url));
213
+ const config = (0, config_1.getConfig)();
214
+ browser = new browser_1.BrowserController({
215
+ headless: config.getValue('headless'),
216
+ debug: options.debug,
217
+ });
218
+ const page = await browser.launch();
219
+ const claudeConfig = {
220
+ apiKey,
221
+ ...DEFAULT_CLAUDE_CONFIG,
222
+ };
223
+ const agent = new agent_1.PageAgent({
224
+ claudeConfig,
225
+ debug: options.debug,
226
+ });
227
+ const result = await agent.connect(url, options.note, page);
228
+ if (result.sent) {
229
+ console.log(chalk_1.default.green('✓ Connection request sent!'));
230
+ }
231
+ else if (result.alreadyConnected) {
232
+ console.log(chalk_1.default.yellow('✓ Already connected'));
233
+ }
234
+ else {
235
+ console.error(chalk_1.default.red('✗ Failed: ' + result.message));
236
+ process.exit(1);
237
+ }
238
+ }
239
+ catch (error) {
240
+ console.error(chalk_1.default.red('✗ Failed:'), error instanceof Error ? error.message : error);
241
+ process.exit(1);
242
+ }
243
+ finally {
244
+ if (browser) {
245
+ await browser.close();
246
+ }
247
+ }
248
+ });
249
+ }
250
+ //# sourceMappingURL=agent-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-commands.js","sourceRoot":"","sources":["../../src/cli/agent-commands.ts"],"names":[],"mappings":";;;;;AAkDA,sDA+NC;AAhRD,kDAA0B;AAC1B,oCAA6E;AAC7E,6CAAoD;AACpD,2CAA2C;AAG3C,YAAY;AACZ,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,kBAAkB,GAAG,gDAAgD,CAAC;AAC5E,MAAM,qBAAqB,GAAG;IAC5B,OAAO,EAAE,yDAAyD;IAClE,KAAK,EAAE,cAAc;CACtB,CAAC;AAEF;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAAC,IAAI,GAAG,IAAI;IAC9C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,eAAe,EAAE;YACpE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,uBAAuB;AACvB,SAAS,cAAc;IACrB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,qBAAqB,mCAAmC,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;IAExF,qEAAqE;IACrE,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC;SACxC,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;SACxC,MAAM,CAAC,cAAc,EAAE,0CAA0C,CAAC;SAClE,MAAM,CACL,KAAK,EAAE,GAAW,EAAE,OAAiE,EAAE,EAAE;QACvF,2BAA2B;QAC3B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAAE,OAAO;QAEtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,uCAAuC,CAAC;QAErE,oCAAoC;QACpC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,MAAM,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3D,wBAAwB;YACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;YAE3C,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,gCAAwB,CAAC;oBAC7C,SAAS,EAAE,IAAA,oBAAY,GAAE;oBACzB,MAAM;oBACN,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAElD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;oBAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;oBACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EACrC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;gBACnC,CAAC,CAAC,6BAA6B;gBAC/B,CAAC,CAAC,2BAA2B,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,UAAU,MAAM,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;YAE3C,IAAI,OAAO,GAA6B,IAAI,CAAC;YAE7C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;gBAC3B,OAAO,GAAG,IAAI,2BAAiB,CAAC;oBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACrC,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;gBAEpC,MAAM,YAAY,GAAuB;oBACvC,MAAM;oBACN,GAAG,qBAAqB;iBACzB,CAAC;gBAEF,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC;oBAC1B,YAAY;oBACZ,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE5D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;oBACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,EACtC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,kBAAkB;IAClB,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,cAAc,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;SACrD,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAA6C,EAAE,EAAE;QAC3E,2BAA2B;QAC3B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAAE,OAAO;QAEtC,IAAI,OAAO,GAA6B,IAAI,CAAC;QAE7C,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,GAAG,oBAAoB,CAAC,CAAC,CAAC;YAEjF,iBAAiB;YACjB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;YAC3B,OAAO,GAAG,IAAI,2BAAiB,CAAC;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACrC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YAEpC,+BAA+B;YAC/B,MAAM,YAAY,GAAuB;gBACvC,MAAM;gBACN,GAAG,qBAAqB;aACzB,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC;gBAC1B,YAAY;gBACZ,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,yBAAyB;YACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEnE,eAAe;YACf,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAC9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;gBAAS,CAAC;YACT,wBAAwB;YACxB,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,gDAAgD;IAChD,QAAQ;SACL,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC;SACxC,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAA2C,EAAE,EAAE;QACzE,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAAE,OAAO;QAEtC,IAAI,OAAO,GAA6B,IAAI,CAAC;QAE7C,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;YAE3C,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;YAC3B,OAAO,GAAG,IAAI,2BAAiB,CAAC;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACrC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YAEpC,MAAM,YAAY,GAAuB;gBACvC,MAAM;gBACN,GAAG,qBAAqB;aACzB,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC;gBAC1B,YAAY;gBACZ,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE5D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;gBAAS,CAAC;YACT,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAuthCommands(program: Command): void;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0U3D"}