careermate 0.1.1 → 0.1.3

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -10
  3. package/THIRD_PARTY_NOTICES.md +15 -0
  4. package/apps/mcp/src/index.ts +4 -5
  5. package/apps/web/demo/demo-shim.js +536 -0
  6. package/apps/web/demo/demo.css +75 -0
  7. package/apps/web/demo/seed.js +269 -0
  8. package/apps/web/public/app.js +34 -2
  9. package/apps/web/public/index.html +10 -2
  10. package/apps/web/public/lib.js +134 -22
  11. package/apps/web/public/pages/applications.js +2 -9
  12. package/apps/web/public/pages/documents.js +73 -52
  13. package/apps/web/public/pages/home.js +16 -18
  14. package/apps/web/public/pages/interview.js +9 -12
  15. package/apps/web/public/pages/jobs.js +40 -41
  16. package/apps/web/public/pages/profile.js +69 -89
  17. package/apps/web/public/pages/settings.js +15 -10
  18. package/apps/web/public/styles.css +63 -4
  19. package/apps/web/src/http.ts +31 -4
  20. package/apps/web/src/info.ts +3 -3
  21. package/apps/web/src/routes.ts +2 -1
  22. package/apps/web/src/server.ts +1 -4
  23. package/dist/doctor.mjs +72715 -697
  24. package/dist/install-page/analytics.js +97 -0
  25. package/dist/install-page/index.html +94 -112
  26. package/dist/install-page/landing.js +54 -0
  27. package/dist/install-page/og.png +0 -0
  28. package/dist/install-page/robots.txt +4 -0
  29. package/dist/install-page/sitemap.xml +21 -0
  30. package/dist/install-page/start.html +26 -46
  31. package/dist/install-page/style.css +105 -37
  32. package/dist/mcp.mjs +74044 -2062
  33. package/dist/migrate.mjs +110 -90
  34. package/dist/pdf.worker.min.mjs +28 -0
  35. package/dist/public/app.js +34 -2
  36. package/dist/public/index.html +10 -2
  37. package/dist/public/lib.js +134 -22
  38. package/dist/public/pages/applications.js +2 -9
  39. package/dist/public/pages/documents.js +73 -52
  40. package/dist/public/pages/home.js +16 -18
  41. package/dist/public/pages/interview.js +9 -12
  42. package/dist/public/pages/jobs.js +40 -41
  43. package/dist/public/pages/profile.js +69 -89
  44. package/dist/public/pages/settings.js +15 -10
  45. package/dist/public/styles.css +63 -4
  46. package/dist/web.mjs +39740 -326
  47. package/package.json +6 -3
  48. package/packages/db/src/paths.ts +11 -0
  49. package/packages/db/src/repositories.ts +18 -1
  50. package/packages/mcp-tools/src/bridge.ts +55 -32
  51. package/packages/mcp-tools/src/index.ts +9 -0
  52. package/packages/mcp-tools/src/tools.ts +198 -75
  53. package/packages/mcp-tools/src/update.ts +330 -0
  54. package/packages/parsers/src/documents.ts +533 -0
  55. package/packages/parsers/src/index.ts +8 -5
  56. package/packages/prompts/src/onboarding.ts +2 -2
  57. package/packages/shared/src/build-info.ts +22 -0
  58. package/packages/shared/src/index.ts +1 -0
  59. package/packages/shared/src/schemas.ts +138 -83
  60. package/packages/workflows/src/definitions.ts +4 -2
  61. package/scripts/build-demo.mjs +130 -0
  62. package/scripts/build-dist.mjs +26 -1
  63. package/scripts/doctor.ts +16 -3
  64. package/scripts/gen-og.mjs +1 -1
  65. package/scripts/test.ts +25 -0
  66. package/scripts/ui-smoke.ts +32 -4
  67. package/docs/ARCHITECTURE.md +0 -208
  68. package/docs/CHANGES_V1.md +0 -103
  69. package/docs/DATA_MODEL.md +0 -460
  70. package/docs/DECISIONS.md +0 -277
  71. package/docs/DEMO.md +0 -242
  72. package/docs/MCP_TOOLS.md +0 -252
  73. package/docs/ROADMAP.md +0 -134
  74. package/docs/RUNTIME_DISTRIBUTION_RESEARCH.md +0 -135
  75. package/docs/START_WORKFLOW.md +0 -131
  76. package/docs/SUPPORTED_AI_APPS.md +0 -112
  77. package/docs/TODO.md +0 -57
  78. package/docs/UX_NOTES.md +0 -247
  79. package/docs/WORKFLOWS.md +0 -200
