fimo 0.2.2 → 0.2.3-experimental.1782118113229

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.
@@ -8,6 +8,8 @@
8
8
  | **Custom domain** | A hostname the user owns (e.g. `blog.example.com`), attached via DNS | Premium | Many | `project_domains` table |
9
9
  | **Registered domain** | A new domain bought _through_ Fimo via the registrar reseller | Premium + feature flag | Many | `registered_domains` table |
10
10
 
11
+ > **A renamed URL or custom domain only resolves once the site is published** (`fimo deploy --publish`); before that it returns "Project Not Found".
12
+
11
13
  ## Commands
12
14
 
13
15
  ```bash
@@ -106,6 +108,7 @@ Propagation: typically 15–30 minutes, up to 48 hours rarely.
106
108
 
107
109
  ## Common errors
108
110
 
111
+ - **"Project Not Found" on a new URL or custom domain.** The route exists but the site was never published — run `fimo deploy --publish`.
109
112
  - **"Custom domains require a Premium plan."** — the operation is paid; the message includes the org billing URL. Free users can still run `list`, `rename-default`, `suggest-default`, `search`, and `pricing`.
110
113
  - **"Domain purchase is not enabled on this account."** — the registered-domains feature flag is off on this API instance. Contact support.
111
114
  - **"This URL is not available."** — slug or hostname collides with another project or is reserved.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "bundled": true,
3
3
  "bundler": "esbuild",
4
- "bundledAt": "2026-06-19T11:24:36.610Z",
5
- "cliVersion": "0.2.2",
4
+ "bundledAt": "2026-06-22T08:48:42.757Z",
5
+ "cliVersion": "0.2.3-experimental.1782118113229",
6
6
  "external": [
7
7
  "oxc-parser",
8
8
  "fsevents"
package/dist/cli/index.js CHANGED
@@ -18242,7 +18242,8 @@ async function copyTemplate(templateRoot, targetDir) {
18242
18242
  pinFimoDependency(targetDir);
18243
18243
  }
18244
18244
  function pinFimoDependency(targetDir) {
18245
- const pin = resolveFimoPin({ devPackageRoot: CLI_ROOT });
18245
+ const useLocalPackage = process.env.FIMO_LOCAL_PACKAGE === "1";
18246
+ const pin = resolveFimoPin({ devPackageRoot: useLocalPackage ? CLI_ROOT : null });
18246
18247
  if (!pin) {
18247
18248
  return;
18248
18249
  }
@@ -93640,7 +93641,7 @@ var init_migrate_apply = __esm({
93640
93641
  });
93641
93642
 
93642
93643
  // src/cli/commands/migrate.ts
93643
- import { spawnSync as spawnSync3 } from "node:child_process";
93644
+ import { spawnSync as spawnSync4 } from "node:child_process";
93644
93645
  import fs31 from "node:fs";
93645
93646
  import path33 from "node:path";
93646
93647
  import { fileURLToPath as fileURLToPath7 } from "node:url";
@@ -93891,7 +93892,7 @@ function runBundledMigrationScript(scriptName, args) {
93891
93892
  process.exitCode = 1;
93892
93893
  return;
93893
93894
  }
93894
- const result = spawnSync3(process.execPath, [scriptPath, ...args], {
93895
+ const result = spawnSync4(process.execPath, [scriptPath, ...args], {
93895
93896
  stdio: "inherit"
93896
93897
  });
93897
93898
  if (result.error) {
@@ -103252,6 +103253,55 @@ async function gitCredentialCommand(operation) {
103252
103253
  }
103253
103254
  __name(gitCredentialCommand, "gitCredentialCommand");
103254
103255
 
103256
+ // src/cli/commands/install.ts
103257
+ init_dist();
103258
+ init_skills();
103259
+ import { spawnSync as spawnSync3 } from "node:child_process";
103260
+ var PACKAGE = "fimo";
103261
+ function detectPackageManager3(userAgent = process.env.npm_config_user_agent ?? "") {
103262
+ const name = userAgent.split("/", 1)[0];
103263
+ if (name === "pnpm" || name === "yarn" || name === "bun") {
103264
+ return name;
103265
+ }
103266
+ return "npm";
103267
+ }
103268
+ __name(detectPackageManager3, "detectPackageManager");
103269
+ function globalAddCommand(pm) {
103270
+ switch (pm) {
103271
+ case "pnpm":
103272
+ return { cmd: "pnpm", args: ["add", "-g", PACKAGE] };
103273
+ case "yarn":
103274
+ return { cmd: "yarn", args: ["global", "add", PACKAGE] };
103275
+ case "bun":
103276
+ return { cmd: "bun", args: ["add", "-g", PACKAGE] };
103277
+ default:
103278
+ return { cmd: "npm", args: ["install", "-g", PACKAGE] };
103279
+ }
103280
+ }
103281
+ __name(globalAddCommand, "globalAddCommand");
103282
+ async function installCommand(options = {}) {
103283
+ if (!options.skipCli) {
103284
+ const { cmd, args } = globalAddCommand(detectPackageManager3());
103285
+ const printable = `${cmd} ${args.join(" ")}`;
103286
+ ui.info({ command: "install", message: `Installing the fimo CLI globally (${printable})\u2026` });
103287
+ const result = spawnSync3(cmd, args, { stdio: "inherit" });
103288
+ if (result.status === 0) {
103289
+ ui.ok({ command: "install", headline: "fimo CLI installed globally." });
103290
+ } else {
103291
+ ui.warn({
103292
+ command: "install",
103293
+ message: `Couldn't install fimo globally with ${cmd}. Install it manually: ${printable}. Continuing with skills\u2026`
103294
+ });
103295
+ }
103296
+ }
103297
+ await skillsInstallCommand(options);
103298
+ ui.info({
103299
+ command: "install",
103300
+ message: "Next: run `fimo login` to connect your account, then `fimo create` to start a project."
103301
+ });
103302
+ }
103303
+ __name(installCommand, "installCommand");
103304
+
103255
103305
  // src/cli/commands/integrations.ts
