#82 by GitHub stars

nocobase/nocobase

NocoBase is the open-source platform for building, running, and evolving business systems with AI. Agents write the code and do the work, NocoBase provides the foundation and governance, and people make the decisions.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

packages/app/app-cli-client/tests/fixtures/packaged-cli/skills/nb-studio-cli/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/app/app-skills/skills/nocobase-app-development/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/app/app-skills/skills/nocobase-app-plugin-development/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/app/app-skills/skills/nocobase-app-upgrade/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/app/app-skills/skills/nocobase-deployment/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/examples/app-plugin-cli-example/skills/nocobase-app-plugin-cli-example/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/examples/app-plugin-repository-example/skills/nocobase-app-plugin-repository-example/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/examples/app-plugin-skills-example/skills/nocobase-app-plugin-skills-example/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/libs/db/skills/nocobase-db/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/libs/drive/skills/nocobase-drive/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/libs/realtime/skills/nocobase-realtime/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-agent-sessions/skills/nocobase-app-plugin-agent-sessions/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-agents/skills/nocobase-app-plugin-agents/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-api-keys/skills/nocobase-app-plugin-api-keys/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-authentication/skills/nocobase-app-plugin-authentication/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-authorization/skills/nocobase-app-plugin-authorization/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-authz-default-access/skills/nocobase-app-plugin-authz-default-access/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-authz-restriction-rules/skills/nocobase-app-plugin-authz-restriction-rules/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-authz-sharing-rules/skills/nocobase-app-plugin-authz-sharing-rules/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-concurrency/skills/nocobase-app-plugin-concurrency/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-database-explorer/skills/nocobase-app-plugin-database-explorer/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-demo-mode/skills/nocobase-app-plugin-demo-mode/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Local scripts

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-file/skills/nocobase-app-plugin-file/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-foundation/skills/nocobase-app-plugin-foundation/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-i18n/skills/nocobase-app-plugin-i18n/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-mail/skills/nocobase-app-plugin-mail/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-notification-in-app/skills/nocobase-app-plugin-notification-in-app/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-notification-web-push/skills/nocobase-app-plugin-notification-web-push/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-notification/skills/nocobase-app-plugin-notification/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-projects/skills/nocobase-app-plugin-projects/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-scheduler/skills/nocobase-app-plugin-scheduler/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-template-print/skills/nocobase-app-plugin-template-print/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/plugins/app-plugin-users/skills/nocobase-app-plugin-users/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

packages/tools/create-plugin/template/skills/nocobase-app-plugin-__NOCOBASE_SHORT_NAME__/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

skills/nocobase-app-installer/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

skills/nocobase-app-plugin-development/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

skills/nocobase-create-app/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 44119842fbf9

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 44119842fbf9ac7f3024d55b7306354d2863a01b

git clone --filter=blob:none --no-checkout https://github.com/nocobase/nocobase.git .hotskills/nocobase-nocobase && git -C .hotskills/nocobase-nocobase checkout --detach 44119842fbf9ac7f3024d55b7306354d2863a01b # Copy each selected skill directory from .hotskills/nocobase-nocobase into .claude/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/nocobase/nocobase.git .hotskills/nocobase-nocobase && git -C .hotskills/nocobase-nocobase checkout --detach 44119842fbf9ac7f3024d55b7306354d2863a01b # Copy each selected skill directory from .hotskills/nocobase-nocobase into .agents/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/nocobase/nocobase.git .hotskills/nocobase-nocobase && git -C .hotskills/nocobase-nocobase checkout --detach 44119842fbf9ac7f3024d55b7306354d2863a01b # Copy each selected skill directory from .hotskills/nocobase-nocobase into .cursor/skills/<skill-name>/
24.9kGitHub stars
58stars in 7 days
38skills in this repository
629commits in 30 days

Heat

5.9
  • Star growth, last 7 daysAhead of 61% of tracked repositories
  • Star growth, last 24 hoursAhead of 70% of tracked repositories
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysAhead of 99% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 7, 2026Nov 6, 202624,859

Individual skills in this repository

How it works

nb-studio-cli

When your agent uses it

A synthetic Studio Skill for offline CLI tests.

What it loads into context

Frontmatter

18 tokens

Always available to the agent

SKILL.md

25 tokens

When the skill is activated

Reference documents

