feat: undo job actions + AI Engineer search profile #4

Merged
ilia merged 3 commits from feat/undo-and-ai-search-profile into main 2026-07-19 09:21:32 -05:00
2 changed files with 162 additions and 0 deletions
Showing only changes of commit 667bc70b7d - Show all commits

View File

@ -98,6 +98,44 @@ const ILIA_DOBKIN_US_KEYWORD_TERMS = [
"TN SDET",
];
/** AI engineering / AI enablement — agents, MCP, RAG, evals, local LLM serving. */
const ILIA_DOBKIN_AI_TARGET_ROLES = [
"AI Engineer",
"Senior AI Engineer",
"Staff AI Engineer",
"AI Automation Engineer",
"Applied AI Engineer",
"LLM Engineer",
"Generative AI Engineer",
"GenAI Engineer",
"AI Platform Engineer",
"AI Solutions Engineer",
"AI Enablement Lead",
"AI Enablement Engineer",
"AI Agent Engineer",
"ML Engineer",
"Machine Learning Engineer",
"Prompt Engineer",
"RAG Engineer",
];
const ILIA_DOBKIN_AI_KEYWORD_TERMS = [
...ILIA_DOBKIN_AI_TARGET_ROLES.map((role) => role.toLowerCase()),
"LLM agents",
"MCP engineer",
"LangGraph",
"RAG engineer",
"prompt engineering",
"Ollama",
"AI enablement",
"AI automation remote",
"contract AI engineer",
"GenAI remote",
"LLM evals",
"promptfoo",
"multi-agent",
];
const migrations = [
`CREATE TABLE IF NOT EXISTS jobs (
id TEXT PRIMARY KEY,
@ -1142,6 +1180,105 @@ const migrations = [
'685b0000-0000-4000-8000-000000009901',
'685b0000-0000-4000-8000-000000009902'
)`,
// AI engineering profile — agents, MCP, RAG, evals (paired with same login as Canada/US).
sqlInsertSearchProfileSeed({
id: "685b0000-0000-4000-8000-000000000004",
name: "Ilia Dobkin (AI)",
profile: {
targetRoles: ILIA_DOBKIN_AI_TARGET_ROLES,
experienceLevel: "Senior",
mustHaveSkills: [
"Python",
"LLM",
"RAG",
"MCP",
"Agents",
"FastAPI",
"Prompt engineering",
],
niceToHaveSkills: [
"LangGraph",
"Ollama",
"promptfoo",
"TypeScript",
"Playwright",
"Ansible",
"Docker",
],
dealBreakers: [],
preferredWorkArrangement: ["remote", "hybrid"],
preferredLocations: [
"Toronto",
"Ontario",
"GTA",
"Greater Toronto Area",
"Canada",
"Remote Canada",
"Remote",
],
minimumSalary: "",
industriesToTarget: [
"Software",
"AI / ML",
"Enterprise SaaS",
"FinTech",
"Developer tools",
],
industriesToAvoid: [],
aboutMe:
"Ilia Dobkin (AI) — AI Automation Engineer / LLM agents, MCP, RAG & evals; AI enablement lead experience. Switch to this profile for AI-role discovery (same login as Canada/US). Resume: ilia-dobkin-ai.json.",
basicAuthUser: "ilia,dobkin",
resumeLocalPath: "../data/resumes/ilia-dobkin-ai.json",
},
}),
`INSERT OR IGNORE INTO keyword_sets (id, owner_profile_id, name, terms, is_active, created_at, updated_at)
VALUES (
'ilia-dobkin-ai-keyword-set',
'685b0000-0000-4000-8000-000000000004',
'AI Engineer',
'${sqlJsonLiteral(ILIA_DOBKIN_AI_KEYWORD_TERMS)}',
1,
datetime('now'),
datetime('now')
)`,
`UPDATE search_profiles
SET data = json_set(
json_set(
json_set(data, '$.basicAuthUser', 'ilia,dobkin'),
'$.resumeLocalPath',
'../data/resumes/ilia-dobkin-ai.json'
),
'$.aboutMe',
'Ilia Dobkin (AI) — AI Automation Engineer / LLM agents, MCP, RAG & evals; AI enablement lead experience. Switch to this profile for AI-role discovery (same login as Canada/US). Resume: ilia-dobkin-ai.json.'
),
updated_at = datetime('now')
WHERE id = '685b0000-0000-4000-8000-000000000004'`,
`UPDATE search_profiles
SET data = json_set(data, '$.targetRoles', '${sqlJsonLiteral(ILIA_DOBKIN_AI_TARGET_ROLES)}'),
updated_at = datetime('now')
WHERE id = '685b0000-0000-4000-8000-000000000004'`,
`UPDATE keyword_sets
SET terms = '${sqlJsonLiteral(ILIA_DOBKIN_AI_KEYWORD_TERMS)}',
name = 'AI Engineer',
is_active = 1,
updated_at = datetime('now')
WHERE id = 'ilia-dobkin-ai-keyword-set'`,
// Also add AI Engineer as an inactive keyword set on the Canada SDET profile
// (same pattern as Caseware / Lead) so it can be flipped without switching profiles.
`INSERT OR IGNORE INTO keyword_sets (id, owner_profile_id, name, terms, is_active, created_at, updated_at)
VALUES (
'ilia-dobkin-ai',
'685b0000-0000-4000-8000-000000000001',
'AI Engineer',
'${sqlJsonLiteral(ILIA_DOBKIN_AI_KEYWORD_TERMS)}',
0,
datetime('now'),
datetime('now')
)`,
`UPDATE keyword_sets
SET terms = '${sqlJsonLiteral(ILIA_DOBKIN_AI_KEYWORD_TERMS)}',
updated_at = datetime('now')
WHERE id = 'ilia-dobkin-ai'`,
];
console.log("🔧 Running database migrations...");

View File

@ -0,0 +1,25 @@
#
# Jobber cron env — dobkin (AI Engineer)
# Copy to /root/.jobber-cron-dobkin-ai.env (chmod 600)
#
# Used by: scripts/jobber-pipeline-telegram.sh
# Activate profile "Ilia Dobkin (AI)" in the Jobs UI (or via API) before cron,
# or pass the owner profile in your pipeline wrapper if supported.
#
# JobOps base URL (where the app is reachable from the cron host)
JOBOPS_URL=http://127.0.0.1:3005
# Optional: limit number of jobs linked in Telegram message
JOB_TELEGRAM_MAX_JOBS=25
# Optional: comma-separated sources to run (leave empty to use server defaults)
# JOBBER_PIPELINE_SOURCES=adzuna,gradcracker,ukvisajobs
# App-level Basic Auth (enables per-user separation when set on the server)
BASIC_AUTH_USER=dobkin
BASIC_AUTH_PASSWORD=CHANGEME
# Telegram bot + chat destination
TELEGRAM_BOT_TOKEN=CHANGEME
TELEGRAM_CHAT_ID=CHANGEME