freshworks-publish-skill
npx skills add https://github.com/freshworks-developers/marketplace --skill freshworks-publish-skill
Agent 安装分布
Skill 文档
Freshworks App Publish Skill
Automated workflow for packing and publishing Freshworks Platform 3.0 apps to the marketplace.
Usage
/publish pack # Validate and pack app
/publish submit # Pack and guide submission
/publish # Full workflow (validate â pack â submit)
Execution Mode: AUTONOMOUS
When invoked, IMMEDIATELY execute without asking permission:
- Parse command arguments (
$ARGUMENTS) - Detect app directory (search for manifest.json)
- Execute the requested operation
- Report results
DO NOT:
- Ask for confirmation before running commands
- Explain steps before executing
- Provide manual instructions instead of running commands
DO:
- Run Shell commands directly
- Batch operations in parallel where possible
- Handle errors automatically
- Report after completion
Operations
1. Pack (/publish pack)
Purpose: Validate app and create distributable package for marketplace submission.
Workflow:
# Step 1: Find app directory
find . -name "manifest.json" -not -path "*/node_modules/*"
# If multiple apps found, ask user to choose
# If one app found, use that directory
# If none found, error and exit
# Step 2: Pre-pack validation (run in parallel)
cd <app-directory>
fdk validate # Must pass before packing
node --version # Verify Node.js >= 18.0.0
fdk version # Verify FDK >= 9.6.0
# Step 3: Check test coverage (if server/ exists)
# Coverage must be >= 80% for marketplace submission
# If coverage/ folder exists, check coverage/coverage-summary.json
# If coverage < 80%, warn user but continue
# Step 4: Pack the app
fdk pack
# Step 5: Verify package created
ls -lh dist/*.zip # Show package file size and name
Success Criteria:
- â
fdk validatepasses with no fatal errors - â Test coverage >= 80% (for serverless apps)
- â
dist/*.zipfile created - â Package size reasonable (< 50MB recommended)
Output:
â App directory: /path/to/my-app
â Validation passed
â Test coverage: 87.5% (Statements: 85%, Branches: 90%, Functions: 85%, Lines: 90%)
â Package created: dist/my-app-1.0.0.zip (2.3 MB)
ð¦ Ready for submission!
2. Submit (/publish submit)
Purpose: Guide user through marketplace submission process after packing.
Workflow:
# Step 1: Ensure app is packed
cd <app-directory>
ls dist/*.zip || fdk pack # Pack if not already packed
# Step 2: Extract submission details from manifest
cat manifest.json # Read app metadata
# Step 3: Generate submission checklist
Submission Checklist Generated:
ð **Marketplace Submission Checklist**
â
**Pre-Submission:**
- [ ] App validated: `fdk validate` passes
- [ ] Test coverage >= 80%
- [ ] App package created: dist/<app-name>.zip
- [ ] All iparams documented
- [ ] OAuth credentials tested (if applicable)
- [ ] App tested in target product(s)
ð¦ **Package Information:**
- App Name: [from manifest]
- Version: [from manifest]
- Platform: [from manifest]
- Products: [from manifest modules]
- Package: dist/<filename>.zip
ð **Submission Steps:**
1. **Access Developer Portal:**
- Log in to your Freshworks product account
- Navigate to Admin > Apps > Build it yourself
- Or: Neo Admin Center > My Accounts > /developer
2. **Create New App Submission:**
- Click "Create New App"
- Select app type:
⢠Freshworks App (public marketplace, revenue-generating)
⢠Custom App (private, customer-specific, no review)
⢠External App (listed in marketplace, installed from external URL)
3. **Upload Package:**
- Upload: dist/<filename>.zip
- Fill in app details:
⢠App name
⢠Description (use Freddy AI assistance)
⢠Categories (new framework)
⢠Screenshots (min 3, recommended 5)
⢠Support email
⢠Privacy policy URL
⢠Terms of service URL
4. **Configure Pricing (Freshworks Apps only):**
- Free or Paid
- If paid: Set pricing tiers
- Revenue share: 20% to Freshworks
5. **Submit for Review:**
- Click "Submit for Review"
- Review timeline: 5-10 business days
- Custom apps: Published immediately (no review)
ð§ **Post-Submission:**
- Monitor email for review updates
- Respond to review feedback within 7 days
- Update app version if changes requested
ð **Resources:**
- Developer Portal: https://developers.freshworks.com/
- Submission Guidelines: https://developers.freshworks.com/docs/guides/submission-guidelines/
- App Review Guidelines: https://developers.freshworks.com/docs/guides/submission-guidelines/app-validation/
3. Full Workflow (/publish)
Purpose: Complete end-to-end workflow from validation to submission guidance.
Workflow:
# Step 1: Find and validate app
cd <app-directory>
fdk validate
# Step 2: Check coverage (if serverless)
# Parse coverage/coverage-summary.json if exists
# Step 3: Pack app
fdk pack
# Step 4: Generate submission checklist
# (same as /publish submit)
Pre-Pack Validation Checklist
CRITICAL: These must pass before packing:
Mandatory Files
-
manifest.json– Platform 3.0 structure -
config/iparams.json– Even if empty{} -
app/styles/images/icon.svg– Required for frontend apps -
README.md– App documentation
Manifest Validation
-
"platform-version": "3.0" -
"modules"structure (not"product") -
"engines"block with Node.js and FDK versions - All request templates declared in
modules.common.requests - All SMI functions declared in
modules.common.functions - At least one product module declared
Code Quality (Lint Errors)
- No async functions without await
- No unused variables or parameters
- No unreachable code
- Function complexity <= 7
- No eval() or alert() calls
- No var declarations (use const/let)
Test Coverage (Serverless Apps)
- Statements >= 80%
- Branches >= 80%
- Functions >= 80%
- Lines >= 80%
Configuration
- All iparams have display_name and type
- OAuth config has integrations wrapper (if applicable)
- Request templates use FQDN hosts (no paths)
- Request templates use
<%= variable %>syntax
Error Handling
| Error | Action |
|---|---|
| No manifest.json found | Search workspace, ask user to specify directory |
| Multiple apps found | Ask user which app to pack |
fdk validate fails |
Show errors, attempt autofix, re-validate |
| Coverage < 80% | Warn user, suggest running tests, allow override |
fdk pack fails |
Show error, check Node.js/FDK versions |
| Package size > 50MB | Warn about large package, suggest optimization |
| Missing icon.svg | Error – cannot pack frontend app without icon |
Package Output
After successful pack:
dist/
âââ <app-name>-<version>.zip # Marketplace package
Package contents:
- app/ (if frontend)
- server/ (if serverless)
- config/
- manifest.json
- README.md
- package.json (if dependencies)
Package excludes:
node_modules/.coverage/.fdk/.git/dist/(previous builds)- Test files and fixtures
- Development files (.env, .vscode, etc.)
Coverage Validation
For serverless apps, check coverage before packing:
# Check if coverage exists
ls coverage/coverage-summary.json
# Parse coverage
cat coverage/coverage-summary.json | grep "total"
# Expected format:
{
"total": {
"lines": { "pct": 90.5 },
"statements": { "pct": 88.2 },
"functions": { "pct": 85.7 },
"branches": { "pct": 82.3 }
}
}
If coverage < 80%:
- Warn user
- Suggest:
fdk runto regenerate coverage - Suggest: Write more tests in
server/test/ - Allow pack with
--skip-coverageflag (NOT recommended for marketplace)
Marketplace Submission Types
1. Freshworks App (Public Marketplace)
Characteristics:
- Public listing in Freshworks Marketplace
- Subject to review (5-10 business days)
- Can be free or paid (revenue share: 20% to Freshworks)
- Requires comprehensive documentation
- Must pass all validation checks
Best for:
- Apps with broad appeal
- Revenue-generating apps
- Apps solving common use cases
2. Custom App (Private)
Characteristics:
- Private to specific customer
- No review required
- Published immediately upon submission
- Can test multiple versions in production
- No revenue generation
Best for:
- Customer-specific requirements
- Internal tools
- Rapid deployment needs
3. External App (Third-Party)
Characteristics:
- Listed in Freshworks Marketplace
- Installed from external URL (not Freshworks-hosted)
- Subject to review
- Uses module-specific methods
Best for:
- Third-party integrations
- Apps hosted externally
- Cross-platform solutions
Post-Pack Next Steps
After successful pack, inform user:
â
App packed successfully!
ð¦ **Package Details:**
- File: dist/<app-name>-<version>.zip
- Size: <size> MB
- Platform: 3.0
- Products: [list from modules]
ð **Next Steps:**
1. **Access Developer Portal:**
- Log in to your Freshworks product account
- Navigate to: Admin > Apps > Build it yourself
- Or: Neo Admin Center > /developer
2. **Choose App Type:**
- Freshworks App: Public marketplace (review required)
- Custom App: Private, immediate publish (no review)
- External App: Listed but externally hosted
3. **Upload Package:**
- Click "Create New App"
- Upload: dist/<app-name>-<version>.zip
- Fill in app details with Freddy AI assistance
4. **Required Information:**
- App name and description
- Categories (new framework)
- Screenshots (min 3, recommended 5)
- Support email
- Privacy policy URL (if collecting user data)
- Terms of service URL
5. **Submit:**
- Review all details
- Click "Submit for Review" (Freshworks/External apps)
- Or "Publish" (Custom apps - immediate)
ð§ **After Submission:**
- Monitor email for review updates
- Review timeline: 5-10 business days (Freshworks/External apps)
- Custom apps: Available immediately
- Respond to feedback within 7 days
ð **Resources:**
- Developer Portal: https://developers.freshworks.com/
- Submission Guidelines: https://developers.freshworks.com/docs/guides/submission-guidelines/
Pre-Pack Validation Automation
CRITICAL: Always validate before packing
# Run validation
cd <app-directory>
fdk validate
# Parse output
# If fatal errors exist:
# - Attempt autofix (up to 2 iterations)
# - Re-run fdk validate
# - If still failing, report errors and stop
# If lint errors exist:
# - Attempt autofix (common patterns)
# - Re-run fdk validate
# - If still failing, report errors and stop
# If warnings only:
# - Report warnings
# - Proceed with pack
# If validation passes:
# - Proceed with pack
Common Pre-Pack Fixes
1. Missing icon.svg
# Check if frontend app
ls app/index.html
# If frontend app exists, check for icon
ls app/styles/images/icon.svg || echo "MISSING - MUST CREATE"
# Create placeholder icon if missing
mkdir -p app/styles/images/
# Create SVG icon (use template or generate)
2. Coverage < 80%
# Run tests to regenerate coverage
fdk run
# Press Ctrl+C after app starts
# Check coverage summary
3. Async without await
# Scan server/server.js for async functions without await
# Add await to async operations OR remove async keyword
4. Unused parameters
# Scan for unused parameters in event handlers
# Prefix with _ or remove if not needed
Template Variables
Use Maestro template variables for context:
{{CWD}}– Current working directory{{DATE}}– Current date{{AGENT_PATH}}– Project path{{GIT_BRANCH}}– Current git branch
Example: /publish pack in app at {{CWD}}
Success Output
â App directory: /path/to/my-app
â Platform version: 3.0
â Validation: PASSED
â Test coverage: 87.5%
- Statements: 85%
- Branches: 90%
- Functions: 85%
- Lines: 90%
â Package created: dist/my-app-1.0.0.zip (2.3 MB)
ð¦ Package ready for submission!
ð Next: Upload to Developer Portal
â Admin > Apps > Build it yourself
â Or: Neo Admin Center > /developer
Error Messages
Validation Failed
â Validation failed with 3 errors:
1. Missing required file: app/styles/images/icon.svg
Fix: Create icon.svg in app/styles/images/
2. Async function without await (server/server.js:45)
Fix: Add await expression or remove async keyword
3. Unused parameter 'args' (server/server.js:23)
Fix: Remove parameter or prefix with _
Run: fdk validate --fix
Or: /fix to auto-fix all errors
Coverage Too Low
â ï¸ Test coverage below 80%:
- Statements: 65%
- Branches: 70%
- Functions: 60%
- Lines: 68%
Marketplace requires >= 80% coverage.
Fix:
1. Run: fdk run (generates coverage)
2. Add tests in server/test/
3. Re-run validation
Or pack anyway: fdk pack --skip-coverage (NOT recommended for marketplace)
Package Too Large
â ï¸ Package size: 52.3 MB (recommended: < 50 MB)
Large packages may cause:
- Slow installation for users
- Longer review times
- Potential rejection
Optimize:
- Remove unused dependencies
- Compress images
- Remove development files
- Check .gitignore patterns
Detailed Workflows
Workflow 1: Pack Only
# 1. Find app
find . -name "manifest.json" -not -path "*/node_modules/*"
# 2. Validate
cd <app-directory>
fdk validate
# 3. Check coverage (if serverless)
if [ -d "server" ]; then
if [ -f "coverage/coverage-summary.json" ]; then
# Parse and check >= 80%
cat coverage/coverage-summary.json
else
echo "â ï¸ No coverage found. Run 'fdk run' first."
fi
fi
# 4. Pack
fdk pack
# 5. Report
ls -lh dist/*.zip
Workflow 2: Full Publish Workflow
# 1. Find app
find . -name "manifest.json" -not -path "*/node_modules/*"
# 2. Read manifest for metadata
cat manifest.json | grep -E "(platform-version|version|modules)"
# 3. Validate
fdk validate
# 4. Check coverage
# (same as Workflow 1)
# 5. Pack
fdk pack
# 6. Generate submission checklist
# (output detailed checklist with app-specific details)
Workflow 3: Submit Guidance
# 1. Ensure packed
ls dist/*.zip || fdk pack
# 2. Extract app details
APP_NAME=$(cat manifest.json | grep '"name"' | head -1)
APP_VERSION=$(cat manifest.json | grep '"version"' | head -1)
PLATFORM=$(cat manifest.json | grep '"platform-version"')
# 3. Generate personalized submission guide
# (output checklist with extracted details)
App Type Decision Tree
Help user choose app type:
What type of app are you submitting?
1. **Freshworks App** (Public Marketplace)
â
Choose if:
- App solves common use cases
- Want to reach all Freshworks customers
- Want to generate revenue (optional)
- Ready for 5-10 day review process
2. **Custom App** (Private)
â
Choose if:
- Built for specific customer
- Need immediate deployment
- No public listing needed
- Customer-specific requirements
3. **External App** (Listed, External Install)
â
Choose if:
- App hosted on your infrastructure
- Want marketplace listing
- Install happens via external URL
- Third-party integration
Validation Requirements
Platform 3.0 Requirements
- â
"platform-version": "3.0" - â
"modules"structure (not"product") - â
"engines"block present - â Request templates use FQDN hosts
- â
OAuth uses
integrationswrapper - â Crayons components (not plain HTML)
Lint Requirements
- â No async without await
- â No unused variables
- â No unreachable code
- â Function complexity <= 7
- â No eval() or alert()
- â No var (use const/let)
Coverage Requirements (Serverless)
- â Statements >= 80%
- â Branches >= 80%
- â Functions >= 80%
- â Lines >= 80%
Documentation Requirements
- â README.md with setup instructions
- â All iparams documented
- â OAuth setup guide (if applicable)
- â Screenshots prepared (min 3)
Advanced Options
Skip Coverage (NOT recommended)
fdk pack --skip-coverage
Warning: Marketplace will reject apps with < 80% coverage.
Skip Lint (Deprecated)
fdk pack --skip-lint
Warning: This option is deprecated and will be removed.
Pack Specific Directory
fdk pack --app-dir /path/to/app
Troubleshooting
Pack Fails with “Validation Error”
# Run validation first
fdk validate
# Fix all errors
# Re-run pack
fdk pack
Pack Fails with “Coverage Error”
# Regenerate coverage
fdk run
# Wait for app to start, then Ctrl+C
# Check coverage summary
# Re-run pack
fdk pack
Package Not Created
# Check for dist/ folder
ls -la dist/
# If exists, check permissions
chmod 755 dist/
# Re-run pack
fdk pack
Node.js Version Mismatch
# Check current Node.js version
node --version
# Check manifest requirement
cat manifest.json | grep "node"
# Update manifest or switch Node.js version
# Re-run pack
fdk pack
Post-Pack Verification
After pack succeeds, verify package:
# 1. Check package exists
ls -lh dist/*.zip
# 2. Check package contents (optional)
unzip -l dist/*.zip
# 3. Verify key files included
unzip -l dist/*.zip | grep -E "(manifest.json|server.js|index.html|icon.svg)"
# 4. Check package size
du -h dist/*.zip
Integration with Other Skills
This skill works with:
- app-dev – Generate and fix apps before packing
- fdk-setup – Ensure FDK is installed and up-to-date
- Validation – Fix errors before packing
Typical workflow:
- Use
app-devto create app - Use
/fixto resolve validation errors - Use
/publish packto create package - Use
/publish submitfor submission guidance
References
For detailed submission guidelines:
- Freshworks Developer Portal: https://developers.freshworks.com/
- App Validation: https://developers.freshworks.com/docs/guides/submission-guidelines/app-validation/
- Submission Process: https://developers.freshworks.com/docs/app-sdk/v3.0/support_email/app-submission-process/
Summary
This skill provides:
- Automated packing – Validate and pack in one command
- Coverage checking – Ensure >= 80% before submission
- Submission guidance – Step-by-step checklist
- Error handling – Automatic detection and fix suggestions
- Package verification – Confirm package contents and size
When uncertain about submission requirements, load the relevant reference or use web search for latest marketplace guidelines.