@fluentcommerce/ai-skills 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +17 -12
  2. package/bin/cli.mjs +219 -43
  3. package/content/cli/skills/fluent-bootstrap/SKILL.md +1 -1
  4. package/content/cli/skills/fluent-cli-mcp-cicd/SKILL.md +1 -1
  5. package/content/cli/skills/fluent-cli-reference/SKILL.md +1 -1
  6. package/content/cli/skills/fluent-cli-retailer/SKILL.md +1 -1
  7. package/content/cli/skills/fluent-connect/SKILL.md +58 -3
  8. package/content/cli/skills/fluent-profile/SKILL.md +35 -5
  9. package/content/cli/skills/fluent-workflow/SKILL.md +2 -1
  10. package/content/dev/agents/fluent-backend-dev.md +2 -2
  11. package/content/dev/agents/fluent-dev.md +1 -1
  12. package/content/dev/agents/fluent-frontend-dev.md +1 -1
  13. package/content/dev/skills/fluent-account-snapshot/SKILL.md +1 -1
  14. package/content/dev/skills/fluent-archive/SKILL.md +2 -1
  15. package/content/dev/skills/fluent-build/SKILL.md +2 -2
  16. package/content/dev/skills/fluent-connection-analysis/SKILL.md +2 -1
  17. package/content/dev/skills/fluent-custom-code/SKILL.md +3 -2
  18. package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +7 -6
  19. package/content/dev/skills/fluent-e2e-test/SKILL.md +1 -1
  20. package/content/dev/skills/fluent-entity-flow-diagnose/SKILL.md +2 -1
  21. package/content/dev/skills/fluent-event-api/SKILL.md +3 -2
  22. package/content/dev/skills/fluent-feature-explain/SKILL.md +2 -1
  23. package/content/dev/skills/fluent-feature-plan/SKILL.md +2 -1
  24. package/content/dev/skills/fluent-feature-status/SKILL.md +1 -1
  25. package/content/dev/skills/fluent-frontend-build/SKILL.md +1 -1
  26. package/content/dev/skills/fluent-frontend-readme/SKILL.md +2 -1
  27. package/content/dev/skills/fluent-frontend-review/SKILL.md +2 -1
  28. package/content/dev/skills/fluent-goal/SKILL.md +1 -1
  29. package/content/dev/skills/fluent-implementation-map/SKILL.md +1 -1
  30. package/content/dev/skills/fluent-inventory-catalog/SKILL.md +2 -2
  31. package/content/dev/skills/fluent-job-batch/SKILL.md +6 -3
  32. package/content/dev/skills/fluent-knowledge-init/SKILL.md +1 -1
  33. package/content/dev/skills/{fluent-source-onboard → fluent-module-convert}/SKILL.md +223 -24
  34. package/content/dev/skills/fluent-module-scaffold/SKILL.md +2 -1
  35. package/content/dev/skills/fluent-module-validate/SKILL.md +8 -7
  36. package/content/dev/skills/fluent-mystique-assess/SKILL.md +22 -6
  37. package/content/dev/skills/fluent-mystique-builder/SKILL.md +33 -2
  38. package/content/dev/skills/fluent-mystique-component/SKILL.md +1 -1
  39. package/content/dev/skills/fluent-mystique-diff/SKILL.md +1 -1
  40. package/content/dev/skills/fluent-mystique-preview/SKILL.md +19 -2
  41. package/content/dev/skills/fluent-mystique-scaffold/SDK_REFERENCE.md +2 -2
  42. package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +13 -2
  43. package/content/dev/skills/fluent-mystique-scaffold/TEMPLATES.md +1 -1
  44. package/content/dev/skills/fluent-mystique-sdk-reference/SKILL.md +2 -1
  45. package/content/dev/skills/fluent-pre-deploy-check/SKILL.md +3 -3
  46. package/content/dev/skills/fluent-retailer-config/SKILL.md +3 -3
  47. package/content/dev/skills/fluent-rollback/SKILL.md +1 -1
  48. package/content/dev/skills/fluent-rule-lookup/SKILL.md +2 -1
  49. package/content/dev/skills/fluent-rule-scaffold/SKILL.md +7 -6
  50. package/content/dev/skills/fluent-rule-test/SKILL.md +2 -1
  51. package/content/dev/skills/fluent-scope-plan/SKILL.md +2 -2
  52. package/content/dev/skills/fluent-session/SKILL.md +1 -1
  53. package/content/dev/skills/fluent-settings/SKILL.md +2 -2
  54. package/content/dev/skills/fluent-skill-observability/SKILL.md +1 -1
  55. package/content/dev/skills/fluent-sourcing/SKILL.md +38 -13
  56. package/content/dev/skills/fluent-system-monitoring/SKILL.md +1 -1
  57. package/content/dev/skills/fluent-test-data/SKILL.md +1 -1
  58. package/content/dev/skills/fluent-trace/SKILL.md +3 -2
  59. package/content/dev/skills/fluent-transition-api/SKILL.md +3 -2
  60. package/content/dev/skills/fluent-ui-record/SKILL.md +1 -1
  61. package/content/dev/skills/fluent-ui-test/SKILL.md +9 -8
  62. package/content/dev/skills/fluent-use-case-discover/SKILL.md +2 -2
  63. package/content/dev/skills/fluent-workflow-analyzer/SKILL.md +3 -2
  64. package/content/dev/skills/fluent-workspace-tree/SKILL.md +4 -3
  65. package/content/knowledge/index.md +3 -3
  66. package/content/knowledge/platform/domain-model.md +1 -0
  67. package/content/knowledge/platform/module-structure.md +5 -5
  68. package/content/knowledge/platform/mystique-routing.md +6 -3
  69. package/content/knowledge/platform/permissions-and-contexts.md +2 -2
  70. package/content/knowledge/platform/rule-test-patterns.md +1 -1
  71. package/content/knowledge/platform/workflow-json-structure.md +1 -1
  72. package/content/mcp-extn/skills/fluent-mcp-core/SKILL.md +2 -1
  73. package/content/mcp-extn/skills/fluent-mcp-tools/SKILL.md +3 -2
  74. package/content/rfl/skills/fluent-rfl-assess/SKILL.md +1 -1
  75. package/docs/01-first-session.md +175 -0
  76. package/docs/02-prompt-guide.md +246 -0
  77. package/docs/03-use-cases.md +1181 -0
  78. package/docs/04-onboarding-plan.md +355 -0
  79. package/docs/05-getting-started.md +262 -0
  80. package/docs/06-dev-workflow.md +1040 -0
  81. package/docs/INDEX.md +40 -0
  82. package/docs/agents-and-skills-guide.md +199 -0
  83. package/docs/capability-map.md +165 -0
  84. package/docs/chrome-devtools-mcp-reference.md +401 -0
  85. package/docs/fluent-ai-skills-reference.md +1351 -0
  86. package/docs/manifest-safety.md +79 -0
  87. package/docs/mcp-servers.md +209 -0
  88. package/docs/workflow-reference.md +167 -0
  89. package/lib/fluent-brand.css +55 -0
  90. package/metadata.json +7 -6
  91. package/package.json +17 -3
  92. package/scripts/postinstall.mjs +38 -0
  93. package/{content/dev/skills/fluent-trace/scripts/analyze-event-capture.mjs → tools/event-capture-analyzer.mjs} +3 -3
  94. package/tools/{generate-feature-dashboard.mjs → feature-dashboard.mjs} +2 -2
  95. package/tools/manifest-diff.mjs +1 -1
  96. package/{content/dev/skills/fluent-mystique-assess/validator.mjs → tools/manifest-validator.mjs} +2 -2
  97. package/tools/workflow-explainer.mjs +1021 -0
