@fungi.computer/grove 0.0.0-stage → 0.0.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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +106 -2
  3. package/dist/assets/Effect-BEduymlz.js +76 -0
  4. package/dist/assets/MapleMono-VF-CCDrizxw.woff2 +0 -0
  5. package/dist/assets/Nunito-VF-8c6a9bb-cyrillic-BsWUdSU9.woff2 +0 -0
  6. package/dist/assets/Nunito-VF-8c6a9bb-cyrillic-ext-Cb1j0nGJ.woff2 +0 -0
  7. package/dist/assets/Nunito-VF-8c6a9bb-latin-BYs3GYNf.woff2 +0 -0
  8. package/dist/assets/Nunito-VF-8c6a9bb-latin-ext-0RvtKGDy.woff2 +0 -0
  9. package/dist/assets/Nunito-VF-8c6a9bb-vietnamese-cS2dauUA.woff2 +0 -0
  10. package/dist/assets/anthropic-messages-Bnv5qjAJ.js +41 -0
  11. package/dist/assets/azure-openai-responses-QZaJy-8U.js +1 -0
  12. package/dist/assets/base-face-CJPKiwfc.js +1 -0
  13. package/dist/assets/burger-DMbWZ2jd.js +1 -0
  14. package/dist/assets/cat-UfLh6DHG.js +1 -0
  15. package/dist/assets/cloudflare-workers-ai-system-one-Bq-3_D9p.js +1 -0
  16. package/dist/assets/compat-CvJ9Wfru.js +2 -0
  17. package/dist/assets/diagnostics-CmW2yJSB.js +1 -0
  18. package/dist/assets/error-CJ3RHG07.js +1 -0
  19. package/dist/assets/error-body-pkrba6pf.js +1 -0
  20. package/dist/assets/extension-hook-DvcdepgP.js +560 -0
  21. package/dist/assets/extensions-1Fd4Wd8r.js +1 -0
  22. package/dist/assets/github-copilot-headers-DRgtIyTm.js +1 -0
  23. package/dist/assets/google-generative-ai-DP-8xZvz.js +1 -0
  24. package/dist/assets/google-shared-Cs5udoZV.js +8 -0
  25. package/dist/assets/google-vertex-BJiAIGUd.js +1 -0
  26. package/dist/assets/hash-yQufAZII.js +1 -0
  27. package/dist/assets/headers-FK4rgixo.js +1 -0
  28. package/dist/assets/index-DBHVAvuX.css +1 -0
  29. package/dist/assets/index-hJphFjkO.js +171 -0
  30. package/dist/assets/json-parse-nqKewMRF.js +3 -0
  31. package/dist/assets/mistral-conversations-mRYg3mWw.js +4 -0
  32. package/dist/assets/models-CcNnosqL.js +1 -0
  33. package/dist/assets/mushroom-BBaCYNmw.js +1 -0
  34. package/dist/assets/node.browser-CwSOSQcL.js +1 -0
  35. package/dist/assets/node.browser-DFtqp6Hr.js +1 -0
  36. package/dist/assets/openai-Cpe0uoXQ.js +19 -0
  37. package/dist/assets/openai-codex-responses-BMz-j1hp.js +9 -0
  38. package/dist/assets/openai-completions-BxBCgHHI.js +5 -0
  39. package/dist/assets/openai-prompt-cache-DXo9f3w5.js +1 -0
  40. package/dist/assets/openai-responses-cvwOEFWg.js +1 -0
  41. package/dist/assets/openai-responses-shared-DzD8B6NI.js +10 -0
  42. package/dist/assets/openrouter-images-DwousKhc.js +1 -0
  43. package/dist/assets/parakeet-conversation-C3pQoKx-.js +3 -0
  44. package/dist/assets/parakeet-conversation-COndlivb.css +1 -0
  45. package/dist/assets/pi-messages-CfXPQ4jp.js +7 -0
  46. package/dist/assets/preload-helper-mbhLTglw.js +8 -0
  47. package/dist/assets/provider-env-CcCbsTJq.js +1 -0
  48. package/dist/assets/provider-retry-CSlu6hjs.js +1 -0
  49. package/dist/assets/renderer-BdjuCi44.js +1 -0
  50. package/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
  51. package/dist/assets/runtime-core-CvcjUkf6.js +2 -0
  52. package/dist/assets/sanitize-unicode-DmIE6hZJ.js +1 -0
  53. package/dist/assets/system-one-shared-CGF8IYMZ.js +1 -0
  54. package/dist/assets/transform-messages-CrQEqmfx.js +1 -0
  55. package/dist/assets/typesafe-system-one-CWcJw-Ys.js +1 -0
  56. package/dist/index.html +17 -0
  57. package/package.json +172 -3
