cue-ai 0.9.1 → 0.9.2

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 (27) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +38 -0
  3. package/bin/cue-review-progress +107 -0
  4. package/bin/cue-review-watch +98 -0
  5. package/package.json +2 -1
  6. package/profiles/career/profile.yaml +13 -2
  7. package/profiles/core/profile.yaml +8 -0
  8. package/profiles/eu-tender-research/README.md +48 -0
  9. package/profiles/eu-tender-research/logo.png +0 -0
  10. package/profiles/eu-tender-research/profile.yaml +108 -0
  11. package/profiles/gstack/profile.yaml +2 -0
  12. package/profiles/skill-writer/profile.yaml +4 -0
  13. package/profiles/x-growth-bot/profile.yaml +0 -2
  14. package/resources/icons/generate-icons.py +128 -2
  15. package/resources/mcps/configs/claude.sanitized.json +17 -0
  16. package/resources/skills/skills/career/resume-version-manager/SKILL.md +351 -0
  17. package/resources/skills/skills/career/salary-negotiation-prep/SKILL.md +378 -0
  18. package/resources/skills/skills/eu-funding/grant-outreach/SKILL.md +70 -0
  19. package/resources/skills/skills/eu-funding/hu-grant-finder/SKILL.md +114 -0
  20. package/resources/skills/skills/eu-funding/hu-grant-finder/evals.md +26 -0
  21. package/resources/skills/skills/eu-funding/ted-tender-search/SKILL.md +80 -0
  22. package/resources/skills/skills/eu-funding/ted-tender-search/evals.md +26 -0
  23. package/resources/skills/skills/eu-funding/ted-tender-search/scripts/ted-search.sh +46 -0
  24. package/resources/skills/skills/github/gx-agents/SKILL.md +96 -0
  25. package/resources/skills/skills/meta/focus/SKILL.md +62 -0
  26. package/resources/skills/skills/tools/portless/SKILL.md +186 -0
  27. package/src/lib/analytics.ts +13 -1
@@ -17,19 +17,145 @@ Sources:
17
17
 
18
18
  import io
19
19
  import os
20
+ import re
21
+ import shutil
22
+ import subprocess
20
23
  import sys
24
+ import tempfile
21
25
  import urllib.request
22
26
 
23
27
  try:
24
- import cairosvg
25
28
  from PIL import Image
26
29
  except ImportError:
27
30
  print("Missing deps. Run with: uv run --with Pillow --with cairosvg python3 generate-icons.py")
28
31
  sys.exit(1)
29
32
 
33
+ # cairosvg is the primary rasterizer but optional: if it (or its native
34
+ # libcairo) is unavailable, rasterize() falls back to a headless browser,
35
+ # then ImageMagick. So a broken libcairo no longer blocks icon generation.
36
+ try:
37
+ import cairosvg
38
+ except Exception: # ImportError, or OSError when libcairo can't be loaded
39
+ cairosvg = None
40
+
30
41
  SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
31
42
  SIZE = 64
32
43
 
