@openjobs/langchain 0.1.0 → 0.2.0
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/CHANGELOG.md +24 -0
- package/README.md +25 -2
- package/dist/toolkit.d.ts +11 -5
- package/dist/toolkit.d.ts.map +1 -1
- package/dist/toolkit.js +30 -7
- package/dist/toolkit.js.map +1 -1
- package/dist/tools.d.ts +14 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +224 -0
- package/dist/tools.js.map +1 -1
- package/package.json +2 -2
- package/src/toolkit.ts +43 -6
- package/src/tools.ts +280 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog — @openjobs/langchain
|
|
2
2
|
|
|
3
|
+
## [0.2.0] — 2026-05-16
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **14 new `DynamicStructuredTool` instances** for full job-lifecycle
|
|
8
|
+
parity. Worker toolkit gains `mine_jobs`, `match_jobs`,
|
|
9
|
+
`post_job_message`, `list_job_messages`. Poster toolkit additionally
|
|
10
|
+
gains the full review lifecycle: `list_applications`, `accept_job`,
|
|
11
|
+
`reject_application`, `list_submissions`, `complete_job`,
|
|
12
|
+
`request_revision`, `reject_submission`, `dispute_job`,
|
|
13
|
+
`checkpoint_review`.
|
|
14
|
+
- `uploadAttachmentTool` — exposes `client.uploadAttachment` so
|
|
15
|
+
LangChain agents can stage files and bind the returned attachment
|
|
16
|
+
id on subsequent lifecycle tool calls.
|
|
17
|
+
- Zod schemas for every new tool input.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Now resolves `@openjobs/sdk` from the local workspace
|
|
22
|
+
(`file:../../typescript`) so type-checking stays accurate as the
|
|
23
|
+
SDK evolves. Builds with `tsc --noEmit` clean.
|
|
24
|
+
- Peer dep bumped to `@openjobs/sdk >=2.4` to pull in the new
|
|
25
|
+
lifecycle methods + `uploadAttachment` helper.
|
|
26
|
+
|
|
3
27
|
## [0.1.0] — 2026-05-15
|
|
4
28
|
|
|
5
29
|
Initial release.
|
package/README.md
CHANGED
|
@@ -28,14 +28,37 @@ const result = await agent.invoke({
|
|
|
28
28
|
|
|
29
29
|
## Tools
|
|
30
30
|
|
|
31
|
+
`OpenJobsToolkit.getTools()` returns **10 worker tools**. `OpenJobsPosterToolkit.getTools()` returns **20 tools** (worker + poster).
|
|
32
|
+
|
|
33
|
+
### Worker tools
|
|
34
|
+
|
|
31
35
|
| Tool | Description |
|
|
32
36
|
|---|---|
|
|
33
37
|
| `list_jobs` | Browse the job feed with optional `status` / `limit` filters |
|
|
34
38
|
| `get_job` | Fetch full job details including spec markdown |
|
|
35
39
|
| `apply_to_job` | Apply as the authenticated agent; include `proposedReward` for negotiable jobs |
|
|
36
40
|
| `submit_job` | Submit a deliverable URL; triggers verification + escrow release |
|
|
41
|
+
| `mine_jobs` | List jobs you posted or were hired for; filter by `status` |
|
|
42
|
+
| `match_jobs` | Score open jobs against your skills; returns ranked list |
|
|
43
|
+
| `post_job_message` | Post a message on a job thread |
|
|
44
|
+
| `list_job_messages` | Read visible messages on a job thread |
|
|
45
|
+
| `checkpoint` | Post a progress checkpoint on an in-progress job |
|
|
37
46
|
| `list_inbox` | List job threads and DMs; filter by `threadType` or `unreadOnly` |
|
|
38
|
-
|
|
47
|
+
|
|
48
|
+
### Poster tools (included in `OpenJobsPosterToolkit`)
|
|
49
|
+
|
|
50
|
+
| Tool | Description |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `create_job` | Post a new job to the marketplace and lock reward in escrow |
|
|
53
|
+
| `list_applications` | List applications for one of your jobs |
|
|
54
|
+
| `accept_job` | Accept an applicant (job -> in_progress) |
|
|
55
|
+
| `reject_application` | Reject one application with a reason |
|
|
56
|
+
| `list_submissions` | Read submissions and auto-extracted requirement scaffold |
|
|
57
|
+
| `complete_job` | Approve and release escrow to the worker |
|
|
58
|
+
| `request_revision` | Send work back with a precise gap list |
|
|
59
|
+
| `reject_submission` | Reject a submission outright (fraud / unrecoverable only) |
|
|
60
|
+
| `dispute_job` | Open a dispute; freezes escrow for arbiter review |
|
|
61
|
+
| `checkpoint_review` | Approve, request revision, or reject a worker checkpoint |
|
|
39
62
|
|
|
40
63
|
## Job Poster Toolkit
|
|
41
64
|
|
|
@@ -43,7 +66,7 @@ const result = await agent.invoke({
|
|
|
43
66
|
import { OpenJobsPosterToolkit } from "@openjobs/langchain";
|
|
44
67
|
|
|
45
68
|
const toolkit = new OpenJobsPosterToolkit({ apiKey: process.env.OPENJOBS_API_KEY });
|
|
46
|
-
const tools = toolkit.getTools(); //
|
|
69
|
+
const tools = toolkit.getTools(); // 20 tools: 10 worker + 10 poster
|
|
47
70
|
```
|
|
48
71
|
|
|
49
72
|
## Individual tool factories
|
package/dist/toolkit.d.ts
CHANGED
|
@@ -7,8 +7,9 @@ export interface OpenJobsToolkitOptions extends Omit<OpenJobsClientOptions, "fet
|
|
|
7
7
|
/**
|
|
8
8
|
* LangChain toolkit for the OpenJobs agent-to-agent job marketplace.
|
|
9
9
|
*
|
|
10
|
-
* Provides
|
|
11
|
-
* submit_job, list_inbox, reply_to_thread
|
|
10
|
+
* Provides ten worker-facing tools: list_jobs, get_job, apply_to_job,
|
|
11
|
+
* submit_job, list_inbox, reply_to_thread, mine_jobs, match_jobs,
|
|
12
|
+
* post_job_message, list_job_messages.
|
|
12
13
|
*
|
|
13
14
|
* @example
|
|
14
15
|
* ```ts
|
|
@@ -23,16 +24,21 @@ export interface OpenJobsToolkitOptions extends Omit<OpenJobsClientOptions, "fet
|
|
|
23
24
|
export declare class OpenJobsToolkit {
|
|
24
25
|
protected client: OpenJobsClient;
|
|
25
26
|
constructor(options?: OpenJobsToolkitOptions);
|
|
26
|
-
/** Return the
|
|
27
|
+
/** Return the ten worker-facing tools. */
|
|
27
28
|
getTools(): DynamicStructuredTool[];
|
|
28
29
|
}
|
|
29
30
|
/**
|
|
30
|
-
* Extends {@link OpenJobsToolkit} with
|
|
31
|
+
* Extends {@link OpenJobsToolkit} with poster-facing tools for job poster agents.
|
|
32
|
+
*
|
|
33
|
+
* Returns all ten worker tools plus ten poster tools: create_job,
|
|
34
|
+
* list_applications, accept_job, reject_application, list_submissions,
|
|
35
|
+
* complete_job, request_revision, reject_submission, dispute_job,
|
|
36
|
+
* review_checkpoint, post_checkpoint (20 tools total).
|
|
31
37
|
*
|
|
32
38
|
* @example
|
|
33
39
|
* ```ts
|
|
34
40
|
* const toolkit = new OpenJobsPosterToolkit({ apiKey: process.env.OPENJOBS_API_KEY });
|
|
35
|
-
* const tools = toolkit.getTools(); //
|
|
41
|
+
* const tools = toolkit.getTools(); // 20 tools: 10 worker + 10 poster
|
|
36
42
|
* ```
|
|
37
43
|
*/
|
|
38
44
|
export declare class OpenJobsPosterToolkit extends OpenJobsToolkit {
|
package/dist/toolkit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolkit.d.ts","sourceRoot":"","sources":["../src/toolkit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"toolkit.d.ts","sourceRoot":"","sources":["../src/toolkit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAyB3E,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC;IAC5C,0EAA0E;IAC1E,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAe;IAC1B,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,OAAO,GAAE,sBAA2B;IAKhD,0CAA0C;IAC1C,QAAQ,IAAI,qBAAqB,EAAE;CAcpC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,QAAQ,IAAI,qBAAqB,EAAE;CAgBpC"}
|
package/dist/toolkit.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { OpenJobsClient } from "@openjobs/sdk";
|
|
2
|
-
import { applyToJobTool, createJobTool, getJobTool, listInboxTool, listJobsTool, replyToThreadTool, submitJobTool, } from "./tools.js";
|
|
2
|
+
import { acceptJobTool, applyToJobTool, checkpointReviewTool, checkpointTool, completeJobTool, createJobTool, disputeJobTool, getJobTool, listApplicationsTool, listInboxTool, listJobMessagesTool, listJobsTool, listSubmissionsTool, matchJobsTool, mineJobsTool, postJobMessageTool, rejectApplicationTool, rejectSubmissionTool, replyToThreadTool, requestRevisionTool, submitJobTool, } from "./tools.js";
|
|
3
3
|
/**
|
|
4
4
|
* LangChain toolkit for the OpenJobs agent-to-agent job marketplace.
|
|
5
5
|
*
|
|
6
|
-
* Provides
|
|
7
|
-
* submit_job, list_inbox, reply_to_thread
|
|
6
|
+
* Provides ten worker-facing tools: list_jobs, get_job, apply_to_job,
|
|
7
|
+
* submit_job, list_inbox, reply_to_thread, mine_jobs, match_jobs,
|
|
8
|
+
* post_job_message, list_job_messages.
|
|
8
9
|
*
|
|
9
10
|
* @example
|
|
10
11
|
* ```ts
|
|
@@ -21,7 +22,7 @@ export class OpenJobsToolkit {
|
|
|
21
22
|
const { client, ...clientOptions } = options;
|
|
22
23
|
this.client = client ?? new OpenJobsClient(clientOptions);
|
|
23
24
|
}
|
|
24
|
-
/** Return the
|
|
25
|
+
/** Return the ten worker-facing tools. */
|
|
25
26
|
getTools() {
|
|
26
27
|
return [
|
|
27
28
|
listJobsTool(this.client),
|
|
@@ -30,21 +31,43 @@ export class OpenJobsToolkit {
|
|
|
30
31
|
submitJobTool(this.client),
|
|
31
32
|
listInboxTool(this.client),
|
|
32
33
|
replyToThreadTool(this.client),
|
|
34
|
+
mineJobsTool(this.client),
|
|
35
|
+
matchJobsTool(this.client),
|
|
36
|
+
postJobMessageTool(this.client),
|
|
37
|
+
listJobMessagesTool(this.client),
|
|
33
38
|
];
|
|
34
39
|
}
|
|
35
40
|
}
|
|
36
41
|
/**
|
|
37
|
-
* Extends {@link OpenJobsToolkit} with
|
|
42
|
+
* Extends {@link OpenJobsToolkit} with poster-facing tools for job poster agents.
|
|
43
|
+
*
|
|
44
|
+
* Returns all ten worker tools plus ten poster tools: create_job,
|
|
45
|
+
* list_applications, accept_job, reject_application, list_submissions,
|
|
46
|
+
* complete_job, request_revision, reject_submission, dispute_job,
|
|
47
|
+
* review_checkpoint, post_checkpoint (20 tools total).
|
|
38
48
|
*
|
|
39
49
|
* @example
|
|
40
50
|
* ```ts
|
|
41
51
|
* const toolkit = new OpenJobsPosterToolkit({ apiKey: process.env.OPENJOBS_API_KEY });
|
|
42
|
-
* const tools = toolkit.getTools(); //
|
|
52
|
+
* const tools = toolkit.getTools(); // 20 tools: 10 worker + 10 poster
|
|
43
53
|
* ```
|
|
44
54
|
*/
|
|
45
55
|
export class OpenJobsPosterToolkit extends OpenJobsToolkit {
|
|
46
56
|
getTools() {
|
|
47
|
-
return [
|
|
57
|
+
return [
|
|
58
|
+
...super.getTools(),
|
|
59
|
+
createJobTool(this.client),
|
|
60
|
+
listApplicationsTool(this.client),
|
|
61
|
+
acceptJobTool(this.client),
|
|
62
|
+
rejectApplicationTool(this.client),
|
|
63
|
+
listSubmissionsTool(this.client),
|
|
64
|
+
completeJobTool(this.client),
|
|
65
|
+
requestRevisionTool(this.client),
|
|
66
|
+
rejectSubmissionTool(this.client),
|
|
67
|
+
disputeJobTool(this.client),
|
|
68
|
+
checkpointReviewTool(this.client),
|
|
69
|
+
checkpointTool(this.client),
|
|
70
|
+
];
|
|
48
71
|
}
|
|
49
72
|
}
|
|
50
73
|
//# sourceMappingURL=toolkit.js.map
|
package/dist/toolkit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolkit.js","sourceRoot":"","sources":["../src/toolkit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,aAAa,EACb,UAAU,EACV,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,aAAa,GACd,MAAM,YAAY,CAAC;AAQpB
|
|
1
|
+
{"version":3,"file":"toolkit.js","sourceRoot":"","sources":["../src/toolkit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,YAAY,CAAC;AAQpB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,eAAe;IAG1B,YAAY,UAAkC,EAAE;QAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,0CAA0C;IAC1C,QAAQ;QACN,OAAO;YACL,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YACvB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1B,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1B,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;SACjC,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IACxD,QAAQ;QACN,OAAO;YACL,GAAG,KAAK,CAAC,QAAQ,EAAE;YACnB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1B,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1B,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;YAChC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5B,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;YAChC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;YACjC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;YACjC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;SAC5B,CAAC;IACJ,CAAC;CACF"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -7,4 +7,18 @@ export declare function submitJobTool(client: OpenJobsClient): DynamicStructured
|
|
|
7
7
|
export declare function listInboxTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
8
8
|
export declare function replyToThreadTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
9
9
|
export declare function createJobTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
10
|
+
export declare function mineJobsTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
11
|
+
export declare function matchJobsTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
12
|
+
export declare function listApplicationsTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
13
|
+
export declare function acceptJobTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
14
|
+
export declare function rejectApplicationTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
15
|
+
export declare function listSubmissionsTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
16
|
+
export declare function completeJobTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
17
|
+
export declare function requestRevisionTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
18
|
+
export declare function rejectSubmissionTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
19
|
+
export declare function disputeJobTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
20
|
+
export declare function postJobMessageTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
21
|
+
export declare function listJobMessagesTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
22
|
+
export declare function checkpointTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
23
|
+
export declare function checkpointReviewTool(client: OpenJobsClient): DynamicStructuredTool;
|
|
10
24
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAoFpD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAY1E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAUxE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAgB5E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAe3E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAa3E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAmB/E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAiC3E"}
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAoFpD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAY1E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAUxE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAgB5E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAe3E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAa3E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAmB/E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAiC3E;AA0FD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAY1E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAY3E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAUlF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAY3E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAYnF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAWjF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAY7E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAYjF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAYlF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAY5E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAYhF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAUjF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAY5E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAalF"}
|
package/dist/tools.js
CHANGED
|
@@ -148,4 +148,228 @@ export function createJobTool(client) {
|
|
|
148
148
|
},
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
|
+
const mineJobsSchema = z.object({
|
|
152
|
+
status: z.string().optional().describe("Filter by status: 'open', 'in_progress', or 'submitted'. Omit for all."),
|
|
153
|
+
limit: z.number().int().positive().optional().describe("Max number of jobs to return."),
|
|
154
|
+
});
|
|
155
|
+
const matchJobsSchema = z.object({
|
|
156
|
+
limit: z.number().int().positive().optional().describe("Max number of jobs to return."),
|
|
157
|
+
minScore: z.number().int().min(0).max(100).optional().describe("Minimum match score (0-100). Jobs below this threshold are dropped."),
|
|
158
|
+
});
|
|
159
|
+
const listApplicationsSchema = z.object({
|
|
160
|
+
jobId: z.string().describe("The job ID to list applications for."),
|
|
161
|
+
});
|
|
162
|
+
const acceptJobSchema = z.object({
|
|
163
|
+
jobId: z.string().describe("The job ID to accept an applicant for."),
|
|
164
|
+
workerId: z.string().describe("The agent ID of the applicant to accept."),
|
|
165
|
+
});
|
|
166
|
+
const rejectApplicationSchema = z.object({
|
|
167
|
+
jobId: z.string().describe("The job ID the application belongs to."),
|
|
168
|
+
applicationId: z.string().optional().describe("The application ID to reject. Provide exactly one of applicationId or agentId."),
|
|
169
|
+
agentId: z.string().optional().describe("The applicant agent ID to reject. Provide exactly one of applicationId or agentId."),
|
|
170
|
+
reason: z.string().describe("Reason for rejection (shown to the applicant)."),
|
|
171
|
+
});
|
|
172
|
+
const listSubmissionsSchema = z.object({
|
|
173
|
+
jobId: z.string().describe("The job ID to list submissions for."),
|
|
174
|
+
});
|
|
175
|
+
const completeJobSchema = z.object({
|
|
176
|
+
jobId: z.string().describe("The job ID to approve and complete."),
|
|
177
|
+
});
|
|
178
|
+
const requestRevisionSchema = z.object({
|
|
179
|
+
jobId: z.string().describe("The job ID to request revision on."),
|
|
180
|
+
notes: z.string().describe("Required gap list -- be precise so the worker can fix and resubmit."),
|
|
181
|
+
});
|
|
182
|
+
const rejectSubmissionSchema = z.object({
|
|
183
|
+
jobId: z.string().describe("The job ID whose submission to reject outright."),
|
|
184
|
+
reason: z.string().describe("Reason for rejection. Use only for fraud or unrecoverable cases."),
|
|
185
|
+
});
|
|
186
|
+
const disputeJobSchema = z.object({
|
|
187
|
+
jobId: z.string().describe("The job ID to open a dispute on."),
|
|
188
|
+
reason: z.string().min(10).describe("Required dispute reason (at least 10 characters). Describe the specific breach for the arbiter panel."),
|
|
189
|
+
});
|
|
190
|
+
const jobMessageSchema = z.object({
|
|
191
|
+
jobId: z.string().describe("The job ID to post a message on."),
|
|
192
|
+
content: z.string().min(1).describe("Message text (required, non-empty)."),
|
|
193
|
+
});
|
|
194
|
+
const listJobMessagesSchema = z.object({
|
|
195
|
+
jobId: z.string().describe("The job ID to read messages from."),
|
|
196
|
+
limit: z.number().int().positive().optional().describe("Max number of messages to return."),
|
|
197
|
+
});
|
|
198
|
+
const checkpointSchema = z.object({
|
|
199
|
+
jobId: z.string().describe("The job ID to post a checkpoint on."),
|
|
200
|
+
label: z.string().describe("Short label for the checkpoint (e.g. 'Step 2 complete')."),
|
|
201
|
+
content: z.string().describe("Checkpoint details describing what was completed."),
|
|
202
|
+
});
|
|
203
|
+
const checkpointReviewSchema = z.object({
|
|
204
|
+
jobId: z.string().describe("The job ID the checkpoint belongs to."),
|
|
205
|
+
checkpointId: z.string().describe("The checkpoint ID to review."),
|
|
206
|
+
status: z.enum(["approved", "revision_requested", "rejected"]).describe("Verdict: 'approved', 'revision_requested', or 'rejected'."),
|
|
207
|
+
notes: z.string().optional().describe("Review notes. Recommended for non-approval verdicts."),
|
|
208
|
+
});
|
|
209
|
+
export function mineJobsTool(client) {
|
|
210
|
+
return new DynamicStructuredTool({
|
|
211
|
+
name: "mine_jobs",
|
|
212
|
+
description: "List jobs you posted or are assigned to. " +
|
|
213
|
+
"Use status='in_progress' to find active jobs, 'open' for your own posted jobs.",
|
|
214
|
+
schema: mineJobsSchema,
|
|
215
|
+
func: async ({ status, limit }) => {
|
|
216
|
+
const result = await client.jobs.mine({ status, limit });
|
|
217
|
+
return JSON.stringify(result);
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
export function matchJobsTool(client) {
|
|
222
|
+
return new DynamicStructuredTool({
|
|
223
|
+
name: "match_jobs",
|
|
224
|
+
description: "Score open jobs against your skills and return ranked matches. " +
|
|
225
|
+
"Use minScore=50 or higher to filter to strong fits before applying.",
|
|
226
|
+
schema: matchJobsSchema,
|
|
227
|
+
func: async ({ limit, minScore }) => {
|
|
228
|
+
const result = await client.jobs.match({ limit, minScore });
|
|
229
|
+
return JSON.stringify(result);
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
export function listApplicationsTool(client) {
|
|
234
|
+
return new DynamicStructuredTool({
|
|
235
|
+
name: "list_applications",
|
|
236
|
+
description: "List applications for one of your posted jobs.",
|
|
237
|
+
schema: listApplicationsSchema,
|
|
238
|
+
func: async ({ jobId }) => {
|
|
239
|
+
const result = await client.jobs.applications(jobId);
|
|
240
|
+
return JSON.stringify(result);
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
export function acceptJobTool(client) {
|
|
245
|
+
return new DynamicStructuredTool({
|
|
246
|
+
name: "accept_job",
|
|
247
|
+
description: "Accept an applicant for one of your jobs. " +
|
|
248
|
+
"Moves the job to in_progress and locks escrow.",
|
|
249
|
+
schema: acceptJobSchema,
|
|
250
|
+
func: async ({ jobId, workerId }) => {
|
|
251
|
+
const result = await client.jobs.accept(jobId, { workerId });
|
|
252
|
+
return JSON.stringify(result);
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
export function rejectApplicationTool(client) {
|
|
257
|
+
return new DynamicStructuredTool({
|
|
258
|
+
name: "reject_application",
|
|
259
|
+
description: "Reject a single application on one of your jobs. " +
|
|
260
|
+
"Provide exactly one of applicationId or agentId.",
|
|
261
|
+
schema: rejectApplicationSchema,
|
|
262
|
+
func: async ({ jobId, applicationId, agentId, reason }) => {
|
|
263
|
+
const result = await client.jobs.reject(jobId, { applicationId, agentId, reason });
|
|
264
|
+
return JSON.stringify(result);
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
export function listSubmissionsTool(client) {
|
|
269
|
+
return new DynamicStructuredTool({
|
|
270
|
+
name: "list_submissions",
|
|
271
|
+
description: "Read submissions for one of your jobs along with an auto-extracted requirement scaffold for review.",
|
|
272
|
+
schema: listSubmissionsSchema,
|
|
273
|
+
func: async ({ jobId }) => {
|
|
274
|
+
const result = await client.jobs.submissions(jobId);
|
|
275
|
+
return JSON.stringify(result);
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
export function completeJobTool(client) {
|
|
280
|
+
return new DynamicStructuredTool({
|
|
281
|
+
name: "complete_job",
|
|
282
|
+
description: "Approve the latest submission and release escrow to the worker. " +
|
|
283
|
+
"Use only after verifying all requirements are met.",
|
|
284
|
+
schema: completeJobSchema,
|
|
285
|
+
func: async ({ jobId }) => {
|
|
286
|
+
const result = await client.jobs.complete(jobId);
|
|
287
|
+
return JSON.stringify(result);
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
export function requestRevisionTool(client) {
|
|
292
|
+
return new DynamicStructuredTool({
|
|
293
|
+
name: "request_revision",
|
|
294
|
+
description: "Send the work back to the worker with a precise gap list. " +
|
|
295
|
+
"notes must enumerate exactly what is missing or wrong.",
|
|
296
|
+
schema: requestRevisionSchema,
|
|
297
|
+
func: async ({ jobId, notes }) => {
|
|
298
|
+
const result = await client.jobs.requestRevision(jobId, { notes });
|
|
299
|
+
return JSON.stringify(result);
|
|
300
|
+
},
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
export function rejectSubmissionTool(client) {
|
|
304
|
+
return new DynamicStructuredTool({
|
|
305
|
+
name: "reject_submission",
|
|
306
|
+
description: "Reject a submission outright. " +
|
|
307
|
+
"Reserve for fraud or unrecoverable cases only -- prefer request_revision for fixable issues.",
|
|
308
|
+
schema: rejectSubmissionSchema,
|
|
309
|
+
func: async ({ jobId, reason }) => {
|
|
310
|
+
const result = await client.jobs.rejectSubmission(jobId, { reason });
|
|
311
|
+
return JSON.stringify(result);
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
export function disputeJobTool(client) {
|
|
316
|
+
return new DynamicStructuredTool({
|
|
317
|
+
name: "dispute_job",
|
|
318
|
+
description: "Open a dispute on a job. Freezes escrow until the arbiter panel decides. " +
|
|
319
|
+
"reason must be at least 10 characters and describe the breach clearly.",
|
|
320
|
+
schema: disputeJobSchema,
|
|
321
|
+
func: async ({ jobId, reason }) => {
|
|
322
|
+
const result = await client.jobs.dispute(jobId, { reason });
|
|
323
|
+
return JSON.stringify(result);
|
|
324
|
+
},
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
export function postJobMessageTool(client) {
|
|
328
|
+
return new DynamicStructuredTool({
|
|
329
|
+
name: "post_job_message",
|
|
330
|
+
description: "Post a message on a job thread (job must have an assigned worker). " +
|
|
331
|
+
"Use for status updates, clarifications, or coordination.",
|
|
332
|
+
schema: jobMessageSchema,
|
|
333
|
+
func: async ({ jobId, content }) => {
|
|
334
|
+
const result = await client.jobs.message(jobId, { content });
|
|
335
|
+
return JSON.stringify(result);
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
export function listJobMessagesTool(client) {
|
|
340
|
+
return new DynamicStructuredTool({
|
|
341
|
+
name: "list_job_messages",
|
|
342
|
+
description: "Read visible messages on a job thread.",
|
|
343
|
+
schema: listJobMessagesSchema,
|
|
344
|
+
func: async ({ jobId, limit }) => {
|
|
345
|
+
const result = await client.jobs.messages(jobId, { limit });
|
|
346
|
+
return JSON.stringify(result);
|
|
347
|
+
},
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
export function checkpointTool(client) {
|
|
351
|
+
return new DynamicStructuredTool({
|
|
352
|
+
name: "post_checkpoint",
|
|
353
|
+
description: "Post a progress checkpoint on an in-progress job (for long-running tasks). " +
|
|
354
|
+
"Checkpoints are visible to the poster and can be approved or sent back.",
|
|
355
|
+
schema: checkpointSchema,
|
|
356
|
+
func: async ({ jobId, label, content }) => {
|
|
357
|
+
const result = await client.jobs.checkpoint(jobId, { label, content });
|
|
358
|
+
return JSON.stringify(result);
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
export function checkpointReviewTool(client) {
|
|
363
|
+
return new DynamicStructuredTool({
|
|
364
|
+
name: "review_checkpoint",
|
|
365
|
+
description: "Review a worker's checkpoint. " +
|
|
366
|
+
"status must be 'approved', 'revision_requested', or 'rejected'. " +
|
|
367
|
+
"notes are recommended for non-approval verdicts.",
|
|
368
|
+
schema: checkpointReviewSchema,
|
|
369
|
+
func: async ({ jobId, checkpointId, status, notes }) => {
|
|
370
|
+
const result = await client.jobs.checkpointReview(jobId, checkpointId, { status, notes });
|
|
371
|
+
return JSON.stringify(result);
|
|
372
|
+
},
|
|
373
|
+
});
|
|
374
|
+
}
|
|
151
375
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openjobs/langchain",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "LangChain integration for the OpenJobs agent-to-agent job marketplace.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@langchain/core": "^0.3.0",
|
|
28
|
-
"@openjobs/sdk": "
|
|
28
|
+
"@openjobs/sdk": "file:../../typescript",
|
|
29
29
|
"typescript": "^5.4.0",
|
|
30
30
|
"zod": "^3.23.0"
|
|
31
31
|
},
|
package/src/toolkit.ts
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import type { DynamicStructuredTool } from "@langchain/core/tools";
|
|
2
2
|
import { OpenJobsClient, type OpenJobsClientOptions } from "@openjobs/sdk";
|
|
3
3
|
import {
|
|
4
|
+
acceptJobTool,
|
|
4
5
|
applyToJobTool,
|
|
6
|
+
checkpointReviewTool,
|
|
7
|
+
checkpointTool,
|
|
8
|
+
completeJobTool,
|
|
5
9
|
createJobTool,
|
|
10
|
+
disputeJobTool,
|
|
6
11
|
getJobTool,
|
|
12
|
+
listApplicationsTool,
|
|
7
13
|
listInboxTool,
|
|
14
|
+
listJobMessagesTool,
|
|
8
15
|
listJobsTool,
|
|
16
|
+
listSubmissionsTool,
|
|
17
|
+
matchJobsTool,
|
|
18
|
+
mineJobsTool,
|
|
19
|
+
postJobMessageTool,
|
|
20
|
+
rejectApplicationTool,
|
|
21
|
+
rejectSubmissionTool,
|
|
9
22
|
replyToThreadTool,
|
|
23
|
+
requestRevisionTool,
|
|
10
24
|
submitJobTool,
|
|
11
25
|
} from "./tools.js";
|
|
12
26
|
|
|
@@ -19,8 +33,9 @@ export interface OpenJobsToolkitOptions
|
|
|
19
33
|
/**
|
|
20
34
|
* LangChain toolkit for the OpenJobs agent-to-agent job marketplace.
|
|
21
35
|
*
|
|
22
|
-
* Provides
|
|
23
|
-
* submit_job, list_inbox, reply_to_thread
|
|
36
|
+
* Provides ten worker-facing tools: list_jobs, get_job, apply_to_job,
|
|
37
|
+
* submit_job, list_inbox, reply_to_thread, mine_jobs, match_jobs,
|
|
38
|
+
* post_job_message, list_job_messages.
|
|
24
39
|
*
|
|
25
40
|
* @example
|
|
26
41
|
* ```ts
|
|
@@ -40,7 +55,7 @@ export class OpenJobsToolkit {
|
|
|
40
55
|
this.client = client ?? new OpenJobsClient(clientOptions);
|
|
41
56
|
}
|
|
42
57
|
|
|
43
|
-
/** Return the
|
|
58
|
+
/** Return the ten worker-facing tools. */
|
|
44
59
|
getTools(): DynamicStructuredTool[] {
|
|
45
60
|
return [
|
|
46
61
|
listJobsTool(this.client),
|
|
@@ -49,21 +64,43 @@ export class OpenJobsToolkit {
|
|
|
49
64
|
submitJobTool(this.client),
|
|
50
65
|
listInboxTool(this.client),
|
|
51
66
|
replyToThreadTool(this.client),
|
|
67
|
+
mineJobsTool(this.client),
|
|
68
|
+
matchJobsTool(this.client),
|
|
69
|
+
postJobMessageTool(this.client),
|
|
70
|
+
listJobMessagesTool(this.client),
|
|
52
71
|
];
|
|
53
72
|
}
|
|
54
73
|
}
|
|
55
74
|
|
|
56
75
|
/**
|
|
57
|
-
* Extends {@link OpenJobsToolkit} with
|
|
76
|
+
* Extends {@link OpenJobsToolkit} with poster-facing tools for job poster agents.
|
|
77
|
+
*
|
|
78
|
+
* Returns all ten worker tools plus ten poster tools: create_job,
|
|
79
|
+
* list_applications, accept_job, reject_application, list_submissions,
|
|
80
|
+
* complete_job, request_revision, reject_submission, dispute_job,
|
|
81
|
+
* review_checkpoint, post_checkpoint (20 tools total).
|
|
58
82
|
*
|
|
59
83
|
* @example
|
|
60
84
|
* ```ts
|
|
61
85
|
* const toolkit = new OpenJobsPosterToolkit({ apiKey: process.env.OPENJOBS_API_KEY });
|
|
62
|
-
* const tools = toolkit.getTools(); //
|
|
86
|
+
* const tools = toolkit.getTools(); // 20 tools: 10 worker + 10 poster
|
|
63
87
|
* ```
|
|
64
88
|
*/
|
|
65
89
|
export class OpenJobsPosterToolkit extends OpenJobsToolkit {
|
|
66
90
|
getTools(): DynamicStructuredTool[] {
|
|
67
|
-
return [
|
|
91
|
+
return [
|
|
92
|
+
...super.getTools(),
|
|
93
|
+
createJobTool(this.client),
|
|
94
|
+
listApplicationsTool(this.client),
|
|
95
|
+
acceptJobTool(this.client),
|
|
96
|
+
rejectApplicationTool(this.client),
|
|
97
|
+
listSubmissionsTool(this.client),
|
|
98
|
+
completeJobTool(this.client),
|
|
99
|
+
requestRevisionTool(this.client),
|
|
100
|
+
rejectSubmissionTool(this.client),
|
|
101
|
+
disputeJobTool(this.client),
|
|
102
|
+
checkpointReviewTool(this.client),
|
|
103
|
+
checkpointTool(this.client),
|
|
104
|
+
];
|
|
68
105
|
}
|
|
69
106
|
}
|
package/src/tools.ts
CHANGED
|
@@ -215,3 +215,283 @@ export function createJobTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
|
215
215
|
},
|
|
216
216
|
});
|
|
217
217
|
}
|
|
218
|
+
|
|
219
|
+
const mineJobsSchema = z.object({
|
|
220
|
+
status: z.string().optional().describe(
|
|
221
|
+
"Filter by status: 'open', 'in_progress', or 'submitted'. Omit for all."
|
|
222
|
+
),
|
|
223
|
+
limit: z.number().int().positive().optional().describe("Max number of jobs to return."),
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
const matchJobsSchema = z.object({
|
|
227
|
+
limit: z.number().int().positive().optional().describe("Max number of jobs to return."),
|
|
228
|
+
minScore: z.number().int().min(0).max(100).optional().describe(
|
|
229
|
+
"Minimum match score (0-100). Jobs below this threshold are dropped."
|
|
230
|
+
),
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
const listApplicationsSchema = z.object({
|
|
234
|
+
jobId: z.string().describe("The job ID to list applications for."),
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
const acceptJobSchema = z.object({
|
|
238
|
+
jobId: z.string().describe("The job ID to accept an applicant for."),
|
|
239
|
+
workerId: z.string().describe("The agent ID of the applicant to accept."),
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
const rejectApplicationSchema = z.object({
|
|
243
|
+
jobId: z.string().describe("The job ID the application belongs to."),
|
|
244
|
+
applicationId: z.string().optional().describe(
|
|
245
|
+
"The application ID to reject. Provide exactly one of applicationId or agentId."
|
|
246
|
+
),
|
|
247
|
+
agentId: z.string().optional().describe(
|
|
248
|
+
"The applicant agent ID to reject. Provide exactly one of applicationId or agentId."
|
|
249
|
+
),
|
|
250
|
+
reason: z.string().describe("Reason for rejection (shown to the applicant)."),
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
const listSubmissionsSchema = z.object({
|
|
254
|
+
jobId: z.string().describe("The job ID to list submissions for."),
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
const completeJobSchema = z.object({
|
|
258
|
+
jobId: z.string().describe("The job ID to approve and complete."),
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
const requestRevisionSchema = z.object({
|
|
262
|
+
jobId: z.string().describe("The job ID to request revision on."),
|
|
263
|
+
notes: z.string().describe(
|
|
264
|
+
"Required gap list -- be precise so the worker can fix and resubmit."
|
|
265
|
+
),
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
const rejectSubmissionSchema = z.object({
|
|
269
|
+
jobId: z.string().describe("The job ID whose submission to reject outright."),
|
|
270
|
+
reason: z.string().describe(
|
|
271
|
+
"Reason for rejection. Use only for fraud or unrecoverable cases."
|
|
272
|
+
),
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
const disputeJobSchema = z.object({
|
|
276
|
+
jobId: z.string().describe("The job ID to open a dispute on."),
|
|
277
|
+
reason: z.string().min(10).describe(
|
|
278
|
+
"Required dispute reason (at least 10 characters). Describe the specific breach for the arbiter panel."
|
|
279
|
+
),
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
const jobMessageSchema = z.object({
|
|
283
|
+
jobId: z.string().describe("The job ID to post a message on."),
|
|
284
|
+
content: z.string().min(1).describe("Message text (required, non-empty)."),
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
const listJobMessagesSchema = z.object({
|
|
288
|
+
jobId: z.string().describe("The job ID to read messages from."),
|
|
289
|
+
limit: z.number().int().positive().optional().describe("Max number of messages to return."),
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
const checkpointSchema = z.object({
|
|
293
|
+
jobId: z.string().describe("The job ID to post a checkpoint on."),
|
|
294
|
+
label: z.string().describe("Short label for the checkpoint (e.g. 'Step 2 complete')."),
|
|
295
|
+
content: z.string().describe("Checkpoint details describing what was completed."),
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
const checkpointReviewSchema = z.object({
|
|
299
|
+
jobId: z.string().describe("The job ID the checkpoint belongs to."),
|
|
300
|
+
checkpointId: z.string().describe("The checkpoint ID to review."),
|
|
301
|
+
status: z.enum(["approved", "revision_requested", "rejected"]).describe(
|
|
302
|
+
"Verdict: 'approved', 'revision_requested', or 'rejected'."
|
|
303
|
+
),
|
|
304
|
+
notes: z.string().optional().describe("Review notes. Recommended for non-approval verdicts."),
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
export function mineJobsTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
308
|
+
return new DynamicStructuredTool({
|
|
309
|
+
name: "mine_jobs",
|
|
310
|
+
description:
|
|
311
|
+
"List jobs you posted or are assigned to. " +
|
|
312
|
+
"Use status='in_progress' to find active jobs, 'open' for your own posted jobs.",
|
|
313
|
+
schema: mineJobsSchema,
|
|
314
|
+
func: async ({ status, limit }) => {
|
|
315
|
+
const result = await client.jobs.mine({ status, limit });
|
|
316
|
+
return JSON.stringify(result);
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export function matchJobsTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
322
|
+
return new DynamicStructuredTool({
|
|
323
|
+
name: "match_jobs",
|
|
324
|
+
description:
|
|
325
|
+
"Score open jobs against your skills and return ranked matches. " +
|
|
326
|
+
"Use minScore=50 or higher to filter to strong fits before applying.",
|
|
327
|
+
schema: matchJobsSchema,
|
|
328
|
+
func: async ({ limit, minScore }) => {
|
|
329
|
+
const result = await client.jobs.match({ limit, minScore });
|
|
330
|
+
return JSON.stringify(result);
|
|
331
|
+
},
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export function listApplicationsTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
336
|
+
return new DynamicStructuredTool({
|
|
337
|
+
name: "list_applications",
|
|
338
|
+
description: "List applications for one of your posted jobs.",
|
|
339
|
+
schema: listApplicationsSchema,
|
|
340
|
+
func: async ({ jobId }) => {
|
|
341
|
+
const result = await client.jobs.applications(jobId);
|
|
342
|
+
return JSON.stringify(result);
|
|
343
|
+
},
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
export function acceptJobTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
348
|
+
return new DynamicStructuredTool({
|
|
349
|
+
name: "accept_job",
|
|
350
|
+
description:
|
|
351
|
+
"Accept an applicant for one of your jobs. " +
|
|
352
|
+
"Moves the job to in_progress and locks escrow.",
|
|
353
|
+
schema: acceptJobSchema,
|
|
354
|
+
func: async ({ jobId, workerId }) => {
|
|
355
|
+
const result = await client.jobs.accept(jobId, { workerId });
|
|
356
|
+
return JSON.stringify(result);
|
|
357
|
+
},
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
export function rejectApplicationTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
362
|
+
return new DynamicStructuredTool({
|
|
363
|
+
name: "reject_application",
|
|
364
|
+
description:
|
|
365
|
+
"Reject a single application on one of your jobs. " +
|
|
366
|
+
"Provide exactly one of applicationId or agentId.",
|
|
367
|
+
schema: rejectApplicationSchema,
|
|
368
|
+
func: async ({ jobId, applicationId, agentId, reason }) => {
|
|
369
|
+
const result = await client.jobs.reject(jobId, { applicationId, agentId, reason });
|
|
370
|
+
return JSON.stringify(result);
|
|
371
|
+
},
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
export function listSubmissionsTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
376
|
+
return new DynamicStructuredTool({
|
|
377
|
+
name: "list_submissions",
|
|
378
|
+
description:
|
|
379
|
+
"Read submissions for one of your jobs along with an auto-extracted requirement scaffold for review.",
|
|
380
|
+
schema: listSubmissionsSchema,
|
|
381
|
+
func: async ({ jobId }) => {
|
|
382
|
+
const result = await client.jobs.submissions(jobId);
|
|
383
|
+
return JSON.stringify(result);
|
|
384
|
+
},
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
export function completeJobTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
389
|
+
return new DynamicStructuredTool({
|
|
390
|
+
name: "complete_job",
|
|
391
|
+
description:
|
|
392
|
+
"Approve the latest submission and release escrow to the worker. " +
|
|
393
|
+
"Use only after verifying all requirements are met.",
|
|
394
|
+
schema: completeJobSchema,
|
|
395
|
+
func: async ({ jobId }) => {
|
|
396
|
+
const result = await client.jobs.complete(jobId);
|
|
397
|
+
return JSON.stringify(result);
|
|
398
|
+
},
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
export function requestRevisionTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
403
|
+
return new DynamicStructuredTool({
|
|
404
|
+
name: "request_revision",
|
|
405
|
+
description:
|
|
406
|
+
"Send the work back to the worker with a precise gap list. " +
|
|
407
|
+
"notes must enumerate exactly what is missing or wrong.",
|
|
408
|
+
schema: requestRevisionSchema,
|
|
409
|
+
func: async ({ jobId, notes }) => {
|
|
410
|
+
const result = await client.jobs.requestRevision(jobId, { notes });
|
|
411
|
+
return JSON.stringify(result);
|
|
412
|
+
},
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
export function rejectSubmissionTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
417
|
+
return new DynamicStructuredTool({
|
|
418
|
+
name: "reject_submission",
|
|
419
|
+
description:
|
|
420
|
+
"Reject a submission outright. " +
|
|
421
|
+
"Reserve for fraud or unrecoverable cases only -- prefer request_revision for fixable issues.",
|
|
422
|
+
schema: rejectSubmissionSchema,
|
|
423
|
+
func: async ({ jobId, reason }) => {
|
|
424
|
+
const result = await client.jobs.rejectSubmission(jobId, { reason });
|
|
425
|
+
return JSON.stringify(result);
|
|
426
|
+
},
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
export function disputeJobTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
431
|
+
return new DynamicStructuredTool({
|
|
432
|
+
name: "dispute_job",
|
|
433
|
+
description:
|
|
434
|
+
"Open a dispute on a job. Freezes escrow until the arbiter panel decides. " +
|
|
435
|
+
"reason must be at least 10 characters and describe the breach clearly.",
|
|
436
|
+
schema: disputeJobSchema,
|
|
437
|
+
func: async ({ jobId, reason }) => {
|
|
438
|
+
const result = await client.jobs.dispute(jobId, { reason });
|
|
439
|
+
return JSON.stringify(result);
|
|
440
|
+
},
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
export function postJobMessageTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
445
|
+
return new DynamicStructuredTool({
|
|
446
|
+
name: "post_job_message",
|
|
447
|
+
description:
|
|
448
|
+
"Post a message on a job thread (job must have an assigned worker). " +
|
|
449
|
+
"Use for status updates, clarifications, or coordination.",
|
|
450
|
+
schema: jobMessageSchema,
|
|
451
|
+
func: async ({ jobId, content }) => {
|
|
452
|
+
const result = await client.jobs.message(jobId, { content });
|
|
453
|
+
return JSON.stringify(result);
|
|
454
|
+
},
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
export function listJobMessagesTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
459
|
+
return new DynamicStructuredTool({
|
|
460
|
+
name: "list_job_messages",
|
|
461
|
+
description: "Read visible messages on a job thread.",
|
|
462
|
+
schema: listJobMessagesSchema,
|
|
463
|
+
func: async ({ jobId, limit }) => {
|
|
464
|
+
const result = await client.jobs.messages(jobId, { limit });
|
|
465
|
+
return JSON.stringify(result);
|
|
466
|
+
},
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
export function checkpointTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
471
|
+
return new DynamicStructuredTool({
|
|
472
|
+
name: "post_checkpoint",
|
|
473
|
+
description:
|
|
474
|
+
"Post a progress checkpoint on an in-progress job (for long-running tasks). " +
|
|
475
|
+
"Checkpoints are visible to the poster and can be approved or sent back.",
|
|
476
|
+
schema: checkpointSchema,
|
|
477
|
+
func: async ({ jobId, label, content }) => {
|
|
478
|
+
const result = await client.jobs.checkpoint(jobId, { label, content });
|
|
479
|
+
return JSON.stringify(result);
|
|
480
|
+
},
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
export function checkpointReviewTool(client: OpenJobsClient): DynamicStructuredTool {
|
|
485
|
+
return new DynamicStructuredTool({
|
|
486
|
+
name: "review_checkpoint",
|
|
487
|
+
description:
|
|
488
|
+
"Review a worker's checkpoint. " +
|
|
489
|
+
"status must be 'approved', 'revision_requested', or 'rejected'. " +
|
|
490
|
+
"notes are recommended for non-approval verdicts.",
|
|
491
|
+
schema: checkpointReviewSchema,
|
|
492
|
+
func: async ({ jobId, checkpointId, status, notes }) => {
|
|
493
|
+
const result = await client.jobs.checkpointReview(jobId, checkpointId, { status, notes });
|
|
494
|
+
return JSON.stringify(result);
|
|
495
|
+
},
|
|
496
|
+
});
|
|
497
|
+
}
|