@@ -0,0 +1,79 @@
1
+ # Manifest Settings — Mandatory Safety Protocol
2
+
3
+ **NEVER create or update a Mystique manifest setting without following ALL these steps.**
4
+
5
+ ## Fixed parameters (non-negotiable)
6
+ - `valueType`: `"JSON"` — always. Never `"LOB"` or `"STRING"`.
7
+ - `context`: `"ACCOUNT"` — always. Never `"RETAILER"`. `contextId`: `0`.
8
+ - Body goes in `lobValue` — NEVER `value` (255 char limit, silently truncates).
9
+ - `lobValue` must be raw JSON, not stringified. **Never `JSON.stringify()` — double-encodes, Mystique rejects with "invalid route".**
10
+ - **MCP `setting_upsert` requires explicit `valueType: "JSON"`** for manifest settings — without it, defaults to LOB which breaks manifests. Preferred paths: CLI `fluent module install --include settings` or GraphQL `createSetting`/`updateSetting`. Use MCP `setting_get` (with `outputFile`) to read/backup existing settings before modification.
11
+
12
+ ## Before ANY setting create/update
13
+ 1. **Backup** — Save existing setting to `accounts/<PROFILE>/manifests/backups/<setting-name>_<YYYY-MM-DD>.json`. Non-manifest backups: `accounts/<PROFILE>/settings/backups/`.
14
+ 2. **Validate** — Run `/fluent-mystique-assess` on the manifest JSON.
15
+ 3. **Ask for approval** — Present: setting name, action (CREATE/UPDATE), changes, backup path, rollback instructions. **DO NOT deploy until user approves.**
16
+
17
+ ## Naming & related settings
18
+ - Main: `fc.mystique.manifest.<app>`, Fragments: `fc.mystique.manifest.<app>.fragment.<name>`
19
+ - **No `fc.mystique.apps` setting exists.** Manifest setting pattern: `fc.mystique.manifest.<appName>` where `<appName>` matches the app. Standard: **OMS App** → `fc.mystique.manifest.oms`, **Store App** → `fc.mystique.manifest.store`. Note: the `modules[]` value in workflow user actions comes from each app's `orchestrationAlias` (e.g., `"adminconsole"` for OMS App, `"servicepoint"` for Store App), NOT from the manifest setting suffix.
20
+ - Legacy settings with `RETAILER`/`LOB` — do NOT change without user approval.
21
+
22
+ ## Manifest architecture: root vs fragments (CRITICAL)
23
+
24
+ **`plugins[]` go ONLY in the root manifest (`fc.mystique.manifest.<app>`), NEVER in fragments.**
25
+
26
+ | Setting type | Contains | Example |
27
+ |---|---|---|
28
+ | Root manifest (`fc.mystique.manifest.oms`) | `plugins[]` (JS bundles) + `routes[]` (references to fragments) + app shell config | `{ plugins: [{ type: "url", src: "http://localhost:3001/" }], routes: [{ type: "reference", settingName: "...fragment.ordermanagement" }] }` |
29
+ | Fragment (`fc.mystique.manifest.oms.fragment.*`) | `routes[]` ONLY (sections, pages, descendants) — **NO plugins** | `{ manifestVersion: "2.0", routes: [{ type: "section", ... }] }` |
30
+
31
+ To load a custom JS bundle (FieldRegistry, ComponentRegistry, TemplateRegistry), add it to the **root manifest's** `plugins[]` array. Fragments inherit the loaded bundles — they do NOT load their own.
32
+
33
+ ## Plugin file precedence (CRITICAL)
34
+
35
+ OMS loads its main manifest from `/_plugins/oms/manifests/fc.mystique.manifest.oms.json`, NOT from the setting. To add custom sections, add them to an existing fragment loaded from settings (ordermanagement, products, stores, admin). You CANNOT add new fragment references to the main manifest. Fragment settings use same rules: `JSON`/`ACCOUNT`/`0`, deploy via `fluent module install --include settings --force`.
36
+
37
+ ## Deployment methods — choosing the right tool
38
+
39
+ | Need | Tool | Why |
40
+ |---|---|---|
41
+ | **Deploy manifest fragment (10-120KB)** | `fluent module install --include settings --force` | Reads from file — zero LLM context cost. Package in `assets/settings/manifests.json`. |
42
+ | **Quick update to small setting (<4KB)** | MCP `setting_upsert` with explicit `valueType: "JSON"` | Inline in tool params. Fine for root manifest references, feature flags. |
43
+ | **Read/backup existing manifest** | MCP `setting_get` + `outputFile` | Writes to disk, returns metadata only. Saves 30-100K context tokens. |
44
+ | **GraphQL fallback** | `updateSetting` mutation via CLI MCP `graphql_execute` | When other methods unavailable. No response budget limit. |
45
+
46
+ **NEVER use MCP extension `graphql_query` for manifest settings** — the 50K `FLUENT_RESPONSE_BUDGET_CHARS` silently truncates them.
47
+
48
+ ## Common mistakes
49
+
50
+ | Mistake | Symptom | Fix |
51
+ |---|---|---|
52
+ | `valueType: "LOB"` or omitted | Manifest loads but routes fail silently | Always set `valueType: "JSON"` explicitly |
53
+ | `JSON.stringify()` on `lobValue` | `"invalid route"` error in Mystique | Pass raw JSON object, never stringified |
54
+ | Body in `value` instead of `lobValue` | Truncated at 255 chars, partial manifest | Always use `lobValue` for manifest content |
55
+ | `plugins[]` in a fragment setting | Plugins silently ignored, components not registered | Move `plugins[]` to root manifest only |
56
+ | `context: "RETAILER"` | Setting not found by Mystique | Always use `context: "ACCOUNT"`, `contextId: 0` |
57
+ | Deploying without backup | No rollback path | Always backup to `accounts/<PROFILE>/manifests/backups/` first |
58
+
59
+ ## Validation checklist
60
+
61
+ Before deploying any manifest setting:
62
+
63
+ - [ ] `valueType` is `"JSON"` (not `"LOB"`, not omitted)
64
+ - [ ] `context` is `"ACCOUNT"` and `contextId` is `0`
65
+ - [ ] Body is in `lobValue`, not `value`
66
+ - [ ] `lobValue` is raw JSON (not stringified)
67
+ - [ ] `plugins[]` appear ONLY in the root manifest, not in fragments
68
+ - [ ] Backup saved to `accounts/<PROFILE>/manifests/backups/<name>_<date>.json`
69
+ - [ ] Run `/fluent-mystique-assess` on the manifest JSON
70
+ - [ ] User has explicitly approved the deployment
71
+
72
+ ## Related skills
73
+
74
+ | Skill | Use for |
75
+ |---|---|
76
+ | `/fluent-mystique-assess` | Validate and analyze manifest JSON (v2.0 schema, ~50 rules across 6 phases) |
77
+ | `/fluent-mystique-builder` | Build or modify manifest fragments safely |
78
+ | `/fluent-mystique-diff` | Compare manifest against CDN baselines |
79
+ | `/fluent-settings` | Manage non-manifest settings |
@@ -0,0 +1,209 @@
1
+ # MCP Servers
2
+
3
+ Four servers in `.mcp.json` (optionally six with Chrome MCP + hosting, DO NOT commit):
4
+
5
+ | Server | Purpose | Command |
6
+ |--------|---------|---------|
7
+ | **fluent-mcp** | Official Fluent CLI MCP (workflows, GraphQL) | `fluent mcp server --stdio` |
8
+ | **fluent-mcp-extn** | Extension server (55+ tools: events, batch, metrics, entities, workflows, settings, schema, cache, connections, planning) | `node .../fluent-mcp-extn/dist/index.js` |
9
+ | **chrome-devtools** | Browser automation for UI testing | `npx -y chrome-devtools-mcp@latest` |
10
+ | **chrome-manual** | Chrome MCP Extension for manual debugging (optional, opt-in) | `npx -y mcp-chrome-bridge http://127.0.0.1:12306/mcp` |
11
+ | **bitbucket** | Bitbucket code repository access | `npx -y @nexus2520/bitbucket-mcp-server` |
12
+ | **vercel** (optional) | Hosting/deployment for frontend assets (S3, Netlify, etc. also work) | `https://mcp.vercel.com` (remote HTTP + OAuth) |
13
+
14
+ First three auto-configured by `fluent-ai-skills install --profile <PROFILE>`. Chrome MCP Extension added with `--with-chrome` flag (requires Chrome extension from https://github.com/hangwin/mcp-chrome). Bitbucket requires manual configuration. Hosting MCP (Vercel/S3/etc.) is optional — see [Optional Hosting MCP Servers](#optional-hosting-mcp-servers) below. Auth: `FLUENT_PROFILE` (recommended) → OAuth → Token Command → Static Token. Never put secrets in `.mcp.json` — use environment variables. `FLUENT_UI_BASE_URL` points to target Fluent UX app; set via `--browser-url` or `--no-browser` to skip.
15
+
16
+ **Multi-profile auth note:** auth priority is evaluated per connection slot, not once for the whole server. One session can mix CLI-profile, explicit OAuth, and explicit static-token slots. Runtime `connection_add` supports CLI profile, OAuth, and static token; `TOKEN_COMMAND` remains startup-only.
17
+
18
+ **Naming note:** canonical `fluent-mcp-extn` tool names are underscore-first, such as `health_ping`, `graphql_query`, and `workflow_transitions`. The extension still accepts legacy dotted calls like `health.ping` for backward compatibility, but new docs and prompts should prefer underscore names.
19
+
20
+ ## Generated `.mcp.json` Structure
21
+
22
+ Running `install --profile MY_PROFILE` or `mcp-setup --profile MY_PROFILE` generates a `.mcp.json` like this:
23
+
24
+ ```json
25
+ {
26
+ "mcpServers": {
27
+ "fluent-mcp": {
28
+ "type": "stdio",
29
+ "command": "fluent",
30
+ "args": ["mcp", "server", "--stdio"],
31
+ "env": {
32
+ "FLUENT_PROFILE": "MY_PROFILE"
33
+ }
34
+ },
35
+ "fluent-mcp-extn": {
36
+ "type": "stdio",
37
+ "command": "npx",
38
+ "args": ["@fluentcommerce/fluent-mcp-extn"],
39
+ "env": {
40
+ "FLUENT_PROFILE": "MY_PROFILE",
41
+ "FLUENT_PROFILE_RETAILER": "MY_RETAILER_REF"
42
+ }
43
+ },
44
+ "chrome-devtools": {
45
+ "command": "npx",
46
+ "args": ["-y", "chrome-devtools-mcp@latest", "--user-data-dir=/home/user/.chrome-mcp-profile"],
47
+ "env": {
48
+ "FLUENT_UI_BASE_URL": "https://account.env.apps.engineering.fluentcommerce.com"
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ **Key environment variables in `.mcp.json`:**
56
+
57
+ | Variable | Server | Purpose |
58
+ |----------|--------|---------|
59
+ | `FLUENT_PROFILE` | both | Points to `~/.fluentcommerce/<PROFILE>/` for auth. **Change this to switch environments.** |
60
+ | `FLUENT_PROFILE_RETAILER` | extn | Retailer ref for scoped operations. Optional — omit to select interactively. |
61
+ | `FLUENT_PROFILES_FILE` | extn | Path to `fluent-profiles.json` for multi-profile switching at runtime. |
62
+ | `FLUENT_CACHE_ENABLED` | extn | `"true"` enables in-memory caching (auto-set with multi-profile). Recommended for all setups. |
63
+ | `FLUENT_UI_BASE_URL` | chrome-devtools | Target UX app URL for browser testing. Set via `--browser-url`. |
64
+ | `FLUENT_RESPONSE_BUDGET_CHARS` | extn | Max response size (default 50K). Do not increase — use `outputFile` for large payloads. |
65
+
66
+ ## Switching Environments / Profiles
67
+
68
+ ### Quick switch (single profile)
69
+
70
+ Edit `.mcp.json` and change `FLUENT_PROFILE` in **both** server entries, then restart your IDE:
71
+
72
+ ```bash
73
+ # Or regenerate entirely:
74
+ npx @fluentcommerce/ai-skills mcp-setup --profile STAGING_PROFILE --profile-retailer STAGING_RETAILER
75
+ ```
76
+
77
+ ### Runtime switch (multi-profile)
78
+
79
+ Set up multi-profile once:
80
+
81
+ ```bash
82
+ # Auto-discover all profiles from ~/.fluentcommerce/:
83
+ npx @fluentcommerce/ai-skills mcp-setup --profile MY_PROFILE --discover-profiles
84
+
85
+ # Or point to an existing profiles file:
86
+ npx @fluentcommerce/ai-skills mcp-setup --profile MY_PROFILE --profiles-file ./fluent-profiles.json
87
+ ```
88
+
89
+ The `fluent-profiles.json` format:
90
+
91
+ ```json
92
+ [
93
+ { "profile": "DEV_PROFILE", "retailer": "DEV_RETAILER_REF" },
94
+ { "profile": "STAGING_PROFILE", "retailer": "STAGING_RETAILER_REF" },
95
+ { "profile": "PROD_PROFILE" }
96
+ ]
97
+ ```
98
+
99
+ Then switch at runtime without restarting the IDE:
100
+
101
+ ```
102
+ List available connections → MCP connection_list
103
+ Switch to staging → MCP connection_switch({ profile: "STAGING_PROFILE" })
104
+ ```
105
+
106
+ Multi-profile automatically enables `FLUENT_CACHE_ENABLED: "true"` and wires the profiles file into the extension server.
107
+
108
+ You can also add slots at runtime:
109
+
110
+ ```
111
+ Add OAuth slot → MCP connection_add({ name: "PROD_READONLY", baseUrl: "...", clientId: "...", clientSecret: "..." })
112
+ Add static token slot → MCP connection_add({ name: "QUICK_TEST", baseUrl: "...", accessToken: "..." })
113
+ ```
114
+
115
+ ### Merge behavior
116
+
117
+ Running `mcp-setup` **merges** into the existing `.mcp.json` — it updates the three managed servers (`fluent-mcp`, `fluent-mcp-extn`, `chrome-devtools`) but preserves any custom servers you added (e.g., `bitbucket`, `vercel`). Safe to re-run.
118
+
119
+ ### Without `--profile`
120
+
121
+ Running `install` without `--profile` installs skills but generates `.mcp.json` with placeholder values (`YOUR_ACCOUNT`, `YOUR_RETAILER`). You must run `mcp-setup --profile <NAME>` afterwards to wire real credentials.
122
+
123
+ ## Click Telemetry (Visual Click Highlights)
124
+
125
+ Chrome DevTools MCP clicks are programmatic — no visible cursor appears. Click Telemetry injects JavaScript highlights (pulsing red border + label badge) around elements before interactions. This makes screenshots and screencast recordings self-documenting. Implemented in `/fluent-ui-test` (Phase 4) and `/fluent-ui-record` (full protocol). See `chrome-devtools-mcp-reference.md` (in `@fluentcommerce/ai-skills` docs) for full browser MCP reference.
126
+
127
+ **Token optimization:** Both skills inject a `__fcTest` helper library once per session (see `BROWSER_OPTIMIZATIONS.md` in the `fluent-ui-test` skill). This replaces `take_snapshot` (~30K tokens) with `pageSummary()` (~500 tokens) for page verification, `scanComponents()` (~400 tokens) for custom component detection, and one-line `highlight()`/`annotate()` calls (~100 tokens each) instead of inline 40-line JS blocks. ~90% token reduction per test session. Component compatibility matrix covers OOTB Mystique components AND custom SDK components.
128
+
129
+ ## Setting & Manifest Fetch — Tool Routing
130
+
131
+ Choose the right tool based on payload size and purpose:
132
+
133
+ | Need | Tool | Why |
134
+ |------|------|-----|
135
+ | **Download manifest/large setting** | MCP `setting_get` + `outputFile` | Writes 10-120KB to disk, returns ~200 bytes metadata. Saves 30-100K tokens per call. |
136
+ | **Existence check (does setting exist?)** | MCP `setting_get` (no outputFile) | Returns metadata inline. Do NOT request `lobValue` in GraphQL fallback. |
137
+ | **Bulk discovery (all manifests)** | MCP `setting_get` with `name: "fc.mystique.manifest.%"` + `outputFile` (directory) | One call discovers all, saves each to file. |
138
+ | **GraphQL with large response** | Official CLI MCP `graphql_execute` (no response budget) | Fallback when `setting_get` unavailable. |
139
+ | **Small GraphQL queries** | MCP extension `graphql_query` | Fine for queries under 50K chars response. |
140
+ | **Workflow download** | CLI `fluent workflow download` or MCP `workflow_get` with `outputFile` | Keeps 50K+ workflow JSON out of context. |
141
+
142
+ **NEVER use MCP extension `graphql_query` for manifest settings** — the 50K `FLUENT_RESPONSE_BUDGET_CHARS` silently truncates them. Use `setting_get` + `outputFile` (preferred) or official CLI MCP `graphql_execute` (fallback).
143
+
144
+ ## Setting & Manifest Write — Tool Routing
145
+
146
+ Choose the right tool for **writing** settings based on payload size:
147
+
148
+ | Need | Tool | Why |
149
+ |------|------|-----|
150
+ | **Deploy large setting (>4KB)** | CLI `fluent module install --include settings --force` | Reads JSON from local file — zero LLM context cost. Recommended for manifest fragments (10-120KB). Package in `assets/settings/manifests.json` as JSON array. |
151
+ | **Deploy multiple settings at once** | CLI `fluent module install --include settings --force` | One command, all settings in one `manifests.json` array. Atomic deploy. |
152
+ | **Quick update small setting (<4KB)** | MCP `setting_upsert` | Inline in tool params. Fine for root manifests, feature flags, small configs. Always set `valueType: "JSON"` for manifests. |
153
+ | **CI/CD pipeline deploy** | CLI `fluent module install --include settings` | Versioned, supports `[[token]]` config placeholders, audit trail. |
154
+ | **GraphQL fallback** | `updateSetting` mutation via CLI MCP `graphql_execute` | When CLI module install unavailable. No response budget limit. |
155
+
156
+ **NEVER use MCP `setting_upsert` for large settings (manifests >4KB)** — stuffing 10-120KB into a tool parameter wastes LLM context tokens. Use CLI `fluent module install` which reads from disk.
157
+
158
+ **CLI deploy pattern for settings:**
159
+ ```bash
160
+ DEPLOY=$(mktemp -d)
161
+ mkdir -p "$DEPLOY/assets/settings"
162
+ # manifests.json = JSON array of setting objects
163
+ cat > "$DEPLOY/assets/settings/manifests.json" << 'SETTINGS'
164
+ [{ "name": "fc.mystique.manifest.oms.fragment.ordermanagement",
165
+ "valueType": "JSON", "context": "ACCOUNT", "contextId": 0,
166
+ "lobValue": <content-from-local-file> }]
167
+ SETTINGS
168
+ echo '{"_schema":"1.0.0","name":"settings-deploy","version":"1.0.0"}' > "$DEPLOY/module.json"
169
+ echo '{}' > "$DEPLOY/module.config.json"
170
+ fluent module install "$DEPLOY" -p <PROFILE> -r <RETAILER> --include settings --force
171
+ rm -rf "$DEPLOY"
172
+ ```
173
+
174
+ ## Optional Hosting MCP Servers
175
+
176
+ An optional hosting MCP server can deploy frontend assets (Mystique SDK bundles, static files) to CDN/hosting platforms. **Not required** for core Fluent Commerce work — only needed when you host custom frontend components.
177
+
178
+ | Provider | MCP URL / Package | Auth |
179
+ |----------|-------------------|------|
180
+ | **Vercel** | `https://mcp.vercel.com` (remote HTTP) | OAuth (browser) |
181
+ | **AWS S3** | Community MCP servers (e.g., `mcp-server-s3`) | AWS credentials |
182
+ | **Netlify** | Community MCP servers | API token |
183
+ | **Cloudflare** | Community MCP servers | API token |
184
+
185
+ ### Vercel Setup
186
+
187
+ Add to `.mcp.json`:
188
+ ```json
189
+ { "mcpServers": { "vercel": { "type": "http", "url": "https://mcp.vercel.com" } } }
190
+ ```
191
+
192
+ For project-specific access: `"url": "https://mcp.vercel.com/<teamSlug>/<projectSlug>"`. Authenticate via `/mcp` in Claude Code (opens browser OAuth). Find slugs: Vercel Dashboard or `vercel projects ls`.
193
+
194
+ ### S3 Setup
195
+
196
+ ```json
197
+ { "mcpServers": { "s3": { "type": "stdio", "command": "npx", "args": ["-y", "mcp-server-s3"],
198
+ "env": { "AWS_ACCESS_KEY_ID": "<from env>", "AWS_SECRET_ACCESS_KEY": "<from env>", "AWS_REGION": "ap-southeast-2", "S3_BUCKET": "your-bucket-name" } } } }
199
+ ```
200
+
201
+ **Notes:** Hosting MCP is optional and gitignored. Each developer configures their own provider. The installer does NOT auto-configure hosting MCPs. Never put secrets in `.mcp.json`.
202
+
203
+ ---
204
+
205
+ ## Related Docs
206
+
207
+ - [INDEX.md](INDEX.md) — Documentation reading order
208
+ - [Setup Reference & Troubleshooting](05-getting-started.md) — MCP troubleshooting steps
209
+ - [Chrome DevTools MCP](chrome-devtools-mcp-reference.md) — Browser automation server reference
@@ -0,0 +1,167 @@
1
+ # Workflow Reference
2
+
3
+ ## Workflow Upload — Strict Reference
4
+
5
+ **`fluent workflow upload` DOES NOT EXIST.** CLI only has: `workflow list`, `workflow download`, `workflow merge`. Never invent a workflow upload command.
6
+
7
+ ### Method 1 — CLI `fluent module install` (RECOMMENDED)
8
+
9
+ ```bash
10
+ DEPLOY=$(mktemp -d)
11
+ mkdir -p "$DEPLOY/assets/workflows"
12
+ cp <WORKFLOW>.json "$DEPLOY/assets/workflows/"
13
+ echo '{"_schema":"1.0.0","name":"wf-deploy-tmp","version":"1.0.0"}' > "$DEPLOY/module.json"
14
+ echo '{}' > "$DEPLOY/module.config.json"
15
+ fluent module install "$DEPLOY" -p <PROFILE> -r <RETAILER> --include workflows --force
16
+ rm -rf "$DEPLOY"
17
+ ```
18
+
19
+ Updates both live server and workflowlog. Filename uses `-` not `::` (e.g., `ORDER-HD.json`). Use `--config <path>` for `[[token]]` placeholders. **Config keys MUST use `default:` prefix** (e.g., `"default:retailerId": "2"`) — unscoped keys are silently ignored.
20
+
21
+ ### Method 2 — MCP `workflow_upload` (when available)
22
+
23
+ `workflow_upload({ workflow, retailerId, validate: true, dryRun: false })` — bypasses workflowlog (CLI downloads will be stale).
24
+
25
+ ### Method 3 — REST API direct (last resort)
26
+
27
+ `POST /api/v4.1/workflow/<retailerId>` with workflow JSON body + `Authorization: Bearer $TOKEN` + `fluent.account: $ACCOUNT_ID`. Also bypasses workflowlog.
28
+
29
+ ### Version rules
30
+
31
+ Version must always increase — Fluent rejects same or lower. To "rollback," upload old content with a new higher version.
32
+
33
+ ## Workflow User Actions — Strict Reference
34
+
35
+ User actions link UI buttons to workflow rulesets via `/event/sync`.
36
+ Canonical reference: `knowledge/platform/user-action-contract.md` (copied to your workspace by the installer).
37
+
38
+ ### Mandatory fields (all required for button visibility)
39
+
40
+ | Field | Description |
41
+ |-------|-------------|
42
+ | `eventName` | Event sent on click. **Without it, button silently invisible.** |
43
+ | Ruleset `subtype` | Must match workflow `entitySubtype`. **#1 cause of missing buttons.** |
44
+ | `context[].label` | Button text |
45
+ | `context[].type` | `"PRIMARY"` or `"SECONDARY"` (uppercase) |
46
+ | `context[].modules` | Target app module aliases. **OMS app uses legacy alias `"adminconsole"`, NOT `"oms"`** (the OMS manifest sets `orchestrationAlias: "adminconsole"`). **Store app uses legacy alias `"servicepoint"`**. These are deprecated internal names — always present as "OMS app" / "Store app" to users. Empty `[]` = invisible. |
47
+ | `context[].confirm` | Boolean, NOT string `"true"` |
48
+
49
+ ### Attribute poisoning (CORRECTED)
50
+
51
+ Attributes with `source: "OVERRIDE"` and `defaultValue: "{{me.username}}"` work fine on v4.80+. Original breakage was caused by missing `subtype` on the ruleset, NOT attribute values. Safe practice: ensure `source: ""`, `defaultValue: ""` for predictability.
52
+
53
+ ### Settings-driven dropdown contract
54
+
55
+ When `source: "settings.<KEY>"` is used in a user action attribute, the UI populates a dropdown from the named setting. Three silent-failure gotchas:
56
+ 1. **lowercase `settings.`** — `"settings.CANCELLATION_REASON"` works, `"Settings.CANCELLATION_REASON"` (capital S) silently fails. No error.
57
+ 2. **`"active"` wrapper key** — Setting value MUST be `{ "active": [{ "name": "Display", "value": "CODE" }] }`. Plain array silently fails.
58
+ 3. **Retailer context match** — Setting retailer scope must match the workflow's retailer.
59
+
60
+ ### Edge cases
61
+ - **Transition API parameters**: `module` is required, and `module: "all"` returns NOTHING. `flexType` is required by the API, but MCP `workflow_transitions` auto-derives it from `type` + `subtype` when omitted (e.g., `type: "ORDER"` + `subtype: "HD"` → `flexType: "ORDER::HD"`). `flexVersion` is strongly recommended and required for some entity types. All rules treated equally regardless of plugin origin — NO "OOTB vs custom" distinction.
62
+ - **Multi-entity workflows** (ORDER::MULTI): Transition API works for ORDER::MULTI — specify correct `type: "ORDER"`, `subtype: "MULTI"`, `retailerId`, `module: "adminconsole"` (OMS app legacy alias), `flexType: "ORDER::MULTI"`, and `flexVersion`. If results are empty, debug: (1) missing mandatory params, (2) missing `eventName`, (3) missing `subtype` on ruleset, (4) wrong `modules` value.
63
+ - **Parent-child entities**: Child entities inherit `workflowRef` from parent. The Transition API accepts BOTH the standalone child workflow name AND the parent workflow name as `flexType` — use the matching `flexVersion` for whichever you specify. The UI sends the entity's `workflowRef` (parent workflow) as `flexType`.
64
+ - **Verification**: Always check via `workflow_transitions` after deploy. Debug order: (1) specific module present, (2) flexType present or auto-derived, (3) flexVersion for entity types that need it, (4) eventName, (5) subtype, (6) modules, (7) parent workflow for children. See `/fluent-workflow-builder` for full UA01-UA19 checklist.
65
+ - **Custom component override**: Two patterns: (A) Field-level — custom FieldRegistry type, replaces one field, zero risk. (B) Full-form — replaces entire form, must dispatch ALL `@EventAttribute` names. Backend agnostic if event shape preserved. See `knowledge/platform/user-action-contract.md` §9 (copied to your workspace by the installer).
66
+
67
+ ## Workflow Caching & Staleness
68
+
69
+ Three independent caching layers affect workflows. Understanding which is stale prevents the most common "my deploy didn't work" confusion.
70
+
71
+ ### Layer 1 — MCP Extension Server Cache (runtime)
72
+
73
+ The MCP extension server caches workflow reads, settings, and GraphQL schema introspection in-memory/on-disk. Enabled automatically when `FLUENT_CACHE_ENABLED=true` is set (auto-configured during multi-profile `mcp-setup`).
74
+
75
+ | Tool | What it does |
76
+ |------|-------------|
77
+ | `cache_status` | Shows enabled/disabled, entry count, hit/miss rate, per-category breakdown |
78
+ | `cache_clear` | Clears entries by pattern (omit pattern to clear everything) |
79
+
80
+ Common clear patterns:
81
+
82
+ ```
83
+ cache_clear({ pattern: "workflow:*" }) # workflow list/get
84
+ cache_clear({ pattern: "setting:get:fc.mystique.*" }) # manifests/settings
85
+ cache_clear({ pattern: "introspect:*" }) # GraphQL schema
86
+ cache_clear() # everything
87
+ ```
88
+
89
+ **When to clear:** After deploying workflows or settings via CLI or REST, and the MCP tools still return old data.
90
+
91
+ ### Layer 2 — Local Workflow Files (workspace)
92
+
93
+ Workflows downloaded by `/fluent-connect` or `/fluent-workflow` live in `accounts/<PROFILE>/workflows/<RETAILER>/`. These are static files — they do not auto-update when you deploy.
94
+
95
+ | Mechanism | Details |
96
+ |-----------|---------|
97
+ | **Content hash check** | `/fluent-connect` computes a hash of workspace state. If unchanged since last run, it skips re-downloading. Use `--force` to override. |
98
+ | **7-day staleness hint** | If the most recent workflow file is older than 7 days, `/fluent-connect` suggests re-downloading. |
99
+ | **`workflow-context.json`** | Tracks which profile/retailer the local files belong to. If you switch profiles, workflows are re-downloaded into the correct folder. |
100
+ | **`workflow-file-map.json`** | Maps workflow names (with `::`) to sanitized filenames (with `__`). Used by analyzer and builder skills to resolve files cross-platform. |
101
+
102
+ **How to refresh local files:**
103
+
104
+ ```bash
105
+ # Option A: Re-run connect with --force
106
+ /fluent-connect --profile MY_PROFILE --force
107
+
108
+ # Option B: Download specific workflow via MCP (reads live server, not workflowlog)
109
+ # In Claude Code chat:
110
+ Download the ORDER::HD workflow to the local workspace
111
+
112
+ # Option C: CLI download (reads workflowlog — see Layer 3 caveat)
113
+ fluent workflow download -p MY_PROFILE -r "My Retailer" -w all \
114
+ -o accounts/MY_PROFILE/workflows/"My Retailer"/
115
+ ```
116
+
117
+ **When to refresh:** After deploying workflow changes (especially via MCP or REST), before running `/fluent-workflow-analyzer` or `/fluent-workflow-builder` on local files.
118
+
119
+ ### Layer 3 — Fluent CLI Workflowlog (server-side)
120
+
121
+ The Fluent CLI maintains a **workflowlog** — a server-side change history that `fluent workflow download` reads from. This is NOT the live workflow; it's a log of CLI-originated changes.
122
+
123
+ **Critical gotchas:**
124
+
125
+ | Scenario | What happens | Fix |
126
+ |----------|-------------|-----|
127
+ | Deploy via MCP `workflow_upload` | Workflowlog not updated. CLI downloads return **stale** pre-upload version. | `fluent workflowlog delete` all positions, then redeploy via CLI. Or use MCP `workflow_get` / `workflow_list` which read live server. |
128
+ | Deploy via REST API | Same as MCP — workflowlog bypassed. | Same fix. |
129
+ | Failed CLI deploy | CLI writes workflowlog entries **even on failure**. Subsequent retries may conflict ("workflowlog poisoning"). | `fluent workflowlog delete` stale positions, then retry. |
130
+ | Deploy via CLI `module install` | Workflowlog updated correctly. CLI downloads are current. | No action needed. |
131
+
132
+ **How to check if workflowlog is stale:**
133
+
134
+ ```bash
135
+ # Compare live version (MCP) vs workflowlog version (CLI)
136
+ # In Claude Code chat:
137
+ Get the live ORDER::HD workflow version via MCP, then compare with local file version
138
+ ```
139
+
140
+ ### Troubleshooting — "My workflow deploy didn't take effect"
141
+
142
+ Follow this sequence:
143
+
144
+ 1. **Check live server first** — Use MCP `workflow_get` (reads live, not cache). If the change is there, it deployed fine.
145
+ 2. **Clear MCP cache** — `cache_clear({ pattern: "workflow:*" })`. Re-query.
146
+ 3. **Check local files** — Are your `accounts/<PROFILE>/workflows/` files stale? Re-download with `/fluent-connect --force` or MCP `workflow_list` with `outputDir`.
147
+ 4. **Check workflowlog** — If you deployed via MCP/REST but CLI downloads show old data, the workflowlog is stale. Fix with `fluent workflowlog delete`.
148
+ 5. **Check Transition API cache** — After rapid deploys, the Transition API may cache a stale `flexVersion`. Always specify the exact deployed version in Transition API queries.
149
+
150
+ ## ORDER::MULTI Workflow — Test Reference
151
+
152
+ Key points:
153
+ - Canonical `createOrder` contract: `knowledge/platform/create-order-reference.md` (copied to your workspace by the installer)
154
+ - Order `type` must be `"MULTI"` (not `"HD"`)
155
+ - On mutation input, items MUST include `fulfilmentChoiceRef` to link to FC
156
+ - On readback queries, verify the link via `items[].fulfilmentChoice { ... }` — do not expect an `OrderItem.fulfilmentChoiceRef` scalar
157
+ - FC needs `sourcingLocationRef` attribute
158
+ - FC `type` (routing) ≠ fulfilment `type` (created fulfilment)
159
+ - Flow: `CREATE` → `SkipFraudCheck` → `ON_VALIDATION` → `ConfirmValidation` → `ProcessOrder` → `RouteFulfilmentChoice` → `ProcessHDFulfilmentChoice` → `CreateFulfilmentFromSourcingLocation`
160
+
161
+ ---
162
+
163
+ ## Related Docs
164
+
165
+ - [INDEX.md](INDEX.md) — Documentation reading order
166
+ - [Development Workflow](06-dev-workflow.md) — Full lifecycle protocol including deploy and rollback
167
+ - [Use Cases — Deploy Safely](03-use-cases.md#scenario-8-deploy-a-workflow-change-safely) — Step-by-step deployment scenario
@@ -0,0 +1,55 @@
1
+ /*
2
+ * ═══════════════════════════════════════════════════════════
3
+ * FLUENT COMMERCE — OFFICIAL BRAND TOKENS (shared)
4
+ *
5
+ * Source of truth for CSS custom properties used by:
6
+ * - presentations/ai-skills-mcp/presentation.html
7
+ * - evals/playground (inlined via template.mjs)
8
+ *
9
+ * Palette provenance: fluentcommerce.com logo / site (see presentation deck comment).
10
+ * ═══════════════════════════════════════════════════════════
11
+ *
12
+ * Cyan (primary): #00C2EF — Logo + CTAs
13
+ * Purple (accent): #8F0CF4 — Logo accent + interactive
14
+ * Purple (mid): #552ABB — Website interactive states
15
+ * Dark (deep bg): #18013A — Logo dark / deep backgrounds
16
+ * Dark (mid bg): #26005C — Website dark purple
17
+ *
18
+ * Functional: Coral #FF6B6B | Green #51CF66 | Amber #FFD43B
19
+ * ═══════════════════════════════════════════════════════════
20
+ */
21
+
22
+ :root {
23
+ /* ── Brand: Cyan (primary accent) ── */
24
+ --fc-teal: #00C2EF;
25
+ --fc-teal-dark: #00A3C8;
26
+ --fc-teal-deeper: #0088A8;
27
+ /* ── Brand: Dark backgrounds ── */
28
+ --fc-navy: #18013A;
29
+ --fc-navy-mid: #26005C;
30
+ --fc-navy-light: #3A1070;
31
+ /* ── Functional accents ── */
32
+ --fc-coral: #FF6B6B;
33
+ --fc-coral-light: #FF8787;
34
+ --fc-green: #51CF66;
35
+ --fc-green-dark: #2B8A3E;
36
+ --fc-amber: #FFD43B;
37
+ /* ── Brand: Purple (accent) ── */
38
+ --fc-purple: #8F0CF4;
39
+ /* ── Neutrals (dark UI text on navy) ── */
40
+ --fc-white: #FFFFFF;
41
+ --fc-ghost: rgba(255,255,255,0.05);
42
+ --fc-glass: rgba(24,1,58,0.85);
43
+ --fc-text-dim: rgba(255,255,255,0.5);
44
+ --fc-text-mid: rgba(255,255,255,0.72);
45
+ /* ── Light-mode surfaces ── */
46
+ --fc-paper: #FFFFFF;
47
+ --fc-paper-soft: #F5F0FD;
48
+ --fc-lilac: #F7F2FF;
49
+ --fc-ink: #18013A;
50
+ --fc-ink-soft: #5A4A78;
51
+ --fc-border-light: rgba(24,1,58,0.10);
52
+ /* ── Layout (deck defaults; eval-playground overrides --sidebar-w in its own :root) ── */
53
+ --sidebar-w: 260px;
54
+ --section-max: 1100px;
55
+ }
package/metadata.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.12.0",
2
+ "version": "0.14.0",
3
3
  "organization": "Fluent Commerce",
4
4
  "date": "March 2026",
5
5
  "package": "@fluentcommerce/ai-skills",
@@ -112,7 +112,7 @@
112
112
  "fluent-feature-status",
113
113
  "fluent-rollback",
114
114
  "fluent-workspace-tree",
115
- "fluent-source-onboard",
115
+ "fluent-module-convert",
116
116
  "fluent-use-case-discover",
117
117
  "fluent-sourcing",
118
118
  "fluent-data-module-scaffold",
@@ -166,7 +166,7 @@
166
166
  "/fluent-feature-status",
167
167
  "/fluent-rollback",
168
168
  "/fluent-workspace-tree",
169
- "/fluent-source-onboard",
169
+ "/fluent-module-convert",
170
170
  "/fluent-use-case-discover",
171
171
  "/fluent-sourcing",
172
172
  "/fluent-data-module-scaffold",
@@ -211,7 +211,7 @@
211
211
  "fluent-build": "advisory",
212
212
  "fluent-frontend-build": "advisory",
213
213
  "fluent-pre-deploy-check": "advisory",
214
- "fluent-source-onboard": "advisory",
214
+ "fluent-module-convert": "mandatory",
215
215
  "fluent-inventory-catalog": "mandatory",
216
216
  "fluent-goal": "mandatory"
217
217
  },
@@ -232,7 +232,7 @@
232
232
  "fluent-build",
233
233
  "fluent-frontend-build",
234
234
  "fluent-pre-deploy-check",
235
- "fluent-source-onboard",
235
+ "fluent-module-convert",
236
236
  "fluent-inventory-catalog",
237
237
  "fluent-goal",
238
238
  "fluent-rule-test",
@@ -256,7 +256,8 @@
256
256
  "fluent-skill-routing-report": { "target": "fluent-skill-observability", "since": "0.12.0" },
257
257
  "fluent-feedback": { "target": "fluent-skill-observability", "since": "0.12.0" },
258
258
  "fluent-feature-phase": { "target": "fluent-scope-plan", "since": "0.12.0" },
259
- "fluent-scope-decompose": { "target": "fluent-scope-plan", "since": "0.12.0" }
259
+ "fluent-scope-decompose": { "target": "fluent-scope-plan", "since": "0.12.0" },
260
+ "fluent-source-onboard": { "target": "fluent-module-convert", "since": "0.13.0" }
260
261
  },