package/dist/migrate.mjs CHANGED
@@ -4201,7 +4201,7 @@ ZodNaN.create = (params) => {
4201
4201
  ...processCreateParams(params)
4202
4202
  });
4203
4203
  };
4204
- var BRAND = Symbol("zod_brand");
4204
+ var BRAND = /* @__PURE__ */ Symbol("zod_brand");
4205
4205
  var ZodBranded = class extends ZodType {
4206
4206
  _parse(input) {
4207
4207
  const { ctx } = this._processInputParams(input);
@@ -4403,41 +4403,61 @@ var ostring = () => stringType().optional();
4403
4403
  var onumber = () => numberType().optional();
4404
4404
  var oboolean = () => booleanType().optional();
4405
4405
  var coerce = {
4406
- string: (arg) => ZodString.create({ ...arg, coerce: true }),
4407
- number: (arg) => ZodNumber.create({ ...arg, coerce: true }),
4408
- boolean: (arg) => ZodBoolean.create({
4406
+ string: ((arg) => ZodString.create({ ...arg, coerce: true })),
4407
+ number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),
4408
+ boolean: ((arg) => ZodBoolean.create({
4409
4409
  ...arg,
4410
4410
  coerce: true
4411
- }),
4412
- bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }),
4413
- date: (arg) => ZodDate.create({ ...arg, coerce: true })
4411
+ })),
4412
+ bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),
4413
+ date: ((arg) => ZodDate.create({ ...arg, coerce: true }))
4414
4414
  };
4415
4415
  var NEVER = INVALID;
4416
4416
 
4417
4417
  // packages/shared/src/schemas.ts
4418
4418
  var isoDateTime = external_exports.string();
4419
4419
  var id = external_exports.string();
4420
+ function isSafeUrl(u) {
4421
+ const s = u.trim();
4422
+ return !/^[a-z][a-z0-9+.-]*:/i.test(s) || /^(https?:|mailto:)/i.test(s);
4423
+ }
4424
+ var UNSAFE_URL_MSG = "javascript: \uAC19\uC740 \uC704\uD5D8\uD55C \uB9C1\uD06C\uB294 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. http(s) \uB9C1\uD06C\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.";
4425
+ var MAX_URL = 2e3;
4426
+ var SafeUrl = external_exports.string().min(1).max(MAX_URL).refine(isSafeUrl, { message: UNSAFE_URL_MSG });
4427
+ var SafeUrlOptional = external_exports.string().max(MAX_URL).optional().refine((u) => u == null || u === "" || isSafeUrl(u), { message: UNSAFE_URL_MSG });
4428
+ var MAX_LINE = 500;
4429
+ var MAX_NOTE = 1e4;
4430
+ var MAX_BODY = 2e5;
4431
+ var MAX_ITEM = 2e3;
4432
+ var MAX_ITEMS = 500;
4433
+ var EMPTY_MSG = "\uB0B4\uC6A9\uC774 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4(\uACF5\uBC31\uB9CC\uC73C\uB85C\uB294 \uC800\uC7A5\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4).";
4434
+ var reqLine = external_exports.string().trim().min(1).max(MAX_LINE);
4435
+ var optLine = external_exports.string().max(MAX_LINE).optional();
4436
+ var optNote = external_exports.string().max(MAX_NOTE).optional();
4437
+ var optBody = external_exports.string().max(MAX_BODY).optional();
4438
+ var reqBody = external_exports.string().max(MAX_BODY).refine((s) => s.trim().length > 0, { message: EMPTY_MSG });
4439
+ var strList = external_exports.array(external_exports.string().max(MAX_ITEM)).max(MAX_ITEMS);
4420
4440
  var baseRecord = {
4421
4441
  id,
4422
4442
  created_at: isoDateTime,
4423
4443
  updated_at: isoDateTime
4424
4444
  };
