openings 0.1.52 → 0.1.53

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openings",
3
- "version": "0.1.52",
3
+ "version": "0.1.53",
4
4
  "description": "A free, candidate-safe job-search substrate for AI agents",
5
5
  "license": "MIT",
6
6
  "repository": { "type": "git", "url": "git+https://github.com/abhay-avagama/hiring-agent.git" },
package/src/catalog.ts CHANGED
@@ -35,6 +35,9 @@ interface LeverJob {
35
35
  hostedUrl: string;
36
36
  categories?: { location?: string };
37
37
  descriptionPlain?: string;
38
+ /** The requirements and responsibilities, which Lever keeps apart from the opening paragraph. */
39
+ lists?: Array<{ text?: string; content?: string }>;
40
+ additionalPlain?: string;
38
41
  workplaceType?: string;
39
42
  createdAt?: number;
40
43
  }
@@ -458,6 +461,19 @@ function normalizeAshby(company: Company, job: AshbyJob): Job {
458
461
  });
459
462
  }
460
463
 
464
+ /**
465
+ * Lever splits an advert across three fields and a board may fill any of them. Reading only the opening
466
+ * paragraph left more than half of Lever's roles with no description at all: one aggregator alone publishes
467
+ * 4,076 postings whose `descriptionPlain` is empty and whose requirements sit entirely in `lists`. Those
468
+ * requirements are also where the skills a candidate searches for are written, so this is the part that counts.
469
+ */
470
+ function leverDescription(job: LeverJob): string {
471
+ const sections = [job.descriptionPlain ?? ""];
472
+ for (const list of job.lists ?? []) sections.push([list.text ?? "", stripHtml(list.content ?? "")].filter(Boolean).join("\n"));
473
+ sections.push(job.additionalPlain ?? "");
474
+ return sections.map((section) => section.trim()).filter(Boolean).join("\n\n");
475
+ }
476
+
461
477
  function normalizeLever(company: Company, job: LeverJob): Job {
462
478
  const location = job.categories?.location ?? "Unspecified";
463
479
  return classifyJob({
@@ -473,7 +489,7 @@ function normalizeLever(company: Company, job: LeverJob): Job {
473
489
  eligibilityConfidence: "unknown",
474
490
  url: job.hostedUrl,
475
491
  updatedAt: job.createdAt ? new Date(job.createdAt).toISOString() : undefined,
476
- description: job.descriptionPlain ?? "",
492
+ description: leverDescription(job),
477
493
  });
478
494
  }
479
495
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = "0.1.52";
1
+ export const VERSION = "0.1.53";