@profullstack/agenticjobs 0.12.0 → 0.14.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/README.md +70 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.js +78 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.d.ts +44 -0
- package/dist/client/client.js +19 -0
- package/dist/client/client.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/core/agentwriter.js +22 -5
- package/dist/core/agentwriter.js.map +1 -1
- package/dist/core/applications.js +1 -1
- package/dist/core/applications.js.map +1 -1
- package/dist/core/import.js +10 -2
- package/dist/core/import.js.map +1 -1
- package/dist/core/jobs.d.ts +24 -6
- package/dist/core/jobs.js +116 -31
- package/dist/core/jobs.js.map +1 -1
- package/dist/core/recommendations.d.ts +134 -0
- package/dist/core/recommendations.js +356 -0
- package/dist/core/recommendations.js.map +1 -0
- package/dist/core/updates.d.ts +15 -3
- package/dist/core/updates.js +58 -24
- package/dist/core/updates.js.map +1 -1
- package/dist/core/zip.js +29 -4
- package/dist/core/zip.js.map +1 -1
- package/dist/directory/federate.js +3 -1
- package/dist/directory/federate.js.map +1 -1
- package/dist/directory/fetch.d.ts +1 -1
- package/dist/markup/markdown.js +2 -1
- package/dist/markup/markdown.js.map +1 -1
- package/dist/markup/resume.js +18 -5
- package/dist/markup/resume.js.map +1 -1
- package/dist/mcp/tools.js +99 -7
- package/dist/mcp/tools.js.map +1 -1
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/instance.js +29 -0
- package/dist/schema/instance.js.map +1 -1
- package/dist/schema/job.d.ts +12 -0
- package/dist/schema/job.js +17 -3
- package/dist/schema/job.js.map +1 -1
- package/dist/schema/jsonld.js +7 -6
- package/dist/schema/jsonld.js.map +1 -1
- package/dist/schema/pay.d.ts +173 -0
- package/dist/schema/pay.js +668 -0
- package/dist/schema/pay.js.map +1 -0
- package/dist/server/app.js +3 -1
- package/dist/server/app.js.map +1 -1
- package/dist/server/middleware.d.ts +11 -1
- package/dist/server/middleware.js +18 -3
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/routes/api.js +153 -7
- package/dist/server/routes/api.js.map +1 -1
- package/dist/server/routes/discovery.js +10 -8
- package/dist/server/routes/discovery.js.map +1 -1
- package/dist/server/routes/openapi.js +136 -2
- package/dist/server/routes/openapi.js.map +1 -1
- package/dist/server/routes/pages.js +155 -14
- package/dist/server/routes/pages.js.map +1 -1
- package/dist/tui/views.js +9 -3
- package/dist/tui/views.js.map +1 -1
- package/dist/views/candidates.d.ts +6 -0
- package/dist/views/candidates.js +2 -1
- package/dist/views/candidates.js.map +1 -1
- package/dist/views/inbox.js +6 -6
- package/dist/views/inbox.js.map +1 -1
- package/dist/views/jobs.d.ts +16 -0
- package/dist/views/jobs.js +33 -11
- package/dist/views/jobs.js.map +1 -1
- package/dist/views/layout.d.ts +22 -0
- package/dist/views/layout.js +18 -0
- package/dist/views/layout.js.map +1 -1
- package/dist/views/me.d.ts +7 -0
- package/dist/views/me.js +3 -2
- package/dist/views/me.js.map +1 -1
- package/dist/views/post.d.ts +18 -0
- package/dist/views/post.js +39 -7
- package/dist/views/post.js.map +1 -1
- package/dist/views/recommendations.d.ts +43 -0
- package/dist/views/recommendations.js +26 -0
- package/dist/views/recommendations.js.map +1 -0
- package/dist/views/updates.js +5 -5
- package/dist/views/updates.js.map +1 -1
- package/docs/openjob.md +63 -0
- package/migrations/0015_pay_lines.sql +38 -0
- package/migrations/0016_recommendations.sql +65 -0
- package/package.json +1 -1
- package/web/public/app.css +60 -5
- package/web/public/sw.js +1 -1
package/dist/views/post.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/views/post.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/views/post.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recommendations: the ones on a page, the form that writes one, and the
|
|
3
|
+
* section of /me where they are approved or rejected.
|
|
4
|
+
*
|
|
5
|
+
* A recommendation is plain text or Markdown, rendered the way every other
|
|
6
|
+
* body on the board is. It carries a name and a link to the page that name
|
|
7
|
+
* has, because a paragraph nobody signed is a review, and this is not a review.
|
|
8
|
+
*/
|
|
9
|
+
import type { FC } from 'hono/jsx';
|
|
10
|
+
import type { Recommendation } from '../core/recommendations.ts';
|
|
11
|
+
export declare const RecommendationItem: FC<{
|
|
12
|
+
item: Recommendation;
|
|
13
|
+
showSubject?: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
/** The approved ones, on a candidate's or an employer's page. */
|
|
16
|
+
export declare const RecommendationList: FC<{
|
|
17
|
+
items: Recommendation[];
|
|
18
|
+
about: string;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* The form on a page, for a signed-in reader who is not the subject.
|
|
22
|
+
*
|
|
23
|
+
* `existing` is what this reader already wrote, so the form is a rewrite
|
|
24
|
+
* rather than a second copy, and says what state the earlier one is in.
|
|
25
|
+
*/
|
|
26
|
+
export interface RecommendFormProps {
|
|
27
|
+
action: string;
|
|
28
|
+
asOptions: {
|
|
29
|
+
slug: string;
|
|
30
|
+
name: string;
|
|
31
|
+
}[];
|
|
32
|
+
canWriteAsSelf: boolean;
|
|
33
|
+
existing: Recommendation | null;
|
|
34
|
+
values?: Record<string, string>;
|
|
35
|
+
error?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare const RecommendForm: FC<RecommendFormProps>;
|
|
38
|
+
/** The /me section: what is waiting, what is up, and what you wrote. */
|
|
39
|
+
export declare const RecommendationsSection: FC<{
|
|
40
|
+
received: Recommendation[];
|
|
41
|
+
given: Recommendation[];
|
|
42
|
+
error?: string;
|
|
43
|
+
}>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
2
|
+
import { ago } from "../schema/text.js";
|
|
3
|
+
import { Alert, Badge, Card, Field, MARKDOWN_HINT, Markdown } from "./layout.js";
|
|
4
|
+
function pageOf(party) {
|
|
5
|
+
if (party.slug === null)
|
|
6
|
+
return null;
|
|
7
|
+
return party.kind === 'employer' ? `/employers/${party.slug}` : `/candidates/${party.slug}`;
|
|
8
|
+
}
|
|
9
|
+
const PartyName = ({ party }) => {
|
|
10
|
+
const href = pageOf(party);
|
|
11
|
+
return href === null ? _jsx("span", { children: party.name }) : _jsx("a", { href: href, children: party.name });
|
|
12
|
+
};
|
|
13
|
+
export const RecommendationItem = ({ item, showSubject = false, }) => (_jsxs("div", { class: "recommendation", children: [_jsx(Markdown, { source: item.body, class: "prose-compact recommendation-body" }), _jsxs("p", { class: "small muted recommendation-meta", children: [_jsx("strong", { children: _jsx(PartyName, { party: item.author }) }), showSubject && (_jsxs(_Fragment, { children: [' ', "about ", _jsx(PartyName, { party: item.subject })] })), item.relationship !== null && _jsxs(_Fragment, { children: [" - ", item.relationship] }), ' - ', ago(item.decidedAt ?? item.createdAt)] })] }));
|
|
14
|
+
/** The approved ones, on a candidate's or an employer's page. */
|
|
15
|
+
export const RecommendationList = ({ items, about, }) => items.length === 0 ? (_jsx(_Fragment, {})) : (_jsxs("section", { class: "stack-sm", id: "recommendations", children: [_jsxs("h2", { class: "card-title", children: [items.length, " ", items.length === 1 ? 'recommendation' : 'recommendations'] }), _jsxs("p", { class: "small muted", children: ["Written by people and employers who worked with ", about, ", and shown because ", about, " approved each one."] }), _jsx("ul", { class: "recommendations", children: items.map((item) => (_jsx("li", { children: _jsx(RecommendationItem, { item: item }) }))) })] }));
|
|
16
|
+
export const RecommendForm = ({ action, asOptions, canWriteAsSelf, existing, values = {}, error, }) => (_jsxs("details", { class: "card", id: "recommend", children: [_jsx("summary", { class: "card-title", style: "cursor:pointer", children: existing === null ? 'Write a recommendation' : 'Rewrite your recommendation' }), _jsxs("div", { class: "stack-sm", style: "margin-top:.75rem", children: [error !== undefined && _jsx(Alert, { variant: "error", children: error }), existing !== null && (_jsxs("p", { class: "small muted", children: ["You wrote one ", ago(existing.createdAt), "; it is", ' ', _jsx(Badge, { variant: existing.status === 'approved' ? 'primary' : 'outline', children: existing.status }), ". Writing again replaces it and asks them to read it again."] })), !canWriteAsSelf && asOptions.length === 0 ? (_jsxs("p", { class: "small muted", children: ["A recommendation is signed by a page. ", _jsx("a", { href: "/me/resumes/new", children: "Publish a resume" }), " to write one as yourself, or add the employer you are writing for."] })) : (_jsxs("form", { class: "stack-sm", method: "post", action: action, children: [(asOptions.length > 0 || !canWriteAsSelf) && (_jsx(Field, { label: "From", name: "as", hint: canWriteAsSelf
|
|
17
|
+
? 'Yourself, or an employer you post for.'
|
|
18
|
+
: 'An employer you post for.', children: _jsxs("select", { class: "select", id: "as", name: "as", children: [canWriteAsSelf && (_jsx("option", { value: "", selected: (values['as'] ?? '') === '', children: "Yourself" })), asOptions.map((option) => (_jsx("option", { value: option.slug, selected: values['as'] === option.slug, children: option.name })))] }) })), _jsx(Field, { label: "How you know them", name: "relationship", hint: '"Hired them for a three-month contract", "Worked together at Acme". Optional.', children: _jsx("input", { class: "input", type: "text", id: "relationship", name: "relationship", maxlength: 120, value: values['relationship'] ?? existing?.relationship ?? '' }) }), _jsx(Field, { label: "What you would say", name: "body", hint: `At least 20 characters. ${MARKDOWN_HINT} It goes on their page with your name on it, once they approve it.`, children: _jsx("textarea", { class: "textarea", id: "body", name: "body", rows: 5, required: true, minlength: 20, maxlength: 2000, children: values['body'] ?? existing?.body ?? '' }) }), _jsx("div", { class: "row", children: _jsx("button", { class: "btn", type: "submit", children: "Send for approval" }) })] }))] })] }));
|
|
19
|
+
const DecisionButtons = ({ item }) => (_jsxs("div", { class: "row", children: [item.status !== 'approved' && (_jsx("form", { method: "post", action: `/me/recommendations/${item.id}/approve`, children: _jsx("button", { class: "btn btn-sm", type: "submit", children: "Approve" }) })), item.status !== 'rejected' && (_jsx("form", { method: "post", action: `/me/recommendations/${item.id}/reject`, children: _jsx("button", { class: "btn btn-secondary btn-sm", type: "submit", children: item.status === 'approved' ? 'Take it down' : 'Reject' }) }))] }));
|
|
20
|
+
/** The /me section: what is waiting, what is up, and what you wrote. */
|
|
21
|
+
export const RecommendationsSection = ({ received, given, error }) => {
|
|
22
|
+
const pending = received.filter((item) => item.status === 'pending');
|
|
23
|
+
const decided = received.filter((item) => item.status !== 'pending');
|
|
24
|
+
return (_jsxs("section", { class: "stack", id: "recommendations", children: [_jsx("h2", { children: "Recommendations" }), error !== undefined && _jsx(Alert, { variant: "error", children: error }), _jsx("p", { class: "small muted", children: "What people and employers who worked with you say about you. Nothing is shown on your page until you approve it, and you can take one down later. There is a form on every candidate and employer page to write one." }), pending.length > 0 && (_jsxs(Card, { children: [_jsx("div", { class: "card-header", children: _jsxs("h3", { class: "card-title", children: [pending.length, " waiting for you"] }) }), _jsx("ul", { class: "recommendations", children: pending.map((item) => (_jsxs("li", { class: "stack-sm", children: [_jsx(RecommendationItem, { item: item, showSubject: true }), _jsx(DecisionButtons, { item: item })] }))) })] })), decided.length > 0 && (_jsxs(Card, { children: [_jsx("div", { class: "card-header", children: _jsx("h3", { class: "card-title", children: "About you" }) }), _jsx("ul", { class: "recommendations", children: decided.map((item) => (_jsxs("li", { class: "stack-sm", children: [_jsx(RecommendationItem, { item: item, showSubject: true }), _jsxs("div", { class: "row", style: "align-items:center;gap:.6rem", children: [_jsx(Badge, { variant: item.status === 'approved' ? 'primary' : 'outline', children: item.status === 'approved' ? 'on your page' : 'rejected' }), _jsx(DecisionButtons, { item: item })] })] }))) })] })), given.length > 0 && (_jsxs(Card, { children: [_jsx("div", { class: "card-header", children: _jsx("h3", { class: "card-title", children: "You wrote" }) }), _jsx("ul", { class: "recommendations", children: given.map((item) => (_jsxs("li", { class: "stack-sm", children: [_jsx(RecommendationItem, { item: item, showSubject: true }), _jsxs("div", { class: "row", style: "align-items:center;gap:.6rem", children: [_jsx(Badge, { variant: item.status === 'approved' ? 'primary' : 'outline', children: item.status }), _jsx("form", { method: "post", action: `/me/recommendations/${item.id}/withdraw`, children: _jsx("button", { class: "btn btn-ghost btn-sm", type: "submit", children: "Withdraw" }) })] })] }))) })] })), received.length === 0 && given.length === 0 && (_jsx("p", { class: "small muted", children: "None yet, in either direction." }))] }));
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=recommendations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../src/views/recommendations.tsx"],"names":[],"mappings":"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"}
|
package/dist/views/updates.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "hono/jsx/jsx-runtime";
|
|
2
|
-
import { Card, Empty, Field } from "./layout.js";
|
|
2
|
+
import { Card, Empty, Field, MARKDOWN_HINT, Markdown } from "./layout.js";
|
|
3
3
|
import { ago } from "../schema/text.js";
|
|
4
4
|
import { MessageButton } from "./inbox.js";
|
|
5
5
|
/** Where an author's own page is, when they have one. */
|
|
@@ -22,7 +22,7 @@ export const UpdateItem = ({ update, showAuthor = true, }) => {
|
|
|
22
22
|
return (
|
|
23
23
|
// The id is the feed's anchor: every entry's guid points at this element,
|
|
24
24
|
// so an item opened from a reader lands on the update it came from.
|
|
25
|
-
_jsxs("li", { class: "update", id: update.id, children: [showAuthor && (_jsxs("p", { class: "update-author", children: [href === null ? (_jsx("strong", { children: update.author.name })) : (_jsx("a", { href: href, children: _jsx("strong", { children: update.author.name }) })), ' ', _jsxs("span", { class: "small muted", children: [update.author.kind === 'employer' ? 'employer' : 'candidate', " \u00B7", ' ', ago(update.createdAt)] })] })), _jsx(
|
|
25
|
+
_jsxs("li", { class: "update", id: update.id, children: [showAuthor && (_jsxs("p", { class: "update-author", children: [href === null ? (_jsx("strong", { children: update.author.name })) : (_jsx("a", { href: href, children: _jsx("strong", { children: update.author.name }) })), ' ', _jsxs("span", { class: "small muted", children: [update.author.kind === 'employer' ? 'employer' : 'candidate', " \u00B7", ' ', ago(update.createdAt)] })] })), _jsx(Markdown, { source: update.body, class: "prose-compact update-body" }), update.link !== null && (_jsx("p", { class: "small", children: _jsx("a", { href: update.link, rel: "nofollow noopener", class: "update-link", children: hostOf(update.link) }) })), !showAuthor && _jsx("p", { class: "small muted", children: ago(update.createdAt) })] }));
|
|
26
26
|
};
|
|
27
27
|
export const UpdateList = ({ updates, showAuthor = true, }) => (_jsx("ul", { class: "update-list", children: updates.map((update) => (_jsx(UpdateItem, { update: update, showAuthor: showAuthor }))) }));
|
|
28
28
|
/**
|
|
@@ -32,7 +32,7 @@ export const UpdateList = ({ updates, showAuthor = true, }) => (_jsx("ul", { cla
|
|
|
32
32
|
* candidate's own dashboard without either growing a hidden "who am I" field
|
|
33
33
|
* that a caller could change.
|
|
34
34
|
*/
|
|
35
|
-
export const UpdateComposer = ({ action, as, max, error, value }) => (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Post an update" }), _jsxs("p", { class: "card-description", children: ["As ", _jsx("strong", { children: as }), ". What changed: a role filled, something shipped, when you are free next. Five a day, ", max, " characters, one link."] })] }), _jsxs("form", { method: "post", action: action, class: "stack-sm", children: [_jsx(Field, { label: "Update", name: "body", error: error, children: _jsx("textarea", { id: "body", name: "body", rows: 3, maxlength: max, required: true, placeholder: "We just closed the backend role. Two more open next month.", children: value ?? '' }) }), _jsx(Field, { label: "Link", name: "link", hint: "Optional. One public URL.", children: _jsx("input", { id: "link", name: "link", type: "url", placeholder: "https://" }) }), _jsx("div", { class: "row", children: _jsx("button", { class: "btn", type: "submit", children: "Post" }) })] })] }));
|
|
35
|
+
export const UpdateComposer = ({ action, as, max, error, value }) => (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Post an update" }), _jsxs("p", { class: "card-description", children: ["As ", _jsx("strong", { children: as }), ". What changed: a role filled, something shipped, when you are free next. Five a day, ", max, " characters, one link."] })] }), _jsxs("form", { method: "post", action: action, class: "stack-sm", children: [_jsx(Field, { label: "Update", name: "body", hint: MARKDOWN_HINT, error: error, children: _jsx("textarea", { id: "body", name: "body", rows: 3, maxlength: max, required: true, placeholder: "We just closed the backend role. Two more open next month.", children: value ?? '' }) }), _jsx(Field, { label: "Link", name: "link", hint: "Optional. One public URL.", children: _jsx("input", { id: "link", name: "link", type: "url", placeholder: "https://" }) }), _jsx("div", { class: "row", children: _jsx("button", { class: "btn", type: "submit", children: "Post" }) })] })] }));
|
|
36
36
|
/**
|
|
37
37
|
* Follow, as a form rather than a link.
|
|
38
38
|
*
|
|
@@ -40,11 +40,11 @@ export const UpdateComposer = ({ action, as, max, error, value }) => (_jsxs(Card
|
|
|
40
40
|
* scanner or crawler can make on the reader's behalf.
|
|
41
41
|
*/
|
|
42
42
|
export const FollowButton = ({ action, following, followers, signedIn, next }) => (_jsxs("div", { class: "row", style: "align-items:center;gap:.6rem;flex-wrap:wrap", children: [signedIn ? (_jsxs("form", { method: "post", action: action, children: [_jsx("input", { type: "hidden", name: "following", value: following ? 'yes' : 'no' }), _jsx("button", { class: following ? 'btn btn-secondary btn-sm' : 'btn btn-sm', type: "submit", children: following ? 'Following' : 'Follow' })] })) : (_jsx("a", { class: "btn btn-sm", href: `/login?next=${encodeURIComponent(next)}`, children: "Follow" })), _jsxs("span", { class: "small muted", children: [followers, " ", followers === 1 ? 'follower' : 'followers'] })] }));
|
|
43
|
-
export const AuthorSocial = ({ as, updates, follow, composer, message, error }) => (_jsxs("div", { class: "stack", children: [_jsxs("div", { class: "row", style: "align-items:center;gap:.6rem;flex-wrap:wrap", children: [_jsx(FollowButton, { ...follow }), message !== undefined && _jsx(MessageButton, { ...message })] }), composer !== null && (_jsx(UpdateComposer, { action: composer.action, as: as, max: composer.max, error: error })), updates.length > 0 && (_jsxs("div", { class: "stack-sm", children: [_jsx("h2", { class: "card-title", children: "Updates" }), _jsx(UpdateList, { updates: updates, showAuthor: false })] }))] }));
|
|
43
|
+
export const AuthorSocial = ({ as, updates, follow, composer, message, error, }) => (_jsxs("div", { class: "stack", children: [_jsxs("div", { class: "row", style: "align-items:center;gap:.6rem;flex-wrap:wrap", children: [_jsx(FollowButton, { ...follow }), message !== undefined && _jsx(MessageButton, { ...message })] }), composer !== null && (_jsx(UpdateComposer, { action: composer.action, as: as, max: composer.max, error: error })), updates.length > 0 && (_jsxs("div", { class: "stack-sm", children: [_jsx("h2", { class: "card-title", children: "Updates" }), _jsx(UpdateList, { updates: updates, showAuthor: false })] }))] }));
|
|
44
44
|
/** The board's news page: everything anybody posted. */
|
|
45
45
|
export const UpdatesPage = ({ updates, boardName, followed, following }) => (_jsxs("div", { class: "stack", children: [_jsxs("div", { class: "stack-sm", children: [_jsx("h1", { children: "Updates" }), _jsxs("p", { class: "lede", children: ["Short posts from the employers and candidates on ", boardName, ". Everyone here is a real employer or a person with a resume, and nobody can post more than five a day."] })] }), followed !== null && (_jsxs(Card, { children: [_jsx("div", { class: "card-header", children: _jsxs("h2", { class: "card-title", children: ["From the ", following.length, " you follow"] }) }), followed.length === 0 ? (_jsx("p", { class: "small muted", children: following.length === 0
|
|
46
46
|
? 'You do not follow anybody yet. There is a Follow button on every employer and candidate page.'
|
|
47
47
|
: 'Nothing yet from anybody you follow.' })) : (_jsx(UpdateList, { updates: followed })), following.length > 0 && (_jsxs("p", { class: "small muted", style: "margin-top:.6rem", children: ["Following:", ' ', following.map((entry, index) => (_jsxs(_Fragment, { children: [index > 0 && ', ', entry.slug === null ? (entry.name) : (_jsx("a", { href: entry.kind === 'employer'
|
|
48
48
|
? `/employers/${entry.slug}`
|
|
49
|
-
: `/candidates/${entry.slug}`, children: entry.name }))] })))] }))] })), _jsx("h2", { class: "card-title", children: "Everyone" }), updates.length === 0 ? (_jsxs(Empty, { children: [_jsx("h2", { children: "Nothing posted yet" }), _jsx("p", { children: "An employer or a candidate posts here from their own page. It is the space between \"posted a job\" and silence." })] })) : (_jsx(UpdateList, { updates: updates })), _jsxs("p", { class: "small muted", children: ["This page is a feed: ", _jsx("a", { href: "/updates/feed", children: "/updates/feed" }), ", as Markdown at", ' ', _jsx("a", { href: "/updates.md", children: "/updates.md" }), ", as JSON at
|
|
49
|
+
: `/candidates/${entry.slug}`, children: entry.name }))] })))] }))] })), _jsx("h2", { class: "card-title", children: "Everyone" }), updates.length === 0 ? (_jsxs(Empty, { children: [_jsx("h2", { children: "Nothing posted yet" }), _jsx("p", { children: "An employer or a candidate posts here from their own page. It is the space between \"posted a job\" and silence." })] })) : (_jsx(UpdateList, { updates: updates })), _jsxs("p", { class: "small muted", children: ["This page is a feed: ", _jsx("a", { href: "/updates/feed", children: "/updates/feed" }), ", as Markdown at", ' ', _jsx("a", { href: "/updates.md", children: "/updates.md" }), ", as JSON at", ' ', _jsx("a", { href: "/api/v1/updates", children: "/api/v1/updates" }), ". One author at a time with", ' ', _jsx("code", { children: "?org=slug" }), " or ", _jsx("code", { children: "?candidate=slug" }), "."] })] }));
|
|
50
50
|
//# sourceMappingURL=updates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updates.js","sourceRoot":"","sources":["../../src/views/updates.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"updates.js","sourceRoot":"","sources":["../../src/views/updates.tsx"],"names":[],"mappings":"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"}
|
package/docs/openjob.md
CHANGED
|
@@ -35,6 +35,14 @@ serves at `GET /api/v1/jobs/{slug}`.
|
|
|
35
35
|
"seniority": "staff",
|
|
36
36
|
"location": "European timezones",
|
|
37
37
|
"remoteRegions": ["DE", "NL", "PT"],
|
|
38
|
+
"pay": {
|
|
39
|
+
"lines": [
|
|
40
|
+
{ "type": "yearly", "min": 180000, "max": 230000, "currency": "USD", "unit": null }
|
|
41
|
+
],
|
|
42
|
+
"method": "payroll",
|
|
43
|
+
"equity": "0.1% - 0.4%",
|
|
44
|
+
"unpaid": false
|
|
45
|
+
},
|
|
38
46
|
"salary": {
|
|
39
47
|
"min": 180000,
|
|
40
48
|
"max": 230000,
|
|
@@ -57,6 +65,60 @@ serves at `GET /api/v1/jobs/{slug}`.
|
|
|
57
65
|
|
|
58
66
|
`description` is Markdown. Not HTML, and not plain text with the formatting removed.
|
|
59
67
|
|
|
68
|
+
## pay
|
|
69
|
+
|
|
70
|
+
What it pays, in full, and **required before a listing can be published**. A listing
|
|
71
|
+
that says nothing about pay gets fewer and worse applications, and an agent reading it
|
|
72
|
+
cannot tell whether to bother; on this board "not stated" is not a listing anybody can
|
|
73
|
+
act on. "Unpaid" counts, because it is an answer.
|
|
74
|
+
|
|
75
|
+
`pay.lines` is a list because one price is not enough for the work this board is for.
|
|
76
|
+
A listing that pays per task, per pull request and per social post has three lines,
|
|
77
|
+
and a reader deciding whether to apply needs all of them:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
"pay": {
|
|
81
|
+
"lines": [
|
|
82
|
+
{ "type": "per_task", "min": 0.25, "max": 0.25, "currency": "USD", "unit": "task" },
|
|
83
|
+
{ "type": "per_unit", "min": 0.25, "max": 0.25, "currency": "USD", "unit": "PR that fixes a bug you find" },
|
|
84
|
+
{ "type": "per_unit", "min": 0.25, "max": 0.25, "currency": "USD", "unit": "social post linking to your page" }
|
|
85
|
+
],
|
|
86
|
+
"method": "SOL",
|
|
87
|
+
"equity": null,
|
|
88
|
+
"unpaid": false
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`type` is one of `hourly`, `daily`, `weekly`, `monthly`, `yearly`, `fixed`, `per_task`,
|
|
93
|
+
`per_unit`, `revenue_share`, `bounty`: the same list [ugig.net](https://ugig.net) carries
|
|
94
|
+
as a gig's `budget_type`, in the same spelling, so a gig there and a job here describe
|
|
95
|
+
pay the same way. `currency` is what the figure is written in, an ISO code or a ticker
|
|
96
|
+
such as `SOL`; `%` for a revenue share. `method` is separate from the price on purpose:
|
|
97
|
+
"$100 an hour paid in USDC" is one rate with a settlement preference, not two rates,
|
|
98
|
+
and the number does not change because the rail did. It is a coin (`SOL`, `USDC`, `ETH`,
|
|
99
|
+
`USDT`, `POL`) or a rail (`bank transfer`, `PayPal`, `payroll`).
|
|
100
|
+
|
|
101
|
+
**Writing it.** Nobody has to build that JSON. Every writer on this board, the web form,
|
|
102
|
+
the API, the CLI, the job file and the MCP tool, takes each line as the sentence a person
|
|
103
|
+
would say, and the reference implementation parses it:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
$120k - $150k a year $100 an hour $800 a day
|
|
107
|
+
$5000 fixed $250 bounty 10% revenue share
|
|
108
|
+
$0.25 per task $0.25 per PR that fixes a bug you find
|
|
109
|
+
0.01 SOL per task $0.25 per social post, settled in SOL
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
A rail on the end of a line ("settled in SOL", "via bank transfer") becomes `method`.
|
|
113
|
+
A line that says how much but not what for (`$60k`) is refused with the fix. In a job
|
|
114
|
+
file the lines are a `pay:` list in the front matter and `pay_method:` beside it; over
|
|
115
|
+
the API, `pay` is an array of those strings or of line objects.
|
|
116
|
+
|
|
117
|
+
`salary` is the first time-based line flattened to `min`, `max`, `currency`, `period`,
|
|
118
|
+
kept for readers written against earlier versions and for the salary filter and sort,
|
|
119
|
+
which compare on an annual basis. A listing that pays per task has a null range there,
|
|
120
|
+
and its pay in `pay`.
|
|
121
|
+
|
|
60
122
|
## agentPolicy
|
|
61
123
|
|
|
62
124
|
The field this format exists for. Required on every listing, with exactly three
|
|
@@ -168,6 +230,7 @@ both - the JSON-LD for search engines, the OpenJob document for everything else.
|
|
|
168
230
|
| `workplace: "remote"` | `jobLocationType: "TELECOMMUTE"` |
|
|
169
231
|
| `remoteRegions` | `applicantLocationRequirements` |
|
|
170
232
|
| `location` | `jobLocation` |
|
|
233
|
+
| `pay` | nothing whole; the first time-based line travels as `salary`, below |
|
|
171
234
|
| `salary` | `baseSalary`, plus an annualised `estimatedSalary` |
|
|
172
235
|
| `salary.unpaid` | nothing; schema.org has no vocabulary for it, so `baseSalary` is simply absent |
|
|
173
236
|
| `expiresAt` | `validThrough` |
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
-- What a listing pays, in full.
|
|
2
|
+
--
|
|
3
|
+
-- A salary range per year was the whole vocabulary, and it described one
|
|
4
|
+
-- kind of work. The listings this board exists for pay per task, per pull
|
|
5
|
+
-- request, per social post, a flat fee for a project, a share of revenue or
|
|
6
|
+
-- a bounty, in dollars or in a coin, settled over whatever rail the two sides
|
|
7
|
+
-- agree on. This is the same model ugig.net carries as budget_type,
|
|
8
|
+
-- budget_unit and payment_coin, so a gig there and a job here describe pay
|
|
9
|
+
-- the same way.
|
|
10
|
+
--
|
|
11
|
+
-- The lines are JSON rather than a child table because they are read and
|
|
12
|
+
-- written as one value with the listing, never queried on their own: the
|
|
13
|
+
-- salary_* columns stay as the flattened first time-based line, which is
|
|
14
|
+
-- what the salary filter, the salary sort and the JobPosting structured
|
|
15
|
+
-- data compare on. A price per task has no annual figure and does not belong
|
|
16
|
+
-- in any of those.
|
|
17
|
+
alter table jobs add column if not exists pay_lines jsonb not null default '[]'::jsonb;
|
|
18
|
+
-- How it is settled: a coin such as SOL, or a rail such as "bank transfer".
|
|
19
|
+
alter table jobs add column if not exists pay_method text;
|
|
20
|
+
|
|
21
|
+
-- Every listing that already stated a range becomes one line, so the page
|
|
22
|
+
-- and the API say the same thing before and after this migration.
|
|
23
|
+
update jobs
|
|
24
|
+
set pay_lines = jsonb_build_array(jsonb_build_object(
|
|
25
|
+
'type', case salary_period
|
|
26
|
+
when 'hour' then 'hourly'
|
|
27
|
+
when 'day' then 'daily'
|
|
28
|
+
when 'week' then 'weekly'
|
|
29
|
+
when 'month' then 'monthly'
|
|
30
|
+
else 'yearly'
|
|
31
|
+
end,
|
|
32
|
+
'min', salary_min,
|
|
33
|
+
'max', salary_max,
|
|
34
|
+
'currency', upper(coalesce(salary_currency, 'USD')),
|
|
35
|
+
'unit', null))
|
|
36
|
+
where pay_lines = '[]'::jsonb
|
|
37
|
+
and salary_unpaid = false
|
|
38
|
+
and (salary_min is not null or salary_max is not null);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
-- Recommendations: what somebody who worked with you says about you, shown
|
|
2
|
+
-- on your page once you have agreed to it.
|
|
3
|
+
--
|
|
4
|
+
-- Not a rating. A star out of five from a stranger who paid you once is a
|
|
5
|
+
-- number that says nothing and cannot be answered; it is the thing that
|
|
6
|
+
-- makes a marketplace profile a scoreboard. A recommendation is a paragraph
|
|
7
|
+
-- with a name on it, from an employer who hired you or a person you hired,
|
|
8
|
+
-- and it goes on your page only when you approve it. You can reject one,
|
|
9
|
+
-- and nothing is shown. That is LinkedIn's model, and it is the right one
|
|
10
|
+
-- for a board where every profile is a person's own document.
|
|
11
|
+
--
|
|
12
|
+
-- Both directions, because the board is symmetric: an employer recommends a
|
|
13
|
+
-- candidate, and a candidate recommends an employer. Each side is a person
|
|
14
|
+
-- or an employer, the same way a message is.
|
|
15
|
+
create table if not exists recommendations (
|
|
16
|
+
id uuid primary key default gen_random_uuid(),
|
|
17
|
+
-- Who is saying it: a person as themselves, or an employer through a
|
|
18
|
+
-- member. Exactly one.
|
|
19
|
+
author_user_id uuid references users (id) on delete cascade,
|
|
20
|
+
author_org_id uuid references organisations (id) on delete cascade,
|
|
21
|
+
-- The person who typed it, kept even for an employer's, so "who wrote
|
|
22
|
+
-- this" has an answer after they leave the company.
|
|
23
|
+
written_by uuid not null references users (id) on delete cascade,
|
|
24
|
+
-- Who it is about. Exactly one.
|
|
25
|
+
user_id uuid references users (id) on delete cascade,
|
|
26
|
+
org_id uuid references organisations (id) on delete cascade,
|
|
27
|
+
-- The words. Text, rendered as text.
|
|
28
|
+
body text not null check (length(body) between 20 and 2000),
|
|
29
|
+
-- "Hired them for a three-month contract", "Worked with them at Acme".
|
|
30
|
+
relationship text,
|
|
31
|
+
-- pending until the subject approves; approved is public; rejected is
|
|
32
|
+
-- kept so the author can see it was, and so it cannot be re-sent daily.
|
|
33
|
+
status text not null default 'pending'
|
|
34
|
+
check (status in ('pending', 'approved', 'rejected')),
|
|
35
|
+
created_at timestamptz not null default now(),
|
|
36
|
+
updated_at timestamptz not null default now(),
|
|
37
|
+
decided_at timestamptz,
|
|
38
|
+
constraint recommendations_one_author check (
|
|
39
|
+
(author_user_id is null) <> (author_org_id is null)
|
|
40
|
+
),
|
|
41
|
+
constraint recommendations_one_subject check ((user_id is null) <> (org_id is null)),
|
|
42
|
+
-- Nobody recommends themselves, and an employer does not recommend itself.
|
|
43
|
+
constraint recommendations_not_self check (
|
|
44
|
+
(author_user_id is null or user_id is null or author_user_id <> user_id)
|
|
45
|
+
and (author_org_id is null or org_id is null or author_org_id <> org_id)
|
|
46
|
+
)
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
-- One per author per subject. Writing it again replaces the words and goes
|
|
50
|
+
-- back to pending for the subject to read again.
|
|
51
|
+
create unique index if not exists recommendations_user_user_key
|
|
52
|
+
on recommendations (author_user_id, user_id) where author_user_id is not null and user_id is not null;
|
|
53
|
+
create unique index if not exists recommendations_user_org_key
|
|
54
|
+
on recommendations (author_user_id, org_id) where author_user_id is not null and org_id is not null;
|
|
55
|
+
create unique index if not exists recommendations_org_user_key
|
|
56
|
+
on recommendations (author_org_id, user_id) where author_org_id is not null and user_id is not null;
|
|
57
|
+
create unique index if not exists recommendations_org_org_key
|
|
58
|
+
on recommendations (author_org_id, org_id) where author_org_id is not null and org_id is not null;
|
|
59
|
+
|
|
60
|
+
-- A page reads "approved, newest first" for one subject.
|
|
61
|
+
create index if not exists recommendations_user_idx on recommendations (user_id, status, decided_at desc)
|
|
62
|
+
where user_id is not null;
|
|
63
|
+
create index if not exists recommendations_org_idx on recommendations (org_id, status, decided_at desc)
|
|
64
|
+
where org_id is not null;
|
|
65
|
+
create index if not exists recommendations_written_idx on recommendations (written_by, created_at desc);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@profullstack/agenticjobs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "An agent-friendly job board you self-host. It posts its own jobs, never scrapes anyone else's, and answers on every surface: web, API, MCP, CLI, TUI, desktop and PWA. Instances find each other through an open directory.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
package/web/public/app.css
CHANGED
|
@@ -750,6 +750,41 @@ a.badge-plain:hover .badge {
|
|
|
750
750
|
font-weight: 600;
|
|
751
751
|
}
|
|
752
752
|
|
|
753
|
+
/* A body inside a card: a message, an update, a recommendation, an answer.
|
|
754
|
+
Same grammar as a listing, tighter spacing, and no heading taller than the
|
|
755
|
+
card's own title. The last block loses its bottom margin so the meta line
|
|
756
|
+
underneath sits where it did when the body was one paragraph. */
|
|
757
|
+
.prose-compact {
|
|
758
|
+
max-width: none;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
.prose-compact p,
|
|
762
|
+
.prose-compact ul,
|
|
763
|
+
.prose-compact ol,
|
|
764
|
+
.prose-compact blockquote,
|
|
765
|
+
.prose-compact pre,
|
|
766
|
+
.prose-compact .table-wrap {
|
|
767
|
+
margin: 0 0 0.6rem;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
.prose-compact > :last-child {
|
|
771
|
+
margin-bottom: 0;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.prose-compact h1,
|
|
775
|
+
.prose-compact h2,
|
|
776
|
+
.prose-compact h3,
|
|
777
|
+
.prose-compact h4,
|
|
778
|
+
.prose-compact h5,
|
|
779
|
+
.prose-compact h6 {
|
|
780
|
+
font-size: 1.05em;
|
|
781
|
+
margin: 0.9rem 0 0.3rem;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
.prose-compact hr {
|
|
785
|
+
margin: 0.9rem 0;
|
|
786
|
+
}
|
|
787
|
+
|
|
753
788
|
/* --- misc -------------------------------------------------------------- */
|
|
754
789
|
|
|
755
790
|
.code-block {
|
|
@@ -884,8 +919,6 @@ a.badge-plain:hover .badge {
|
|
|
884
919
|
|
|
885
920
|
.update-body {
|
|
886
921
|
margin: 0;
|
|
887
|
-
/* Written in a textarea, so its line breaks are the ones the author made. */
|
|
888
|
-
white-space: pre-wrap;
|
|
889
922
|
/* A pasted URL is one unbreakable word and would otherwise push the card
|
|
890
923
|
wider than the viewport on a phone. */
|
|
891
924
|
overflow-wrap: anywhere;
|
|
@@ -950,8 +983,6 @@ a.badge-plain:hover .badge {
|
|
|
950
983
|
|
|
951
984
|
.message-body {
|
|
952
985
|
margin: 0;
|
|
953
|
-
/* Typed in a textarea, so the line breaks are the author's. */
|
|
954
|
-
white-space: pre-wrap;
|
|
955
986
|
overflow-wrap: anywhere;
|
|
956
987
|
}
|
|
957
988
|
|
|
@@ -973,7 +1004,7 @@ a.badge-plain:hover .badge {
|
|
|
973
1004
|
|
|
974
1005
|
.invoice-description {
|
|
975
1006
|
margin: 0;
|
|
976
|
-
|
|
1007
|
+
overflow-wrap: anywhere;
|
|
977
1008
|
}
|
|
978
1009
|
|
|
979
1010
|
.invoice-form > summary {
|
|
@@ -1002,3 +1033,27 @@ a.badge-plain:hover .badge {
|
|
|
1002
1033
|
color: var(--muted-foreground);
|
|
1003
1034
|
font-weight: 500;
|
|
1004
1035
|
}
|
|
1036
|
+
|
|
1037
|
+
/* --- recommendations --------------------------------------------------- */
|
|
1038
|
+
|
|
1039
|
+
.recommendations {
|
|
1040
|
+
list-style: none;
|
|
1041
|
+
margin: 0;
|
|
1042
|
+
padding: 0;
|
|
1043
|
+
display: flex;
|
|
1044
|
+
flex-direction: column;
|
|
1045
|
+
gap: 0.9rem;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
.recommendation {
|
|
1049
|
+
padding-left: 0.9rem;
|
|
1050
|
+
border-left: 3px solid color-mix(in oklab, var(--primary) 45%, var(--border));
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
.recommendation-body {
|
|
1054
|
+
overflow-wrap: anywhere;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
.recommendation-meta {
|
|
1058
|
+
margin: 0.35rem 0 0;
|
|
1059
|
+
}
|
package/web/public/sw.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* drifted, which is the only version of this rule that survives contact.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
const VERSION = '
|
|
16
|
+
const VERSION = 'bb197f9b';
|
|
17
17
|
const SHELL = `shell-${VERSION}`;
|
|
18
18
|
const ASSETS = ['/assets/app.css', '/assets/tokens.css', '/assets/icon.svg'];
|
|
19
19
|
|