artifactpass 0.1.8 → 0.1.9-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +13 -1
- package/dist/deployment/client/_headers +20 -0
- package/dist/deployment/client/index.html +45 -17
- package/dist/deployment/client/privacy.html +30 -0
- package/dist/deployment/client/robots.txt +4 -0
- package/dist/deployment/client/sitemap.xml +6 -0
- package/dist/deployment/client/terms.html +30 -0
- package/dist/deployment/client/upload.html +17 -0
- package/dist/deployment/index.js +137 -7
- package/dist/deployment/wrangler-template.json +3 -0
- package/dist/marketplace/plugins/artifactpass/.claude-plugin/plugin.json +1 -1
- package/dist/marketplace/plugins/artifactpass/.codex-plugin/plugin.json +1 -1
- package/dist/marketplace/plugins/artifactpass/plugin-metadata.json +1 -1
- package/package.json +3 -3
package/dist/cli.mjs
CHANGED
|
@@ -31884,6 +31884,13 @@ var approvedProductionPendingMigrationSets = [
|
|
|
31884
31884
|
["0009-cleanup-indexes.sql"],
|
|
31885
31885
|
["0007-public-auth.sql", "0008-private-deployment.sql", "0009-cleanup-indexes.sql"]
|
|
31886
31886
|
];
|
|
31887
|
+
var publicStaticAssetRoutes = /* @__PURE__ */ new Set([
|
|
31888
|
+
"/",
|
|
31889
|
+
"/privacy",
|
|
31890
|
+
"/terms",
|
|
31891
|
+
"/robots.txt",
|
|
31892
|
+
"/sitemap.xml"
|
|
31893
|
+
]);
|
|
31887
31894
|
var DeploymentMutationError = class extends Error {
|
|
31888
31895
|
constructor(message, changed, resources, cause, rolledBack = [], rollbackFailures = []) {
|
|
31889
31896
|
super(message, { cause });
|
|
@@ -32520,6 +32527,11 @@ var deployArtifactShare = async (input, dependencies) => {
|
|
|
32520
32527
|
template.name = serviceName;
|
|
32521
32528
|
template.main = resolve3(dependencies.deploymentRoot, "index.js");
|
|
32522
32529
|
template.assets.directory = resolve3(dependencies.deploymentRoot, "client");
|
|
32530
|
+
if (input.publicAuth !== void 0) {
|
|
32531
|
+
template.assets.run_worker_first = template.assets.run_worker_first.filter(
|
|
32532
|
+
(route) => !publicStaticAssetRoutes.has(route)
|
|
32533
|
+
);
|
|
32534
|
+
}
|
|
32523
32535
|
template.d1_databases[0] = {
|
|
32524
32536
|
binding: "ARTIFACT_DB",
|
|
32525
32537
|
database_name: databaseName,
|
|
@@ -36166,7 +36178,7 @@ var runDoctor = async (deploymentRoot2, runner = runProcess) => {
|
|
|
36166
36178
|
// package.json
|
|
36167
36179
|
var package_default = {
|
|
36168
36180
|
name: "artifactpass",
|
|
36169
|
-
version: "0.1.
|
|
36181
|
+
version: "0.1.9-rc.1",
|
|
36170
36182
|
description: "Install and connect ArtifactPass for compatible AI agent systems.",
|
|
36171
36183
|
repository: {
|
|
36172
36184
|
type: "git",
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
https://artifactpass.com/
|
|
2
|
+
Cache-Control: public, max-age=0, must-revalidate
|
|
3
|
+
Cross-Origin-Opener-Policy: same-origin-allow-popups
|
|
4
|
+
Content-Security-Policy: default-src 'none'; style-src 'sha256-W5Bxjk6xcRyVm21CJfkAFZGIg0ws1lPIZVk4iIvgfvM='; script-src 'self' 'sha256-0Fn39UlX1gzbsD8qOwb7l8dKNcVs1Ip7RO4nQJ7h6eA=' 'sha256-VCmxgi0xy+OrsBETqhQMHE8pG/6EtOyPCwHhaCtvDVY=' 'sha256-FCuRNfi3FJNcEFpAXLyB1HCGAF4rJNcf+E7eLyMaxM0='; connect-src 'self'; img-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'
|
|
5
|
+
Referrer-Policy: no-referrer
|
|
6
|
+
X-Content-Type-Options: nosniff
|
|
7
|
+
|
|
8
|
+
https://artifactpass.com/privacy
|
|
9
|
+
Cache-Control: public, max-age=0, must-revalidate
|
|
10
|
+
Cross-Origin-Opener-Policy: same-origin-allow-popups
|
|
11
|
+
Content-Security-Policy: default-src 'none'; style-src 'sha256-W5Bxjk6xcRyVm21CJfkAFZGIg0ws1lPIZVk4iIvgfvM='; script-src 'self' 'sha256-0Fn39UlX1gzbsD8qOwb7l8dKNcVs1Ip7RO4nQJ7h6eA=' 'sha256-VCmxgi0xy+OrsBETqhQMHE8pG/6EtOyPCwHhaCtvDVY=' 'sha256-FCuRNfi3FJNcEFpAXLyB1HCGAF4rJNcf+E7eLyMaxM0='; connect-src 'self'; img-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'
|
|
12
|
+
Referrer-Policy: no-referrer
|
|
13
|
+
X-Content-Type-Options: nosniff
|
|
14
|
+
|
|
15
|
+
https://artifactpass.com/terms
|
|
16
|
+
Cache-Control: public, max-age=0, must-revalidate
|
|
17
|
+
Cross-Origin-Opener-Policy: same-origin-allow-popups
|
|
18
|
+
Content-Security-Policy: default-src 'none'; style-src 'sha256-W5Bxjk6xcRyVm21CJfkAFZGIg0ws1lPIZVk4iIvgfvM='; script-src 'self' 'sha256-0Fn39UlX1gzbsD8qOwb7l8dKNcVs1Ip7RO4nQJ7h6eA=' 'sha256-VCmxgi0xy+OrsBETqhQMHE8pG/6EtOyPCwHhaCtvDVY=' 'sha256-FCuRNfi3FJNcEFpAXLyB1HCGAF4rJNcf+E7eLyMaxM0='; connect-src 'self'; img-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'
|
|
19
|
+
Referrer-Policy: no-referrer
|
|
20
|
+
X-Content-Type-Options: nosniff
|
|
@@ -1,17 +1,45 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="referrer" content="no-referrer"/><meta name="theme-color" content="#0b0c0e"/><meta name="description" content="Create expiring links for Markdown, HTML, and PDF files. Share exact work between people and AI agents from the browser, CLI, or MCP."/><meta name="robots" content="index, follow, max-image-preview:large"/><meta property="og:type" content="website"/><meta property="og:site_name" content="ArtifactPass"/><meta property="og:title" content="ArtifactPass | Temporary File Sharing for People and AI Agents"/><meta property="og:description" content="Create expiring links for Markdown, HTML, and PDF files. Share exact work between people and AI agents from the browser, CLI, or MCP."/><meta property="og:url" content="https://artifactpass.com/"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="ArtifactPass | Temporary File Sharing for People and AI Agents"/><meta name="twitter:description" content="Create expiring links for Markdown, HTML, and PDF files. Share exact work between people and AI agents from the browser, CLI, or MCP."/><link rel="canonical" href="https://artifactpass.com/"/><link rel="icon" href="/artifactpass-logo.svg" type="image/svg+xml"/><title>ArtifactPass | Temporary File Sharing for People and AI Agents</title><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://artifactpass.com/#website","url":"https://artifactpass.com/","name":"ArtifactPass","description":"Create expiring links for Markdown, HTML, and PDF files. Share exact work between people and AI agents from the browser, CLI, or MCP."},{"@type":"SoftwareApplication","@id":"https://artifactpass.com/#application","url":"https://artifactpass.com/","name":"ArtifactPass","description":"Create expiring links for Markdown, HTML, and PDF files. Share exact work between people and AI agents from the browser, CLI, or MCP.","applicationCategory":"DeveloperApplication","operatingSystem":"Any","browserRequirements":"Requires a modern web browser","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"featureList":["Temporary links for Markdown, HTML, and PDF files","Browser, command-line, and MCP sharing","Exact source-file handoffs between people and AI agents"]}]}</script><script>
|
|
2
|
+
(() => {
|
|
3
|
+
const requested = new URLSearchParams(window.location.search).get("theme");
|
|
4
|
+
const stored = localStorage.getItem("artifactpass-theme");
|
|
5
|
+
document.documentElement.dataset.theme = requested === "light" || requested === "dark"
|
|
6
|
+
? requested
|
|
7
|
+
: stored === "light" || stored === "dark" ? stored : "dark";
|
|
8
|
+
})();
|
|
9
|
+
</script><style>
|
|
10
|
+
:root{--void:#0b0c0e;--graphite:#121418;--panel:rgba(255,255,255,.055);--panel-strong:rgba(255,255,255,.085);--line:rgba(255,255,255,.13);--line-strong:rgba(255,255,255,.22);--bone:#efefec;--ash:#b8babd;--slate:#797d82;--ink:#17181a;--white:#f9f9f7;--amber:#b98458;--violet:#716de4;--blue:#557fbd;--command-bg:#17191d;--agent-bg:rgba(255,255,255,.06);--artifact-bg:rgba(8,9,11,.62);--trace-bg:rgba(4,5,6,.52);--dialog-bg:#121418;--dialog-backdrop:rgba(3,4,5,.72);--preview-bg:rgba(5,6,8,.48);--overlay-bg:rgba(10,11,13,.9);--stage-warm:rgba(185,132,88,.12);--stage-cool:rgba(85,127,189,.12);--stage-sheen:rgba(113,109,228,.10);--trust-warm:rgba(185,132,88,.09);--sans:"Avenir Next",Avenir,"Helvetica Neue",Helvetica,sans-serif;--display:"Lyondisplay App","Lyon Display App",Georgia,"Times New Roman",serif;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace;color-scheme:dark}
|
|
11
|
+
:root[data-theme="light"]{--void:#f3f3f0;--graphite:#fafaf8;--panel:rgba(23,24,26,.045);--panel-strong:rgba(23,24,26,.075);--line:rgba(23,24,26,.13);--line-strong:rgba(23,24,26,.23);--bone:#1b1c1e;--ash:#4f5358;--slate:#696e74;--ink:#f8f8f5;--white:#111214;--command-bg:#fdfdfb;--agent-bg:rgba(255,255,255,.72);--artifact-bg:rgba(255,255,255,.88);--trace-bg:rgba(255,255,255,.66);--dialog-bg:#fdfdfb;--dialog-backdrop:rgba(33,34,36,.36);--preview-bg:rgba(255,255,255,.78);--overlay-bg:rgba(249,249,246,.94);--stage-warm:rgba(185,132,88,.10);--stage-cool:rgba(85,127,189,.10);--stage-sheen:rgba(113,109,228,.07);--trust-warm:rgba(185,132,88,.08);color-scheme:light}
|
|
12
|
+
*{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth}body{min-width:320px;min-height:100dvh;margin:0;overflow-x:hidden;color:var(--bone);background:var(--void);font-family:var(--sans);-webkit-font-smoothing:antialiased}button,a{font:inherit}.shell{width:min(1240px,calc(100% - 40px));margin:0 auto}.site-header{display:flex;align-items:center;justify-content:space-between;height:76px;border-bottom:1px solid var(--line)}
|
|
13
|
+
.brand{display:inline-flex;align-items:center;width:max-content;color:var(--bone);font-size:15px;font-weight:600;letter-spacing:-.03em;text-decoration:none}.brand-mark{display:block;width:20px;height:20px;margin-right:9px;color:var(--bone);flex:none}.header-actions{display:flex;align-items:center;gap:0}.header-divider{width:1px;height:16px;margin:0 10px;background:var(--line)}.theme-toggle{display:grid;width:32px;height:32px;padding:0;border:0;color:var(--ash);background:transparent;cursor:pointer;place-items:center}.theme-toggle:hover{color:var(--bone);background:var(--panel)}.theme-symbol{display:block;width:18px;height:18px}.header-action{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:32px;padding:0 3px;border:0;color:var(--ash);background:transparent;cursor:pointer;text-decoration:none;font-size:12px;font-weight:500}.header-action svg{display:block;width:16px;height:16px}.header-action:hover{color:var(--bone);background:var(--panel)}.header-action--primary{min-height:31px;padding:0 12px;border:1px solid var(--white);border-radius:8px;color:var(--ink);background:var(--white);font-size:13px}.header-action--primary:hover{border-color:var(--white);color:var(--ink);background:var(--white);opacity:.88}
|
|
14
|
+
.homepage-main{padding:58px 0 46px}.hero{display:grid;grid-template-columns:minmax(0,.88fr) minmax(520px,1.12fr);gap:52px;align-items:center;min-height:650px}.hero-copy{max-width:540px}.integration-label{display:inline-flex;align-items:center;gap:9px;margin:0 0 24px;color:var(--ash);font:500 11px/1 var(--mono)}.integration-label:before{width:18px;height:1px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue));content:""}.hero h1{margin:0;font-size:clamp(56px,4.8vw,70px);font-weight:500;line-height:.98;letter-spacing:-.055em}.hero-cycle{display:inline-grid;min-width:4.65em;vertical-align:baseline}.hero-cycle-word{grid-area:1/1;color:var(--bone);font-family:var(--display);font-style:italic;font-weight:400;letter-spacing:-.045em;opacity:0;transform:translateY(.28em);filter:blur(5px);animation:hero-word-cycle 9s cubic-bezier(.22,1,.36,1) infinite both;will-change:opacity,transform,filter}.hero-cycle-word:nth-child(1){animation-delay:-.75s}.hero-cycle-word:nth-child(2){animation-delay:2.25s}.hero-cycle-word:nth-child(3){animation-delay:5.25s}@keyframes hero-word-cycle{0%,5%{opacity:0;transform:translateY(.28em);filter:blur(5px)}10%,30%{opacity:1;transform:translateY(0);filter:blur(0)}35%,100%{opacity:0;transform:translateY(-.22em);filter:blur(4px)}}.subhead{max-width:470px;margin:24px 0 0;color:var(--ash);font-size:18px;line-height:1.5;letter-spacing:-.02em}
|
|
15
|
+
.setup{margin-top:34px;padding:15px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.setup-label{display:flex;justify-content:space-between;padding:0 0 13px;color:var(--slate);font-size:11px}.setup-label strong{color:var(--bone);font-weight:500}.command{display:flex;align-items:center;min-height:58px;padding-left:16px;overflow:hidden;border:1px solid var(--line);border-radius:10px;background:var(--command-bg)}.command code{min-width:0;flex:1;overflow:hidden;color:var(--bone);font:500 14px/1.2 var(--mono);letter-spacing:-.035em;text-overflow:ellipsis;white-space:nowrap}.copy-button{align-self:stretch;min-width:92px;border:0;border-left:1px solid var(--line);color:var(--ash);background:transparent;cursor:pointer;font-size:12px;font-weight:500}.copy-button:hover{color:var(--white);background:var(--panel-strong)}.copy-button:active{transform:translateY(1px) scale(.98)}.copy-button:focus-visible,a:focus-visible,button:focus-visible{outline:2px solid var(--white);outline-offset:3px}.setup-steps{display:flex;gap:12px;margin:13px 0 0;color:var(--slate);font-size:11px}.setup-steps span{flex:1}.setup-steps b{color:var(--ash);font-weight:500}.setup-scope{margin:11px 0 0;color:var(--slate);font-size:10px;line-height:1.45}.try-card{display:grid;grid-template-areas:"title action" "formats action";grid-template-columns:minmax(0,1fr) auto;gap:5px 16px;width:100%;margin-top:16px;padding:15px 16px;border:1px dashed var(--line-strong);border-radius:12px;color:var(--ash);background:transparent;cursor:pointer;text-align:left;transition:border-color .18s ease,background .18s ease}.try-card:hover{border-color:var(--ash);background:linear-gradient(100deg,var(--stage-warm),transparent 48%,var(--stage-cool))}.try-card strong{grid-area:title;color:var(--bone);font-size:13px;font-weight:500}.try-card-formats{grid-area:formats;color:var(--slate);font:400 10px/1.4 var(--mono)}.try-card-action{grid-area:action;display:grid;width:34px;height:34px;align-self:center;border:1px solid transparent;border-radius:10px;color:var(--bone);background:linear-gradient(var(--void),var(--void)) padding-box,linear-gradient(135deg,var(--amber),var(--violet),var(--blue)) border-box;place-items:center}.try-card-action svg{display:block;width:16px;height:16px}
|
|
16
|
+
.handoff-stage{position:relative;min-height:560px;overflow:hidden;border:1px solid var(--line);border-radius:34px;background:linear-gradient(145deg,var(--stage-warm),transparent 34%),linear-gradient(325deg,var(--stage-cool),transparent 38%),var(--graphite);isolation:isolate}.handoff-stage:before{position:absolute;inset:0;background:linear-gradient(115deg,transparent 34%,var(--stage-sheen) 50%,transparent 66%);pointer-events:none;content:""}.stage-header{position:relative;display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid var(--line);color:var(--slate);font:400 10px/1 var(--mono)}.stage-header strong{color:var(--ash);font-weight:500}.flow{position:relative;display:grid;grid-template-columns:1fr 76px 1fr;gap:14px;align-items:center;padding:50px 34px 28px}.agent-panel{min-width:0;padding:20px;border:1px solid var(--line);border-radius:26px;background:var(--agent-bg);backdrop-filter:blur(12px)}.agent-meta{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;color:var(--slate);font-size:11px}.agent-meta strong{color:var(--bone);font-size:13px;font-weight:500}.artifact-file{padding:15px;border:1px solid var(--line);border-radius:12px;background:var(--artifact-bg)}.file-name{display:block;overflow:hidden;margin-bottom:10px;color:var(--bone);font:500 12px/1 var(--mono);text-overflow:ellipsis;white-space:nowrap}.file-copy{margin:0;color:var(--slate);font:400 10px/1.55 var(--mono)}.file-copy b{color:var(--ash);font-weight:500}.relay{color:var(--slate);font:400 9px/1.4 var(--mono);text-align:center}.relay-line{position:relative;height:1px;margin-bottom:12px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue))}.relay-line:after{position:absolute;top:-3px;right:-1px;width:7px;height:7px;border-top:1px solid var(--blue);border-right:1px solid var(--blue);transform:rotate(45deg);content:""}.tool-trace{position:relative;margin:8px 34px 34px;padding:18px 20px;border:1px solid var(--line);border-radius:18px;background:var(--trace-bg)}.trace-line{display:grid;grid-template-columns:72px 1fr auto;gap:12px;color:var(--slate);font:400 10px/1.7 var(--mono)}.trace-line+.trace-line{margin-top:4px}.trace-line strong{color:var(--ash);font-weight:500}.trace-line code{color:var(--bone);font:inherit}.trace-line span:last-child{color:var(--ash)}
|
|
17
|
+
.trust{display:grid;grid-template-columns:1.35fr .65fr;margin-top:20px;overflow:hidden;border:1px solid var(--line);border-radius:20px}.cloudflare{padding:24px;border-right:1px solid var(--line);background:linear-gradient(130deg,var(--trust-warm),transparent 55%)}.trust-label{display:block;margin-bottom:12px;color:var(--slate);font:400 10px/1 var(--mono)}.cloudflare strong{display:block;max-width:640px;color:var(--bone);font-size:18px;font-weight:500;line-height:1.35;letter-spacing:-.025em}.cloudflare p{max-width:620px;margin:10px 0 0;color:var(--slate);font-size:12px;line-height:1.55}.trust-links{display:grid;grid-template-rows:1fr 1fr}.trust-item{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 20px;color:var(--slate);font-size:11px;text-decoration:none}.trust-item+.trust-item{border-top:1px solid var(--line)}.trust-item strong{display:block;margin-bottom:4px;color:var(--bone);font-size:12px;font-weight:500}.trust-item b{color:var(--ash);font:400 14px/1 var(--mono)}
|
|
18
|
+
.how-section{scroll-margin-top:28px;margin-top:62px;padding:72px 0 20px;border-top:1px solid var(--line)}.how-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,.72fr);gap:64px;align-items:end;margin-bottom:38px}.how-eyebrow{display:flex;align-items:center;gap:9px;color:var(--slate);font:500 10px/1 var(--mono)}.how-eyebrow:before{width:18px;height:1px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue));content:""}.how-section h2{max-width:680px;margin:18px 0 0;font-size:clamp(40px,4.7vw,64px);font-weight:500;line-height:1;letter-spacing:-.055em}.how-copy{max-width:500px;margin:0;color:var(--ash);font-size:17px;line-height:1.55}.explain-grid{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border:1px solid var(--line-strong);border-radius:22px;background:var(--graphite)}.explain-block{padding:30px 34px}.explain-block+.explain-block{border-left:1px solid var(--line)}.explain-label{display:block;margin-bottom:20px;color:var(--slate);font:400 10px/1 var(--mono)}.explain-block h3{margin:0 0 17px;color:var(--bone);font-size:21px;font-weight:500;letter-spacing:-.025em}.plain-list{margin:0;padding:0;list-style:none}.plain-list li{position:relative;padding:14px 0 14px 22px;border-top:1px solid var(--line);color:var(--ash);font-size:13px;line-height:1.5}.plain-list li:before{position:absolute;top:20px;left:1px;width:7px;height:7px;border:1px solid var(--line-strong);border-radius:50%;content:""}.plain-list strong{color:var(--bone);font-weight:600}.plain-answer{display:flex;justify-content:space-between;gap:24px;margin-top:14px;padding:18px 21px;border:1px solid var(--line);border-radius:13px;color:var(--slate);font-size:12px}.plain-answer strong{color:var(--bone);font-weight:600}.plain-answer span:last-child{font:400 10px/1.5 var(--mono)}
|
|
19
|
+
.page-footer{display:flex;justify-content:space-between;gap:20px;padding:26px 0 34px;border-top:1px solid var(--line);color:var(--slate);font-size:11px}.footer-links{display:flex;gap:16px}.footer-links a{color:inherit}.document{padding:clamp(54px,9vw,94px) 0}.document .eyebrow{margin:0 0 18px;color:var(--slate);font:500 11px/1 var(--mono)}.document h1{margin:0;font-size:clamp(54px,5vw,64px);font-weight:500;letter-spacing:-.055em}.document .updated{margin:18px 0 28px;color:var(--slate);font-size:12px}.environment-notice{display:grid;max-width:720px;margin:0 0 38px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--panel);gap:4px}.environment-notice strong{color:var(--bone);font-size:12px;font-weight:500}.environment-notice span{color:var(--slate);font-size:11px;line-height:1.5}.prose{max-width:720px;color:var(--ash);font-size:16px;line-height:1.75}.prose h2{margin:38px 0 8px;color:var(--bone);font-size:20px;font-weight:500}.prose p,.prose ul{margin:0 0 18px}.prose li+li{margin-top:8px}.prose a{color:var(--bone);text-underline-offset:3px}.prose code{color:var(--bone);font:400 .9em/1.5 var(--mono)}.prose strong{color:var(--bone);font-weight:500}
|
|
20
|
+
dialog{width:min(580px,calc(100% - 28px));max-height:calc(100dvh - 28px);padding:0;overflow:auto;border:1px solid var(--line-strong);border-radius:24px;color:var(--bone);background:var(--dialog-bg);box-shadow:0 28px 90px rgba(0,0,0,.55)}dialog::backdrop{background:var(--dialog-backdrop);backdrop-filter:blur(8px)}.dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:22px;border-bottom:1px solid var(--line)}.dialog-header h2{margin:0 0 5px;font-size:20px;font-weight:500}.dialog-header p{margin:0;color:var(--slate);font-size:12px}.close-dialog{width:32px;height:32px;border:1px solid var(--line);border-radius:9px;color:var(--ash);background:transparent;cursor:pointer}.close-dialog:disabled{cursor:default;opacity:.4}.dialog-body{padding:22px}.drop-zone{display:grid;min-height:150px;padding:24px;border:1px dashed var(--line-strong);border-radius:16px;color:var(--slate);cursor:pointer;text-align:center;place-items:center}.drop-zone:hover,.drop-zone.is-over{border-color:var(--bone);background:var(--panel)}.drop-zone strong{display:block;margin-bottom:7px;color:var(--bone);font-size:14px;font-weight:500}.drop-zone span{font-size:11px}.file-preview{display:grid;grid-template-columns:40px minmax(0,1fr) auto;gap:2px 14px;align-items:center;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--preview-bg)}.file-preview .file-kind{grid-row:1/span 2;display:grid;width:40px;height:40px;border:1px solid var(--line);border-radius:9px;color:var(--ash);font:500 9px/1 var(--mono);place-items:center}.file-preview strong{overflow:hidden;color:var(--bone);font:500 12px/1.4 var(--mono);text-overflow:ellipsis;white-space:nowrap}.file-preview span{color:var(--slate);font:400 10px/1.4 var(--mono)}.file-preview button{grid-row:1/span 2;grid-column:3;padding:5px 0;border:0;border-bottom:1px solid var(--line-strong);color:var(--ash);background:transparent;cursor:pointer;font-size:11px}.file-preview button:disabled{cursor:default;opacity:.45}.local-note{margin:12px 0 0;color:var(--ash);font-size:11px;line-height:1.5}.modal-status{margin:12px 0 0;padding:10px 12px;border:1px solid var(--line);border-radius:10px;color:var(--ash);font-size:11px;line-height:1.45}.modal-status[data-tone="error"]{border-color:rgba(185,88,88,.42);color:#c98989;background:rgba(185,88,88,.08)}.upload-config{margin-top:20px}.upload-config fieldset{margin:0;padding:0;border:0}.upload-config legend{margin-bottom:10px;color:var(--ash);font-size:12px}.expiry-options{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.expiry-options label{position:relative}.expiry-options input{position:absolute;opacity:0;pointer-events:none}.expiry-options span{display:block;padding:12px;border:1px solid var(--line);border-radius:10px;color:var(--slate);cursor:pointer;font:500 12px/1 var(--mono);text-align:center}.expiry-options input:checked+span{border-color:var(--bone);color:var(--bone);background:var(--panel-strong)}.expiry-options input:disabled+span{cursor:default;opacity:.45}.auth-gate{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.auth-gate p{margin:0;color:var(--slate);font-size:11px;line-height:1.45}.continue-button{flex:0 0 auto;min-height:44px;padding:0 17px;border:0;border-radius:11px;color:var(--ink);background:var(--white);cursor:pointer;font-size:12px;font-weight:500}.continue-button:disabled{cursor:default;opacity:.62}.drop-overlay{position:fixed;inset:14px;display:none;border:1px dashed var(--bone);border-radius:24px;color:var(--bone);background:var(--overlay-bg);backdrop-filter:blur(10px);pointer-events:none;text-align:center;place-items:center;z-index:2}.drop-overlay.is-visible{display:grid}.drop-overlay strong{display:block;margin-bottom:8px;font-size:22px;font-weight:500}.drop-overlay span{color:var(--ash);font-size:12px}
|
|
21
|
+
@media(max-width:980px){.hero{grid-template-columns:minmax(0,1fr);min-height:0}.hero-copy{min-width:0;width:100%;max-width:720px;margin-inline:auto}.handoff-stage{min-width:0;min-height:0}}
|
|
22
|
+
@media(max-width:680px){.shell{width:calc(100% - 28px)}.site-header{height:68px}.header-action--how,.header-divider--how{display:none}.header-divider{height:16px;margin:0 7px}.header-action{width:32px;padding:0}.header-action--primary{width:32px;min-height:31px;border-radius:8px}.header-action-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.theme-toggle{width:32px;height:32px}.theme-symbol{width:18px;height:18px}.homepage-main{padding-top:42px}.hero{gap:38px}.hero h1{font-size:clamp(52px,15vw,68px)}.subhead{font-size:16px}.setup-label{align-items:flex-start;gap:10px}.setup-steps{display:grid;grid-template-columns:1fr;gap:9px;padding:2px 8px 6px}.handoff-stage{border-radius:24px}.stage-header{padding:15px 16px}.flow{grid-template-columns:minmax(0,1fr);gap:10px;padding:16px}.agent-panel{padding:16px;border-radius:18px}.agent-meta{margin-bottom:14px}.artifact-file{padding:14px}.relay{display:flex;align-items:center;flex-direction:column;gap:7px;padding:2px 0 0}.relay-line{width:1px;height:28px;margin:0;background:linear-gradient(180deg,var(--amber),var(--violet),var(--blue))}.relay-line:after{top:auto;right:-3px;bottom:0;border-top:0;border-right:1px solid var(--blue);border-bottom:1px solid var(--blue);transform:rotate(45deg)}.tool-trace{margin:2px 16px 16px;padding:8px 14px;border-radius:14px}.trace-line{grid-template-columns:58px minmax(0,1fr) auto;gap:8px;font-size:9px;align-items:center}.trace-line+.trace-line{margin-top:0;padding-top:7px}.trace-line:not(:last-child){padding-bottom:7px;border-bottom:1px solid var(--line)}.how-section{margin-top:48px;padding-top:54px}.how-intro{grid-template-columns:1fr;gap:22px;margin-bottom:28px}.how-copy{font-size:15px}.explain-grid{grid-template-columns:1fr;border-radius:18px}.explain-block{padding:24px 20px}.explain-block+.explain-block{border-top:1px solid var(--line);border-left:0}.plain-list li{padding-left:0}.plain-list li:before{display:none}.plain-answer{align-items:flex-start;flex-direction:column;gap:8px}.trust{grid-template-columns:1fr}.cloudflare{border-right:0;border-bottom:1px solid var(--line)}.auth-gate{align-items:flex-start;flex-direction:column}.continue-button{width:100%}.page-footer{align-items:flex-start;flex-direction:column}}
|
|
23
|
+
@media(max-width:360px){.shell{width:calc(100% - 20px)}.stage-header{padding:13px 12px}.flow{gap:8px;padding:12px}.agent-panel{padding:12px;border-radius:16px}.agent-meta{margin-bottom:11px}.artifact-file{padding:12px}.tool-trace{margin:2px 12px 12px;padding:8px 10px}.trace-line{grid-template-columns:52px minmax(0,1fr) auto;gap:6px;font-size:8.5px}}
|
|
24
|
+
@media(prefers-reduced-transparency:reduce){.agent-panel,dialog,.drop-overlay{backdrop-filter:none}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition-duration:0s!important}.hero-cycle-word{animation:none;opacity:1;transform:none;filter:none}.hero-cycle-word:not(:first-child){display:none}}
|
|
25
|
+
</style></head><body><div class="shell"><header class="site-header"><a class="brand" href="/"><svg data-artifactpass-mark="capability-corridor" viewBox="0 0 64 64" class="brand-mark" aria-hidden="true" focusable="false"><path fill="currentColor" d="M14 5h36l9 9v19h-8.7l-8-6.5H23.4L15 20H5v-6z"></path><path fill="currentColor" d="M5 27h8.7l8 6.5h19L49 40h10v10l-9 9H14l-9-9z"></path></svg>ArtifactPass</a><div class="header-actions"><a class="header-action header-action--how" href="#how" aria-label="How ArtifactPass works"><span class="header-action-label">How it works</span></a><span class="header-divider header-divider--how" aria-hidden="true"></span><a class="header-action header-action--github" href="https://github.com/lordelogos/lordebuilds.artifact.pass" aria-label="View ArtifactPass on GitHub" title="GitHub"><svg viewBox="0 0 438.549 438.549" aria-hidden="true" focusable="false"><path fill="currentColor" d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 0 1-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z"></path></svg><span class="header-action-label">GitHub</span></a><span class="header-divider" aria-hidden="true"></span><button class="theme-toggle" id="theme-toggle" type="button" aria-label="Switch to light mode" aria-pressed="true" title="Switch to light mode"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="theme-symbol" aria-hidden="true" focusable="false"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0-18 0"></path><path d="M12 3v18"></path><path d="m12 9 4.65-4.65"></path><path d="m12 14.3 7.37-7.37"></path><path d="m12 19.6 8.85-8.85"></path></svg></button><span class="header-divider" aria-hidden="true"></span><a class="header-action header-action--primary" href="#install" aria-label="Set up ArtifactPass" title="Set up"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" color="currentColor" class="" aria-hidden="true"><path d="M12 4V20M20 12H4" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg><span class="header-action-label">Set up</span></a></div></header><main class="homepage-main"><section class="hero" aria-labelledby="hero-title"><div class="hero-copy"><p class="integration-label">MCP + Agent Skills</p><h1 id="hero-title" aria-label="Pass work between agents, teammates, and humans.">Pass work between <span class="hero-cycle" aria-hidden="true"><span class="hero-cycle-word">agents.</span><span class="hero-cycle-word">teammates.</span><span class="hero-cycle-word">humans.</span></span></h1><p class="subhead">Share Markdown, HTML, and PDF files through expiring links, from the browser or your AI agent.</p><section class="setup" id="install" aria-label="Set up ArtifactPass"><div class="setup-label"><strong>Set up ArtifactPass</strong><span>Run inside your workspace</span></div><div class="command"><code id="install-command">pnpm dlx artifactpass</code><button class="copy-button" id="copy-command" type="button">Copy</button></div><div class="setup-steps" aria-label="Installation steps"><span><b>Install</b> Skill + MCP</span><span><b>Restart</b> agent session</span><span><b>Connect</b> on first use</span></div><p class="setup-scope">Setup applies only to the project folder you run it from.</p></section><button class="try-card" id="open-upload" type="button"><strong>Click to try it or drag a file</strong><span class="try-card-formats">MD, HTML, PDF</span><span class="try-card-action" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" color="currentColor" class=""><path d="M2.99994 17C2.99994 17.93 2.99994 18.395 3.10216 18.7765C3.37956 19.8117 4.18821 20.6204 5.22348 20.8978C5.60498 21 6.06997 21 6.99994 21L16.9999 21C17.9299 21 18.3949 21 18.7764 20.8978C19.8117 20.6204 20.6203 19.8117 20.8977 18.7765C20.9999 18.395 20.9999 17.93 20.9999 17" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M16.5 7.49993C16.5 7.49993 13.1858 2.99997 12 2.99996C10.8141 2.99995 7.50002 7.49996 7.50002 7.49996M12 3.99996V16" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg></span></button><noscript><p><a href="/upload">Upload a document</a></p></noscript></div><section class="handoff-stage" aria-label="ArtifactPass handoff example"><div class="stage-header"><strong>Live handoff</strong><span>exact source, temporary access</span></div><div class="flow"><article class="agent-panel"><div class="agent-meta"><strong>Codex</strong><span>publisher</span></div><div class="artifact-file"><span class="file-name">migration-plan.md</span><p class="file-copy"><b>publish_artifact</b><br/>expiry: 15 minutes<br/>format: markdown</p></div></article><div class="relay" aria-label="ArtifactPass temporary link"><div class="relay-line" aria-hidden="true"></div>ArtifactPass link</div><article class="agent-panel"><div class="agent-meta"><strong>Claude Code</strong><span>reviewer</span></div><div class="artifact-file"><span class="file-name">migration-plan.md</span><p class="file-copy"><b>read_artifact</b><br/>source: exact<br/>status: ready</p></div></article></div><div class="tool-trace" aria-label="MCP tool trace"><div class="trace-line"><strong>Codex</strong><code>publish_artifact</code><span>link created</span></div><div class="trace-line"><strong>ArtifactPass</strong><code>/a/••••••••••••</code><span>15 min</span></div><div class="trace-line"><strong>Claude</strong><code>read_artifact</code><span>source loaded</span></div></div></section></section><section class="how-section" id="how" aria-labelledby="how-title"><div class="how-intro"><div><span class="how-eyebrow">How ArtifactPass works</span><h2 id="how-title">A temporary link for your work.</h2></div><p class="how-copy">Share a file with a person or AI agent. The link stops working when time runs out.</p></div><div class="explain-grid"><section class="explain-block" aria-labelledby="people-title"><span class="explain-label">For people</span><h3 id="people-title">How it works</h3><ul class="plain-list"><li><strong>Pick a file.</strong> Markdown, HTML, or PDF.</li><li><strong>Pick a time.</strong> 1 hour, 1 day, or 7 days.</li><li><strong>Send the link.</strong> No account needed to open it.</li></ul></section><section class="explain-block" aria-labelledby="agents-title"><span class="explain-label">For AI agents</span><h3 id="agents-title">Why agents use it</h3><ul class="plain-list"><li><strong>One agent shares the file.</strong></li><li><strong>The next agent opens the exact file.</strong></li><li><strong>No copy-pasting. No lost formatting.</strong></li></ul></section></div><div class="plain-answer"><span><strong>Sign in to share.</strong> No sign-in to open.</span><span>Exact file · automatic expiry</span></div></section><section class="trust" aria-label="ArtifactPass infrastructure and trust"><div class="cloudflare"><span class="trust-label">Cloudflare-native infrastructure</span><strong>Workers at the edge. Artifact storage in R2. Metadata in D1.</strong><p>Authentication is required to create a link. Public artifacts are served through one controlled Worker boundary.</p></div><div class="trust-links"><div class="trust-item"><span><strong>Temporary by default</strong>1 hour, 1 day, or 7 days.</span><b>time</b></div><a class="trust-item" href="https://github.com/lordelogos/lordebuilds.artifact.pass"><span><strong>Open source</strong>Inspect the Skill, MCP, and server.</span><b>↗</b></a></div></section></main><div class="drop-overlay" id="drop-overlay" aria-hidden="true"><div><strong>Drop to preview</strong><span>Your document stays in this browser. Nothing uploads yet.</span></div></div><dialog id="upload-dialog" aria-labelledby="upload-title" aria-describedby="upload-description"><div class="dialog-header"><div><h2 id="upload-title">Try ArtifactPass</h2><p id="upload-description">Choose one document to create a temporary link.</p></div><button class="close-dialog" id="close-upload" type="button" aria-label="Close upload preview">×</button></div><div class="dialog-body"><input id="pending-file-input" type="file" accept=".md,.markdown,.html,.htm,.pdf,text/markdown,text/html,application/pdf" hidden=""/><div class="drop-zone" id="drop-zone" tabindex="0" role="button" aria-label="Choose a Markdown, HTML, or PDF document"><div><strong>Drop a document here</strong><span>or click to choose an MD, HTML, or PDF file</span></div></div><div class="file-preview" id="file-preview" hidden=""><b class="file-kind" id="file-kind">FILE</b><strong id="file-name"></strong><span id="file-details"></span><button id="change-file" type="button">Choose another</button></div><p class="local-note" id="local-note" hidden="">Kept in this browser only. Nothing uploads until you continue.</p><p class="modal-status" id="upload-status" role="status" aria-live="polite" hidden=""></p><div class="upload-config" id="upload-config" hidden=""><fieldset><legend>How long should the link work?</legend><div class="expiry-options"><label><input type="radio" name="expiry" checked="" value="3600"/><span>1 hour</span></label><label><input type="radio" name="expiry" value="86400"/><span>1 day</span></label><label><input type="radio" name="expiry" value="604800"/><span>7 days</span></label></div></fieldset><div class="auth-gate"><p id="auth-copy">Sign in to continue. You still approve the upload before a link is created.</p><button class="continue-button" id="continue-upload" type="button">Continue to sign in</button></div></div></div></dialog><footer class="page-footer"><span>ArtifactPass</span><span class="footer-links"><a href="/privacy">Privacy</a><a href="/terms">Terms</a><span>Built for agentic handoffs.</span></span></footer></div><script>
|
|
26
|
+
const themeToggle=document.querySelector("#theme-toggle");
|
|
27
|
+
const themeColor=document.querySelector('meta[name="theme-color"]');
|
|
28
|
+
const syncTheme=()=>{const light=document.documentElement.dataset.theme==="light";themeToggle.setAttribute("aria-label","Switch to "+(light?"dark":"light")+" mode");themeToggle.setAttribute("aria-pressed",String(!light));themeToggle.title="Switch to "+(light?"dark":"light")+" mode";themeColor.content=light?"#f3f3f0":"#0b0c0e";};
|
|
29
|
+
syncTheme();themeToggle.addEventListener("click",()=>{const next=document.documentElement.dataset.theme==="light"?"dark":"light";document.documentElement.dataset.theme=next;localStorage.setItem("artifactpass-theme",next);syncTheme();});
|
|
30
|
+
</script><script>
|
|
31
|
+
const copyButton=document.querySelector("#copy-command");const command=document.querySelector("#install-command");copyButton.addEventListener("click",async()=>{try{await navigator.clipboard.writeText(command.textContent);copyButton.textContent="Copied";window.setTimeout(()=>{copyButton.textContent="Copy";},1600);}catch{const selection=window.getSelection();const range=document.createRange();range.selectNodeContents(command);selection.removeAllRanges();selection.addRange(range);copyButton.textContent="Selected";}});
|
|
32
|
+
const dialog=document.querySelector("#upload-dialog");const description=document.querySelector("#upload-description");const closeButton=document.querySelector("#close-upload");const input=document.querySelector("#pending-file-input");const dropZone=document.querySelector("#drop-zone");const preview=document.querySelector("#file-preview");const config=document.querySelector("#upload-config");const note=document.querySelector("#local-note");const status=document.querySelector("#upload-status");const changeButton=document.querySelector("#change-file");const overlay=document.querySelector("#drop-overlay");const overlayTitle=overlay.querySelector("strong");const overlayCopy=overlay.querySelector("span");const continueButton=document.querySelector("#continue-upload");const authCopy=document.querySelector("#auth-copy");const expiryInputs=[...document.querySelectorAll('input[name="expiry"]')];let selectedFile=null;let sessionAuthenticated=false;let deploymentMode="public";let dragDepth=0;let authBusy=false;let validationRun=0;let validatorPromise=null;
|
|
33
|
+
const openDialog=()=>{if(!dialog.open)dialog.showModal();};const formatBytes=(bytes)=>bytes<1024?bytes+" B":bytes<1048576?(bytes/1024).toFixed(1)+" KB":(bytes/1048576).toFixed(1)+" MB";const continuationLabel=()=>sessionAuthenticated?"Continue":"Continue to sign in";const fetchPreflight=async()=>{const response=await fetch("/session/status",{credentials:"same-origin",headers:{Accept:"application/json"}});if(!response.ok)throw new Error("preflight unavailable");return response.json();};const loadPreflight=async()=>{validatorPromise??=import("/assets/homepage-validation.js");const [state,validator]=await Promise.all([fetchPreflight(),validatorPromise]);return{state,validator};};
|
|
34
|
+
const publishPath="/upload?pending=homepage&publish=1";const setStatus=(message,tone="info")=>{status.hidden=!message;status.textContent=message||"";status.dataset.tone=tone;};
|
|
35
|
+
const setAuthBusy=(busy,label="Continue to sign in")=>{authBusy=busy;continueButton.disabled=busy;continueButton.textContent=label;closeButton.disabled=busy;changeButton.disabled=busy;expiryInputs.forEach(option=>{option.disabled=busy;});};
|
|
36
|
+
const chooseFile=()=>{if(authBusy)return;input.value="";input.click();};
|
|
37
|
+
const selectFile=async(file)=>{if(!file)return false;const run=++validationRun;openDialog();setAuthBusy(true,"Checking document");setStatus("Checking this document in your browser.");try{const{state,validator}=await loadPreflight();const prepared=await validator.prepareBrowserFile(file,state.policy.max_artifact_bytes);if(run!==validationRun)return false;if(prepared.error||!prepared.file){setAuthBusy(false,continuationLabel());setStatus(prepared.error||"This document could not be validated.","error");input.value="";return false;}selectedFile=prepared.file;sessionAuthenticated=state.authenticated===true;deploymentMode=state.deployment_mode==="private"?"private":"public";const extension=(selectedFile.name.split(".").pop()||"file").toUpperCase();document.querySelector("#file-kind").textContent=extension==="MARKDOWN"?"MD":extension==="HTM"?"HTML":extension;document.querySelector("#file-name").textContent=selectedFile.name;document.querySelector("#file-details").textContent=formatBytes(selectedFile.size)+" · one document selected";dropZone.hidden=true;preview.hidden=false;config.hidden=false;note.hidden=false;description.textContent="One document selected. Nothing uploads until you continue.";authCopy.textContent=sessionAuthenticated?"Continue to create the temporary link.":"Sign in, then ArtifactPass creates the temporary link.";setAuthBusy(false,continuationLabel());setStatus("");return true;}catch{if(run!==validationRun)return false;setAuthBusy(false,continuationLabel());setStatus("Document validation is unavailable. Try again.","error");input.value="";return false;}};
|
|
38
|
+
document.querySelector("#open-upload").addEventListener("click",openDialog);closeButton.addEventListener("click",()=>{if(!authBusy)dialog.close();});dropZone.addEventListener("click",chooseFile);dropZone.addEventListener("keydown",event=>{if(event.key==="Enter"||event.key===" "){event.preventDefault();chooseFile();}});input.addEventListener("change",()=>{void selectFile(input.files&&input.files[0]);});changeButton.addEventListener("click",chooseFile);
|
|
39
|
+
const pageParameters=new URLSearchParams(window.location.search);if(pageParameters.get("upload")==="1")openDialog();if(pageParameters.get("auth")==="cancelled"){const restoreRequest=indexedDB.open("artifactpass-pending-upload",1);restoreRequest.addEventListener("upgradeneeded",()=>{if(!restoreRequest.result.objectStoreNames.contains("uploads"))restoreRequest.result.createObjectStore("uploads",{keyPath:"key"});});restoreRequest.addEventListener("success",()=>{const db=restoreRequest.result;const readRequest=db.transaction("uploads","readonly").objectStore("uploads").get("homepage");readRequest.addEventListener("success",()=>{const record=readRequest.result;db.close();if(!record||(record.version!==1&&record.version!==2)||typeof record.name!=="string"||!(record.bytes instanceof ArrayBuffer)||record.bytes.byteLength===0||Date.now()-record.createdAt>3600000){setStatus("Sign-in cancelled. Choose your document again.","error");return;}const expiry=expiryInputs.find(option=>Number(option.value)===record.expiresInSeconds);if(expiry)expiry.checked=true;void selectFile(new File([record.bytes],record.name,{type:record.type,lastModified:record.lastModified})).then(selected=>{if(selected)setStatus("Sign-in cancelled. Your document is still selected.","info");});});readRequest.addEventListener("error",()=>{db.close();setStatus("Sign-in cancelled. Choose your document again.","error");});});restoreRequest.addEventListener("error",()=>setStatus("Sign-in cancelled. Choose your document again.","error"));}
|
|
40
|
+
let authWindow=null;let authPoll=null;let authCloseGrace=null;let authFlow=null;const finishAuthWindow=()=>{if(authPoll!==null)window.clearInterval(authPoll);if(authCloseGrace!==null)window.clearTimeout(authCloseGrace);authPoll=null;authCloseGrace=null;authWindow=null;authFlow=null;};const resetAuthButton=(message,tone="error")=>{setAuthBusy(false,continuationLabel());setStatus(message,tone);};const finishAuthCancellation=()=>{if(!authBusy)return;finishAuthWindow();resetAuthButton("Sign-in cancelled. Your document is still selected.","info");};const finishAuthCompletion=()=>{if(!authBusy)return;authBusy=false;finishAuthWindow();continueButton.textContent="Creating link";setStatus("Signed in. Creating the temporary link.");window.location.assign(publishPath);};let authChannel=null;if("BroadcastChannel" in window){try{authChannel=new BroadcastChannel("artifactpass-auth");authChannel.addEventListener("message",event=>{if(typeof event.data!=="object"||event.data===null||event.data.flow!==authFlow)return;if(event.data.type==="artifactpass:auth-cancelled"){finishAuthCancellation();return;}if(event.data.type==="artifactpass:auth-complete")finishAuthCompletion();});window.addEventListener("pagehide",()=>authChannel.close(),{once:true});}catch{authChannel=null;}}const watchAuthWindow=()=>{if(authPoll!==null)window.clearInterval(authPoll);const startedAt=Date.now();authPoll=window.setInterval(()=>{if(authWindow!==null&&authWindow.closed){window.clearInterval(authPoll);authPoll=null;if(authCloseGrace===null)authCloseGrace=window.setTimeout(()=>{authCloseGrace=null;finishAuthWindow();resetAuthButton("Sign-in was closed. Your document is still selected.");},1000);return;}if(Date.now()-startedAt>=600000){try{authWindow?.close();}catch{}finishAuthWindow();resetAuthButton("Sign-in took too long. Your document is still selected.");}},500);};
|
|
41
|
+
const storePending=async(popup)=>{if(!selectedFile)return;setAuthBusy(true,sessionAuthenticated?"Creating link":"Preparing sign-in");setStatus(sessionAuthenticated?"Preparing the document for its temporary link.":"Keeping this document in your browser while sign-in opens.");const fail=()=>{popup?.close();finishAuthWindow();resetAuthButton("This browser could not keep the document for continuation. Try again.");};try{const bytes=await selectedFile.arrayBuffer();const expiry=Number(document.querySelector('input[name="expiry"]:checked').value);const request=indexedDB.open("artifactpass-pending-upload",1);request.addEventListener("upgradeneeded",()=>{if(!request.result.objectStoreNames.contains("uploads"))request.result.createObjectStore("uploads",{keyPath:"key"});});request.addEventListener("success",()=>{const db=request.result;const transaction=db.transaction("uploads","readwrite");transaction.objectStore("uploads").put({key:"homepage",version:1,name:selectedFile.name,type:selectedFile.type,lastModified:selectedFile.lastModified,bytes,expiresInSeconds:expiry,createdAt:Date.now()});transaction.addEventListener("complete",async()=>{db.close();sessionStorage.setItem("artifactpass-pending-upload","1");try{const latest=await fetchPreflight();sessionAuthenticated=latest.authenticated===true;deploymentMode=latest.deployment_mode==="private"?"private":"public";}catch{sessionAuthenticated=false;}if(sessionAuthenticated||deploymentMode==="private"){try{popup?.close();}catch{}finishAuthWindow();window.location.assign(publishPath);return;}const theme=document.documentElement.dataset.theme==="light"?"light":"dark";if(popup===null){window.location.assign("/auth/sign-in?return_to="+encodeURIComponent(publishPath)+"&theme="+theme);return;}if(popup.closed){finishAuthWindow();resetAuthButton("Sign-in was closed. Your document is still selected.");return;}const completion="/auth/popup/complete?theme="+theme+"&flow="+encodeURIComponent(authFlow);popup.location.assign("/auth/sign-in?return_to="+encodeURIComponent(completion)+"&theme="+theme);continueButton.textContent="Finish sign-in in the popup";setStatus("Finish signing in in the popup. This page will create the link automatically.");watchAuthWindow();});transaction.addEventListener("error",()=>{db.close();fail();});});request.addEventListener("error",fail);}catch{fail();}};
|
|
42
|
+
continueButton.addEventListener("click",()=>{if(authBusy||!selectedFile)return;if(sessionAuthenticated||deploymentMode==="private"){void storePending(null);return;}if(window.matchMedia("(max-width: 640px), (pointer: coarse)").matches){void storePending(null);return;}const popup=window.open("","artifactpass-auth-"+Date.now(),"popup,width=540,height=700");if(popup===null){resetAuthButton("Allow popups for ArtifactPass, then try again. Nothing has been uploaded.");return;}authWindow=popup;authFlow=Array.from(crypto.getRandomValues(new Uint8Array(16)),byte=>byte.toString(16).padStart(2,"0")).join("");popup.document.title="ArtifactPass sign-in";popup.document.body.textContent="Preparing secure sign-in…";void storePending(popup);});
|
|
43
|
+
window.addEventListener("message",event=>{if(event.origin!==window.location.origin||event.source!==authWindow||typeof event.data!=="object"||event.data===null||("flow" in event.data&&event.data.flow!==authFlow))return;if(event.data.type==="artifactpass:auth-cancelled"){finishAuthCancellation();return;}if(event.data.type==="artifactpass:auth-complete")finishAuthCompletion();});
|
|
44
|
+
document.addEventListener("dragenter",event=>{if(authBusy||!event.dataTransfer||!event.dataTransfer.types.includes("Files"))return;event.preventDefault();dragDepth+=1;overlayTitle.textContent=selectedFile?"Drop to replace":"Drop to preview";overlayCopy.textContent=selectedFile?"This will replace the selected document. Nothing uploads yet.":"Your document stays in this browser. Nothing uploads yet.";overlay.classList.add("is-visible");});document.addEventListener("dragover",event=>{if(!authBusy&&event.dataTransfer&&event.dataTransfer.types.includes("Files"))event.preventDefault();});document.addEventListener("dragleave",event=>{if(!event.dataTransfer||!event.dataTransfer.types.includes("Files"))return;dragDepth=Math.max(0,dragDepth-1);if(dragDepth===0)overlay.classList.remove("is-visible");});document.addEventListener("drop",event=>{if(authBusy||!event.dataTransfer||!event.dataTransfer.files.length)return;event.preventDefault();dragDepth=0;overlay.classList.remove("is-visible");void selectFile(event.dataTransfer.files[0]);});
|
|
45
|
+
</script></body></html>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="referrer" content="no-referrer"/><meta name="theme-color" content="#0b0c0e"/><meta name="description" content="Learn how ArtifactPass processes identity, temporary artifacts, authorization, and operational data."/><meta name="robots" content="index, follow, max-image-preview:large"/><meta property="og:type" content="website"/><meta property="og:site_name" content="ArtifactPass"/><meta property="og:title" content="Privacy · ArtifactPass"/><meta property="og:description" content="Learn how ArtifactPass processes identity, temporary artifacts, authorization, and operational data."/><meta property="og:url" content="https://artifactpass.com/privacy"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="Privacy · ArtifactPass"/><meta name="twitter:description" content="Learn how ArtifactPass processes identity, temporary artifacts, authorization, and operational data."/><link rel="canonical" href="https://artifactpass.com/privacy"/><link rel="icon" href="/artifactpass-logo.svg" type="image/svg+xml"/><title>Privacy · ArtifactPass</title><script>
|
|
2
|
+
(() => {
|
|
3
|
+
const requested = new URLSearchParams(window.location.search).get("theme");
|
|
4
|
+
const stored = localStorage.getItem("artifactpass-theme");
|
|
5
|
+
document.documentElement.dataset.theme = requested === "light" || requested === "dark"
|
|
6
|
+
? requested
|
|
7
|
+
: stored === "light" || stored === "dark" ? stored : "dark";
|
|
8
|
+
})();
|
|
9
|
+
</script><style>
|
|
10
|
+
:root{--void:#0b0c0e;--graphite:#121418;--panel:rgba(255,255,255,.055);--panel-strong:rgba(255,255,255,.085);--line:rgba(255,255,255,.13);--line-strong:rgba(255,255,255,.22);--bone:#efefec;--ash:#b8babd;--slate:#797d82;--ink:#17181a;--white:#f9f9f7;--amber:#b98458;--violet:#716de4;--blue:#557fbd;--command-bg:#17191d;--agent-bg:rgba(255,255,255,.06);--artifact-bg:rgba(8,9,11,.62);--trace-bg:rgba(4,5,6,.52);--dialog-bg:#121418;--dialog-backdrop:rgba(3,4,5,.72);--preview-bg:rgba(5,6,8,.48);--overlay-bg:rgba(10,11,13,.9);--stage-warm:rgba(185,132,88,.12);--stage-cool:rgba(85,127,189,.12);--stage-sheen:rgba(113,109,228,.10);--trust-warm:rgba(185,132,88,.09);--sans:"Avenir Next",Avenir,"Helvetica Neue",Helvetica,sans-serif;--display:"Lyondisplay App","Lyon Display App",Georgia,"Times New Roman",serif;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace;color-scheme:dark}
|
|
11
|
+
:root[data-theme="light"]{--void:#f3f3f0;--graphite:#fafaf8;--panel:rgba(23,24,26,.045);--panel-strong:rgba(23,24,26,.075);--line:rgba(23,24,26,.13);--line-strong:rgba(23,24,26,.23);--bone:#1b1c1e;--ash:#4f5358;--slate:#696e74;--ink:#f8f8f5;--white:#111214;--command-bg:#fdfdfb;--agent-bg:rgba(255,255,255,.72);--artifact-bg:rgba(255,255,255,.88);--trace-bg:rgba(255,255,255,.66);--dialog-bg:#fdfdfb;--dialog-backdrop:rgba(33,34,36,.36);--preview-bg:rgba(255,255,255,.78);--overlay-bg:rgba(249,249,246,.94);--stage-warm:rgba(185,132,88,.10);--stage-cool:rgba(85,127,189,.10);--stage-sheen:rgba(113,109,228,.07);--trust-warm:rgba(185,132,88,.08);color-scheme:light}
|
|
12
|
+
*{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth}body{min-width:320px;min-height:100dvh;margin:0;overflow-x:hidden;color:var(--bone);background:var(--void);font-family:var(--sans);-webkit-font-smoothing:antialiased}button,a{font:inherit}.shell{width:min(1240px,calc(100% - 40px));margin:0 auto}.site-header{display:flex;align-items:center;justify-content:space-between;height:76px;border-bottom:1px solid var(--line)}
|
|
13
|
+
.brand{display:inline-flex;align-items:center;width:max-content;color:var(--bone);font-size:15px;font-weight:600;letter-spacing:-.03em;text-decoration:none}.brand-mark{display:block;width:20px;height:20px;margin-right:9px;color:var(--bone);flex:none}.header-actions{display:flex;align-items:center;gap:0}.header-divider{width:1px;height:16px;margin:0 10px;background:var(--line)}.theme-toggle{display:grid;width:32px;height:32px;padding:0;border:0;color:var(--ash);background:transparent;cursor:pointer;place-items:center}.theme-toggle:hover{color:var(--bone);background:var(--panel)}.theme-symbol{display:block;width:18px;height:18px}.header-action{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:32px;padding:0 3px;border:0;color:var(--ash);background:transparent;cursor:pointer;text-decoration:none;font-size:12px;font-weight:500}.header-action svg{display:block;width:16px;height:16px}.header-action:hover{color:var(--bone);background:var(--panel)}.header-action--primary{min-height:31px;padding:0 12px;border:1px solid var(--white);border-radius:8px;color:var(--ink);background:var(--white);font-size:13px}.header-action--primary:hover{border-color:var(--white);color:var(--ink);background:var(--white);opacity:.88}
|
|
14
|
+
.homepage-main{padding:58px 0 46px}.hero{display:grid;grid-template-columns:minmax(0,.88fr) minmax(520px,1.12fr);gap:52px;align-items:center;min-height:650px}.hero-copy{max-width:540px}.integration-label{display:inline-flex;align-items:center;gap:9px;margin:0 0 24px;color:var(--ash);font:500 11px/1 var(--mono)}.integration-label:before{width:18px;height:1px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue));content:""}.hero h1{margin:0;font-size:clamp(56px,4.8vw,70px);font-weight:500;line-height:.98;letter-spacing:-.055em}.hero-cycle{display:inline-grid;min-width:4.65em;vertical-align:baseline}.hero-cycle-word{grid-area:1/1;color:var(--bone);font-family:var(--display);font-style:italic;font-weight:400;letter-spacing:-.045em;opacity:0;transform:translateY(.28em);filter:blur(5px);animation:hero-word-cycle 9s cubic-bezier(.22,1,.36,1) infinite both;will-change:opacity,transform,filter}.hero-cycle-word:nth-child(1){animation-delay:-.75s}.hero-cycle-word:nth-child(2){animation-delay:2.25s}.hero-cycle-word:nth-child(3){animation-delay:5.25s}@keyframes hero-word-cycle{0%,5%{opacity:0;transform:translateY(.28em);filter:blur(5px)}10%,30%{opacity:1;transform:translateY(0);filter:blur(0)}35%,100%{opacity:0;transform:translateY(-.22em);filter:blur(4px)}}.subhead{max-width:470px;margin:24px 0 0;color:var(--ash);font-size:18px;line-height:1.5;letter-spacing:-.02em}
|
|
15
|
+
.setup{margin-top:34px;padding:15px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.setup-label{display:flex;justify-content:space-between;padding:0 0 13px;color:var(--slate);font-size:11px}.setup-label strong{color:var(--bone);font-weight:500}.command{display:flex;align-items:center;min-height:58px;padding-left:16px;overflow:hidden;border:1px solid var(--line);border-radius:10px;background:var(--command-bg)}.command code{min-width:0;flex:1;overflow:hidden;color:var(--bone);font:500 14px/1.2 var(--mono);letter-spacing:-.035em;text-overflow:ellipsis;white-space:nowrap}.copy-button{align-self:stretch;min-width:92px;border:0;border-left:1px solid var(--line);color:var(--ash);background:transparent;cursor:pointer;font-size:12px;font-weight:500}.copy-button:hover{color:var(--white);background:var(--panel-strong)}.copy-button:active{transform:translateY(1px) scale(.98)}.copy-button:focus-visible,a:focus-visible,button:focus-visible{outline:2px solid var(--white);outline-offset:3px}.setup-steps{display:flex;gap:12px;margin:13px 0 0;color:var(--slate);font-size:11px}.setup-steps span{flex:1}.setup-steps b{color:var(--ash);font-weight:500}.setup-scope{margin:11px 0 0;color:var(--slate);font-size:10px;line-height:1.45}.try-card{display:grid;grid-template-areas:"title action" "formats action";grid-template-columns:minmax(0,1fr) auto;gap:5px 16px;width:100%;margin-top:16px;padding:15px 16px;border:1px dashed var(--line-strong);border-radius:12px;color:var(--ash);background:transparent;cursor:pointer;text-align:left;transition:border-color .18s ease,background .18s ease}.try-card:hover{border-color:var(--ash);background:linear-gradient(100deg,var(--stage-warm),transparent 48%,var(--stage-cool))}.try-card strong{grid-area:title;color:var(--bone);font-size:13px;font-weight:500}.try-card-formats{grid-area:formats;color:var(--slate);font:400 10px/1.4 var(--mono)}.try-card-action{grid-area:action;display:grid;width:34px;height:34px;align-self:center;border:1px solid transparent;border-radius:10px;color:var(--bone);background:linear-gradient(var(--void),var(--void)) padding-box,linear-gradient(135deg,var(--amber),var(--violet),var(--blue)) border-box;place-items:center}.try-card-action svg{display:block;width:16px;height:16px}
|
|
16
|
+
.handoff-stage{position:relative;min-height:560px;overflow:hidden;border:1px solid var(--line);border-radius:34px;background:linear-gradient(145deg,var(--stage-warm),transparent 34%),linear-gradient(325deg,var(--stage-cool),transparent 38%),var(--graphite);isolation:isolate}.handoff-stage:before{position:absolute;inset:0;background:linear-gradient(115deg,transparent 34%,var(--stage-sheen) 50%,transparent 66%);pointer-events:none;content:""}.stage-header{position:relative;display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid var(--line);color:var(--slate);font:400 10px/1 var(--mono)}.stage-header strong{color:var(--ash);font-weight:500}.flow{position:relative;display:grid;grid-template-columns:1fr 76px 1fr;gap:14px;align-items:center;padding:50px 34px 28px}.agent-panel{min-width:0;padding:20px;border:1px solid var(--line);border-radius:26px;background:var(--agent-bg);backdrop-filter:blur(12px)}.agent-meta{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;color:var(--slate);font-size:11px}.agent-meta strong{color:var(--bone);font-size:13px;font-weight:500}.artifact-file{padding:15px;border:1px solid var(--line);border-radius:12px;background:var(--artifact-bg)}.file-name{display:block;overflow:hidden;margin-bottom:10px;color:var(--bone);font:500 12px/1 var(--mono);text-overflow:ellipsis;white-space:nowrap}.file-copy{margin:0;color:var(--slate);font:400 10px/1.55 var(--mono)}.file-copy b{color:var(--ash);font-weight:500}.relay{color:var(--slate);font:400 9px/1.4 var(--mono);text-align:center}.relay-line{position:relative;height:1px;margin-bottom:12px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue))}.relay-line:after{position:absolute;top:-3px;right:-1px;width:7px;height:7px;border-top:1px solid var(--blue);border-right:1px solid var(--blue);transform:rotate(45deg);content:""}.tool-trace{position:relative;margin:8px 34px 34px;padding:18px 20px;border:1px solid var(--line);border-radius:18px;background:var(--trace-bg)}.trace-line{display:grid;grid-template-columns:72px 1fr auto;gap:12px;color:var(--slate);font:400 10px/1.7 var(--mono)}.trace-line+.trace-line{margin-top:4px}.trace-line strong{color:var(--ash);font-weight:500}.trace-line code{color:var(--bone);font:inherit}.trace-line span:last-child{color:var(--ash)}
|
|
17
|
+
.trust{display:grid;grid-template-columns:1.35fr .65fr;margin-top:20px;overflow:hidden;border:1px solid var(--line);border-radius:20px}.cloudflare{padding:24px;border-right:1px solid var(--line);background:linear-gradient(130deg,var(--trust-warm),transparent 55%)}.trust-label{display:block;margin-bottom:12px;color:var(--slate);font:400 10px/1 var(--mono)}.cloudflare strong{display:block;max-width:640px;color:var(--bone);font-size:18px;font-weight:500;line-height:1.35;letter-spacing:-.025em}.cloudflare p{max-width:620px;margin:10px 0 0;color:var(--slate);font-size:12px;line-height:1.55}.trust-links{display:grid;grid-template-rows:1fr 1fr}.trust-item{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 20px;color:var(--slate);font-size:11px;text-decoration:none}.trust-item+.trust-item{border-top:1px solid var(--line)}.trust-item strong{display:block;margin-bottom:4px;color:var(--bone);font-size:12px;font-weight:500}.trust-item b{color:var(--ash);font:400 14px/1 var(--mono)}
|
|
18
|
+
.how-section{scroll-margin-top:28px;margin-top:62px;padding:72px 0 20px;border-top:1px solid var(--line)}.how-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,.72fr);gap:64px;align-items:end;margin-bottom:38px}.how-eyebrow{display:flex;align-items:center;gap:9px;color:var(--slate);font:500 10px/1 var(--mono)}.how-eyebrow:before{width:18px;height:1px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue));content:""}.how-section h2{max-width:680px;margin:18px 0 0;font-size:clamp(40px,4.7vw,64px);font-weight:500;line-height:1;letter-spacing:-.055em}.how-copy{max-width:500px;margin:0;color:var(--ash);font-size:17px;line-height:1.55}.explain-grid{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border:1px solid var(--line-strong);border-radius:22px;background:var(--graphite)}.explain-block{padding:30px 34px}.explain-block+.explain-block{border-left:1px solid var(--line)}.explain-label{display:block;margin-bottom:20px;color:var(--slate);font:400 10px/1 var(--mono)}.explain-block h3{margin:0 0 17px;color:var(--bone);font-size:21px;font-weight:500;letter-spacing:-.025em}.plain-list{margin:0;padding:0;list-style:none}.plain-list li{position:relative;padding:14px 0 14px 22px;border-top:1px solid var(--line);color:var(--ash);font-size:13px;line-height:1.5}.plain-list li:before{position:absolute;top:20px;left:1px;width:7px;height:7px;border:1px solid var(--line-strong);border-radius:50%;content:""}.plain-list strong{color:var(--bone);font-weight:600}.plain-answer{display:flex;justify-content:space-between;gap:24px;margin-top:14px;padding:18px 21px;border:1px solid var(--line);border-radius:13px;color:var(--slate);font-size:12px}.plain-answer strong{color:var(--bone);font-weight:600}.plain-answer span:last-child{font:400 10px/1.5 var(--mono)}
|
|
19
|
+
.page-footer{display:flex;justify-content:space-between;gap:20px;padding:26px 0 34px;border-top:1px solid var(--line);color:var(--slate);font-size:11px}.footer-links{display:flex;gap:16px}.footer-links a{color:inherit}.document{padding:clamp(54px,9vw,94px) 0}.document .eyebrow{margin:0 0 18px;color:var(--slate);font:500 11px/1 var(--mono)}.document h1{margin:0;font-size:clamp(54px,5vw,64px);font-weight:500;letter-spacing:-.055em}.document .updated{margin:18px 0 28px;color:var(--slate);font-size:12px}.environment-notice{display:grid;max-width:720px;margin:0 0 38px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--panel);gap:4px}.environment-notice strong{color:var(--bone);font-size:12px;font-weight:500}.environment-notice span{color:var(--slate);font-size:11px;line-height:1.5}.prose{max-width:720px;color:var(--ash);font-size:16px;line-height:1.75}.prose h2{margin:38px 0 8px;color:var(--bone);font-size:20px;font-weight:500}.prose p,.prose ul{margin:0 0 18px}.prose li+li{margin-top:8px}.prose a{color:var(--bone);text-underline-offset:3px}.prose code{color:var(--bone);font:400 .9em/1.5 var(--mono)}.prose strong{color:var(--bone);font-weight:500}
|
|
20
|
+
dialog{width:min(580px,calc(100% - 28px));max-height:calc(100dvh - 28px);padding:0;overflow:auto;border:1px solid var(--line-strong);border-radius:24px;color:var(--bone);background:var(--dialog-bg);box-shadow:0 28px 90px rgba(0,0,0,.55)}dialog::backdrop{background:var(--dialog-backdrop);backdrop-filter:blur(8px)}.dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:22px;border-bottom:1px solid var(--line)}.dialog-header h2{margin:0 0 5px;font-size:20px;font-weight:500}.dialog-header p{margin:0;color:var(--slate);font-size:12px}.close-dialog{width:32px;height:32px;border:1px solid var(--line);border-radius:9px;color:var(--ash);background:transparent;cursor:pointer}.close-dialog:disabled{cursor:default;opacity:.4}.dialog-body{padding:22px}.drop-zone{display:grid;min-height:150px;padding:24px;border:1px dashed var(--line-strong);border-radius:16px;color:var(--slate);cursor:pointer;text-align:center;place-items:center}.drop-zone:hover,.drop-zone.is-over{border-color:var(--bone);background:var(--panel)}.drop-zone strong{display:block;margin-bottom:7px;color:var(--bone);font-size:14px;font-weight:500}.drop-zone span{font-size:11px}.file-preview{display:grid;grid-template-columns:40px minmax(0,1fr) auto;gap:2px 14px;align-items:center;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--preview-bg)}.file-preview .file-kind{grid-row:1/span 2;display:grid;width:40px;height:40px;border:1px solid var(--line);border-radius:9px;color:var(--ash);font:500 9px/1 var(--mono);place-items:center}.file-preview strong{overflow:hidden;color:var(--bone);font:500 12px/1.4 var(--mono);text-overflow:ellipsis;white-space:nowrap}.file-preview span{color:var(--slate);font:400 10px/1.4 var(--mono)}.file-preview button{grid-row:1/span 2;grid-column:3;padding:5px 0;border:0;border-bottom:1px solid var(--line-strong);color:var(--ash);background:transparent;cursor:pointer;font-size:11px}.file-preview button:disabled{cursor:default;opacity:.45}.local-note{margin:12px 0 0;color:var(--ash);font-size:11px;line-height:1.5}.modal-status{margin:12px 0 0;padding:10px 12px;border:1px solid var(--line);border-radius:10px;color:var(--ash);font-size:11px;line-height:1.45}.modal-status[data-tone="error"]{border-color:rgba(185,88,88,.42);color:#c98989;background:rgba(185,88,88,.08)}.upload-config{margin-top:20px}.upload-config fieldset{margin:0;padding:0;border:0}.upload-config legend{margin-bottom:10px;color:var(--ash);font-size:12px}.expiry-options{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.expiry-options label{position:relative}.expiry-options input{position:absolute;opacity:0;pointer-events:none}.expiry-options span{display:block;padding:12px;border:1px solid var(--line);border-radius:10px;color:var(--slate);cursor:pointer;font:500 12px/1 var(--mono);text-align:center}.expiry-options input:checked+span{border-color:var(--bone);color:var(--bone);background:var(--panel-strong)}.expiry-options input:disabled+span{cursor:default;opacity:.45}.auth-gate{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.auth-gate p{margin:0;color:var(--slate);font-size:11px;line-height:1.45}.continue-button{flex:0 0 auto;min-height:44px;padding:0 17px;border:0;border-radius:11px;color:var(--ink);background:var(--white);cursor:pointer;font-size:12px;font-weight:500}.continue-button:disabled{cursor:default;opacity:.62}.drop-overlay{position:fixed;inset:14px;display:none;border:1px dashed var(--bone);border-radius:24px;color:var(--bone);background:var(--overlay-bg);backdrop-filter:blur(10px);pointer-events:none;text-align:center;place-items:center;z-index:2}.drop-overlay.is-visible{display:grid}.drop-overlay strong{display:block;margin-bottom:8px;font-size:22px;font-weight:500}.drop-overlay span{color:var(--ash);font-size:12px}
|
|
21
|
+
@media(max-width:980px){.hero{grid-template-columns:minmax(0,1fr);min-height:0}.hero-copy{min-width:0;width:100%;max-width:720px;margin-inline:auto}.handoff-stage{min-width:0;min-height:0}}
|
|
22
|
+
@media(max-width:680px){.shell{width:calc(100% - 28px)}.site-header{height:68px}.header-action--how,.header-divider--how{display:none}.header-divider{height:16px;margin:0 7px}.header-action{width:32px;padding:0}.header-action--primary{width:32px;min-height:31px;border-radius:8px}.header-action-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.theme-toggle{width:32px;height:32px}.theme-symbol{width:18px;height:18px}.homepage-main{padding-top:42px}.hero{gap:38px}.hero h1{font-size:clamp(52px,15vw,68px)}.subhead{font-size:16px}.setup-label{align-items:flex-start;gap:10px}.setup-steps{display:grid;grid-template-columns:1fr;gap:9px;padding:2px 8px 6px}.handoff-stage{border-radius:24px}.stage-header{padding:15px 16px}.flow{grid-template-columns:minmax(0,1fr);gap:10px;padding:16px}.agent-panel{padding:16px;border-radius:18px}.agent-meta{margin-bottom:14px}.artifact-file{padding:14px}.relay{display:flex;align-items:center;flex-direction:column;gap:7px;padding:2px 0 0}.relay-line{width:1px;height:28px;margin:0;background:linear-gradient(180deg,var(--amber),var(--violet),var(--blue))}.relay-line:after{top:auto;right:-3px;bottom:0;border-top:0;border-right:1px solid var(--blue);border-bottom:1px solid var(--blue);transform:rotate(45deg)}.tool-trace{margin:2px 16px 16px;padding:8px 14px;border-radius:14px}.trace-line{grid-template-columns:58px minmax(0,1fr) auto;gap:8px;font-size:9px;align-items:center}.trace-line+.trace-line{margin-top:0;padding-top:7px}.trace-line:not(:last-child){padding-bottom:7px;border-bottom:1px solid var(--line)}.how-section{margin-top:48px;padding-top:54px}.how-intro{grid-template-columns:1fr;gap:22px;margin-bottom:28px}.how-copy{font-size:15px}.explain-grid{grid-template-columns:1fr;border-radius:18px}.explain-block{padding:24px 20px}.explain-block+.explain-block{border-top:1px solid var(--line);border-left:0}.plain-list li{padding-left:0}.plain-list li:before{display:none}.plain-answer{align-items:flex-start;flex-direction:column;gap:8px}.trust{grid-template-columns:1fr}.cloudflare{border-right:0;border-bottom:1px solid var(--line)}.auth-gate{align-items:flex-start;flex-direction:column}.continue-button{width:100%}.page-footer{align-items:flex-start;flex-direction:column}}
|
|
23
|
+
@media(max-width:360px){.shell{width:calc(100% - 20px)}.stage-header{padding:13px 12px}.flow{gap:8px;padding:12px}.agent-panel{padding:12px;border-radius:16px}.agent-meta{margin-bottom:11px}.artifact-file{padding:12px}.tool-trace{margin:2px 12px 12px;padding:8px 10px}.trace-line{grid-template-columns:52px minmax(0,1fr) auto;gap:6px;font-size:8.5px}}
|
|
24
|
+
@media(prefers-reduced-transparency:reduce){.agent-panel,dialog,.drop-overlay{backdrop-filter:none}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition-duration:0s!important}.hero-cycle-word{animation:none;opacity:1;transform:none;filter:none}.hero-cycle-word:not(:first-child){display:none}}
|
|
25
|
+
</style></head><body><div class="shell"><header class="site-header"><a class="brand" href="/"><svg data-artifactpass-mark="capability-corridor" viewBox="0 0 64 64" class="brand-mark" aria-hidden="true" focusable="false"><path fill="currentColor" d="M14 5h36l9 9v19h-8.7l-8-6.5H23.4L15 20H5v-6z"></path><path fill="currentColor" d="M5 27h8.7l8 6.5h19L49 40h10v10l-9 9H14l-9-9z"></path></svg>ArtifactPass</a><div class="header-actions"><a class="header-action header-action--how" href="/#how" aria-label="How ArtifactPass works"><span class="header-action-label">How it works</span></a><span class="header-divider header-divider--how" aria-hidden="true"></span><a class="header-action header-action--github" href="https://github.com/lordelogos/lordebuilds.artifact.pass" aria-label="View ArtifactPass on GitHub" title="GitHub"><svg viewBox="0 0 438.549 438.549" aria-hidden="true" focusable="false"><path fill="currentColor" d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 0 1-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z"></path></svg><span class="header-action-label">GitHub</span></a><span class="header-divider" aria-hidden="true"></span><button class="theme-toggle" id="theme-toggle" type="button" aria-label="Switch to light mode" aria-pressed="true" title="Switch to light mode"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="theme-symbol" aria-hidden="true" focusable="false"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0-18 0"></path><path d="M12 3v18"></path><path d="m12 9 4.65-4.65"></path><path d="m12 14.3 7.37-7.37"></path><path d="m12 19.6 8.85-8.85"></path></svg></button><span class="header-divider" aria-hidden="true"></span><a class="header-action header-action--primary" href="/#install" aria-label="Set up ArtifactPass" title="Set up"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" color="currentColor" class="" aria-hidden="true"><path d="M12 4V20M20 12H4" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg><span class="header-action-label">Set up</span></a></div></header><section class="document"><p class="eyebrow">Public service policy</p><h1>Privacy</h1><p class="updated">Effective 11 September 2026</p><div class="prose"><p>This policy explains how the hosted ArtifactPass service processes information when you sign in, connect an agent workspace, upload a document, or open a temporary artifact link. It does not govern private deployments operated by another organization.</p><h2>Information ArtifactPass processes</h2><ul><li><strong>Identity:</strong> your Google or GitHub account identifier and verified email address.</li><li><strong>Artifacts:</strong> the exact file you submit, its filename, media type, size, integrity metadata, and selected expiry.</li><li><strong>Authorization:</strong> one-way hashes of browser sessions, device approvals, agent tokens, and temporary share capabilities.</li><li><strong>Operations:</strong> rate-limit records and request information needed to deliver, secure, and diagnose the service. Cloudflare may process IP addresses, TLS, browser, and request metadata as part of its infrastructure and security services.</li></ul><h2>Google and GitHub sign-in</h2><p>Google scopes are limited to <code>openid</code> and <code>email</code>. GitHub scopes are limited to <code>read:user</code> and <code>user:email</code>. ArtifactPass uses the provider access token only during the sign-in callback to retrieve your account identifier and verified email address. It does not retain the provider access token and never receives your provider password.</p><h2>How information is used</h2><p>ArtifactPass uses this information only to authenticate you, approve a scoped workspace connection, publish the file you selected, deliver its temporary link, enforce expiry, prevent abuse, and operate the service. We do not sell your personal information, run advertising profiles, or use artifact contents to train machine-learning models.</p><h2>Temporary sharing</h2><p>A share URL is a bearer capability. Anyone who receives it can view and download the artifact until its stated expiry. Recipients may keep copies they download, so expiry cannot recall a file after it has left ArtifactPass.</p><h2>Retention</h2><ul><li>Artifact files and their metadata are scheduled for deletion when their selected lifetime ends. Public links can last 1 hour, 1 day, or 7 days. Failed cleanup is retried.</li><li>Browser sessions expire after seven days.</li><li>Agent publishing connections expire after 30 days unless revoked earlier.</li><li>OAuth transactions, device codes, and most rate-limit records expire after approximately ten minutes.</li></ul><h2>Service providers and disclosure</h2><p>ArtifactPass runs on Cloudflare Workers, D1, and R2. Google and GitHub provide optional sign-in. Information may also be disclosed when required by law, to protect the service or its users, or during a legitimate transfer of the service with equivalent privacy obligations.</p><h2>Security</h2><p>ArtifactPass uses short-lived links, scoped agent credentials, hashed bearer tokens, private object storage, strict browser isolation, and automated expiry. No internet service can guarantee absolute security. Report suspected vulnerabilities through the repository’s private vulnerability reporting channel and never include a live share link or credential.</p><h2>Questions and changes</h2><p>Privacy questions can be raised through the <a href="https://github.com/lordelogos/lordebuilds.artifact.pass">ArtifactPass GitHub repository</a>. Material policy changes will be reflected by updating the effective date on this page.</p></div></section><footer class="page-footer"><span>ArtifactPass</span><span class="footer-links"><a href="/privacy">Privacy</a><a href="/terms">Terms</a><span>Built for agentic handoffs.</span></span></footer></div><script>
|
|
26
|
+
const themeToggle=document.querySelector("#theme-toggle");
|
|
27
|
+
const themeColor=document.querySelector('meta[name="theme-color"]');
|
|
28
|
+
const syncTheme=()=>{const light=document.documentElement.dataset.theme==="light";themeToggle.setAttribute("aria-label","Switch to "+(light?"dark":"light")+" mode");themeToggle.setAttribute("aria-pressed",String(!light));themeToggle.title="Switch to "+(light?"dark":"light")+" mode";themeColor.content=light?"#f3f3f0":"#0b0c0e";};
|
|
29
|
+
syncTheme();themeToggle.addEventListener("click",()=>{const next=document.documentElement.dataset.theme==="light"?"dark":"light";document.documentElement.dataset.theme=next;localStorage.setItem("artifactpass-theme",next);syncTheme();});
|
|
30
|
+
</script></body></html>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url><loc>https://artifactpass.com/</loc></url>
|
|
4
|
+
<url><loc>https://artifactpass.com/privacy</loc></url>
|
|
5
|
+
<url><loc>https://artifactpass.com/terms</loc></url>
|
|
6
|
+
</urlset>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="referrer" content="no-referrer"/><meta name="theme-color" content="#0b0c0e"/><meta name="description" content="Read the terms for using ArtifactPass to create and open temporary artifact links."/><meta name="robots" content="index, follow, max-image-preview:large"/><meta property="og:type" content="website"/><meta property="og:site_name" content="ArtifactPass"/><meta property="og:title" content="Terms · ArtifactPass"/><meta property="og:description" content="Read the terms for using ArtifactPass to create and open temporary artifact links."/><meta property="og:url" content="https://artifactpass.com/terms"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="Terms · ArtifactPass"/><meta name="twitter:description" content="Read the terms for using ArtifactPass to create and open temporary artifact links."/><link rel="canonical" href="https://artifactpass.com/terms"/><link rel="icon" href="/artifactpass-logo.svg" type="image/svg+xml"/><title>Terms · ArtifactPass</title><script>
|
|
2
|
+
(() => {
|
|
3
|
+
const requested = new URLSearchParams(window.location.search).get("theme");
|
|
4
|
+
const stored = localStorage.getItem("artifactpass-theme");
|
|
5
|
+
document.documentElement.dataset.theme = requested === "light" || requested === "dark"
|
|
6
|
+
? requested
|
|
7
|
+
: stored === "light" || stored === "dark" ? stored : "dark";
|
|
8
|
+
})();
|
|
9
|
+
</script><style>
|
|
10
|
+
:root{--void:#0b0c0e;--graphite:#121418;--panel:rgba(255,255,255,.055);--panel-strong:rgba(255,255,255,.085);--line:rgba(255,255,255,.13);--line-strong:rgba(255,255,255,.22);--bone:#efefec;--ash:#b8babd;--slate:#797d82;--ink:#17181a;--white:#f9f9f7;--amber:#b98458;--violet:#716de4;--blue:#557fbd;--command-bg:#17191d;--agent-bg:rgba(255,255,255,.06);--artifact-bg:rgba(8,9,11,.62);--trace-bg:rgba(4,5,6,.52);--dialog-bg:#121418;--dialog-backdrop:rgba(3,4,5,.72);--preview-bg:rgba(5,6,8,.48);--overlay-bg:rgba(10,11,13,.9);--stage-warm:rgba(185,132,88,.12);--stage-cool:rgba(85,127,189,.12);--stage-sheen:rgba(113,109,228,.10);--trust-warm:rgba(185,132,88,.09);--sans:"Avenir Next",Avenir,"Helvetica Neue",Helvetica,sans-serif;--display:"Lyondisplay App","Lyon Display App",Georgia,"Times New Roman",serif;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace;color-scheme:dark}
|
|
11
|
+
:root[data-theme="light"]{--void:#f3f3f0;--graphite:#fafaf8;--panel:rgba(23,24,26,.045);--panel-strong:rgba(23,24,26,.075);--line:rgba(23,24,26,.13);--line-strong:rgba(23,24,26,.23);--bone:#1b1c1e;--ash:#4f5358;--slate:#696e74;--ink:#f8f8f5;--white:#111214;--command-bg:#fdfdfb;--agent-bg:rgba(255,255,255,.72);--artifact-bg:rgba(255,255,255,.88);--trace-bg:rgba(255,255,255,.66);--dialog-bg:#fdfdfb;--dialog-backdrop:rgba(33,34,36,.36);--preview-bg:rgba(255,255,255,.78);--overlay-bg:rgba(249,249,246,.94);--stage-warm:rgba(185,132,88,.10);--stage-cool:rgba(85,127,189,.10);--stage-sheen:rgba(113,109,228,.07);--trust-warm:rgba(185,132,88,.08);color-scheme:light}
|
|
12
|
+
*{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth}body{min-width:320px;min-height:100dvh;margin:0;overflow-x:hidden;color:var(--bone);background:var(--void);font-family:var(--sans);-webkit-font-smoothing:antialiased}button,a{font:inherit}.shell{width:min(1240px,calc(100% - 40px));margin:0 auto}.site-header{display:flex;align-items:center;justify-content:space-between;height:76px;border-bottom:1px solid var(--line)}
|
|
13
|
+
.brand{display:inline-flex;align-items:center;width:max-content;color:var(--bone);font-size:15px;font-weight:600;letter-spacing:-.03em;text-decoration:none}.brand-mark{display:block;width:20px;height:20px;margin-right:9px;color:var(--bone);flex:none}.header-actions{display:flex;align-items:center;gap:0}.header-divider{width:1px;height:16px;margin:0 10px;background:var(--line)}.theme-toggle{display:grid;width:32px;height:32px;padding:0;border:0;color:var(--ash);background:transparent;cursor:pointer;place-items:center}.theme-toggle:hover{color:var(--bone);background:var(--panel)}.theme-symbol{display:block;width:18px;height:18px}.header-action{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:32px;padding:0 3px;border:0;color:var(--ash);background:transparent;cursor:pointer;text-decoration:none;font-size:12px;font-weight:500}.header-action svg{display:block;width:16px;height:16px}.header-action:hover{color:var(--bone);background:var(--panel)}.header-action--primary{min-height:31px;padding:0 12px;border:1px solid var(--white);border-radius:8px;color:var(--ink);background:var(--white);font-size:13px}.header-action--primary:hover{border-color:var(--white);color:var(--ink);background:var(--white);opacity:.88}
|
|
14
|
+
.homepage-main{padding:58px 0 46px}.hero{display:grid;grid-template-columns:minmax(0,.88fr) minmax(520px,1.12fr);gap:52px;align-items:center;min-height:650px}.hero-copy{max-width:540px}.integration-label{display:inline-flex;align-items:center;gap:9px;margin:0 0 24px;color:var(--ash);font:500 11px/1 var(--mono)}.integration-label:before{width:18px;height:1px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue));content:""}.hero h1{margin:0;font-size:clamp(56px,4.8vw,70px);font-weight:500;line-height:.98;letter-spacing:-.055em}.hero-cycle{display:inline-grid;min-width:4.65em;vertical-align:baseline}.hero-cycle-word{grid-area:1/1;color:var(--bone);font-family:var(--display);font-style:italic;font-weight:400;letter-spacing:-.045em;opacity:0;transform:translateY(.28em);filter:blur(5px);animation:hero-word-cycle 9s cubic-bezier(.22,1,.36,1) infinite both;will-change:opacity,transform,filter}.hero-cycle-word:nth-child(1){animation-delay:-.75s}.hero-cycle-word:nth-child(2){animation-delay:2.25s}.hero-cycle-word:nth-child(3){animation-delay:5.25s}@keyframes hero-word-cycle{0%,5%{opacity:0;transform:translateY(.28em);filter:blur(5px)}10%,30%{opacity:1;transform:translateY(0);filter:blur(0)}35%,100%{opacity:0;transform:translateY(-.22em);filter:blur(4px)}}.subhead{max-width:470px;margin:24px 0 0;color:var(--ash);font-size:18px;line-height:1.5;letter-spacing:-.02em}
|
|
15
|
+
.setup{margin-top:34px;padding:15px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.setup-label{display:flex;justify-content:space-between;padding:0 0 13px;color:var(--slate);font-size:11px}.setup-label strong{color:var(--bone);font-weight:500}.command{display:flex;align-items:center;min-height:58px;padding-left:16px;overflow:hidden;border:1px solid var(--line);border-radius:10px;background:var(--command-bg)}.command code{min-width:0;flex:1;overflow:hidden;color:var(--bone);font:500 14px/1.2 var(--mono);letter-spacing:-.035em;text-overflow:ellipsis;white-space:nowrap}.copy-button{align-self:stretch;min-width:92px;border:0;border-left:1px solid var(--line);color:var(--ash);background:transparent;cursor:pointer;font-size:12px;font-weight:500}.copy-button:hover{color:var(--white);background:var(--panel-strong)}.copy-button:active{transform:translateY(1px) scale(.98)}.copy-button:focus-visible,a:focus-visible,button:focus-visible{outline:2px solid var(--white);outline-offset:3px}.setup-steps{display:flex;gap:12px;margin:13px 0 0;color:var(--slate);font-size:11px}.setup-steps span{flex:1}.setup-steps b{color:var(--ash);font-weight:500}.setup-scope{margin:11px 0 0;color:var(--slate);font-size:10px;line-height:1.45}.try-card{display:grid;grid-template-areas:"title action" "formats action";grid-template-columns:minmax(0,1fr) auto;gap:5px 16px;width:100%;margin-top:16px;padding:15px 16px;border:1px dashed var(--line-strong);border-radius:12px;color:var(--ash);background:transparent;cursor:pointer;text-align:left;transition:border-color .18s ease,background .18s ease}.try-card:hover{border-color:var(--ash);background:linear-gradient(100deg,var(--stage-warm),transparent 48%,var(--stage-cool))}.try-card strong{grid-area:title;color:var(--bone);font-size:13px;font-weight:500}.try-card-formats{grid-area:formats;color:var(--slate);font:400 10px/1.4 var(--mono)}.try-card-action{grid-area:action;display:grid;width:34px;height:34px;align-self:center;border:1px solid transparent;border-radius:10px;color:var(--bone);background:linear-gradient(var(--void),var(--void)) padding-box,linear-gradient(135deg,var(--amber),var(--violet),var(--blue)) border-box;place-items:center}.try-card-action svg{display:block;width:16px;height:16px}
|
|
16
|
+
.handoff-stage{position:relative;min-height:560px;overflow:hidden;border:1px solid var(--line);border-radius:34px;background:linear-gradient(145deg,var(--stage-warm),transparent 34%),linear-gradient(325deg,var(--stage-cool),transparent 38%),var(--graphite);isolation:isolate}.handoff-stage:before{position:absolute;inset:0;background:linear-gradient(115deg,transparent 34%,var(--stage-sheen) 50%,transparent 66%);pointer-events:none;content:""}.stage-header{position:relative;display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid var(--line);color:var(--slate);font:400 10px/1 var(--mono)}.stage-header strong{color:var(--ash);font-weight:500}.flow{position:relative;display:grid;grid-template-columns:1fr 76px 1fr;gap:14px;align-items:center;padding:50px 34px 28px}.agent-panel{min-width:0;padding:20px;border:1px solid var(--line);border-radius:26px;background:var(--agent-bg);backdrop-filter:blur(12px)}.agent-meta{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;color:var(--slate);font-size:11px}.agent-meta strong{color:var(--bone);font-size:13px;font-weight:500}.artifact-file{padding:15px;border:1px solid var(--line);border-radius:12px;background:var(--artifact-bg)}.file-name{display:block;overflow:hidden;margin-bottom:10px;color:var(--bone);font:500 12px/1 var(--mono);text-overflow:ellipsis;white-space:nowrap}.file-copy{margin:0;color:var(--slate);font:400 10px/1.55 var(--mono)}.file-copy b{color:var(--ash);font-weight:500}.relay{color:var(--slate);font:400 9px/1.4 var(--mono);text-align:center}.relay-line{position:relative;height:1px;margin-bottom:12px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue))}.relay-line:after{position:absolute;top:-3px;right:-1px;width:7px;height:7px;border-top:1px solid var(--blue);border-right:1px solid var(--blue);transform:rotate(45deg);content:""}.tool-trace{position:relative;margin:8px 34px 34px;padding:18px 20px;border:1px solid var(--line);border-radius:18px;background:var(--trace-bg)}.trace-line{display:grid;grid-template-columns:72px 1fr auto;gap:12px;color:var(--slate);font:400 10px/1.7 var(--mono)}.trace-line+.trace-line{margin-top:4px}.trace-line strong{color:var(--ash);font-weight:500}.trace-line code{color:var(--bone);font:inherit}.trace-line span:last-child{color:var(--ash)}
|
|
17
|
+
.trust{display:grid;grid-template-columns:1.35fr .65fr;margin-top:20px;overflow:hidden;border:1px solid var(--line);border-radius:20px}.cloudflare{padding:24px;border-right:1px solid var(--line);background:linear-gradient(130deg,var(--trust-warm),transparent 55%)}.trust-label{display:block;margin-bottom:12px;color:var(--slate);font:400 10px/1 var(--mono)}.cloudflare strong{display:block;max-width:640px;color:var(--bone);font-size:18px;font-weight:500;line-height:1.35;letter-spacing:-.025em}.cloudflare p{max-width:620px;margin:10px 0 0;color:var(--slate);font-size:12px;line-height:1.55}.trust-links{display:grid;grid-template-rows:1fr 1fr}.trust-item{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 20px;color:var(--slate);font-size:11px;text-decoration:none}.trust-item+.trust-item{border-top:1px solid var(--line)}.trust-item strong{display:block;margin-bottom:4px;color:var(--bone);font-size:12px;font-weight:500}.trust-item b{color:var(--ash);font:400 14px/1 var(--mono)}
|
|
18
|
+
.how-section{scroll-margin-top:28px;margin-top:62px;padding:72px 0 20px;border-top:1px solid var(--line)}.how-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,.72fr);gap:64px;align-items:end;margin-bottom:38px}.how-eyebrow{display:flex;align-items:center;gap:9px;color:var(--slate);font:500 10px/1 var(--mono)}.how-eyebrow:before{width:18px;height:1px;background:linear-gradient(90deg,var(--amber),var(--violet),var(--blue));content:""}.how-section h2{max-width:680px;margin:18px 0 0;font-size:clamp(40px,4.7vw,64px);font-weight:500;line-height:1;letter-spacing:-.055em}.how-copy{max-width:500px;margin:0;color:var(--ash);font-size:17px;line-height:1.55}.explain-grid{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border:1px solid var(--line-strong);border-radius:22px;background:var(--graphite)}.explain-block{padding:30px 34px}.explain-block+.explain-block{border-left:1px solid var(--line)}.explain-label{display:block;margin-bottom:20px;color:var(--slate);font:400 10px/1 var(--mono)}.explain-block h3{margin:0 0 17px;color:var(--bone);font-size:21px;font-weight:500;letter-spacing:-.025em}.plain-list{margin:0;padding:0;list-style:none}.plain-list li{position:relative;padding:14px 0 14px 22px;border-top:1px solid var(--line);color:var(--ash);font-size:13px;line-height:1.5}.plain-list li:before{position:absolute;top:20px;left:1px;width:7px;height:7px;border:1px solid var(--line-strong);border-radius:50%;content:""}.plain-list strong{color:var(--bone);font-weight:600}.plain-answer{display:flex;justify-content:space-between;gap:24px;margin-top:14px;padding:18px 21px;border:1px solid var(--line);border-radius:13px;color:var(--slate);font-size:12px}.plain-answer strong{color:var(--bone);font-weight:600}.plain-answer span:last-child{font:400 10px/1.5 var(--mono)}
|
|
19
|
+
.page-footer{display:flex;justify-content:space-between;gap:20px;padding:26px 0 34px;border-top:1px solid var(--line);color:var(--slate);font-size:11px}.footer-links{display:flex;gap:16px}.footer-links a{color:inherit}.document{padding:clamp(54px,9vw,94px) 0}.document .eyebrow{margin:0 0 18px;color:var(--slate);font:500 11px/1 var(--mono)}.document h1{margin:0;font-size:clamp(54px,5vw,64px);font-weight:500;letter-spacing:-.055em}.document .updated{margin:18px 0 28px;color:var(--slate);font-size:12px}.environment-notice{display:grid;max-width:720px;margin:0 0 38px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--panel);gap:4px}.environment-notice strong{color:var(--bone);font-size:12px;font-weight:500}.environment-notice span{color:var(--slate);font-size:11px;line-height:1.5}.prose{max-width:720px;color:var(--ash);font-size:16px;line-height:1.75}.prose h2{margin:38px 0 8px;color:var(--bone);font-size:20px;font-weight:500}.prose p,.prose ul{margin:0 0 18px}.prose li+li{margin-top:8px}.prose a{color:var(--bone);text-underline-offset:3px}.prose code{color:var(--bone);font:400 .9em/1.5 var(--mono)}.prose strong{color:var(--bone);font-weight:500}
|
|
20
|
+
dialog{width:min(580px,calc(100% - 28px));max-height:calc(100dvh - 28px);padding:0;overflow:auto;border:1px solid var(--line-strong);border-radius:24px;color:var(--bone);background:var(--dialog-bg);box-shadow:0 28px 90px rgba(0,0,0,.55)}dialog::backdrop{background:var(--dialog-backdrop);backdrop-filter:blur(8px)}.dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:22px;border-bottom:1px solid var(--line)}.dialog-header h2{margin:0 0 5px;font-size:20px;font-weight:500}.dialog-header p{margin:0;color:var(--slate);font-size:12px}.close-dialog{width:32px;height:32px;border:1px solid var(--line);border-radius:9px;color:var(--ash);background:transparent;cursor:pointer}.close-dialog:disabled{cursor:default;opacity:.4}.dialog-body{padding:22px}.drop-zone{display:grid;min-height:150px;padding:24px;border:1px dashed var(--line-strong);border-radius:16px;color:var(--slate);cursor:pointer;text-align:center;place-items:center}.drop-zone:hover,.drop-zone.is-over{border-color:var(--bone);background:var(--panel)}.drop-zone strong{display:block;margin-bottom:7px;color:var(--bone);font-size:14px;font-weight:500}.drop-zone span{font-size:11px}.file-preview{display:grid;grid-template-columns:40px minmax(0,1fr) auto;gap:2px 14px;align-items:center;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--preview-bg)}.file-preview .file-kind{grid-row:1/span 2;display:grid;width:40px;height:40px;border:1px solid var(--line);border-radius:9px;color:var(--ash);font:500 9px/1 var(--mono);place-items:center}.file-preview strong{overflow:hidden;color:var(--bone);font:500 12px/1.4 var(--mono);text-overflow:ellipsis;white-space:nowrap}.file-preview span{color:var(--slate);font:400 10px/1.4 var(--mono)}.file-preview button{grid-row:1/span 2;grid-column:3;padding:5px 0;border:0;border-bottom:1px solid var(--line-strong);color:var(--ash);background:transparent;cursor:pointer;font-size:11px}.file-preview button:disabled{cursor:default;opacity:.45}.local-note{margin:12px 0 0;color:var(--ash);font-size:11px;line-height:1.5}.modal-status{margin:12px 0 0;padding:10px 12px;border:1px solid var(--line);border-radius:10px;color:var(--ash);font-size:11px;line-height:1.45}.modal-status[data-tone="error"]{border-color:rgba(185,88,88,.42);color:#c98989;background:rgba(185,88,88,.08)}.upload-config{margin-top:20px}.upload-config fieldset{margin:0;padding:0;border:0}.upload-config legend{margin-bottom:10px;color:var(--ash);font-size:12px}.expiry-options{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.expiry-options label{position:relative}.expiry-options input{position:absolute;opacity:0;pointer-events:none}.expiry-options span{display:block;padding:12px;border:1px solid var(--line);border-radius:10px;color:var(--slate);cursor:pointer;font:500 12px/1 var(--mono);text-align:center}.expiry-options input:checked+span{border-color:var(--bone);color:var(--bone);background:var(--panel-strong)}.expiry-options input:disabled+span{cursor:default;opacity:.45}.auth-gate{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.auth-gate p{margin:0;color:var(--slate);font-size:11px;line-height:1.45}.continue-button{flex:0 0 auto;min-height:44px;padding:0 17px;border:0;border-radius:11px;color:var(--ink);background:var(--white);cursor:pointer;font-size:12px;font-weight:500}.continue-button:disabled{cursor:default;opacity:.62}.drop-overlay{position:fixed;inset:14px;display:none;border:1px dashed var(--bone);border-radius:24px;color:var(--bone);background:var(--overlay-bg);backdrop-filter:blur(10px);pointer-events:none;text-align:center;place-items:center;z-index:2}.drop-overlay.is-visible{display:grid}.drop-overlay strong{display:block;margin-bottom:8px;font-size:22px;font-weight:500}.drop-overlay span{color:var(--ash);font-size:12px}
|
|
21
|
+
@media(max-width:980px){.hero{grid-template-columns:minmax(0,1fr);min-height:0}.hero-copy{min-width:0;width:100%;max-width:720px;margin-inline:auto}.handoff-stage{min-width:0;min-height:0}}
|
|
22
|
+
@media(max-width:680px){.shell{width:calc(100% - 28px)}.site-header{height:68px}.header-action--how,.header-divider--how{display:none}.header-divider{height:16px;margin:0 7px}.header-action{width:32px;padding:0}.header-action--primary{width:32px;min-height:31px;border-radius:8px}.header-action-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.theme-toggle{width:32px;height:32px}.theme-symbol{width:18px;height:18px}.homepage-main{padding-top:42px}.hero{gap:38px}.hero h1{font-size:clamp(52px,15vw,68px)}.subhead{font-size:16px}.setup-label{align-items:flex-start;gap:10px}.setup-steps{display:grid;grid-template-columns:1fr;gap:9px;padding:2px 8px 6px}.handoff-stage{border-radius:24px}.stage-header{padding:15px 16px}.flow{grid-template-columns:minmax(0,1fr);gap:10px;padding:16px}.agent-panel{padding:16px;border-radius:18px}.agent-meta{margin-bottom:14px}.artifact-file{padding:14px}.relay{display:flex;align-items:center;flex-direction:column;gap:7px;padding:2px 0 0}.relay-line{width:1px;height:28px;margin:0;background:linear-gradient(180deg,var(--amber),var(--violet),var(--blue))}.relay-line:after{top:auto;right:-3px;bottom:0;border-top:0;border-right:1px solid var(--blue);border-bottom:1px solid var(--blue);transform:rotate(45deg)}.tool-trace{margin:2px 16px 16px;padding:8px 14px;border-radius:14px}.trace-line{grid-template-columns:58px minmax(0,1fr) auto;gap:8px;font-size:9px;align-items:center}.trace-line+.trace-line{margin-top:0;padding-top:7px}.trace-line:not(:last-child){padding-bottom:7px;border-bottom:1px solid var(--line)}.how-section{margin-top:48px;padding-top:54px}.how-intro{grid-template-columns:1fr;gap:22px;margin-bottom:28px}.how-copy{font-size:15px}.explain-grid{grid-template-columns:1fr;border-radius:18px}.explain-block{padding:24px 20px}.explain-block+.explain-block{border-top:1px solid var(--line);border-left:0}.plain-list li{padding-left:0}.plain-list li:before{display:none}.plain-answer{align-items:flex-start;flex-direction:column;gap:8px}.trust{grid-template-columns:1fr}.cloudflare{border-right:0;border-bottom:1px solid var(--line)}.auth-gate{align-items:flex-start;flex-direction:column}.continue-button{width:100%}.page-footer{align-items:flex-start;flex-direction:column}}
|
|
23
|
+
@media(max-width:360px){.shell{width:calc(100% - 20px)}.stage-header{padding:13px 12px}.flow{gap:8px;padding:12px}.agent-panel{padding:12px;border-radius:16px}.agent-meta{margin-bottom:11px}.artifact-file{padding:12px}.tool-trace{margin:2px 12px 12px;padding:8px 10px}.trace-line{grid-template-columns:52px minmax(0,1fr) auto;gap:6px;font-size:8.5px}}
|
|
24
|
+
@media(prefers-reduced-transparency:reduce){.agent-panel,dialog,.drop-overlay{backdrop-filter:none}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition-duration:0s!important}.hero-cycle-word{animation:none;opacity:1;transform:none;filter:none}.hero-cycle-word:not(:first-child){display:none}}
|
|
25
|
+
</style></head><body><div class="shell"><header class="site-header"><a class="brand" href="/"><svg data-artifactpass-mark="capability-corridor" viewBox="0 0 64 64" class="brand-mark" aria-hidden="true" focusable="false"><path fill="currentColor" d="M14 5h36l9 9v19h-8.7l-8-6.5H23.4L15 20H5v-6z"></path><path fill="currentColor" d="M5 27h8.7l8 6.5h19L49 40h10v10l-9 9H14l-9-9z"></path></svg>ArtifactPass</a><div class="header-actions"><a class="header-action header-action--how" href="/#how" aria-label="How ArtifactPass works"><span class="header-action-label">How it works</span></a><span class="header-divider header-divider--how" aria-hidden="true"></span><a class="header-action header-action--github" href="https://github.com/lordelogos/lordebuilds.artifact.pass" aria-label="View ArtifactPass on GitHub" title="GitHub"><svg viewBox="0 0 438.549 438.549" aria-hidden="true" focusable="false"><path fill="currentColor" d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 0 1-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z"></path></svg><span class="header-action-label">GitHub</span></a><span class="header-divider" aria-hidden="true"></span><button class="theme-toggle" id="theme-toggle" type="button" aria-label="Switch to light mode" aria-pressed="true" title="Switch to light mode"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="theme-symbol" aria-hidden="true" focusable="false"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0-18 0"></path><path d="M12 3v18"></path><path d="m12 9 4.65-4.65"></path><path d="m12 14.3 7.37-7.37"></path><path d="m12 19.6 8.85-8.85"></path></svg></button><span class="header-divider" aria-hidden="true"></span><a class="header-action header-action--primary" href="/#install" aria-label="Set up ArtifactPass" title="Set up"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" color="currentColor" class="" aria-hidden="true"><path d="M12 4V20M20 12H4" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg><span class="header-action-label">Set up</span></a></div></header><section class="document"><p class="eyebrow">Public service terms</p><h1>Terms</h1><p class="updated">Effective 11 September 2026</p><div class="prose"><p>These terms govern use of the hosted ArtifactPass service. By using it, you agree to these terms. Private deployments are governed by their operator. Open-source software in the ArtifactPass repository remains governed by its stated Apache-2.0 license.</p><h2>The service</h2><p>ArtifactPass creates temporary links for one Markdown, HTML, or PDF artifact at a time. It is not permanent storage, a backup service, or a confidential document vault. There is no artifact history or recovery screen after expiry.</p><h2>Acceptable use</h2><p>You may submit only material you are authorized to use and share. Do not use ArtifactPass to distribute malware, unlawful or deceptive content, rights-infringing material, secrets obtained without authorization, or content intended to harm the service, its infrastructure, or another person.</p><h2>Your responsibilities</h2><p>You are responsible for the document you choose, its recipients, and its lifetime. Approve only an agent code that you requested from your own workspace. Keep share URLs and workspace credentials appropriate to the sensitivity of your work.</p><h2>Temporary bearer links</h2><p>Each share URL is a temporary bearer link. Anyone holding it can access and download the artifact until expiry. Expiration prevents later access through ArtifactPass, but it cannot revoke copies already downloaded or shared elsewhere.</p><h2>Availability and changes</h2><p>The hosted service may change, be rate-limited, be suspended for security or abuse prevention, or become temporarily unavailable. Features may be added, removed, or corrected as the product develops. Material changes to these terms will update the effective date above.</p><h2>Disclaimer</h2><p>To the maximum extent permitted by law, the hosted service is provided as available and without warranties of uninterrupted operation, fitness for a particular purpose, or preservation of submitted material.</p><h2>Limitation of liability</h2><p>To the maximum extent permitted by law, ArtifactPass and its maintainers are not liable for indirect, incidental, special, consequential, or exemplary losses arising from use of the hosted service, loss of access, or a recipient’s handling of a shared artifact.</p><h2>Questions</h2><p>Questions about these terms can be raised through the <a href="https://github.com/lordelogos/lordebuilds.artifact.pass">ArtifactPass GitHub repository</a>. Security reports must use private vulnerability reporting.</p></div></section><footer class="page-footer"><span>ArtifactPass</span><span class="footer-links"><a href="/privacy">Privacy</a><a href="/terms">Terms</a><span>Built for agentic handoffs.</span></span></footer></div><script>
|
|
26
|
+
const themeToggle=document.querySelector("#theme-toggle");
|
|
27
|
+
const themeColor=document.querySelector('meta[name="theme-color"]');
|
|
28
|
+
const syncTheme=()=>{const light=document.documentElement.dataset.theme==="light";themeToggle.setAttribute("aria-label","Switch to "+(light?"dark":"light")+" mode");themeToggle.setAttribute("aria-pressed",String(!light));themeToggle.title="Switch to "+(light?"dark":"light")+" mode";themeColor.content=light?"#f3f3f0":"#0b0c0e";};
|
|
29
|
+
syncTheme();themeToggle.addEventListener("click",()=>{const next=document.documentElement.dataset.theme==="light"?"dark":"light";document.documentElement.dataset.theme=next;localStorage.setItem("artifactpass-theme",next);syncTheme();});
|
|
30
|
+
</script></body></html>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<meta name="description" content="Temporary artifact sharing for humans and coding agents." />
|
|
7
|
+
<meta name="theme-color" content="#0b0c0e" />
|
|
8
|
+
<link rel="icon" href="/artifactpass-logo.svg" type="image/svg+xml" />
|
|
9
|
+
<title>ArtifactPass</title>
|
|
10
|
+
<script type="module" crossorigin src="/assets/main-DS8m6E8X.js"></script>
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/homepage-validation.js">
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/main-c4zCT3c-.css">
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<div id="root"></div>
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
package/dist/deployment/index.js
CHANGED
|
@@ -17755,7 +17755,7 @@ var HomePage = ({ installCommand, expiryOptions }) => {
|
|
|
17755
17755
|
}),
|
|
17756
17756
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
17757
17757
|
className: "subhead",
|
|
17758
|
-
children: "
|
|
17758
|
+
children: "Share Markdown, HTML, and PDF files through expiring links, from the browser or your AI agent."
|
|
17759
17759
|
}),
|
|
17760
17760
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
17761
17761
|
className: "setup",
|
|
@@ -32395,7 +32395,8 @@ var PUBLIC_RESPONSE_HEADERS = {
|
|
|
32395
32395
|
"Cache-Control": "private, no-store, max-age=0",
|
|
32396
32396
|
"Content-Security-Policy": "default-src 'none'; frame-ancestors 'none'; sandbox",
|
|
32397
32397
|
"Referrer-Policy": "no-referrer",
|
|
32398
|
-
"X-Content-Type-Options": "nosniff"
|
|
32398
|
+
"X-Content-Type-Options": "nosniff",
|
|
32399
|
+
"X-Robots-Tag": "noindex, nofollow, noarchive"
|
|
32399
32400
|
};
|
|
32400
32401
|
var bytesToBase64 = (bytes) => {
|
|
32401
32402
|
let binary = "";
|
|
@@ -32821,7 +32822,7 @@ var capabilityPath = /^\/a\/[A-Za-z0-9_-]{32,256}(?=\/|$)/u;
|
|
|
32821
32822
|
var redactRequestPath = (pathname) => pathname.replace(capabilityPath, "/a/:capability");
|
|
32822
32823
|
var package_default = {
|
|
32823
32824
|
name: "artifactpass",
|
|
32824
|
-
version: "0.1.
|
|
32825
|
+
version: "0.1.9-rc.1",
|
|
32825
32826
|
"private": true,
|
|
32826
32827
|
type: "module",
|
|
32827
32828
|
packageManager: "pnpm@10.11.0",
|
|
@@ -32978,6 +32979,48 @@ var PublicFooter = () => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("footer",
|
|
|
32978
32979
|
//#endregion
|
|
32979
32980
|
//#region src/web/routes/public-pages.tsx
|
|
32980
32981
|
var repositoryUrl = "https://github.com/lordelogos/lordebuilds.artifact.pass";
|
|
32982
|
+
var PUBLIC_SITE_ORIGIN = "https://artifactpass.com";
|
|
32983
|
+
var homepageDescription = "Create expiring links for Markdown, HTML, and PDF files. Share exact work between people and AI agents from the browser, CLI, or MCP.";
|
|
32984
|
+
var pagePath = (page) => {
|
|
32985
|
+
if (page === "privacy") return "/privacy";
|
|
32986
|
+
if (page === "terms") return "/terms";
|
|
32987
|
+
return "/";
|
|
32988
|
+
};
|
|
32989
|
+
var pageDescription = (page) => {
|
|
32990
|
+
if (page === "privacy") return "Learn how ArtifactPass processes identity, temporary artifacts, authorization, and operational data.";
|
|
32991
|
+
if (page === "terms") return "Read the terms for using ArtifactPass to create and open temporary artifact links.";
|
|
32992
|
+
return homepageDescription;
|
|
32993
|
+
};
|
|
32994
|
+
var isCanonicalDeployment = (url, configuration) => configuration.deploymentMode === "public" && url.origin === "https://artifactpass.com";
|
|
32995
|
+
var homepageStructuredData = JSON.stringify({
|
|
32996
|
+
"@context": "https://schema.org",
|
|
32997
|
+
"@graph": [{
|
|
32998
|
+
"@type": "WebSite",
|
|
32999
|
+
"@id": `${PUBLIC_SITE_ORIGIN}/#website`,
|
|
33000
|
+
url: `${PUBLIC_SITE_ORIGIN}/`,
|
|
33001
|
+
name: "ArtifactPass",
|
|
33002
|
+
description: homepageDescription
|
|
33003
|
+
}, {
|
|
33004
|
+
"@type": "SoftwareApplication",
|
|
33005
|
+
"@id": `${PUBLIC_SITE_ORIGIN}/#application`,
|
|
33006
|
+
url: `${PUBLIC_SITE_ORIGIN}/`,
|
|
33007
|
+
name: "ArtifactPass",
|
|
33008
|
+
description: homepageDescription,
|
|
33009
|
+
applicationCategory: "DeveloperApplication",
|
|
33010
|
+
operatingSystem: "Any",
|
|
33011
|
+
browserRequirements: "Requires a modern web browser",
|
|
33012
|
+
offers: {
|
|
33013
|
+
"@type": "Offer",
|
|
33014
|
+
price: "0",
|
|
33015
|
+
priceCurrency: "USD"
|
|
33016
|
+
},
|
|
33017
|
+
featureList: [
|
|
33018
|
+
"Temporary links for Markdown, HTML, and PDF files",
|
|
33019
|
+
"Browser, command-line, and MCP sharing",
|
|
33020
|
+
"Exact source-file handoffs between people and AI agents"
|
|
33021
|
+
]
|
|
33022
|
+
}]
|
|
33023
|
+
}).replaceAll("<", "\\u003c");
|
|
32981
33024
|
var EnvironmentNotice = () => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("aside", {
|
|
32982
33025
|
className: "environment-notice",
|
|
32983
33026
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "Staging environment" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Use synthetic test documents only. This deployment may be reset during release validation." })]
|
|
@@ -33105,7 +33148,18 @@ var pageContent = (page, url, configuration) => {
|
|
|
33105
33148
|
var pageTitle = (page) => {
|
|
33106
33149
|
if (page === "privacy") return "Privacy · ArtifactPass";
|
|
33107
33150
|
if (page === "terms") return "Terms · ArtifactPass";
|
|
33108
|
-
return "ArtifactPass
|
|
33151
|
+
return "ArtifactPass | Temporary File Sharing for People and AI Agents";
|
|
33152
|
+
};
|
|
33153
|
+
var renderRobotsTxt = (requestUrl) => {
|
|
33154
|
+
if (new URL(requestUrl).origin !== "https://artifactpass.com") return "User-agent: *\nDisallow: /\n";
|
|
33155
|
+
return `User-agent: *\nAllow: /\n\nSitemap: ${PUBLIC_SITE_ORIGIN}/sitemap.xml\n`;
|
|
33156
|
+
};
|
|
33157
|
+
var renderSitemapXml = () => {
|
|
33158
|
+
return `<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n${[
|
|
33159
|
+
"/",
|
|
33160
|
+
"/privacy",
|
|
33161
|
+
"/terms"
|
|
33162
|
+
].map((path) => ` <url><loc>${PUBLIC_SITE_ORIGIN}${path}</loc></url>`).join("\n")}\n</urlset>\n`;
|
|
33109
33163
|
};
|
|
33110
33164
|
var publicPageHeaders = (nonce) => ({
|
|
33111
33165
|
"Cache-Control": "private, no-store, max-age=0",
|
|
@@ -33123,8 +33177,12 @@ var publicPageHeaders = (nonce) => ({
|
|
|
33123
33177
|
"Referrer-Policy": "no-referrer",
|
|
33124
33178
|
"X-Content-Type-Options": "nosniff"
|
|
33125
33179
|
});
|
|
33126
|
-
var
|
|
33180
|
+
var renderPage = (page, nonce, requestUrl, configuration) => {
|
|
33127
33181
|
const url = new URL(requestUrl);
|
|
33182
|
+
const indexable = isCanonicalDeployment(url, configuration);
|
|
33183
|
+
const title = pageTitle(page);
|
|
33184
|
+
const description = pageDescription(page);
|
|
33185
|
+
const canonicalUrl = `${PUBLIC_SITE_ORIGIN}${pagePath(page)}`;
|
|
33128
33186
|
return `<!doctype html>${(0, import_server_edge.renderToStaticMarkup)(/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("html", {
|
|
33129
33187
|
lang: "en",
|
|
33130
33188
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("head", { children: [
|
|
@@ -33141,12 +33199,60 @@ var renderPublicPage = (page, nonce, requestUrl, configuration) => {
|
|
|
33141
33199
|
name: "theme-color",
|
|
33142
33200
|
content: "#0b0c0e"
|
|
33143
33201
|
}),
|
|
33202
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33203
|
+
name: "description",
|
|
33204
|
+
content: description
|
|
33205
|
+
}),
|
|
33206
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33207
|
+
name: "robots",
|
|
33208
|
+
content: indexable ? "index, follow, max-image-preview:large" : "noindex, nofollow, noarchive"
|
|
33209
|
+
}),
|
|
33210
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33211
|
+
property: "og:type",
|
|
33212
|
+
content: "website"
|
|
33213
|
+
}),
|
|
33214
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33215
|
+
property: "og:site_name",
|
|
33216
|
+
content: "ArtifactPass"
|
|
33217
|
+
}),
|
|
33218
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33219
|
+
property: "og:title",
|
|
33220
|
+
content: title
|
|
33221
|
+
}),
|
|
33222
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33223
|
+
property: "og:description",
|
|
33224
|
+
content: description
|
|
33225
|
+
}),
|
|
33226
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33227
|
+
property: "og:url",
|
|
33228
|
+
content: indexable ? canonicalUrl : url.origin + pagePath(page)
|
|
33229
|
+
}),
|
|
33230
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33231
|
+
name: "twitter:card",
|
|
33232
|
+
content: "summary"
|
|
33233
|
+
}),
|
|
33234
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33235
|
+
name: "twitter:title",
|
|
33236
|
+
content: title
|
|
33237
|
+
}),
|
|
33238
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", {
|
|
33239
|
+
name: "twitter:description",
|
|
33240
|
+
content: description
|
|
33241
|
+
}),
|
|
33242
|
+
indexable && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("link", {
|
|
33243
|
+
rel: "canonical",
|
|
33244
|
+
href: canonicalUrl
|
|
33245
|
+
}),
|
|
33144
33246
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("link", {
|
|
33145
33247
|
rel: "icon",
|
|
33146
33248
|
href: "/artifactpass-logo.svg",
|
|
33147
33249
|
type: "image/svg+xml"
|
|
33148
33250
|
}),
|
|
33149
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("title", { children:
|
|
33251
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("title", { children: title }),
|
|
33252
|
+
indexable && page === "home" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
33253
|
+
type: "application/ld+json",
|
|
33254
|
+
dangerouslySetInnerHTML: { __html: homepageStructuredData }
|
|
33255
|
+
}),
|
|
33150
33256
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
33151
33257
|
nonce,
|
|
33152
33258
|
dangerouslySetInnerHTML: { __html: homepageBootScript }
|
|
@@ -33178,6 +33284,7 @@ var renderPublicPage = (page, nonce, requestUrl, configuration) => {
|
|
|
33178
33284
|
] })]
|
|
33179
33285
|
}))}`;
|
|
33180
33286
|
};
|
|
33287
|
+
var renderPublicPage = (page, nonce, requestUrl, configuration) => renderPage(page, nonce, requestUrl, configuration);
|
|
33181
33288
|
//#endregion
|
|
33182
33289
|
//#region src/server/index.ts
|
|
33183
33290
|
var createService = (bindings, options) => new ArtifactApplicationService({
|
|
@@ -33206,8 +33313,17 @@ var createNonce = () => {
|
|
|
33206
33313
|
for (const byte of bytes) binary += String.fromCharCode(byte);
|
|
33207
33314
|
return btoa(binary);
|
|
33208
33315
|
};
|
|
33316
|
+
var preventSearchIndexing = async (context, next) => {
|
|
33317
|
+
await next();
|
|
33318
|
+
context.header("X-Robots-Tag", "noindex, nofollow, noarchive");
|
|
33319
|
+
};
|
|
33209
33320
|
var createArtifactApplication = (options = {}) => {
|
|
33210
33321
|
const app = new Hono();
|
|
33322
|
+
app.use("/auth/*", preventSearchIndexing);
|
|
33323
|
+
app.use("/connect", preventSearchIndexing);
|
|
33324
|
+
app.use("/connect/*", preventSearchIndexing);
|
|
33325
|
+
app.use("/upload", preventSearchIndexing);
|
|
33326
|
+
app.use("/upload/*", preventSearchIndexing);
|
|
33211
33327
|
const authorizationOptions = {
|
|
33212
33328
|
...options.now === void 0 ? {} : { now: options.now },
|
|
33213
33329
|
...options.accessJwks === void 0 ? {} : { accessJwks: options.accessJwks },
|
|
@@ -33237,6 +33353,20 @@ var createArtifactApplication = (options = {}) => {
|
|
|
33237
33353
|
app.get("/", (context) => servePublicPage("home", context));
|
|
33238
33354
|
app.get("/privacy", (context) => servePublicPage("privacy", context));
|
|
33239
33355
|
app.get("/terms", (context) => servePublicPage("terms", context));
|
|
33356
|
+
app.get("/robots.txt", (context) => {
|
|
33357
|
+
const canonical = new URL(context.req.url).origin === PUBLIC_SITE_ORIGIN;
|
|
33358
|
+
return context.text(renderRobotsTxt(context.req.url), 200, {
|
|
33359
|
+
"Cache-Control": canonical ? "public, max-age=3600" : "private, no-store, max-age=0",
|
|
33360
|
+
"Content-Type": "text/plain; charset=UTF-8"
|
|
33361
|
+
});
|
|
33362
|
+
});
|
|
33363
|
+
app.get("/sitemap.xml", (context) => {
|
|
33364
|
+
if (new URL(context.req.url).origin !== "https://artifactpass.com") return context.notFound();
|
|
33365
|
+
return context.body(renderSitemapXml(), 200, {
|
|
33366
|
+
"Cache-Control": "public, max-age=3600",
|
|
33367
|
+
"Content-Type": "application/xml; charset=UTF-8"
|
|
33368
|
+
});
|
|
33369
|
+
});
|
|
33240
33370
|
app.get("/health", (context) => context.json({
|
|
33241
33371
|
service: "lordebuilds.artifacts.share",
|
|
33242
33372
|
status: "ok",
|
|
@@ -33269,7 +33399,7 @@ var createArtifactApplication = (options = {}) => {
|
|
|
33269
33399
|
});
|
|
33270
33400
|
app.get("/upload", requireHuman(authorizationOptions, { redirectToSignIn: true }), (context) => {
|
|
33271
33401
|
if (context.env.ASSETS === void 0) throw new ArtifactError("not_found", "Route is unavailable", 404);
|
|
33272
|
-
const assetUrl = new URL("/", context.req.url);
|
|
33402
|
+
const assetUrl = new URL("/upload", context.req.url);
|
|
33273
33403
|
return context.env.ASSETS.fetch(new Request(assetUrl, context.req.raw));
|
|
33274
33404
|
});
|
|
33275
33405
|
app.route("/api/artifacts", createArtifactsRouter((bindings) => createService(bindings, options), authorizationOptions, publicUploadOptions));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "artifactpass",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9-rc.1",
|
|
4
4
|
"displayName": "ArtifactPass",
|
|
5
5
|
"description": "Share temporary Markdown, HTML, and PDF links between people and AI agents.",
|
|
6
6
|
"longDescription": "Publishes files from an approved workspace for people or agents to open, and reads supported ArtifactPass links created by either people or agents.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "artifactpass",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9-rc.1",
|
|
4
4
|
"description": "Install and connect ArtifactPass for compatible AI agent systems.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"typescript": "^7.0.2",
|
|
32
32
|
"vitest": "^4.1.10",
|
|
33
33
|
"agent-bridge": "0.0.0",
|
|
34
|
-
"artifact-
|
|
35
|
-
"artifact-
|
|
34
|
+
"artifact-protocol": "0.0.0",
|
|
35
|
+
"artifact-service": "0.0.0"
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "pnpm --dir ../../apps/artifact-service build && node ../../scripts/build-setup-package.mjs",
|