fimo 0.20.1-staging.1 → 0.21.0-staging.2
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 +1 -1
- package/assets/skills/fimo-cli/SKILL.md +2 -1
- package/assets/skills/fimo-cli/references/agents.md +52 -5
- package/assets/skills/fimo-cli/references/branches.md +4 -4
- package/assets/skills/fimo-cli/references/deploy.md +2 -2
- package/assets/skills/fimo-cli/references/domains.md +12 -0
- package/assets/skills/fimo-cli/references/projects.md +7 -7
- package/assets/skills/fimo-migration/SKILL.md +51 -30
- package/assets/skills/fimo-migration/references/media.md +12 -8
- package/assets/skills/fimo-migration/references/qa.md +4 -3
- package/assets/skills/fimo-migration/references/workers/content-planner.md +33 -4
- package/assets/skills/fimo-migration/references/workers/validator.md +10 -0
- package/assets/skills/fimo-migration/references/workers.md +19 -10
- package/assets/skills/fimo-migration/references/workflow.md +29 -11
- package/assets/skills/fimo-studio/references/billing-and-credits.md +16 -1
- package/dist/cli/bundle.json +1 -1
- package/dist/cli/index.js +85 -81
- package/package.json +1 -1
- package/templates/react-router/package.json +1 -1
package/README.md
CHANGED
|
@@ -128,7 +128,8 @@ These fire at specific moments in the project lifecycle. **Surface them proactiv
|
|
|
128
128
|
- **When the user wants to try something risky / explore a redesign without touching the live site** → suggest a feature Branch: `fimo checkout -b <name>` gives an isolated Branch + DB + preview. Deploy previews there, then `fimo merge` it back and `fimo publish`. See `references/branches.md`.
|
|
129
129
|
- **After completing or safely preserving the user's main work, when a confirmed Fimo platform failure still materially blocks the task after one safe recovery attempt, or a confirmed missing capability blocks completion or forces a fragile or heavily manual workaround** → use the built-in `supportReport` tool. Do not wait for the user to ask and do not stop after only describing the gap. See `references/support.md`.
|
|
130
130
|
- **After the first successful `fimo deploy`** → suggest `fimo invite` if the project involves multiple people. Typical roles: `edit` for developers/content editors, `view` or `comment` for clients/stakeholders, `full` for project leads. See `references/invite.md`.
|
|
131
|
-
- **
|
|
131
|
+
- **After the first successful `fimo deploy --publish`** (not the automatic first preview) → if there is no custom domain and the free default `*.fimo.site` slug still looks generated or was never explicitly chosen, offer to find a cleaner free subdomain. It needs no DNS. Never claim one without explicit user confirmation: suggest candidates, let the user choose, then rename it. Skip this nudge if the user already chose the default slug, attached a custom domain, or declined. See `references/domains.md` § Offer a cleaner default URL after first publish.
|
|
132
|
+
- **When the user wants to modify the URL of their website** → walk through `references/domains.md`. The CLI surface covers renaming the Fimo-provided subdomain (`fimo domains rename-default`, free), attaching a domain they already own (`fimo domains add`, Premium), and buying a new domain through Fimo (`fimo domains buy`, Premium).
|
|
132
133
|
|
|
133
134
|
## Anti-Patterns
|
|
134
135
|
|
|
@@ -22,7 +22,7 @@ fimo validate # project build and codegen checks
|
|
|
22
22
|
fimo deploy # push to main — this also wires the declared triggers
|
|
23
23
|
fimo agents run <name> # trigger a manual run → sessionId
|
|
24
24
|
fimo agents runs <name> # see past sessions
|
|
25
|
-
fimo agents report <name> # print a run's
|
|
25
|
+
fimo agents report <name> # print a run's outcome summary
|
|
26
26
|
fimo agents logs <name> # stream a session's log
|
|
27
27
|
```
|
|
28
28
|
|
|
@@ -56,6 +56,52 @@ integrations:
|
|
|
56
56
|
An explicit map is restrictive: only entries set to `true` are available. An omitted or disabled integration cannot be
|
|
57
57
|
used. See `references/integrations.md` for project setup, auth, and provider-specific commands.
|
|
58
58
|
|
|
59
|
+
## How a cloud run ends
|
|
60
|
+
|
|
61
|
+
Fimo creates one task Branch and environment for a cloud run, tells the agent their names, and manages their lifecycle.
|
|
62
|
+
The agent works only in that checkout. Extra branches, worktrees, and `git push` are unsupported and cannot be cleaned up
|
|
63
|
+
or handed off correctly.
|
|
64
|
+
|
|
65
|
+
- **Merge** when the work is ready for the target Branch. Fimo applies it or keeps any conflict for review.
|
|
66
|
+
- **Retain** when a person should review the work, the run stops or fails, the agent needs an answer, or recovery may be
|
|
67
|
+
necessary. Fimo keeps the task Branch for a follow-up run.
|
|
68
|
+
- **Discard** when none of the run's work should be applied, including when it made no useful changes or deliberately
|
|
69
|
+
abandoned an approach. This permanently deletes the task Branch and every change in it without review.
|
|
70
|
+
|
|
71
|
+
If the agent exits without a decision, Fimo retains the task Branch. `fimo deploy` inside a run may build a preview of
|
|
72
|
+
that Branch for inspection or screenshots; it does not finish or hand off the run.
|
|
73
|
+
|
|
74
|
+
The run report is a concise outcome summary: what changed, what was verified, and what is still blocked. It is not a
|
|
75
|
+
chronological account, and it should not use decorative emoji.
|
|
76
|
+
|
|
77
|
+
When a run cannot continue correctly without a decision from a project member, it may call `ask_user` instead. The
|
|
78
|
+
question goes to the Fimo Inbox, the current invocation ends, and Fimo keeps the same task Branch and environment until
|
|
79
|
+
an authorized member answers. The answer starts one ordinary continuation in the same run thread; the original model
|
|
80
|
+
process does not wait.
|
|
81
|
+
|
|
82
|
+
Use `ask_user` sparingly, especially from scheduled agents:
|
|
83
|
+
|
|
84
|
+
- Ask only for a genuinely blocking human decision. Prefer a safe reversible default when one exists.
|
|
85
|
+
- Group every known blocker into one form with 1–4 related steps. Give it a 1–3 sentence description that says where
|
|
86
|
+
the work stands and why the decision matters or what it unlocks; keep implementation detail in the run.
|
|
87
|
+
- Use choices for compact text options. Use cards only when an option benefits from an image or a richer title and
|
|
88
|
+
subtitle. Use assets when the image itself is the answer, and tables when options need the same structured comparison.
|
|
89
|
+
- Do not repeat a question or request already waiting in prior run history.
|
|
90
|
+
- Use `finish_run` with `retain` when the work is ready for review but no answer is required.
|
|
91
|
+
|
|
92
|
+
An agent may include one multi-select `capabilities` step in that same form to request public Fimo capabilities it does
|
|
93
|
+
not currently hold. Group related tokens in one request. Selected tokens apply only to the continuation started by that
|
|
94
|
+
answer; unselected tokens are denied, selecting none is valid, and the blocked invocation never gains new authority.
|
|
95
|
+
Internal runtime abilities, integration setup, and OAuth are not capability requests.
|
|
96
|
+
|
|
97
|
+
At the start of a run, `run_history` provides bounded summaries of earlier outcomes and work still awaiting a person. An agent
|
|
98
|
+
may also maintain `.fimo/agents/<name>/MEMORY.md` as an ordinary reviewed file for durable facts that change future
|
|
99
|
+
behavior. Keep it under 4 KB, record no secrets or run log, and prune stale entries before adding new ones.
|
|
100
|
+
|
|
101
|
+
When three or more earlier runs still await a question answer, review, conflict resolution, or recovery, the agent
|
|
102
|
+
normally starts no new independent work. Unless the current trigger explicitly asks it to proceed anyway, it makes no
|
|
103
|
+
changes and finishes with `discard` and a brief report of what is waiting.
|
|
104
|
+
|
|
59
105
|
## Capabilities
|
|
60
106
|
|
|
61
107
|
Capabilities describe the opt-in Fimo and network actions an agent may take. Managed agents always receive project
|
|
@@ -88,9 +134,10 @@ There is no all-capabilities wildcard; keeping the list explicit makes each agen
|
|
|
88
134
|
| `runtime:long_running` | Run beyond the default time limit | High |
|
|
89
135
|
| `runtime:auto_merge` | Auto-merge trivial proposed branches | Critical |
|
|
90
136
|
|
|
91
|
-
If a capability is missing
|
|
92
|
-
|
|
93
|
-
|
|
137
|
+
If a public Fimo capability is missing and the work is genuinely blocked, the agent can request it through `ask_user`.
|
|
138
|
+
Fimo grants only the selected subset to the next invocation in that run thread. Unknown capabilities, internal runtime
|
|
139
|
+
abilities, and capabilities the run already holds are refused before the question is stored. For durable access on
|
|
140
|
+
ordinary future runs, add the capability to `capabilities.yaml`, validate, and deploy the bundle.
|
|
94
141
|
|
|
95
142
|
Studio chat and project-bound Slack turns receive `fimo:logs:read`. Autonomous agents receive it only when their
|
|
96
143
|
`capabilities.yaml` declares it; use `fimo logs` with the deploy guidance when diagnosing a failed preview.
|
|
@@ -113,7 +160,7 @@ fimo agents logs <name> [--session <id>] [--project <id>] [-C <dir>]
|
|
|
113
160
|
|
|
114
161
|
- **`run <name>`** — fire the agent's `manual` trigger on the server; prints a `sessionId` on success. Skips with `no-manual-trigger` when `config.yaml` declares none, or `trigger-not-wired` when the push-to-main sync recorded the trigger but refused to wire it (see the wiring note below). **Pre-flight drift check**: if `.fimo/agents/<name>/` (or the legacy root bundle) has uncommitted git changes, the command refuses — the server would dispatch the _deployed_ version, so deploy first. Pass `--skip-drift-check` to dispatch the deployed bundle anyway. Defaults `--branch` to `main`; legacy `--env` remains an alias.
|
|
115
162
|
- **`runs <name>`** — list past run sessions for the agent in a compact table (id, started, duration, status, trigger, Branch, cost). Default `--limit 20`; `--branch` filters to one Branch. The response's legacy `env` field is still present for API compatibility.
|
|
116
|
-
- **`report <name>`** — print a run's **report**:
|
|
163
|
+
- **`report <name>`** — print a run's **report**: its durable outcome summary (for a read-only agent like `seo-audit` this _is_ the audit; for a write agent it's a "what I changed" summary). A run that never finalised falls back to its last message. With no `--session`, the most recent run for `<name>` is used (combine with `--branch` to scope); `--session <id>` targets a specific run. Output is raw markdown, so it stays readable in the terminal and pipes cleanly (e.g. `fimo agents report seo-audit | glow`). If the run hasn't finished, or produced no message, it says so (and shows the stop reason when there is one). This is the command to read what a run actually produced — see the `logs` note below.
|
|
117
164
|
- **`logs <name>`** — stream a run's log (defaults to the latest session; `--session <id>` targets one). **Note:** the log-streaming endpoint is still a server-side stub at time of writing — the command prints a placeholder rather than real log lines. To read a finished run's output today, use `report`.
|
|
118
165
|
|
|
119
166
|
## How triggers get wired
|
|
@@ -35,7 +35,7 @@ fimo --branch <name> <command> # peek at another Branch for one command (does n
|
|
|
35
35
|
| `fimo diff [from] [to]` | `git diff` | Two-Branch diff across all surfaces. Defaults `from` = current Branch, `to` = `main`. `--surface <name>` limits to one; `--json`; `--no-color`. |
|
|
36
36
|
| `fimo status` | `git status` | Multi-surface status for the current Branch vs its parent. See below. |
|
|
37
37
|
| `fimo merge <from>` | `git merge` | Merge another Branch into the current one (multi-surface, atomic, interactive conflict resolver). See below. |
|
|
38
|
-
| `fimo publish` | — |
|
|
38
|
+
| `fimo publish` | — | Publish the already-synced `main` revision with a stable Fimo publication ID. See "Publishing" below. |
|
|
39
39
|
|
|
40
40
|
All of these accept the global `--branch` override; legacy `--env` remains an alias. `diff`, `status`, `merge`, and `publish` additionally accept `-C, --cwd <dir>` to point at a project directory.
|
|
41
41
|
|
|
@@ -59,7 +59,7 @@ fimo preview url # canonical URL to open / screenshot the feat/s
|
|
|
59
59
|
fimo status # see what changed vs main, surface by surface
|
|
60
60
|
fimo checkout main # back to main
|
|
61
61
|
fimo merge feat/seo # merge the Branch back into main (resolve conflicts)
|
|
62
|
-
fimo publish --
|
|
62
|
+
fimo publish --label "Homepage launch" --notes "Initial production publish"
|
|
63
63
|
fimo branch -d feat/seo # tear down the feature Branch
|
|
64
64
|
```
|
|
65
65
|
|
|
@@ -97,10 +97,10 @@ Syncs the current Branch's data plane from its parent (or `--from <ancestor>`).
|
|
|
97
97
|
|
|
98
98
|
Two different "go live" mechanisms — don't confuse them:
|
|
99
99
|
|
|
100
|
-
- **`fimo publish --
|
|
100
|
+
- **`fimo publish [--label <text>] [--notes <md>]`** — publishes the already-synced `main` revision. Fimo assigns the immutable publication ID; the label and notes are optional annotations. `--skip-validate` is an operator override.
|
|
101
101
|
- **`fimo deploy --publish`** — the project-publish path. Pushes the current `main` code and flips the project live in one shot. See `references/deploy.md`.
|
|
102
102
|
|
|
103
|
-
Use `fimo publish`
|
|
103
|
+
Use `fimo publish` when `main` is already synced; use `fimo deploy --publish` when the local revision still needs to be pushed first. Both only run from `main`.
|
|
104
104
|
|
|
105
105
|
## Anti-patterns
|
|
106
106
|
|
|
@@ -113,9 +113,9 @@ There's nothing special about this — it's the same `fimo deploy` you'd run lat
|
|
|
113
113
|
Two different "go live" mechanisms — pick deliberately:
|
|
114
114
|
|
|
115
115
|
- **`fimo deploy --publish`** — push what's on `main` now and flip the project live in one shot. The simple "ship it" path. Runs from `main` only.
|
|
116
|
-
- **`fimo publish --
|
|
116
|
+
- **`fimo publish [--label <text>] [--notes <md>]`** — publish the already-synced `main` revision without pushing. Fimo assigns the immutable publication ID; a label and notes are optional human annotations. See `references/branches.md`.
|
|
117
117
|
|
|
118
|
-
When unsure, `fimo deploy --publish`
|
|
118
|
+
When unsure, use `fimo deploy --publish` so the local revision is pushed before it goes live. Use `fimo publish` when `main` is already synced.
|
|
119
119
|
|
|
120
120
|
## Markdown for AI agents
|
|
121
121
|
|
|
@@ -56,6 +56,18 @@ When a user says "I want to change my website's URL," ask which case fits:
|
|
|
56
56
|
|
|
57
57
|
If they aren't sure, run `fimo domains suggest-default` first — it's free, takes one step, and a good fallback if they don't want to commit to a domain purchase.
|
|
58
58
|
|
|
59
|
+
## Offer a cleaner default URL after first publish
|
|
60
|
+
|
|
61
|
+
After the project's first successful `fimo deploy --publish`, offer a cleaner free `*.fimo.site` URL when there is no custom domain and the current default slug still looks generated or was never explicitly chosen. This is not part of the automatic first preview. Skip the offer if the user already chose the default slug, attached a custom domain, or declined.
|
|
62
|
+
|
|
63
|
+
The default URL is free and needs no DNS. A custom domain is the separate Premium workflow above. Renaming the default slug changes a public URL, so never silently claim a suggestion:
|
|
64
|
+
|
|
65
|
+
1. Run `fimo domains suggest-default --base "<brand>" --json` to get candidates.
|
|
66
|
+
2. Show the candidates and ask the user to choose one explicitly.
|
|
67
|
+
3. After confirmation, run `fimo domains rename-default <slug>` or `fimo domains suggest-default --pick <slug>`.
|
|
68
|
+
|
|
69
|
+
The renamed URL resolves after a successful publish.
|
|
70
|
+
|
|
59
71
|
## Pricing & how money moves
|
|
60
72
|
|
|
61
73
|
The CLI never charges directly. Two distinct money paths:
|
|
@@ -18,7 +18,7 @@ fimo projects rename <name> [projectId] [-C <dir>] # set seo.siteName in the l
|
|
|
18
18
|
- **`create`** — identical to `fimo init` (create-new path); see `references/init.md`.
|
|
19
19
|
- **`clone`** — clone a remote Fimo project's git repo to your machine and write the local `.fimo/project.json` and agent files. Use `fimo clone <projectId>` when scripting or when the ID is known. In an interactive terminal, bare `fimo clone` opens a project picker for the active org; JSON mode and non-TTY shells require an explicit project ID and fail fast instead of prompting. By default it clones `main`; pass `--branch <name>` to clone a specific Branch. The legacy `--env <name>` spelling remains a compatibility alias. The target directory defaults to the project display name/name, or pass `[dir]` explicitly.
|
|
20
20
|
- **`delete`** — destructive; prompts unless `-y`. Removes the remote project.
|
|
21
|
-
- **`publish` / `unpublish`** — toggle the project's public visibility. `publish` flips the current `main` state live (the same "go live" as `fimo deploy --publish`, minus the git push).
|
|
21
|
+
- **`publish` / `unpublish`** — toggle the project's public visibility. `publish` flips the current `main` state live (the same "go live" as `fimo deploy --publish`, minus the git push).
|
|
22
22
|
- **`rename`** — edits only the linked local project immediately. It requires a project marker in the cwd, and if you pass a `[projectId]` that doesn't match the linked project it errors and exits 1 (so you can't rename a different project). It writes `seo.siteName` into the current or legacy project config; commit and run `fimo deploy` to reconcile the remote `displayName` and deploy the new site name.
|
|
23
23
|
|
|
24
24
|
## Top-level clone shortcut
|
|
@@ -41,12 +41,12 @@ fimo rename "<Site Name>" # local edit: set seo.siteName in the project c
|
|
|
41
41
|
|
|
42
42
|
`fimo rename` sets the **site name** (`seo.siteName`) in the local project config — it is a local edit, not an immediate remote update, so it requires a follow-up commit + `fimo deploy` to take effect. Deploy reconciles the project's remote `displayName` with the committed site name while pushing the config. See `references/init.md` and `references/deploy.md`.
|
|
43
43
|
|
|
44
|
-
##
|
|
44
|
+
## Publish commands
|
|
45
45
|
|
|
46
|
-
| Command
|
|
47
|
-
|
|
|
48
|
-
| `fimo deploy --publish`
|
|
49
|
-
| `fimo projects publish`
|
|
50
|
-
| `fimo publish
|
|
46
|
+
| Command | Effect |
|
|
47
|
+
| ----------------------- | ----------------------------------------------------------------------- |
|
|
48
|
+
| `fimo deploy --publish` | Push current `main` + flip the project live in one shot. |
|
|
49
|
+
| `fimo projects publish` | Flip the project live (no git push). |
|
|
50
|
+
| `fimo publish` | Flip the already-synced `main` revision live; optional label and notes. |
|
|
51
51
|
|
|
52
52
|
See `references/deploy.md` and `references/branches.md` for the full picture.
|
|
@@ -76,11 +76,20 @@ the selected pinned CLI. Give workers the project id, environment, exact CLI
|
|
|
76
76
|
invocation, and verification command. Generated `.fimo` JSON without a
|
|
77
77
|
successful platform read is not initialization.
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
Pick the setup path from the evidence:
|
|
80
|
+
|
|
81
|
+
- **Source-backed, same framework** — copy or `git worktree` the source into the
|
|
82
|
+
target directory first, then run `fimo link -C <target> --env <env>`
|
|
83
|
+
(`fimo link <project-id> -C <target> --env <env>` when the owner supplied an
|
|
84
|
+
id). Link creates or selects the project, keeps the source's code, framework,
|
|
85
|
+
git history, and `origin`, initializes a repository when the copy has none,
|
|
86
|
+
and adds only the Fimo dependency, `.fimo/project.json`, the `fimo` remote,
|
|
87
|
+
and `.fimo/config.json#runtime.framework`. It never overlays a template, so
|
|
88
|
+
the target must already contain the source.
|
|
89
|
+
- **Empty target, or an explicit framework conversion** — `fimo init` with the
|
|
90
|
+
chosen `--framework`, or `fimo migrate init <url> <dir>` for a URL crawl.
|
|
91
|
+
Both refuse a non-empty target and write nothing when they refuse.
|
|
92
|
+
|
|
84
93
|
If authentication, organization selection, project creation, environment
|
|
85
94
|
resolution, linking, or the verification read fails, stop before workers and
|
|
86
95
|
report the exact failed command and setup requirement.
|
|
@@ -134,8 +143,9 @@ report the exact failed command and setup requirement.
|
|
|
134
143
|
Private APIs and CMSs require a user-provided export or a narrowly scoped
|
|
135
144
|
server-side credential. Never read credentials from browser code or copy
|
|
136
145
|
them into browser code, migration artifacts, or reports. Target-project
|
|
137
|
-
authentication does not grant source access.
|
|
138
|
-
|
|
146
|
+
authentication does not grant source access. If the source API URL or access
|
|
147
|
+
is missing or unreachable, stop and ask the user for it; do not guess, replace
|
|
148
|
+
the content, or mark the lane complete.
|
|
139
149
|
- Model content before page code. Generated JSON is not imported content.
|
|
140
150
|
- Model editorial content Fimo-natively: blocks for structured or repeatable
|
|
141
151
|
sections, richtext for rich bodies, references for categories, authors,
|
|
@@ -162,8 +172,9 @@ report the exact failed command and setup requirement.
|
|
|
162
172
|
- Do not report completion until the QA gate passes or every failed check is
|
|
163
173
|
present in the migration report.
|
|
164
174
|
- Import through the data-plane commands and verify locally before deployment.
|
|
165
|
-
|
|
166
|
-
|
|
175
|
+
Deployment is not QA evidence. After successful local QA, follow the
|
|
176
|
+
new-project or existing-project rule in Completion and deployment. Never
|
|
177
|
+
publish without an explicit user request.
|
|
167
178
|
|
|
168
179
|
## Orient and route
|
|
169
180
|
|
|
@@ -204,14 +215,16 @@ The target is its own Fimo project directory. The client source checkout is
|
|
|
204
215
|
read-only evidence: never run setup inside it, never modify it, and never
|
|
205
216
|
hand-write a `.fimo/project.json` marker to fake a link.
|
|
206
217
|
|
|
207
|
-
`fimo migrate init` is the
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
218
|
+
`fimo migrate init` is the setup gate for an empty target; a target that
|
|
219
|
+
already holds the copied source is set up with `fimo link` instead (see
|
|
220
|
+
Initialized target precondition). `fimo migrate init` validates the target and
|
|
221
|
+
CLI auth, then delegates project selection and creation to the standard
|
|
222
|
+
`fimo init` flow (same options, no separate creation path), and returns a setup
|
|
223
|
+
receipt covering auth, the target link, the migration directory, and readiness.
|
|
224
|
+
It fails with a structured error when auth is missing, the target is missing or
|
|
225
|
+
invalid, or the project or organization is inaccessible. Both forms need a real
|
|
226
|
+
ID supplied by the owner — without one, stop with an unresolved owner action
|
|
227
|
+
instead of inventing an ID:
|
|
215
228
|
|
|
216
229
|
- Link an owner-supplied (empty) project:
|
|
217
230
|
`fimo migrate init <target-dir> --project-id <projectId> --framework <framework>`
|
|
@@ -225,8 +238,8 @@ React Router scaffold.
|
|
|
225
238
|
|
|
226
239
|
Setup scaffolds the target and pushes its initial commit; that is the only
|
|
227
240
|
remote write it performs — it never pushes schemas, uploads assets, or imports
|
|
228
|
-
entries.
|
|
229
|
-
|
|
241
|
+
entries. Setup itself never deploys or publishes; the one new-project preview
|
|
242
|
+
deploy happens only after successful local QA (see Completion and deployment).
|
|
230
243
|
|
|
231
244
|
## Command surface
|
|
232
245
|
|
|
@@ -253,12 +266,16 @@ Commands that perform actual data writes, all requiring the linked target:
|
|
|
253
266
|
`fimo singles update`, `fimo labels set|set-many`, `fimo forms push`.
|
|
254
267
|
- `fimo migrate init` (source-backed form): the project link/creation and
|
|
255
268
|
initial commit push described above.
|
|
269
|
+
- `fimo link`: project creation or selection plus the in-place adoption of a
|
|
270
|
+
copied source target.
|
|
256
271
|
- `fimo deploy` / `fimo publish` — owner-approved only.
|
|
257
272
|
|
|
258
273
|
## Migration loop
|
|
259
274
|
|
|
260
|
-
1. Run
|
|
261
|
-
|
|
275
|
+
1. Run the setup path from "Initialized target precondition" and inspect the
|
|
276
|
+
initialized target before any worker edits it. A `fimo link` adoption keeps
|
|
277
|
+
the source framework; the `fimo init` / `fimo migrate init` paths choose the
|
|
278
|
+
target framework through the same canonical option as
|
|
262
279
|
`fimo init`: pass the detected source framework for a source-backed
|
|
263
280
|
migration, the framework the user explicitly chose for a conversion, and —
|
|
264
281
|
for a URL-only or rebuild migration — the framework the user selected (ask
|
|
@@ -276,15 +293,19 @@ Commands that perform actual data writes, all requiring the linked target:
|
|
|
276
293
|
all structural target code, and must pass the framework gate in
|
|
277
294
|
`references/workers/framework.md` before content data and code workers
|
|
278
295
|
start. Worker prompts and worker reports are plain text.
|
|
279
|
-
3. The content planner reads every content-bearing source and consumer
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
296
|
+
3. The content planner reads every content-bearing source and consumer. When
|
|
297
|
+
content comes from an API, it traces the active application client and
|
|
298
|
+
retrieves the complete accessible dataset before pushing schemas. It then
|
|
299
|
+
writes complete schemas and import payloads, recording source items,
|
|
300
|
+
consumers, batches, and unresolved behavior in the text plan rather than a
|
|
301
|
+
second orchestration format.
|
|
302
|
+
4. Each discovery lane reports active media in its own surface. After the
|
|
303
|
+
runtime/framework, routes/SEO, and content discovery receipts are terminal,
|
|
304
|
+
the coordinator performs one fan-in: combine and deduplicate them into the
|
|
305
|
+
complete media-obligation list. Give only that list to the media worker; do
|
|
306
|
+
not require a content-planner rescan. Once it returns every mapping, patch
|
|
307
|
+
code and payload consumers. Start data after the asset gate and content code
|
|
308
|
+
only after its imported records read back successfully.
|
|
288
309
|
5. Fan in the workers' plain-text reports. Compare their claimed files with
|
|
289
310
|
`git diff`, their Fimo writes with read-back CLI queries, and their source
|
|
290
311
|
coverage with the content plan. Every source item must be migrated,
|
|
@@ -94,12 +94,16 @@ If a media asset cannot be downloaded or uploaded:
|
|
|
94
94
|
- include a suggested action such as re-exporting the asset folder or providing
|
|
95
95
|
credentials
|
|
96
96
|
|
|
97
|
-
##
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
## Media obligations
|
|
98
|
+
|
|
99
|
+
Each discovery lane reports active media in its own surface: runtime/framework
|
|
100
|
+
files, routes and SEO, or content and API data. After every discovery receipt is
|
|
101
|
+
terminal, the coordinator combines and deduplicates those findings into the
|
|
102
|
+
complete media-obligation list. This consolidated list is the media worker's
|
|
103
|
+
only input; do not make the content planner rescan the whole application.
|
|
104
|
+
|
|
105
|
+
Record each obligation's source location, consuming route/entry, and intended
|
|
106
|
+
target field or node. Give it a stable identity that includes its field or
|
|
107
|
+
rich-text node path; a shared label or source URL is not unique. The media
|
|
108
|
+
worker cannot report complete until every obligation has an uploaded or
|
|
105
109
|
duplicate Fimo mapping, or an explicit unresolved/unsupported disposition.
|
|
@@ -44,9 +44,10 @@ items.
|
|
|
44
44
|
- Every media item referenced by routes, CMS entries, SEO, or forms is uploaded to
|
|
45
45
|
the Fimo media library (Fimo asset id/URL) or has an unresolved item. A local
|
|
46
46
|
`public/` copy is not an upload mapping.
|
|
47
|
-
- Every
|
|
48
|
-
richtext/Tiptap image nodes, has a mapping or
|
|
49
|
-
worker's completion claim alone is not
|
|
47
|
+
- Every obligation in the coordinator's consolidated media list, including
|
|
48
|
+
schema media fields and nested richtext/Tiptap image nodes, has a mapping or
|
|
49
|
+
explicit disposition; the media worker's completion claim alone is not
|
|
50
|
+
evidence. Reconcile the list against every discovery lane's media findings.
|
|
50
51
|
- Every visible form has a Fimo replacement, a preserved third-party
|
|
51
52
|
integration, or an unsupported note. A form became Fimo-native only when the
|
|
52
53
|
Fimo form matches the source behavior 1:1.
|
|
@@ -5,9 +5,8 @@ handoff. Do not import entries or rewrite application consumers.
|
|
|
5
5
|
|
|
6
6
|
1. Inspect every content-bearing source and consumer: Markdown/MDX bodies and
|
|
7
7
|
frontmatter, JSX/TSX modules, hardcoded arrays and objects, imports, data
|
|
8
|
-
clients, and call sites.
|
|
9
|
-
|
|
10
|
-
credential; never recover or copy secret values.
|
|
8
|
+
clients, and call sites. Identify whether each active source is a file,
|
|
9
|
+
inline value, API, CMS, or a mix before designing schemas.
|
|
11
10
|
2. Classify each value as collection content, single content, an
|
|
12
11
|
editor-visible label, or application-owned code. Repetition is evidence,
|
|
13
12
|
not an automatic collection rule. Assistive text, identifiers, and values
|
|
@@ -54,11 +53,41 @@ A construct is unresolved only when it genuinely cannot be migrated. Include
|
|
|
54
53
|
its exact source, user-visible impact, reason, and owner action; "custom" is not
|
|
55
54
|
a reason.
|
|
56
55
|
|
|
56
|
+
## API-backed content
|
|
57
|
+
|
|
58
|
+
Retrieve API content during this planning pass, before schemas are pushed or
|
|
59
|
+
data workers start:
|
|
60
|
+
|
|
61
|
+
1. Trace the application's active client, base-URL environment key, endpoints,
|
|
62
|
+
queries, pagination, locales, publication states, relations, media, and
|
|
63
|
+
consuming call sites. Server rendering may hide requests from the browser,
|
|
64
|
+
so browser traffic is fallback evidence rather than the source of truth.
|
|
65
|
+
2. Prove access with one read-only request. Read public APIs directly. Private
|
|
66
|
+
APIs require an owner-provided export or narrowly scoped server-side
|
|
67
|
+
credential; never recover, log, persist, or copy secret values. If the base
|
|
68
|
+
URL or required access is missing or unreachable, stop and ask the user for
|
|
69
|
+
it before planning schemas or payloads.
|
|
70
|
+
3. Fetch every required page, locale, and referenced record. For a few bounded
|
|
71
|
+
endpoints, direct requests are enough. For repeated or paginated reads,
|
|
72
|
+
write a temporary source-specific read-only script under
|
|
73
|
+
`.fimo/migration/tmp/`, then spot-check counts and references.
|
|
74
|
+
4. Preserve the retrieved responses as source evidence and payload inputs;
|
|
75
|
+
normalize transport details only. Do not create a provider registry or a
|
|
76
|
+
universal CMS model.
|
|
77
|
+
5. Design Fimo schemas from both the retrieved values and the code that uses
|
|
78
|
+
them. Never invent replacement content when source access is unavailable.
|
|
79
|
+
|
|
80
|
+
Once retrieval and consumer tracing are complete, push schemas, prepare
|
|
81
|
+
payloads, and let the coordinator fan out assets and one data batch per
|
|
82
|
+
schema/locale. Runtime, routes, locales, and other independent workers continue
|
|
83
|
+
in parallel while retrieval runs.
|
|
84
|
+
|
|
57
85
|
## Optional extraction helpers
|
|
58
86
|
|
|
59
87
|
Start with `rg` and targeted reads. A bounded read-only helper under
|
|
60
88
|
`.fimo/migration/tmp/` may parse repeated frontmatter, JSON/YAML exports, or
|
|
61
|
-
literal structures
|
|
89
|
+
literal structures, or retrieve repeated API pages while preserving source
|
|
90
|
+
identities. Spot-check its output.
|
|
62
91
|
The agent still owns classification, schema design, and consumer tracing. Do
|
|
63
92
|
not build a generic codemod system or let the helper write Fimo data or app
|
|
64
93
|
code.
|
|
@@ -19,6 +19,16 @@ Verify:
|
|
|
19
19
|
- build and representative browser interactions pass; and
|
|
20
20
|
- every unsupported item names its impact and owner action.
|
|
21
21
|
|
|
22
|
+
`fimo deploy` readiness proves only that the server stays up and a
|
|
23
|
+
representative page responds. After an approved deploy, browser QA must:
|
|
24
|
+
|
|
25
|
+
- open one representative route per route family and exercise one key interaction;
|
|
26
|
+
- fail on route `5xx`, blank or reloading pages, or required module, API, or runtime failures;
|
|
27
|
+
- inspect browser evidence and `fimo logs --json` before editing; and
|
|
28
|
+
- run at most one focused repair and redeploy, then report remaining failures unresolved.
|
|
29
|
+
|
|
30
|
+
Optional development-tool failures do not fail a rendered, stable application.
|
|
31
|
+
|
|
22
32
|
Return a plain-text report with status, duration, checks run, counts, failing
|
|
23
33
|
source items, and suggested bounded repair surface. The coordinator may run one
|
|
24
34
|
repair for that surface and rerun validation. It does not restart every worker
|
|
@@ -19,7 +19,7 @@ Plan a lane only when the source proves that surface exists:
|
|
|
19
19
|
| routes | route modules, redirects, SEO and host behavior | immediately |
|
|
20
20
|
| content planner | schemas, content payloads, and content handoff | immediately |
|
|
21
21
|
| locales | locale setup and translated UI copy | immediately |
|
|
22
|
-
| assets/forms | media uploads and form behavior | after
|
|
22
|
+
| assets/forms | media uploads and form behavior | after discovery fan-in |
|
|
23
23
|
| content data | one schema/locale import | after assets |
|
|
24
24
|
| content code | listed consuming files | after its data read-back |
|
|
25
25
|
| validator | read-only final checks | after all writers |
|
|
@@ -35,15 +35,19 @@ read-back.
|
|
|
35
35
|
- **runtime** preserves the detected framework, router, runtime, dependencies,
|
|
36
36
|
provider setup, environment wiring, and provider-specific configuration. An
|
|
37
37
|
unclear or unsupported setup produces a question, not a silent conversion.
|
|
38
|
+
It reports active media found in its surface.
|
|
38
39
|
- **routes** preserves every route, redirect, 404, SEO/OG/social output,
|
|
39
40
|
sitemap, robots, feeds, headers, and other observable host behavior. A file
|
|
40
|
-
that consumes migrated content belongs to its later content-code worker.
|
|
41
|
+
that consumes migrated content belongs to its later content-code worker. It
|
|
42
|
+
reports active route and SEO media.
|
|
41
43
|
- **content planner** discovers and models all editable content, labels,
|
|
42
|
-
consumers, schemas, payloads, media
|
|
43
|
-
|
|
44
|
+
consumers, schemas, payloads, media in its content/API surface, and execution
|
|
45
|
+
batches. It first retrieves any API-backed source through the application's
|
|
46
|
+
real client contract; it never imports entries or rewrites consumers. Read
|
|
44
47
|
`references/workers/content-planner.md`.
|
|
45
|
-
- **assets/forms**
|
|
46
|
-
|
|
48
|
+
- **assets/forms** receives only the coordinator's consolidated, deduplicated
|
|
49
|
+
media-obligation list, uploads it, and returns mappings for code and payload
|
|
50
|
+
consumers. It replaces a form or integration only when Fimo preserves its
|
|
47
51
|
behavior end to end; otherwise it preserves or reports it.
|
|
48
52
|
- **content data and code** execute the planner handoff without rediscovering
|
|
49
53
|
or redesigning it. Read `references/workers/content-execution.md`.
|
|
@@ -62,12 +66,17 @@ other after it. Do not add a metadata format for a small overlap.
|
|
|
62
66
|
write.
|
|
63
67
|
2. Start runtime/routes/content-planner/locales together, or the framework
|
|
64
68
|
worker plus content planner/locales in conversion mode.
|
|
65
|
-
3.
|
|
66
|
-
|
|
69
|
+
3. Wait for every discovery receipt to become terminal, then perform one fan-in
|
|
70
|
+
of runtime/framework, routes/SEO, and content media findings. Combine and
|
|
71
|
+
deduplicate them into the complete media-obligation list; do not run another
|
|
72
|
+
discovery pass.
|
|
73
|
+
4. Give only that consolidated list to assets/forms. Wait for its mappings
|
|
74
|
+
before code or payload consumers replace source references.
|
|
75
|
+
5. Start data workers only after the asset gate and, in conversion mode, the
|
|
67
76
|
framework gate.
|
|
68
|
-
|
|
77
|
+
6. Start each code worker only after its own imported records read back as
|
|
69
78
|
non-empty. A build over empty data proves nothing.
|
|
70
|
-
|
|
79
|
+
7. Start the independent validator only after every writer has returned.
|
|
71
80
|
|
|
72
81
|
Each prompt names the worker's source paths, exact target ownership, applicable
|
|
73
82
|
reference above, and dependencies. Each report states status, duration, source
|
|
@@ -45,8 +45,16 @@ Classify the available evidence:
|
|
|
45
45
|
|
|
46
46
|
For private APIs or CMSs, ask for a user-provided export or a narrowly scoped
|
|
47
47
|
server-side credential. Never recover credentials from browser bundles or copy
|
|
48
|
-
them into migration artifacts.
|
|
49
|
-
|
|
48
|
+
them into migration artifacts. If the source API URL or access is missing or
|
|
49
|
+
unreachable, stop and ask the user for it; do not guess or continue with
|
|
50
|
+
replacement content.
|
|
51
|
+
|
|
52
|
+
For API-backed content, trace the active client and call sites in source code,
|
|
53
|
+
prove one read, then retrieve all required pages, locales, relations, and media
|
|
54
|
+
during content planning. Use direct requests for bounded endpoints or a
|
|
55
|
+
temporary read-only script for repeated and paginated reads. Do not wait for
|
|
56
|
+
schema or code workers, and do not rely on browser traffic when SSR or build
|
|
57
|
+
time fetches may hide the requests.
|
|
50
58
|
|
|
51
59
|
For URL-only migrations, run `fimo migrate <url> [dir]` and inspect the
|
|
52
60
|
generated `.fimo/migrations/current/` files as source evidence. Do not copy
|
|
@@ -58,16 +66,18 @@ The coordinator launches only the workers supported by the source:
|
|
|
58
66
|
|
|
59
67
|
- **runtime**: preserve the detected framework, router, runtime, dependencies,
|
|
60
68
|
provider configuration, and environment wiring. A framework conversion needs
|
|
61
|
-
an explicit user choice.
|
|
69
|
+
an explicit user choice. Report active media found in this surface.
|
|
62
70
|
- **routes/SEO**: preserve one target route per source route, redirects, 404,
|
|
63
71
|
metadata, OG/social output, sitemap, robots, and other observable behavior.
|
|
72
|
+
Report active media found in this surface.
|
|
64
73
|
- **content planner**: discover content, labels, data sources, consumers, and
|
|
65
74
|
schemas; push schemas and prepare content payloads. It does not rewrite page
|
|
66
|
-
code or import every entry itself.
|
|
75
|
+
code or import every entry itself. Report active media found in content and
|
|
76
|
+
API data; do not rescan unrelated runtime or route surfaces.
|
|
67
77
|
- **locales**: configure locales and migrate translated UI-visible copy when
|
|
68
78
|
the source has it.
|
|
69
|
-
- **assets/forms**: after
|
|
70
|
-
and preserve, replace, or report forms and integrations.
|
|
79
|
+
- **assets/forms**: after the discovery fan-in, upload the consolidated media
|
|
80
|
+
obligations and preserve, replace, or report forms and integrations.
|
|
71
81
|
|
|
72
82
|
When the user explicitly chose a framework conversion, one framework
|
|
73
83
|
conversion worker replaces the runtime and routes lanes and owns all
|
|
@@ -82,17 +92,22 @@ Workers may write the application inside their ownership. They do not need a
|
|
|
82
92
|
JSON plan or receipt. If two workers need the same file, name one owner and run
|
|
83
93
|
the other after it.
|
|
84
94
|
|
|
85
|
-
## Phase 3:
|
|
95
|
+
## Phase 3: Discovery fan-in and content planning
|
|
86
96
|
|
|
87
97
|
The planner follows `references/workers/content-planner.md`, plus
|
|
88
98
|
`references/content.md`, `references/decision.md`, and
|
|
89
99
|
`references/import-contract.md`. Its text plan and payloads must be complete
|
|
90
|
-
before Phase 4;
|
|
100
|
+
before Phase 4; this includes retrieving API-backed source data and tracing its
|
|
101
|
+
consumers. Data workers must not rediscover unrelated source files.
|
|
102
|
+
|
|
103
|
+
After the runtime/framework, routes/SEO, and content discovery receipts are all
|
|
104
|
+
terminal, the coordinator combines and deduplicates their media findings into
|
|
105
|
+
the complete media-obligation list. This is the media worker's only input.
|
|
91
106
|
|
|
92
107
|
## Phase 4: Media, forms, and integrations
|
|
93
108
|
|
|
94
|
-
1. Account for every
|
|
95
|
-
and richtext/Tiptap image nodes, plus route, SEO, and form media.
|
|
109
|
+
1. Account for every consolidated media obligation, including schema media
|
|
110
|
+
fields and richtext/Tiptap image nodes, plus route, SEO, and form media.
|
|
96
111
|
2. Upload media through Fimo and replace references only after the upload is
|
|
97
112
|
confirmed. A local `public/` copy or source URL is not an imported asset.
|
|
98
113
|
3. Preserve third-party integrations unless Fimo reproduces their exact
|
|
@@ -139,4 +154,7 @@ Use `complete` only when required checks pass, `complete-with-unresolved` when
|
|
|
139
154
|
the app works and every gap is explicit, and `draft-only` when import or
|
|
140
155
|
verification is incomplete.
|
|
141
156
|
|
|
142
|
-
All checks are local.
|
|
157
|
+
All checks are local. Deployment is not QA evidence. After successful local QA,
|
|
158
|
+
run one plain `fimo deploy` for a newly created project unless the user opted out
|
|
159
|
+
or `FIMO_MIGRATION_NO_DEPLOY=1`; for an existing linked project, offer deploy and
|
|
160
|
+
wait for approval. Never publish automatically.
|