103256
103306
  init_dist6();
103257
103307
  import path30 from "node:path";
@@ -106409,6 +106459,11 @@ program.name("fimo").description("Fimo CLI").version(computeVersionString()).opt
106409
106459
  program.command("login").description("Sign in through your browser").action(loginCommand);
106410
106460
  program.command("logout").description("Revoke the current session and clear local credentials").action(logoutCommand);
106411
106461
  program.command("whoami").description("Show the current signed-in user").action(whoamiCommand);
106462
+ program.command("install").description("Install the fimo CLI globally and set up skills for your AI coding tools").option("--agents <list>", "Comma-separated list of agent IDs (e.g. claude-code,cursor)").option(
106463
+ "-a, --agent <id>",
106464
+ "Repeatable: pass once per agent (-a claude-code -a cursor)",
106465
+ (value, prev2 = []) => [...prev2, value]
106466
+ ).option("--mode <mode>", "Skill install method: symlink | copy (default: symlink)").option("-y, --yes", "Skip prompts (non-interactive)").option("--skip-cli", "Skip the global CLI install; only set up skills").action(installCommand);
106412
106467
  registerProjectSecretsCommands(program);
106413
106468
  registerIntegrationsCommands(program);
106414
106469
  registerChannelsCommands(program);
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "fimo",
3
- "version": "0.2.2",
3
+ "version": "0.2.3-experimental.1782118113229",
4
4
  "description": "Fimo CLI - create, deploy, and manage Fimo projects",
5
5
  "bin": {
6
- "fimo": "./dist/cli/index.js"
6
+ "fimo": "dist/cli/index.js"
7
7
  },
8
8
  "files": [
9
9
  "dist/",
package/release.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "source": "npm",
3
- "apiUrl": "https://api.fimo.ai",
4
- "webUrl": "https://fimo.ai"
3
+ "apiUrl": "https://api.staging.fimo.team",
4
+ "webUrl": "https://staging.fimo.team"
5
5
  }
@@ -1,28 +1,21 @@
1
1
  #!/usr/bin/env node
2
- // Bumps the Fimo CLI version + creates the matching scoped git tag.
2
+ // Bumps the Fimo CLI version in apps/cli/package.json NO git tag, NO commit.
3
3
  //
4
- // Tag scheme: scoped per-app, e.g. `cli@1.0.0`. This is the convention the
5
- // monorepo will use as it adopts semver releases for individual apps -
6
- // `fimovm@x.y.z` will follow the same shape once that package starts
7
- // shipping. Scoped tags avoid the ambiguity of a global `v1.0.0` in a repo
8
- // with multiple independently-versioned artifacts.
4
+ // Under the branch-driven release model the version lives in
5
+ // apps/cli/package.json and you bump it in a PR. CI creates the
6
+ // `cli@<version>` git tag when it publishes `@latest` on a `production`
7
+ // merge, so this script must NOT create a tag that would collide with
8
+ // CI's tag-guard (the publish would skip, thinking the version already
9
+ // shipped).
9
10
  //
10
11
  // Usage:
11
12
  // pnpm -F fimo release:bump patch
12
13
  // pnpm -F fimo release:bump minor
13
14
  // pnpm -F fimo release:bump major
14
- // pnpm -F fimo release:bump prerelease --preid next
15
15
  // pnpm -F fimo release:bump 1.2.3 # explicit version
16
16
  //
17
- // What it does:
18
- // 1. Validates the working tree is clean (no half-finished changes get
19
- // caught in the release commit).
20
- // 2. Delegates to `pnpm version` for the semver bump + commit + tag -
21
- // same battle-tested machinery as `npm version`, just plumbed with our
22
- // `cli@` tag prefix and a conventional-commit message.
23
- //
24
- // Tags this produces are LOCAL only. Push them with `git push origin cli@x.y.z`
25
- // - that's the trigger for the CI release workflow (P0-7).
17
+ // After bumping, commit the change in your PR. Merging it through to
18
+ // `production` is what publishes `@latest` and creates the tag.
26
19
 
27
20
  import { spawnSync } from 'node:child_process';
28
21
  import { dirname, resolve } from 'node:path';
