fimo 2.8.0-staging.4 → 2.8.0-staging.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fimo",
3
- "version": "2.8.0-staging.4",
3
+ "version": "2.8.0-staging.6",
4
4
  "description": "Fimo CLI - create, deploy, and manage Fimo projects",
5
5
  "keywords": [
6
6
  "astro-component"
@@ -194,13 +194,13 @@
194
194
  "devDependencies": {
195
195
  "@clack/core": "^1.2.0",
196
196
  "@clack/prompts": "^1.2.0",
197
- "@fimo/agents-bundle": "2.8.0-staging.4",
198
- "@fimo/api-contracts": "2.8.0-staging.4",
199
- "@fimo/cli-kit": "2.8.0-staging.4",
200
- "@fimo/framework-detect": "2.8.0-staging.4",
201
- "@fimo/routes": "2.8.0-staging.4",
202
- "@fimo/sdk": "2.8.0-staging.4",
203
- "@fimo/tsconfig": "2.8.0-staging.4",
197
+ "@fimo/agents-bundle": "2.8.0-staging.6",
198
+ "@fimo/api-contracts": "2.8.0-staging.6",
199
+ "@fimo/cli-kit": "2.8.0-staging.6",
200
+ "@fimo/framework-detect": "2.8.0-staging.6",
201
+ "@fimo/routes": "2.8.0-staging.6",
202
+ "@fimo/sdk": "2.8.0-staging.6",
203
+ "@fimo/tsconfig": "2.8.0-staging.6",
204
204
  "@types/node": "22.18.6",
205
205
  "agent-install": "^0.0.5",
206
206
  "astro": "^7.1.6",
@@ -213,7 +213,7 @@
213
213
  "typescript": "7.0.2",
214
214
  "vite": "8.2.2",
215
215
  "vitest": "5.0.0",
216
- "wrangler": "4.126.0",
216
+ "wrangler": "4.145.0",
217
217
  "yaml": "2.8.2"
218
218
  },
219
219
  "engines": {
@@ -9,8 +9,10 @@
9
9
  "check": "astro sync && astro check"
10
10
  },
11
11
  "dependencies": {
12
- "fimo": "2.8.0-staging.4",
13
- "fimo-astro": "2.8.0-staging.4"
12
+ "fimo": "2.8.0-staging.6",
13
+ "fimo-analytics": "2.8.0-staging.6",
14
+ "fimo-astro": "2.8.0-staging.6",
15
+ "zod": "^4.4.3"
14
16
  },
15
17
  "devDependencies": {
16
18
  "@astrojs/check": "^0.9.10",
@@ -1,4 +1,5 @@
1
1
  ---
2
+ import Analytics from 'fimo-analytics/astro';
2
3
  import { resolveSeoForPath, toSeoHead, type FimoSEO } from 'fimo/seo';
3
4
 
4
5
  import fimoConfig from '../../.fimo/config.json';
@@ -35,6 +36,7 @@ const head = toSeoHead({
35
36
  </head>
36
37
  <body>
37
38
  <slot />
39
+ <Analytics />
38
40
  </body>
39
41
  </html>
40
42
 
@@ -12,12 +12,14 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "@tanstack/react-query": "^5.80.6",
15
- "fimo": "2.8.0-staging.4",
16
- "fimo-next": "2.8.0-staging.4",
17
- "fimo-react": "2.8.0-staging.4",
15
+ "fimo": "2.8.0-staging.6",
16
+ "fimo-analytics": "2.8.0-staging.6",
17
+ "fimo-next": "2.8.0-staging.6",
18
+ "fimo-react": "2.8.0-staging.6",
18
19
  "next": "^16.3.3",
19
20
  "react": "^19.2.7",
20
- "react-dom": "^19.2.7"
21
+ "react-dom": "^19.2.7",
22
+ "zod": "^4.4.3"
21
23
  },
22
24
  "devDependencies": {
23
25
  "@types/node": "^24.12.0",
@@ -1,3 +1,4 @@
1
+ import { Analytics } from 'fimo-analytics/next';
1
2
  import { FimoProvider } from 'fimo-next';
2
3
  import { toNextMetadata, toNextViewport } from 'fimo-next/seo';
3
4
  import { getFimoSeo } from 'fimo/seo/server';
@@ -15,6 +16,7 @@ export default function RootLayout({ children }: Readonly<{ children: ReactNode
15
16
  <html lang={defaultLocale}>
16
17
  <body>
17
18
  <FimoProvider locale={defaultLocale}>{children}</FimoProvider>
19
+ <Analytics />
18
20
  </body>
19
21
  </html>
20
22
  );
@@ -21,10 +21,11 @@
21
21
  "cn": "0.2.4",
22
22
  "date-fns": "^4.1.0",
23
23
  "embla-carousel-react": "^8.6.0",
24
- "fimo": "2.8.0-staging.4",
25
- "fimo-react": "2.8.0-staging.4",
26
- "fimo-react-router": "2.8.0-staging.4",
27
- "fimo-vite": "2.8.0-staging.4",
24
+ "fimo": "2.8.0-staging.6",
25
+ "fimo-analytics": "2.8.0-staging.6",
26
+ "fimo-react": "2.8.0-staging.6",
27
+ "fimo-react-router": "2.8.0-staging.6",
28
+ "fimo-vite": "2.8.0-staging.6",
28
29
  "input-otp": "^1.4.2",
29
30
  "isbot": "^5",
30
31
  "lucide-react": "^0.577.0",
@@ -1,4 +1,5 @@
1
1
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
2
+ import { Analytics } from 'fimo-analytics/react-router';
2
3
  import { FimoProviders, FimoScripts, loadFimoMetaData, buildFimoMeta, fimoHtmlProps } from 'fimo-react-router';
3
4
  import React from 'react';
4
5
  import type { MetaFunction } from 'react-router';
@@ -46,6 +47,7 @@ export default function AppRoot() {
46
47
  return (
47
48
  <QueryClientProvider client={queryClient}>
48
49
  <Outlet />
50
+ <Analytics />
49
51
  </QueryClientProvider>
50
52
  );
51
53
  }
@@ -11,8 +11,10 @@
11
11
  "prepare": "svelte-kit sync"
12
12
  },
13
13
  "dependencies": {
14
- "fimo": "2.8.0-staging.4",
15
- "fimo-sveltekit": "2.8.0-staging.4"
14
+ "fimo": "2.8.0-staging.6",
15
+ "fimo-analytics": "2.8.0-staging.6",
16
+ "fimo-sveltekit": "2.8.0-staging.6",
17
+ "zod": "^4.4.3"
16
18
  },
17
19
  "devDependencies": {
18
20
  "@sveltejs/kit": "^2.70.2",
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { afterNavigate } from '$app/navigation';
3
3
  import { page } from '$app/state';
4
+ import Analytics from 'fimo-analytics/sveltekit';
4
5
  import { FimoProvider } from 'fimo-sveltekit/components';
5
6
  import type { Snippet } from 'svelte';
6
7
 
@@ -27,3 +28,4 @@
27
28
  <FimoProvider labels={data.labels}>
28
29
  {@render children()}
29
30
  </FimoProvider>
31
+ <Analytics />
@@ -11,13 +11,15 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@tanstack/react-query": "^5.80.6",
14
- "fimo": "2.8.0-staging.4",
15
- "fimo-react": "2.8.0-staging.4",
16
- "fimo-react-router": "2.8.0-staging.4",
17
- "fimo-vite": "2.8.0-staging.4",
14
+ "fimo": "2.8.0-staging.6",
15
+ "fimo-analytics": "2.8.0-staging.6",
16
+ "fimo-react": "2.8.0-staging.6",
17
+ "fimo-react-router": "2.8.0-staging.6",
18
+ "fimo-vite": "2.8.0-staging.6",
18
19
  "react": "^19.2.7",
19
20
  "react-dom": "^19.2.7",
20
- "react-router": "^8.3.0"
21
+ "react-router": "^8.3.0",
22
+ "zod": "^4.4.3"
21
23
  },
22
24
  "devDependencies": {
23
25
  "@types/react": "^19.2.14",
@@ -1,3 +1,4 @@
1
+ import { Analytics } from 'fimo-analytics/react-router';
1
2
  import { FimoProviders } from 'fimo-react-router';
2
3
  import { Outlet, useParams } from 'react-router';
3
4
 
@@ -7,6 +8,7 @@ export function LocaleLayout() {
7
8
  return (
8
9
  <FimoProviders locale={locale}>
9
10
  <Outlet />
11
+ <Analytics />
10
12
  </FimoProviders>
11
13
  );
12
14
  }
@@ -1,86 +0,0 @@
1
- # Inbox
2
-
3
- The Inbox is what a project's agents tell the people on it: a run finished, a
4
- run left work for review, a merge conflicted, or a run stopped and is waiting
5
- for a decision. Only the last one can be acted on from the CLI.
6
-
7
- ```bash
8
- fimo inbox list # unread first, then read
9
- fimo inbox list --topic agent_question --unread
10
- fimo inbox get <notification-id> # the notification, plus the stored form when it is a question
11
- fimo inbox answer <notification-id> --body '<compact answer json>'
12
- ```
13
-
14
- A notification id is the only id you ever hold. The question, its thread, the
15
- run it continues, and the Branch that run kept alive are resolved for you.
16
-
17
- Use `--project <id>` when there is no local `.fimo/project.json`. `--limit`,
18
- `--cursor`, and `--all-pages` page the list. `--archived` reads archived items;
19
- `--unread` stays in the unread stream instead of continuing into read items.
20
-
21
- ## Answering is the person's decision, not yours
22
-
23
- **Never answer a question on someone's behalf.** A question exists because a run
24
- needed a human decision it could not make correctly. Answer only what the person
25
- in front of you explicitly chose.
26
-
27
- 1. `fimo inbox list --topic agent_question --unread --json` to find waiting
28
- questions, then `fimo inbox get <notification-id> --json` for the one to
29
- answer. `data.question.form` is the stored form, verbatim.
30
- 2. **Reproduce that form in the interface you are in** — the native form or
31
- choice UI your harness offers, or a plain enumerated prompt when it offers
32
- none. Keep the title, the description, the step order, the wording of every
33
- question, every option label, the recommended option where one is marked,
34
- image labels and URLs, and each capability's reason. The person is deciding
35
- on what the agent actually asked, not on your summary of it.
36
- 3. Collect only explicit answers. Do not default a step, infer one from earlier
37
- conversation, or fill a step the person skipped. If the person already gave a
38
- complete explicit answer, do not ask again — use what they said.
39
- 4. **Never infer capability approval.** Selecting nothing on a capabilities step
40
- is a deliberate deny-all, and omitting the step entirely is refused by the
41
- CLI rather than read as a denial.
42
- 5. Pass their notes through verbatim. The note is the one part of the answer
43
- only they could write.
44
- 6. Call `fimo inbox answer` once.
45
-
46
- ## The compact answer
47
-
48
- Keyed by the step ids `inbox get` returned, in any order, one entry per step:
49
-
50
- ```json
51
- {
52
- "answers": [
53
- { "stepId": "direction", "selected": ["Editorial studio"], "note": "Keep it calm." },
54
- { "stepId": "access", "selected": [] },
55
- { "stepId": "notes", "note": "Ship on Friday." }
56
- ]
57
- }
58
- ```
59
-
60
- - `selected` holds option **labels**, exactly as the form shows them.
61
- - `note` is free text. A step that offers options may be answered with a note
62
- alone, with a selection alone, or with both.
63
- - A written step (`"type": "text"`) is answered with `note` only.
64
- - A capabilities step needs `selected`, empty or not. `[]` approves none.
65
- - Every step needs its own entry. Nothing is answered by omission.
66
-
67
- `--file <path>` and `--stdin` read the same JSON from a file or a pipe.
68
-
69
- ## What the CLI refuses
70
-
71
- | Code | Why |
72
- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
73
- | `INBOX_ANSWER_INVALID` | Unknown or missing step, unoffered option, too many selections on a single-select, a written step answered by picking, or a capabilities step with no explicit decision |
74
- | `INBOX_NOT_A_QUESTION` | The notification is a run outcome, a review, or a conflict — there is nothing to answer |
75
- | `INBOX_QUESTION_CLOSED` | Already answered, expired, cancelled, or superseded |
76
- | `INBOX_UNKNOWN_TOPIC` | `--topic` is not one of the four Inbox topics |
77
- | `INBOX_INVALID_CURSOR` | `--cursor` was not the `nextCursor` from a previous page |
78
- | `INBOX_NOT_FOUND` | No notification with that id is addressed to you in this project |
79
-
80
- A question is answered once. Answering it starts exactly one continuation run,
81
- and re-sending the same answer never starts a second one.
82
-
83
- ## What the CLI does not do
84
-
85
- Marking read, archiving, restoring, reviewing retained work, and resolving merge
86
- conflicts happen in the Fimo Inbox UI. `fimo inbox` reads and answers.