@gmickel/gno 1.24.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -4
- package/assets/skill/SKILL.md +40 -17
- package/assets/skill/recipes/capture-and-file.md +20 -5
- package/browser-extension/artifacts/gno-browser-clipper-v1.26.0.zip +0 -0
- package/browser-extension/artifacts/gno-browser-clipper-v1.26.0.zip.sha256 +1 -0
- package/browser-extension/dist/PRIVACY.md +55 -0
- package/browser-extension/dist/chunk-vn5f663b.js +50 -0
- package/browser-extension/dist/chunk-ydfx5d7p.css +1 -0
- package/browser-extension/dist/content.js +1 -0
- package/browser-extension/dist/manifest.json +25 -0
- package/browser-extension/dist/preview.html +13 -0
- package/browser-extension/dist/service-worker.js +40 -0
- package/package.json +13 -3
- package/spec/cli.md +196 -4
- package/spec/db/schema.sql +102 -1
- package/spec/mcp.md +10 -0
- package/spec/output-schemas/browser-clip-preview.schema.json +83 -0
- package/spec/output-schemas/browser-clip.schema.json +586 -0
- package/spec/output-schemas/capture-receipt.schema.json +22 -1
- package/spec/output-schemas/clipper-csrf.schema.json +12 -0
- package/spec/output-schemas/clipper-error.schema.json +46 -0
- package/spec/output-schemas/clipper-pair-approval.schema.json +17 -0
- package/spec/output-schemas/clipper-pair-start.schema.json +26 -0
- package/spec/output-schemas/clipper-pair-status.schema.json +46 -0
- package/spec/output-schemas/clipper-revoke.schema.json +28 -0
- package/spec/output-schemas/mcp-capture-result.schema.json +12 -1
- package/spec/output-schemas/project-profile-apply.schema.json +209 -0
- package/spec/output-schemas/project-profile-command.schema.json +160 -0
- package/spec/output-schemas/query-diagnose.schema.json +7 -1
- package/spec/output-schemas/setup-profile-result.schema.json +87 -0
- package/spec/project-profile.schema.json +301 -0
- package/src/cli/commands/collection/add.ts +39 -45
- package/src/cli/commands/collection/remove.ts +28 -28
- package/src/cli/commands/collection/rename.ts +55 -73
- package/src/cli/commands/context/add.ts +37 -26
- package/src/cli/commands/context/rm.ts +47 -20
- package/src/cli/commands/init.ts +55 -125
- package/src/cli/commands/models/use.ts +43 -38
- package/src/cli/commands/profile-apply.ts +334 -0
- package/src/cli/commands/profile.ts +409 -0
- package/src/cli/commands/setup-activation.ts +205 -54
- package/src/cli/commands/setup-profile.ts +223 -0
- package/src/cli/commands/setup.ts +3 -0
- package/src/cli/program.ts +110 -9
- package/src/config/index.ts +3 -0
- package/src/config/project-profile.ts +367 -0
- package/src/config/saver.ts +16 -7
- package/src/config/types.ts +42 -0
- package/src/core/browser-clip-provenance.ts +139 -0
- package/src/core/browser-clip.ts +473 -0
- package/src/core/capture-write.ts +5 -0
- package/src/core/capture.ts +75 -18
- package/src/core/config-mutation.ts +138 -76
- package/src/core/config-write-lock.ts +89 -0
- package/src/core/context-identity.ts +16 -0
- package/src/core/context-resolver.ts +2 -12
- package/src/core/file-lock.ts +20 -6
- package/src/core/folder-setup-planning.ts +6 -21
- package/src/core/folder-setup.ts +30 -2
- package/src/core/path-rules.ts +53 -0
- package/src/core/project-affinity-surface.ts +102 -7
- package/src/core/project-profile-apply-state.ts +268 -0
- package/src/core/project-profile-apply-validation.ts +95 -0
- package/src/core/project-profile-apply.ts +408 -0
- package/src/core/project-profile-canonical.ts +71 -0
- package/src/core/project-profile-diff.ts +302 -0
- package/src/core/project-profile-discovery.ts +519 -0
- package/src/core/project-profile-file.ts +37 -0
- package/src/core/project-profile-parser.ts +98 -0
- package/src/core/project-profile.ts +490 -0
- package/src/ingestion/walker.ts +85 -44
- package/src/llm/cache.ts +21 -0
- package/src/serve/capture-service.ts +420 -0
- package/src/serve/clipper-body.ts +62 -0
- package/src/serve/clipper-capture.ts +248 -0
- package/src/serve/clipper-contract.ts +57 -0
- package/src/serve/clipper-idempotency.ts +35 -0
- package/src/serve/clipper-pairing.ts +297 -0
- package/src/serve/clipper-security-errors.ts +23 -0
- package/src/serve/clipper-security.ts +449 -0
- package/src/serve/config-sync.ts +2 -2
- package/src/serve/public/app.tsx +8 -1
- package/src/serve/public/globals.built.css +1 -1
- package/src/serve/public/index.html +1 -0
- package/src/serve/public/lib/clipper-approval.ts +206 -0
- package/src/serve/public/pages/ClipperPairing.tsx +210 -0
- package/src/serve/resident-runtime.ts +1 -0
- package/src/serve/routes/api.ts +20 -115
- package/src/serve/routes/clipper.ts +394 -0
- package/src/serve/server.ts +22 -0
- package/src/store/migrations/020-browser-clipper-security.ts +128 -0
- package/src/store/migrations/021-multi-context-identity.ts +37 -0
- package/src/store/migrations/index.ts +4 -0
- package/src/store/sqlite/adapter.ts +83 -0
- package/src/store/sqlite/clipper-store-types.ts +104 -0
- package/src/store/sqlite/clipper-store.ts +496 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--buncss-light: ;--buncss-dark:initial;color-scheme:dark;color:#f2eee5;background:#151616;font-family:Avenir Next,Futura,sans-serif}*{box-sizing:border-box}body{background:radial-gradient(circle at 12% 0%,#493a2738,#0000 40%),linear-gradient(155deg,#171918,#101111);min-width:390px;min-height:520px;margin:0}button,input,select,textarea{font:inherit}.shell{display:grid;gap:14px;padding:20px}header,.compact,.mode-row,footer{display:flex;justify-content:space-between;align-items: center;gap:10px}h1{margin:4px 0;font-family:Iowan Old Style,Georgia,serif;font-size:25px;font-weight:500}p{margin:0}.eyebrow{color:#d1a35d;letter-spacing:.18em;font-size:10px}.panel,.receipt{display:grid;background:#ffffff08;border:1px solid #ffffff19;border-radius:12px;gap:12px;padding:14px}.fields{grid-template-columns:1fr 1fr}label{display:grid;color:#c7c3bb;gap:6px;font-size:11px}input,select,textarea{outline:none;color:#f2eee5;background:#0d0e0e;border:1px solid #ffffff20;border-radius:8px;width:100%;padding:9px 10px}input:focus,select:focus,textarea:focus{border-color:#d1a35d}textarea{resize:vertical;font-family:SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5}button{color:#171411;cursor:pointer;background:#d1a35d;border:1px solid #d1a35d66;border-radius:8px;padding:8px 11px;font-size:12px;font-weight:600}button.quiet{color:#d2cec5;background:0 0;border-color:#ffffff20}button.active{color:#d9efe4;background:#31423a;border-color:#6f9e8466}button:disabled{cursor:not-allowed;opacity:.4}.pair-code{color:#edc889;letter-spacing:.2em;font-family:SFMono-Regular,Menlo,monospace;font-size:28px}.hint,.warning,.error{color:#aaa69d;font-size:11px;line-height:1.45}.error{color:#ff9b91}.warning{color:#edc889}.check{display:flex;grid-column:1/-1;align-items: center}.check input{width:auto}.outcome{color:#d1a35d;font-family:SFMono-Regular,Menlo,monospace;font-size:11px}.preview-meta{display:grid;color:#aaa69d;overflow-wrap:anywhere;gap:4px;font-size:10px}details{color:#aaa69d;font-size:10px}details pre{overflow:auto;white-space:pre-wrap;max-height:180px}.receipt{color:#a8d5b8;overflow-wrap:anywhere;font-size:11px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{var d=new Set(["SCRIPT","STYLE","NOSCRIPT","TEMPLATE","FORM","NAV","ASIDE","IFRAME","EMBED","OBJECT","IMG","PICTURE","VIDEO","AUDIO","CANVAS","SVG","MATH"]);var u=(r)=>{for(let n of r){let t=document.querySelector(`meta[name="${n}"],meta[property="${n}"]`)?.content.trim();if(t)return t}return null},f=()=>(document.body?.getClientRects().length??0)>0,a=(r)=>{for(let n=r;n;n=n.parentElement){if(d.has(n.tagName)||n.hasAttribute("hidden")||n.hasAttribute("inert")||n.getAttribute("aria-hidden")==="true")return!1;let t=globalThis.getComputedStyle?.(n);if(t?.display==="none"||t?.visibility==="hidden"||t?.visibility==="collapse"||t?.opacity==="0"||t?.contentVisibility==="hidden")return!1}return!f()||r.getClientRects().length>0},h=(r,n)=>{let t="",l=(o)=>{if(o.nodeType===Node.TEXT_NODE){if(o.parentElement&&a(o.parentElement))t+=o.textContent??"";return}if(!(o instanceof Element)||d.has(o.tagName)||!a(o)){if(o instanceof Element)n.add("reader_partial");return}for(let e of o.childNodes)l(e)};for(let o of r.childNodes)l(o);return t},s=(r,n)=>{let t=[],l=(e)=>{if(e.length===0)return;let i=t.at(-1);if(i?.type==="text")i.text+=e;else t.push({type:"text",text:e})},o=(e)=>{if(e.nodeType===Node.TEXT_NODE){l(e.textContent??"");return}if(!(e instanceof Element)||d.has(e.tagName)||!a(e)){if(e instanceof Element)n.add("reader_partial");return}if(e.tagName==="A"){let i=e,c=h(i,n);if(c.trim().length===0){n.add("reader_partial");return}if(/^https?:\/\//iu.test(i.href))t.push({type:"link",text:c,href:i.href});else l(c),n.add("reader_partial");return}for(let i of e.childNodes)o(i)};for(let e of r.childNodes)o(e);return t.filter((e)=>e.type==="link"||e.text.trim().length>0)},E=(r,n)=>{if(!a(r))return null;let t=r.tagName;if(/^H[1-6]$/u.test(t))return{type:"heading",level:Number(t.slice(1)),content:s(r,n)};if(t==="P")return{type:"paragraph",content:s(r,n)};if(t==="BLOCKQUOTE")return{type:"quote",content:s(r,n)};if(t==="HR")return{type:"horizontal_rule"};if(t==="PRE")return{type:"code",language:r.querySelector("code")?.className.match(/language-(\w[\w+-]*)/u)?.[1]??null,text:h(r,n)};if(t==="OL"||t==="UL"){let l=[...r.children].filter((o)=>o.tagName==="LI"&&a(o)).map((o)=>s(o,n)).filter((o)=>o.length>0);return l.length>0?{type:"list",ordered:t==="OL",items:l}:null}return null},y=(r)=>{if(r.rangeCount<1||r.isCollapsed)return!1;for(let n=0;n<r.rangeCount;n+=1){let t=r.getRangeAt(n),l=t.commonAncestorContainer instanceof Element?t.commonAncestorContainer:t.commonAncestorContainer.parentElement;if(!l||!a(l))return!1;if(f()&&t.getClientRects().length===0)return!1;let o=document.createTreeWalker(l,NodeFilter.SHOW_TEXT),e=o.nextNode();while(e){if(t.intersectsNode(e)&&e.textContent?.length&&(!e.parentElement||!a(e.parentElement)))return!1;e=o.nextNode()}}return!0},C=(r)=>{let n=globalThis.getSelection?.();if(!n)return null;let t=n.toString();if(!t)return null;if(!y(n))return r.add("reader_partial"),null;return t},p=()=>{let r=new Set;if(document.querySelector("iframe,img,picture,video,audio,canvas,embed,object,svg,math"))r.add("reader_partial");if(globalThis.history.state!==null)r.add("spa_snapshot");let n=[...document.querySelectorAll("article,main,[role='main']")].find(a)??document.body,t=[...n.querySelectorAll("h1,h2,h3,h4,h5,h6,p,blockquote,ol,ul,pre,hr")].filter((e)=>!e.parentElement?.closest("ol,ul,pre")||e.parentElement===n).map((e)=>E(e,r)).filter((e)=>e!==null).filter((e)=>e.type==="horizontal_rule"||e.type==="code"||("content"in e?e.content.length>0:e.items.length>0)),l=C(r),o=document.querySelector('link[rel="canonical"]')?.href??null;if(o&&o!==location.href)r.add("canonical_url_differs");return{sourceUrl:location.href,canonicalUrl:o,title:document.title||location.hostname,author:u(["author","article:author"]),site:u(["og:site_name","application-name"]),publishedAt:u(["article:published_time","datePublished","date"]),observedAt:new Date().toISOString(),browser:{name:"Chromium",version:null,platform:navigator.platform||null},warnings:[...r],selectionText:l,readerBlocks:t}};var m="__gnoBrowserClipperInstalled",g=globalThis;if(g[m]!==!0)g[m]=!0,chrome.runtime.onMessage.addListener((r,n,t)=>{if(r!==null&&typeof r==="object"&&r.type==="GNO_CLIPPER_EXTRACT")t({ok:!0,extraction:p()})});})();
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": 3,
|
|
3
|
+
"name": "GNO Browser Clipper",
|
|
4
|
+
"description": "Capture explicitly selected or visible page content into local GNO.",
|
|
5
|
+
"permissions": [
|
|
6
|
+
"activeTab",
|
|
7
|
+
"scripting",
|
|
8
|
+
"storage"
|
|
9
|
+
],
|
|
10
|
+
"host_permissions": [
|
|
11
|
+
"http://127.0.0.1/*"
|
|
12
|
+
],
|
|
13
|
+
"background": {
|
|
14
|
+
"service_worker": "service-worker.js",
|
|
15
|
+
"type": "module"
|
|
16
|
+
},
|
|
17
|
+
"action": {
|
|
18
|
+
"default_popup": "preview.html",
|
|
19
|
+
"default_title": "Capture with GNO"
|
|
20
|
+
},
|
|
21
|
+
"content_security_policy": {
|
|
22
|
+
"extension_pages": "script-src 'self'; object-src 'none'; connect-src http://127.0.0.1:*"
|
|
23
|
+
},
|
|
24
|
+
"version": "1.26.0"
|
|
25
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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="referrer" content="no-referrer" />
|
|
7
|
+
<title>GNO Browser Clipper</title>
|
|
8
|
+
|
|
9
|
+
<link rel="stylesheet" crossorigin href="./chunk-ydfx5d7p.css"><script type="module" crossorigin src="./chunk-vn5f663b.js"></script></head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="root"></div>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|