@profullstack/agenticjobs 0.1.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/LICENSE +21 -0
- package/README.md +219 -0
- package/bin/agenticjobs-mcp.mjs +2 -0
- package/bin/agenticjobs.mjs +2 -0
- package/dist/cli/args.d.ts +17 -0
- package/dist/cli/args.js +103 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/format.d.ts +15 -0
- package/dist/cli/format.js +24 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.js +620 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/jobfile.d.ts +15 -0
- package/dist/cli/jobfile.js +94 -0
- package/dist/cli/jobfile.js.map +1 -0
- package/dist/client/client.d.ts +105 -0
- package/dist/client/client.js +182 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/config.d.ts +33 -0
- package/dist/client/config.js +92 -0
- package/dist/client/config.js.map +1 -0
- package/dist/client/fanout.d.ts +35 -0
- package/dist/client/fanout.js +77 -0
- package/dist/client/fanout.js.map +1 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/login.d.ts +23 -0
- package/dist/client/login.js +45 -0
- package/dist/client/login.js.map +1 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.js +64 -0
- package/dist/config.js.map +1 -0
- package/dist/core/applications.d.ts +67 -0
- package/dist/core/applications.js +187 -0
- package/dist/core/applications.js.map +1 -0
- package/dist/core/auth.d.ts +120 -0
- package/dist/core/auth.js +246 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/import.d.ts +52 -0
- package/dist/core/import.js +311 -0
- package/dist/core/import.js.map +1 -0
- package/dist/core/jobs.d.ts +91 -0
- package/dist/core/jobs.js +381 -0
- package/dist/core/jobs.js.map +1 -0
- package/dist/core/orgs.d.ts +21 -0
- package/dist/core/orgs.js +111 -0
- package/dist/core/orgs.js.map +1 -0
- package/dist/core/resumes.d.ts +51 -0
- package/dist/core/resumes.js +144 -0
- package/dist/core/resumes.js.map +1 -0
- package/dist/core/zip.d.ts +17 -0
- package/dist/core/zip.js +77 -0
- package/dist/core/zip.js.map +1 -0
- package/dist/db/index.d.ts +3 -0
- package/dist/db/index.js +3 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +15 -0
- package/dist/db/migrate.js +67 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/pool.d.ts +13 -0
- package/dist/db/pool.js +68 -0
- package/dist/db/pool.js.map +1 -0
- package/dist/db/seed.d.ts +9 -0
- package/dist/db/seed.js +120 -0
- package/dist/db/seed.js.map +1 -0
- package/dist/directory/announce.d.ts +32 -0
- package/dist/directory/announce.js +59 -0
- package/dist/directory/announce.js.map +1 -0
- package/dist/directory/federate.d.ts +59 -0
- package/dist/directory/federate.js +126 -0
- package/dist/directory/federate.js.map +1 -0
- package/dist/directory/fetch.d.ts +35 -0
- package/dist/directory/fetch.js +138 -0
- package/dist/directory/fetch.js.map +1 -0
- package/dist/directory/index.d.ts +4 -0
- package/dist/directory/index.js +5 -0
- package/dist/directory/index.js.map +1 -0
- package/dist/directory/registry.d.ts +55 -0
- package/dist/directory/registry.js +155 -0
- package/dist/directory/registry.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/markup/escape.d.ts +20 -0
- package/dist/markup/escape.js +56 -0
- package/dist/markup/escape.js.map +1 -0
- package/dist/markup/markdown.d.ts +35 -0
- package/dist/markup/markdown.js +279 -0
- package/dist/markup/markdown.js.map +1 -0
- package/dist/markup/resume.d.ts +72 -0
- package/dist/markup/resume.js +260 -0
- package/dist/markup/resume.js.map +1 -0
- package/dist/mcp/protocol.d.ts +56 -0
- package/dist/mcp/protocol.js +48 -0
- package/dist/mcp/protocol.js.map +1 -0
- package/dist/mcp/server.d.ts +21 -0
- package/dist/mcp/server.js +73 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stdio.d.ts +13 -0
- package/dist/mcp/stdio.js +85 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/mcp/tools.d.ts +26 -0
- package/dist/mcp/tools.js +351 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/instance.d.ts +85 -0
- package/dist/schema/instance.js +147 -0
- package/dist/schema/instance.js.map +1 -0
- package/dist/schema/job.d.ts +151 -0
- package/dist/schema/job.js +73 -0
- package/dist/schema/job.js.map +1 -0
- package/dist/schema/jsonld.d.ts +18 -0
- package/dist/schema/jsonld.js +120 -0
- package/dist/schema/jsonld.js.map +1 -0
- package/dist/schema/query.d.ts +47 -0
- package/dist/schema/query.js +103 -0
- package/dist/schema/query.js.map +1 -0
- package/dist/schema/text.d.ts +27 -0
- package/dist/schema/text.js +117 -0
- package/dist/schema/text.js.map +1 -0
- package/dist/server/app.d.ts +13 -0
- package/dist/server/app.js +57 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/deps.d.ts +20 -0
- package/dist/server/deps.js +2 -0
- package/dist/server/deps.js.map +1 -0
- package/dist/server/middleware.d.ts +39 -0
- package/dist/server/middleware.js +100 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/routes/api.d.ts +20 -0
- package/dist/server/routes/api.js +584 -0
- package/dist/server/routes/api.js.map +1 -0
- package/dist/server/routes/descriptor.d.ts +11 -0
- package/dist/server/routes/descriptor.js +31 -0
- package/dist/server/routes/descriptor.js.map +1 -0
- package/dist/server/routes/discovery.d.ts +12 -0
- package/dist/server/routes/discovery.js +305 -0
- package/dist/server/routes/discovery.js.map +1 -0
- package/dist/server/routes/mcp.d.ts +19 -0
- package/dist/server/routes/mcp.js +85 -0
- package/dist/server/routes/mcp.js.map +1 -0
- package/dist/server/routes/openapi.d.ts +11 -0
- package/dist/server/routes/openapi.js +297 -0
- package/dist/server/routes/openapi.js.map +1 -0
- package/dist/server/routes/pages.d.ts +11 -0
- package/dist/server/routes/pages.js +445 -0
- package/dist/server/routes/pages.js.map +1 -0
- package/dist/server/routes/passkey.d.ts +20 -0
- package/dist/server/routes/passkey.js +198 -0
- package/dist/server/routes/passkey.js.map +1 -0
- package/dist/server/routes/specs.d.ts +10 -0
- package/dist/server/routes/specs.js +42 -0
- package/dist/server/routes/specs.js.map +1 -0
- package/dist/server/serve.d.ts +11 -0
- package/dist/server/serve.js +79 -0
- package/dist/server/serve.js.map +1 -0
- package/dist/tui/index.d.ts +13 -0
- package/dist/tui/index.js +266 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/state.d.ts +63 -0
- package/dist/tui/state.js +136 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/types.d.ts +2 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui/views.d.ts +11 -0
- package/dist/tui/views.js +197 -0
- package/dist/tui/views.js.map +1 -0
- package/dist/views/auth.d.ts +21 -0
- package/dist/views/auth.js +5 -0
- package/dist/views/auth.js.map +1 -0
- package/dist/views/docs.d.ts +17 -0
- package/dist/views/docs.js +40 -0
- package/dist/views/docs.js.map +1 -0
- package/dist/views/jobs.d.ts +49 -0
- package/dist/views/jobs.js +44 -0
- package/dist/views/jobs.js.map +1 -0
- package/dist/views/layout.d.ts +58 -0
- package/dist/views/layout.js +36 -0
- package/dist/views/layout.js.map +1 -0
- package/dist/views/me.d.ts +27 -0
- package/dist/views/me.js +6 -0
- package/dist/views/me.js.map +1 -0
- package/dist/views/network.d.ts +21 -0
- package/dist/views/network.js +17 -0
- package/dist/views/network.js.map +1 -0
- package/dist/views/post.d.ts +22 -0
- package/dist/views/post.js +20 -0
- package/dist/views/post.js.map +1 -0
- package/docs/openjob.md +200 -0
- package/docs/openresume.md +143 -0
- package/migrations/0001_init.sql +109 -0
- package/migrations/0002_auth.sql +82 -0
- package/migrations/0003_directory.sql +27 -0
- package/migrations/0004_resumes.sql +63 -0
- package/migrations/0005_application_drafts.sql +20 -0
- package/package.json +92 -0
- package/web/public/app.css +731 -0
- package/web/public/app.js +173 -0
- package/web/public/icon.svg +5 -0
- package/web/public/sw.js +64 -0
- package/web/public/tokens.css +153 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
2
|
+
import { ago, formatSalary } from "../schema/text.js";
|
|
3
|
+
import { queryToParams } from "../schema/query.js";
|
|
4
|
+
import { EMPLOYMENT_TYPES, SENIORITIES, WORKPLACES, AGENT_POLICIES } from "../schema/job.js";
|
|
5
|
+
import { AgentPolicyBadge, Alert, Badge, Card, Empty, Field, Prose } from "./layout.js";
|
|
6
|
+
export const JobCard = ({ job, origin, instanceName, }) => {
|
|
7
|
+
const salary = formatSalary(job.salary);
|
|
8
|
+
const href = origin === undefined ? `/jobs/${job.slug}` : `${origin}/jobs/${job.slug}`;
|
|
9
|
+
return (_jsx("li", { children: _jsxs("a", { class: "card card-link job-card", href: href, children: [_jsxs("div", { class: "spread", children: [_jsx("h2", { class: "job-title", children: job.title }), salary !== null && _jsx("span", { class: "job-salary", children: salary })] }), _jsxs("div", { class: "job-org", children: [job.org.name, job.location !== null && ` - ${job.location}`] }), _jsxs("div", { class: "job-meta", children: [_jsx(Badge, { variant: "outline", children: job.workplace }), _jsx(Badge, { variant: "outline", children: job.employmentType }), job.seniority !== null && _jsx(Badge, { variant: "outline", children: job.seniority }), _jsx(AgentPolicyBadge, { policy: job.agentPolicy }), job.stack.slice(0, 4).map((item) => (_jsx(Badge, { children: item })))] }), _jsxs("div", { class: "small muted", children: [ago(job.publishedAt), instanceName !== undefined && ` - on ${instanceName}`] })] }) }));
|
|
10
|
+
};
|
|
11
|
+
export const Filters = ({ query, action = '/' }) => (_jsxs("form", { class: "filters", method: "get", action: action, children: [_jsxs("div", { class: "filters-inline", children: [_jsx(Field, { label: "Search", name: "q", children: _jsx("input", { class: "input", type: "search", id: "q", name: "q", value: query.q ?? '', placeholder: "title, stack, anything" }) }), _jsx("button", { class: "btn", type: "submit", children: "Search" })] }), _jsxs("div", { class: "row", children: [_jsx(Select, { name: "workplace", label: "Anywhere", value: query.workplace, options: WORKPLACES }), _jsx(Select, { name: "employmentType", label: "Any type", value: query.employmentType, options: EMPLOYMENT_TYPES }), _jsx(Select, { name: "seniority", label: "Any level", value: query.seniority, options: SENIORITIES }), _jsx(Select, { name: "agentPolicy", label: "Any agent policy", value: query.agentPolicy, options: AGENT_POLICIES }), _jsx(Select, { name: "sort", label: "Newest", value: query.sort === 'recent' ? null : query.sort, options: ['relevant', 'salary'] }), _jsx("button", { class: "btn btn-secondary btn-sm", type: "submit", children: "Apply filters" })] })] }));
|
|
12
|
+
const Select = ({ name, label, value, options }) => (_jsxs("select", { class: "select", name: name, "aria-label": label, style: "width:auto;min-width:9rem", children: [_jsx("option", { value: "", children: label }), options.map((option) => (_jsx("option", { value: option, selected: value === option, children: option })))] }));
|
|
13
|
+
export const Pagination = ({ page, query, base = '/', }) => {
|
|
14
|
+
const previous = Math.max(0, query.offset - query.limit);
|
|
15
|
+
const next = query.offset + query.limit;
|
|
16
|
+
if (page.total <= query.limit)
|
|
17
|
+
return null;
|
|
18
|
+
const link = (offset) => {
|
|
19
|
+
const params = queryToParams({ ...query, offset });
|
|
20
|
+
const search = params.toString();
|
|
21
|
+
return search === '' ? base : `${base}?${search}`;
|
|
22
|
+
};
|
|
23
|
+
return (_jsxs("nav", { class: "pagination", "aria-label": "Pages", children: [query.offset > 0 && (_jsx("a", { class: "btn btn-secondary btn-sm", href: link(previous), children: "Previous" })), _jsxs("span", { class: "small muted", style: "align-self:center", children: [query.offset + 1, "-", Math.min(page.total, next), " of ", page.total] }), next < page.total && (_jsx("a", { class: "btn btn-secondary btn-sm", href: link(next), children: "Next" }))] }));
|
|
24
|
+
};
|
|
25
|
+
export const JobList = ({ page, query, boardName, tagline }) => (_jsxs("div", { class: "stack", children: [_jsxs("div", { children: [_jsx("h1", { children: boardName }), _jsx("p", { class: "lede", children: tagline })] }), _jsx(Filters, { query: query }), page.items.length === 0 ? (_jsxs(Empty, { children: [_jsx("p", { children: "Nothing matches that yet." }), _jsx("p", { class: "small", children: "This board only shows jobs posted to it, so an empty result means nobody has posted one like that - not that the search failed." })] })) : (_jsx("ul", { class: "job-list", children: page.items.map((job) => (_jsx(JobCard, { job: job }))) })), _jsx(Pagination, { page: page, query: query })] }));
|
|
26
|
+
export const JobDetail = ({ job, html, publicUrl, applied, problems, values, signedIn, resumes }) => {
|
|
27
|
+
const salary = formatSalary(job.salary);
|
|
28
|
+
return (_jsxs("div", { class: "grid-2", children: [_jsxs("article", { class: "stack", children: [_jsxs("div", { children: [_jsx("h1", { children: job.title }), _jsxs("p", { class: "lede", children: [_jsx("a", { href: `/employers/${job.org.slug}`, children: job.org.name }), job.location !== null && ` - ${job.location}`] })] }), _jsxs("div", { class: "job-meta", children: [_jsx(Badge, { variant: "outline", children: job.workplace }), _jsx(Badge, { variant: "outline", children: job.employmentType }), job.seniority !== null && _jsx(Badge, { variant: "outline", children: job.seniority }), _jsx(AgentPolicyBadge, { policy: job.agentPolicy }), salary !== null && _jsx(Badge, { variant: "primary", children: salary })] }), _jsx(Prose, { html: html }), job.requirements.length > 0 && (_jsxs("section", { children: [_jsx("h2", { children: "What they are asking for" }), _jsx("ul", { children: job.requirements.map((item) => (_jsx("li", { children: item }))) })] })), job.responsibilities.length > 0 && (_jsxs("section", { children: [_jsx("h2", { children: "What you would do" }), _jsx("ul", { children: job.responsibilities.map((item) => (_jsx("li", { children: item }))) })] })), job.stack.length > 0 && (_jsxs("section", { children: [_jsx("h2", { children: "Stack" }), _jsx("div", { class: "row", children: job.stack.map((item) => (_jsx(Badge, { children: item }))) })] })), _jsxs("div", { id: "apply", children: [_jsx("h2", { children: "Apply" }), applied === true ? (_jsxs(Alert, { variant: "success", children: [_jsx("strong", { children: "Sent." }), " ", job.org.name, " has your application."] })) : (_jsx(ApplyForm, { job: job, problems: problems ?? [], values: values ?? {}, signedIn: signedIn, resumes: resumes ?? [] }))] })] }), _jsxs("aside", { class: "stack", children: [_jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "For agents" }), _jsx("p", { class: "card-description", children: "This job is machine readable. No scraping, no rendering." })] }), _jsx("p", { class: "small muted", children: "The form above, as data:" }), _jsxs("pre", { class: "code-block", children: ["GET ", publicUrl, "/api/v1/jobs/", job.slug, "/apply-schema"] }), _jsx("p", { class: "small muted", children: "Or over MCP, with the board connected:" }), _jsxs("pre", { class: "code-block", children: ["apply_to_job(slug: \"", job.slug, "\")"] }), _jsxs("p", { class: "small muted", children: ["Policy on this listing: ", _jsx("strong", { children: job.agentPolicy }), "."] })] }), _jsxs(Card, { children: [_jsx("div", { class: "card-header", children: _jsx("h2", { class: "card-title", children: job.org.name }) }), job.org.description !== null && _jsx("p", { class: "small", children: job.org.description }), job.org.website !== null && (_jsx("p", { class: "small", children: _jsx("a", { href: job.org.website, rel: "nofollow noopener", children: job.org.website.replace(/^https?:\/\//, '') }) })), _jsxs("p", { class: "small muted", children: ["Posted ", ago(job.publishedAt)] })] })] })] }));
|
|
29
|
+
};
|
|
30
|
+
const ApplyForm = ({ job, problems, values, signedIn, resumes }) => {
|
|
31
|
+
if (job.apply.via === 'url') {
|
|
32
|
+
return (_jsxs(Card, { children: [_jsx("p", { children: "This employer takes applications on their own site." }), _jsxs("a", { class: "btn", href: job.apply.url, rel: "nofollow noopener", children: ["Apply at ", new URL(job.apply.url).hostname] })] }));
|
|
33
|
+
}
|
|
34
|
+
if (job.apply.via === 'email') {
|
|
35
|
+
return (_jsxs(Card, { children: [_jsx("p", { children: "This employer takes applications by email." }), _jsxs("a", { class: "btn", href: `mailto:${job.apply.email}?subject=${encodeURIComponent(job.title)}`, children: ["Email ", job.apply.email] })] }));
|
|
36
|
+
}
|
|
37
|
+
const errorFor = (name) => problems.find((problem) => problem.field === name)?.message;
|
|
38
|
+
return (_jsxs("form", { class: "stack", method: "post", action: `/jobs/${job.slug}/apply`, novalidate: true, children: [problems.length > 0 && (_jsx(Alert, { variant: "error", children: problems.length === 1 ? 'One answer needs fixing.' : `${problems.length} answers need fixing.` })), job.apply.schema.fields.map((field) => (_jsx(Field, { label: field.label, name: field.name, hint: field.help, error: errorFor(field.name), children: field.type === 'textarea' ? (_jsx("textarea", { class: "textarea", id: field.name, name: field.name, required: field.required, maxlength: field.maxLength, children: values[field.name] ?? '' })) : field.type === 'select' ? (_jsxs("select", { class: "select", id: field.name, name: field.name, required: field.required, children: [_jsx("option", { value: "", children: "Choose one" }), (field.options ?? []).map((option) => (_jsx("option", { value: option, selected: values[field.name] === option, children: option })))] })) : (_jsx("input", { class: "input", type: field.type === 'file' ? 'text' : field.type, id: field.name, name: field.name, value: values[field.name] ?? '', required: field.required, maxlength: field.maxLength })) }))), _jsxs(Field, { label: "Resume", name: "resume", hint: "Markdown, in the OpenResume.md convention. Paste it, or pick one you have saved.", error: errorFor('resume'), children: [signedIn && resumes.length > 0 && (_jsxs("select", { class: "select", name: "resumeSlug", style: "margin-bottom:.5rem", children: [_jsx("option", { value: "", children: "Paste one below instead" }), resumes.map((resume) => (_jsx("option", { value: resume.slug, children: resume.title })))] })), _jsx("textarea", { class: "textarea code", id: "resume", name: "resume", placeholder: "# Your Name", children: values['resume'] ?? '' })] }), job.agentPolicy !== 'human-only' && (_jsxs("fieldset", { children: [_jsx("legend", { children: "Did an agent write this?" }), _jsx("p", { class: "hint", style: "margin-top:0", children: job.agentPolicy === 'disclose'
|
|
39
|
+
? 'This employer asks you to say so. Saying so is not held against you; not saying so is.'
|
|
40
|
+
: 'This employer is fine either way. Answer if you like.' }), _jsx(Field, { label: "Which agent", name: "agent.name", children: _jsx("input", { class: "input", type: "text", id: "agent.name", name: "agent.name", value: values['agent.name'] ?? '', placeholder: "e.g. claude-opus-5 via agenticjobs-mcp" }) }), _jsxs("label", { class: "row small", style: "margin-top:.5rem", children: [_jsx("input", { type: "checkbox", name: "agent.supervised", value: "true" }), "A person read it before it was sent"] })] })), _jsx("button", { class: "btn btn-block", type: "submit", children: "Send application" })] }));
|
|
41
|
+
};
|
|
42
|
+
export const EmployerList = ({ orgs }) => (_jsxs("div", { class: "stack", children: [_jsx("h1", { children: "Employers" }), _jsx("p", { class: "lede", children: "Everyone with an open listing on this board." }), orgs.length === 0 ? (_jsx(Empty, { children: "No employers with open listings yet." })) : (_jsx("ul", { class: "job-list", children: orgs.map((org) => (_jsx("li", { children: _jsxs("a", { class: "card card-link", href: `/employers/${org.slug}`, children: [_jsx("h2", { class: "card-title", children: org.name }), org.description !== null && _jsx("p", { class: "card-description", children: org.description })] }) }))) }))] }));
|
|
43
|
+
export const EmployerDetail = ({ org, page, query, }) => (_jsxs("div", { class: "stack", children: [_jsxs("div", { children: [_jsx("h1", { children: org.name }), org.website !== null && (_jsx("p", { class: "lede", children: _jsx("a", { href: org.website, rel: "nofollow noopener", children: org.website.replace(/^https?:\/\//, '') }) }))] }), org.description !== null && _jsx("p", { children: org.description }), _jsxs("h2", { children: [page.total, " open ", page.total === 1 ? 'role' : 'roles'] }), page.items.length === 0 ? (_jsx(Empty, { children: "Nothing open right now." })) : (_jsx("ul", { class: "job-list", children: page.items.map((job) => (_jsx(JobCard, { job: job }))) })), _jsx(Pagination, { page: page, query: query, base: `/employers/${org.slug}` })] }));
|
|
44
|
+
//# sourceMappingURL=jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/views/jobs.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAc,CAAC;AAEzF,MAAM,CAAC,MAAM,OAAO,GAA6D,CAAC,EAChF,GAAG,EACH,MAAM,EACN,YAAY,GACb,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC;IACvF,OAAO,CACL,uBACE,aAAG,KAAK,EAAC,yBAAyB,EAAC,IAAI,EAAE,IAAI,aAC3C,eAAK,KAAK,EAAC,QAAQ,aACjB,aAAI,KAAK,EAAC,WAAW,YAAE,GAAG,CAAC,KAAK,GAAM,EACrC,MAAM,KAAK,IAAI,IAAI,eAAM,KAAK,EAAC,YAAY,YAAE,MAAM,GAAQ,IACxD,EACN,eAAK,KAAK,EAAC,SAAS,aACjB,GAAG,CAAC,GAAG,CAAC,IAAI,EACZ,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,GAAG,CAAC,QAAQ,EAAE,IAC1C,EACN,eAAK,KAAK,EAAC,UAAU,aACnB,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,YAAE,GAAG,CAAC,SAAS,GAAS,EAChD,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,YAAE,GAAG,CAAC,cAAc,GAAS,EACpD,GAAG,CAAC,SAAS,KAAK,IAAI,IAAI,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,YAAE,GAAG,CAAC,SAAS,GAAS,EAC3E,KAAC,gBAAgB,IAAC,MAAM,EAAE,GAAG,CAAC,WAAW,GAAI,EAC5C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnC,KAAC,KAAK,cAAE,IAAI,GAAS,CACtB,CAAC,IACE,EACN,eAAK,KAAK,EAAC,aAAa,aACrB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EACpB,YAAY,KAAK,SAAS,IAAI,SAAS,YAAY,EAAE,IAClD,IACJ,GACD,CACN,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAA6C,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,CAC5F,gBAAM,KAAK,EAAC,SAAS,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAE,MAAM,aAC/C,eAAK,KAAK,EAAC,gBAAgB,aACzB,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,GAAG,YAC5B,gBACE,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,GAAG,EACR,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,EACpB,WAAW,EAAC,wBAAwB,GACpC,GACI,EACR,iBAAQ,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,QAAQ,uBAExB,IACL,EACN,eAAK,KAAK,EAAC,KAAK,aACd,KAAC,MAAM,IAAC,IAAI,EAAC,WAAW,EAAC,KAAK,EAAC,UAAU,EAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,GAAI,EACzF,KAAC,MAAM,IACL,IAAI,EAAC,gBAAgB,EACrB,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE,KAAK,CAAC,cAAc,EAC3B,OAAO,EAAE,gBAAgB,GACzB,EACF,KAAC,MAAM,IAAC,IAAI,EAAC,WAAW,EAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,GAAI,EAC3F,KAAC,MAAM,IACL,IAAI,EAAC,aAAa,EAClB,KAAK,EAAC,kBAAkB,EACxB,KAAK,EAAE,KAAK,CAAC,WAAW,EACxB,OAAO,EAAE,cAAc,GACvB,EACF,KAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAU,GAAI,EACnI,iBAAQ,KAAK,EAAC,0BAA0B,EAAC,IAAI,EAAC,QAAQ,8BAE7C,IACL,IACD,CACR,CAAC;AAEF,MAAM,MAAM,GAKP,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CACxC,kBAAQ,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAE,IAAI,gBAAc,KAAK,EAAE,KAAK,EAAC,2BAA2B,aACrF,iBAAQ,KAAK,EAAC,EAAE,YAAE,KAAK,GAAU,EAChC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,iBAAQ,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,KAAK,MAAM,YAC9C,MAAM,GACA,CACV,CAAC,IACK,CACV,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAmE,CAAC,EACzF,IAAI,EACJ,KAAK,EACL,IAAI,GAAG,GAAG,GACX,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IACxC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,MAAc,EAAU,EAAE;QACtC,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;IACpD,CAAC,CAAC;IACF,OAAO,CACL,eAAK,KAAK,EAAC,YAAY,gBAAY,OAAO,aACvC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,YAAG,KAAK,EAAC,0BAA0B,EAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAEpD,CACL,EACD,gBAAM,KAAK,EAAC,aAAa,EAAC,KAAK,EAAC,mBAAmB,aAChD,KAAK,CAAC,MAAM,GAAG,CAAC,OAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAM,IAAI,CAAC,KAAK,IACzD,EACN,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CACpB,YAAG,KAAK,EAAC,0BAA0B,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,qBAEhD,CACL,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAKf,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAC5C,eAAK,KAAK,EAAC,OAAO,aAChB,0BACE,uBAAK,SAAS,GAAM,EACpB,YAAG,KAAK,EAAC,MAAM,YAAE,OAAO,GAAK,IACzB,EACN,KAAC,OAAO,IAAC,KAAK,EAAE,KAAK,GAAI,EACxB,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACzB,MAAC,KAAK,eACJ,oDAAgC,EAChC,YAAG,KAAK,EAAC,OAAO,gJAGZ,IACE,CACT,CAAC,CAAC,CAAC,CACF,aAAI,KAAK,EAAC,UAAU,YACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACvB,KAAC,OAAO,IAAC,GAAG,EAAE,GAAG,GAAI,CACtB,CAAC,GACC,CACN,EACD,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,IACpC,CACP,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GASjB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IAC9E,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CACL,eAAK,KAAK,EAAC,QAAQ,aACjB,mBAAS,KAAK,EAAC,OAAO,aACpB,0BACE,uBAAK,GAAG,CAAC,KAAK,GAAM,EACpB,aAAG,KAAK,EAAC,MAAM,aACb,YAAG,IAAI,EAAE,cAAc,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,YAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAK,EACxD,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,GAAG,CAAC,QAAQ,EAAE,IAC5C,IACA,EACN,eAAK,KAAK,EAAC,UAAU,aACnB,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,YAAE,GAAG,CAAC,SAAS,GAAS,EAChD,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,YAAE,GAAG,CAAC,cAAc,GAAS,EACpD,GAAG,CAAC,SAAS,KAAK,IAAI,IAAI,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,YAAE,GAAG,CAAC,SAAS,GAAS,EAC3E,KAAC,gBAAgB,IAAC,MAAM,EAAE,GAAG,CAAC,WAAW,GAAI,EAC5C,MAAM,KAAK,IAAI,IAAI,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,YAAE,MAAM,GAAS,IACzD,EACN,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,GAAI,EACpB,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAC9B,8BACE,oDAAiC,EACjC,uBACG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC9B,uBAAK,IAAI,GAAM,CAChB,CAAC,GACC,IACG,CACX,EACA,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAClC,8BACE,6CAA0B,EAC1B,uBACG,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAClC,uBAAK,IAAI,GAAM,CAChB,CAAC,GACC,IACG,CACX,EACA,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACvB,8BACE,iCAAc,EACd,cAAK,KAAK,EAAC,KAAK,YACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACvB,KAAC,KAAK,cAAE,IAAI,GAAS,CACtB,CAAC,GACE,IACE,CACX,EACD,eAAK,EAAE,EAAC,OAAO,aACb,iCAAc,EACb,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAClB,MAAC,KAAK,IAAC,OAAO,EAAC,SAAS,aACtB,qCAAsB,OAAE,GAAG,CAAC,GAAG,CAAC,IAAI,8BAC9B,CACT,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IACR,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,IAAI,EAAE,EACxB,MAAM,EAAE,MAAM,IAAI,EAAE,EACpB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,IAAI,EAAE,GACtB,CACH,IACG,IACE,EAEV,iBAAO,KAAK,EAAC,OAAO,aAClB,MAAC,IAAI,eACH,eAAK,KAAK,EAAC,aAAa,aACtB,aAAI,KAAK,EAAC,YAAY,2BAAgB,EACtC,YAAG,KAAK,EAAC,kBAAkB,yEAEvB,IACA,EACN,YAAG,KAAK,EAAC,aAAa,yCAA6B,EACnD,eAAK,KAAK,EAAC,YAAY,qBAChB,SAAS,mBAAe,GAAG,CAAC,IAAI,qBACjC,EACN,YAAG,KAAK,EAAC,aAAa,uDAA2C,EACjE,eAAK,KAAK,EAAC,YAAY,sCAAsB,GAAG,CAAC,IAAI,WAAS,EAC9D,aAAG,KAAK,EAAC,aAAa,yCACI,2BAAS,GAAG,CAAC,WAAW,GAAU,SACxD,IACC,EACP,MAAC,IAAI,eACH,cAAK,KAAK,EAAC,aAAa,YACtB,aAAI,KAAK,EAAC,YAAY,YAAE,GAAG,CAAC,GAAG,CAAC,IAAI,GAAM,GACtC,EACL,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,YAAG,KAAK,EAAC,OAAO,YAAE,GAAG,CAAC,GAAG,CAAC,WAAW,GAAK,EAC1E,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,CAC3B,YAAG,KAAK,EAAC,OAAO,YACd,YAAG,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAC,mBAAmB,YAC9C,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,GAC1C,GACF,CACL,EACD,aAAG,KAAK,EAAC,aAAa,wBAAS,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAK,IACnD,IACD,IACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAMV,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACpD,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,CACL,MAAC,IAAI,eACH,8EAA0D,EAC1D,aAAG,KAAK,EAAC,KAAK,EAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAC,mBAAmB,0BAC/C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,IACvC,IACC,CACR,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,CACL,MAAC,IAAI,eACH,qEAAiD,EACjD,aAAG,KAAK,EAAC,KAAK,EAAC,IAAI,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,KAAK,YAAY,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,uBAChF,GAAG,CAAC,KAAK,CAAC,KAAK,IACpB,IACC,CACR,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAsB,EAAE,CACpD,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,OAAO,CAAC;IAE9D,OAAO,CACL,gBAAM,KAAK,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAE,SAAS,GAAG,CAAC,IAAI,QAAQ,EAAE,UAAU,mBAC5E,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,KAAC,KAAK,IAAC,OAAO,EAAC,OAAO,YACnB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,uBAAuB,GACzF,CACT,EACA,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtC,KAAC,KAAK,IACJ,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,YAE1B,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAC3B,mBACE,KAAK,EAAC,UAAU,EAChB,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,YAEzB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAChB,CACZ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC5B,kBAAQ,KAAK,EAAC,QAAQ,EAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,aAC/E,iBAAQ,KAAK,EAAC,EAAE,2BAAoB,EACnC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACrC,iBAAQ,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,YAC3D,MAAM,GACA,CACV,CAAC,IACK,CACV,CAAC,CAAC,CAAC,CACF,gBACE,KAAK,EAAC,OAAO,EACb,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EACjD,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAC/B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,GAC1B,CACH,GACK,CACT,CAAC,EAEF,MAAC,KAAK,IACJ,KAAK,EAAC,QAAQ,EACd,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,kFAAkF,EACvF,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAExB,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACjC,kBAAQ,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,YAAY,EAAC,KAAK,EAAC,qBAAqB,aAClE,iBAAQ,KAAK,EAAC,EAAE,wCAAiC,EAChD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,iBAAQ,KAAK,EAAE,MAAM,CAAC,IAAI,YAAG,MAAM,CAAC,KAAK,GAAU,CACpD,CAAC,IACK,CACV,EACD,mBAAU,KAAK,EAAC,eAAe,EAAC,EAAE,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,WAAW,EAAC,aAAa,YAChF,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GACd,IACL,EAEP,GAAG,CAAC,WAAW,KAAK,YAAY,IAAI,CACnC,+BACE,wDAAyC,EACzC,YAAG,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,cAAc,YACjC,GAAG,CAAC,WAAW,KAAK,UAAU;4BAC7B,CAAC,CAAC,wFAAwF;4BAC1F,CAAC,CAAC,uDAAuD,GACzD,EACJ,KAAC,KAAK,IAAC,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,YAAY,YAC1C,gBACE,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,MAAM,EACX,EAAE,EAAC,YAAY,EACf,IAAI,EAAC,YAAY,EACjB,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,EACjC,WAAW,EAAC,wCAAwC,GACpD,GACI,EACR,iBAAO,KAAK,EAAC,WAAW,EAAC,KAAK,EAAC,kBAAkB,aAC/C,gBAAO,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,kBAAkB,EAAC,KAAK,EAAC,MAAM,GAAG,2CAExD,IACC,CACZ,EAED,iBAAQ,KAAK,EAAC,eAAe,EAAC,IAAI,EAAC,QAAQ,iCAElC,IACJ,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAiC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACtE,eAAK,KAAK,EAAC,OAAO,aAChB,qCAAkB,EAClB,YAAG,KAAK,EAAC,MAAM,6DAAiD,EAC/D,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACnB,KAAC,KAAK,uDAA6C,CACpD,CAAC,CAAC,CAAC,CACF,aAAI,KAAK,EAAC,UAAU,YACjB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,uBACE,aAAG,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAE,cAAc,GAAG,CAAC,IAAI,EAAE,aACtD,aAAI,KAAK,EAAC,YAAY,YAAE,GAAG,CAAC,IAAI,GAAM,EACrC,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,YAAG,KAAK,EAAC,kBAAkB,YAAE,GAAG,CAAC,WAAW,GAAK,IAC5E,GACD,CACN,CAAC,GACC,CACN,IACG,CACP,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAmE,CAAC,EAC7F,GAAG,EACH,IAAI,EACJ,KAAK,GACN,EAAE,EAAE,CAAC,CACJ,eAAK,KAAK,EAAC,OAAO,aAChB,0BACE,uBAAK,GAAG,CAAC,IAAI,GAAM,EAClB,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,CACvB,YAAG,KAAK,EAAC,MAAM,YACb,YAAG,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAC,mBAAmB,YAC1C,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,GACtC,GACF,CACL,IACG,EACL,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,sBAAI,GAAG,CAAC,WAAW,GAAK,EACrD,yBACG,IAAI,CAAC,KAAK,YAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IACnD,EACJ,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACzB,KAAC,KAAK,0CAAgC,CACvC,CAAC,CAAC,CAAC,CACF,aAAI,KAAK,EAAC,UAAU,YACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACvB,KAAC,OAAO,IAAC,GAAG,EAAE,GAAG,GAAI,CACtB,CAAC,GACC,CACN,EACD,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,GAAG,CAAC,IAAI,EAAE,GAAI,IACpE,CACP,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The page shell and the shared components.
|
|
3
|
+
*
|
|
4
|
+
* These mirror shadcn/ui's anatomy - Card, Badge, Button, Alert - so the
|
|
5
|
+
* markup reads the way a shadcn app's does, while rendering server-side
|
|
6
|
+
* through Hono's JSX with no React and no Tailwind. The classes are defined in
|
|
7
|
+
* web/public/app.css.
|
|
8
|
+
*/
|
|
9
|
+
import type { FC, PropsWithChildren } from 'hono/jsx';
|
|
10
|
+
import type { Viewer } from '../core/auth.ts';
|
|
11
|
+
export interface PageProps {
|
|
12
|
+
title: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
viewer: Viewer | null;
|
|
15
|
+
boardName: string;
|
|
16
|
+
publicUrl: string;
|
|
17
|
+
path: string;
|
|
18
|
+
/** Rendered into a script[type=application/ld+json]. */
|
|
19
|
+
jsonld?: unknown;
|
|
20
|
+
canonical?: string;
|
|
21
|
+
/** Hidden from search engines: dashboards, editors, one-off flows. */
|
|
22
|
+
noindex?: boolean;
|
|
23
|
+
isDirectory?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare const Layout: FC<PropsWithChildren<PageProps>>;
|
|
26
|
+
/** Rendered Markdown. The only place already-escaped HTML enters a page. */
|
|
27
|
+
export declare const Prose: FC<{
|
|
28
|
+
html: string;
|
|
29
|
+
class?: string;
|
|
30
|
+
}>;
|
|
31
|
+
export declare const Card: FC<PropsWithChildren<{
|
|
32
|
+
class?: string;
|
|
33
|
+
id?: string;
|
|
34
|
+
hidden?: boolean;
|
|
35
|
+
}>>;
|
|
36
|
+
export declare const Alert: FC<PropsWithChildren<{
|
|
37
|
+
variant?: 'error' | 'success' | 'warning' | 'info';
|
|
38
|
+
}>>;
|
|
39
|
+
export declare const Badge: FC<PropsWithChildren<{
|
|
40
|
+
variant?: string;
|
|
41
|
+
class?: string;
|
|
42
|
+
}>>;
|
|
43
|
+
/**
|
|
44
|
+
* The agent policy, shown on every listing.
|
|
45
|
+
*
|
|
46
|
+
* It is the field the board exists for, so it is never hidden behind a detail
|
|
47
|
+
* disclosure and never abbreviated to an icon on small screens.
|
|
48
|
+
*/
|
|
49
|
+
export declare const AgentPolicyBadge: FC<{
|
|
50
|
+
policy: string;
|
|
51
|
+
}>;
|
|
52
|
+
export declare const Empty: FC<PropsWithChildren>;
|
|
53
|
+
export declare const Field: FC<PropsWithChildren<{
|
|
54
|
+
label: string;
|
|
55
|
+
name: string;
|
|
56
|
+
hint?: string;
|
|
57
|
+
error?: string;
|
|
58
|
+
}>>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "hono/jsx/jsx-runtime";
|
|
2
|
+
import { raw } from 'hono/html';
|
|
3
|
+
import { jsonForScript } from "../markup/escape.js";
|
|
4
|
+
export const Layout = (props) => {
|
|
5
|
+
const { title, description, viewer, boardName, publicUrl, path, jsonld, canonical, noindex, isDirectory, children, } = props;
|
|
6
|
+
const full = title === boardName ? title : `${title} - ${boardName}`;
|
|
7
|
+
const url = canonical ?? `${publicUrl}${path}`;
|
|
8
|
+
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: "/jobs.rss", title: `${boardName} jobs` }), jsonld !== undefined && (_jsx("script", { type: "application/ld+json",
|
|
9
|
+
// Interpolating JSON into a script element without escaping the
|
|
10
|
+
// angle brackets is stored XSS the first time a job title contains
|
|
11
|
+
// the word "script".
|
|
12
|
+
dangerouslySetInnerHTML: { __html: jsonForScript(jsonld) } }))] }), _jsxs("body", { children: [_jsx("a", { class: "skip-link", href: "#main", children: "Skip to content" }), _jsx("header", { class: "site-header", children: _jsxs("div", { class: "container", children: [_jsxs("a", { class: "brand", href: "/", children: [_jsx("span", { class: "brand-mark", "aria-hidden": "true", children: "aj" }), boardName] }), _jsxs("nav", { class: "nav", "aria-label": "Main", children: [_jsx("a", { href: "/", "aria-current": path === '/' ? 'page' : undefined, children: "Jobs" }), _jsx("a", { href: "/employers", "aria-current": path.startsWith('/employers') ? 'page' : undefined, children: "Employers" }), isDirectory === true && (_jsx("a", { href: "/network", "aria-current": path.startsWith('/network') ? 'page' : undefined, children: "Network" })), _jsx("a", { href: "/docs", "aria-current": path.startsWith('/docs') ? 'page' : undefined, children: "For agents" }), viewer === null ? (_jsx("a", { class: "btn btn-sm", href: "/login", children: "Sign in" })) : (_jsxs(_Fragment, { children: [_jsx("a", { href: "/me", "aria-current": path.startsWith('/me') ? 'page' : undefined, children: "You" }), _jsx("a", { class: "btn btn-sm", href: "/post", children: "Post a job" })] }))] })] }) }), _jsx("main", { id: "main", children: _jsx("div", { class: "container", children: children }) }), _jsx("footer", { class: "site-footer", children: _jsxs("div", { class: "container", children: [_jsxs("span", { children: [boardName, " runs on", ' ', _jsx("a", { href: "https://github.com/profullstack/agenticjobs", children: "agenticjobs" }), ", MIT licensed."] }), _jsx("a", { href: "/docs", children: "API" }), _jsx("a", { href: "/api/v1/openapi.json", children: "OpenAPI" }), _jsx("a", { href: "/.well-known/agenticjobs", children: "Instance" }), _jsx("a", { href: "/jobs.json", children: "Feed" }), _jsx("a", { href: "/llms.txt", children: "llms.txt" })] }) }), _jsx("script", { src: "/assets/app.js", defer: true })] })] }));
|
|
13
|
+
};
|
|
14
|
+
/** Rendered Markdown. The only place already-escaped HTML enters a page. */
|
|
15
|
+
export const Prose = ({ html, class: className }) => (_jsx("div", { class: className === undefined ? 'prose' : `prose ${className}`, children: raw(html) }));
|
|
16
|
+
export const Card = ({ class: className, id, hidden, children, }) => (_jsx("div", { class: className === undefined ? 'card' : `card ${className}`, id: id, hidden: hidden, children: children }));
|
|
17
|
+
export const Alert = ({ variant = 'info', children }) => (_jsx("div", { class: `alert alert-${variant}`, role: variant === 'error' ? 'alert' : undefined, children: children }));
|
|
18
|
+
export const Badge = ({ variant, class: className, children, }) => (_jsx("span", { class: ['badge', variant ? `badge-${variant}` : '', className ?? ''].filter(Boolean).join(' '), children: children }));
|
|
19
|
+
/**
|
|
20
|
+
* The agent policy, shown on every listing.
|
|
21
|
+
*
|
|
22
|
+
* It is the field the board exists for, so it is never hidden behind a detail
|
|
23
|
+
* disclosure and never abbreviated to an icon on small screens.
|
|
24
|
+
*/
|
|
25
|
+
export const AgentPolicyBadge = ({ policy }) => {
|
|
26
|
+
if (policy === 'welcome') {
|
|
27
|
+
return (_jsx(Badge, { variant: "welcome", class: "badge-dot", children: "Agents welcome" }));
|
|
28
|
+
}
|
|
29
|
+
if (policy === 'human-only') {
|
|
30
|
+
return (_jsx(Badge, { variant: "human", class: "badge-dot", children: "Human-written" }));
|
|
31
|
+
}
|
|
32
|
+
return (_jsx(Badge, { variant: "disclose", class: "badge-dot", children: "Agents, disclosed" }));
|
|
33
|
+
};
|
|
34
|
+
export const Empty = ({ children }) => _jsx("div", { class: "empty", children: children });
|
|
35
|
+
export const Field = ({ label, name, hint, error, children }) => (_jsxs("div", { class: error === undefined ? 'field' : 'field field-error', children: [_jsx("label", { class: "label", for: name, children: label }), children, hint !== undefined && _jsx("span", { class: "hint", children: hint }), error !== undefined && _jsx("span", { class: "error-text", children: error })] }));
|
|
36
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/views/layout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Your side of the board: employers you can post under, jobs you have posted,
|
|
3
|
+
* applications you have sent, and your resumes.
|
|
4
|
+
*/
|
|
5
|
+
import type { FC } from 'hono/jsx';
|
|
6
|
+
import type { Job, Organisation } from '../schema/index.ts';
|
|
7
|
+
import type { Resume } from '../core/resumes.ts';
|
|
8
|
+
import type { Viewer } from '../core/auth.ts';
|
|
9
|
+
export declare const MePage: FC<{
|
|
10
|
+
viewer: Viewer;
|
|
11
|
+
orgs: Organisation[];
|
|
12
|
+
jobs: Job[];
|
|
13
|
+
resumes: Resume[];
|
|
14
|
+
applications: {
|
|
15
|
+
jobTitle: string;
|
|
16
|
+
jobSlug: string;
|
|
17
|
+
status: string;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
}[];
|
|
20
|
+
}>;
|
|
21
|
+
export declare const ResumeEditor: FC<{
|
|
22
|
+
resume: Resume | null;
|
|
23
|
+
html: string;
|
|
24
|
+
warnings: string[];
|
|
25
|
+
error?: string;
|
|
26
|
+
saved?: boolean;
|
|
27
|
+
}>;
|
package/dist/views/me.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
2
|
+
import { ago } from "../schema/text.js";
|
|
3
|
+
import { Alert, Badge, Card, Empty, Field, Prose } from "./layout.js";
|
|
4
|
+
export const MePage = ({ viewer, orgs, jobs, resumes, applications }) => (_jsxs("div", { class: "stack", children: [_jsxs("div", { children: [_jsx("h1", { children: "You" }), _jsx("p", { class: "lede", children: viewer.email })] }), _jsxs("section", { class: "stack", children: [_jsxs("div", { class: "spread", children: [_jsx("h2", { children: "Resumes" }), _jsx("a", { class: "btn btn-sm", href: "/me/resumes/new", children: "New resume" })] }), _jsx("p", { class: "small muted", children: "Markdown, in the OpenResume.md convention. Upload a PDF or a Word file and it is converted for you; what you keep is the Markdown." }), resumes.length === 0 ? (_jsx(Empty, { children: "No resumes yet." })) : (_jsx("ul", { class: "job-list", children: resumes.map((resume) => (_jsx("li", { children: _jsxs("a", { class: "card card-link", href: `/me/resumes/${resume.slug}`, children: [_jsxs("div", { class: "spread", children: [_jsx("h3", { class: "card-title", children: resume.title }), _jsx(Badge, { variant: resume.visibility === 'private' ? 'outline' : 'primary', children: resume.visibility })] }), _jsxs("p", { class: "small muted", children: ["Updated ", ago(resume.updatedAt), resume.sourceName !== null && ` - from ${resume.sourceName}`] })] }) }))) }))] }), _jsxs("section", { class: "stack", children: [_jsxs("div", { class: "spread", children: [_jsx("h2", { children: "Employers" }), _jsx("a", { class: "btn btn-sm btn-secondary", href: "/me/employers/new", children: "Add an employer" })] }), orgs.length === 0 ? (_jsx(Empty, { children: "You cannot post a job until you add the employer it is for." })) : (_jsx("div", { class: "row", children: orgs.map((org) => (_jsx("a", { class: "badge badge-primary", href: `/employers/${org.slug}`, children: org.name }))) }))] }), _jsxs("section", { class: "stack", children: [_jsxs("div", { class: "spread", children: [_jsx("h2", { children: "Your listings" }), orgs.length > 0 && (_jsx("a", { class: "btn btn-sm", href: "/post", children: "Post a job" }))] }), jobs.length === 0 ? (_jsx(Empty, { children: "Nothing posted yet." })) : (_jsx("ul", { class: "job-list", children: jobs.map((job) => (_jsx("li", { children: _jsxs("a", { class: "card card-link", href: `/me/jobs/${job.slug}`, children: [_jsxs("div", { class: "spread", children: [_jsx("h3", { class: "card-title", children: job.title }), _jsx(Badge, { variant: job.status === 'published' ? 'primary' : 'outline', children: job.status })] }), _jsxs("p", { class: "small muted", children: [job.org.name, " - ", job.status === 'published' ? ago(job.publishedAt) : 'not live'] })] }) }))) }))] }), _jsxs("section", { class: "stack", children: [_jsx("h2", { children: "Applications you have sent" }), applications.length === 0 ? (_jsx(Empty, { children: "None yet." })) : (_jsx("ul", { class: "job-list", children: applications.map((application) => (_jsx("li", { children: _jsxs("a", { class: "card card-link", href: `/jobs/${application.jobSlug}`, children: [_jsxs("div", { class: "spread", children: [_jsx("h3", { class: "card-title", children: application.jobTitle }), _jsx(Badge, { variant: "outline", children: application.status })] }), _jsxs("p", { class: "small muted", children: ["Sent ", ago(application.createdAt)] })] }) }))) }))] }), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Terminals and agents" }), _jsxs("p", { class: "card-description", children: [_jsx("code", { children: "agenticjobs login" }), " asks this board for a code; approve it at", ' ', _jsx("a", { href: "/device", children: "/device" }), ". A terminal token can read and apply, and is never an administrator."] })] }), _jsx("button", { class: "btn btn-secondary btn-sm", type: "button", id: "passkey-add", hidden: true, children: "Add a passkey to this account" }), _jsx("p", { class: "small error-text", id: "passkey-add-error", hidden: true }), _jsx("form", { method: "post", action: "/logout", style: "margin-top:.75rem", children: _jsx("button", { class: "btn btn-ghost btn-sm", type: "submit", children: "Sign out of this browser" }) })] })] }));
|
|
5
|
+
export const ResumeEditor = ({ resume, html, warnings, error, saved }) => (_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", 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" }), _jsx("option", { value: "public", selected: resume?.visibility === 'public', children: "Public" })] }) }), _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: [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: [_jsx("div", { class: "card-header", children: _jsx("h2", { class: "card-title", children: "Preview" }) }), _jsx(Prose, { html: html })] })] })] }));
|
|
6
|
+
//# sourceMappingURL=me.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"me.js","sourceRoot":"","sources":["../../src/views/me.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The directory: every instance that has announced itself, and one search
|
|
3
|
+
* across all of them.
|
|
4
|
+
*/
|
|
5
|
+
import type { FC } from 'hono/jsx';
|
|
6
|
+
import type { InstanceListing } from '../schema/instance.ts';
|
|
7
|
+
import type { FederatedSearch } from '../directory/federate.ts';
|
|
8
|
+
import type { JobQuery } from '../schema/index.ts';
|
|
9
|
+
export declare const NetworkPage: FC<{
|
|
10
|
+
instances: InstanceListing[];
|
|
11
|
+
topics: {
|
|
12
|
+
topic: string;
|
|
13
|
+
instances: number;
|
|
14
|
+
}[];
|
|
15
|
+
publicUrl: string;
|
|
16
|
+
boardName: string;
|
|
17
|
+
}>;
|
|
18
|
+
export declare const NetworkSearchPage: FC<{
|
|
19
|
+
result: FederatedSearch;
|
|
20
|
+
query: JobQuery;
|
|
21
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
2
|
+
import { ago, formatSalary } from "../schema/text.js";
|
|
3
|
+
import { AgentPolicyBadge, Alert, Badge, Card, Empty } from "./layout.js";
|
|
4
|
+
import { Filters } from "./jobs.js";
|
|
5
|
+
export const NetworkPage = ({ instances, topics, publicUrl, boardName }) => {
|
|
6
|
+
const online = instances.filter((instance) => instance.online).length;
|
|
7
|
+
const openJobs = instances.reduce((sum, instance) => sum + instance.descriptor.jobs.open, 0);
|
|
8
|
+
return (_jsxs("div", { class: "stack", children: [_jsxs("div", { children: [_jsx("h1", { children: "The network" }), _jsxs("p", { class: "lede", children: [instances.length, " ", instances.length === 1 ? 'board' : 'boards', " listed here, ", online, ' ', "answering right now, ", openJobs.toLocaleString('en-US'), " open roles between them."] })] }), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Search all of them at once" }), _jsx("p", { class: "card-description", children: "One question, asked of every listed board in parallel. Each result stays on the board that posted it - this directory holds no listings of its own." })] }), _jsxs("form", { class: "filters-inline", method: "get", action: "/network/search", children: [_jsx("input", { class: "input", type: "search", name: "q", placeholder: "rust, staff, remote", "aria-label": "Search" }), _jsx("button", { class: "btn", type: "submit", children: "Search the network" })] })] }), topics.length > 0 && (_jsx("div", { class: "row", children: topics.map((topic) => (_jsxs("a", { class: "badge", href: `/network?topic=${encodeURIComponent(topic.topic)}`, children: [topic.topic, " ", _jsx("span", { class: "muted", children: topic.instances })] }))) })), instances.length === 0 ? (_jsx(Empty, { children: _jsx("p", { children: "No boards have announced themselves here yet." }) })) : (_jsx("ul", { class: "job-list", children: instances.map((instance) => (_jsx("li", { children: _jsxs("a", { class: "card card-link", href: instance.url, rel: "noopener", children: [_jsxs("div", { class: "spread", children: [_jsx("h2", { class: "card-title", children: instance.descriptor.name }), _jsx(Badge, { variant: instance.online ? 'online' : 'offline', class: "badge-dot", children: instance.online ? 'answering' : `quiet for ${ago(instance.updatedAt)}` })] }), instance.descriptor.tagline !== '' && (_jsx("p", { class: "card-description", children: instance.descriptor.tagline })), _jsxs("div", { class: "job-meta", children: [_jsxs(Badge, { variant: "primary", children: [instance.descriptor.jobs.open, " open"] }), _jsx("span", { class: "small muted mono", children: instance.url.replace(/^https?:\/\//, '') }), instance.descriptor.topics.slice(0, 4).map((topic) => (_jsx(Badge, { variant: "outline", children: topic })))] })] }) }))) })), _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "List your own board" }), _jsx("p", { class: "card-description", children: "Run agenticjobs anywhere, point it here, and it appears in this list. You keep your own database, your own domain and your own rules." })] }), _jsx("pre", { class: "code-block", children: `DIRECTORY_URL=${publicUrl}\nANNOUNCE=true` }), _jsxs("p", { class: "small muted", children: ["Your instance sends one field - its own URL. ", boardName, " then reads", ' ', _jsx("code", { children: "/.well-known/agenticjobs" }), " from it directly, so nothing about your board is taken on trust from the announcement."] })] })] }));
|
|
9
|
+
};
|
|
10
|
+
export const NetworkSearchPage = ({ result, query, }) => {
|
|
11
|
+
const failed = result.sources.filter((source) => !source.ok);
|
|
12
|
+
return (_jsxs("div", { class: "grid-2", children: [_jsxs("div", { class: "stack", children: [_jsxs("div", { children: [_jsx("h1", { children: "Across the network" }), _jsxs("p", { class: "lede", children: [result.total.toLocaleString('en-US'), " matching roles on", ' ', result.sources.filter((source) => source.ok).length, " of ", result.sources.length, " boards."] })] }), _jsx(Filters, { query: query, action: "/network/search" }), failed.length > 0 && (_jsxs(Alert, { variant: "warning", children: [failed.length, " ", failed.length === 1 ? 'board' : 'boards', " did not answer, so their listings are missing from this page. They are named on the right."] })), result.jobs.length === 0 ? (_jsx(Empty, { children: "Nothing matched on any listed board." })) : (_jsx("ul", { class: "job-list", children: result.jobs.map((entry) => {
|
|
13
|
+
const salary = formatSalary(entry.job.salary);
|
|
14
|
+
return (_jsx("li", { children: _jsxs("a", { class: "card card-link job-card", href: entry.url, rel: "noopener", children: [_jsxs("div", { class: "spread", children: [_jsx("h2", { class: "job-title", children: entry.job.title }), salary !== null && _jsx("span", { class: "job-salary", children: salary })] }), _jsxs("div", { class: "job-org", children: [entry.job.org.name, entry.job.location !== null && ` - ${entry.job.location}`] }), _jsxs("div", { class: "job-meta", children: [_jsx(Badge, { variant: "primary", children: entry.instanceName }), _jsx(Badge, { variant: "outline", children: entry.job.workplace }), _jsx(AgentPolicyBadge, { policy: entry.job.agentPolicy })] }), _jsx("div", { class: "small muted", children: ago(entry.job.publishedAt) })] }) }));
|
|
15
|
+
}) }))] }), _jsx("aside", { class: "stack", children: _jsxs(Card, { children: [_jsxs("div", { class: "card-header", children: [_jsx("h2", { class: "card-title", children: "Who answered" }), _jsx("p", { class: "card-description", children: "A board that is slow or down is named rather than quietly dropped." })] }), _jsx("ul", { class: "source-list", children: result.sources.map((source) => (_jsxs("li", { children: [_jsx("span", { children: source.name }), _jsx("span", { class: source.ok ? 'muted' : 'error-text', children: source.ok ? `${source.count} in ${source.ms}ms` : 'no answer' })] }))) })] }) })] }));
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/views/network.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Posting a job, and managing one after it is posted.
|
|
3
|
+
*/
|
|
4
|
+
import type { FC } from 'hono/jsx';
|
|
5
|
+
import type { Application, Job, Organisation } from '../schema/index.ts';
|
|
6
|
+
export declare const PostJobPage: FC<{
|
|
7
|
+
orgs: Organisation[];
|
|
8
|
+
error?: string;
|
|
9
|
+
values?: Record<string, string>;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const ManageJobPage: FC<{
|
|
12
|
+
job: Job;
|
|
13
|
+
html: string;
|
|
14
|
+
applications: (Application & {
|
|
15
|
+
resume: string | null;
|
|
16
|
+
resumeTitle: string | null;
|
|
17
|
+
})[];
|
|
18
|
+
publicUrl: string;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const NewEmployerPage: FC<{
|
|
21
|
+
error?: string;
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "hono/jsx/jsx-runtime";
|
|
2
|
+
import { AGENT_POLICIES, EMPLOYMENT_TYPES, SALARY_PERIODS, SENIORITIES, WORKPLACES, } from "../schema/job.js";
|
|
3
|
+
import { ago } from "../schema/text.js";
|
|
4
|
+
import { Alert, Badge, Card, Empty, Field, Prose } from "./layout.js";
|
|
5
|
+
export const PostJobPage = ({ orgs, error, values = {} }) => (_jsxs("div", { class: "grid-2", children: [_jsxs("div", { class: "stack", children: [_jsx("h1", { children: "Post a job" }), _jsx("p", { class: "lede", children: "It stays a draft until you publish it, so nothing goes live by accident." }), error !== undefined && _jsx(Alert, { variant: "error", children: error }), orgs.length === 0 ? (_jsxs(Alert, { variant: "info", children: ["Add the employer first: ", _jsx("a", { href: "/me/employers/new", children: "add an employer" }), "."] })) : (_jsxs("form", { class: "stack", method: "post", action: "/post", children: [_jsx(Field, { label: "Employer", name: "org", children: _jsx("select", { class: "select", id: "org", name: "org", required: true, children: orgs.map((org) => (_jsx("option", { value: org.slug, selected: values['org'] === org.slug, children: org.name }))) }) }), _jsx(Field, { label: "Title", name: "title", children: _jsx("input", { class: "input", type: "text", id: "title", name: "title", value: values['title'] ?? '', required: true, maxlength: 140 }) }), _jsx(Field, { label: "Description", name: "description", hint: "Markdown. Headings, lists, links and tables all work.", children: _jsx("textarea", { class: "textarea", id: "description", name: "description", required: true, children: values['description'] ?? '' }) }), _jsxs("div", { class: "row", children: [_jsx(Field, { label: "Type", name: "employmentType", children: _jsx("select", { class: "select", id: "employmentType", name: "employmentType", children: EMPLOYMENT_TYPES.map((type) => (_jsx("option", { value: type, selected: values['employmentType'] === type, children: type }))) }) }), _jsx(Field, { label: "Where", name: "workplace", children: _jsx("select", { class: "select", id: "workplace", name: "workplace", children: WORKPLACES.map((place) => (_jsx("option", { value: place, selected: values['workplace'] === place, children: place }))) }) }), _jsx(Field, { label: "Level", name: "seniority", children: _jsxs("select", { class: "select", id: "seniority", name: "seniority", children: [_jsx("option", { value: "", children: "unspecified" }), SENIORITIES.map((level) => (_jsx("option", { value: level, selected: values['seniority'] === level, children: level })))] }) })] }), _jsx(Field, { label: "Location", name: "location", hint: 'Free text: "Berlin", "US timezones".', children: _jsx("input", { class: "input", type: "text", id: "location", name: "location", value: values['location'] ?? '' }) }), _jsxs("fieldset", { children: [_jsx("legend", { children: "Pay" }), _jsx("p", { class: "hint", style: "margin-top:0", children: "A listing without a number gets fewer and worse applications. Say the range." }), _jsxs("div", { class: "row", children: [_jsx("input", { class: "input", type: "number", name: "salaryMin", placeholder: "from", style: "width:8rem", value: values['salaryMin'] ?? '' }), _jsx("input", { class: "input", type: "number", name: "salaryMax", placeholder: "to", style: "width:8rem", value: values['salaryMax'] ?? '' }), _jsx("input", { class: "input", type: "text", name: "salaryCurrency", placeholder: "USD", maxlength: 3, style: "width:6rem", value: values['salaryCurrency'] ?? 'USD' }), _jsx("select", { class: "select", name: "salaryPeriod", style: "width:auto", children: SALARY_PERIODS.map((period) => (_jsxs("option", { value: period, selected: (values['salaryPeriod'] ?? 'year') === period, children: ["per ", period] }))) })] })] }), _jsx(Field, { label: "Stack", name: "stack", hint: "Comma separated. Also what people search on.", children: _jsx("input", { class: "input", type: "text", id: "stack", name: "stack", value: values['stack'] ?? '', placeholder: "typescript, postgres, hono" }) }), _jsx(Field, { label: "Tags", name: "tags", hint: "Comma separated.", children: _jsx("input", { class: "input", type: "text", id: "tags", name: "tags", value: values['tags'] ?? '', placeholder: "backend, remote-first" }) }), _jsxs("fieldset", { children: [_jsx("legend", { children: "Agent policy" }), _jsx("p", { class: "hint", style: "margin-top:0", children: "Required. Candidates increasingly use an agent to write applications; this says where you stand, instead of them finding out by being rejected without a reason." }), AGENT_POLICIES.map((policy) => (_jsxs("label", { class: "row", style: "align-items:flex-start;margin-top:.5rem", children: [_jsx("input", { type: "radio", name: "agentPolicy", value: policy, checked: (values['agentPolicy'] ?? 'disclose') === policy, style: "margin-top:.35rem" }), _jsxs("span", { children: [_jsx("strong", { children: POLICY_LABEL[policy] }), _jsx("br", {}), _jsx("span", { class: "hint", children: POLICY_HELP[policy] })] })] })))] }), _jsxs("fieldset", { children: [_jsx("legend", { children: "How to apply" }), _jsxs("label", { class: "row", children: [_jsx("input", { type: "radio", name: "applyVia", value: "board", checked: (values['applyVia'] ?? 'board') === 'board' }), "On this board (an agent can complete it)"] }), _jsxs("label", { class: "row", children: [_jsx("input", { type: "radio", name: "applyVia", value: "url", checked: values['applyVia'] === 'url' }), "On our own site"] }), _jsx("input", { class: "input", type: "url", name: "applyUrl", placeholder: "https://...", value: values['applyUrl'] ?? '', style: "margin-top:.5rem" }), _jsxs("label", { class: "row", style: "margin-top:.5rem", children: [_jsx("input", { type: "radio", name: "applyVia", value: "email", checked: values['applyVia'] === 'email' }), "By email"] }), _jsx("input", { class: "input", type: "email", name: "applyEmail", placeholder: "jobs@example.com", value: values['applyEmail'] ?? '', style: "margin-top:.5rem" })] }), _jsx("button", { class: "btn btn-block", type: "submit", children: "Create draft" })] }))] }), _jsx("aside", { class: "stack", children: _jsxs(Card, { children: [_jsx("div", { class: "card-header", children: _jsx("h2", { class: "card-title", children: "Or post it from anywhere else" }) }), _jsx("pre", { class: "code-block", children: "agenticjobs post --org acme job.md" }), _jsx("p", { class: "small muted", children: "Over MCP, with the board connected:" }), _jsx("pre", { class: "code-block", children: "post_job(org: \"acme\", ...)" }), _jsx("p", { class: "small muted", children: "Through myna, alongside the rest of a launch:" }), _jsx("pre", { class: "code-block", children: "myna jobs post --to jobs:acme job.md" })] }) })] }));
|
|
6
|
+
const POLICY_LABEL = {
|
|
7
|
+
welcome: 'Agents welcome',
|
|
8
|
+
disclose: 'Agents, if disclosed',
|
|
9
|
+
'human-only': 'Written by a person',
|
|
10
|
+
};
|
|
11
|
+
const POLICY_HELP = {
|
|
12
|
+
welcome: 'You do not mind how the application was written. Nothing is asked.',
|
|
13
|
+
disclose: 'Fine by you, as long as it says so. The application carries a structured disclosure you can filter on.',
|
|
14
|
+
'human-only': 'You want a person to have written it. This is a request the board states plainly; it cannot verify it, and says so.',
|
|
15
|
+
};
|
|
16
|
+
export const ManageJobPage = ({ job, html, applications, publicUrl }) => (_jsxs("div", { class: "stack", children: [_jsxs("div", { class: "spread", children: [_jsxs("div", { children: [_jsx("h1", { children: job.title }), _jsxs("p", { class: "lede", children: [job.org.name, " - ", _jsx(Badge, { variant: job.status === 'published' ? 'primary' : 'outline', children: job.status })] })] }), _jsx("div", { class: "row", children: job.status !== 'published' ? (_jsx("form", { method: "post", action: `/me/jobs/${job.slug}/publish`, children: _jsx("button", { class: "btn", type: "submit", children: "Publish" }) })) : (_jsxs(_Fragment, { children: [_jsx("a", { class: "btn btn-secondary", href: `/jobs/${job.slug}`, children: "View live" }), _jsx("form", { method: "post", action: `/me/jobs/${job.slug}/close`, children: _jsx("button", { class: "btn btn-secondary", type: "submit", children: "Close" }) })] })) })] }), job.status === 'draft' && (_jsx(Alert, { variant: "info", children: "This is a draft. It is not in the list, not in the feed, not in the API and not visible to any other instance until you publish it." })), _jsxs("section", { class: "stack", children: [_jsxs("h2", { children: [applications.length, " ", applications.length === 1 ? 'application' : 'applications'] }), applications.length === 0 ? (_jsx(Empty, { children: "Nobody yet." })) : (applications.map((application) => (_jsxs(Card, { children: [_jsxs("div", { class: "spread", children: [_jsxs("h3", { class: "card-title", children: [application.answers['name'] ?? 'Someone', ' ', application.answers['email'] !== undefined && (_jsx("a", { class: "small", href: `mailto:${application.answers['email']}`, children: application.answers['email'] }))] }), _jsxs("span", { class: "row", children: [application.agent !== null && (_jsxs(Badge, { variant: "disclose", children: ["agent: ", application.agent.name, application.agent.supervised ? ', supervised' : ''] })), _jsx(Badge, { variant: "outline", children: ago(application.createdAt) })] })] }), Object.entries(application.answers)
|
|
17
|
+
.filter(([key]) => !['name', 'email'].includes(key))
|
|
18
|
+
.map(([key, value]) => (_jsxs("p", { class: "small", children: [_jsxs("strong", { children: [key, ":"] }), " ", value] }))), application.resume !== null && (_jsxs("details", { children: [_jsx("summary", { class: "small", children: "Resume" }), _jsx(Prose, { html: application.resume })] }))] }))))] }), _jsxs("details", { children: [_jsx("summary", { children: "The listing as it stands" }), _jsx(Prose, { html: html }), _jsxs("p", { class: "small muted", children: ["Machine readable at ", _jsxs("code", { children: [publicUrl, "/api/v1/jobs/", job.slug] })] })] })] }));
|
|
19
|
+
export const NewEmployerPage = ({ error }) => (_jsx("div", { style: "max-width:32rem;margin:0 auto", children: _jsxs("div", { class: "stack", children: [_jsx("h1", { children: "Add an employer" }), _jsx("p", { class: "lede", children: "You post jobs under an employer, not under your own name." }), error !== undefined && _jsx(Alert, { variant: "error", children: error }), _jsx(Card, { children: _jsxs("form", { class: "stack", method: "post", action: "/me/employers/new", children: [_jsx(Field, { label: "Name", name: "name", children: _jsx("input", { class: "input", type: "text", id: "name", name: "name", required: true, maxlength: 120 }) }), _jsx(Field, { label: "Website", name: "website", children: _jsx("input", { class: "input", type: "url", id: "website", name: "website", placeholder: "https://" }) }), _jsx(Field, { label: "About", name: "description", hint: "Markdown.", children: _jsx("textarea", { class: "textarea", id: "description", name: "description" }) }), _jsx("button", { class: "btn btn-block", type: "submit", children: "Add employer" })] }) })] }) }));
|
|
20
|
+
//# sourceMappingURL=post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/views/post.tsx"],"names":[],"mappings":"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"}
|