44
+
45
+ def _sized_svg(svg_content: str, size: int) -> str:
46
+ """Force explicit width/height on the root <svg> so browsers/IM render at `size`."""
47
+ # Drop any existing width/height on the opening tag, then inject our own.
48
+ def fix(m: re.Match) -> str:
49
+ tag = re.sub(r'\s(width|height)="[^"]*"', "", m.group(0))
50
+ return tag[:-1] + f' width="{size}" height="{size}">'
51
+
52
+ return re.sub(r"<svg\b[^>]*>", fix, svg_content, count=1)
53
+
54
+
55
+ def _rasterize_rsvg(svg_content: str, size: int) -> bytes | None:
56
+ """Render via librsvg's rsvg-convert. Fast, accurate, no browser needed."""
57
+ rsvg = shutil.which("rsvg-convert")
58
+ if not rsvg:
59
+ return None
60
+ try:
61
+ res = subprocess.run(
62
+ [rsvg, "-w", str(size), "-h", str(size), "-f", "png"],
63
+ input=svg_content.encode(),
64
+ capture_output=True,
65
+ timeout=30,
66
+ check=False,
67
+ )
68
+ except Exception:
69
+ return None
70
+ return res.stdout if res.returncode == 0 and res.stdout else None
71
+
72
+
73
+ def _rasterize_chrome(svg_content: str, size: int) -> bytes | None:
74
+ """Render via headless Chrome. Returns PNG bytes or None if unavailable."""
75
+ chrome = (
76
+ shutil.which("google-chrome")
77
+ or shutil.which("chromium")
78
+ or shutil.which("chromium-browser")
79
+ )
80
+ if not chrome:
81
+ return None
82
+ with tempfile.TemporaryDirectory() as tmp:
83
+ svg_path = os.path.join(tmp, "icon.svg")
84
+ out_path = os.path.join(tmp, "icon.png")
85
+ with open(svg_path, "w") as f:
86
+ f.write(_sized_svg(svg_content, size))
87
+ # Isolated --user-data-dir avoids clashing with a running browser's
88
+ # profile lock. Transparent background via RRGGBBAA = 00000000.
89
+ cmd = [
90
+ chrome,
91
+ "--headless=new",
92
+ "--disable-gpu",
93
+ "--hide-scrollbars",
94
+ "--force-device-scale-factor=1",
95
+ f"--user-data-dir={tmp}/profile",
96
+ "--default-background-color=00000000",
97
+ f"--window-size={size},{size}",
98
+ f"--screenshot={out_path}",
99
+ svg_path,
100
+ ]
101
+ try:
102
+ subprocess.run(cmd, capture_output=True, timeout=30, check=False)
103
+ except Exception:
104
+ return None
105
+ if os.path.exists(out_path) and os.path.getsize(out_path) > 0:
106
+ with open(out_path, "rb") as f:
107
+ return f.read()
108
+ return None
109
+
110
+
111
+ def _rasterize_imagemagick(svg_content: str, size: int) -> bytes | None:
112
+ """Last resort: ImageMagick. Unreliable without an rsvg-convert delegate."""
113
+ magick = shutil.which("magick") or shutil.which("convert")
114
+ if not magick:
115
+ return None
116
+ base = [magick] if magick.endswith("magick") else []
117
+ with tempfile.TemporaryDirectory() as tmp:
118
+ svg_path = os.path.join(tmp, "icon.svg")
119
+ out_path = os.path.join(tmp, "icon.png")
120
+ with open(svg_path, "w") as f:
121
+ f.write(_sized_svg(svg_content, size))
122
+ cmd = base + [
123
+ "convert" if not base else "",
124
+ "-background", "none",
125
+ "-density", "384",
126
+ svg_path,
127
+ "-resize", f"{size}x{size}",
128
+ out_path,
129
+ ]
130
+ cmd = [c for c in cmd if c != ""]
131
+ try:
132
+ subprocess.run(cmd, capture_output=True, timeout=30, check=False)
133
+ except Exception:
134
+ return None
135
+ if os.path.exists(out_path) and os.path.getsize(out_path) > 0:
136
+ with open(out_path, "rb") as f:
137
+ return f.read()
138
+ return None
139
+
140
+
141
+ def rasterize(svg_content: str, size: int) -> bytes:
142
+ """SVG -> PNG bytes via cairosvg, then headless Chrome, then ImageMagick."""
143
+ if cairosvg is not None:
144
+ try:
145
+ return cairosvg.svg2png(
146
+ bytestring=svg_content.encode(), output_width=size, output_height=size
147
+ )
148
+ except Exception as e: # broken libcairo at call time, malformed SVG, etc.
149
+ print(f" (cairosvg failed: {e}; trying fallback)", end="")
150
+ for fn in (_rasterize_rsvg, _rasterize_chrome, _rasterize_imagemagick):
151
+ png = fn(svg_content, size)
152
+ if png:
153
+ return png
154
+ raise RuntimeError(
155
+ "No working SVG rasterizer. Install cairosvg (uv run --with cairosvg), "
156
+ "or a headless Chrome/Chromium, or ImageMagick with an SVG delegate."
157
+ )
158
+
33
159
  # Brand icon definitions: name -> {svg_slug, color, bg}
34
160
  # svg_slug: name on simpleicons.org (lowercase, no spaces)
35
161
  # color: fill color for the SVG path (hex without #)
@@ -180,7 +306,7 @@ def render_icon(svg_content: str, color: str | None, bg: str | None) -> Image.Im
180
306
  f'xmlns="http://www.w3.org/2000/svg"><rect width="24" height="24" fill="#{bg}"/>',
181
307
  )
182
308
 
183
- png_data = cairosvg.svg2png(bytestring=svg_content.encode(), output_width=SIZE, output_height=SIZE)
309
+ png_data = rasterize(svg_content, SIZE)
184
310
  img = Image.open(io.BytesIO(png_data)).convert("RGBA")
185
311
  return img
186
312
 
