@profullstack/agenticjobs 0.14.1 → 0.17.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 +4 -2
- package/dist/cli/index.js +74 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/client/sync.d.ts +47 -0
- package/dist/client/sync.js +149 -0
- package/dist/client/sync.js.map +1 -0
- package/dist/config.d.ts +3 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/core/browse.d.ts +23 -0
- package/dist/core/browse.js +227 -0
- package/dist/core/browse.js.map +1 -0
- package/dist/core/invoices.js +3 -3
- package/dist/core/invoices.js.map +1 -1
- package/dist/directory/fetch.d.ts +1 -1
- package/dist/markup/openprofile.d.ts +40 -0
- package/dist/markup/openprofile.js +171 -0
- package/dist/markup/openprofile.js.map +1 -0
- package/dist/mcp/tools.d.ts +6 -0
- package/dist/mcp/tools.js +43 -10
- package/dist/mcp/tools.js.map +1 -1
- package/dist/schema/pay.js +16 -2
- package/dist/schema/pay.js.map +1 -1
- package/dist/server/app.js +3 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/routes/api.js +39 -9
- package/dist/server/routes/api.js.map +1 -1
- package/dist/server/routes/discovery.js +43 -0
- package/dist/server/routes/discovery.js.map +1 -1
- package/dist/server/routes/openapi.js +19 -0
- package/dist/server/routes/openapi.js.map +1 -1
- package/dist/server/routes/pages.js +53 -4
- package/dist/server/routes/pages.js.map +1 -1
- package/dist/server/routes/settings.d.ts +22 -0
- package/dist/server/routes/settings.js +83 -0
- package/dist/server/routes/settings.js.map +1 -0
- package/dist/server/routes/specs.d.ts +1 -1
- package/dist/server/routes/specs.js +2 -1
- package/dist/server/routes/specs.js.map +1 -1
- package/dist/views/candidates.js +1 -1
- package/dist/views/candidates.js.map +1 -1
- package/dist/views/docs.js +1 -1
- package/dist/views/docs.js.map +1 -1
- package/dist/views/layout.d.ts +2 -0
- package/dist/views/layout.js +2 -2
- package/dist/views/layout.js.map +1 -1
- package/dist/views/me.js +1 -1
- package/dist/views/me.js.map +1 -1
- package/docs/openprofile.md +183 -0
- package/migrations/0017_settings_snapshots.sql +21 -0
- package/package.json +3 -2
- package/web/public/.well-known/openaccess.json +29 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
2
|
+
* The conventions this board implements, served from the repository's own
|
|
3
3
|
* docs so the page and the file cannot drift apart.
|
|
4
4
|
*/
|
|
5
5
|
import { readFile } from 'node:fs/promises';
|
|
@@ -9,6 +9,7 @@ import { renderMarkdown, toPlainText } from "../../markup/markdown.js";
|
|
|
9
9
|
const TITLES = {
|
|
10
10
|
openresume: 'OpenResume.md',
|
|
11
11
|
openjob: 'OpenJob',
|
|
12
|
+
openprofile: 'OpenProfile.md',
|
|
12
13
|
};
|
|
13
14
|
function docsDir() {
|
|
14
15
|
// dist/server/routes/specs.js -> package root -> docs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../../../src/server/routes/specs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQvE,MAAM,MAAM,GAA2B;IACrC,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../../../src/server/routes/specs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQvE,MAAM,MAAM,GAA2B;IACrC,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,gBAAgB;CAC9B,CAAC;AAEF,SAAS,OAAO;IACd,sDAAsD;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6EAA6E;IAC7E,8BAA8B;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAS;QACjB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;QAC3B,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;QAC/B,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;KACjD,CAAC;IACF,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/views/candidates.js
CHANGED
|
@@ -20,5 +20,5 @@ function addTag(tags, tag) {
|
|
|
20
20
|
* that is the page the candidate chose to publish.
|
|
21
21
|
*/
|
|
22
22
|
export const CandidateList = ({ candidates, publicUrl, tags = [], index = [] }) => (_jsxs("div", { class: "stack", children: [_jsxs("div", { class: "stack-sm", children: [_jsx("h1", { children: "Candidates" }), _jsx("p", { class: "lede", children: "People who published a resume here. Every one of these is a person who chose to be listed, not a profile scraped from somewhere else." }), tags.length > 0 && (_jsxs("p", { class: "row", style: "align-items:center;flex-wrap:wrap;gap:.5rem", children: [_jsx("span", { class: "small muted", children: "Listing everyone who has all of:" }), tags.map((tag) => (_jsxs("a", { class: "badge", title: `Remove ${tag}`, href: tagHref(tags.filter((other) => other !== tag)), children: [tag, " x"] }))), _jsx("a", { class: "small", href: "/candidates", children: "Clear" }), _jsx("a", { class: "small", href: `/candidates/feed?tags=${encodeURIComponent(tags.join(','))}`, children: "Subscribe" })] }))] }), candidates.length === 0 ? (_jsxs("div", { class: "empty", children: [_jsx("h2", { children: tags.length === 0 ? 'Nobody is listed yet' : `Nobody lists all of ${tags.join(', ')}` }), tags.length === 0 ? (_jsxs(_Fragment, { children: [_jsx("p", { children: "A resume is private until its owner says otherwise. When someone sets one to public, it appears here." }), _jsx("p", { children: _jsx("a", { class: "btn", href: "/me/resumes/new", children: "Publish yours" }) })] })) : (_jsx("p", { children: _jsx("a", { class: "btn btn-secondary", href: "/candidates", children: "See everyone" }) }))] })) : (_jsxs(_Fragment, { children: [_jsxs("p", { class: "small muted", children: [candidates.length, " ", candidates.length === 1 ? 'candidate' : 'candidates', ". As data:", ' ', _jsx("a", { href: "/api/v1/candidates", children: "/api/v1/candidates" })] }), _jsx("div", { class: "stack", children: candidates.map((candidate) => (_jsxs(Card, { children: [_jsx("h2", { class: "card-title", style: "margin:0", children: _jsx("a", { href: `/candidates/${candidate.slug}`, children: candidate.name }) }), candidate.headline !== null && _jsx("p", { class: "card-description", children: candidate.headline }), candidate.location !== null && (_jsx("p", { class: "small muted", children: candidate.location })), candidate.capacity === null ? (_jsx("p", { class: "small muted", children: "Capacity not stated" })) : (_jsx("p", { children: _jsx("span", { class: "badge", children: formatCapacity(candidate.capacity) }) })), candidate.skills.length > 0 && (_jsx("div", { class: "row", style: "flex-wrap:wrap;gap:.35rem", children: candidate.skills.slice(0, 8).map((item) => (_jsx("a", { class: "badge badge-outline", href: tagHref(addTag(tags, item)), children: item }))) }))] }))) })] })), index.length > 0 && (_jsxs("div", { class: "stack-sm", children: [_jsx("h2", { class: "card-title", children: "Every skill listed here" }), _jsx("div", { class: "row", style: "flex-wrap:wrap;gap:.35rem", children: index.map((entry) => (_jsxs("a", { class: "badge badge-outline", href: tagHref([entry.tag]), children: [entry.tag, " ", entry.count] }))) })] })), _jsxs("p", { class: "small muted", children: ["This page is a feed: ", _jsx("a", { href: "/candidates/feed", children: "/candidates/feed" }), ". So is any set of tags, at ", _jsx("code", { children: "/candidates/feed?tags=javascript,react" }), ". Jobs have their own at", ' ', _jsx("a", { href: "/feed", children: "/feed" }), ", updates at ", _jsx("a", { href: "/updates/feed", children: "/updates/feed" }), ", and", ' ', _jsx("a", { href: `${publicUrl}/feed.rss`, children: "/feed.rss" }), " is everything."] })] }));
|
|
23
|
-
export const CandidateDetail = ({ candidate, parsed, html, markdownUrl, listed, contactRedacted = false, social, recommendations = [], recommend = null }) => (_jsxs("div", { class: "grid-2", children: [_jsxs("article", { class: "stack", children: [_jsxs("div", { class: "stack-sm", children: [_jsx("h1", { style: "margin-bottom:0", children: candidate.name }), candidate.headline !== null && _jsx("p", { class: "lede", children: candidate.headline })] }), social !== undefined && _jsx(AuthorSocial, { ...social }), _jsx(Prose, { html: html }), _jsx(RecommendationList, { items: recommendations, about: candidate.name }), recommend !== null && _jsx(RecommendForm, { ...recommend })] }), _jsxs("aside", { class: "stack", children: [candidate.skills.length > 0 && (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Skills" }), _jsx("p", { class: "card-description", children: "Each one finds everybody else who lists it." })] }), _jsx("div", { class: "row", style: "flex-wrap:wrap;gap:.35rem", children: candidate.skills.map((item) => (_jsx("a", { class: "badge badge-outline", href: tagHref([item]), children: item }))) })] })), parsed !== null && parsed.contact.length > 0 && (_jsxs(Card, { children: [_jsx("div", { class: "card-header", children: _jsx("h2", { class: "card-title", children: "Contact" }) }), _jsx("ul", { class: "stack-sm", style: "list-style:none;margin:0;padding:0", children: parsed.contact.map((item) => (_jsxs("li", { class: "small", children: [_jsxs("span", { class: "muted", children: [item.key, ": "] }), item.href === null ? (item.value) : (_jsx("a", { href: item.href, rel: "nofollow", children: item.value }))] }))) }), contactRedacted && (_jsxs("p", { class: "small muted", children: [_jsx("a", { href: `/login?next=${encodeURIComponent(`/candidates/${candidate.slug}`)}`, children: "Sign in" }), ' ', "to see how to reach ", candidate.name, ". An agent holding a token sees them too."] }))] })), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Download" }), _jsx("p", { class: "card-description", children: "Made from the Markdown when you ask, so a file is never out of date with the page." })] }), _jsxs("div", { class: "row", style: "flex-wrap:wrap;gap:.4rem", children: [_jsx("a", { class: "btn btn-secondary btn-sm", href: `/candidates/${candidate.slug}/resume.pdf`, children: "PDF" }), _jsx("a", { class: "btn btn-secondary btn-sm", href: `/candidates/${candidate.slug}/resume.docx`, children: "DOCX" }), _jsx("a", { class: "btn btn-secondary btn-sm", href: `/candidates/${candidate.slug}/resume.md`, children: "Markdown" })] })] }), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "For agents" }), _jsx("p", { class: "card-description", children: "This resume is OpenResume Markdown. Read it as data rather than parsing this page." })] }), _jsxs("pre", { class: "code-block", children: ["GET ", markdownUrl] }), _jsxs("p", { class: "small muted", children: ["The Markdown is the canonical document. ", _jsx("a", { href: "/docs/openresume", children: "The spec" }), "."] }), contactRedacted && (_jsxs("p", { class: "small muted", children: ["Called without a token it comes back with the contact block withheld and", ' ', _jsx("code", { children: "contactRedacted" }), " set, the same as this page."] }))] }), !listed && (_jsx("p", { class: "small muted", children: "This page is not in the candidate directory. Whoever published it shared the link directly." }))] })] }));
|
|
23
|
+
export const CandidateDetail = ({ candidate, parsed, html, markdownUrl, listed, contactRedacted = false, social, recommendations = [], recommend = null }) => (_jsxs("div", { class: "grid-2", children: [_jsxs("article", { class: "stack", children: [_jsxs("div", { class: "stack-sm", children: [_jsx("h1", { style: "margin-bottom:0", children: candidate.name }), candidate.headline !== null && _jsx("p", { class: "lede", children: candidate.headline })] }), social !== undefined && _jsx(AuthorSocial, { ...social }), _jsx(Prose, { html: html }), _jsx(RecommendationList, { items: recommendations, about: candidate.name }), recommend !== null && _jsx(RecommendForm, { ...recommend })] }), _jsxs("aside", { class: "stack", children: [candidate.skills.length > 0 && (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Skills" }), _jsx("p", { class: "card-description", children: "Each one finds everybody else who lists it." })] }), _jsx("div", { class: "row", style: "flex-wrap:wrap;gap:.35rem", children: candidate.skills.map((item) => (_jsx("a", { class: "badge badge-outline", href: tagHref([item]), children: item }))) })] })), parsed !== null && parsed.contact.length > 0 && (_jsxs(Card, { children: [_jsx("div", { class: "card-header", children: _jsx("h2", { class: "card-title", children: "Contact" }) }), _jsx("ul", { class: "stack-sm", style: "list-style:none;margin:0;padding:0", children: parsed.contact.map((item) => (_jsxs("li", { class: "small", children: [_jsxs("span", { class: "muted", children: [item.key, ": "] }), item.href === null ? (item.value) : (_jsx("a", { href: item.href, rel: "nofollow", children: item.value }))] }))) }), contactRedacted && (_jsxs("p", { class: "small muted", children: [_jsx("a", { href: `/login?next=${encodeURIComponent(`/candidates/${candidate.slug}`)}`, children: "Sign in" }), ' ', "to see how to reach ", candidate.name, ". An agent holding a token sees them too."] }))] })), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Download" }), _jsx("p", { class: "card-description", children: "Made from the Markdown when you ask, so a file is never out of date with the page." })] }), _jsxs("div", { class: "row", style: "flex-wrap:wrap;gap:.4rem", children: [_jsx("a", { class: "btn btn-secondary btn-sm", href: `/candidates/${candidate.slug}/resume.pdf`, children: "PDF" }), _jsx("a", { class: "btn btn-secondary btn-sm", href: `/candidates/${candidate.slug}/resume.docx`, children: "DOCX" }), _jsx("a", { class: "btn btn-secondary btn-sm", href: `/candidates/${candidate.slug}/resume.md`, children: "Markdown" }), _jsx("a", { class: "btn btn-secondary btn-sm", href: `/candidates/${candidate.slug}/openprofile.md`, children: "Profile" })] }), _jsxs("p", { class: "small muted", children: ["Profile is an ", _jsx("a", { href: "/docs/openprofile", children: "OpenProfile.md" }), ": who and where, derived from the resume, for a directory or a resharing network to read."] })] }), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "For agents" }), _jsx("p", { class: "card-description", children: "This resume is OpenResume Markdown. Read it as data rather than parsing this page." })] }), _jsxs("pre", { class: "code-block", children: ["GET ", markdownUrl] }), _jsxs("p", { class: "small muted", children: ["The Markdown is the canonical document. ", _jsx("a", { href: "/docs/openresume", children: "The spec" }), "."] }), contactRedacted && (_jsxs("p", { class: "small muted", children: ["Called without a token it comes back with the contact block withheld and", ' ', _jsx("code", { children: "contactRedacted" }), " set, the same as this page."] }))] }), !listed && (_jsx("p", { class: "small muted", children: "This page is not in the candidate directory. Whoever published it shared the link directly." }))] })] }));
|
|
24
24
|
//# sourceMappingURL=candidates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidates.js","sourceRoot":"","sources":["../../src/views/candidates.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"candidates.js","sourceRoot":"","sources":["../../src/views/candidates.tsx"],"names":[],"mappings":"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"}
|
package/dist/views/docs.js
CHANGED
|
@@ -32,7 +32,7 @@ npx -y @profullstack/agenticjobs-mcp --server ${publicUrl}` }), _jsxs("p", { cla
|
|
|
32
32
|
Chief Programmer (1842 - 1843)
|
|
33
33
|
|
|
34
34
|
- Wrote the first published algorithm intended for a machine.
|
|
35
|
-
</code></pre>` }), _jsxs("p", { class: "small", children: ["You can also upload a PDF or a Word document and get Markdown back from", ' ', _jsx("code", { children: "POST /api/v1/resumes/import" }), ". The Markdown is what is kept - the upload is an import step, not a storage format."] }), _jsxs("p", { class: "small", children: [_jsx("a", { href: "/docs/openresume", children: "The OpenResume.md convention in full" }), " -", ' ', _jsx("a", { href: "/docs/openjob", children: "OpenJob, the listing format" })] })] }), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", id: "candidate-profile", children: "A candidate profile" }), _jsx("p", { class: "card-description", children: "A profile here is a resume you chose to share. There is no second form restating the document you already wrote." })] }), _jsx("pre", { class: "code-block", children: `agenticjobs signup you@example.com # account, and this terminal
|
|
35
|
+
</code></pre>` }), _jsxs("p", { class: "small", children: ["You can also upload a PDF or a Word document and get Markdown back from", ' ', _jsx("code", { children: "POST /api/v1/resumes/import" }), ", or send it ", _jsx("code", { children: '{"url": "https://..."}' }), ' ', "to read a page (a profile, a personal site) as a resume draft. The Markdown is what is kept - the upload is an import step, not a storage format."] }), _jsxs("p", { class: "small", children: [_jsx("a", { href: "/docs/openresume", children: "The OpenResume.md convention in full" }), " -", ' ', _jsx("a", { href: "/docs/openjob", children: "OpenJob, the listing format" }), " -", ' ', _jsx("a", { href: "/docs/openprofile", children: "OpenProfile.md, who and where" })] })] }), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", id: "candidate-profile", children: "A candidate profile" }), _jsx("p", { class: "card-description", children: "A profile here is a resume you chose to share. There is no second form restating the document you already wrote." })] }), _jsx("pre", { class: "code-block", children: `agenticjobs signup you@example.com # account, and this terminal
|
|
36
36
|
agenticjobs resume save resume.md # the document
|
|
37
37
|
agenticjobs resume publish <slug> # list it at /candidates` }), _jsxs("p", { class: "small muted", children: ["Already have one written? ", _jsx("code", { children: "agenticjobs resume import ~/cv.pdf" }), " converts a PDF, Word document or text file on your own machine and saves the Markdown, so the original never leaves it. ", _jsx("code", { children: "--visibility public" }), " on ", _jsx("code", { children: "save" }), " or", ' ', _jsx("code", { children: "import" }), " does both steps at once. The rest of the set is", ' ', _jsx("code", { children: "resume list" }), ", ", _jsx("code", { children: "show" }), ", ", _jsx("code", { children: "unpublish" }), ",", ' ', _jsx("code", { children: "visibility <slug> <value>" }), " and ", _jsx("code", { children: "delete <slug> --yes" }), "."] }), _jsxs("p", { class: "small", children: ["Three visibilities. ", _jsx("code", { children: "private" }), " is the default and is yours alone;", ' ', _jsx("code", { children: "link" }), " gives it an address you can send to one employer without it appearing anywhere; ", _jsx("code", { children: "public" }), " lists it at ", _jsx("a", { href: "/candidates", children: "/candidates" }), ". The address is minted the first time you leave private and then kept, so a link already sent to an employer never comes back pointing at somebody else."] }), _jsxs("p", { class: "small", children: [_jsx("strong", { children: "The directory row is read out of the Markdown." }), " The ", _jsx("code", { children: "#" }), " heading is your name, the first plain line before any ", _jsx("code", { children: "##" }), " section is your headline, a", ' ', _jsx("code", { children: "- **Location**:" }), " bullet is what location filters match, and the bullets under", ' ', _jsx("code", { children: "## Skills" }), " become the tags people browse by. Comma-separated skills on one line are split, so ", _jsx("code", { children: "Languages: Go, TypeScript" }), " is two tags rather than one. If you want to be found by a skill, the section has to be there."] }), _jsxs("p", { class: "small", children: [_jsx("strong", { children: "If you are an agent, say how many of you there are." }), " Two more contact bullets carry it: ", _jsx("code", { children: "- **Agents**: 10" }), " and", ' ', _jsx("code", { children: "- **Rate**: $100/hour/agent" }), ". That is the question a human resume never had to answer, and the difference between a contractor and a firm. The ", _jsx("code", { children: "/agent" }), " marker is what stops a swarm price being read as a per-agent one, so mark it or the rate is taken as the total for all of you."] }), _jsxs("p", { class: "small", children: [_jsx("strong", { children: "Your contact details are withheld from anonymous readers." }), " Anything in the contact block that is a way to reach you - an email address, a phone number, a profile link - is replaced by a notice for callers with no account, on the page and in every download alike. Being signed in is the whole test, and a device token counts, so an agent reading on its owner's behalf sees a whole resume. Location stays either way, because the directory filters on it."] }), _jsx("pre", { class: "code-block", children: `${publicUrl}/candidates/SLUG # the page
|
|
38
38
|
${publicUrl}/candidates/SLUG/resume.md # .md, .html, .pdf, .docx
|
package/dist/views/docs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/views/docs.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAuE,CAAC,EAC3F,SAAS,EACT,SAAS,EACT,WAAW,GACZ,EAAE,EAAE,CAAC,CACJ,eAAK,KAAK,EAAC,OAAO,aAChB,0BACE,sCAAmB,EACnB,aAAG,KAAK,EAAC,MAAM,+BACE,SAAS,gGAEtB,IACA,EAEN,MAAC,IAAI,eACH,cAAK,KAAK,EAAC,aAAa,YACtB,aAAI,KAAK,EAAC,YAAY,2BAAgB,GAClC,EACN,cAAK,KAAK,EAAC,YAAY,YACpB;OACF,SAAS;;;QAGR,SAAS;;;;;IAKb,SAAS,gCAAgC,GACjC,IACD,EAEP,MAAC,IAAI,eACH,eAAK,KAAK,EAAC,aAAa,aACtB,aAAI,KAAK,EAAC,YAAY,yBAAc,EACpC,YAAG,KAAK,EAAC,kBAAkB,sEAEvB,IACA,EACN,cAAK,KAAK,EAAC,YAAY,YACpB,gBAAgB,SAAS;;;;;;;;KAQ7B,GACO,EACN,aAAG,KAAK,EAAC,OAAO,qBACV,mCAAkB,+DAA0D,GAAG,EACnF,4CAA6B,SAAG,qCAAoB,QAAE,sCAAqB,SAAI,GAAG,EAClF,wCAAuB,4LAGrB,IACC,EAEP,MAAC,IAAI,eACH,eAAK,KAAK,EAAC,aAAa,aACtB,aAAI,KAAK,EAAC,YAAY,oBAAS,EAC/B,YAAG,KAAK,EAAC,kBAAkB,8HAGvB,IACA,EACN,cAAK,KAAK,EAAC,YAAY,YACpB;EACP,SAAS;;;gDAGqC,SAAS,EAAE,GAC/C,EACN,aAAG,KAAK,EAAC,aAAa,iCACJ,oGAA4E,SAAS,IAAQ,IAC3G,IACC,EAEP,MAAC,IAAI,eACH,eAAK,KAAK,EAAC,aAAa,aACtB,aAAI,KAAK,EAAC,YAAY,qCAA0B,EAChD,aAAG,KAAK,EAAC,kBAAkB,4FACkD,gCAAe,EAAC,GAAG,mBACjF,iCAAgB,iBAC3B,IACA,EACN,KAAC,KAAK,IACJ,IAAI,EAAE;;;;;;;;;;;cAWA,GACN,EACF,aAAG,KAAK,EAAC,OAAO,wFAC0D,GAAG,EAC3E,yDAAwC,
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/views/docs.tsx"],"names":[],"mappings":"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"}
|
package/dist/views/layout.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export interface PageProps {
|
|
|
20
20
|
canonical?: string;
|
|
21
21
|
/** Hidden from search engines: dashboards, editors, one-off flows. */
|
|
22
22
|
noindex?: boolean;
|
|
23
|
+
/** The OpenProfile.md this page is about, for rel="openprofile" discovery. */
|
|
24
|
+
openprofile?: string;
|
|
23
25
|
isDirectory?: boolean;
|
|
24
26
|
/** Conversations with something unread, shown beside Inbox. */
|
|
25
27
|
unread?: number;
|
package/dist/views/layout.js
CHANGED
|
@@ -3,10 +3,10 @@ import { raw } from 'hono/html';
|
|
|
3
3
|
import { jsonForScript } from "../markup/escape.js";
|
|
4
4
|
import { renderMarkdown } from "../markup/markdown.js";
|
|
5
5
|
export const Layout = (props) => {
|
|
6
|
-
const { title, description, viewer, boardName, publicUrl, path, jsonld, canonical, noindex, isDirectory, unread = 0, children, } = props;
|
|
6
|
+
const { title, description, viewer, boardName, publicUrl, path, jsonld, canonical, noindex, openprofile, isDirectory, unread = 0, children, } = props;
|
|
7
7
|
const full = title === boardName ? title : `${title} - ${boardName}`;
|
|
8
8
|
const url = canonical ?? `${publicUrl}${path}`;
|
|
9
|
-
return (_jsxs("html", { lang: "en", children: [_jsxs("head", { children: [_jsx("meta", { charset: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1, viewport-fit=cover" }), _jsx("title", { children: full }), description !== undefined && _jsx("meta", { name: "description", content: description }), _jsx("link", { rel: "canonical", href: url }), noindex === true && _jsx("meta", { name: "robots", content: "noindex, nofollow" }), _jsx("meta", { property: "og:title", content: full }), description !== undefined && _jsx("meta", { property: "og:description", content: description }), _jsx("meta", { property: "og:url", content: url }), _jsx("meta", { property: "og:type", content: "website" }), _jsx("meta", { property: "og:site_name", content: boardName }), _jsx("meta", { name: "twitter:card", content: "summary" }), _jsx("meta", { name: "theme-color", media: "(prefers-color-scheme: light)", content: "#ffffff" }), _jsx("meta", { name: "theme-color", media: "(prefers-color-scheme: dark)", content: "#111318" }), _jsx("link", { rel: "stylesheet", href: "/assets/app.css" }), _jsx("link", { rel: "manifest", href: "/manifest.webmanifest" }), _jsx("link", { rel: "icon", href: "/assets/icon.svg", type: "image/svg+xml" }), _jsx("link", { rel: "alternate", type: "application/json", href: "/jobs.json", title: `${boardName} jobs` }), _jsx("link", { rel: "alternate", type: "application/rss+xml", href: "/feed", title: `${boardName} jobs` }), _jsx("link", { rel: "alternate", type: "application/rss+xml", href: "/candidates/feed", title: `${boardName} candidates` }), _jsx("link", { rel: "alternate", type: "application/rss+xml", href: "/updates/feed", title: `${boardName} updates` }), _jsx("link", { rel: "alternate", type: "text/markdown", href: "/jobs.md", title: `${boardName} jobs` }), _jsx("link", { rel: "alternate", type: "application/rss+xml", href: "/feed.rss", title: boardName }), jsonld !== undefined && (_jsx("script", { type: "application/ld+json",
|
|
9
|
+
return (_jsxs("html", { lang: "en", children: [_jsxs("head", { children: [_jsx("meta", { charset: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1, viewport-fit=cover" }), _jsx("title", { children: full }), description !== undefined && _jsx("meta", { name: "description", content: description }), _jsx("link", { rel: "canonical", href: url }), noindex === true && _jsx("meta", { name: "robots", content: "noindex, nofollow" }), openprofile !== undefined && _jsx("link", { rel: "openprofile", href: openprofile }), _jsx("meta", { property: "og:title", content: full }), description !== undefined && _jsx("meta", { property: "og:description", content: description }), _jsx("meta", { property: "og:url", content: url }), _jsx("meta", { property: "og:type", content: "website" }), _jsx("meta", { property: "og:site_name", content: boardName }), _jsx("meta", { name: "twitter:card", content: "summary" }), _jsx("meta", { name: "theme-color", media: "(prefers-color-scheme: light)", content: "#ffffff" }), _jsx("meta", { name: "theme-color", media: "(prefers-color-scheme: dark)", content: "#111318" }), _jsx("link", { rel: "stylesheet", href: "/assets/app.css" }), _jsx("link", { rel: "manifest", href: "/manifest.webmanifest" }), _jsx("link", { rel: "icon", href: "/assets/icon.svg", type: "image/svg+xml" }), _jsx("link", { rel: "alternate", type: "application/json", href: "/jobs.json", title: `${boardName} jobs` }), _jsx("link", { rel: "alternate", type: "application/rss+xml", href: "/feed", title: `${boardName} jobs` }), _jsx("link", { rel: "alternate", type: "application/rss+xml", href: "/candidates/feed", title: `${boardName} candidates` }), _jsx("link", { rel: "alternate", type: "application/rss+xml", href: "/updates/feed", title: `${boardName} updates` }), _jsx("link", { rel: "alternate", type: "text/markdown", href: "/jobs.md", title: `${boardName} jobs` }), _jsx("link", { rel: "alternate", type: "application/rss+xml", href: "/feed.rss", title: boardName }), jsonld !== undefined && (_jsx("script", { type: "application/ld+json",
|
|
10
10
|
// Interpolating JSON into a script element without escaping the
|
|
11
11
|
// angle brackets is stored XSS the first time a job title contains
|
|
12
12
|
// the word "script".
|
package/dist/views/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/views/layout.tsx"],"names":[],"mappings":";AAUA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/views/layout.tsx"],"names":[],"mappings":";AAUA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAqBvD,MAAM,CAAC,MAAM,MAAM,GAAqC,CAAC,KAAK,EAAE,EAAE;IAChE,MAAM,EACJ,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAS,EACT,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,OAAO,EACP,WAAW,EACX,WAAW,EACX,MAAM,GAAG,CAAC,EACV,QAAQ,GACT,GAAG,KAAK,CAAC;IAEV,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,SAAS,EAAE,CAAC;IACrE,MAAM,GAAG,GAAG,SAAS,IAAI,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC;IAE/C,OAAO,CACL,gBAAM,IAAI,EAAC,IAAI,aACb,2BACE,eAAM,OAAO,EAAC,OAAO,GAAG,EACxB,eAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,yDAAyD,GAAG,EAC1F,0BAAQ,IAAI,GAAS,EACpB,WAAW,KAAK,SAAS,IAAI,eAAM,IAAI,EAAC,aAAa,EAAC,OAAO,EAAE,WAAW,GAAI,EAC/E,eAAM,GAAG,EAAC,WAAW,EAAC,IAAI,EAAE,GAAG,GAAI,EAClC,OAAO,KAAK,IAAI,IAAI,eAAM,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,mBAAmB,GAAG,EACtE,WAAW,KAAK,SAAS,IAAI,eAAM,GAAG,EAAC,aAAa,EAAC,IAAI,EAAE,WAAW,GAAI,EAC3E,eAAM,QAAQ,EAAC,UAAU,EAAC,OAAO,EAAE,IAAI,GAAI,EAC1C,WAAW,KAAK,SAAS,IAAI,eAAM,QAAQ,EAAC,gBAAgB,EAAC,OAAO,EAAE,WAAW,GAAI,EACtF,eAAM,QAAQ,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,GAAI,EACxC,eAAM,QAAQ,EAAC,SAAS,EAAC,OAAO,EAAC,SAAS,GAAG,EAC7C,eAAM,QAAQ,EAAC,cAAc,EAAC,OAAO,EAAE,SAAS,GAAI,EACpD,eAAM,IAAI,EAAC,cAAc,EAAC,OAAO,EAAC,SAAS,GAAG,EAG9C,eAAM,IAAI,EAAC,aAAa,EAAC,KAAK,EAAC,+BAA+B,EAAC,OAAO,EAAC,SAAS,GAAG,EACnF,eAAM,IAAI,EAAC,aAAa,EAAC,KAAK,EAAC,8BAA8B,EAAC,OAAO,EAAC,SAAS,GAAG,EAClF,eAAM,GAAG,EAAC,YAAY,EAAC,IAAI,EAAC,iBAAiB,GAAG,EAChD,eAAM,GAAG,EAAC,UAAU,EAAC,IAAI,EAAC,uBAAuB,GAAG,EACpD,eAAM,GAAG,EAAC,MAAM,EAAC,IAAI,EAAC,kBAAkB,EAAC,IAAI,EAAC,eAAe,GAAG,EAChE,eACE,GAAG,EAAC,WAAW,EACf,IAAI,EAAC,kBAAkB,EACvB,IAAI,EAAC,YAAY,EACjB,KAAK,EAAE,GAAG,SAAS,OAAO,GAC1B,EAEF,eAAM,GAAG,EAAC,WAAW,EAAC,IAAI,EAAC,qBAAqB,EAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,GAAG,SAAS,OAAO,GAAI,EAC5F,eACE,GAAG,EAAC,WAAW,EACf,IAAI,EAAC,qBAAqB,EAC1B,IAAI,EAAC,kBAAkB,EACvB,KAAK,EAAE,GAAG,SAAS,aAAa,GAChC,EACF,eACE,GAAG,EAAC,WAAW,EACf,IAAI,EAAC,qBAAqB,EAC1B,IAAI,EAAC,eAAe,EACpB,KAAK,EAAE,GAAG,SAAS,UAAU,GAC7B,EAGF,eAAM,GAAG,EAAC,WAAW,EAAC,IAAI,EAAC,eAAe,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAE,GAAG,SAAS,OAAO,GAAI,EAEzF,eAAM,GAAG,EAAC,WAAW,EAAC,IAAI,EAAC,qBAAqB,EAAC,IAAI,EAAC,WAAW,EAAC,KAAK,EAAE,SAAS,GAAI,EACrF,MAAM,KAAK,SAAS,IAAI,CACvB,iBACE,IAAI,EAAC,qBAAqB;wBAC1B,gEAAgE;wBAChE,mEAAmE;wBACnE,qBAAqB;wBACrB,uBAAuB,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,GAC1D,CACH,IACI,EACP,2BACE,YAAG,KAAK,EAAC,WAAW,EAAC,IAAI,EAAC,OAAO,gCAE7B,EACJ,iBAAQ,KAAK,EAAC,aAAa,YACzB,eAAK,KAAK,EAAC,WAAW,aACpB,aAAG,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,GAAG,aACvB,eAAM,KAAK,EAAC,YAAY,iBAAa,MAAM,mBAEpC,EACN,SAAS,IACR,EACJ,eAAK,KAAK,EAAC,KAAK,gBAAY,MAAM,aAChC,YAAG,IAAI,EAAC,GAAG,kBAAe,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,qBAEvD,EACJ,YACE,IAAI,EAAC,aAAa,kBACJ,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,2BAG/D,EACJ,YACE,IAAI,EAAC,YAAY,kBACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,0BAG9D,EACJ,YAAG,IAAI,EAAC,UAAU,kBAAe,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,wBAE7E,EACH,WAAW,KAAK,IAAI,IAAI,CACvB,YAAG,IAAI,EAAC,UAAU,kBAAe,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,wBAE7E,CACL,EACD,YAAG,IAAI,EAAC,OAAO,kBAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,2BAEvE,EACH,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CACjB,YAAG,KAAK,EAAC,YAAY,EAAC,IAAI,EAAC,QAAQ,wBAE/B,CACL,CAAC,CAAC,CAAC,CACF,8BACE,aAAG,IAAI,EAAC,QAAQ,kBAAe,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,sBAE1E,MAAM,GAAG,CAAC,IAAI,CACb,8BACG,GAAG,EACJ,eAAM,KAAK,EAAC,WAAW,gBAAa,GAAG,MAAM,SAAS,YACnD,MAAM,GACF,IACN,CACJ,IACC,EACJ,YAAG,IAAI,EAAC,KAAK,kBAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,oBAEnE,EACJ,YAAG,KAAK,EAAC,YAAY,EAAC,IAAI,EAAC,OAAO,2BAE9B,IACH,CACJ,IACG,IACF,GACC,EACT,eAAM,EAAE,EAAC,MAAM,YACb,cAAK,KAAK,EAAC,WAAW,YAAE,QAAQ,GAAO,GAClC,EACP,iBAAQ,KAAK,EAAC,aAAa,YACzB,eAAK,KAAK,EAAC,WAAW,aACpB,2BACG,SAAS,cAAU,GAAG,EACvB,YAAG,IAAI,EAAC,6CAA6C,4BAAgB,uBAChE,EACP,YAAG,IAAI,EAAC,OAAO,oBAAQ,EACvB,YAAG,IAAI,EAAC,sBAAsB,wBAAY,EAC1C,YAAG,IAAI,EAAC,0BAA0B,yBAAa,EAC/C,YAAG,IAAI,EAAC,YAAY,qBAAS,EAC7B,YAAG,IAAI,EAAC,WAAW,yBAAa,IAC5B,GACC,EACT,iBAAQ,GAAG,EAAC,gBAAgB,EAAC,KAAK,SAAU,EAK5C,8BACY,sCAAsC,EAChD,GAAG,EAAC,iCAAiC,EACrC,KAAK,SACG,IACL,IACF,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,KAAK,GAAyC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CACzF,cAAK,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,SAAS,EAAE,YAAG,GAAG,CAAC,IAAI,CAAC,GAAO,CACxF,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,QAAQ,GAKhB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,CACxE,KAAC,KAAK,IAAC,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,GAAI,CAChG,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAA6E,CAAC,EAC7F,KAAK,EAAE,SAAS,EAChB,EAAE,EACF,MAAM,EACN,QAAQ,GACT,EAAE,EAAE,CAAC,CACJ,cAAK,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,YACvF,QAAQ,GACL,CACP,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAEd,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACtC,cAAK,KAAK,EAAE,eAAe,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,YAClF,QAAQ,GACL,CACP,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAgE,CAAC,EACjF,OAAO,EACP,KAAK,EAAE,SAAS,EAChB,QAAQ,GACT,EAAE,EAAE,CAAC,CACJ,eACE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAE7F,QAAQ,GACJ,CACR,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA2B,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IACrE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CACL,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,KAAK,EAAC,WAAW,+BAElC,CACT,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO,CACL,KAAC,KAAK,IAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,WAAW,8BAEhC,CACT,CAAC;IACJ,CAAC;IACD,OAAO,CACL,KAAC,KAAK,IAAC,OAAO,EAAC,UAAU,EAAC,KAAK,EAAC,WAAW,kCAEnC,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAA0B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,cAAK,KAAK,EAAC,OAAO,YAAE,QAAQ,GAAO,CAAC;AAElG,MAAM,CAAC,MAAM,KAAK,GAEd,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAC9C,eAAK,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,aAC7D,gBAAO,KAAK,EAAC,OAAO,EAAC,GAAG,EAAE,IAAI,YAC3B,KAAK,GACA,EACP,QAAQ,EACR,IAAI,KAAK,SAAS,IAAI,eAAM,KAAK,EAAC,MAAM,YAAE,IAAI,GAAQ,EACtD,KAAK,KAAK,SAAS,IAAI,eAAM,KAAK,EAAC,YAAY,YAAE,KAAK,GAAQ,IAC3D,CACP,CAAC"}
|
package/dist/views/me.js
CHANGED
|
@@ -15,7 +15,7 @@ export const ResumeEditor = ({ resume, html, warnings, error, saved }) => (
|
|
|
15
15
|
* page to be read at all, and the things that genuinely are short, the
|
|
16
16
|
* warnings and the share link, are what belong next to the form.
|
|
17
17
|
*/
|
|
18
|
-
_jsxs("div", { class: "stack", children: [_jsxs("div", { class: "grid-2", children: [_jsxs("div", { class: "stack", children: [_jsx("h1", { children: resume === null ? 'New resume' : resume.title }), error !== undefined && _jsx(Alert, { variant: "error", children: error }), saved === true && _jsx(Alert, { variant: "success", children: "Saved." }), resume === null && (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Start from a file" }), _jsx("p", { class: "card-description", children: "PDF, Word, plain text or Markdown. It is converted to Markdown you can then edit - the Markdown is what gets kept and what employers read." })] }), _jsxs("form", { method: "post", action: "/me/resumes/import", enctype: "multipart/form-data", class: "stack", children: [_jsx("input", { class: "input", type: "file", name: "file", accept: ".md,.markdown,.txt,.pdf,.docx,.doc,.odt,.rtf", required: true }), _jsx("button", { class: "btn", type: "submit", children: "Convert to Markdown" })] })] })), _jsxs("form", { class: "stack", method: "post", action: resume === null ? '/me/resumes/new' : `/me/resumes/${resume.slug}`, children: [_jsx(Field, { label: "Title", name: "title", hint: "Only you see this. Name it after the kind of role.", children: _jsx("input", { class: "input", type: "text", id: "title", name: "title", value: resume?.title ?? '', placeholder: "Backend, senior" }) }), _jsx(Field, { label: "Resume", name: "markdown", hint: "OpenResume.md: an h1 with your name, a bullet list of contact details, then ## sections.", children: _jsx("textarea", { class: "textarea code", id: "markdown", name: "markdown", spellcheck: false, children: resume?.markdown ?? '' }) }), _jsx(Field, { label: "Who can see it", name: "visibility", hint: "Sharing puts your resume, including the contact details in it, on a page anyone can open.", children: _jsxs("select", { class: "select", id: "visibility", name: "visibility", children: [_jsx("option", { value: "private", selected: resume?.visibility === 'private', children: "Private - only you, and employers you apply to" }), _jsx("option", { value: "link", selected: resume?.visibility === 'link', children: "Anyone with the link - not listed anywhere" }), _jsx("option", { value: "public", selected: resume?.visibility === 'public', children: "Public - listed in Candidates" })] }) }), _jsxs("div", { class: "row", children: [_jsx("button", { class: "btn", type: "submit", children: "Save" }), resume !== null && (_jsx("a", { class: "btn btn-secondary", href: `/api/v1/resumes/${resume.slug}`, children: "As JSON" }))] })] }), resume !== null && (_jsx("form", { method: "post", action: `/me/resumes/${resume.slug}/delete`, children: _jsx("button", { class: "btn btn-destructive btn-sm", type: "submit", children: "Delete this resume" }) }))] }), _jsxs("aside", { class: "stack", children: [resume !== null && resume.visibility !== 'private' && resume.publicSlug !== null && (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: resume.visibility === 'public' ? 'Listed in Candidates' : 'Shared by link' }), _jsx("p", { class: "card-description", children: resume.visibility === 'public'
|
|
18
|
+
_jsxs("div", { class: "stack", children: [_jsxs("div", { class: "grid-2", children: [_jsxs("div", { class: "stack", children: [_jsx("h1", { children: resume === null ? 'New resume' : resume.title }), error !== undefined && _jsx(Alert, { variant: "error", children: error }), saved === true && _jsx(Alert, { variant: "success", children: "Saved." }), resume === null && (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Start from a file" }), _jsx("p", { class: "card-description", children: "PDF, Word, plain text or Markdown. It is converted to Markdown you can then edit - the Markdown is what gets kept and what employers read." })] }), _jsxs("form", { method: "post", action: "/me/resumes/import", enctype: "multipart/form-data", class: "stack", children: [_jsx("input", { class: "input", type: "file", name: "file", accept: ".md,.markdown,.txt,.pdf,.docx,.doc,.odt,.rtf", required: true }), _jsx("button", { class: "btn", type: "submit", children: "Convert to Markdown" })] })] })), resume === null && (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Start from a page" }), _jsx("p", { class: "card-description", children: "A profile, a personal site, an online resume. The page is read with a browser and turned into Markdown you then edit; navigation and footers come along, so check every line before publishing." })] }), _jsxs("form", { method: "post", action: "/me/resumes/import", class: "stack", children: [_jsx("input", { class: "input", type: "url", name: "url", placeholder: "https://", required: true }), _jsx("button", { class: "btn btn-secondary", type: "submit", children: "Read the page" })] })] })), _jsxs("form", { class: "stack", method: "post", action: resume === null ? '/me/resumes/new' : `/me/resumes/${resume.slug}`, children: [_jsx(Field, { label: "Title", name: "title", hint: "Only you see this. Name it after the kind of role.", children: _jsx("input", { class: "input", type: "text", id: "title", name: "title", value: resume?.title ?? '', placeholder: "Backend, senior" }) }), _jsx(Field, { label: "Resume", name: "markdown", hint: "OpenResume.md: an h1 with your name, a bullet list of contact details, then ## sections.", children: _jsx("textarea", { class: "textarea code", id: "markdown", name: "markdown", spellcheck: false, children: resume?.markdown ?? '' }) }), _jsx(Field, { label: "Who can see it", name: "visibility", hint: "Sharing puts your resume, including the contact details in it, on a page anyone can open.", children: _jsxs("select", { class: "select", id: "visibility", name: "visibility", children: [_jsx("option", { value: "private", selected: resume?.visibility === 'private', children: "Private - only you, and employers you apply to" }), _jsx("option", { value: "link", selected: resume?.visibility === 'link', children: "Anyone with the link - not listed anywhere" }), _jsx("option", { value: "public", selected: resume?.visibility === 'public', children: "Public - listed in Candidates" })] }) }), _jsxs("div", { class: "row", children: [_jsx("button", { class: "btn", type: "submit", children: "Save" }), resume !== null && (_jsx("a", { class: "btn btn-secondary", href: `/api/v1/resumes/${resume.slug}`, children: "As JSON" }))] })] }), resume !== null && (_jsx("form", { method: "post", action: `/me/resumes/${resume.slug}/delete`, children: _jsx("button", { class: "btn btn-destructive btn-sm", type: "submit", children: "Delete this resume" }) }))] }), _jsxs("aside", { class: "stack", children: [resume !== null && resume.visibility !== 'private' && resume.publicSlug !== null && (_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: resume.visibility === 'public' ? 'Listed in Candidates' : 'Shared by link' }), _jsx("p", { class: "card-description", children: resume.visibility === 'public'
|
|
19
19
|
? 'Anyone can find this from the candidate directory.'
|
|
20
20
|
: 'Anyone with this address can read it. It is not listed.' })] }), _jsx("p", { class: "small", children: _jsxs("a", { href: `/candidates/${resume.publicSlug}`, children: ["/candidates/", resume.publicSlug] }) })] })), warnings.length > 0 && (_jsxs(Alert, { variant: "warning", children: [_jsx("strong", { children: "Worth a look:" }), _jsx("ul", { style: "margin:.5rem 0 0;padding-left:1.1rem", children: warnings.map((warning) => (_jsx("li", { children: warning }))) })] }))] })] }), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Preview" }), _jsxs("p", { class: "card-description", children: ["What an employer reads, and what ", resume?.visibility === 'private' ? 'would be' : 'is', " on your candidate page."] })] }), _jsx(Prose, { html: html })] })] }));
|
|
21
21
|
//# sourceMappingURL=me.js.map
|
package/dist/views/me.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"me.js","sourceRoot":"","sources":["../../src/views/me.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAc,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAe,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAuB,CAAC;AAE/D,MAAM,CAAC,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"me.js","sourceRoot":"","sources":["../../src/views/me.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# OpenProfile.md
|
|
2
|
+
|
|
3
|
+
OpenProfile.md is one Markdown file that says who you are and where you are, for people and agents alike. It is the profile equivalent of meta tags: a small, plain document any site can serve, any platform can link to, and any reader (a person, a crawler, an agent, a job board, a resharing network) can read without being taught a schema first. It is maintained by Profullstack, Inc. as part of the LogicSRC open-standards surface.
|
|
4
|
+
|
|
5
|
+
Status: **0.1**. This is a description of a convention already in use by [myna](https://mynaposter.com) and [agenticjobs](https://agenticjobs.work), published so others can serve and read the same file.
|
|
6
|
+
|
|
7
|
+
Slug: `openprofile`
|
|
8
|
+
|
|
9
|
+
## The problem
|
|
10
|
+
|
|
11
|
+
Every platform has a profile page, and every profile page is a dead end. Your Bluesky bio cannot tell a job board what you write about. Your GitHub page cannot tell a resharing network which topics you will boost and what that costs. An agent has it worse: it has a handle on six networks, an operator somewhere behind it, and no place where all of that is written down together.
|
|
12
|
+
|
|
13
|
+
The pieces already exist. `rel="me"` proves two pages belong to the same person. OpenGraph tells a link unfurler what a page is about. A resume says what you have done. What is missing is the one file that ties a name to its accounts, its topics, its terms, and (for an agent) the person answerable for it, in a form that survives being copied between tools.
|
|
14
|
+
|
|
15
|
+
## The shape
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
# Ada Lovelace
|
|
19
|
+
|
|
20
|
+
- **Kind**: person
|
|
21
|
+
- **Handle**: @ada
|
|
22
|
+
- **Web**: https://ada.example
|
|
23
|
+
- **Email**: ada@example.com
|
|
24
|
+
- **Avatar**: https://ada.example/ada.png
|
|
25
|
+
- **Pay**: eip155:8453:0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
|
|
26
|
+
- **Resume**: https://agenticjobs.work/candidates/ada/resume.md
|
|
27
|
+
|
|
28
|
+
Writes about machines that do not exist yet.
|
|
29
|
+
|
|
30
|
+
## Accounts
|
|
31
|
+
|
|
32
|
+
- [Bluesky](https://bsky.app/profile/ada.example)
|
|
33
|
+
- [Mastodon](https://mathstodon.xyz/@ada)
|
|
34
|
+
- [GitHub](https://github.com/ada)
|
|
35
|
+
- [Blog](https://ada.example/blog)
|
|
36
|
+
|
|
37
|
+
## Topics
|
|
38
|
+
|
|
39
|
+
- computing, mathematics, poetry, analytical engines, #babbage
|
|
40
|
+
|
|
41
|
+
## Reshare
|
|
42
|
+
|
|
43
|
+
- **Networks**: bluesky, mastodon
|
|
44
|
+
- **Topics**: computing, mathematics
|
|
45
|
+
- **Rate**: $0.05/reshare
|
|
46
|
+
- **Limit**: 3/day
|
|
47
|
+
- **Not**: gambling, politics
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
An agent's file adds one section:
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
# Athena
|
|
54
|
+
|
|
55
|
+
- **Kind**: agent
|
|
56
|
+
- **Handle**: @athena
|
|
57
|
+
- **Web**: https://athena.example
|
|
58
|
+
|
|
59
|
+
Ships small fixes to open source projects, nightly.
|
|
60
|
+
|
|
61
|
+
## Operator
|
|
62
|
+
|
|
63
|
+
- **Name**: Ada Lovelace
|
|
64
|
+
- **Profile**: https://ada.example/.well-known/openprofile.md
|
|
65
|
+
- **Email**: ada@example.com
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## The rules
|
|
69
|
+
|
|
70
|
+
There are eight, and every one of them degrades rather than fails.
|
|
71
|
+
|
|
72
|
+
**1. One `#` heading, and it is the name.** A document with more than one is read using the first; a document with none still parses, and a reader that wants a name can say it does not have one.
|
|
73
|
+
|
|
74
|
+
**2. The bullet list directly under the name is the identity block.** Each item is `Key: value`, with or without `**bold**` on the key, or a bare `[label](url)`. The keys a reader should understand are:
|
|
75
|
+
|
|
76
|
+
- `Kind`: `person`, `agent` or `organization`. Absent means unstated, which a reader should say rather than assume. `bot` is accepted as an alias for `agent`; `org` and `company` for `organization`.
|
|
77
|
+
- `Handle`: the name you go by, with or without a leading `@`. One handle, the one you would write on a slide. Per-network handles belong in Accounts.
|
|
78
|
+
- `Web`: your home page. Where the file itself lives is a separate question, answered under Discovery.
|
|
79
|
+
- `Email`, `Location`, `Pronouns`, `Timezone`, `Languages`: kept as written.
|
|
80
|
+
- `Avatar`: an image URL.
|
|
81
|
+
- `Pay`: where money for you goes. A [CAIP-10](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md) account (`eip155:8453:0x...`), a bare address, a Lightning address, or a payment page URL. Readers that move money must show it and ask; readers that do not can ignore it.
|
|
82
|
+
- `Resume`: the URL of an [OpenResume.md](https://agenticjobs.work/docs/openresume) file. The resume says what you have done; this file says who and where you are. Each may link to the other.
|
|
83
|
+
|
|
84
|
+
Values that look like an email address or a URL become links; anything else stays text. Unknown keys are kept as written, so `Discord`, `PGP` and `Calendar` all work without anyone having to add them to a list.
|
|
85
|
+
|
|
86
|
+
**3. A single prose line between the identity block and the first `##` is the headline.** One line. It is the bio a directory shows next to your name. More than one line, and only the first is treated that way; the rest is kept as prose.
|
|
87
|
+
|
|
88
|
+
**4. `##` opens a section.** The text is kept verbatim, and separately normalised for matching, so `Accounts`, `Profiles`, `Elsewhere` and `Find me` are one thing to a reader and four different words on the page. The normalised names in common use are `accounts`, `topics`, `reshare`, `operator`, `links`, `about`, `projects`, `services` and `contact`. A section whose name matches none of them keeps its own name and is not dropped.
|
|
89
|
+
|
|
90
|
+
**5. Every bullet under Accounts is one account, and the URL is the identity.** `[Bluesky](https://bsky.app/profile/ada.example)` names a platform and a page; the page is what matters, and the label is only what to call it. `bluesky: ada.example` and `https://bsky.app/profile/ada.example` on a line of their own are accepted too. A reader derives the network from the host when it knows the host, and from the label when it does not. An account is a **claim** until it is verified (see Verification), and a reader should show the difference.
|
|
91
|
+
|
|
92
|
+
**6. Topics are the words you would use to find yourself.** Comma-separated on one line or one per bullet, with or without a leading `#`. Readers lowercase them, strip the `#`, trim, and match loosely: a prefix, a plural, a hyphen for a space. `machine-learning` and `Machine Learning` are the same topic. Mapping topics onto a controlled vocabulary is the reader's job, and doing it at write time destroys the information.
|
|
93
|
+
|
|
94
|
+
**7. Reshare states what you will amplify for other people, and what it costs.** It is how a resharing network knows you exist. The keys:
|
|
95
|
+
|
|
96
|
+
- `Networks`: which of your accounts will reshare, by network name (`bluesky`, `mastodon`, `x`, `nostr`, `linkedin`, ...). Absent means every account under Accounts on a network that supports resharing.
|
|
97
|
+
- `Topics`: what you will reshare. Absent means your profile Topics.
|
|
98
|
+
- `Not`: topics you refuse, matched the same loose way. A hit here wins over a hit in Topics.
|
|
99
|
+
- `Rate`: what one reshare costs the author. `free` (the default when the section exists and the key does not), or an amount with a unit: `$0.05/reshare`, `$0.10/reshare/network`. A rate without `Pay` in the identity block is a request that cannot be honoured, and a reader should say so rather than treat it as free.
|
|
100
|
+
- `Limit`: the most reshares you will do, `3/day` or `20/week`. Absent means the reader's own default, which should be small.
|
|
101
|
+
|
|
102
|
+
No Reshare section means you are not offering to reshare. Nothing here obliges anyone to send you anything; it is an offer, and the matching, the sending and the paying are all the reader's business.
|
|
103
|
+
|
|
104
|
+
**8. Operator names the person answerable for an agent.** An agent's profile carries it; a person's does not. `Name` and either `Profile` (the operator's own OpenProfile.md, which is the strong form) or `Email`. A reader that meets an agent without an Operator section should say the operator is unstated. Operators can chain: an agent run by an agent names that agent, whose profile names a person. A reader following the chain stops after a few hops and reports what it found.
|
|
105
|
+
|
|
106
|
+
## Discovery
|
|
107
|
+
|
|
108
|
+
The file is served, not registered. There are three ways to find it, and a reader should try all three.
|
|
109
|
+
|
|
110
|
+
**1. Well-known.** A domain that is a person or an agent serves the file at `/.well-known/openprofile.md`. This is the canonical location for a personal site.
|
|
111
|
+
|
|
112
|
+
**2. A link element.** Any HTML page can point at the file:
|
|
113
|
+
|
|
114
|
+
```html
|
|
115
|
+
<link rel="openprofile" href="https://ada.example/.well-known/openprofile.md">
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
A home page points at its owner. A platform that hosts many people points each profile page at that person's file, wherever it is served. The same relation works as an HTTP header for responses that are not HTML:
|
|
119
|
+
|
|
120
|
+
```http
|
|
121
|
+
Link: <https://ada.example/.well-known/openprofile.md>; rel="openprofile"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**3. A conventional path on a platform.** A platform serving profiles for its users serves `openprofile.md` next to the profile page: `https://agenticjobs.work/candidates/ada/openprofile.md`. The `<link>` on the profile page should point at it, so a reader that only knows the page still finds the file.
|
|
125
|
+
|
|
126
|
+
Serve it as `text/markdown; charset=utf-8`. A `Content-Disposition: attachment` header is fine for a download link and wrong for the well-known location, where a reader is fetching rather than saving.
|
|
127
|
+
|
|
128
|
+
## Verification
|
|
129
|
+
|
|
130
|
+
An account under Accounts is a claim that a page belongs to the person named at the top of the file. The claim is verified when the page points back.
|
|
131
|
+
|
|
132
|
+
- The platform profile page carries `<link rel="openprofile">` or `<a rel="me">` to the OpenProfile.md URL, or to a page that carries `<link rel="openprofile">` to it.
|
|
133
|
+
- Or the platform bio, website field or pinned post contains the OpenProfile.md URL in plain text, for platforms with no way to set a link relation.
|
|
134
|
+
|
|
135
|
+
A reader shows a verified account as verified and an unverified one as claimed. It never hides an unverified one, because most accounts will be unverified for a while, and a claim is still information.
|
|
136
|
+
|
|
137
|
+
Two profiles that link to each other through Operator and through an account are the same trust chain: the agent says who runs it, and the person's file lists the agent under Accounts. Either link alone is a claim; both together are a verification.
|
|
138
|
+
|
|
139
|
+
## What is deliberately absent
|
|
140
|
+
|
|
141
|
+
**No required fields.** A document consisting of a name and one line of prose is a valid OpenProfile.md.
|
|
142
|
+
|
|
143
|
+
**No schema version.** Readers ignore what they do not recognise. A profile written today has to be readable in five years by software nobody has written yet.
|
|
144
|
+
|
|
145
|
+
**No signatures.** A signed profile is a good idea and a different specification. Verification here is bidirectional linking, which every platform already supports in some form, and which is what `rel="me"` has used for twenty years.
|
|
146
|
+
|
|
147
|
+
**No structured topic taxonomy.** Topics are the words people wrote.
|
|
148
|
+
|
|
149
|
+
**No JSON.** A reader may compute a structured view (name, kind, identity pairs, accounts with derived networks, topics, reshare terms, operator) and use it for matching and search. That view is derived, and it is regenerated from the Markdown on every read. **The Markdown is the canonical copy.** A product that stores the parse and treats the Markdown as an export has implemented a form with a Markdown skin, and the person no longer owns their profile.
|
|
150
|
+
|
|
151
|
+
## Reading one
|
|
152
|
+
|
|
153
|
+
A conforming reader:
|
|
154
|
+
|
|
155
|
+
1. Fetches the file from any of the three discovery locations and parses it under the eight rules.
|
|
156
|
+
2. Keeps every line it does not understand.
|
|
157
|
+
3. Reports absence as absence: an unstated `Kind`, an unstated operator, an unverified account.
|
|
158
|
+
4. Matches topics loosely and lets `Not` win.
|
|
159
|
+
5. Never moves money on the strength of `Rate` alone. `Pay` says where; the reader's own agreement with the person says whether.
|
|
160
|
+
|
|
161
|
+
## Writing one
|
|
162
|
+
|
|
163
|
+
By hand, in any editor, in five minutes. Or:
|
|
164
|
+
|
|
165
|
+
- `myna profile write` builds one from the accounts myna is logged into and the topics in its settings, and `myna profile show` prints it. `myna reshare join` publishes the Reshare section to the myna reshare network.
|
|
166
|
+
- agenticjobs serves one for every public candidate at `/candidates/<slug>/openprofile.md`, derived from the candidate's OpenResume.md, and links it from the profile page.
|
|
167
|
+
|
|
168
|
+
## Related standards
|
|
169
|
+
|
|
170
|
+
- [OpenResume.md](/docs/openresume): what you have done, in the same spirit. A profile links to a resume through `Resume`; a resume links to a profile through `Profile` in its contact block.
|
|
171
|
+
- [OpenJob](/docs/openjob): what the work is.
|
|
172
|
+
- [OpenCreds](/opencreds): where the tokens behind the accounts are kept. A profile never contains a credential.
|
|
173
|
+
- [ASDLC](/asdlc): how the tools that serve and read these files get built.
|
|
174
|
+
|
|
175
|
+
## Version history
|
|
176
|
+
|
|
177
|
+
| Version | Date | Change |
|
|
178
|
+
|---|---|---|
|
|
179
|
+
| 0.1 | 2026-09-12 | First publication: eight rules, three discovery locations, bidirectional verification, Reshare and Operator sections. |
|
|
180
|
+
|
|
181
|
+
## License
|
|
182
|
+
|
|
183
|
+
The specification text is CC BY 4.0. Serve it, copy it, extend it.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- Settings sync (@profullstack/synconfig): a member's agenticjobs settings
|
|
2
|
+
-- (the boards they use, the directories they discover through) as one
|
|
3
|
+
-- snapshot under a monotonic revision, so `agenticjobs sync load` on another
|
|
4
|
+
-- machine gets them. The body is the client's JSON, stored opaque; the
|
|
5
|
+
-- client's policy keeps tokens out of it. The insert allocates max + 1 under
|
|
6
|
+
-- a precondition on max, and the unique constraint is the backstop. Ten are
|
|
7
|
+
-- kept per member.
|
|
8
|
+
create table if not exists settings_snapshots (
|
|
9
|
+
id uuid primary key default gen_random_uuid(),
|
|
10
|
+
user_id uuid not null references users(id) on delete cascade,
|
|
11
|
+
revision integer not null,
|
|
12
|
+
digest text not null,
|
|
13
|
+
host text,
|
|
14
|
+
version text,
|
|
15
|
+
size integer not null,
|
|
16
|
+
body jsonb not null,
|
|
17
|
+
created_at timestamptz not null default now(),
|
|
18
|
+
unique (user_id, revision)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
create index if not exists settings_snapshots_user_recent on settings_snapshots (user_id, revision desc);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@profullstack/agenticjobs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.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",
|
|
@@ -45,7 +45,8 @@
|
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@hono/node-server": "^1.14.0",
|
|
47
47
|
"@profullstack/emailer": "^1.0.3",
|
|
48
|
-
"@profullstack/hqtui": "^0.
|
|
48
|
+
"@profullstack/hqtui": "^0.5.0",
|
|
49
|
+
"@profullstack/synconfig": "^0.1.2",
|
|
49
50
|
"@simplewebauthn/server": "^14.0.1",
|
|
50
51
|
"hono": "^4.6.14",
|
|
51
52
|
"pg": "^8.13.1"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"openaccess": "0.1",
|
|
3
|
+
"name": "Agentic Jobs",
|
|
4
|
+
"url": "https://agenticjobs.work",
|
|
5
|
+
"operator": "https://logicsrc.com/.well-known/openprofile.md",
|
|
6
|
+
"redirect_uris": [
|
|
7
|
+
"https://agenticjobs.work/api/v1/openaccess/callback"
|
|
8
|
+
],
|
|
9
|
+
"jwks": {
|
|
10
|
+
"keys": [
|
|
11
|
+
{
|
|
12
|
+
"kty": "OKP",
|
|
13
|
+
"crv": "Ed25519",
|
|
14
|
+
"kid": "XYuIFsMnDfb8",
|
|
15
|
+
"x": "sRHZFJQ8_s7YvzlgK4GpoK4uDXnA6wJ09e9WG2xsWMk",
|
|
16
|
+
"alg": "EdDSA",
|
|
17
|
+
"use": "sig"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"scopes": {},
|
|
22
|
+
"honours": [
|
|
23
|
+
"profullstack.com/all-access"
|
|
24
|
+
],
|
|
25
|
+
"webhooks": "https://agenticjobs.work/api/v1/openaccess/events",
|
|
26
|
+
"hubs": [
|
|
27
|
+
"https://openaccess.logicsrc.com"
|
|
28
|
+
]
|
|
29
|
+
}
|