4425
4445
  var LinkSchema = external_exports.object({
4426
- label: external_exports.string().min(1),
4427
- url: external_exports.string().min(1)
4446
+ label: reqLine,
4447
+ url: SafeUrl
4428
4448
  });
4429
4449
  var ProfileInputSchema = external_exports.object({
4430
- name: external_exports.string().min(1).optional(),
4431
- email: external_exports.string().optional(),
4432
- phone: external_exports.string().optional(),
4433
- location: external_exports.string().optional(),
4434
- headline: external_exports.string().optional().describe("\uD55C \uC904 \uC18C\uAC1C / \uC9C1\uBB34 \uD0C0\uC774\uD2C0"),
4435
- summary: external_exports.string().optional().describe("\uC790\uAE30\uC18C\uAC1C \uC694\uC57D"),
4436
- desired_roles: external_exports.array(external_exports.string()).optional().describe("\uD76C\uB9DD \uC9C1\uBB34"),
4437
- desired_conditions: external_exports.string().optional().describe("\uD76C\uB9DD \uADFC\uBB34 \uC870\uAC74 (\uC5F0\uBD09, \uC9C0\uC5ED, \uADFC\uBB34\uD615\uD0DC \uB4F1)"),
4438
- preferred_tone: external_exports.string().optional().describe("\uC790\uAE30\uC18C\uAC1C\uC11C \uC120\uD638 \uBB38\uCCB4 (\uC608: \uB2F4\uBC31\uD558\uACE0 \uAD6C\uCCB4\uC801)"),
4439
- emphasis_points: external_exports.array(external_exports.string()).optional().describe("\uAC15\uC870\uD558\uACE0 \uC2F6\uC740 \uD575\uC2EC \uD3EC\uC778\uD2B8"),
4440
- links: external_exports.array(LinkSchema).optional().describe("\uD3EC\uD2B8\uD3F4\uB9AC\uC624/\uAE43\uD5C8\uBE0C/\uB9C1\uD06C\uB4DC\uC778 \uB4F1")
4450
+ name: reqLine.optional(),
4451
+ email: optLine,
4452
+ phone: optLine,
4453
+ location: optLine,
4454
+ headline: external_exports.string().max(MAX_LINE).optional().describe("\uD55C \uC904 \uC18C\uAC1C / \uC9C1\uBB34 \uD0C0\uC774\uD2C0"),
4455
+ summary: external_exports.string().max(MAX_NOTE).optional().describe("\uC790\uAE30\uC18C\uAC1C \uC694\uC57D"),
4456
+ desired_roles: strList.optional().describe("\uD76C\uB9DD \uC9C1\uBB34"),
4457
+ desired_conditions: external_exports.string().max(MAX_NOTE).optional().describe("\uD76C\uB9DD \uADFC\uBB34 \uC870\uAC74 (\uC5F0\uBD09, \uC9C0\uC5ED, \uADFC\uBB34\uD615\uD0DC \uB4F1)"),
4458
+ preferred_tone: external_exports.string().max(MAX_LINE).optional().describe("\uC790\uAE30\uC18C\uAC1C\uC11C \uC120\uD638 \uBB38\uCCB4 (\uC608: \uB2F4\uBC31\uD558\uACE0 \uAD6C\uCCB4\uC801)"),
4459
+ emphasis_points: strList.optional().describe("\uAC15\uC870\uD558\uACE0 \uC2F6\uC740 \uD575\uC2EC \uD3EC\uC778\uD2B8"),
4460
+ links: external_exports.array(LinkSchema).max(MAX_ITEMS).optional().describe("\uD3EC\uD2B8\uD3F4\uB9AC\uC624/\uAE43\uD5C8\uBE0C/\uB9C1\uD06C\uB4DC\uC778 \uB4F1")
4441
4461
  });