@@ -50,22 +43,10 @@ if (!VALID_INCREMENTS.has(increment) && !isExplicitVersion) {
50
43
  process.exit(1);
51
44
  }
52
45
 
53
- const status = spawnSync('git', ['status', '--porcelain'], { encoding: 'utf8' });
54
- if (status.status !== 0) {
55
- console.error('[cli/bump] git status failed; are you in a git checkout?');
56
- process.exit(status.status ?? 1);
57
- }
58
- if (status.stdout.trim() !== '') {
59
- console.error('[cli/bump] working tree is not clean. Commit or stash before bumping.');
60
- console.error(status.stdout);
61
- process.exit(1);
62
- }
63
-
64
- console.log(`[cli/bump] increment: ${increment}`);
65
- console.log(`[cli/bump] cwd: ${CLI_ROOT}`);
66
-
67
- const versionArgs = ['version', '--tag-version-prefix=cli@', '--message=chore(cli): release cli@%s', ...args];
68
-
46
+ // Bump package.json ONLY — `--no-git-tag-version` skips both the commit and
47
+ // the tag. CI owns the `cli@<version>` tag (created on the @latest publish).
48
+ // Use pnpm (not npm) npm chokes on the `workspace:*` devDeps.
49
+ const versionArgs = ['version', '--no-git-tag-version', ...args];
69
50
  console.log(`[cli/bump] $ pnpm ${versionArgs.join(' ')}`);
70
51
  const result = spawnSync('pnpm', versionArgs, { cwd: CLI_ROOT, stdio: 'inherit' });
71
52
  if (result.status !== 0) {
@@ -73,5 +54,5 @@ if (result.status !== 0) {
73
54
  process.exit(result.status ?? 1);
74
55
  }
75
56
 
76
- console.log('[cli/bump] done. Push the tag with:');
77
- console.log(' git push origin develop && git push origin cli@<new-version>');
57
+ console.log('[cli/bump] bumped apps/cli/package.json (no tag, no commit).');
58
+ console.log('[cli/bump] commit it in your PR merging to `production` publishes @latest + tags it.');
@@ -13,7 +13,7 @@
13
13
  // 3. Bakes a channel-appropriate release.json (lib/release-core.mjs) —
14
14
  // staging URLs for experimental/staging, prod for latest. Never a tunnel.
15
15
  // 4. For prerelease channels, synthesizes a disposable X.Y.Z-<tag>.<n> version.
16
- // 5. Runs `npm publish --tag <distTag>` (with --provenance in CI).
16
+ // 5. Runs `npm publish --tag <distTag>` (no --provenance strapi/fimo is private).
17
17
  // 6. Restores package.json + removes the transient release.json.
18
18
  //
19
19
  // `npm publish` triggers prepublishOnly (clean → build → build:bundle), so the
@@ -106,11 +106,11 @@ try {
106
106
  // 3. Bake release.json (allowlist-enforced).
107
107
  writeReleaseJson(CLI_ROOT, channel);
108
108
 
109
- // 4. Publish.
109
+ // 4. Publish. No --provenance: sigstore provenance requires a PUBLIC source
110
+ // repo, and strapi/fimo is private (npm returns 422 otherwise). Trusted
111
+ // Publishing (OIDC auth) works regardless of repo visibility — it's only
112
+ // the attestation that's public-repo-only.
110
113
  const publishArgs = ['publish', '--access', 'public', '--tag', channel.distTag];
111
- if (isCI) {
112
- publishArgs.push('--provenance');
113
- }
114
114
  if (dryRun) {
115
115
  publishArgs.push('--dry-run');
116
116
  }
@@ -22,7 +22,7 @@
22
22
  "cmdk": "^1.1.1",
23
23
  "date-fns": "^4.1.0",
24
24
  "embla-carousel-react": "^8.6.0",
25
- "fimo": "0.2.2",
25
+ "fimo": "0.2.3-experimental.1782118113229",
26
26
  "input-otp": "^1.4.2",
27
27
  "isbot": "^5",
28
28
  "lucide-react": "^0.577.0",
@@ -53,11 +53,5 @@
53
53
  "tw-animate-css": "^1.4.0",
54
54
  "typescript": "5.9.3",
55
55
  "vite": "^8.0.13"
56
- },
57
- "pnpm": {
58
- "onlyBuiltDependencies": [
59
- "esbuild",
60
- "fimo"
61
- ]
62
56
  }
63
57
  }
@@ -1,3 +1,6 @@
1
- allowBuilds:
2
- esbuild: true
3
- fimo: true
1
+ # Build approval is handled at install time by fimopm's
2
+ # `--dangerously-allow-all-builds`. Do NOT add `allowBuilds` /
3
+ # `onlyBuiltDependencies` here: pnpm refuses to have both an allowlist and
4
+ # allow-all-builds (ERR_PNPM_CONFIG_CONFLICT_BUILT_DEPENDENCIES), which makes
5
+ # `fimopm install` install nothing — the project's `fimo` dep goes missing and
6
+ # the deploy build fails to resolve `fimo/vite`.