@smartytalent/openai-tools 0.9.56 → 0.9.57
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/dist/tools.json +84 -10
- package/package.json +1 -1
package/dist/tools.json
CHANGED
|
@@ -5189,6 +5189,19 @@
|
|
|
5189
5189
|
"maximum": 1000,
|
|
5190
5190
|
"description": "Stage 3 (2026-10-06): how many people the job hires (brief.intakeContext.headcount). Written by the job build (copied); PATCH-able (an integer from 1 to 1000); null clears it."
|
|
5191
5191
|
},
|
|
5192
|
+
"workingTime": {
|
|
5193
|
+
"type": "array",
|
|
5194
|
+
"items": {
|
|
5195
|
+
"type": "string",
|
|
5196
|
+
"enum": [
|
|
5197
|
+
"1/4",
|
|
5198
|
+
"1/2",
|
|
5199
|
+
"3/4",
|
|
5200
|
+
"full-time"
|
|
5201
|
+
]
|
|
5202
|
+
},
|
|
5203
|
+
"description": "The strict first gate (S.K. 2026-10-07): the working-time fractions the hiring manager's contract offers, read off brief.employmentType by the job build (code, never a model: '1/2, 3/4 or full-time' -> the three tokens; a text naming no fraction leaves the field absent). The application form asks 'which working time?' with the four fractions and rejects a choice the job does not offer - only when the job offers a part-time fraction or several fractions (a full-time-only job keeps the minimum of fields). Not PATCH-able: a rebuild of the job reads it again."
|
|
5204
|
+
},
|
|
5192
5205
|
"languageCode": {
|
|
5193
5206
|
"type": "string",
|
|
5194
5207
|
"description": "Primary language code for the job posting (e.g. en-US, pl-PL)"
|
|
@@ -6163,6 +6176,19 @@
|
|
|
6163
6176
|
"maximum": 1000,
|
|
6164
6177
|
"description": "Stage 3 (2026-10-06): how many people the job hires (brief.intakeContext.headcount). Written by the job build (copied); PATCH-able (an integer from 1 to 1000); null clears it."
|
|
6165
6178
|
},
|
|
6179
|
+
"workingTime": {
|
|
6180
|
+
"type": "array",
|
|
6181
|
+
"items": {
|
|
6182
|
+
"type": "string",
|
|
6183
|
+
"enum": [
|
|
6184
|
+
"1/4",
|
|
6185
|
+
"1/2",
|
|
6186
|
+
"3/4",
|
|
6187
|
+
"full-time"
|
|
6188
|
+
]
|
|
6189
|
+
},
|
|
6190
|
+
"description": "The strict first gate (S.K. 2026-10-07): the working-time fractions the hiring manager's contract offers, read off brief.employmentType by the job build (code, never a model: '1/2, 3/4 or full-time' -> the three tokens; a text naming no fraction leaves the field absent). The application form asks 'which working time?' with the four fractions and rejects a choice the job does not offer - only when the job offers a part-time fraction or several fractions (a full-time-only job keeps the minimum of fields). Not PATCH-able: a rebuild of the job reads it again."
|
|
6191
|
+
},
|
|
6166
6192
|
"languageCode": {
|
|
6167
6193
|
"type": "string",
|
|
6168
6194
|
"description": "Primary language code for the job posting (e.g. en-US, pl-PL)"
|
|
@@ -7235,7 +7261,8 @@
|
|
|
7235
7261
|
},
|
|
7236
7262
|
"meta": {
|
|
7237
7263
|
"type": "object",
|
|
7238
|
-
"additionalProperties": true
|
|
7264
|
+
"additionalProperties": true,
|
|
7265
|
+
"description": "The analysis' record on the row. `verdict` (verdict-v1): band, code, the must outcomes (`must.met[]` with `reason: formDeclared | declaredOnly`, `must.failed[]`, `must.unverified[]`, `must.toClarify[]` = the salary without a figure), and - the screening package A, 2026-10-07 - the card's flags `verdict.declaredOnly[]` (musts met on the application form's word alone), `verdict.noReadableDocument` (the document gave the extraction nothing), `verdict.salaryToClarify` (no salary figure on the candidate's side, or the salary scale's 3: 5-20% above the ceiling or more than 5% below the floor), `verdict.formSetAside[]` (the criteria whose application-form answer RecOps set aside when it ordered the analysis past the knockout - the CV decided them; `must.unverified[]` entries with `reason: formSetAside` where the CV said nothing about the requirement; the answers and the reason are in `knockoutReleased`). `knockoutFailure.failures[]` (a row the form rejected: `fieldId`, `verifies`, `expected`, `actual`; package B adds `label`, `answerLabel`, `expectedLabel` in the job's language - the reason RecOps reads). `knockoutReleased` (package B: RecOps' candidates:analyze past the form's knockout - `by`, `at`, `taskId`, `reason`, `knockout {failures, band}`, `submissionId` = the application released; kept after the analysis, while `decision` reads `analyzeAnyway` only until the verdict's decision replaces it; a later re-application keeps the key, so the current application was analysed past the knockout only when `submissionId` equals `lastSubmissionId`). `decision`, `mandatoryCheck`, `provenance`, `lastSubmissionId` and the arc keys as before."
|
|
7239
7266
|
}
|
|
7240
7267
|
}
|
|
7241
7268
|
},
|
|
@@ -7294,6 +7321,26 @@
|
|
|
7294
7321
|
},
|
|
7295
7322
|
"id": {
|
|
7296
7323
|
"type": "string"
|
|
7324
|
+
},
|
|
7325
|
+
"meta": {
|
|
7326
|
+
"title": "CandidateFileLinkMetaSchema",
|
|
7327
|
+
"type": "object",
|
|
7328
|
+
"description": "Plan #2 (S.K. 2026-10-08): the state of this file OF THE APPLICATION - every file of it is linked, read or not; its type is the file's own `type`. Absent on links written before.",
|
|
7329
|
+
"properties": {
|
|
7330
|
+
"status": {
|
|
7331
|
+
"type": "string",
|
|
7332
|
+
"enum": [
|
|
7333
|
+
"read",
|
|
7334
|
+
"notRead",
|
|
7335
|
+
"failed"
|
|
7336
|
+
],
|
|
7337
|
+
"description": "read = the CV, or an evidence document the document reader read; notRead = typed, not read for facts; failed = the file failed or was refused."
|
|
7338
|
+
},
|
|
7339
|
+
"reason": {
|
|
7340
|
+
"type": "string",
|
|
7341
|
+
"description": "notRead: limit (an evidence document past the reader's 5) | secondCv | identityDocument | noFactSource (a cover letter, references, the rest); failed: the file's error code (DOCUMENT_TOO_LARGE, UNSUPPORTED_FORMAT, CONVERSION_FAILED, DOCUMENT_UNREADABLE, FILE_ANALYSIS_FAILED)."
|
|
7342
|
+
}
|
|
7343
|
+
}
|
|
7297
7344
|
}
|
|
7298
7345
|
}
|
|
7299
7346
|
}
|
|
@@ -7872,7 +7919,8 @@
|
|
|
7872
7919
|
},
|
|
7873
7920
|
"meta": {
|
|
7874
7921
|
"type": "object",
|
|
7875
|
-
"additionalProperties": true
|
|
7922
|
+
"additionalProperties": true,
|
|
7923
|
+
"description": "The analysis' record on the row. `verdict` (verdict-v1): band, code, the must outcomes (`must.met[]` with `reason: formDeclared | declaredOnly`, `must.failed[]`, `must.unverified[]`, `must.toClarify[]` = the salary without a figure), and - the screening package A, 2026-10-07 - the card's flags `verdict.declaredOnly[]` (musts met on the application form's word alone), `verdict.noReadableDocument` (the document gave the extraction nothing), `verdict.salaryToClarify` (no salary figure on the candidate's side, or the salary scale's 3: 5-20% above the ceiling or more than 5% below the floor), `verdict.formSetAside[]` (the criteria whose application-form answer RecOps set aside when it ordered the analysis past the knockout - the CV decided them; `must.unverified[]` entries with `reason: formSetAside` where the CV said nothing about the requirement; the answers and the reason are in `knockoutReleased`). `knockoutFailure.failures[]` (a row the form rejected: `fieldId`, `verifies`, `expected`, `actual`; package B adds `label`, `answerLabel`, `expectedLabel` in the job's language - the reason RecOps reads). `knockoutReleased` (package B: RecOps' candidates:analyze past the form's knockout - `by`, `at`, `taskId`, `reason`, `knockout {failures, band}`, `submissionId` = the application released; kept after the analysis, while `decision` reads `analyzeAnyway` only until the verdict's decision replaces it; a later re-application keeps the key, so the current application was analysed past the knockout only when `submissionId` equals `lastSubmissionId`). `decision`, `mandatoryCheck`, `provenance`, `lastSubmissionId` and the arc keys as before."
|
|
7876
7924
|
}
|
|
7877
7925
|
}
|
|
7878
7926
|
},
|
|
@@ -7931,6 +7979,26 @@
|
|
|
7931
7979
|
},
|
|
7932
7980
|
"id": {
|
|
7933
7981
|
"type": "string"
|
|
7982
|
+
},
|
|
7983
|
+
"meta": {
|
|
7984
|
+
"title": "CandidateFileLinkMetaSchema",
|
|
7985
|
+
"type": "object",
|
|
7986
|
+
"description": "Plan #2 (S.K. 2026-10-08): the state of this file OF THE APPLICATION - every file of it is linked, read or not; its type is the file's own `type`. Absent on links written before.",
|
|
7987
|
+
"properties": {
|
|
7988
|
+
"status": {
|
|
7989
|
+
"type": "string",
|
|
7990
|
+
"enum": [
|
|
7991
|
+
"read",
|
|
7992
|
+
"notRead",
|
|
7993
|
+
"failed"
|
|
7994
|
+
],
|
|
7995
|
+
"description": "read = the CV, or an evidence document the document reader read; notRead = typed, not read for facts; failed = the file failed or was refused."
|
|
7996
|
+
},
|
|
7997
|
+
"reason": {
|
|
7998
|
+
"type": "string",
|
|
7999
|
+
"description": "notRead: limit (an evidence document past the reader's 5) | secondCv | identityDocument | noFactSource (a cover letter, references, the rest); failed: the file's error code (DOCUMENT_TOO_LARGE, UNSUPPORTED_FORMAT, CONVERSION_FAILED, DOCUMENT_UNREADABLE, FILE_ANALYSIS_FAILED)."
|
|
8000
|
+
}
|
|
8001
|
+
}
|
|
7934
8002
|
}
|
|
7935
8003
|
}
|
|
7936
8004
|
}
|
|
@@ -8266,7 +8334,8 @@
|
|
|
8266
8334
|
"type": "string"
|
|
8267
8335
|
},
|
|
8268
8336
|
"status": {
|
|
8269
|
-
"type": "string"
|
|
8337
|
+
"type": "string",
|
|
8338
|
+
"description": "pending | uploaded | success | failed | archived. `failed` = the conversion or the analysis failed, or the file was REFUSED at intake (plan #2 P2: too large / an unsupported format) - meta.failure says which."
|
|
8270
8339
|
},
|
|
8271
8340
|
"extension": {
|
|
8272
8341
|
"type": "string"
|
|
@@ -8281,7 +8350,8 @@
|
|
|
8281
8350
|
"type": "string"
|
|
8282
8351
|
},
|
|
8283
8352
|
"type": {
|
|
8284
|
-
"type": "string"
|
|
8353
|
+
"type": "string",
|
|
8354
|
+
"description": "The document's type as the file reader classified it (plan #2): resume, coverLetter, certificate (diplomas included), licence (a driving licence, a driver card), identityDocument (an ID card, a passport, a residence card), referenceLetter, portfolio, assessmentResult, jobBrief, jobDescription, document (anything else); videoRecording / audioRecording for media; undefined before the reader ran. Not an enum: rows written earlier may carry other values."
|
|
8285
8355
|
},
|
|
8286
8356
|
"kind": {
|
|
8287
8357
|
"type": "string",
|
|
@@ -8495,7 +8565,8 @@
|
|
|
8495
8565
|
"type": "string"
|
|
8496
8566
|
},
|
|
8497
8567
|
"status": {
|
|
8498
|
-
"type": "string"
|
|
8568
|
+
"type": "string",
|
|
8569
|
+
"description": "pending | uploaded | success | failed | archived. `failed` = the conversion or the analysis failed, or the file was REFUSED at intake (plan #2 P2: too large / an unsupported format) - meta.failure says which."
|
|
8499
8570
|
},
|
|
8500
8571
|
"extension": {
|
|
8501
8572
|
"type": "string"
|
|
@@ -8510,7 +8581,8 @@
|
|
|
8510
8581
|
"type": "string"
|
|
8511
8582
|
},
|
|
8512
8583
|
"type": {
|
|
8513
|
-
"type": "string"
|
|
8584
|
+
"type": "string",
|
|
8585
|
+
"description": "The document's type as the file reader classified it (plan #2): resume, coverLetter, certificate (diplomas included), licence (a driving licence, a driver card), identityDocument (an ID card, a passport, a residence card), referenceLetter, portfolio, assessmentResult, jobBrief, jobDescription, document (anything else); videoRecording / audioRecording for media; undefined before the reader ran. Not an enum: rows written earlier may carry other values."
|
|
8514
8586
|
},
|
|
8515
8587
|
"kind": {
|
|
8516
8588
|
"type": "string",
|
|
@@ -9711,7 +9783,7 @@
|
|
|
9711
9783
|
},
|
|
9712
9784
|
"content": {
|
|
9713
9785
|
"type": "string",
|
|
9714
|
-
"description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label.\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select). The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
|
|
9786
|
+
"description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label. A `file` field may take several files: `multiple:\ntrue` and `maxFiles` (the apply form's CV field: 6 - the CV + 5\ndocuments; plan #2, S.K. 2026-10-08: no separate field, the CV is\nfound by its type).\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select; since the strict first gate\nof 2026-10-07 it may be an ARRAY of option values - any of them\npasses: the weekends select 0-4 gating at the job's minimum, the\nworking-time select 1/4 / 1/2 / 3/4 / full-time gating on the\nfractions the job offers; the experience select gates on\n`{N}-years-or-more` aligned to the job's minimum). The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
|
|
9715
9787
|
},
|
|
9716
9788
|
"publish": {
|
|
9717
9789
|
"type": "boolean",
|
|
@@ -9848,7 +9920,7 @@
|
|
|
9848
9920
|
},
|
|
9849
9921
|
"content": {
|
|
9850
9922
|
"type": "string",
|
|
9851
|
-
"description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label.\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select). The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
|
|
9923
|
+
"description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label. A `file` field may take several files: `multiple:\ntrue` and `maxFiles` (the apply form's CV field: 6 - the CV + 5\ndocuments; plan #2, S.K. 2026-10-08: no separate field, the CV is\nfound by its type).\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select; since the strict first gate\nof 2026-10-07 it may be an ARRAY of option values - any of them\npasses: the weekends select 0-4 gating at the job's minimum, the\nworking-time select 1/4 / 1/2 / 3/4 / full-time gating on the\nfractions the job offers; the experience select gates on\n`{N}-years-or-more` aligned to the job's minimum). The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
|
|
9852
9924
|
},
|
|
9853
9925
|
"publish": {
|
|
9854
9926
|
"type": "boolean",
|
|
@@ -13492,6 +13564,8 @@
|
|
|
13492
13564
|
},
|
|
13493
13565
|
"files": {
|
|
13494
13566
|
"type": "array",
|
|
13567
|
+
"maxItems": 10,
|
|
13568
|
+
"description": "The application's files (at most 10; each fileKey one the form's upload door issued - #66). The CV is found by its type (plan #2), not by its position.",
|
|
13495
13569
|
"items": {
|
|
13496
13570
|
"type": "object",
|
|
13497
13571
|
"properties": {
|
|
@@ -18300,7 +18374,7 @@
|
|
|
18300
18374
|
"route": {
|
|
18301
18375
|
"type": "string",
|
|
18302
18376
|
"maxLength": 64,
|
|
18303
|
-
"description": "Workflow routing key (`namespace:verb`). The operator e-mail lane has exactly three: `emails:reply`, `emails:compose`, `emails:send` - nothing else. Optional, normalised to lowercase and shape-validated at create, stamped on the row and IMMUTABLE afterwards - a PATCH carrying route is rejected with 400. Creating a task whose route matches emails:* requires role recruiter/recops/admin/owner (hiringmanager and auditor are denied); the same gate guards a PATCH of an emails:* row."
|
|
18377
|
+
"description": "Workflow routing key (`namespace:verb`). The operator e-mail lane has exactly three: `emails:reply`, `emails:compose`, `emails:send` - nothing else. Optional, normalised to lowercase and shape-validated at create, stamped on the row and IMMUTABLE afterwards - a PATCH carrying route is rejected with 400. Creating a task whose route matches emails:* requires role recruiter/recops/admin/owner (hiringmanager and auditor are denied); the same gate guards a PATCH of an emails:* row. The RecOps doors on a candidate ride the same key with the candidate in `relationships.candidates` and their order in `meta`: `candidates:opinion` (`meta.override`, see the criterion's `override`), `candidates:stage` (`meta.stage`), and - the screening package B, 2026-10-07 - `candidates:analyze` (`meta.analyze {reason}`: analyse a candidate the application form knocked out; the action clears the knockout, keeps it in `meta.decision` history and runs the analysis on the pointed submission; the task closes `done`, or `failed` with the reason when the row is not a knockout)."
|
|
18304
18378
|
},
|
|
18305
18379
|
"kind": {
|
|
18306
18380
|
"type": "string",
|
|
@@ -18603,7 +18677,7 @@
|
|
|
18603
18677
|
"route": {
|
|
18604
18678
|
"type": "string",
|
|
18605
18679
|
"maxLength": 64,
|
|
18606
|
-
"description": "Workflow routing key (`namespace:verb`). The operator e-mail lane has exactly three: `emails:reply`, `emails:compose`, `emails:send` - nothing else. Optional, normalised to lowercase and shape-validated at create, stamped on the row and IMMUTABLE afterwards - a PATCH carrying route is rejected with 400. Creating a task whose route matches emails:* requires role recruiter/recops/admin/owner (hiringmanager and auditor are denied); the same gate guards a PATCH of an emails:* row."
|
|
18680
|
+
"description": "Workflow routing key (`namespace:verb`). The operator e-mail lane has exactly three: `emails:reply`, `emails:compose`, `emails:send` - nothing else. Optional, normalised to lowercase and shape-validated at create, stamped on the row and IMMUTABLE afterwards - a PATCH carrying route is rejected with 400. Creating a task whose route matches emails:* requires role recruiter/recops/admin/owner (hiringmanager and auditor are denied); the same gate guards a PATCH of an emails:* row. The RecOps doors on a candidate ride the same key with the candidate in `relationships.candidates` and their order in `meta`: `candidates:opinion` (`meta.override`, see the criterion's `override`), `candidates:stage` (`meta.stage`), and - the screening package B, 2026-10-07 - `candidates:analyze` (`meta.analyze {reason}`: analyse a candidate the application form knocked out; the action clears the knockout, keeps it in `meta.decision` history and runs the analysis on the pointed submission; the task closes `done`, or `failed` with the reason when the row is not a knockout)."
|
|
18607
18681
|
},
|
|
18608
18682
|
"kind": {
|
|
18609
18683
|
"type": "string",
|