0 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

    Files

    • SKILL.mdcore109 bytes

    No excerpt is shown for this license. Read the source on GitHub.

    View the complete source on GitHub

    Skills included

    • nb-studio-cli
    • nocobase-app-development
    • shadcn
    • nocobase-app-plugin-development
    • nocobase-app-upgrade
    • nocobase-deployment
    • nocobase-app-plugin-cli-example
    • nocobase-app-plugin-repository-example
    • nocobase-app-plugin-skills-example
    • nocobase-db
    • nocobase-drive
    • nocobase-realtime
    • nocobase-app-plugin-agent-sessions
    • nocobase-app-plugin-agents
    • nocobase-app-plugin-api-keys
    • nocobase-app-plugin-authentication
    • nocobase-app-plugin-authorization
    • nocobase-app-plugin-authz-default-access
    • nocobase-app-plugin-authz-restriction-rules
    • nocobase-app-plugin-authz-sharing-rules
    • nocobase-app-plugin-concurrency
    • nocobase-app-plugin-database-explorer
    • nocobase-app-plugin-demo-mode
    • nocobase-app-plugin-file
    • nocobase-app-plugin-foundation
    • nocobase-app-plugin-i18n
    • nocobase-app-plugin-mail
    • nocobase-app-plugin-notification-in-app
    • nocobase-app-plugin-notification-web-push
    • nocobase-app-plugin-notification
    • nocobase-app-plugin-projects
    • nocobase-app-plugin-scheduler
    • nocobase-app-plugin-template-print
    • nocobase-app-plugin-users
    • nocobase-app-plugin-__NOCOBASE_SHORT_NAME__
    • nocobase-app-installer
    • nocobase-app-plugin-development
    • nocobase-create-app

    Repository facts

    License
    No license detected
    Created
    Oct 24, 2020
    Last pushed
    Nov 6, 2026
    Forks
    2,954
    Open issues
    114
    Project activity
    Active

    Rank over the last 12 weeks

    Now #82 · best #69 · down 1 in 30 days

    1. #77 from Sep 5 to Sep 13
    2. #78 from Sep 14 to Sep 20
    3. #79 from Sep 21 to Sep 29
    4. #80 from Sep 30 to Oct 4
    5. #81 from Oct 5 to Oct 24
    6. #82 since Nov 3
    8 earlier periods
    1. #66 from Aug 7 to Aug 10
    2. #69 from Aug 11 to Aug 19
    3. #70 from Aug 20 to Aug 21
    4. #71 on Aug 22
    5. #73 from Aug 23 to Aug 24
    6. #74 from Aug 25 to Aug 26
    7. #75 from Aug 27 to Sep 1
    8. #76 from Sep 2 to Sep 4

    Before you install

    Network or broad shell

    Automated signals, not a guarantee

    Checked Nov 3, 2026

    Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

    Show 130 notes
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/references/frontend/references/ui-library.md:161 Analysis incomplete: physical or joined line exceeds character limit
    • packages/app/app-skills/skills/nocobase-app-development/references/frontend/references/ui-library.md:159 Analysis incomplete: physical or joined line exceeds character limit
    • packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-plugin-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    • packages/app/app-skills/skills/nocobase-app-plugin-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
    Show all 689 signals by file

    packages/app/app-skills/skills/nocobase-app-development/SKILL.md

    • Network accessline 111
      [Credential-related source omitted]

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/cli/commands/onboarding-reset.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/client/pages/onboarding/choice.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/client/pages/onboarding/index.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/client/pages/onboarding/locales.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/client/pages/onboarding/wizard.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/database/main/migrations/202611050001_create_onboarding.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/database/main/seeds/202611050001_onboarding.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/database/main/seeds/202611050002_onboarding_samples.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/server/lifecycles/onboarding.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/server/providers/onboarding-registration.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/server/providers/onboarding-reset.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/server/providers/onboarding.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/server/routes/onboarding.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/shared/onboarding.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/tests/client/onboarding.test.tsx

    • Executable scriptline 1
      Executable file
    • Network accessline 18
      headers: {     'content-type': 'application/json',     origin: 'http://localhost',
    • Network accessline 19
      'content-type': 'application/json',     origin: 'http://localhost',     'Idempotency-Key': `${Date.now()}.${randomUUID()}`,
    • Network accessline 20
      origin: 'http://localhost',
    • Network accessline 312
      },         });         const response = await session.fetch('/onboarding', write(complete));
    • Network accessline 313
      });         const response = await session.fetch('/onboarding', write(complete));         expect(response.status).toBe(200);
    • Network accessline 314
      const response = await session.fetch('/onboarding', write(complete));
    • Network accessline 385
      ).toBe(1);     const detail = (       await (await view.session.fetch(`/onboarding/${id!}`)).json()
    • Network accessline 386
      const detail = (       await (await view.session.fetch(`/onboarding/${id!}`)).json()     ).data as OnboardingDetail;
    • Network accessline 387
      await (await view.session.fetch(`/onboarding/${id!}`)).json()

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/tests/database/onboarding.test.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/tests/playwright/onboarding.test.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/onboarding/tests/server/onboarding.test.ts

    • Executable scriptline 1
      Executable file
    • Network accessline 26
      config: {     logging: { enabled: false },     app: { publicOrigin: 'http://localhost' },
    • Network accessline 27
      logging: { enabled: false },     app: { publicOrigin: 'http://localhost' },     auth: {
    • Network accessline 28
      app: { publicOrigin: 'http://localhost' },
    • Network accessline 41
      headers: {     'content-type': 'application/json',     origin: 'http://localhost',
    • Network accessline 42
      'content-type': 'application/json',     origin: 'http://localhost',     'Idempotency-Key': key,
    • Network accessline 43
      origin: 'http://localhost',
    • Network accessline 102
      session = users.owner,     key?: string,   ) => session.fetch('/onboarding', write(body, 'POST', key));
    • Network accessline 103
      key?: string,   ) => session.fetch('/onboarding', write(body, 'POST', key));   const get = async (
    • Network accessline 104
      ) => session.fetch('/onboarding', write(body, 'POST', key));
    • Network accessline 107
      session = users.owner,   ): Promise<OnboardingDetail> =>     (await (await session.fetch(`/onboarding/${id}`)).json()).data;
    • Network accessline 108
      ): Promise<OnboardingDetail> =>     (await (await session.fetch(`/onboarding/${id}`)).json()).data;   const submit = async (
    • Network accessline 109
      (await (await session.fetch(`/onboarding/${id}`)).json()).data;
    • Network accessline 114
      key?: string,   ) =>     session.fetch(
    • Network accessline 115
      ) =>     session.fetch(       `/onboarding/${id}/fire`,
    • Network accessline 116
      session.fetch(
    • Network accessline 130
      ] as const)     expect((await app.request(url, init)).status).toBe(401);   expect((await f.users.member.fetch('/onboarding')).status).toBe(403);
    • Network accessline 131
      expect((await app.request(url, init)).status).toBe(401);   expect((await f.users.member.fetch('/onboarding')).status).toBe(403);   expect(
    • Network accessline 132
      expect((await f.users.member.fetch('/onboarding')).status).toBe(403);
    • Network accessline 133
      expect(     (await f.users.viewer.fetch('/onboarding/candidates?kind=departments'))       .status,
    • Network accessline 134
      (await f.users.viewer.fetch('/onboarding/candidates?kind=departments'))
    • Network accessline 140
      const version = (await f.get(id)).record.lifecycleVersion;   const administrator = await signIn(app, DEFAULT_ADMIN_CREDENTIALS);   expect((await administrator.fetch(`/onboarding/${id}`)).status).toBe(404);
    • Network accessline 141
      const administrator = await signIn(app, DEFAULT_ADMIN_CREDENTIALS);   expect((await administrator.fetch(`/onboarding/${id}`)).status).toBe(404);   for (const name of ['other', 'viewer']) {
    • Network accessline 142
      expect((await administrator.fetch(`/onboarding/${id}`)).status).toBe(404);
    • Network accessline 143
      for (const name of ['other', 'viewer']) {     expect((await f.users[name].fetch(`/onboarding/${id}`)).status).toBe(404);     expect(
    • Network accessline 144
      expect((await f.users[name].fetch(`/onboarding/${id}`)).status).toBe(404);
    • Network accessline 145
      expect(       (         await f.users[name].fetch(
    • Network accessline 146
      (         await f.users[name].fetch(           `/onboarding/${id}`,
    • Network accessline 147
      await f.users[name].fetch(
    • Network accessline 155
      );     expect(       (await (await f.users[name].fetch('/onboarding')).json()).data,
    • Network accessline 156
      expect(       (await (await f.users[name].fetch('/onboarding')).json()).data,     ).toEqual([]);
    • Network accessline 157
      (await (await f.users[name].fetch('/onboarding')).json()).data,
    • Network accessline 165
      expect(       (         await f.users.owner.fetch(
    • Network accessline 166
      (         await f.users.owner.fetch(           '/onboarding',
    • Network accessline 167
      await f.users.owner.fetch(
    • Network accessline 182
      expect(     (       await f.users.owner.fetch(
    • Network accessline 183
      (       await f.users.owner.fetch(         `/onboarding/${id}`,
    • Network accessline 184
      await f.users.owner.fetch(
    • Network accessline 271
      (       await (         await f.users.viewer.fetch('/onboarding?status=submitted&q=Example')
    • Network accessline 272
      await (         await f.users.viewer.fetch('/onboarding?status=submitted&q=Example')       ).json()
    • Network accessline 273
      await f.users.viewer.fetch('/onboarding?status=submitted&q=Example')
    • Network accessline 295
      (         await (           await f.users.owner.fetch('/onboarding/candidates?kind=departments')
    • Network accessline 296
      await (           await f.users.owner.fetch('/onboarding/candidates?kind=departments')         ).json()
    • Network accessline 297
      await f.users.owner.fetch('/onboarding/candidates?kind=departments')
    • Network accessline 328
      expect(     (       await f.users.owner.fetch(
    • Network accessline 329
      (       await f.users.owner.fetch(         `/onboarding/${id}`,
    • Network accessline 330
      await f.users.owner.fetch(
    • Network accessline 336
      expect(     (       await f.users.owner.fetch(
    • Network accessline 337
      (       await f.users.owner.fetch(         `/onboarding/${id}`,
    • Network accessline 338
      await f.users.owner.fetch(
    • Network accessline 343
      ).toBe('true');   expect(     (await f.users.owner.fetch(`/onboarding/${id}`, write(update, 'PATCH')))
    • Network accessline 344
      expect(     (await f.users.owner.fetch(`/onboarding/${id}`, write(update, 'PATCH')))       .status,
    • Network accessline 345
      (await f.users.owner.fetch(`/onboarding/${id}`, write(update, 'PATCH')))
    • Network accessline 359
      expect(     (       await f.users.owner.fetch(
    • Network accessline 360
      (       await f.users.owner.fetch(         `/onboarding/${id}`,
    • Network accessline 361
      await f.users.owner.fetch(
    • Network accessline 420
      const editRace = await Promise.all([     f.submit(editId, editVersion),     f.users.owner.fetch(
    • Network accessline 421
      f.submit(editId, editVersion),     f.users.owner.fetch(       `/onboarding/${editId}`,
    • Network accessline 422
      f.users.owner.fetch(
    • Network accessline 465
      expect(       (         await f.users.owner.fetch(
    • Network accessline 466
      (         await f.users.owner.fetch(           `/onboarding/${id}`,
    • Network accessline 467
      await f.users.owner.fetch(

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/cli/commands/procurement-reset.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/client/pages/procurement/detail.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/client/pages/procurement/index.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/client/pages/procurement/locales.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/client/pages/procurement/reference.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/database/main/migrations/202611040001_create_procurement.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/database/main/seeds/202611040001_procurement.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/database/main/seeds/202611040002_procurement_samples.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/server/lifecycles/procurement.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/server/providers/procurement-registration.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/server/providers/procurement-reset.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/server/providers/procurement.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/server/routes/procurement.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/shared/procurement.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/tests/client/procurement.test.tsx

    • Executable scriptline 1
      Executable file
    • Network accessline 45
      headers: {         'content-type': 'application/json',         origin: 'http://localhost',
    • Network accessline 46
      'content-type': 'application/json',         origin: 'http://localhost',         'Idempotency-Key': `${Date.now()}.${randomUUID()}`,
    • Network accessline 47
      origin: 'http://localhost',
    • Network accessline 52
      const detail = async () =>       (         (await (await owner.fetch(`/procurement/${id}`)).json()) as {
    • Network accessline 53
      (         (await (await owner.fetch(`/procurement/${id}`)).json()) as {           data: ProcurementDetail;
    • Network accessline 54
      (await (await owner.fetch(`/procurement/${id}`)).json()) as {
    • Network accessline 60
      expect(         (           await reviewer.fetch(
    • Network accessline 61
      (           await reviewer.fetch(             `/procurement/${id}/fire`,
    • Network accessline 62
      await reviewer.fetch(
    • Network accessline 119
      },           });           const created = await owner.fetch(
    • Network accessline 120
      });           const created = await owner.fetch(             '/procurement',
    • Network accessline 121
      const created = await owner.fetch(
    • Network accessline 134
      expect(             (               await owner.fetch(
    • Network accessline 135
      (               await owner.fetch(                 `/procurement/${id}/fire`,
    • Network accessline 136
      await owner.fetch(
    • Network accessline 212
      expect(           (             await owner!.fetch(
    • Network accessline 213
      (             await owner!.fetch(               `/procurement/${id!}`,
    • Network accessline 214
      await owner!.fetch(

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/tests/database/procurement.test.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/tests/playwright/procurement.test.ts

    • Executable scriptline 1
      Executable file
    • Network accessline 296
      await owner.route(detailApi, async (route) => {       if (route.request().method() !== 'GET') return route.continue();       const response = await route.fetch();
    • Network accessline 297
      if (route.request().method() !== 'GET') return route.continue();       const response = await route.fetch();       refreshStarted.resolve();
    • Network accessline 298
      const response = await route.fetch();

    packages/app/app-skills/skills/nocobase-app-development/assets/business-examples/procurement/tests/server/procurement.test.ts

    • Executable scriptline 1
      Executable file
    • Network accessline 17
      config: {     logging: { enabled: false },     app: { publicOrigin: 'http://localhost' },
    • Network accessline 18
      logging: { enabled: false },     app: { publicOrigin: 'http://localhost' },     auth: {
    • Network accessline 19
      app: { publicOrigin: 'http://localhost' },
    • Network accessline 32
      headers: {     'content-type': 'application/json',     origin: 'http://localhost',
    • Network accessline 33
      'content-type': 'application/json',     origin: 'http://localhost',     'Idempotency-Key': key,
    • Network accessline 34
      origin: 'http://localhost',
    • Network accessline 91
      };   const create = async (body = input, session = users.owner, key?: string) =>     session.fetch('/procurement', write(body, 'POST', key));
    • Network accessline 92
      const create = async (body = input, session = users.owner, key?: string) =>     session.fetch('/procurement', write(body, 'POST', key));   const get = async (id: string, session = users.owner) =>
    • Network accessline 93
      session.fetch('/procurement', write(body, 'POST', key));
    • Network accessline 94
      const get = async (id: string, session = users.owner) =>     (       (await (await session.fetch(`/procurement/${id}`)).json()) as {
    • Network accessline 95
      (       (await (await session.fetch(`/procurement/${id}`)).json()) as {         data: ProcurementDetail;
    • Network accessline 96
      (await (await session.fetch(`/procurement/${id}`)).json()) as {
    • Network accessline 105
      requestId = randomUUID(),   ) =>     session.fetch(
    • Network accessline 106
      ) =>     session.fetch(       `/procurement/${id}/fire`,
    • Network accessline 107
      session.fetch(
    • Network accessline 117
      const f = await fixture(testApp);   expect((await testApp.request('/procurement')).status).toBe(401);   expect((await f.users.member.fetch('/procurement')).status).toBe(403);
    • Network accessline 118
      expect((await testApp.request('/procurement')).status).toBe(401);   expect((await f.users.member.fetch('/procurement')).status).toBe(403);   expect(
    • Network accessline 119
      expect((await f.users.member.fetch('/procurement')).status).toBe(403);
    • Network accessline 120
      expect(     (await f.users.member.fetch('/procurement?status=invalid')).status,   ).toBe(403);
    • Network accessline 121
      (await f.users.member.fetch('/procurement?status=invalid')).status,
    • Network accessline 122
      ).toBe(403);   expect((await f.users.member.fetch('/procurement', write({}))).status).toBe(     403,
    • Network accessline 123
      expect((await f.users.member.fetch('/procurement', write({}))).status).toBe(
    • Network accessline 125
      );   expect(     (await f.users.reviewer.fetch('/procurement/candidates?kind=materials'))
    • Network accessline 126
      expect(     (await f.users.reviewer.fetch('/procurement/candidates?kind=materials'))       .status,
    • Network accessline 127
      (await f.users.reviewer.fetch('/procurement/candidates?kind=materials'))
    • Network accessline 129
      ).toBe(403);   expect(     (await f.users.reviewer.fetch('/procurement/candidates?kind=invalid'))
    • Network accessline 130
      expect(     (await f.users.reviewer.fetch('/procurement/candidates?kind=invalid'))       .status,
    • Network accessline 131
      (await f.users.reviewer.fetch('/procurement/candidates?kind=invalid'))
    • Network accessline 134
      const id = (await (await f.create()).json()).data.id;   for (const actor of ['other', 'reviewer', 'otherReviewer', 'member'])     expect((await f.users[actor].fetch(`/procurement/${id}`)).status).toBe(
    • Network accessline 135
      for (const actor of ['other', 'reviewer', 'otherReviewer', 'member'])     expect((await f.users[actor].fetch(`/procurement/${id}`)).status).toBe(       actor === 'member' ? 403 : 404,
    • Network accessline 136
      expect((await f.users[actor].fetch(`/procurement/${id}`)).status).toBe(
    • Network accessline 138
      );   expect(     (await (await f.users.other.fetch('/procurement')).json()).data,
    • Network accessline 139
      expect(     (await (await f.users.other.fetch('/procurement')).json()).data,   ).toEqual([]);
    • Network accessline 140
      (await (await f.users.other.fetch('/procurement')).json()).data,
    • Network accessline 147
      expect(       (         await f.users.owner.fetch(
    • Network accessline 148
      (         await f.users.owner.fetch(           '/procurement',
    • Network accessline 149
      await f.users.owner.fetch(
    • Network accessline 159
      expect(     (       await f.users.owner.fetch(
    • Network accessline 160
      (       await f.users.owner.fetch(         `/procurement/${id}`,
    • Network accessline 161
      await f.users.owner.fetch(
    • Network accessline 194
      }   const candidates = await (     await f.users.owner.fetch(
    • Network accessline 195
      const candidates = await (     await f.users.owner.fetch(       '/procurement/candidates?kind=materials&q=Note&active=true',
    • Network accessline 196
      await f.users.owner.fetch(
    • Network accessline 214
      (       await (         await f.users.owner.fetch(
    • Network accessline 215
      await (         await f.users.owner.fetch(           '/procurement/candidates?kind=suppliers&q=Restricted',
    • Network accessline 216
      await f.users.owner.fetch(
    • Network accessline 223
      (       await (         await f.users.owner.fetch(
    • Network accessline 224
      await (         await f.users.owner.fetch(           '/procurement/candidates?kind=materials&active=false',
    • Network accessline 225
      await f.users.owner.fetch(
    • Network accessline 237
      expect(     (       await f.users.other.fetch(
    • Network accessline 238
      (       await f.users.other.fetch(         `/procurement/${id}`,
    • Network accessline 239
      await f.users.other.fetch(
    • Network accessline 270
      (       await (         await f.users.owner.fetch(
    • Network accessline 271
      await (         await f.users.owner.fetch(           '/procurement?q=Office&status=submitted&pageSize=1',
    • Network accessline 272
      await f.users.owner.fetch(
    • Network accessline 277
      ).toMatchObject({ total: 1, pageSize: 1 });   expect(     (await (await f.users.owner.fetch('/procurement?status=draft')).json())
    • Network accessline 278
      expect(     (await (await f.users.owner.fetch('/procurement?status=draft')).json())       .data,
    • Network accessline 279
      (await (await f.users.owner.fetch('/procurement?status=draft')).json())
    • Network accessline 283
      expect(     (       await f.users.owner.fetch(
    • Network accessline 284
      (       await f.users.owner.fetch(         `/procurement/${id}`,
    • Network accessline 285
      await f.users.owner.fetch(
    • Network accessline 316
      expect(     (       await f.users.owner.fetch(
    • Network accessline 317
      (       await f.users.owner.fetch(         `/procurement/${id}`,
    • Network accessline 318
      await f.users.owner.fetch(
    • Network accessline 365
      expect(     (       await f.users.owner.fetch(
    • Network accessline 366
      (       await f.users.owner.fetch(         `/procurement/${id}`,
    • Network accessline 367
      await f.users.owner.fetch(
    • Network accessline 429
      ]);   expect(submissions.filter((r) => r.ok)).toHaveLength(1);   const stale = await f.users.owner.fetch(
    • Network accessline 430
      expect(submissions.filter((r) => r.ok)).toHaveLength(1);   const stale = await f.users.owner.fetch(     `/procurement/${id}`,
    • Network accessline 431
      const stale = await f.users.owner.fetch(
    • Network accessline 527
      })),   });   const response = await f.users.owner.fetch(
    • Network accessline 528
      });   const response = await f.users.owner.fetch(     '/procurement/candidates?kind=reviewers',
    • Network accessline 529
      const response = await f.users.owner.fetch(
    • Network accessline 570
      expect(       (         await f.users.owner.fetch(
    • Network accessline 571
      (         await f.users.owner.fetch(           `/procurement/${id}`,
    • Network accessline 572
      await f.users.owner.fetch(

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/client/pages/customer-contacts/batch.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/client/pages/customer-contacts/detail.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/client/pages/customer-contacts/edit.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/client/pages/customer-contacts/index.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/client/pages/customer-contacts/locales.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/client/pages/customer-contacts/model.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/client/pages/customer-contacts/relation-picker.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/client/pages/customer-contacts/shared.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/database/main/migrations/202611030002_create_customer_contacts.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/database/main/seeds/202611030002_customer_contacts.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/server/providers/customer-contacts-authorization.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/server/providers/customer-contacts-data.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/server/providers/customer-contacts.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/server/routes/customer-contacts.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/tests/client/customer-contacts.test.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/tests/database/customer-contacts-migration.test.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/customer-contacts-example/tests/server/customer-contacts.test.ts

    • Executable scriptline 1
      Executable file
    • Network accessline 13
      connections: ['main', 'analytics'],   config: {     app: { publicOrigin: 'http://localhost' },
    • Network accessline 14
      config: {     app: { publicOrigin: 'http://localhost' },     auth: {
    • Network accessline 15
      app: { publicOrigin: 'http://localhost' },
    • Network accessline 16
      [Credential-related source omitted]
    • Network accessline 17
      [Credential-related source omitted]
    • Network accessline 18
      trustedOrigins: ['http://localhost'],
    • Network accessline 24
      const write = (body: unknown, method = 'POST'): RequestInit => ({   method,   headers: { 'content-type': 'application/json', origin: 'http://localhost' },
    • Network accessline 25
      method,   headers: { 'content-type': 'application/json', origin: 'http://localhost' },   body: JSON.stringify(body),
    • Network accessline 26
      headers: { 'content-type': 'application/json', origin: 'http://localhost' },
    • Network accessline 34
      test.beforeEach(async ({ testApp }) => {   const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const reset = await admin.fetch(`${prefix}/reset`, write({}));
    • Network accessline 35
      const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const reset = await admin.fetch(`${prefix}/reset`, write({}));   if (reset.status !== 200) throw new Error('Example reset failed');
    • Network accessline 36
      const reset = await admin.fetch(`${prefix}/reset`, write({}));
    • Network accessline 54
      const manager = await signIn(testApp, credentials('manager'));   for (const page of [1, 2]) {     const result = await rep.fetch(
    • Network accessline 55
      for (const page of [1, 2]) {     const result = await rep.fetch(       `${prefix}/customers/options?page=${page}&pageSize=10`,
    • Network accessline 56
      const result = await rep.fetch(
    • Network accessline 71
      );   }   const searched = await rep.fetch(
    • Network accessline 72
      }   const searched = await rep.fetch(     `${prefix}/customers/options?search=aCoRn&status=active&pageSize=20`,
    • Network accessline 73
      const searched = await rep.fetch(
    • Network accessline 79
      });   expect(     (await rep.fetch(`${prefix}/customers/options?pageSize=21`)).status,
    • Network accessline 80
      expect(     (await rep.fetch(`${prefix}/customers/options?pageSize=21`)).status,   ).toBe(400);
    • Network accessline 81
      (await rep.fetch(`${prefix}/customers/options?pageSize=21`)).status,
    • Network accessline 82
      ).toBe(400);   expect((await rep.fetch(`${prefix}/customers/customer-21`)).status).toBe(403);   expect((await rep.fetch(`${prefix}/customers/missing`)).status).toBe(403);
    • Network accessline 83
      expect((await rep.fetch(`${prefix}/customers/customer-21`)).status).toBe(403);
    • Network accessline 84
      expect((await rep.fetch(`${prefix}/customers/missing`)).status).toBe(403);
    • Network accessline 85
      expect(     await (await rep.fetch(`${prefix}/salesReps/options`)).json(),   ).toMatchObject({ data: [{ id: 'crm-rep' }], meta: { total: 1 } });
    • Network accessline 86
      await (await rep.fetch(`${prefix}/salesReps/options`)).json(),
    • Network accessline 88
      expect(     await (       await manager.fetch(`${prefix}/salesReps/options?search=aLeX`)
    • Network accessline 89
      await (       await manager.fetch(`${prefix}/salesReps/options?search=aLeX`)     ).json(),
    • Network accessline 90
      await manager.fetch(`${prefix}/salesReps/options?search=aLeX`)
    • Network accessline 94
      meta: { total: 1 },   });   expect((await rep.fetch(`${prefix}/salesReps/crm-colleague`)).status).toBe(
    • Network accessline 95
      });   expect((await rep.fetch(`${prefix}/salesReps/crm-colleague`)).status).toBe(     403,
    • Network accessline 96
      expect((await rep.fetch(`${prefix}/salesReps/crm-colleague`)).status).toBe(
    • Network accessline 105
      };   expect(     (await rep.fetch(`${prefix}/contacts/contact-01`, write(contact, 'PATCH')))
    • Network accessline 106
      expect(     (await rep.fetch(`${prefix}/contacts/contact-01`, write(contact, 'PATCH')))       .status,
    • Network accessline 107
      (await rep.fetch(`${prefix}/contacts/contact-01`, write(contact, 'PATCH')))
    • Network accessline 115
      expect(     (       await rep.fetch(
    • Network accessline 116
      (       await rep.fetch(         `${prefix}/contacts/contact-01`,
    • Network accessline 117
      await rep.fetch(
    • Network accessline 122
      ).toBe(403);   expect(     (await rep.fetch(`${prefix}/contacts/contact-21`, write(contact, 'PATCH')))
    • Network accessline 123
      expect(     (await rep.fetch(`${prefix}/contacts/contact-21`, write(contact, 'PATCH')))       .status,
    • Network accessline 124
      (await rep.fetch(`${prefix}/contacts/contact-21`, write(contact, 'PATCH')))
    • Network accessline 125
      .status,   ).toBe(403);   expect((await rep.fetch(`${prefix}/contacts/contact-21`)).status).toBe(403);
    • Network accessline 126
      ).toBe(403);   expect((await rep.fetch(`${prefix}/contacts/contact-21`)).status).toBe(403);   expect(
    • Network accessline 127
      expect((await rep.fetch(`${prefix}/contacts/contact-21`)).status).toBe(403);
    • Network accessline 128
      expect(     (       await rep.fetch(
    • Network accessline 129
      (       await rep.fetch(         `${prefix}/contacts`,
    • Network accessline 130
      await rep.fetch(
    • Network accessline 136
      expect(     (       await rep.fetch(
    • Network accessline 137
      (       await rep.fetch(         `${prefix}/contacts`,
    • Network accessline 138
      await rep.fetch(
    • Network accessline 142
      ).status,   ).toBe(409);   const created = await rep.fetch(`${prefix}/contacts`, write(contact));
    • Network accessline 143
      ).toBe(409);   const created = await rep.fetch(`${prefix}/contacts`, write(contact));   expect(created.status).toBe(201);
    • Network accessline 144
      const created = await rep.fetch(`${prefix}/contacts`, write(contact));
    • Network accessline 147
      expect(     (       await rep.fetch(`${prefix}/contacts/${saved.id}`, {
    • Network accessline 148
      (       await rep.fetch(`${prefix}/contacts/${saved.id}`, {         method: 'DELETE',
    • Network accessline 149
      await rep.fetch(`${prefix}/contacts/${saved.id}`, {
    • Network accessline 150
      method: 'DELETE',         headers: { origin: 'http://localhost' },       })
    • Network accessline 151
      headers: { origin: 'http://localhost' },
    • Network accessline 160
      expect(     (       await rep.fetch(`${prefix}/contacts/contact-21`, {
    • Network accessline 161
      (       await rep.fetch(`${prefix}/contacts/contact-21`, {         method: 'DELETE',
    • Network accessline 162
      await rep.fetch(`${prefix}/contacts/contact-21`, {
    • Network accessline 163
      method: 'DELETE',         headers: { origin: 'http://localhost' },       })
    • Network accessline 164
      headers: { origin: 'http://localhost' },
    • Network accessline 168
      expect(     (       await manager.fetch(
    • Network accessline 169
      (       await manager.fetch(         `${prefix}/customers/customer-01`,
    • Network accessline 170
      await manager.fetch(
    • Network accessline 174
      ).status,   ).toBe(200);   expect((await rep.fetch(`${prefix}/customers/customer-01`)).status).toBe(403);
    • Network accessline 175
      ).toBe(200);   expect((await rep.fetch(`${prefix}/customers/customer-01`)).status).toBe(403);   expect((await rep.fetch(`${prefix}/contacts/contact-01`)).status).toBe(200); // Moved to another still-owned customer.
    • Network accessline 176
      expect((await rep.fetch(`${prefix}/customers/customer-01`)).status).toBe(403);
    • Network accessline 177
      expect((await rep.fetch(`${prefix}/contacts/contact-01`)).status).toBe(200); // Moved to another still-owned customer.
    • Network accessline 198
      ]) {     expect(       (await manager.fetch(`${prefix}/customers/batchUpdate`, batch(values)))
    • Network accessline 199
      expect(       (await manager.fetch(`${prefix}/customers/batchUpdate`, batch(values)))         .status,
    • Network accessline 200
      (await manager.fetch(`${prefix}/customers/batchUpdate`, batch(values)))
    • Network accessline 204
      expect(     (       await manager.fetch(
    • Network accessline 205
      (       await manager.fetch(         `${prefix}/customers/batchUpdate`,
    • Network accessline 206
      await manager.fetch(
    • Network accessline 212
      for (const ownerId of ['crm-colleague', 'crm-inactive', 'missing']) {     expect(       (await rep.fetch(`${prefix}/customers/batchUpdate`, batch({ ownerId })))
    • Network accessline 213
      expect(       (await rep.fetch(`${prefix}/customers/batchUpdate`, batch({ ownerId })))         .status,
    • Network accessline 214
      (await rep.fetch(`${prefix}/customers/batchUpdate`, batch({ ownerId })))
    • Network accessline 217
      expect(       (         await rep.fetch(
    • Network accessline 218
      (         await rep.fetch(           `${prefix}/customers/customer-01`,
    • Network accessline 219
      await rep.fetch(
    • Network accessline 227
      expect(       (         await manager.fetch(
    • Network accessline 228
      (         await manager.fetch(           `${prefix}/customers/batchUpdate`,
    • Network accessline 229
      await manager.fetch(
    • Network accessline 236
      await repository.findOne({ filter: { id: 'customer-01' } }),   ).toMatchObject({ name: 'Acorn 01', status: 'paused', ownerId: 'crm-rep' });   const mixed = await rep.fetch(
    • Network accessline 237
      ).toMatchObject({ name: 'Acorn 01', status: 'paused', ownerId: 'crm-rep' });   const mixed = await rep.fetch(     `${prefix}/customers/batchUpdate`,
    • Network accessline 238
      const mixed = await rep.fetch(
    • Network accessline 269
      expect(     (       await rep.fetch(
    • Network accessline 270
      (       await rep.fetch(         `${prefix}/customers/customer-21`,
    • Network accessline 271
      await rep.fetch(
    • Network accessline 277
      expect(     (       await rep.fetch(
    • Network accessline 278
      (       await rep.fetch(         `${prefix}/customers/customer-10`,
    • Network accessline 279
      await rep.fetch(
    • Network accessline 283
      ).status,   ).toBe(409);   const success = await manager.fetch(
    • Network accessline 284
      ).toBe(409);   const success = await manager.fetch(     `${prefix}/customers/batchUpdate`,
    • Network accessline 285
      const success = await manager.fetch(
    • Network accessline 294
      ownerId: 'crm-colleague',     });   expect((await rep.fetch(`${prefix}/reset`, write({}))).status).toBe(403);
    • Network accessline 295
      });   expect((await rep.fetch(`${prefix}/reset`, write({}))).status).toBe(403);   const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);
    • Network accessline 296
      expect((await rep.fetch(`${prefix}/reset`, write({}))).status).toBe(403);
    • Network accessline 297
      const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   expect((await admin.fetch(`${prefix}/reset`, write({}))).status).toBe(200);   expect(
    • Network accessline 298
      expect((await admin.fetch(`${prefix}/reset`, write({}))).status).toBe(200);
    • Network accessline 322
      ],   });   expect((await rep.fetch(`${prefix}/customers`)).status).toBe(403);
    • Network accessline 323
      });   expect((await rep.fetch(`${prefix}/customers`)).status).toBe(403);   expect(
    • Network accessline 324
      expect((await rep.fetch(`${prefix}/customers`)).status).toBe(403);
    • Network accessline 325
      expect(     (       await rep.fetch(
    • Network accessline 326
      (       await rep.fetch(         `${prefix}/customers/batchUpdate`,
    • Network accessline 327
      await rep.fetch(
    • Network accessline 339
      grants: actionOnly,   });   expect((await rep.fetch(`${prefix}/customers`)).status).toBe(200);
    • Network accessline 340
      });   expect((await rep.fetch(`${prefix}/customers`)).status).toBe(200);   await authz.permissionSets.update('crm-rep', {
    • Network accessline 341
      expect((await rep.fetch(`${prefix}/customers`)).status).toBe(200);

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/client/pages/skill-projects/edit.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/client/pages/skill-projects/index.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/client/pages/skill-projects/locales.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/database/main/migrations/202611030001_create_skill_projects.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/server/providers/skill-projects.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/server/routes/skill-projects.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/tests/client/skill-projects.test.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/tests/database/skill-projects-migration.test.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/assets/list-edit-example/tests/server/skill-projects.test.ts

    • Executable scriptline 1
      Executable file
    • Network accessline 12
      connections: ['main', 'analytics'],   config: {     app: { publicOrigin: 'http://localhost' },
    • Network accessline 13
      config: {     app: { publicOrigin: 'http://localhost' },     auth: {
    • Network accessline 14
      app: { publicOrigin: 'http://localhost' },
    • Network accessline 15
      [Credential-related source omitted]
    • Network accessline 16
      [Credential-related source omitted]
    • Network accessline 17
      trustedOrigins: ['http://localhost'],
    • Network accessline 29
      headers: {     'content-type': 'application/json',     origin: 'http://localhost',
    • Network accessline 30
      'content-type': 'application/json',     origin: 'http://localhost',     'Idempotency-Key': operationKey,
    • Network accessline 31
      origin: 'http://localhost',
    • Network accessline 55
      headers: {           'content-type': 'application/json',           origin: 'http://localhost',
    • Network accessline 56
      'content-type': 'application/json',           origin: 'http://localhost',         },
    • Network accessline 57
      origin: 'http://localhost',
    • Network accessline 62
      ).toBe(200);   const denied = await signIn(testApp, member);   expect((await denied.fetch('/skillProjects')).status).toBe(403);
    • Network accessline 63
      const denied = await signIn(testApp, member);   expect((await denied.fetch('/skillProjects')).status).toBe(403);   expect((await denied.fetch('/skillProjects', write('Denied'))).status).toBe(
    • Network accessline 64
      expect((await denied.fetch('/skillProjects')).status).toBe(403);
    • Network accessline 65
      expect((await denied.fetch('/skillProjects', write('Denied'))).status).toBe(
    • Network accessline 67
      );   expect((await request('/example')).status).toBe(200);   expect((await admin.fetch('/skillProjects', write('   '))).status).toBe(400);
    • Network accessline 68
      expect((await request('/example')).status).toBe(200);   expect((await admin.fetch('/skillProjects', write('   '))).status).toBe(400);   expect(
    • Network accessline 69
      expect((await admin.fetch('/skillProjects', write('   '))).status).toBe(400);
    • Network accessline 70
      expect(     (await admin.fetch('/skillProjects', write('a'.repeat(101)))).status,   ).toBe(400);
    • Network accessline 71
      (await admin.fetch('/skillProjects', write('a'.repeat(101)))).status,
    • Network accessline 72
      ).toBe(400);   const operation = key();   const created = await admin.fetch(
    • Network accessline 73
      const operation = key();   const created = await admin.fetch(     '/skillProjects',
    • Network accessline 74
      const created = await admin.fetch(
    • Network accessline 79
      const body = (await created.json()) as { data: { id: string; name: string } };   expect(body.data.name).toBe('Alpha');   const replay = await admin.fetch(
    • Network accessline 80
      expect(body.data.name).toBe('Alpha');   const replay = await admin.fetch(     '/skillProjects',
    • Network accessline 81
      const replay = await admin.fetch(
    • Network accessline 87
      expect(await replay.json()).toEqual(body);   expect(     (await admin.fetch('/skillProjects', write('Different', 'POST', operation)))
    • Network accessline 88
      expect(     (await admin.fetch('/skillProjects', write('Different', 'POST', operation)))       .status,
    • Network accessline 89
      (await admin.fetch('/skillProjects', write('Different', 'POST', operation)))
    • Network accessline 92
      expect(await testApp.connection.repository('skillProjects').count()).toBe(1);   const path = `/skillProjects/${body.data.id}`;   expect((await denied.fetch(path, write('Denied edit', 'PATCH'))).status).toBe(
    • Network accessline 93
      const path = `/skillProjects/${body.data.id}`;   expect((await denied.fetch(path, write('Denied edit', 'PATCH'))).status).toBe(     403,
    • Network accessline 94
      expect((await denied.fetch(path, write('Denied edit', 'PATCH'))).status).toBe(
    • Network accessline 95
      403,   );   expect((await admin.fetch(path, write('Beta', 'PATCH'))).status).toBe(200);
    • Network accessline 96
      );   expect((await admin.fetch(path, write('Beta', 'PATCH'))).status).toBe(200);   expect(await (await admin.fetch(path)).json()).toMatchObject({
    • Network accessline 97
      expect((await admin.fetch(path, write('Beta', 'PATCH'))).status).toBe(200);
    • Network accessline 98
      expect(await (await admin.fetch(path)).json()).toMatchObject({
    • Network accessline 104
      .findOne({ filter: { id: body.data.id } }),   ).toMatchObject({ name: 'Beta' });   expect(await (await admin.fetch('/skillProjects')).json()).toMatchObject({
    • Network accessline 105
      ).toMatchObject({ name: 'Beta' });   expect(await (await admin.fetch('/skillProjects')).json()).toMatchObject({     data: [{ id: body.data.id, name: 'Beta' }],
    • Network accessline 106
      expect(await (await admin.fetch('/skillProjects')).json()).toMatchObject({
    • Network accessline 108
      meta: { total: 1 },   });   expect((await admin.fetch(`/skillProjects/${randomUUID()}`)).status).toBe(
    • Network accessline 109
      });   expect((await admin.fetch(`/skillProjects/${randomUUID()}`)).status).toBe(     404,
    • Network accessline 110
      expect((await admin.fetch(`/skillProjects/${randomUUID()}`)).status).toBe(
    • Network accessline 113
      expect(     (       await admin.fetch(
    • Network accessline 114
      (       await admin.fetch(         `/skillProjects/${randomUUID()}`,
    • Network accessline 115
      await admin.fetch(
    • Network accessline 121
      const boundary = '项'.repeat(100);   expect(     (await admin.fetch(path, write(` ${boundary} `, 'PATCH'))).status,
    • Network accessline 122
      expect(     (await admin.fetch(path, write(` ${boundary} `, 'PATCH'))).status,   ).toBe(200);
    • Network accessline 123
      (await admin.fetch(path, write(` ${boundary} `, 'PATCH'))).status,
    • Network accessline 124
      ).toBe(200);   expect(     (await admin.fetch(path, write('项'.repeat(101), 'PATCH'))).status,
    • Network accessline 125
      expect(     (await admin.fetch(path, write('项'.repeat(101), 'PATCH'))).status,   ).toBe(400);
    • Network accessline 126
      (await admin.fetch(path, write('项'.repeat(101), 'PATCH'))).status,
    • Network accessline 127
      ).toBe(400);   expect(await (await admin.fetch(path)).json()).toMatchObject({     data: { name: boundary },
    • Network accessline 128
      expect(await (await admin.fetch(path)).json()).toMatchObject({
    • Network accessline 139
      .repository('skillProjects')         .createOne({ values: { id: randomUUID(), name: `Project ${total}` } });     const response = (await (await admin.fetch('/skillProjects')).json()) as {
    • Network accessline 140
      .createOne({ values: { id: randomUUID(), name: `Project ${total}` } });     const response = (await (await admin.fetch('/skillProjects')).json()) as {       data: { id: string }[];
    • Network accessline 141
      const response = (await (await admin.fetch('/skillProjects')).json()) as {
    • Network accessline 154
      }) => {   const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const created = await admin.fetch('/skillProjects', write('Original'));
    • Network accessline 155
      const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const created = await admin.fetch('/skillProjects', write('Original'));   const { data: project } = (await created.json()) as { data: { id: string } };
    • Network accessline 156
      const created = await admin.fetch('/skillProjects', write('Original'));
    • Network accessline 161
      expect(     (await admin.fetch(path, write('Committed', 'PATCH', committedKey))).status,
    • Network accessline 162
      (await admin.fetch(path, write('Committed', 'PATCH', committedKey))).status,
    • Network accessline 165
      .repository('skillProjects')     .deleteOne({ filter: { id: project.id } });   const committed = await admin.fetch(
    • Network accessline 166
      .deleteOne({ filter: { id: project.id } });   const committed = await admin.fetch(     path,
    • Network accessline 167
      const committed = await admin.fetch(
    • Network accessline 182
      const notAppliedKey = key();   const notApplied = await admin.fetch(
    • Network accessline 183
      const notApplied = await admin.fetch(
    • Network accessline 193
      .repository('skillProjects')     .createOne({ values: { id: project.id, name: 'Replacement' } });   const delayed = await admin.fetch(
    • Network accessline 194
      .createOne({ values: { id: project.id, name: 'Replacement' } });   const delayed = await admin.fetch(     path,
    • Network accessline 195
      const delayed = await admin.fetch(
    • Network accessline 202
      error: { reason: 'PROJECT_UPDATE_NOT_APPLIED' },   });   expect(await (await admin.fetch(path)).json()).toMatchObject({
    • Network accessline 203
      });   expect(await (await admin.fetch(path)).json()).toMatchObject({     data: { name: 'Replacement' },
    • Network accessline 204
      expect(await (await admin.fetch(path)).json()).toMatchObject({
    • Network accessline 206
      });   expect(     (await admin.fetch(path, write('Changed payload', 'PATCH', notAppliedKey)))
    • Network accessline 207
      expect(     (await admin.fetch(path, write('Changed payload', 'PATCH', notAppliedKey)))       .status,
    • Network accessline 208
      (await admin.fetch(path, write('Changed payload', 'PATCH', notAppliedKey)))

    packages/app/app-skills/skills/nocobase-app-development/references/database-connections.md

    • Dangerous shell operationline 198
      `better-sqlite3` is recorded as `false`: it loads the prebuilt binary it ships for Linux (glibc and musl), macOS and Windows on x64 and arm64, so it needs no build and installs without a C++ toolchain. On any other platform it fails with `C

    packages/app/app-skills/skills/nocobase-app-development/references/dev-server.md

    • Network accessline 37
      Treat `/main` in examples as a default, never as a fixed route. Local `APP_BASE_PATH` resolves from the command-line environment, then `.env.local`, then `.env`, with `/main` as the fallback. Determine the remote application's actual public
    • Network accessline 39
      For local client debugging against another running application, use `PROXY_TARGET_URL=<remote-application-base-url> pnpm dev` (for example, `https://backend.example.com/main`, without `/api`). This starts Vite, proxies API and WebSocket pat

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/design-sources.md

    • Network accessline 7
      | Source and reviewed revision                                                                                                                                                                                                                  
    • Network accessline 8
      | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    • Network accessline 9
      | [shadcn/ui design-system guidance](https://github.com/shadcn-ui/ui/blob/96da9cc7f1aa10580a3741664e2a77c721206c00/skills/shadcn/design-system.md) and [component showcase guidance](https://github.com/shadcn-ui/ui/blob/96da9cc7f1aa10580a3741
    • Network accessline 10
      | [UI UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/28b3b8dee8c976df4fa3e94aed4e092ad43fcb03/README.md)                                                                                                              
    • Network accessline 11
      | [Interface Design](https://github.com/Dammyjay93/interface-design/blob/2f9be3206855bcb2d1d0af262c8bae25cba6658d/README.md)                                                                                                                    
    • Network accessline 12
      | [Vercel Web Interface Guidelines](https://github.com/vercel-labs/web-interface-guidelines/blob/434b7f91364665f2f733b310ec54809bf8f37937/command.md)                                                                                           
    • Network accessline 14
      The upstream repositories identify these sources as MIT licensed: [shadcn](https://github.com/shadcn-ui/ui/blob/96da9cc7f1aa10580a3741664e2a77c721206c00/LICENSE.md), [UI UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/bl

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/frontend-dev.md

    • Network accessline 45
      Call `copyText(text)` directly from the user's click handler and await its boolean result. It uses the [Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/writeText) when available and falls back to selection-based co
    • Network accessline 47
      For a dialog or other focus trap, pass `copyText(text, { container: dialogElement })` when the trigger does not take focus. Otherwise the helper selects the nearest dialog containing the active element, or the document body. Its temporary f

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/references/styling.md

    • Network accessline 110
      - **Look for an `@nocobase` item first.** Before building a business component or page section yourself, search the UI Library: through the shadcn MCP server when your editor runs it (its search and example tools), otherwise with `pnpm exec
    • Network accessline 111
      - **Offline, read the catalog.** When `https://ui.nocobase.com` cannot be reached, [`ui-library.md`](ui-library.md) lists every item with its kind, install command and location, description, plugin dependencies and example, as of this relea

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/references/testing.md

    • Network accessline 157
      End-to-end tests run against a running application. `playwright.config.ts` sets no `baseURL` or `webServer`, so start `pnpm dev` first and have each test read the application URL, including the deployment base path, from `APP_URL` (defaulti

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/references/theme.md

    • Network accessline 443
      - **Any token change** (a color, font, size, spacing, radius or shadow):   - With `pnpm dev` running, append `tests/fixtures/theme-tokens.html` to the `Local:` URL it prints, which already ends with the base path and a slash (`http://127.0.
    • Network accessline 444
      - With `pnpm dev` running, append `tests/fixtures/theme-tokens.html` to the `Local:` URL it prints, which already ends with the base path and a slash (`http://127.0.0.1:13000/main/tests/fixtures/theme-tokens.html`). The page renders the rea

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/references/ui-library.md

    • Network accessline 5
      Every item of the `@nocobase` shadcn registry (the NocoBase UI Library, previewed at https://ui.nocobase.com), as of this release of the Skill. A component installs into `client/components/` and a block into `client/extensions/nocobase-<ite

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/scripts/capture.md

    • Network accessline 6
      # 1. Save the sign-in session: a browser window opens, the user signs in themselves, and the script never touches the password node .agents/skills/nocobase-app-development/references/frontend/scripts/capture.mjs login --base http://127.0.0.
    • Network accessline 7
      node .agents/skills/nocobase-app-development/references/frontend/scripts/capture.mjs login --base http://127.0.0.1:13000/main/
    • Network accessline 15
      The sign-in session is saved to `storage/ui-workflow/auth.json` (`storage/` is ignored by git). Do not commit or share it, and delete it when the task ends. For `--base`, pass the `Local:` URL `pnpm dev` prints (for example `http://127.0.0.
    • Network accessline 20
      {   "base": "http://127.0.0.1:13000/main",
    • Network accessline 21
      "base": "http://127.0.0.1:13000/main",

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/scripts/capture.mjs

    • Executable scriptline 1
      #!/usr/bin/env node
    • Network accessline 4
      // // 1) Save the sign-in session (the user signs in themselves in the browser window that opens; the script never touches the password): //    node .agents/skills/nocobase-app-development/references/frontend/scripts/capture.mjs login --bas
    • Network accessline 5
      // 1) Save the sign-in session (the user signs in themselves in the browser window that opens; the script never touches the password): //    node .agents/skills/nocobase-app-development/references/frontend/scripts/capture.mjs login --base h
    • Network accessline 6
      //    node .agents/skills/nocobase-app-development/references/frontend/scripts/capture.mjs login --base http://127.0.0.1:13000/main/ [--timeout 10]
    • Network accessline 73
      if (!base)     throw new Error(       'Missing --base, for example --base http://127.0.0.1:13000/main/',
    • Network accessline 74
      throw new Error(       'Missing --base, for example --base http://127.0.0.1:13000/main/',     );
    • Network accessline 75
      'Missing --base, for example --base http://127.0.0.1:13000/main/',

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/SKILL.md

    • Broad permissionsline 1
      Bash(npx shadcn@latest *), Bash(pnpm dlx shadcn@latest *), Bash(bunx --bun shadcn@latest *)
    • Network accessline 263
      **Named presets:** `nova`, `vega`, `maia`, `lyra`, `mira`, `luma` **Templates:** `next`, `vite`, `start`, `react-router`, `astro` (all support `--monorepo`) and `laravel` (not supported for monorepo) **Preset codes:** Version-prefixed base6
    • Network accessline 265
      **Preset codes:** Version-prefixed base62 strings (e.g. `a2r6bw` or `b0`), from [ui.shadcn.com](https://ui.shadcn.com).

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/cli.md

    • Network accessline 106
      # Works with URLs too. npx shadcn@latest add https://api.npoint.io/abc123 --dry-run
    • Network accessline 107
      npx shadcn@latest add https://api.npoint.io/abc123 --dry-run
    • Network accessline 173
      input   docs      https://ui.shadcn.com/docs/components/radix/input
    • Network accessline 174
      docs      https://ui.shadcn.com/docs/components/radix/input
    • Network accessline 175
      examples  https://raw.githubusercontent.com/.../examples/input-example.tsx
    • Network accessline 177
      button   docs      https://ui.shadcn.com/docs/components/radix/button
    • Network accessline 178
      docs      https://ui.shadcn.com/docs/components/radix/button
    • Network accessline 179
      examples  https://raw.githubusercontent.com/.../examples/button-example.tsx
    • Network accessline 275
      1. **Named:** `--preset nova` or `--preset lyra` 2. **Code:** `--preset a2r6bw` (version-prefixed base62 string, e.g. `a2r6bw` or `b0`) 3. **URL:** `--preset "https://ui.shadcn.com/init?base=radix&style=nova&..."`
    • Network accessline 277
      3. **URL:** `--preset "https://ui.shadcn.com/init?base=radix&style=nova&..."`

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/customization.md

    • Network accessline 79
      # Use a custom theme URL. npx shadcn@latest apply --preset "https://ui.shadcn.com/init?base=radix&style=nova&theme=blue&..."
    • Network accessline 80
      npx shadcn@latest apply --preset "https://ui.shadcn.com/init?base=radix&style=nova&theme=blue&..."

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/mcp.md

    • Network accessline 90
      {   "registries": {     "@acme": "https://acme.com/r/{name}.json",
    • Network accessline 91
      "registries": {     "@acme": "https://acme.com/r/{name}.json",     "@private": {
    • Network accessline 92
      "@acme": "https://acme.com/r/{name}.json",
    • Network accessline 93
      [Credential-related source omitted]
    • Network accessline 94
      "url": "https://private.com/r/{name}.json",
    • Access to secretsline 95
      [Credential-related source omitted]
    • Network accessline 105
      Community registry index: `https://ui.shadcn.com/r/registries.json`

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/shadcn/registry.md

    • Network accessline 28
      {   "$schema": "https://ui.shadcn.com/schema/registry.json",
    • Network accessline 29
      "$schema": "https://ui.shadcn.com/schema/registry.json",
    • Network accessline 30
      "name": "acme",   "homepage": "https://acme.com",   "items": [
    • Network accessline 31
      "homepage": "https://acme.com",
    • Network accessline 61
      {   "$schema": "https://ui.shadcn.com/schema/registry.json",
    • Network accessline 62
      "$schema": "https://ui.shadcn.com/schema/registry.json",
    • Network accessline 63
      "name": "acme",   "homepage": "https://acme.com",   "include": ["registry/ui/registry.json", "registry/blocks/registry.json"]
    • Network accessline 64
      "homepage": "https://acme.com",
    • Network accessline 186
      | `@acme/button`                      | namespace | Item `button` from configured registry `@acme`.              | | `@acme/ui/button`                   | namespace | Item `ui/button` from configured registry `@acme`.           | | `https:/
    • Network accessline 187
      | `@acme/ui/button`                   | namespace | Item `ui/button` from configured registry `@acme`.           | | `https://example.com/r/button.json` | url       | Built registry item JSON at that URL.                        | | `./butto
    • Network accessline 188
      | `https://example.com/r/button.json` | url       | Built registry item JSON at that URL.                        |
    • Network accessline 227
      -> resolve ref with git ls-remote   -> commit SHA   -> read https://raw.githubusercontent.com/{owner}/{repo}/{sha}/registry.json
    • Network accessline 228
      -> commit SHA   -> read https://raw.githubusercontent.com/{owner}/{repo}/{sha}/registry.json   -> read includes and item files from the same SHA
    • Network accessline 229
      -> read https://raw.githubusercontent.com/{owner}/{repo}/{sha}/registry.json

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/templates/run.md

    • Network accessline 3
      | Item         | Details                                                                 | | ------------ | ----------------------------------------------------------------------- | | Page         | `/<path>`, application URL `http://…/main
    • Network accessline 4
      | ------------ | ----------------------------------------------------------------------- | | Page         | `/<path>`, application URL `http://…/main`                              | | Code version | Description of the changes at the time of
    • Network accessline 5
      | Page         | `/<path>`, application URL `http://…/main`                              |

    packages/app/app-skills/skills/nocobase-app-development/references/frontend/ui-workflow.md

    • Network accessline 107
      1. If the application is running, reuse it; if not, start it with `pnpm dev` and open the `Local:` URL it prints, which ends with the deployment base path and a slash (for example `http://127.0.0.1:13000/main/`), with the page's path append
    • Dangerous shell operationline 151
      Cleanup: first retain the confirmed decisions as described under Artifacts. Delete only the temporary task copies of `design.md`, `review-design.md`, `run.md`, `acceptance.md` and `capture.json`, and the sign-in sessions `storage/ui-workflo

    packages/app/app-skills/skills/nocobase-app-development/references/http-api.md

    • Network accessline 3
      Every route under `/api` follows these rules, whether the application or a plugin owns it. They are Google's API design guidelines ([aip.dev](https://google.aip.dev)) with one change: a custom method is separated by a slash, `/apps/{appId}/
    • Network accessline 260
      Open `<origin><APP_BASE_PATH>/api/swagger/docs` in a browser where you are signed in, such as `http://127.0.0.1:13000/main/api/swagger/docs` for a local application at the default `/main`. Swagger UI sends the session cookie with every requ
    • Network accessline 265
      [Credential-related source omitted]

    packages/app/app-skills/skills/nocobase-app-development/references/plugins.md

    • Network accessline 70
      Automatically request the required package's metadata from `https://pkg-v3.nocobase.com/` in the application directory using existing npm/pnpm credentials. Registry health, access to a public package or access to another commercial package 
    • Network accessline 73
      env 'npm_config_@nocobase:registry=https://pkg-v3.nocobase.com/' npm_config_registry=https://pkg-v3.nocobase.com/ pnpm view <package> versions --json
    • Network accessline 81
      env 'npm_config_@nocobase:registry=https://pkg-v3.nocobase.com/' npm_config_registry=https://pkg-v3.nocobase.com/ pnpm nocobase plugin register <package> --version <compatible-version>

    packages/app/app-skills/skills/nocobase-app-development/references/services-and-jobs.md

    • Network accessline 101
      public async execute({ jobId, signal }: JobExecutionContext): Promise<void> {     const response = await fetch(this.payload.url, {
    • Network accessline 102
      const response = await fetch(this.payload.url, {
    • Network accessline 120
      const receipt = await executor.addJob(   new PublishDocument({     url: 'https://publisher.example/documents',
    • Network accessline 121
      new PublishDocument({     url: 'https://publisher.example/documents',     documentId: 'document-42',
    • Network accessline 122
      url: 'https://publisher.example/documents',

    packages/app/app-skills/skills/nocobase-app-development/references/testing.md

    • Network accessline 127
      expect((await request('/orders')).status).toBe(401);   const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   expect((await admin.fetch('/orders')).status).toBe(200);
    • Network accessline 128
      const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   expect((await admin.fetch('/orders')).status).toBe(200); });
    • Network accessline 129
      expect((await admin.fetch('/orders')).status).toBe(200);

    packages/app/app-skills/skills/nocobase-app-development/references/testing/cli/command.md

    • Network accessline 95
      },       },       app: { publicOrigin: 'http://localhost' },
    • Network accessline 96
      },       app: { publicOrigin: 'http://localhost' },       auth: {
    • Network accessline 97
      app: { publicOrigin: 'http://localhost' },
    • Network accessline 98
      [Credential-related source omitted]
    • Network accessline 99
      [Credential-related source omitted]
    • Network accessline 100
      trustedOrigins: ['http://localhost'],

    packages/app/app-skills/skills/nocobase-app-development/references/testing/playwright/login.md

    • Access to secretsline 3
      [Credential-related source omitted]
    • Network accessline 11
      [Credential-related source omitted]
    • Access to secretsline 11
      [Credential-related source omitted]
    • Access to secretsline 134
      [Credential-related source omitted]

    packages/app/app-skills/skills/nocobase-app-development/references/testing/server/routes.md

    • Network accessline 37
      connections: ['main'],   config: {     app: { publicOrigin: 'http://localhost' },
    • Network accessline 38
      config: {     app: { publicOrigin: 'http://localhost' },     auth: {
    • Network accessline 39
      app: { publicOrigin: 'http://localhost' },
    • Network accessline 40
      [Credential-related source omitted]
    • Network accessline 41
      [Credential-related source omitted]
    • Network accessline 42
      trustedOrigins: ['http://localhost'],
    • Network accessline 74
      test('returns the administrator record after sign-in', async ({ testApp }) => {   const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const response = await admin.fetch(
    • Network accessline 75
      const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const response = await admin.fetch(     `/users?q=${encodeURIComponent(admin.user.email)}`,
    • Network accessline 76
      const response = await admin.fetch(
    • Network accessline 100
      const created = await admin.fetch('/users', {
    • Network accessline 102
      headers: {       'content-type': 'application/json',       origin: 'http://localhost',
    • Network accessline 103
      'content-type': 'application/json',       origin: 'http://localhost',     },
    • Network accessline 104
      origin: 'http://localhost',
    • Network accessline 110
      const member = await signIn(testApp, credentials);   const forbidden = await member.fetch('/users');
    • Network accessline 111
      const forbidden = await member.fetch('/users');
    • Network accessline 117
      const saved = await admin.fetch(
    • Network accessline 132
      test('returns 400 for an invalid page number', async ({ testApp }) => {   const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const response = await admin.fetch('/users?page=0');
    • Network accessline 134
      const response = await admin.fetch('/users?page=0');
    • Network accessline 142
      test('returns 404 for a missing user', async ({ testApp }) => {   const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const response = await admin.fetch('/users/server-test-missing-user', {
    • Network accessline 143
      const admin = await signIn(testApp, DEFAULT_ADMIN_CREDENTIALS);   const response = await admin.fetch('/users/server-test-missing-user', {     method: 'PATCH',
    • Network accessline 144
      const response = await admin.fetch('/users/server-test-missing-user', {
    • Network accessline 146
      headers: {       'content-type': 'application/json',       origin: 'http://localhost',
    • Network accessline 147
      'content-type': 'application/json',       origin: 'http://localhost',     },
    • Network accessline 148
      origin: 'http://localhost',
    • Network accessline 160
      `request('/users')` is anonymous and resolves below the application's API root, including its deployment base path. `signIn()` performs a real sign-in; `admin.fetch()` and `member.fetch()` attach the resulting session cookie. Pass `/users`,

    packages/app/app-skills/skills/nocobase-app-development/scripts/check-ui-components.mjs

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-development/scripts/create-internal-package.mjs

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/cli/count.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/cli/index.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/index.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/de-DE.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/en-US.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/es-ES.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/fr-FR.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/id-ID.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/index.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/ja-JP.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/pt-BR.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/vi-VN.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/zh-CN.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/locales/zh-TW.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/public-config.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/client/reading-list.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/database/migrations/202610180001_reading_list.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/eslint.config.js

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/package.json

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/server/config.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/server/index.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/server/provider.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/server/providers/index.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/server/routes.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/server/service.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/cli/count.test.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/client/public-config.test.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/client/reading-list.test.tsx

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/database/migration.test.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/fixtures/app/package.json

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/fixtures/app/server/app.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/fixtures/app/server/runtime.ts

    • Executable scriptline 1
      Executable file
    • Network accessline 36
      internalBasePath: '',         publicApiUrl: '/main/api',         publicOrigin: 'http://localhost',
    • Network accessline 37
      publicApiUrl: '/main/api',         publicOrigin: 'http://localhost',       },
    • Network accessline 38
      publicOrigin: 'http://localhost',
    • Network accessline 42
      [Credential-related source omitted]
    • Network accessline 43
      [Credential-related source omitted]
    • Network accessline 44
      trustedOrigins: ['http://localhost'],

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/fixtures/app/server/standalone.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/helpers/app.ts

    • Executable scriptline 1
      Executable file
    • Network accessline 20
      const response = await app.request('/auth/sign-up/email', {     method: 'POST',     headers: { 'content-type': 'application/json', origin: 'http://localhost' },
    • Network accessline 21
      method: 'POST',     headers: { 'content-type': 'application/json', origin: 'http://localhost' },     body: JSON.stringify({ ...credentials, name }),
    • Network accessline 22
      headers: { 'content-type': 'application/json', origin: 'http://localhost' },

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/server/config.test.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/tests/server/routes.test.ts

    • Executable scriptline 1
      Executable file
    • Network accessline 11
      test('rejects a signed-in reader without a grant', async ({ testApp }) => {   const reader = await registerReader(testApp, 'denied-reader');   const response = await reader.fetch('/readingList');
    • Network accessline 12
      const reader = await registerReader(testApp, 'denied-reader');   const response = await reader.fetch('/readingList');   expect(response.status).toBe(403);
    • Network accessline 13
      const response = await reader.fetch('/readingList');
    • Network accessline 44
      const response = await reader.fetch('/readingList');

    packages/app/app-skills/skills/nocobase-app-plugin-development/assets/testing-example/vitest.config.ts

    • Executable scriptline 1
      Executable file

    packages/app/app-skills/skills/nocobase-app-plugin-development/references/client-components.md

    • Network accessline 30
      {   "$schema": "https://ui.shadcn.com/schema.json",
    • Network accessline 31
      "$schema": "https://ui.shadcn.com/schema.json",
    • Network accessline 50
      },   "registries": {     "@nocobase": "https://ui.nocobase.com/r/{name}.json"
    • Network accessline 51
      "registries": {     "@nocobase": "https://ui.nocobase.com/r/{name}.json"   },
    • Network accessline 52
      "@nocobase": "https://ui.nocobase.com/r/{name}.json"

    packages/app/app-skills/skills/nocobase-app-plugin-development/references/http-api.md

    • Network accessline 152
      [Credential-related source omitted]

    packages/app/app-skills/skills/nocobase-app-plugin-development/references/registration.md

    • Network accessline 22
      When target App integration needs a commercial NocoBase plugin or driver, automatically request that package's metadata from `https://pkg-v3.nocobase.com/` with existing npm/pnpm credentials and command-local global/scoped registry override

    packages/app/app-skills/skills/nocobase-app-plugin-development/references/server-route-examples.md

    • Network accessline 460
      const authentication = new Auth({         connection: fixture.database.connection(),         baseURL: 'http://example.test',
    • Network accessline 461
      [Credential-related source omitted]
    • Network accessline 462
      baseURL: 'http://example.test',

    packages/app/app-skills/skills/nocobase-app-plugin-development/scripts/verify-testing-example.mjs

    • Executable scriptline 1
      #!/usr/bin/env node

    packages/app/app-skills/skills/nocobase-app-upgrade/SKILL.md

    • Dangerous shell operationline 39
      Never: overwrite the application with a fresh template copy; bump `defaultTemplateVersion` without merging the source; resolve a conflict by discarding the user's side; run `git checkout --`, `git restore`, `git reset --hard`, `git stash`, 
    • Network accessline 66
      REGISTRY=https://registry.npmjs.org

    packages/app/app-skills/skills/nocobase-app-upgrade/references/application-cookie-isolation.md

    • Access to secretsline 51
      [Credential-related source omitted]

    packages/app/app-skills/skills/nocobase-app-upgrade/references/database-upgrades.md

    • Network accessline 57
      When the installed plugins cross the index correction described in the [agents upgrade notes](https://github.com/nocobase/nocobase/blob/943a9a8a80cc1f76c7a01ecd4965a2a0c51be1eb/packages/plugins/app-plugin-agents/docs/mysql-installation-upgr
    • Network accessline 57
      When the installed plugins cross the index correction described in the [agents upgrade notes](https://github.com/nocobase/nocobase/blob/943a9a8a80cc1f76c7a01ecd4965a2a0c51be1eb/packages/plugins/app-plugin-agents/docs/mysql-installation-upgr

    packages/app/app-skills/skills/nocobase-app-upgrade/references/versioned-upgrade-verification.md

    • Network accessline 19
      1. Record the release commit and the actual published versions of both templates, app-client and app-skills. Resolve the intended public registry/channel once with `npm view <template> dist-tags --json --registry=https://registry.npmjs.org`

    packages/app/app-skills/skills/nocobase-deployment/SKILL.md

    • Network accessline 61
      For templates supporting `CDN_BASE_URL` in `vite.config.ts`, set it before building, for example `CDN_BASE_URL=https://cdn.example.com/my-app/v1/ pnpm build --target linux-x64 --tar`. Use a full HTTPS URL ending in `/`. `pnpm build` reads t
    • Network accessline 65
      For a Docker source build, pass `--build-arg CDN_BASE_URL=https://cdn.example.com/my-app/v1/`; the host's `.env` does not enter the build. With `DIST=prebuilt`, configure the earlier `pnpm build` instead. A prebuilt image's build argument o
    • Network accessline 96
      For every required commercial backend package, automatically probe its metadata at `https://pkg-v3.nocobase.com/` using existing credentials and command-local global/scoped registry overrides, check runtime/peer compatibility and install/re
    • Network accessline 113
      npx --registry=https://registry.npmjs.org @nocobase/app-installer@beta install /srv/nocobase/crm --archive /tmp/crm.tar.gz --origin https://apps.example.com
    • Network accessline 114
      npx --registry=https://registry.npmjs.org @nocobase/app-installer@beta upgrade --dir /srv/nocobase/crm --archive /tmp/crm.tar.gz
    • Network accessline 147
      [Credential-related source omitted]

    packages/app/app-skills/skills/nocobase-deployment/references/deploy-to-studio.md

    • Access to secretsline 115
      [Credential-related source omitted]

    packages/libs/drive/skills/nocobase-drive/references/custom-drivers.md

    • Network accessline 7
      Implement `CustomDriver` in your application or import it from a driver package. It must implement `DriverContract` from `flydrive/types`, including streaming, metadata, visibility, URLs, and listing as well as ordinary reads and writes. Se

    packages/libs/drive/skills/nocobase-drive/references/fs.md

    • Network accessline 50
      location: '/srv/app/storage/public',   visibility: 'public',   url: 'https://files.example.com/uploads',
    • Network accessline 51
      visibility: 'public',   url: 'https://files.example.com/uploads', } satisfies import('@nocobase/drive').FsDriveDiskConfig;
    • Network accessline 52
      url: 'https://files.example.com/uploads',
    • Network accessline 56
      With this disk, `getUrl('images/a b.png')` returns `https://files.example.com/uploads/images/a%20b.png`. A URL base such as `/my-app/storage` is also supported; include the application's base path when needed. Setting `url` only constructs 

    packages/libs/drive/skills/nocobase-drive/references/oss.md

    • Network accessline 26
      The role is discovered automatically unless `roleName` is provided. Only hardened metadata mode is supported: the runtime, including containers, must reach `http://100.100.100.200` and obtain a metadata token. A container or ACK deployment 
    • Network accessline 57
      Grant `oss:ListObjects` on `acs:oss:*:*:your-bucket` and `oss:GetObject`, `oss:PutObject`, and `oss:DeleteObject` on `acs:oss:*:*:your-bucket/*`, limited to the paths the application needs. Copy requires source read and destination write ac
    • Network accessline 65
      `region` includes the `oss-` prefix and must match the bucket. With `internal: false` (default), operations and links use `https://your-bucket.oss-cn-hangzhou.aliyuncs.com`. With `internal: true`, both use `https://your-bucket.oss-cn-hangzh
    • Network accessline 67
      Optional `domain: https://files.example.com` overrides operation and link hosts, taking priority over `internal`. It must be an HTTPS origin without a path, query or credentials, bound to the selected bucket in OSS with a valid certificate.

    packages/libs/drive/skills/nocobase-drive/references/s3.md

    • Network accessline 38
      bucket: your-bucket       region: us-east-1       endpoint: https://objects.example.com
    • Network accessline 39
      region: us-east-1       endpoint: https://objects.example.com       forcePathStyle: true
    • Network accessline 40
      endpoint: https://objects.example.com

    packages/plugins/app-plugin-agents/skills/nocobase-app-plugin-agents/references/distribution.md

    • Network accessline 49
      # The CLI alone, with a download token any signed-in person mints (one platform, three downloads within 30 minutes): curl -fsSL https://app.example.com/api/agents/dist/installScript | sh -s -- --token <download token>
    • Dangerous shell operationline 50
      curl -fsSL https://app.example.com/api/agents/dist/installScript | sh -s -- --token <download token>
    • Network accessline 50
      curl -fsSL https://app.example.com/api/agents/dist/installScript | sh -s -- --token <download token>
    • Network accessline 52
      # A runtime: also installs nocobase-runner, registers it and starts it as a user service. "Add runtime" shows this line: curl -fsSL https://app.example.com/api/agents/dist/installScript | sh -s -- --runner --server https://app.example.com -
    • Dangerous shell operationline 53
      curl -fsSL https://app.example.com/api/agents/dist/installScript | sh -s -- --runner --server https://app.example.com --token <registration token>
    • Network accessline 53
      curl -fsSL https://app.example.com/api/agents/dist/installScript | sh -s -- --runner --server https://app.example.com --token <registration token>
    • Network accessline 74
      npm install -g @nocobase/agent-runner nocobase-runner register --server https://app.example.com --token <registration token>
    • Network accessline 75
      nocobase-runner register --server https://app.example.com --token <registration token>

    packages/plugins/app-plugin-api-keys/skills/nocobase-app-plugin-api-keys/SKILL.md

    • Network accessline 14
      This package is Better Auth's [API Key plugin](https://www.better-auth.com/docs/plugins/api-key) plus the
    • Network accessline 15
      [API Key plugin](https://www.better-auth.com/docs/plugins/api-key) plus the
    • Network accessline 78
      [Credential-related source omitted]
    • Network accessline 146
      [Credential-related source omitted]
    • Network accessline 147
      [Credential-related source omitted]
    • Network accessline 148
      [Credential-related source omitted]

    packages/plugins/app-plugin-authentication/skills/nocobase-app-plugin-authentication/references/adding-sign-in-methods.md

    • Access to secretsline 56
      [Credential-related source omitted]
    • Access to secretsline 58
      [Credential-related source omitted]
    • Access to secretsline 89
      [Credential-related source omitted]

    packages/plugins/app-plugin-authentication/skills/nocobase-app-plugin-authentication/references/authentication-email.md

    • Network accessline 12
      app:   publicOrigin: https://app.example.com
    • Network accessline 13
      publicOrigin: https://app.example.com
    • Access to secretsline 59
      [Credential-related source omitted]

    packages/plugins/app-plugin-demo-mode/skills/nocobase-app-plugin-demo-mode/assets/minimal-demo/client/pages/demo-projects.tsx

    • Executable scriptline 1
      Executable file

    packages/plugins/app-plugin-demo-mode/skills/nocobase-app-plugin-demo-mode/assets/minimal-demo/database/main/migrations/202610220001_example_demo_projects.ts

    • Executable scriptline 1
      Executable file

    packages/plugins/app-plugin-demo-mode/skills/nocobase-app-plugin-demo-mode/assets/minimal-demo/server/demo/business.ts

    • Executable scriptline 1
      Executable file

    packages/plugins/app-plugin-demo-mode/skills/nocobase-app-plugin-demo-mode/assets/minimal-demo/server/demo/dataset.ts

    • Executable scriptline 1
      Executable file

    packages/plugins/app-plugin-demo-mode/skills/nocobase-app-plugin-demo-mode/assets/minimal-demo/server/providers/demo.ts

    • Executable scriptline 1
      Executable file

    packages/plugins/app-plugin-demo-mode/skills/nocobase-app-plugin-demo-mode/assets/minimal-demo/server/routes/demo-projects.ts

    • Executable scriptline 1
      Executable file

    packages/plugins/app-plugin-i18n/skills/nocobase-app-plugin-i18n/SKILL.md

    • Broad permissionsline 1
      Bash, Read, Write, Edit, Grep, Glob

    packages/plugins/app-plugin-mail/skills/nocobase-app-plugin-mail/SKILL.md

    • Broad permissionsline 1
      Read, Grep, Glob, Bash

    packages/plugins/app-plugin-mail/skills/nocobase-app-plugin-mail/references/configuration-and-accounts.md

    • Network accessline 95
      Official references: [Gmail API quotas and quota-increase guidance](https://developers.google.com/workspace/gmail/api/reference/quota?hl=zh-cn). [verified: 2026-09-26]
    • Network accessline 113
      The default callback is the app-local `/mail/oauth/callback`. Mail combines `app.publicOrigin` (or the request origin) with `app.publicBasePath` and that path. An application mounted at `/main` with origin `https://mail.example.com` uses:
    • Network accessline 116
      https://mail.example.com/main/mail/oauth/callback
    • Network accessline 133
      With origin `https://mail.example.com` and public base path `/main`, the provider must redirect to `https://mail.example.com/main/mail/oauth/callback`, and the browser will finish at `https://mail.example.com/main/mail/accounts?mailAuthoriz
    • Network accessline 149
      For example, base `https://mail.example.com/main/mail/webhooks`, type `gmail`, and instance `google` produce `https://mail.example.com/main/mail/webhooks/gmail/google/<secret>`.

    packages/plugins/app-plugin-mail/skills/nocobase-app-plugin-mail/references/synchronization-and-diagnostics.md

    • Network accessline 33
      Official references: [Gmail API quotas and retry guidance](https://developers.google.com/workspace/gmail/api/reference/quota?hl=zh-cn) and [HTTP batch behavior and limits](https://developers.google.com/workspace/gmail/api/guides/batch?hl=zh

    packages/plugins/app-plugin-notification-in-app/README.md

    • Access to secretsline 40
      [Credential-related source omitted]
    • Network accessline 115
      Pass `target: { type: 'route', path: '/topics/123' }` for application navigation. Do not include the deployment prefix: the inbox Router adds its basename. Pass `target: { type: 'url', url: 'https://example.com/main/topics/123' }` for a com

    packages/plugins/app-plugin-notification-in-app/skills/nocobase-app-plugin-notification-in-app/SKILL.md

    • Broad permissionsline 1
      Bash, Read, Write, Grep, Glob

    packages/plugins/app-plugin-notification-in-app/skills/nocobase-app-plugin-notification-in-app/references/inbox-integration.md

    • Network accessline 75
      Use `target: { type: 'route', path: '/topics/123' }` for an internal route without the deployment prefix, or `target: { type: 'url', url: 'https://example.com/main/topics/123' }` for a complete HTTP(S) URL. The inbox adds the Router basenam

    packages/plugins/app-plugin-notification/skills/nocobase-app-plugin-notification/SKILL.md

    • Broad permissionsline 1
      Bash, Read, Write, Grep, Glob

    packages/plugins/app-plugin-notification/skills/nocobase-app-plugin-notification/references/channel-and-provider-extensions.md

    • Network accessline 126
      }: ChannelSendInput<TeamMessage>): Promise<ChannelSendResult> {     try {       const response = await fetch(this.config.endpoint, {
    • Network accessline 127
      try {       const response = await fetch(this.config.endpoint, {         method: 'POST',
    • Network accessline 128
      const response = await fetch(this.config.endpoint, {
    • Network accessline 196
      team-alerts:       type: team-webhook       endpoint: https://hooks.example.com/notify
    • Network accessline 197
      [Credential-related source omitted]
    • Network accessline 198
      endpoint: https://hooks.example.com/notify

    packages/plugins/app-plugin-notification/skills/nocobase-app-plugin-notification/references/integration-and-configuration.md

    • Network accessline 26
      ops-feishu:       type: feishu-webhook       webhookUrl: https://open.feishu.cn/open-apis/bot/v2/hook/replace-with-the-token
    • Network accessline 27
      type: feishu-webhook       webhookUrl: https://open.feishu.cn/open-apis/bot/v2/hook/replace-with-the-token     inbox:
    • Network accessline 28
      webhookUrl: https://open.feishu.cn/open-apis/bot/v2/hook/replace-with-the-token
    • Access to secretsline 38
      [Credential-related source omitted]

    packages/plugins/app-plugin-notification/skills/nocobase-app-plugin-notification/references/sending-notifications.md

    • Network accessline 16
      'ops-feishu': {       text: 'Approved',       target: { type: 'url', url: 'https://example.com/main/approvals/123' },
    • Network accessline 17
      text: 'Approved',       target: { type: 'url', url: 'https://example.com/main/approvals/123' },     },
    • Network accessline 18
      target: { type: 'url', url: 'https://example.com/main/approvals/123' },

    packages/plugins/app-plugin-template-print/skills/nocobase-app-plugin-template-print/SKILL.md

    • Broad permissionsline 1
      Bash, Read, Write, Grep, Glob

    packages/plugins/app-plugin-template-print/skills/nocobase-app-plugin-template-print/references/rendering.md

    • Network accessline 28
      The [official embedded Node API](https://carbone.io/documentation/developer/embedding/embedding-in-node.html) documents `render`, `addFormatters`, buffer/path return modes, and LibreOffice requirements. [verified: 2026-09-22] Check the sele

    skills/nocobase-app-installer/SKILL.md

    • Network accessline 15
      npx --yes --registry="${NOCOBASE_REGISTRY:-https://registry.npmjs.org}" @nocobase/app-installer@beta <command> … --json
    • Network accessline 72
      1. Check the machine: `node --version` (24 or later) and `command -v pm2`, which finds pm2 without starting its daemon. pm2 4.3 or later has to be installed globally, `npm install -g pm2`; a copy fetched through `npx` breaks `pm2 startup`. 
    • Network accessline 73
      2. Settle with the user: the target directory, new or empty, such as `/srv/nocobase/crm`; the public origin without the base path, such as `https://apps.example.com`, which may be left out for a machine reached only at `http://127.0.0.1:<po

    skills/nocobase-app-installer/references/remote-deployment.md

    • Network accessline 22
      npx --yes --registry="${NOCOBASE_REGISTRY:-https://registry.npmjs.org}" @nocobase/app-installer@beta deploy \
    • Network accessline 24
      --archive storage/exports/dist.tar.gz --origin https://app.example.com --json
    • Network accessline 36
      npx --yes --registry="${NOCOBASE_REGISTRY:-https://registry.npmjs.org}" @nocobase/app-installer@beta deploy \

    skills/nocobase-create-app/SKILL.md

    • Network accessline 36
      (cd <parent-directory> && PNPM_CONFIG_MINIMUM_RELEASE_AGE=0 npm_config_registry="${NOCOBASE_REGISTRY:-https://registry.npmjs.org}" pnpm create @nocobase/app@beta <name> --template-tag=beta --json)
    • Network accessline 82
      The last of the `nextCommands`, `pnpm dev`, does not exit. Run it in the background and wait for the URL it prints: it prints a `Local:` line only once the application is ready, and the URL includes the application's path, such as `/main/`.
    • Dangerous shell operationline 115
      | `Could not locate the bindings file`                 | No prebuilt `better-sqlite3` binary matches this platform. Install a C++ toolchain, set `better-sqlite3: true` under `allowBuilds` in `pnpm-workspace.yaml`, then run `rm -rf node_modu
    • Network accessline 119
      For an application walkthrough, see https://github.com/nocobase/nocobase/blob/v3-develop/docs/docs/en/capabilities/quick-start.md.

    How the signals fit together

    Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

    Some files could not be read; the facts below still hold.

    Signal confidence: 500 facts

    and 450 more

    Only the first 500 facts are listed.

    Works with

    • Native The repository ships a manifest, folder or frontmatter field for this agent.
    • Compatible A standard SKILL.md that this agent can read.
    • Unknown No evidence either way.

    Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

    Add this badge to your README

    It updates every night and links to this page.

    nocobase/nocobase: #82 on hotskills, 24.9k stars

    [![nocobase/nocobase on hotskills](https://hotskills.dev/badge/nocobase-nocobase.svg)](https://hotskills.dev/skill/nocobase-nocobase/)