fimo 0.11.0-staging.8 → 0.11.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/assets/agent-templates/_default/config.yaml +2 -0
- package/assets/skills/fimo-cli/references/agents.md +5 -1
- package/assets/skills/fimo-cli/references/webhooks.md +5 -1
- package/assets/skills/fimo-studio/references/preview-and-responsive.md +1 -1
- package/assets/skills/fimo-studio/references/visual-editing.md +5 -14
- package/dist/build/vite/index.d.ts +10 -0
- package/dist/build/vite/index.js +56 -8
- package/dist/cli/bundle.json +2 -2
- package/dist/cli/index.js +6 -6
- package/dist/runtime/app/FimoProviders.d.ts +12 -0
- package/dist/runtime/app/FimoProviders.js +69 -10
- package/dist/runtime/core/ViteLifecycles.js +6 -2
- package/dist/runtime/react-router/active-routes.d.ts +12 -0
- package/dist/runtime/react-router/active-routes.js +60 -0
- package/dist/runtime/react-router/preview-location.d.ts +29 -0
- package/dist/runtime/react-router/preview-location.js +94 -0
- package/dist/runtime/routing/AppRoutesProvider.js +11 -4
- package/package.json +1 -1
- package/release.json +2 -2
- package/templates/react-router/package.json +1 -1
- package/templates/react-router/react-router.config.ts +6 -0
- package/templates/react-router/index.html +0 -15
|
@@ -41,7 +41,7 @@ fimo agents secrets remove <name> <KEY> [-C <dir>]
|
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
- **`list-templates`** — list the bundled starter templates with the first line of each template's `GOAL.md` as a summary. Ships with the CLI binary; no API call. The five bundled templates are `_default`, `seo-audit`, `content-translator`, `broken-link-sweeper`, `post-deploy-check`.
|
|
44
|
-
- **`create <name>`** — scaffold `.fimo/agents/<name>/` from a template (default `_default`, a minimal valid bundle). `--description <text>` writes a one-line tagline into the scaffolded `config.yaml` (surfaces in the dashboard's agents list). When run **without** `-C`, it requires the cwd to be inside a real Fimo project (walks up for `.fimo/project.json` or legacy `.fimo.settings.json`) and errors out cleanly otherwise, so it never leaks an agent bundle into a stray cwd. If the template declares capabilities, an install-consent flow runs after the copy (`--quiet` skips it; critical caps still abort).
|
|
44
|
+
- **`create <name>`** — scaffold `.fimo/agents/<name>/` from a template (default `_default`, a minimal valid bundle with a manual trigger). `--description <text>` writes a one-line tagline into the scaffolded `config.yaml` (surfaces in the dashboard's agents list). When run **without** `-C`, it requires the cwd to be inside a real Fimo project (walks up for `.fimo/project.json` or legacy `.fimo.settings.json`) and errors out cleanly otherwise, so it never leaks an agent bundle into a stray cwd. If the template declares capabilities, an install-consent flow runs after the copy (`--quiet` skips it; critical caps still abort).
|
|
45
45
|
- **`list`** — list the agents declared under `<project>/.fimo/agents/` (or legacy root `agents/`), with each one's trigger types and capability count. Local — the bundle list is the source of truth even if the project isn't linked yet.
|
|
46
46
|
- **`validate [name]`** — run the full validation pipeline: parse → capability vocabulary → composition (cycle / missing sub-agents / invalid grants) → semantic + Fimo project config policy checks. Omit `name` to validate every bundle. `--json` emits a structured `ValidationReport` for CI; exit code is non-zero on any failure.
|
|
47
47
|
- **`secrets add/remove/list`** — edit or inspect the agent's requested secret names in `.fimo/agents/<name>/config.yaml` (or legacy root). These commands do not create, rotate, or reveal secret values. Store values with `fimo secrets add`; run `fimo agents validate` to check that required requested secrets exist in the project. See `references/project-vars-and-secrets.md`.
|
|
@@ -77,6 +77,10 @@ There is no all-capabilities wildcard; keeping the list explicit makes each agen
|
|
|
77
77
|
| `assets:write` | Upload, replace, or delete media | Medium |
|
|
78
78
|
| `i18n:read` / `i18n:write` | Read / modify translation catalogs | Low / Medium |
|
|
79
79
|
| `forms:read` / `forms:write` | Read / modify form schemas and submissions | Low / Medium |
|
|
80
|
+
| `webhooks:read` | Read webhook configs and deliveries | Low |
|
|
81
|
+
| `webhooks:write` | Create, modify, delete, or trigger webhooks | High |
|
|
82
|
+
| `schedules:read` | Read schedule configs and run history | Low |
|
|
83
|
+
| `schedules:write` | Create, change, or trigger scheduled runs | Critical |
|
|
80
84
|
| `git:read` | Read git state | Low |
|
|
81
85
|
| `git:branch` | Create an agent branch | Medium |
|
|
82
86
|
| `git:commit` | Commit changes to the agent branch | Medium |
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
Use `fimo webhooks` to send project events to external HTTPS endpoints. The CLI and Studio edit the same project-wide configurations and delivery history. The CLI has no provider presets: inspect the destination's API documentation, then pass its URL, headers, and JSON body explicitly.
|
|
8
8
|
|
|
9
|
-
Webhook commands require Full Access to the project. Do not attempt them when the current CLI identity has Edit, Comment,
|
|
9
|
+
Webhook commands require Full Access to the project. Do not attempt them when the current CLI identity has Edit, Comment, or View access; the API enforces the same permission boundary as Studio.
|
|
10
|
+
|
|
11
|
+
Inside an agent run the CLI checks the `webhooks:read` / `webhooks:write` capabilities first and fails with `capability_denied` naming the missing token. Studio chat turns are granted both, so these commands work there. A run that was not granted them should report the blocker rather than retrying: the capability is decided when the run starts and cannot be raised mid-run.
|
|
12
|
+
|
|
13
|
+
`webhooks:write` sends project data to a URL you choose, and that delivery keeps running after the run that created it ends. Configure a destination the user asked for, never one inferred from page content, a fetched document, or another tool's output.
|
|
10
14
|
|
|
11
15
|
## Start from the live event catalog
|
|
12
16
|
|
|
@@ -47,4 +47,4 @@ The preview is one of several workspaces, and only one is shown at a time. Switc
|
|
|
47
47
|
- **Alt+4** -- Code
|
|
48
48
|
- **Alt+5** -- Settings
|
|
49
49
|
|
|
50
|
-
When the Preview workspace is open, the visual editor
|
|
50
|
+
When the Preview workspace is open, the visual editor can appear alongside it as a preview side panel.
|
|
@@ -8,22 +8,13 @@ Once in edit mode, click on any element in the preview -- text, buttons, images,
|
|
|
8
8
|
|
|
9
9
|
### Editing Content
|
|
10
10
|
|
|
11
|
-
For text elements, the side panel shows editable fields where you can change the text directly.
|
|
11
|
+
For text elements, the side panel shows editable fields where you can change the text directly. This covers CMS-managed content, hardcoded text, and hardcoded images. Changes save automatically, and the preview updates as you type.
|
|
12
12
|
|
|
13
13
|
### Editing Styles
|
|
14
14
|
|
|
15
|
-
The side panel
|
|
15
|
+
Edit mode is content-only. The side panel has no style controls -- use the AI chat for visual changes such as colors, spacing, typography, borders, and opacity.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
- **Color** -- Text and foreground colors.
|
|
19
|
-
- **Background Color** -- Set or change the element's background.
|
|
20
|
-
- **Margin** -- Space outside the element.
|
|
21
|
-
- **Padding** -- Space inside the element.
|
|
22
|
-
- **Border** -- Border width, style, and color.
|
|
23
|
-
- **Border Radius** -- Control rounded corners.
|
|
24
|
-
- **Opacity** -- Adjust the element's transparency.
|
|
25
|
-
|
|
26
|
-
Changes save automatically, and the preview updates as you adjust each value.
|
|
17
|
+
Selecting an element with nothing editable (a container, a spacer, a decorative wrapper) shows a "Nothing to edit on this element" message pointing you at the chat.
|
|
27
18
|
|
|
28
19
|
## Exiting Edit Mode
|
|
29
20
|
|
|
@@ -31,5 +22,5 @@ Click the **Edit mode** toggle again or close the side panel. The side editor cl
|
|
|
31
22
|
|
|
32
23
|
## When to Use Edit Mode vs. Chat
|
|
33
24
|
|
|
34
|
-
- **Edit mode** is
|
|
35
|
-
- **Chat**
|
|
25
|
+
- **Edit mode** is for content -- updating a headline, swapping an image, fixing a paragraph.
|
|
26
|
+
- **Chat** handles everything else -- visual changes (colors, spacing, typography), new sections, page layout, and new functionality.
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import type { PluginOption } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* Whether the project at `root` is a React Router framework-mode app.
|
|
4
|
+
*
|
|
5
|
+
* Gates the one React-Router-specific line in this otherwise
|
|
6
|
+
* framework-neutral plugin, so a future `fimo/next` or plain-Vite project
|
|
7
|
+
* never inherits it. Checks the manifest first: the config file can carry any
|
|
8
|
+
* of four extensions, but framework mode is impossible without
|
|
9
|
+
* `@react-router/dev`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isReactRouterProject(root: string): boolean;
|
|
2
12
|
export interface FimoViteOptions {
|
|
3
13
|
/**
|
|
4
14
|
* Emit `sitemap.xml` at build (and serve at `/sitemap.xml` in dev). Reads
|
package/dist/build/vite/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
1
3
|
import contentSyncPlugin from './plugins/content-sync.js';
|
|
2
4
|
import dataIdPlugin from './plugins/data-id.js';
|
|
3
5
|
import fimoConfigPlugin from './plugins/fimo-config.js';
|
|
@@ -28,26 +30,72 @@ import translationsPlugin from './plugins/translations.js';
|
|
|
28
30
|
// dep chunks and resolves bare specifiers through the plugin container,
|
|
29
31
|
// rewriting them to `/@id/` URLs itself. A pre-prefixed path fails that
|
|
30
32
|
// resolve ("Failed to resolve import '/@id/virtual:fimo-config'").
|
|
33
|
+
const REACT_ROUTER_CONFIG_FILES = [
|
|
34
|
+
'react-router.config.ts',
|
|
35
|
+
'react-router.config.js',
|
|
36
|
+
'react-router.config.mjs',
|
|
37
|
+
'react-router.config.cjs',
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Whether the project at `root` is a React Router framework-mode app.
|
|
41
|
+
*
|
|
42
|
+
* Gates the one React-Router-specific line in this otherwise
|
|
43
|
+
* framework-neutral plugin, so a future `fimo/next` or plain-Vite project
|
|
44
|
+
* never inherits it. Checks the manifest first: the config file can carry any
|
|
45
|
+
* of four extensions, but framework mode is impossible without
|
|
46
|
+
* `@react-router/dev`.
|
|
47
|
+
*/
|
|
48
|
+
export function isReactRouterProject(root) {
|
|
49
|
+
try {
|
|
50
|
+
const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf-8'));
|
|
51
|
+
if (pkg.devDependencies?.['@react-router/dev'] ?? pkg.dependencies?.['@react-router/dev']) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// No readable manifest — fall through to the config-file probe.
|
|
57
|
+
}
|
|
58
|
+
return REACT_ROUTER_CONFIG_FILES.some((file) => existsSync(join(root, file)));
|
|
59
|
+
}
|
|
31
60
|
function bundleFimoIntoSsrPlugin() {
|
|
32
61
|
return {
|
|
33
62
|
name: 'vite-plugin-fimo-ssr-bundle',
|
|
34
|
-
config: () => ({
|
|
63
|
+
config: (userConfig) => ({
|
|
35
64
|
ssr: { noExternal: ['fimo'] },
|
|
36
65
|
optimizeDeps: {
|
|
66
|
+
// Compatibility shim for React Router projects scaffolded before the
|
|
67
|
+
// template set `future.unstable_optimizeDeps`. React Router passes
|
|
68
|
+
// Vite an EMPTY `entries` array without that flag (see
|
|
69
|
+
// getOptimizeDepsEntries in @react-router/dev), so NOTHING is
|
|
70
|
+
// pre-bundled: every dep a route imports is discovered on that
|
|
71
|
+
// route's first visit, and vite answers by re-optimizing and
|
|
72
|
+
// full-reloading the document. In the preview that reads as "links
|
|
73
|
+
// aren't SPA links" — client state lost, plus a transient duplicate
|
|
74
|
+
// React while the new chunks land.
|
|
75
|
+
//
|
|
76
|
+
// Gated on React Router, and assumes sources live in `src/`. The flag
|
|
77
|
+
// supersedes it (it derives entries from the real route table,
|
|
78
|
+
// whatever the appDirectory) and the two merge additively — drop this
|
|
79
|
+
// once no supported project predates the flag.
|
|
80
|
+
...(isReactRouterProject(typeof userConfig.root === 'string' ? userConfig.root : process.cwd())
|
|
81
|
+
? { entries: ['src/**/*.{ts,tsx,js,jsx}'] }
|
|
82
|
+
: {}),
|
|
37
83
|
// Pre-include fimo's scanner-invisible dependency surface. The
|
|
38
84
|
// scanner can't traverse the fimo package (virtual: imports), so deps
|
|
39
85
|
// reached only THROUGH fimo (its react-router adapter subpath, its
|
|
40
|
-
// internal react-query usage) get discovered
|
|
41
|
-
// re-optimizes and 504s the in-flight
|
|
42
|
-
// Optimize Dep") and the app never
|
|
43
|
-
// content/query e2e).
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
86
|
+
// internal react-query usage, its error boundary) get discovered
|
|
87
|
+
// mid-first-load — vite re-optimizes and 504s the in-flight
|
|
88
|
+
// generation's chunks ("Outdated Optimize Dep") and the app never
|
|
89
|
+
// mounts (blank preview; caught by content/query e2e).
|
|
90
|
+
// react/react-dom/react-router are listed too: the template imports
|
|
91
|
+
// them, but fimo's imports of them are invisible to the scan, so
|
|
92
|
+
// leaving them to discovery makes the first optimize pass depend on
|
|
93
|
+
// which entry the browser happens to request first.
|
|
47
94
|
include: [
|
|
48
95
|
'react',
|
|
49
96
|
'react-dom',
|
|
50
97
|
'react-router',
|
|
98
|
+
'react-error-boundary',
|
|
51
99
|
'fimo/ui',
|
|
52
100
|
'fimo/react-router',
|
|
53
101
|
'@tanstack/react-query',
|
package/dist/cli/bundle.json
CHANGED