@@ -0,0 +1 @@
1
+ import{_ as e}from"./preload-helper-mbhLTglw.js";function t(){return typeof process>`u`||!(process.versions?.node||process.versions?.bun)?null:process.getBuiltinModule?.(`node:os`)??null}var n=t();function r(){return n?`pi (${n.platform()} ${n.release()}; ${n.arch()})`:`pi (browser)`}var i=class extends Error{},a=[`$ref`,`$defs`,`definitions`,`allOf`,`oneOf`,`patternProperties`,`dependentSchemas`,`dependencies`,`unevaluatedProperties`,`propertyNames`,`contains`,`prefixItems`,`not`,`if`,`then`,`else`];function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){if(!o(e))return!1;let t=typeof e.type==`string`?[e.type]:Array.isArray(e.type)?e.type:[];return t.includes(`object`)||t.includes(`array`)||e.properties!==void 0||e.items!==void 0}function c(e){return o(e)?e.type===`null`||Array.isArray(e.type)&&e.type.includes(`null`)||e.const===null||Array.isArray(e.enum)&&e.enum.includes(null)?!0:Array.isArray(e.anyOf)&&e.anyOf.some(e=>c(e)):!1}function l(e,t){if(!o(e))throw new i(`boolean schemas are unsupported`);for(let t of a)if(e[t]!==void 0)throw new i(`${t} schemas are unsupported`);if(t){for(let[n,r]of Object.entries(e))if(t(n,r))throw new i(`${n}: ${JSON.stringify(r)} is unsupported`)}if(e.anyOf!==void 0){if(!Array.isArray(e.anyOf)||e.anyOf.length===0)throw new i(`anyOf must contain at least one schema`);for(let n of e.anyOf){if(s(n))throw new i(`object and array unions are unsupported`);l(n,t)}}if(e.items!==void 0){if(Array.isArray(e.items))throw new i(`tuple schemas are unsupported`);l(e.items,t)}let n=e.type===`object`;if(e.properties!==void 0&&!n)throw new i(`properties require type object`);if(!n)return;if(e.additionalProperties!==void 0&&e.additionalProperties!==!1)throw new i(`schema-valued or true additionalProperties is unsupported`);if(e.properties!==void 0&&!o(e.properties))throw new i(`object properties must be a schema map`);if(e.required!==void 0&&(!Array.isArray(e.required)||e.required.some(e=>typeof e!=`string`)))throw new i(`object required must be a string array`);let r=e.properties??{},u=Object.keys(r),d=new Set(Array.isArray(e.required)?e.required:[]);if([...d].some(e=>!u.includes(e)))throw new i(`required contains an unknown property`);for(let[e,n]of Object.entries(r))l(n,t),!d.has(e)&&!c(n)&&(r[e]={anyOf:[n,{type:`null`}]});e.required=u,e.additionalProperties=!1}function u(e,t){let n=structuredClone(e);if(!o(n)||(l(n,t),n.type!==`object`))throw new i(`root schema must have type object`);return n}function d(e,t){return t===!0?u(e.parameters):e.parameters}function f(e,t,n){let r=t[n];if(typeof r!=`string`)throw Error(`Grammar tool call "${e}" requires argument "${n}" to be a string.`);return r}function p(e,t,n,r){if(e.closed){if(r&&n===e.input)return;throw Error(`grammar tool input for property "${t}" changed after it was closed`)}if(!n.startsWith(e.input))throw Error(`grammar tool input for property "${t}" changed non-monotonically`);let i=n.slice(e.input.length);if(!r&&i.length===0)return;let a=``;return e.started||=(a+=`{${JSON.stringify(t)}:"`,!0),a+=JSON.stringify(i).slice(1,-1),e.input=n,r&&(a+=`"}`,e.closed=!0),a}function m(e){let t=e.parameters;if(t.type!==`object`)throw Error(`grammar constrained sampling requires an object parameter schema`);if(!Array.isArray(t.required)||t.required.length!==1||typeof t.required[0]!=`string`)throw Error(`grammar constrained sampling requires exactly one required string property`);let n=t.required[0];if(!t.properties?.[n])throw Error(`grammar constrained sampling requires a properties entry for ${n}`);if(t.properties[n]?.type!==`string`)throw Error(`grammar constrained sampling property ${n} must have type string`);return n}function h(e,t,n){let r=e.constrainedSampling;if(!(!r||r.type!==`json_schema`)){if(t)try{return u(e.parameters,n),!0}catch(t){if(!(t instanceof i))throw t;if(r.strict!==`require`)return;throw Error(`Tool "${e.name}" requires JSON-schema constrained sampling, but ${t.message}.`)}if(r.strict===`require`)throw Error(`Tool "${e.name}" requires JSON-schema constrained sampling, but strict tools are unsupported.`)}}function g(e,t){let n=e.constrainedSampling;if(!n||n.type!==`grammar`||!t)return;let r=n.variants.openai_lark,i=n.variants.openai_regex,a=typeof r==`string`&&r.trim().length>0,o=typeof i==`string`&&i.trim().length>0;if(!a&&!o)throw Error(`Tool "${e.name}" cannot use grammar constrained sampling: no supported grammar variant was provided.`);try{return{format:a?`lark`:`regex`,definition:a?r:i,inputProperty:m(e)}}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Tool "${e.name}" cannot use grammar constrained sampling: ${n}.`)}}function _(e,t){let n=new Map;for(let r of e??[]){let e=g(r,t);e&&n.set(r.name,e.inputProperty)}return n}var v=4,y=4800;function b(e){return e.totalTokens||e.input+e.output+e.cacheRead+e.cacheWrite}function x(e){try{return JSON.stringify(e)??`undefined`}catch{return`[unserializable]`}}function S(e){if(typeof e==`string`)return e.length;let t=0;for(let n of e)t+=n.type===`text`?n.text.length:y;return t}function C(e){return Math.ceil(e.length/v)}function w(e){return Math.ceil(S(e)/v)}function T(t){let n=0;if(t.role===`system`)return C(e(t))+O(t.toolsAdded)+O(t.toolsRemoved);if(t.role===`user`||t.role===`toolResult`)return w(t.content);for(let e of t.content)e.type===`text`?n+=e.text.length:e.type===`thinking`?n+=e.thinking.length:n+=e.name.length+x(e.arguments).length;return Math.ceil(n/v)}function E(e){let t=-1/0,n;for(let r=0;r<e.length;r++){let i=e[r];if(i.role===`assistant`){let e=i;e.timestamp>=t&&e.stopReason!==`aborted`&&e.stopReason!==`error`&&b(e.usage)>0&&(n={usage:e.usage,index:r})}t=Math.max(t,i.timestamp)}return n}function D(e){let t=`messages`in e?e.messages:e,n=E(t);if(n){let e=b(n.usage),r=0;for(let e=n.index+1;e<t.length;e++)r+=T(t[e]);return{tokens:e+r,usageTokens:e,trailingTokens:r,lastUsageIndex:n.index}}let r=0;for(let e of t)r+=T(e);return{tokens:r,usageTokens:0,trailingTokens:r,lastUsageIndex:null}}function O(e){return!e||e.length===0?0:C(x(e))}var k=4096,A=1;function j(e,t,n){if(e.contextWindow<=0)return Math.max(A,n);let r=e.contextWindow-D(t).tokens-k;return Math.min(n,Math.max(A,r))}function M(e,t,n,r){return{temperature:n?.temperature,samplingParams:n?.samplingParams,maxTokens:j(e,t,n?.maxTokens??e.maxTokens),signal:n?.signal,telemetryContext:n?.telemetryContext,apiKey:r||n?.apiKey,fetch:n?.fetch,transport:n?.transport,cacheRetention:n?.cacheRetention,sessionId:n?.sessionId,headers:n?.headers,onPayload:n?.onPayload,onResponse:n?.onResponse,onProviderStreamEvent:n?.onProviderStreamEvent,timeoutMs:n?.timeoutMs,websocketConnectTimeoutMs:n?.websocketConnectTimeoutMs,maxRetries:n?.maxRetries,maxRetryDelayMs:n?.maxRetryDelayMs,metadata:n?.metadata,env:n?.env}}var N=1024,P={minimal:1024,low:2048,medium:8192,high:16384};function F(e){return e===`xhigh`||e===`max`?`high`:e}function I(e,t){return{...P,...t}[F(e)]}function L(e,t){return Math.min(e,Math.max(0,t-N))}function R(e,t,n,r){let i=I(n,r),a=e===void 0?t:Math.min(e+i,t);return a<=i&&(i=L(i,a)),{maxTokens:a,thinkingBudget:i}}var z=`(image omitted: model does not support images)`,B=`(tool image omitted: model does not support images)`;function V(e,t){let n=[],r=!1;for(let i of e){if(i.type===`image`){r||n.push({type:`text`,text:t}),r=!0;continue}n.push(i),r=i.text===t}return n}function H(e,t){return t.input.includes(`image`)?e:e.map(e=>e.role===`user`&&Array.isArray(e.content)?{...e,content:V(e.content,z)}:e.role===`toolResult`?{...e,content:V(e.content,B)}:e)}function U(e,t,n){let r=new Map,i=H(e.map(e=>e.content==null?{...e,content:[]}:e),t).map(e=>{if(e.role===`system`||e.role===`user`)return e;if(e.role===`toolResult`){let t=r.get(e.toolCallId);return t&&t!==e.toolCallId?{...e,toolCallId:t}:e}if(e.role===`assistant`){let i=e,a=i.provider===t.provider&&i.api===t.api&&i.model===t.id,o=i.content.flatMap(e=>{if(e.type===`thinking`)return e.redacted?a?e:[]:a&&e.thinkingSignature?e:!e.thinking||e.thinking.trim()===``?[]:a?e:{type:`text`,text:e.thinking};if(e.type===`text`)return a?e:{type:`text`,text:e.text};if(e.type===`toolCall`){let o=e,s=o;if(!a&&o.thoughtSignature&&(s={...o},delete s.thoughtSignature),!a&&n){let e=n(o.id,t,i);e!==o.id&&(r.set(o.id,e),s={...s,id:e})}return s}return e});return{...i,content:o}}return e}),a=[],o=[],s=new Set,c=[],l=()=>{if(o.length>0){for(let e of o)s.has(e.id)||a.push({role:`toolResult`,toolCallId:e.id,toolName:e.name,content:[{type:`text`,text:`No result provided`}],isError:!0,timestamp:Date.now()});o=[],s=new Set}a.push(...c),c.length=0};for(let e=0;e<i.length;e++){let t=i[e];if(t.role===`assistant`){l();let e=t;if(e.stopReason===`error`||e.stopReason===`aborted`)continue;let n=e.content.filter(e=>e.type===`toolCall`);n.length>0&&(o=n,s=new Set),a.push(t)}else t.role===`toolResult`?(s.add(t.toolCallId),a.push(t)):t.role===`system`?o.length>0?c.push(t):a.push(t):(t.role===`user`&&l(),a.push(t))}return l(),a}export{L as a,_ as c,g as d,h as f,j as i,f as l,R as n,I as o,r as p,M as r,p as s,U as t,d as u};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./system-one-shared-CGF8IYMZ.js";var n={api:`typesafe-system-one`,label:`System One API`,url:e=>new URL(`systemone`,`${e.baseUrl.replace(/\/+$/u,``)}/`),payload:(e,t)=>({model:e.id,...t}),output:t=>{if(!e(t))throw Error(`System One API returned an unexpected response`);return t}},r=(e,r,i)=>t(n,e,r,i);export{r as classify};
@@ -0,0 +1,17 @@
1
+ <!doctype html>
2
+ <html lang="en" data-theme="mocha">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Inbox</title>
7
+ <script type="module" crossorigin src="/assets/index-hJphFjkO.js"></script>
8
+ <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
9
+ <link rel="modulepreload" crossorigin href="/assets/Effect-BEduymlz.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/preload-helper-mbhLTglw.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/extension-hook-DvcdepgP.js">
12
+ <link rel="stylesheet" crossorigin href="/assets/index-DBHVAvuX.css">
13
+ </head>
14
+ <body>
15
+ <div id="inbox-root"></div>
16
+ </body>
17
+ </html>
package/package.json CHANGED
@@ -1,6 +1,175 @@
1
1
  {
2
2
  "name": "@fungi.computer/grove",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.0.1",
4
+ "author": "Levi <levi@technomancy.dev>",
5
+ "type": "module",
6
+ "description": "Grove: conversations with agents that call your other Apps, for Oyster",
7
+ "dependencies": {
8
+ "@fungi.computer/agar": "0.1.0",
9
+ "@fungi.computer/cairn": "0.0.1",
10
+ "@fungi.computer/caps": "0.0.2",
11
+ "@fungi.computer/knapsack": "0.0.2",
12
+ "@fungi.computer/maosaico": "0.0.1",
13
+ "@fungi.computer/parakeet": "0.0.1",
14
+ "@fungi.computer/shiitake": "0.1.0",
15
+ "@fungi.computer/sigils": "0.0.1",
16
+ "@fungi.computer/stipe": "0.0.1",
17
+ "@fungi.computer/whistle": "0.0.1",
18
+ "@tanstack/react-query": "5.102.8",
19
+ "@tanstack/react-router": "1.170.28",
20
+ "@tanstack/react-virtual": "3.14.10",
21
+ "effect": "4.0.2",
22
+ "eventsource": "5.1.1",
23
+ "lucide-react": "0.460.0",
24
+ "react": "18.3.1",
25
+ "react-dom": "18.3.1",
26
+ "zod": "4.4.3",
27
+ "@fungi.computer/shiitake-extensions": "0.0.1",
28
+ "@fungi.computer/gills": "0.0.1"
29
+ },
30
+ "devDependencies": {
31
+ "@cloudflare/workers-types": "5.20260828.1",
32
+ "@fungi.computer/parakeet-testing": "0.0.1",
33
+ "@ladle/react": "5.1.1",
34
+ "@tailwindcss/vite": "4.2.1",
35
+ "@types/react": "18.3.3",
36
+ "@types/react-dom": "18.3.3",
37
+ "@vitejs/plugin-react": "6.1.1",
38
+ "playwright": "1.62.1",
39
+ "typescript": "5.9.3",
40
+ "undici": "8.11.2",
41
+ "vite": "8.2.2",
42
+ "vitest": "4.1.11",
43
+ "eslint": "10.9.1",
44
+ "jsdom": "29.0.1",
45
+ "@types/node": "24.13.3"
46
+ },
47
+ "license": "MIT",
48
+ "files": [
49
+ "dist",
50
+ "README.md",
51
+ "LICENSE"
52
+ ],
53
+ "repository": {
54
+ "type": "git",
55
+ "url": "git+https://github.com/fungi-computer/grove.git"
56
+ },
57
+ "botanical": {
58
+ "role": "app",
59
+ "operations": {
60
+ "lint": "required",
61
+ "typecheck": "required",
62
+ "build": "required",
63
+ "test": "required",
64
+ "docs": {
65
+ "status": "not-applicable",
66
+ "reason": "Private App"
67
+ },
68
+ "pack": {
69
+ "status": "not-applicable",
70
+ "reason": "Private App"
71
+ },
72
+ "smoke": {
73
+ "status": "not-applicable",
74
+ "reason": "Mounted Hub witness"
75
+ },
76
+ "stranger": {
77
+ "status": "not-applicable",
78
+ "reason": "Private App"
79
+ }
80
+ }
81
+ },
82
+ "fungi": {
83
+ "app": {
84
+ "icon": "chat",
85
+ "capabilities": [
86
+ "agent.list",
87
+ "agent.manage",
88
+ "agent.rename",
89
+ "agent.toolPolicy",
90
+ "agent.read",
91
+ "agent.send",
92
+ "channels.read",
93
+ "channels.personal.manage"
94
+ ],
95
+ "handlers": [],
96
+ "roles": [
97
+ "inbox",
98
+ "sessions"
99
+ ],
100
+ "commands": [
101
+ {
102
+ "id": "new-conversation",
103
+ "title": "New conversation",
104
+ "category": "Conversation",
105
+ "description": "Start a new conversation with this Agent",
106
+ "projections": {
107
+ "slash": {
108
+ "aliases": [
109
+ "new"
110
+ ],
111
+ "order": 20
112
+ },
113
+ "palette": {}
114
+ }
115
+ },
116
+ {
117
+ "id": "permissions",
118
+ "title": "App permissions",
119
+ "category": "Conversation",
120
+ "description": "Review what Grove may access",
121
+ "projections": {
122
+ "slash": {
123
+ "aliases": [
124
+ "permissions"
125
+ ],
126
+ "order": 21
127
+ },
128
+ "palette": {}
129
+ }
130
+ }
131
+ ],
132
+ "displayName": "Grove",
133
+ "backend": {
134
+ "bindings": [
135
+ {
136
+ "name": "INBOX",
137
+ "operations": [
138
+ "page",
139
+ "visit"
140
+ ]
141
+ },
142
+ {
143
+ "name": "AGENTS",
144
+ "operations": [
145
+ "send"
146
+ ]
147
+ }
148
+ ]
149
+ }
150
+ },
151
+ "backendDefinition": "backend/methods.ts",
152
+ "build": {
153
+ "react": true,
154
+ "packageStylesheets": [
155
+ "@fungi.computer/caps",
156
+ "@fungi.computer/parakeet"
157
+ ],
158
+ "stylesheets": [
159
+ "src/grove.css"
160
+ ]
161
+ }
162
+ },
163
+ "scripts": {
164
+ "build": "vite build",
165
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p backend/tsconfig.json --noEmit",
166
+ "test": "vitest run",
167
+ "lint": "eslint src workbench test backend .ladle --max-warnings=0",
168
+ "test:workbench": "node test/workbench.browser.mjs && node test/rails.browser.mjs && node test/agents.browser.mjs && node test/inbox-order.browser.mjs",
169
+ "test:slash": "node test/slash.browser.mjs",
170
+ "workbench:build": "ladle build --outDir ../../.botanical/grove-website-ladle",
171
+ "test:websites": "node --import tsx ../../tooling/repository/scripts/workbench-proofs.mjs --output ../../.botanical/grove-website-ladle --origin-env GROVE_WORKBENCH_URL test/websites.browser.mjs",
172
+ "format:check": "node ../../tooling/repository/scripts/format-package-check.mjs",
173
+ "lint:anti-slop": "node ../../tooling/repository/scripts/lint-package-anti-slop.mjs"
174
+ }
6
175
  }