@@ -1,6 +1,19 @@
1
1
  {
2
2
  "server_key": "mcpServers",
3
3
  "servers": {
4
+ "ted-eu": {
5
+ "type": "http",
6
+ "url": "https://gateway.pipeworx.io/ted-eu/mcp"
7
+ },
8
+ "apify-ted-eu": {
9
+ "command": "npx",
10
+ "args": [
11
+ "mcp-remote",
12
+ "https://mcp.apify.com/?tools=jeeves_is_my_copilot/ted-eu-tenders-api",
13
+ "--header",
14
+ "Authorization: Bearer ${APIFY_API_TOKEN}"
15
+ ]
16
+ },
4
17
  "strapi-docs": {
5
18
  "type": "http",
6
19
  "url": "https://strapi-docs.mcp.kapa.ai"
@@ -48,6 +61,10 @@
48
61
  "command": "npx",
49
62
  "args": ["-y", "@upstash/context7-mcp"]
50
63
  },
64
+ "codegraph": {
65
+ "command": "codegraph",
66
+ "args": ["serve", "--mcp"]
67
+ },
51
68
  "kroschuorder": {
52
69
  "args": [
53
70
  "tsx",
@@ -0,0 +1,351 @@
1
+ ---
2
+ name: resume-version-manager
3
+ description: Track resume versions, maintain one master resume, and manage per-job tailored copies. Use when user says "manage my resumes", "track resume versions", "which resume did I send", "master resume", "organize my resumes", or "version of my resume for this job".
4
+ ---
5
+
6
+ # Resume Version Manager
7
+
8
+ ## When to Use This Skill
9
+
10
+ Use this skill when the user:
11
+ - Has multiple resume versions to manage
12
+ - Needs to track tailored resumes
13
+ - Wants to maintain a master resume
14
+ - Is applying to many different roles
15
+ - Mentions: "resume versions", "master resume", "different versions", "track resumes", "which resume"
16
+
17
+ ## Core Capabilities
18
+
19
+ - Create and maintain master resume document
20
+ - Track tailored resume versions
21
+ - Organize resume versions by role/industry
22
+ - Maintain consistent source of truth
23
+ - Streamline resume updates
24
+ - Prevent version confusion
25
+
26
+ ## The Version Management Problem
27
+
28
+ **Common Pain Points:**
29
+ - "Which version did I send to Company X?"
30
+ - "Where's my most recent resume?"
31
+ - "I have 15 resume files and don't know which is best"
32
+ - "I forgot to update my resume after that project"
33
+ - "I keep tailoring from different base versions"
34
+
35
+ **The Solution:**
36
+ A systematic approach with:
37
+ 1. One master resume (source of truth)
38
+ 2. Organized tailored versions
39
+ 3. Clear naming conventions
40
+ 4. Update workflow
41
+
42
+ ## Master Resume Concept
43
+
44
+ ### What is a Master Resume?
45
+
46
+ A comprehensive document containing:
47
+ - ALL your experiences (not just recent)
48
+ - ALL bullet points you've ever written
49
+ - Every achievement, project, skill
50
+ - Full details (even if they won't fit on one page)
51
+
52
+ **Purpose:** Source of truth to pull from when tailoring
53
+
54
+ ### Master Resume Structure
55
+
56
+ ```markdown
57
+ # MASTER RESUME - [YOUR NAME]
58
+ Last Updated: [Date]
59
+
60
+ ## CONTACT INFORMATION
61
+ [Full contact details]
62
+
63
+ ## PROFESSIONAL SUMMARY VERSIONS
64
+ [Summary for Role Type A]
65
+ [Summary for Role Type B]
66
+ [Summary for Role Type C]
67
+
68
+ ## ALL SKILLS
69
+ ### Technical Skills
70
+ [Complete list by category]
71
+
72
+ ### Soft Skills
73
+ [Complete list]
74
+
75
+ ### Industry Knowledge
76
+ [All domains]
77
+
78
+ ## PROFESSIONAL EXPERIENCE
79
+
80
+ ### Company Name | Title | Dates
81
+
82
+ **All Bullets (choose best for each application):**
83
+ • Bullet 1 (leadership focused)
84
+ • Bullet 2 (technical focused)
85
+ • Bullet 3 (results focused)
86
+ • Bullet 4 (collaboration focused)
87
+ • Bullet 5 (additional achievement)
88
+ • Bullet 6 (additional achievement)
89
+
90
+ **Keywords this experience covers:**
91
+ [List of keywords this job demonstrates]
92
+
93
+ ### Previous Company | Title | Dates
94
+ [Same format...]
95
+
96
+ ## EDUCATION
97
+ [Complete education history]
98
+
99
+ ## CERTIFICATIONS
100
+ [All certifications ever earned]
101
+
102
+ ## PROJECTS
103
+ [All notable projects]
104
+
105
+ ## VOLUNTEER / ADDITIONAL
106
+ [All other relevant experience]
107
+ ```
108
+
109
+ ## File Organization System
110
+
111
+ ### Folder Structure
112
+
113
+ ```
114
+ Resume/
115
+ ├── Master/
116
+ │ └── LastName_Master_Resume.docx
117
+ ├── Tailored/
118
+ │ ├── ProductManagement/
119
+ │ │ ├── LastName_PM_Google_Jan2024.pdf
120
+ │ │ └── LastName_PM_Meta_Jan2024.pdf
121
+ │ ├── Engineering/
122
+ │ │ ├── LastName_SWE_Startup_Feb2024.pdf
123
+ │ │ └── LastName_SWE_Enterprise_Feb2024.pdf
124
+ │ └── General/
125
+ │ └── LastName_General_Resume.pdf
126
+ ├── CoverLetters/
127
+ │ ├── Google_PM_CoverLetter.docx
128
+ │ └── Meta_PM_CoverLetter.docx
129
+ └── Applications/
130
+ └── ApplicationTracker.xlsx
131
+ ```
132
+
133
+ ### File Naming Convention
134
+
135
+ **Pattern:**
136
+ `[LastName]_[Role/Type]_[Company]_[Date].pdf`
137
+
138
+ **Examples:**
139
+ - `Smith_ProductManager_Google_Jan2024.pdf`
140
+ - `Smith_SWE_Stripe_Feb2024.pdf`
141
+ - `Smith_DataScience_General_2024.pdf`
142
+ - `Smith_Master_Resume_v3.docx`
143
+
144
+ ## Version Categories
145
+
146
+ ### By Target Role
147
+
148
+ **Product Management:**
149
+ - Emphasizes: Strategy, roadmap, metrics, stakeholders
150
+ - Skills highlight: Product tools, analytics, user research
151
+
152
+ **Software Engineering:**
153
+ - Emphasizes: Technical projects, systems, code
154
+ - Skills highlight: Languages, frameworks, tools
155
+
156
+ **Data Science:**
157
+ - Emphasizes: Analysis, ML, statistical methods
158
+ - Skills highlight: Python, SQL, ML libraries
159
+
160
+ ### By Industry
161
+
162
+ **Tech/Startup:**
163
+ - Emphasizes: Innovation, growth, scrappiness
164
+ - Tone: Modern, direct, achievement-focused
165
+
166
+ **Enterprise/Corporate:**
167
+ - Emphasizes: Scale, process, collaboration
168
+ - Tone: Professional, structured, comprehensive
169
+
170
+ **Finance:**
171
+ - Emphasizes: Analysis, compliance, accuracy
172
+ - Tone: Conservative, precise, credentialed
173
+
174
+ ### By Seniority Level
175
+
176
+ **Individual Contributor:**
177
+ - Focus on execution and technical skills
178
+ - Detailed project descriptions
179
+ - Technical accomplishments
180
+
181
+ **Manager:**
182
+ - Team leadership and development
183
+ - Cross-functional collaboration
184
+ - Business impact metrics
185
+
186
+ **Executive:**
187
+ - Strategic leadership
188
+ - P&L responsibility
189
+ - Organizational transformation
190
+
191
+ ## Application Tracking
192
+
193
+ ### Simple Tracker Spreadsheet
194
+
195
+ ```
196
+ | Company | Role | Version Used | Date Applied | Status | Notes |
197
+ |---------|------|--------------|--------------|--------|-------|
198
+ | Google | PM | PM_Google_Jan | 1/15/24 | Interview | 2nd round 2/1 |
199
+ | Meta | PM | PM_Meta_Jan | 1/18/24 | Applied | Referral from John |
200
+ | Startup | PM | PM_General | 1/20/24 | Rejected | Too senior |
201
+ ```
202
+
203
+ ### Information to Track
204
+
205
+ - Company name
206
+ - Job title
207
+ - Resume version used
208
+ - Cover letter version used
209
+ - Application date
210
+ - Application method (portal, referral, direct)
211
+ - Current status
212
+ - Follow-up dates
213
+ - Notes and contacts
214
+
215
+ ## Update Workflow
216
+
217
+ ### When to Update Master Resume
218
+
219
+ **Immediately Update For:**
220
+ - New job or promotion
221
+ - Completed major project
222
+ - New skills or certifications
223
+ - Significant achievements
224
+ - Awards or recognition
225
+
226
+ **Quarterly Review:**
227
+ - Add recent accomplishments
228
+ - Update metrics with new data
229
+ - Refresh skills section
230
+ - Remove outdated information
231
+
232
+ ### Master to Tailored Workflow
233
+
234
+ ```
235
+ 1. Start with Master Resume
236
+
237
+ 2. Copy to new file (don't edit master)
238
+
239
+ 3. Analyze job description
240
+
241
+ 4. Select relevant bullets from master
242
+
243
+ 5. Choose appropriate summary version
244
+
245
+ 6. Reorder skills for relevance
246
+
247
+ 7. Add job-specific keywords
248
+
249
+ 8. Trim to appropriate length
250
+
251
+ 9. Save with proper naming convention
252
+
253
+ 10. Update application tracker
254
+ ```
255
+
256
+ ## Common Scenarios
257
+
258
+ ### Scenario 1: Applying to Similar Roles
259
+
260
+ **Strategy:**
261
+ - Create one well-tailored version for the role type
262
+ - Make minor adjustments for each company
263
+ - Track which slight variation went where
264
+
265
+ ### Scenario 2: Applying to Different Role Types
266
+
267
+ **Strategy:**
268
+ - Create separate base versions for each role type
269
+ - Maintain clear folder organization
270
+ - Each version pulls from same master
271
+
272
+ ### Scenario 3: Rapid Application Volume
273
+
274
+ **Strategy:**
275
+ - Create 2-3 strong category versions
276
+ - Use "general" versions for quick applications
277
+ - Reserve deep tailoring for top choices
278
+
279
+ ### Scenario 4: Career Transition
280
+
281
+ **Strategy:**
282
+ - Create transition-focused version
283
+ - Emphasize transferable skills
284
+ - Maintain original industry version as backup
285
+
286
+ ## Version Control Best Practices
287
+
288
+ ### DO:
289
+ - ✅ Always work from master as source
290
+ - ✅ Use consistent naming conventions
291
+ - ✅ Track which version went where
292
+ - ✅ Keep master updated
293
+ - ✅ Date your files
294
+ - ✅ Backup to cloud storage
295
+
296
+ ### DON'T:
297
+ - ❌ Edit master directly for applications
298
+ - ❌ Use vague names like "resume_final_v2"
299
+ - ❌ Forget which version you sent
300
+ - ❌ Let master get out of date
301
+ - ❌ Have multiple "master" files
302
+ - ❌ Delete old versions (archive instead)
303
+
304
+ ## Output Format
305
+
306
+ When managing resume versions:
307
+
308
+ ```markdown
309
+ # RESUME VERSION MANAGEMENT
310
+
311
+ ## Master Resume Status
312
+ **Last Updated:** [Date]
313
+ **Location:** [File path]
314
+ **Total Experience Entries:** [X]
315
+ **Total Bullet Points Available:** [X]
316
+
317
+ ## Active Versions
318
+
319
+ ### Role Type: Product Management
320
+ **Base Version:** PM_General_2024.docx
321
+ **Tailored Versions:**
322
+ | Company | File Name | Date Created | Status |
323
+ |---------|-----------|--------------|--------|
324
+ | Google | PM_Google_Jan24 | 1/15/24 | Submitted |
325
+ | Meta | PM_Meta_Jan24 | 1/18/24 | Submitted |
326
+
327
+ ### Role Type: Engineering
328
+ [Same structure]
329
+
330
+ ## Update Queue
331
+ - [ ] Add Q4 project results to master
332
+ - [ ] Update skills with new certification
333
+ - [ ] Archive versions older than 6 months
334
+
335
+ ## Recommended Actions
336
+ 1. [Action 1]
337
+ 2. [Action 2]
338
+ ```
339
+
340
+ ## Version Management Checklist
341
+
342
+ - ✅ Master resume exists and is current
343
+ - ✅ Folder structure is organized
344
+ - ✅ Naming convention is consistent
345
+ - ✅ Application tracker is maintained
346
+ - ✅ Know which version sent to each company
347
+ - ✅ All versions pull from same master
348
+ - ✅ Backup system in place
349
+ - ✅ Old versions archived (not deleted)
350
+ - ✅ Update workflow is established
351
+ - ✅ Regular master resume reviews scheduled