4442
4462
  var ProfileRecordSchema = external_exports.object({
4443
4463
  ...baseRecord,
@@ -4454,15 +4474,15 @@ var ProfileRecordSchema = external_exports.object({
4454
4474
  links: external_exports.array(LinkSchema)
4455
4475
  });
4456
4476
  var ExperienceInputSchema = external_exports.object({
4457
- company: external_exports.string().min(1),
4458
- role: external_exports.string().optional(),
4459
- employment_type: external_exports.string().optional().describe("\uC815\uADDC\uC9C1/\uACC4\uC57D\uC9C1/\uC778\uD134/\uD504\uB9AC\uB79C\uC11C \uB4F1"),
4460
- start_date: external_exports.string().optional().describe("YYYY-MM \uB610\uB294 YYYY-MM-DD"),
4461
- end_date: external_exports.string().optional().describe("\uC7AC\uC9C1 \uC911\uC774\uBA74 \uBE44\uC6CC\uB450\uAE30"),
4477
+ company: reqLine,
4478
+ role: optLine,
4479
+ employment_type: external_exports.string().max(MAX_LINE).optional().describe("\uC815\uADDC\uC9C1/\uACC4\uC57D\uC9C1/\uC778\uD134/\uD504\uB9AC\uB79C\uC11C \uB4F1"),
4480
+ start_date: external_exports.string().max(MAX_LINE).optional().describe("YYYY-MM \uB610\uB294 YYYY-MM-DD"),
4481
+ end_date: external_exports.string().max(MAX_LINE).optional().describe("\uC7AC\uC9C1 \uC911\uC774\uBA74 \uBE44\uC6CC\uB450\uAE30"),
4462
4482
  is_current: external_exports.boolean().optional(),
4463
- description: external_exports.string().optional(),
4464
- achievements: external_exports.array(external_exports.string()).optional().describe("\uC131\uACFC/\uC5C5\uC801 (\uC815\uB7C9 \uC9C0\uD45C \uAD8C\uC7A5)"),
4465
- tech: external_exports.array(external_exports.string()).optional().describe("\uC0AC\uC6A9 \uAE30\uC220/\uB3C4\uAD6C"),
4483
+ description: optBody,
4484
+ achievements: strList.optional().describe("\uC131\uACFC/\uC5C5\uC801 (\uC815\uB7C9 \uC9C0\uD45C \uAD8C\uC7A5)"),
4485
+ tech: strList.optional().describe("\uC0AC\uC6A9 \uAE30\uC220/\uB3C4\uAD6C"),
4466
4486
  order_index: external_exports.number().optional()
4467
4487
  });
4468
4488
  var ExperienceRecordSchema = external_exports.object({
@@ -4479,14 +4499,14 @@ var ExperienceRecordSchema = external_exports.object({
4479
4499
  order_index: external_exports.number()
4480
4500
  });
4481
4501
  var ProjectInputSchema = external_exports.object({
4482
- name: external_exports.string().min(1),
4483
- role: external_exports.string().optional(),
4484
- description: external_exports.string().optional(),
4485
- highlights: external_exports.array(external_exports.string()).optional(),
4486
- tech: external_exports.array(external_exports.string()).optional(),
4487
- url: external_exports.string().optional(),
4488
- start_date: external_exports.string().optional(),
4489
- end_date: external_exports.string().optional(),
4502
+ name: reqLine,
4503
+ role: optLine,
4504
+ description: optBody,
4505
+ highlights: strList.optional(),
4506
+ tech: strList.optional(),
4507
+ url: SafeUrlOptional,
4508
+ start_date: optLine,
4509
+ end_date: optLine,
4490
4510
  order_index: external_exports.number().optional()
4491
4511
  });
4492
4512
  var ProjectRecordSchema = external_exports.object({
@@ -4502,9 +4522,9 @@ var ProjectRecordSchema = external_exports.object({
4502
4522
  order_index: external_exports.number()
4503
4523
  });
4504
4524
  var SkillInputSchema = external_exports.object({
4505
- name: external_exports.string().min(1),
4506
- category: external_exports.string().optional().describe("\uC5B8\uC5B4/\uD504\uB808\uC784\uC6CC\uD06C/\uD234/\uC18C\uD504\uD2B8\uC2A4\uD0AC \uB4F1"),
4507
- level: external_exports.string().optional().describe("\uC0C1/\uC911/\uD558 \uB610\uB294 \uC790\uC720 \uC11C\uC220"),
4525
+ name: reqLine,
4526
+ category: external_exports.string().max(MAX_LINE).optional().describe("\uC5B8\uC5B4/\uD504\uB808\uC784\uC6CC\uD06C/\uD234/\uC18C\uD504\uD2B8\uC2A4\uD0AC \uB4F1"),
4527
+ level: external_exports.string().max(MAX_LINE).optional().describe("\uC0C1/\uC911/\uD558 \uB610\uB294 \uC790\uC720 \uC11C\uC220"),
4508
4528
  years: external_exports.number().optional(),
4509
4529
  order_index: external_exports.number().optional()
4510
4530
  });
@@ -4518,11 +4538,11 @@ var SkillRecordSchema = external_exports.object({
4518
4538
  });
4519
4539
  var DocumentInputSchema = external_exports.object({
4520
4540
  kind: external_exports.enum(DOCUMENT_KINDS),
4521
- title: external_exports.string().min(1),
4522
- content: external_exports.string().describe("Markdown \uB610\uB294 \uC77C\uBC18 \uD14D\uC2A4\uD2B8 \uBCF8\uBB38"),
4541
+ title: reqLine,
4542
+ content: reqBody.describe("Markdown \uB610\uB294 \uC77C\uBC18 \uD14D\uC2A4\uD2B8 \uBCF8\uBB38"),
4523
4543
  source: external_exports.enum(CONTENT_SOURCES).optional(),
4524
4544
  is_primary: external_exports.boolean().optional().describe("\uB300\uD45C \uBB38\uC11C \uC5EC\uBD80"),
4525
- tags: external_exports.array(external_exports.string()).optional()
4545
+ tags: strList.optional()
4526
4546
  });
4527
4547
  var DocumentRecordSchema = external_exports.object({
4528
4548
  ...baseRecord,
@@ -4534,19 +4554,19 @@ var DocumentRecordSchema = external_exports.object({
4534
4554
  tags: external_exports.array(external_exports.string())
4535
4555
  });
4536
4556
  var CoverLetterInputSchema = external_exports.object({
4537
- title: external_exports.string().min(1),
4538
- job_id: external_exports.string().optional().describe("\uD2B9\uC815 \uACF5\uACE0\uC5D0 \uC5F0\uACB0\uD560 \uACBD\uC6B0"),
4557
+ title: reqLine,
4558
+ job_id: optLine.describe("\uD2B9\uC815 \uACF5\uACE0\uC5D0 \uC5F0\uACB0\uD560 \uACBD\uC6B0"),
4539
4559
  is_primary: external_exports.boolean().optional(),
4540
- content: external_exports.string().optional().describe("\uCD08\uAE30 \uBC84\uC804 \uBCF8\uBB38 (\uC788\uC73C\uBA74 v1\uB85C \uC800\uC7A5)"),
4560
+ content: optBody.describe("\uCD08\uAE30 \uBC84\uC804 \uBCF8\uBB38 (\uC788\uC73C\uBA74 v1\uB85C \uC800\uC7A5)"),
4541
4561
  source: external_exports.enum(CONTENT_SOURCES).optional(),
4542
- note: external_exports.string().optional().describe("\uCD08\uAE30 \uBC84\uC804 \uBA54\uBAA8")
4562
+ note: optNote.describe("\uCD08\uAE30 \uBC84\uC804 \uBA54\uBAA8")
4543
4563
  });
4544
4564
  var CoverLetterVersionInputSchema = external_exports.object({
4545
- cover_letter_id: external_exports.string().optional().describe("\uAE30\uC874 \uC790\uAE30\uC18C\uAC1C\uC11C\uC5D0 \uC0C8 \uBC84\uC804 \uCD94\uAC00 \uC2DC"),
4546
- title: external_exports.string().optional().describe("\uC0C8 \uC790\uAE30\uC18C\uAC1C\uC11C\uB97C \uB9CC\uB4E4 \uB54C \uC81C\uBAA9"),
4547
- job_id: external_exports.string().optional(),
4548
- content: external_exports.string().min(1),
4549
- note: external_exports.string().optional().describe("\uC774 \uBC84\uC804\uC758 \uBCC0\uACBD \uC694\uC57D (\uC608: \uC9C0\uC6D0\uB3D9\uAE30 \uBCF4\uAC15)"),
4565
+ cover_letter_id: optLine.describe("\uAE30\uC874 \uC790\uAE30\uC18C\uAC1C\uC11C\uC5D0 \uC0C8 \uBC84\uC804 \uCD94\uAC00 \uC2DC"),
4566
+ title: external_exports.string().max(MAX_LINE).optional().describe("\uC0C8 \uC790\uAE30\uC18C\uAC1C\uC11C\uB97C \uB9CC\uB4E4 \uB54C \uC81C\uBAA9"),
4567
+ job_id: optLine,
4568
+ content: reqBody,
4569
+ note: optNote.describe("\uC774 \uBC84\uC804\uC758 \uBCC0\uACBD \uC694\uC57D (\uC608: \uC9C0\uC6D0\uB3D9\uAE30 \uBCF4\uAC15)"),
4550
4570
  source: external_exports.enum(CONTENT_SOURCES).optional(),
4551
4571
  set_current: external_exports.boolean().optional().describe("\uC774 \uBC84\uC804\uC744 \uD604\uC7AC \uBC84\uC804\uC73C\uB85C \uC9C0\uC815 (\uAE30\uBCF8 true)")
4552
4572
  });
@@ -4570,16 +4590,16 @@ var CoverLetterRecordSchema = external_exports.object({
4570
4590
  versions: external_exports.array(CoverLetterVersionRecordSchema).optional()
4571
4591
  });
4572
4592
  var JobInputSchema = external_exports.object({
4573
- company: external_exports.string().min(1),
4574
- position: external_exports.string().min(1).describe("\uC9C1\uBB34/\uD3EC\uC9C0\uC158\uBA85"),
4575
- url: external_exports.string().optional(),
4576
- location: external_exports.string().optional(),
4577
- employment_type: external_exports.string().optional(),
4578
- description: external_exports.string().optional().describe("\uACF5\uACE0 \uC6D0\uBB38 \uB610\uB294 \uC815\uB9AC\uB41C \uD14D\uC2A4\uD2B8"),
4579
- requirements: external_exports.array(external_exports.string()).optional().describe("\uC790\uACA9\uC694\uAC74/\uC6B0\uB300\uC0AC\uD56D \uD575\uC2EC"),
4580
- keywords: external_exports.array(external_exports.string()).optional().describe("\uD575\uC2EC \uD0A4\uC6CC\uB4DC"),
4581
- deadline: external_exports.string().optional().describe("\uB9C8\uAC10\uC77C YYYY-MM-DD"),
4582
- source: external_exports.string().optional().describe("\uCD9C\uCC98 (\uC0AC\uB78C\uC778/\uC6D0\uD2F0\uB4DC/\uC9C1\uC811 \uC785\uB825 \uB4F1)")
4593
+ company: reqLine,
4594
+ position: reqLine.describe("\uC9C1\uBB34/\uD3EC\uC9C0\uC158\uBA85"),
4595
+ url: SafeUrlOptional,
4596
+ location: optLine,
4597
+ employment_type: optLine,
4598
+ description: optBody.describe("\uACF5\uACE0 \uC6D0\uBB38 \uB610\uB294 \uC815\uB9AC\uB41C \uD14D\uC2A4\uD2B8"),
4599
+ requirements: strList.optional().describe("\uC790\uACA9\uC694\uAC74/\uC6B0\uB300\uC0AC\uD56D \uD575\uC2EC"),
4600
+ keywords: strList.optional().describe("\uD575\uC2EC \uD0A4\uC6CC\uB4DC"),
4601
+ deadline: external_exports.string().max(MAX_LINE).optional().describe("\uB9C8\uAC10\uC77C YYYY-MM-DD"),
4602
+ source: external_exports.string().max(MAX_LINE).optional().describe("\uCD9C\uCC98 (\uC0AC\uB78C\uC778/\uC6D0\uD2F0\uB4DC/\uC9C1\uC811 \uC785\uB825 \uB4F1)")
4583
4603
  });
4584
4604
  var JobRecordSchema = external_exports.object({
4585
4605
  ...baseRecord,
@@ -4595,14 +4615,14 @@ var JobRecordSchema = external_exports.object({
4595
4615
  source: external_exports.string().nullable()
4596
4616
  });
4597
4617
  var FitAnalysisInputSchema = external_exports.object({
4598
- job_id: external_exports.string().describe("\uBD84\uC11D \uB300\uC0C1 \uACF5\uACE0 ID"),
4618
+ job_id: reqLine.describe("\uBD84\uC11D \uB300\uC0C1 \uACF5\uACE0 ID"),
4599
4619
  score: external_exports.number().min(0).max(100).optional().describe("\uC885\uD569 \uC801\uD569\uB3C4 0~100"),
4600
- summary: external_exports.string().optional().describe("\uD55C\uB450 \uBB38\uB2E8 \uC694\uC57D"),
4601
- strengths: external_exports.array(external_exports.string()).optional().describe("\uAC15\uC810 / \uC798 \uB9DE\uB294 \uBD80\uBD84"),
4602
- gaps: external_exports.array(external_exports.string()).optional().describe("\uBD80\uC871\uD55C \uBD80\uBD84 / \uBCF4\uC644 \uD544\uC694"),
4603
- matched_keywords: external_exports.array(external_exports.string()).optional(),
4604
- missing_keywords: external_exports.array(external_exports.string()).optional(),
4605
- recommendations: external_exports.array(external_exports.string()).optional().describe("\uC790\uAE30\uC18C\uAC1C\uC11C/\uC9C0\uC6D0 \uC804\uB7B5 \uC81C\uC548")
4620
+ summary: external_exports.string().max(MAX_NOTE).optional().describe("\uD55C\uB450 \uBB38\uB2E8 \uC694\uC57D"),
4621
+ strengths: strList.optional().describe("\uAC15\uC810 / \uC798 \uB9DE\uB294 \uBD80\uBD84"),
4622
+ gaps: strList.optional().describe("\uBD80\uC871\uD55C \uBD80\uBD84 / \uBCF4\uC644 \uD544\uC694"),
4623
+ matched_keywords: strList.optional(),
4624
+ missing_keywords: strList.optional(),
4625
+ recommendations: strList.optional().describe("\uC790\uAE30\uC18C\uAC1C\uC11C/\uC9C0\uC6D0 \uC804\uB7B5 \uC81C\uC548")
4606
4626
  });
4607
4627
  var FitAnalysisRecordSchema = external_exports.object({
4608
4628
  ...baseRecord,
@@ -4616,18 +4636,18 @@ var FitAnalysisRecordSchema = external_exports.object({
4616
4636
  recommendations: external_exports.array(external_exports.string())
4617
4637
  });
4618
4638
  var ApplicationInputSchema = external_exports.object({
4619
- job_id: external_exports.string(),
4639
+ job_id: reqLine,
4620
4640
  status: external_exports.enum(APPLICATION_STATUSES).optional(),
4621
- resume_id: external_exports.string().optional(),
4622
- cover_letter_id: external_exports.string().optional(),
4623
- applied_at: external_exports.string().optional(),
4624
- notes: external_exports.string().optional()
4641
+ resume_id: optLine,
4642
+ cover_letter_id: optLine,
4643
+ applied_at: optLine,
4644
+ notes: optNote
4625
4645
  });
4626
4646
  var ApplicationStatusUpdateSchema = external_exports.object({
4627
- job_id: external_exports.string().optional(),
4628
- application_id: external_exports.string().optional(),
4647
+ job_id: optLine,
4648
+ application_id: optLine,
4629
4649
  status: external_exports.enum(APPLICATION_STATUSES),
4630
- note: external_exports.string().optional().describe("\uC0C1\uD0DC \uBCC0\uACBD \uC0AC\uC720/\uBA54\uBAA8")
4650
+ note: optNote.describe("\uC0C1\uD0DC \uBCC0\uACBD \uC0AC\uC720/\uBA54\uBAA8")
4631
4651
  });
4632
4652
  var ApplicationRecordSchema = external_exports.object({
4633
4653
  ...baseRecord,
@@ -4639,24 +4659,24 @@ var ApplicationRecordSchema = external_exports.object({
4639
4659
  notes: external_exports.string().nullable()
4640
4660
  });
4641
4661
  var StarGuideSchema = external_exports.object({
4642
- question: external_exports.string(),
4643
- situation: external_exports.string().optional(),
4644
- task: external_exports.string().optional(),
4645
- action: external_exports.string().optional(),
4646
- result: external_exports.string().optional()
4662
+ question: external_exports.string().max(MAX_NOTE),
4663
+ situation: optNote,
4664
+ task: optNote,
4665
+ action: optNote,
4666
+ result: optNote
4647
4667
  });
4648
4668
  var InterviewQuestionSchema = external_exports.object({
4649
- question: external_exports.string(),
4650
- intent: external_exports.string().optional().describe("\uC9C8\uBB38 \uC758\uB3C4"),
4651
- followups: external_exports.array(external_exports.string()).optional().describe("\uC608\uC0C1 \uAF2C\uB9AC \uC9C8\uBB38"),
4652
- answer_outline: external_exports.string().optional().describe("\uB2F5\uBCC0 \uAC00\uC774\uB4DC/\uD575\uC2EC \uD3EC\uC778\uD2B8")
4669
+ question: external_exports.string().max(MAX_NOTE),
4670
+ intent: external_exports.string().max(MAX_NOTE).optional().describe("\uC9C8\uBB38 \uC758\uB3C4"),
4671
+ followups: strList.optional().describe("\uC608\uC0C1 \uAF2C\uB9AC \uC9C8\uBB38"),
4672
+ answer_outline: optBody.describe("\uB2F5\uBCC0 \uAC00\uC774\uB4DC/\uD575\uC2EC \uD3EC\uC778\uD2B8")
4653
4673
  });
4654
4674
  var InterviewPrepInputSchema = external_exports.object({
4655
- job_id: external_exports.string(),
4656
- questions: external_exports.array(InterviewQuestionSchema).optional(),
4657
- star_guides: external_exports.array(StarGuideSchema).optional(),
4658
- self_introduction: external_exports.string().optional().describe("1\uBD84 \uC790\uAE30\uC18C\uAC1C \uCD08\uC548"),
4659
- notes: external_exports.string().optional().describe("\uBA74\uC811 \uD6C4\uAE30/\uBA54\uBAA8")
4675
+ job_id: reqLine,
4676
+ questions: external_exports.array(InterviewQuestionSchema).max(MAX_ITEMS).optional(),
4677
+ star_guides: external_exports.array(StarGuideSchema).max(MAX_ITEMS).optional(),
4678
+ self_introduction: optBody.describe("1\uBD84 \uC790\uAE30\uC18C\uAC1C \uCD08\uC548"),
4679
+ notes: optNote.describe("\uBA74\uC811 \uD6C4\uAE30/\uBA54\uBAA8")
4660
4680
  });
4661
4681
  var InterviewPrepRecordSchema = external_exports.object({
4662
4682
  ...baseRecord,