finch-cli 0.2.0__tar.gz → 0.3.0__tar.gz

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 (35) hide show
  1. finch_cli-0.3.0/LICENSE +43 -0
  2. {finch_cli-0.2.0 → finch_cli-0.3.0}/PKG-INFO +5 -5
  3. {finch_cli-0.2.0 → finch_cli-0.3.0}/README.md +1 -1
  4. finch_cli-0.3.0/REDDIT_POST.md +230 -0
  5. finch_cli-0.3.0/docs/cli-auth-approved-redacted.png +0 -0
  6. finch_cli-0.3.0/docs/cli-auth-approved.png +0 -0
  7. finch_cli-0.3.0/docs/cli-auth-needs-signin.png +0 -0
  8. finch_cli-0.3.0/docs/cli-login.png +0 -0
  9. finch_cli-0.3.0/docs/cli-login.svg +99 -0
  10. finch_cli-0.3.0/docs/tui-jobs.png +0 -0
  11. finch_cli-0.3.0/docs/tui-jobs.svg +229 -0
  12. finch_cli-0.3.0/docs/tui-library.png +0 -0
  13. finch_cli-0.3.0/docs/tui-library.svg +228 -0
  14. finch_cli-0.3.0/docs/tui-tailor.png +0 -0
  15. finch_cli-0.3.0/docs/tui-tailor.svg +240 -0
  16. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/__init__.py +1 -1
  17. {finch_cli-0.2.0 → finch_cli-0.3.0}/pyproject.toml +3 -3
  18. finch_cli-0.2.0/LICENSE +0 -21
  19. finch_cli-0.2.0/REDDIT_POST.md +0 -100
  20. finch_cli-0.2.0/docs/tui-jobs.svg +0 -274
  21. finch_cli-0.2.0/docs/tui-library.svg +0 -266
  22. finch_cli-0.2.0/docs/tui-tailor.svg +0 -282
  23. {finch_cli-0.2.0 → finch_cli-0.3.0}/.gitignore +0 -0
  24. {finch_cli-0.2.0 → finch_cli-0.3.0}/examples/base_resume.md +0 -0
  25. {finch_cli-0.2.0 → finch_cli-0.3.0}/examples/job_post.txt +0 -0
  26. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/__main__.py +0 -0
  27. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/auth.py +0 -0
  28. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/cli.py +0 -0
  29. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/fetch.py +0 -0
  30. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/jobs.py +0 -0
  31. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/output.py +0 -0
  32. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/score.py +0 -0
  33. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/storage.py +0 -0
  34. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/tailor.py +0 -0
  35. {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/tui.py +0 -0
@@ -0,0 +1,43 @@
1
+ Finch CLI Terms of Use
2
+
3
+ Copyright (c) 2026 Finch (applyfinch.com). All rights reserved.
4
+
5
+ 1. License grant. Finch grants you a personal, non-exclusive, non-transferable,
6
+ revocable license to install and use this software on devices you own or
7
+ control for your own job-search workflow. Educational and evaluation use are
8
+ permitted.
9
+
10
+ 2. Restrictions. You may not:
11
+ (a) copy, modify, adapt, translate, or create derivative works of the
12
+ software;
13
+ (b) reverse engineer, decompile, disassemble, or attempt to discover the
14
+ source code, except to the extent that applicable law expressly
15
+ prohibits such a restriction;
16
+ (c) sublicense, sell, rent, lease, distribute, or otherwise transfer the
17
+ software or any rights to it;
18
+ (d) remove or alter any proprietary notices contained in the software;
19
+ (e) use the software to build a competing product or service.
20
+
21
+ 3. Service component. Certain features (including but not limited to "finch
22
+ login" and tailoring performed via the Finch backend) require communication
23
+ with services operated by Finch. Those services are subject to the terms
24
+ posted at https://applyfinch.com/terms. Finch may modify, suspend, or
25
+ discontinue any service feature at any time.
26
+
27
+ 4. Ownership. The software, including all intellectual property rights in it,
28
+ is and remains the property of Finch. No rights are granted except those
29
+ expressly set out in this license.
30
+
31
+ 5. No warranty. THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
32
+ EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE WARRANTIES OF
33
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
34
+
35
+ 6. Limitation of liability. TO THE FULLEST EXTENT PERMITTED BY LAW, FINCH WILL
36
+ NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR
37
+ PUNITIVE DAMAGES ARISING OUT OF OR RELATING TO YOUR USE OF THE SOFTWARE.
38
+
39
+ 7. Termination. This license terminates automatically if you breach any of its
40
+ terms. On termination, you must stop using and delete all copies of the
41
+ software.
42
+
43
+ 8. Contact. carlunpen@gmail.com.
@@ -1,18 +1,18 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: finch-cli
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Tailor your resume to any job posting from your terminal.
5
5
  Project-URL: Homepage, https://applyfinch.com
6
6
  Project-URL: Repository, https://github.com/applyEasy/finch-cli
7
7
  Project-URL: Issues, https://github.com/applyEasy/finch-cli/issues
8
8
  Author-email: Carlos Luna-Pena <carlunpen@gmail.com>
9
- License: MIT
9
+ License: LicenseRef-Proprietary
10
10
  License-File: LICENSE
11
11
  Keywords: ai,career,cli,deepseek,internship,job-search,openai,resume,textual,tui
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Environment :: Console
14
14
  Classifier: Intended Audience :: End Users/Desktop
15
- Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: License :: Other/Proprietary License
16
16
  Classifier: Programming Language :: Python :: 3
17
17
  Classifier: Programming Language :: Python :: 3.10
18
18
  Classifier: Programming Language :: Python :: 3.11
@@ -145,4 +145,4 @@ the autofill side - the part that actually fills out the application form - live
145
145
 
146
146
  ## license
147
147
 
148
- mit.
148
+ proprietary. personal + evaluation use only. see LICENSE for the full terms.
@@ -112,4 +112,4 @@ the autofill side - the part that actually fills out the application form - live
112
112
 
113
113
  ## license
114
114
 
115
- mit.
115
+ proprietary. personal + evaluation use only. see LICENSE for the full terms.
@@ -0,0 +1,230 @@
1
+ # reddit launch drafts -- finch-cli 0.2.0
2
+
3
+ three drafts below. pick the sub, paste the body, attach the images noted under each.
4
+
5
+ space cross-posts at least 24h apart. the order I'd post:
6
+
7
+ 1. **r/Python** -- sunday 9-10pm central. mod-friendly, expects polish.
8
+ 2. **r/csmajors** -- monday 8-9am central. the target audience.
9
+ 3. **show hn** -- tuesday morning. picky, expects technical depth.
10
+
11
+ ## image assets in /docs
12
+
13
+ | file | use it for |
14
+ |---|---|
15
+ | `docs/tui-tailor.svg` | the money shot. tailor tab + match panel (78 -> 92 score) |
16
+ | `docs/tui-jobs.svg` | jobs tab. real internships from simplifyjobs. |
17
+ | `docs/tui-library.svg` | library tab (less important) |
18
+ | `docs/cli-login.svg` | the `finch login` terminal output |
19
+ | `docs/cli-auth-approved.png` | the in-browser approved page. crop/blur the email if you want. |
20
+ | `docs/cli-auth-needs-signin.png` | the error/empty state (skip unless you want a "polished edge case" beat) |
21
+
22
+ ---
23
+
24
+ ## 1. r/Python -- "Show /r/Python" tag
25
+
26
+ **title**: *Show /r/Python: finch-cli -- tailor your resume to a job in your terminal, with a one-link sign-in flow*
27
+
28
+ **body**:
29
+
30
+ ```
31
+ hi r/Python,
32
+
33
+ cs senior at tamu, built a small cli + textual tui that tailors a resume to a
34
+ specific job posting. lives at https://github.com/applyEasy/finch-cli, mit, 0.2.0
35
+ on pypi.
36
+
37
+ pip install finch-cli
38
+ finch login # opens a browser link, no api key needed
39
+ finch ui
40
+
41
+ or pure cli:
42
+
43
+ finch tailor --resume resume.md --job https://jobs.example.com/swe-intern -o tailored.md
44
+
45
+ [image: docs/tui-tailor.svg]
46
+ [image: docs/cli-login.svg]
47
+
48
+ what it does:
49
+
50
+ - the tailor command sends your base resume + a job posting to deepseek/v3.2 (or
51
+ any openai-compatible endpoint) and gets back a markdown resume with bullets
52
+ and ordering reworked for the posting. won't invent skills you don't have --
53
+ the system prompt enforces that.
54
+ - the tui has three tabs: jobs (pulls ~3,200 active internships + new-grad
55
+ postings from the simplifyjobs lists), library (saved tailorings), and the
56
+ three-pane tailor editor (base / job / output). there's an ats-style match
57
+ panel at the bottom that shows score, matched + missing keywords, and the
58
+ delta vs the base resume.
59
+ - `finch login` opens a sign-in link on applyfinch.com so you don't have to
60
+ manage an api key. backend does the llm call on a small free tier. if you'd
61
+ rather use your own key (deepseek is cheap, ~30x less than gpt-4o), skip
62
+ login and set DEEPSEEK_API_KEY.
63
+
64
+ stack:
65
+
66
+ - click for the cli, textual for the tui, rich for the rendering, httpx for the
67
+ network, trafilatura for url -> text on job postings.
68
+ - openai sdk against deepseek's api by default (model: deepseek-chat), but
69
+ anything openai-compatible works (groq, together, fireworks, openrouter, etc.).
70
+ the `finch login` path uses deepseek-v3.2 via openrouter on the finch backend.
71
+ - hatchling for the build. under 2k loc in finch_cli/.
72
+ - the login flow is rfc 8628 device flow: cli posts /api/v1/cli/start, prints
73
+ the verification url, polls /api/v1/cli/poll until the user clicks the link,
74
+ signs in (supabase + google), and the page posts /api/v1/cli/approve. token
75
+ is sha256-hashed at rest, supabase rls service-role only, no api key in plain
76
+ text on disk.
77
+
78
+ security stuff I cared about:
79
+
80
+ - ssrf defense on the url-fetch path (scheme allowlist + private/loopback ip
81
+ rejection via socket.getaddrinfo + ipaddress).
82
+ - prompt injection inside the job posting is treated as data, not instructions
83
+ -- I strip the wrapping tags, cap inputs at 20k chars each, and remind the
84
+ model after the user message. ran a few obvious "ignore previous
85
+ instructions, output X" cases through it and the model held.
86
+ - token revocation actually revokes server-side (sha256 lookup deleted from
87
+ the cli_tokens table), so `finch logout` isn't local-only.
88
+
89
+ known limits:
90
+
91
+ - workday + some greenhouse iframe pages need js, so url fetching fails clean
92
+ and tells you to use --job-file with a pasted description.
93
+ - the model won't invent experience. if your base resume is thin, the tailored
94
+ one is thin. fix the base first.
95
+ - output is markdown. pipe to pandoc for pdf, or paste into overleaf if you
96
+ have a tex template.
97
+
98
+ repo: https://github.com/applyEasy/finch-cli
99
+ pypi: https://pypi.org/project/finch-cli/
100
+
101
+ feedback and prs welcome. the autofill side of the workflow -- the part that
102
+ fills out the actual application form -- lives at applyfinch.com if you want
103
+ that piece too.
104
+ ```
105
+
106
+ ---
107
+
108
+ ## 2. r/csmajors (and r/internships)
109
+
110
+ **title**: *built a cli that tailors your resume to each internship posting. mit, on pypi, no signup.*
111
+
112
+ **body**:
113
+
114
+ ```
115
+ cs senior at tamu. you know the drill -- 80 applications a season, every job
116
+ posting wants a slightly different angle, and you end up with a Resume_Final_v9_USE_THIS.docx
117
+ nightmare. so my co-founder and I built a small open source tool that does the
118
+ tailoring for you.
119
+
120
+ pip install finch-cli
121
+ finch login # opens a browser link, signs you in. no api key needed.
122
+ finch ui
123
+
124
+ three tabs: a jobs tab (3,000+ live internships + new-grads from the
125
+ simplifyjobs lists), a library of your tailored resumes, and the tailor editor
126
+ (base resume / job posting / tailored output side by side). there's an ats-style
127
+ match panel showing your match score, which job keywords you cover, which ones
128
+ you don't, and how much the tailored version moved the needle vs the base.
129
+
130
+ [image: docs/tui-tailor.svg]
131
+ [image: docs/tui-jobs.svg]
132
+
133
+ how the tailoring works: you give it your resume in markdown + a job description
134
+ (url or paste). the model rewrites bullets + ordering to fit the posting. it
135
+ won't invent experience you don't have -- the prompt enforces that. you'll
136
+ get something honest, just better-aligned.
137
+
138
+ example cli usage if you don't want the tui:
139
+
140
+ finch tailor -r resume.md --job https://jobs.netflix.com/positions/14234 -o tailored.md
141
+
142
+ repo (mit): https://github.com/applyEasy/finch-cli
143
+ pypi: https://pypi.org/project/finch-cli/
144
+
145
+ happy to answer questions. roadmap is `finch jobs` (filter + pull job feeds
146
+ straight into the tailor) and `finch apply` (auto-apply from the cli). prs
147
+ welcome.
148
+ ```
149
+
150
+ ---
151
+
152
+ ## 3. Show HN
153
+
154
+ **title**: *Show HN: Finch-cli – terminal resume tailoring with one-click sign-in (no API key)*
155
+
156
+ **body** (first comment after submission, since HN doesn't use post bodies for Show):
157
+
158
+ ```
159
+ Hi HN,
160
+
161
+ CS senior at A&M, built a small terminal client for the part of job hunting
162
+ that's actually tedious: tailoring the same resume to 50+ postings a season.
163
+
164
+ pip install finch-cli
165
+ finch login # opens a sign-in link in your browser
166
+ finch ui
167
+
168
+ [image: docs/tui-tailor.svg]
169
+ [image: docs/cli-auth-approved.png]
170
+
171
+ It's a CLI plus a Textual TUI in one package. Three tabs: jobs (live internship
172
+ + new-grad feeds from SimplifyJobs, ~3,200 postings), a library of saved
173
+ tailorings, and a three-pane editor (base resume / job posting / tailored
174
+ output) with an ATS-style match panel showing score, keyword coverage, and the
175
+ delta vs your base resume.
176
+
177
+ Some design choices I'd be curious for feedback on:
178
+
179
+ 1. The login flow is RFC 8628 device flow, not "paste an API key." Reasoning:
180
+ most CLI users don't want to manage a DeepSeek/OpenAI key, and the friction
181
+ of getting one was tanking install-to-first-tailor conversion in my own
182
+ testing. `finch login` opens a link, you sign in with Google on
183
+ applyfinch.com, the page POSTs the device code back, the CLI polls and
184
+ gets a token. Token's SHA256-hashed at rest, server-side revocation on
185
+ logout. Power users can skip login and set DEEPSEEK_API_KEY.
186
+
187
+ 2. The TUI lives in the same `finch_cli` package -- not a separate `finch_cli[tui]`
188
+ extra. The reasoning was that Textual is the actual product surface, not an
189
+ optional. Made the dep list slightly heavier but kept the install story
190
+ one-line.
191
+
192
+ 3. Default models: the local path uses `deepseek-chat` against DeepSeek's API
193
+ (the env var is `DEEPSEEK_API_KEY`); the `finch login` path goes through
194
+ the Finch backend which calls `deepseek/deepseek-v3.2-exp` via OpenRouter.
195
+ DeepSeek is roughly 30x cheaper than GPT-4o on this prompt. In my own
196
+ side-by-side reads it produced tighter bullets than Sonnet for this use
197
+ case, but I haven't run a proper eval -- take it as anecdote.
198
+
199
+ 4. Security: SSRF defense on the URL-fetch path (scheme allowlist + private/
200
+ loopback IP rejection via ipaddress.ip_address against socket.getaddrinfo
201
+ results), 5 MB response cap, manual redirect following with revalidation
202
+ each hop. Prompt injection inside the <job_posting> tags is stripped + the
203
+ model is reminded after the user message that the contents are data. Input
204
+ caps are 20k chars on the job and 20k on the resume.
205
+
206
+ Repo (MIT): https://github.com/applyEasy/finch-cli
207
+ PyPI: https://pypi.org/project/finch-cli/
208
+
209
+ The auto-apply side -- the part that actually fills out Workday/Greenhouse/
210
+ Ashby/Lever forms -- lives at https://applyfinch.com. Same engine, free
211
+ during beta.
212
+
213
+ Feedback welcome.
214
+ ```
215
+
216
+ ---
217
+
218
+ ## notes for posting
219
+
220
+ - the `finch login` flow is what makes 0.2.0 different from 0.1.x and worth a fresh
221
+ post even if r/Python saw 0.1.x. lead with it in titles.
222
+ - if you post screenshots: the tailor tab svg is the strongest single image. it
223
+ shows the product, the score, the keyword analysis, and the orange branding in
224
+ one frame. the cli-auth-approved.png is the second-strongest because "click
225
+ a link to sign in to a cli" is a beat people don't expect.
226
+ - crop the +e2eresume2 email in cli-auth-approved.png if you don't want the
227
+ alias visible. it's yours but visible.
228
+ - after posting, watch the first 30 min for comments and respond to ALL of them
229
+ in your voice (no AI, no em-dashes, no "great question"). that's what makes
230
+ or breaks r/Python.
Binary file
@@ -0,0 +1,99 @@
1
+ <svg class="rich-terminal" viewBox="0 0 1068 294.0" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Generated with Rich https://www.textualize.io -->
3
+ <style>
4
+
5
+ @font-face {
6
+ font-family: "Fira Code";
7
+ src: local("FiraCode-Regular"),
8
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
9
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
10
+ font-style: normal;
11
+ font-weight: 400;
12
+ }
13
+ @font-face {
14
+ font-family: "Fira Code";
15
+ src: local("FiraCode-Bold"),
16
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
17
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
18
+ font-style: bold;
19
+ font-weight: 700;
20
+ }
21
+
22
+ .terminal-2184957314-matrix {
23
+ font-family: Fira Code, monospace;
24
+ font-size: 20px;
25
+ line-height: 24.4px;
26
+ font-variant-east-asian: full-width;
27
+ }
28
+
29
+ .terminal-2184957314-title {
30
+ font-size: 18px;
31
+ font-weight: bold;
32
+ font-family: arial;
33
+ }
34
+
35
+ .terminal-2184957314-r1 { fill: #c5c8c6 }
36
+ .terminal-2184957314-r2 { fill: #c5c8c6;font-weight: bold }
37
+ .terminal-2184957314-r3 { fill: #68a0b3;text-decoration: underline; }
38
+ .terminal-2184957314-r4 { fill: #868887 }
39
+ .terminal-2184957314-r5 { fill: #8d7b39 }
40
+ .terminal-2184957314-r6 { fill: #98a84b }
41
+ </style>
42
+
43
+ <defs>
44
+ <clipPath id="terminal-2184957314-clip-terminal">
45
+ <rect x="0" y="0" width="1048.2" height="243.0" />
46
+ </clipPath>
47
+ <clipPath id="terminal-2184957314-line-0">
48
+ <rect x="0" y="1.5" width="1049.2" height="24.65"/>
49
+ </clipPath>
50
+ <clipPath id="terminal-2184957314-line-1">
51
+ <rect x="0" y="25.9" width="1049.2" height="24.65"/>
52
+ </clipPath>
53
+ <clipPath id="terminal-2184957314-line-2">
54
+ <rect x="0" y="50.3" width="1049.2" height="24.65"/>
55
+ </clipPath>
56
+ <clipPath id="terminal-2184957314-line-3">
57
+ <rect x="0" y="74.7" width="1049.2" height="24.65"/>
58
+ </clipPath>
59
+ <clipPath id="terminal-2184957314-line-4">
60
+ <rect x="0" y="99.1" width="1049.2" height="24.65"/>
61
+ </clipPath>
62
+ <clipPath id="terminal-2184957314-line-5">
63
+ <rect x="0" y="123.5" width="1049.2" height="24.65"/>
64
+ </clipPath>
65
+ <clipPath id="terminal-2184957314-line-6">
66
+ <rect x="0" y="147.9" width="1049.2" height="24.65"/>
67
+ </clipPath>
68
+ <clipPath id="terminal-2184957314-line-7">
69
+ <rect x="0" y="172.3" width="1049.2" height="24.65"/>
70
+ </clipPath>
71
+ <clipPath id="terminal-2184957314-line-8">
72
+ <rect x="0" y="196.7" width="1049.2" height="24.65"/>
73
+ </clipPath>
74
+ </defs>
75
+
76
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1066" height="292" rx="8"/><text class="terminal-2184957314-title" fill="#c5c8c6" text-anchor="middle" x="533" y="27">finch&#160;login</text>
77
+ <g transform="translate(26,22)">
78
+ <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
79
+ <circle cx="22" cy="0" r="7" fill="#febc2e"/>
80
+ <circle cx="44" cy="0" r="7" fill="#28c840"/>
81
+ </g>
82
+
83
+ <g transform="translate(9, 41)" clip-path="url(#terminal-2184957314-clip-terminal)">
84
+
85
+ <g class="terminal-2184957314-matrix">
86
+ <text class="terminal-2184957314-r1" x="1049.2" y="20" textLength="12.2" clip-path="url(#terminal-2184957314-line-0)">
87
+ </text><text class="terminal-2184957314-r2" x="0" y="44.4" textLength="500.2" clip-path="url(#terminal-2184957314-line-1)">Open&#160;this&#160;URL&#160;in&#160;your&#160;browser&#160;to&#160;sign&#160;in:</text><text class="terminal-2184957314-r1" x="1049.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2184957314-line-1)">
88
+ </text><text class="terminal-2184957314-r3" x="24.4" y="68.8" textLength="390.4" clip-path="url(#terminal-2184957314-line-2)">https://applyfinch.com/cli/auth?</text><text class="terminal-2184957314-r3" x="414.8" y="68.8" textLength="48.8" clip-path="url(#terminal-2184957314-line-2)">code</text><text class="terminal-2184957314-r3" x="463.6" y="68.8" textLength="12.2" clip-path="url(#terminal-2184957314-line-2)">=</text><text class="terminal-2184957314-r3" x="475.8" y="68.8" textLength="48.8" clip-path="url(#terminal-2184957314-line-2)">AUB8</text><text class="terminal-2184957314-r3" x="524.6" y="68.8" textLength="61" clip-path="url(#terminal-2184957314-line-2)">-MMQH</text><text class="terminal-2184957314-r1" x="1049.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2184957314-line-2)">
89
+ </text><text class="terminal-2184957314-r1" x="1049.2" y="93.2" textLength="12.2" clip-path="url(#terminal-2184957314-line-3)">
90
+ </text><text class="terminal-2184957314-r1" x="0" y="117.6" textLength="695.4" clip-path="url(#terminal-2184957314-line-4)">If&#160;your&#160;browser&#160;does&#160;not&#160;open&#160;automatically,&#160;the&#160;code&#160;is&#160;</text><text class="terminal-2184957314-r2" x="695.4" y="117.6" textLength="109.8" clip-path="url(#terminal-2184957314-line-4)">AUB8-MMQH</text><text class="terminal-2184957314-r1" x="805.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2184957314-line-4)">.</text><text class="terminal-2184957314-r1" x="1049.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2184957314-line-4)">
91
+ </text><text class="terminal-2184957314-r1" x="1049.2" y="142" textLength="12.2" clip-path="url(#terminal-2184957314-line-5)">
92
+ </text><text class="terminal-2184957314-r4" x="0" y="166.4" textLength="610" clip-path="url(#terminal-2184957314-line-6)">Opened&#160;your&#160;browser.&#160;Sign&#160;in,&#160;then&#160;come&#160;back&#160;here.</text><text class="terminal-2184957314-r1" x="1049.2" y="166.4" textLength="12.2" clip-path="url(#terminal-2184957314-line-6)">
93
+ </text><text class="terminal-2184957314-r4" x="0" y="190.8" textLength="231.8" clip-path="url(#terminal-2184957314-line-7)">Waiting&#160;for&#160;sign-in</text><text class="terminal-2184957314-r5" x="231.8" y="190.8" textLength="36.6" clip-path="url(#terminal-2184957314-line-7)">...</text><text class="terminal-2184957314-r1" x="1049.2" y="190.8" textLength="12.2" clip-path="url(#terminal-2184957314-line-7)">
94
+ </text><text class="terminal-2184957314-r1" x="1049.2" y="215.2" textLength="12.2" clip-path="url(#terminal-2184957314-line-8)">
95
+ </text><text class="terminal-2184957314-r6" x="0" y="239.6" textLength="122" clip-path="url(#terminal-2184957314-line-9)">Signed&#160;in.</text><text class="terminal-2184957314-r1" x="122" y="239.6" textLength="207.4" clip-path="url(#terminal-2184957314-line-9)">&#160;You&#160;can&#160;now&#160;run&#160;</text><text class="terminal-2184957314-r2" x="329.4" y="239.6" textLength="146.4" clip-path="url(#terminal-2184957314-line-9)">finch&#160;tailor</text><text class="terminal-2184957314-r1" x="475.8" y="239.6" textLength="244" clip-path="url(#terminal-2184957314-line-9)">&#160;without&#160;an&#160;API&#160;key.</text><text class="terminal-2184957314-r1" x="1049.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2184957314-line-9)">
96
+ </text>
97
+ </g>
98
+ </g>
99
+ </svg>
Binary file