261
262
  "references": [
262
263
  "https://docs.fluentcommerce.com",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentcommerce/ai-skills",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "[Experimental] Fluent Commerce domain knowledge for Claude Code. Skills, agents, and MCP server configs for workflows, events, rules, and APIs.",
5
5
  "keywords": [
6
6
  "fluent-commerce",
@@ -33,18 +33,20 @@
33
33
  "test:evals:routing": "node evals/harness/runtime.mjs --suite routing --executor evals/executors/replay.mjs",
34
34
  "test:evals:routing-live": "node evals/harness/runtime.mjs --suite routing-live --executor evals/executors/codex-live.mjs",
35
35
  "test:evals:runtime-live": "node evals/harness/runtime.mjs --suite runtime-live --executor evals/executors/codex-live.mjs",
36
+ "test:evals:execution": "node evals/harness/runtime.mjs --suite execution --executor evals/executors/codex-live.mjs",
36
37
  "test:evals:runtime-live-sandbox": "node evals/harness/runtime.mjs --suite runtime-live-sandbox --executor evals/executors/codex-live.mjs",
37
38
  "test:evals:agent-routing": "node evals/harness/runtime.mjs --suite agent-routing --executor evals/executors/replay.mjs",
38
39
  "test:evals:agent-routing-live": "node evals/harness/runtime.mjs --suite agent-routing-live --executor evals/executors/codex-live.mjs",
39
40
  "test:evals:adversarial": "node evals/harness/runtime.mjs --suite adversarial --executor evals/executors/replay.mjs",
40
41
  "test:evals:routing-live:claude": "node evals/harness/runtime.mjs --suite routing-live --executor evals/executors/claude-live.mjs",
42
+ "test:evals:routing-live:sdk": "node evals/harness/runtime.mjs --suite routing-live --executor evals/executors/claude-sdk.mjs",
41
43
  "test:evals:skill-runtime": "node evals/harness/runtime.mjs --suite skill-runtime --executor evals/executors/replay.mjs",
42
44
  "test:evals:tool-behavior": "node evals/harness/runtime.mjs --suite tool-behavior --executor evals/executors/replay.mjs",
43
45
  "test:evals:chains": "node evals/harness/runtime.mjs --suite chains --executor evals/executors/replay.mjs",
44
46
  "test:evals:cases": "npm run test:evals:routing && npm run test:evals:agent-routing && npm run test:evals:adversarial && npm run test:evals:skill-runtime && npm run test:evals:tool-behavior && npm run test:evals:chains",
45
47
  "test:evals:core": "npm run test:evals:static && npm run test:evals:runtime && npm run test:evals:cases",
46
48
  "test:evals:full": "npm run test:evals:core && npm run test:evals:live",
47
- "test:evals:live": "npm run test:evals:routing-live && npm run test:evals:runtime-live",
49
+ "test:evals:live": "npm run test:evals:routing-live && npm run test:evals:runtime-live && npm run test:evals:execution",
48
50
  "test:evals": "npm run test:evals:core",
49
51
  "eval:prompt": "node evals/harness/prompt-analyze.mjs",
50
52
  "eval:batch": "node evals/harness/prompt-batch.mjs",
@@ -54,9 +56,17 @@
54
56
  "eval:run:sandbox": "node evals/scripts/run-live-evals.mjs --suite runtime-live-sandbox --executor evals/executors/codex-live.mjs",
55
57
  "eval:run:tools": "FLUENT_EVAL_ENABLE_MCP=1 node evals/scripts/run-live-evals.mjs --suite tool-behavior --executor evals/executors/claude-live.mjs",
56
58
  "eval:report": "node evals/scripts/eval-report.mjs",
59
+ "eval:promptfoo:generate": "node evals/promptfoo/generate.mjs",
60
+ "eval:promptfoo": "node evals/promptfoo/generate.mjs && npx promptfoo eval -c evals/promptfoo/promptfooconfig.yaml",
61
+ "eval:promptfoo:view": "npx promptfoo view",
62
+ "eval:playground": "node evals/playground.mjs",
63
+ "eval:playground:dev": "node --watch evals/playground.mjs",
64
+ "playground": "node evals/playground.mjs",
65
+ "playground:dev": "node --watch evals/playground.mjs",
57
66
  "test:parallel": "node scripts/test-parallel.mjs",
58
67
  "test:parallel:quick": "node scripts/test-parallel.mjs --quick",
59
68
  "test": "npm run test:smoke && npm run test:pack && npm run test:unit && npm run test:evals:core",
69
+ "postinstall": "node scripts/postinstall.mjs || true",
60
70
  "prepublishOnly": "npm test"
61
71
  },
62
72
  "type": "module",
@@ -72,10 +82,14 @@
72
82
  "!content/**/.claude-plugin",
73
83
  "docs/",
74
84
  "lib/",
85
+ "scripts/postinstall.mjs",
75
86
  "tools/",
76
87
  "!tools/vendor/",
77
88
  "metadata.json",
78
89
  "README.md",
79
90
  "LICENSE"
80
- ]
91
+ ],
92
+ "optionalDependencies": {
93
+ "@anthropic-ai/claude-agent-sdk": "^0.2.87"
94
+ }
81
95
  }