ccjk 2.4.4 → 2.5.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.
- package/dist/chunks/api-providers.mjs +73 -1
- package/dist/chunks/ccjk-config.mjs +13 -77
- package/dist/chunks/ccr.mjs +9 -4
- package/dist/chunks/check-updates.mjs +4 -2
- package/dist/chunks/claude-code-config-manager.mjs +9 -15
- package/dist/chunks/claude-code-incremental-manager.mjs +5 -8
- package/dist/chunks/codex.mjs +10 -569
- package/dist/chunks/config-switch.mjs +7 -5
- package/dist/chunks/config.mjs +573 -0
- package/dist/chunks/config2.mjs +451 -0
- package/dist/chunks/doctor.mjs +89 -1
- package/dist/chunks/features.mjs +13 -10
- package/dist/chunks/index.mjs +10 -1164
- package/dist/chunks/index2.mjs +8 -2
- package/dist/chunks/init.mjs +14 -11
- package/dist/chunks/json-config.mjs +59 -0
- package/dist/chunks/mcp-server.mjs +776 -0
- package/dist/chunks/mcp.mjs +10 -8
- package/dist/chunks/menu.mjs +5 -5
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/permissions.mjs +420 -0
- package/dist/chunks/prompts.mjs +2 -1
- package/dist/chunks/providers.mjs +261 -0
- package/dist/chunks/session.mjs +484 -41
- package/dist/chunks/skills.mjs +553 -0
- package/dist/chunks/stats.mjs +411 -0
- package/dist/chunks/uninstall.mjs +4 -3
- package/dist/chunks/update.mjs +6 -3
- package/dist/chunks/workflows2.mjs +140 -0
- package/dist/cli.mjs +316 -10
- package/dist/i18n/locales/en/hooks.json +47 -0
- package/dist/i18n/locales/en/mcp.json +55 -0
- package/dist/i18n/locales/en/permissions.json +43 -0
- package/dist/i18n/locales/en/sandbox.json +44 -0
- package/dist/i18n/locales/en/skills.json +89 -129
- package/dist/i18n/locales/en/stats.json +20 -0
- package/dist/i18n/locales/zh-CN/hooks.json +47 -0
- package/dist/i18n/locales/zh-CN/mcp.json +55 -0
- package/dist/i18n/locales/zh-CN/permissions.json +43 -0
- package/dist/i18n/locales/zh-CN/sandbox.json +44 -0
- package/dist/i18n/locales/zh-CN/skills.json +88 -128
- package/dist/i18n/locales/zh-CN/stats.json +20 -0
- package/dist/index.mjs +12 -8
- package/dist/shared/ccjk.B-lZxV2u.mjs +1162 -0
- package/dist/shared/{ccjk.CURU8gbR.mjs → ccjk.CUdzQluX.mjs} +1 -1
- package/dist/shared/{ccjk.ByTIGCUC.mjs → ccjk.Dut3wyoP.mjs} +1 -1
- package/dist/shared/ccjk.J8YiPsOw.mjs +259 -0
- package/dist/shared/{ccjk.CGTmRqsu.mjs → ccjk.rLRHmcqD.mjs} +5 -134
- package/dist/shared/{ccjk.QbS8EAOd.mjs → ccjk.uVUeWAt8.mjs} +2 -1
- package/package.json +1 -1
- package/templates/common/skills/code-review.md +343 -0
- package/templates/common/skills/summarize.md +312 -0
- package/templates/common/skills/translate.md +202 -0
package/dist/chunks/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import './init.mjs';
|
|
2
|
-
import { CCJK_PLUGINS_DIR,
|
|
2
|
+
import { CCJK_PLUGINS_DIR, CCJK_GROUPS_DIR, AIDER_DIR, AIDER_CONFIG_FILE, AIDER_ENV_FILE, CODEX_AUTH_FILE, CODEX_DIR, CODEX_CONFIG_FILE, CODEX_AGENTS_FILE, CODEX_PROMPTS_DIR, CONTINUE_DIR, CONTINUE_CONFIG_FILE, CURSOR_CONFIG_FILE, CLINE_CONFIG_FILE, CLAUDE_DIR, CURSOR_DIR, CLINE_DIR, CODE_TOOL_TYPES, CODE_TOOL_INFO } from './constants.mjs';
|
|
3
3
|
import { S as STATUS, r as renderProgressBar, s as sectionDivider, C as COLORS } from '../shared/ccjk.BhKlRJ0h.mjs';
|
|
4
|
-
import
|
|
4
|
+
import './config.mjs';
|
|
5
5
|
import { detectAllConfigs } from './config-consolidator.mjs';
|
|
6
|
-
import '../shared/ccjk.
|
|
6
|
+
import '../shared/ccjk.Dut3wyoP.mjs';
|
|
7
7
|
import { homedir } from 'node:os';
|
|
8
8
|
import process__default, { env } from 'node:process';
|
|
9
9
|
import ansis from 'ansis';
|
|
@@ -15,12 +15,14 @@ import { checkClaudeCodeVersion, checkCcjkVersion } from './upgrade-manager.mjs'
|
|
|
15
15
|
import './onboarding.mjs';
|
|
16
16
|
import './platform.mjs';
|
|
17
17
|
import '../shared/ccjk.-FoZ3zat.mjs';
|
|
18
|
-
import { existsSync, mkdirSync, readFileSync, readdirSync
|
|
18
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync } from 'node:fs';
|
|
19
19
|
import { join } from 'pathe';
|
|
20
20
|
import { i18n, ensureI18nInitialized } from './index2.mjs';
|
|
21
21
|
import { writeFileAtomic } from './fs-operations.mjs';
|
|
22
|
+
import '../shared/ccjk.B-lZxV2u.mjs';
|
|
23
|
+
import { r as readCodexConfig, b as backupCodexComplete, w as writeCodexConfig, a as writeAuthFile, d as detectConfigManagementMode } from './codex.mjs';
|
|
22
24
|
import inquirer from 'inquirer';
|
|
23
|
-
import {
|
|
25
|
+
import { readJsonConfig } from './json-config.mjs';
|
|
24
26
|
import { a as addNumbersToChoices, p as promptBoolean } from '../shared/ccjk.DhBeLRzf.mjs';
|
|
25
27
|
import { pathExists } from 'fs-extra';
|
|
26
28
|
import { m as moveToTrash } from '../shared/ccjk.DGjQxTq_.mjs';
|
|
@@ -321,1162 +323,6 @@ async function initializePlugins() {
|
|
|
321
323
|
}
|
|
322
324
|
}
|
|
323
325
|
|
|
324
|
-
const cloudSyncSkill = {
|
|
325
|
-
id: "cloud-sync",
|
|
326
|
-
name: {
|
|
327
|
-
"en": "Cloud Sync",
|
|
328
|
-
"zh-CN": "\u4E91\u540C\u6B65\u7BA1\u7406"
|
|
329
|
-
},
|
|
330
|
-
description: {
|
|
331
|
-
"en": "Cross-device synchronization for configurations, skills, and workflows",
|
|
332
|
-
"zh-CN": "\u8DE8\u8BBE\u5907\u540C\u6B65\u914D\u7F6E\u3001\u6280\u80FD\u548C\u5DE5\u4F5C\u6D41"
|
|
333
|
-
},
|
|
334
|
-
category: "devops",
|
|
335
|
-
triggers: ["/sync", "/cloud", "/backup", "/restore"],
|
|
336
|
-
enabled: true,
|
|
337
|
-
version: "1.0.0",
|
|
338
|
-
author: "CCJK Team",
|
|
339
|
-
tags: ["cloud", "sync", "backup", "restore", "configuration"],
|
|
340
|
-
template: `# Cloud Sync Management
|
|
341
|
-
|
|
342
|
-
## Overview
|
|
343
|
-
|
|
344
|
-
Cloud Sync provides seamless cross-device synchronization for your CCJK environment.
|
|
345
|
-
Keep your configurations, skills, and workflows in sync across all your development machines.
|
|
346
|
-
|
|
347
|
-
## Features
|
|
348
|
-
|
|
349
|
-
### Configuration Sync
|
|
350
|
-
- Synchronize CCJK settings across devices
|
|
351
|
-
- Preserve API configurations securely
|
|
352
|
-
- Sync MCP service configurations
|
|
353
|
-
|
|
354
|
-
### Skills Sync
|
|
355
|
-
- Share custom skills between machines
|
|
356
|
-
- Version control for skill updates
|
|
357
|
-
- Conflict resolution for concurrent edits
|
|
358
|
-
|
|
359
|
-
### Workflow Sync
|
|
360
|
-
- Sync workflow states and progress
|
|
361
|
-
- Share workflow templates
|
|
362
|
-
- Collaborative workflow management
|
|
363
|
-
|
|
364
|
-
### Conflict Resolution
|
|
365
|
-
- Intelligent merge for non-conflicting changes
|
|
366
|
-
- Manual resolution UI for conflicts
|
|
367
|
-
- Version history for rollback
|
|
368
|
-
|
|
369
|
-
## Commands
|
|
370
|
-
|
|
371
|
-
### Sync Status
|
|
372
|
-
\`\`\`bash
|
|
373
|
-
/sync status
|
|
374
|
-
\`\`\`
|
|
375
|
-
View current synchronization status, pending changes, and last sync time.
|
|
376
|
-
|
|
377
|
-
### Push Changes
|
|
378
|
-
\`\`\`bash
|
|
379
|
-
/sync push # Push all pending changes
|
|
380
|
-
/sync push --config # Push configuration only
|
|
381
|
-
/sync push --skills # Push skills only
|
|
382
|
-
/sync push --workflows # Push workflows only
|
|
383
|
-
\`\`\`
|
|
384
|
-
|
|
385
|
-
### Pull Changes
|
|
386
|
-
\`\`\`bash
|
|
387
|
-
/sync pull # Pull all remote changes
|
|
388
|
-
/sync pull --force # Force pull, overwrite local
|
|
389
|
-
/sync pull --merge # Merge with local changes
|
|
390
|
-
\`\`\`
|
|
391
|
-
|
|
392
|
-
### Configure Cloud Storage
|
|
393
|
-
\`\`\`bash
|
|
394
|
-
/sync config # Interactive configuration
|
|
395
|
-
/sync config github # Configure GitHub Gist
|
|
396
|
-
/sync config webdav # Configure WebDAV
|
|
397
|
-
/sync config local # Configure local folder sync
|
|
398
|
-
\`\`\`
|
|
399
|
-
|
|
400
|
-
### Backup Management
|
|
401
|
-
\`\`\`bash
|
|
402
|
-
/backup create # Create full backup
|
|
403
|
-
/backup create --name "v1.0" # Create named backup
|
|
404
|
-
/backup list # List all backups
|
|
405
|
-
/backup restore <id> # Restore from backup
|
|
406
|
-
/backup delete <id> # Delete a backup
|
|
407
|
-
\`\`\`
|
|
408
|
-
|
|
409
|
-
### Conflict Management
|
|
410
|
-
\`\`\`bash
|
|
411
|
-
/sync conflicts # List all conflicts
|
|
412
|
-
/sync resolve <id> --local # Keep local version
|
|
413
|
-
/sync resolve <id> --remote # Keep remote version
|
|
414
|
-
/sync resolve <id> --merge # Manual merge
|
|
415
|
-
\`\`\`
|
|
416
|
-
|
|
417
|
-
## Supported Cloud Storage
|
|
418
|
-
|
|
419
|
-
### GitHub Gist (Recommended)
|
|
420
|
-
- Free and reliable
|
|
421
|
-
- Version history built-in
|
|
422
|
-
- Easy to set up with personal access token
|
|
423
|
-
|
|
424
|
-
\`\`\`bash
|
|
425
|
-
/sync config github
|
|
426
|
-
# Enter your GitHub personal access token
|
|
427
|
-
# Token needs 'gist' scope
|
|
428
|
-
\`\`\`
|
|
429
|
-
|
|
430
|
-
### WebDAV
|
|
431
|
-
Compatible with:
|
|
432
|
-
- Nutstore (\u575A\u679C\u4E91)
|
|
433
|
-
- Nextcloud
|
|
434
|
-
- ownCloud
|
|
435
|
-
- Any WebDAV server
|
|
436
|
-
|
|
437
|
-
\`\`\`bash
|
|
438
|
-
/sync config webdav
|
|
439
|
-
# Enter WebDAV URL, username, and password
|
|
440
|
-
\`\`\`
|
|
441
|
-
|
|
442
|
-
### Local Folder
|
|
443
|
-
For manual sync via Dropbox, OneDrive, etc.
|
|
444
|
-
|
|
445
|
-
\`\`\`bash
|
|
446
|
-
/sync config local
|
|
447
|
-
# Enter path to sync folder
|
|
448
|
-
\`\`\`
|
|
449
|
-
|
|
450
|
-
## Usage Examples
|
|
451
|
-
|
|
452
|
-
### First-Time Setup
|
|
453
|
-
\`\`\`bash
|
|
454
|
-
# 1. Configure cloud storage
|
|
455
|
-
/sync config github
|
|
456
|
-
|
|
457
|
-
# 2. Push initial configuration
|
|
458
|
-
/sync push --all
|
|
459
|
-
|
|
460
|
-
# 3. Verify sync status
|
|
461
|
-
/sync status
|
|
462
|
-
\`\`\`
|
|
463
|
-
|
|
464
|
-
### Daily Workflow
|
|
465
|
-
\`\`\`bash
|
|
466
|
-
# Start of day: pull latest changes
|
|
467
|
-
/sync pull
|
|
468
|
-
|
|
469
|
-
# End of day: push your changes
|
|
470
|
-
/sync push
|
|
471
|
-
\`\`\`
|
|
472
|
-
|
|
473
|
-
### Handling Conflicts
|
|
474
|
-
\`\`\`bash
|
|
475
|
-
# Check for conflicts after pull
|
|
476
|
-
/sync conflicts
|
|
477
|
-
|
|
478
|
-
# Review and resolve each conflict
|
|
479
|
-
/sync resolve skill-123 --merge
|
|
480
|
-
\`\`\`
|
|
481
|
-
|
|
482
|
-
### Backup Before Major Changes
|
|
483
|
-
\`\`\`bash
|
|
484
|
-
# Create backup before risky operations
|
|
485
|
-
/backup create --name "before-upgrade"
|
|
486
|
-
|
|
487
|
-
# If something goes wrong
|
|
488
|
-
/backup restore before-upgrade
|
|
489
|
-
\`\`\`
|
|
490
|
-
|
|
491
|
-
## Security
|
|
492
|
-
|
|
493
|
-
### Sensitive Data Handling
|
|
494
|
-
- API keys are encrypted before sync
|
|
495
|
-
- OAuth tokens are never synced (re-authenticate on each device)
|
|
496
|
-
- Local encryption key derived from device-specific identifier
|
|
497
|
-
|
|
498
|
-
### Access Control
|
|
499
|
-
- GitHub: Uses personal access token with minimal scope
|
|
500
|
-
- WebDAV: Supports app-specific passwords
|
|
501
|
-
- All connections use HTTPS/TLS
|
|
502
|
-
|
|
503
|
-
## Best Practices
|
|
504
|
-
|
|
505
|
-
1. **Regular Syncing**: Sync at least daily to avoid large conflicts
|
|
506
|
-
2. **Named Backups**: Create named backups before major changes
|
|
507
|
-
3. **Review Conflicts**: Don't auto-resolve conflicts without review
|
|
508
|
-
4. **Secure Tokens**: Use app-specific passwords when available
|
|
509
|
-
5. **Test Restore**: Periodically test backup restoration
|
|
510
|
-
|
|
511
|
-
## Troubleshooting
|
|
512
|
-
|
|
513
|
-
### Sync Failed
|
|
514
|
-
\`\`\`bash
|
|
515
|
-
# Check connection
|
|
516
|
-
/sync status --verbose
|
|
517
|
-
|
|
518
|
-
# Force re-authentication
|
|
519
|
-
/sync config github --reauth
|
|
520
|
-
\`\`\`
|
|
521
|
-
|
|
522
|
-
### Conflicts Won't Resolve
|
|
523
|
-
\`\`\`bash
|
|
524
|
-
# Reset sync state
|
|
525
|
-
/sync reset
|
|
526
|
-
|
|
527
|
-
# Re-initialize from remote
|
|
528
|
-
/sync pull --force
|
|
529
|
-
\`\`\`
|
|
530
|
-
|
|
531
|
-
### Backup Corrupted
|
|
532
|
-
\`\`\`bash
|
|
533
|
-
# List all backups with integrity check
|
|
534
|
-
/backup list --verify
|
|
535
|
-
|
|
536
|
-
# Delete corrupted backup
|
|
537
|
-
/backup delete <corrupted-id>
|
|
538
|
-
\`\`\`
|
|
539
|
-
`
|
|
540
|
-
};
|
|
541
|
-
|
|
542
|
-
const marketplaceSkill = {
|
|
543
|
-
id: "mcp-marketplace",
|
|
544
|
-
name: {
|
|
545
|
-
"en": "MCP Marketplace",
|
|
546
|
-
"zh-CN": "MCP \u63D2\u4EF6\u5E02\u573A"
|
|
547
|
-
},
|
|
548
|
-
description: {
|
|
549
|
-
"en": "Discover, install and manage MCP plugins",
|
|
550
|
-
"zh-CN": "\u53D1\u73B0\u3001\u5B89\u88C5\u548C\u7BA1\u7406 MCP \u63D2\u4EF6"
|
|
551
|
-
},
|
|
552
|
-
category: "dev",
|
|
553
|
-
triggers: ["/market", "/mcp", "/plugins", "/install"],
|
|
554
|
-
enabled: true,
|
|
555
|
-
version: "1.0.0",
|
|
556
|
-
author: "CCJK Team",
|
|
557
|
-
tags: ["mcp", "marketplace", "plugins", "extensions", "install"],
|
|
558
|
-
template: `# MCP Marketplace Skill
|
|
559
|
-
|
|
560
|
-
## Overview
|
|
561
|
-
|
|
562
|
-
The MCP Marketplace provides a centralized hub for discovering, installing, and managing
|
|
563
|
-
Model Context Protocol (MCP) plugins. It integrates seamlessly with Claude Code and CCJK
|
|
564
|
-
to enhance your AI-assisted development workflow.
|
|
565
|
-
|
|
566
|
-
## Features
|
|
567
|
-
|
|
568
|
-
- **Browse Marketplace**: Discover trending and recommended plugins
|
|
569
|
-
- **Search Plugins**: Search by name, category, or tags
|
|
570
|
-
- **Install Management**: One-click install, update, and uninstall
|
|
571
|
-
- **Security Scanning**: Automatic security checks before installation
|
|
572
|
-
- **Dependency Resolution**: Automatic handling of plugin dependencies
|
|
573
|
-
|
|
574
|
-
## Commands
|
|
575
|
-
|
|
576
|
-
### Search Plugins
|
|
577
|
-
\`\`\`bash
|
|
578
|
-
# Search by keyword
|
|
579
|
-
ccjk market search <query>
|
|
580
|
-
|
|
581
|
-
# Search with filters
|
|
582
|
-
ccjk market search <query> --category ai-tools
|
|
583
|
-
ccjk market search <query> --tag productivity
|
|
584
|
-
\`\`\`
|
|
585
|
-
|
|
586
|
-
### Browse Marketplace
|
|
587
|
-
\`\`\`bash
|
|
588
|
-
# View trending plugins
|
|
589
|
-
ccjk market trending
|
|
590
|
-
|
|
591
|
-
# Browse by category
|
|
592
|
-
ccjk market browse --category dev-tools
|
|
593
|
-
ccjk market browse --category ai-tools
|
|
594
|
-
ccjk market browse --category data-processing
|
|
595
|
-
\`\`\`
|
|
596
|
-
|
|
597
|
-
### Install Plugins
|
|
598
|
-
\`\`\`bash
|
|
599
|
-
# Install a plugin
|
|
600
|
-
ccjk market install <plugin-id>
|
|
601
|
-
|
|
602
|
-
# Install specific version
|
|
603
|
-
ccjk market install <plugin-id>@1.2.0
|
|
604
|
-
|
|
605
|
-
# Install with dependencies
|
|
606
|
-
ccjk market install <plugin-id> --with-deps
|
|
607
|
-
|
|
608
|
-
# Force reinstall
|
|
609
|
-
ccjk market install <plugin-id> --force
|
|
610
|
-
\`\`\`
|
|
611
|
-
|
|
612
|
-
### Update Plugins
|
|
613
|
-
\`\`\`bash
|
|
614
|
-
# Update all plugins
|
|
615
|
-
ccjk market update
|
|
616
|
-
|
|
617
|
-
# Update specific plugin
|
|
618
|
-
ccjk market update <plugin-id>
|
|
619
|
-
|
|
620
|
-
# Check for updates
|
|
621
|
-
ccjk market check-updates
|
|
622
|
-
\`\`\`
|
|
623
|
-
|
|
624
|
-
### Manage Installed Plugins
|
|
625
|
-
\`\`\`bash
|
|
626
|
-
# List installed plugins
|
|
627
|
-
ccjk market list
|
|
628
|
-
|
|
629
|
-
# Show plugin details
|
|
630
|
-
ccjk market info <plugin-id>
|
|
631
|
-
|
|
632
|
-
# Uninstall plugin
|
|
633
|
-
ccjk market uninstall <plugin-id>
|
|
634
|
-
|
|
635
|
-
# Enable/disable plugin
|
|
636
|
-
ccjk market enable <plugin-id>
|
|
637
|
-
ccjk market disable <plugin-id>
|
|
638
|
-
\`\`\`
|
|
639
|
-
|
|
640
|
-
## Categories
|
|
641
|
-
|
|
642
|
-
### AI Tools
|
|
643
|
-
AI-enhanced functionality for code generation, analysis, and optimization.
|
|
644
|
-
- Code completion enhancers
|
|
645
|
-
- AI-powered refactoring
|
|
646
|
-
- Intelligent code review
|
|
647
|
-
|
|
648
|
-
### Development Tools
|
|
649
|
-
Tools to assist with coding and development workflows.
|
|
650
|
-
- Language servers
|
|
651
|
-
- Linters and formatters
|
|
652
|
-
- Build tool integrations
|
|
653
|
-
|
|
654
|
-
### Productivity Tools
|
|
655
|
-
Enhance your development efficiency.
|
|
656
|
-
- Task automation
|
|
657
|
-
- Snippet managers
|
|
658
|
-
- Documentation generators
|
|
659
|
-
|
|
660
|
-
### Data Processing
|
|
661
|
-
Data transformation and analysis tools.
|
|
662
|
-
- Data converters
|
|
663
|
-
- Schema validators
|
|
664
|
-
- API integrators
|
|
665
|
-
|
|
666
|
-
### Integrations
|
|
667
|
-
Third-party service integrations.
|
|
668
|
-
- Cloud service connectors
|
|
669
|
-
- Database integrations
|
|
670
|
-
- CI/CD tool bridges
|
|
671
|
-
|
|
672
|
-
## Security
|
|
673
|
-
|
|
674
|
-
All plugins undergo security scanning before installation:
|
|
675
|
-
|
|
676
|
-
### Security Checks
|
|
677
|
-
- **Permission Analysis**: Detects dangerous permission requests
|
|
678
|
-
- **Vulnerability Scanning**: Checks against known CVE databases
|
|
679
|
-
- **Code Pattern Analysis**: Identifies suspicious code patterns
|
|
680
|
-
- **Dependency Audit**: Scans dependencies for vulnerabilities
|
|
681
|
-
|
|
682
|
-
### Security Levels
|
|
683
|
-
- \`verified\` - Officially verified by CCJK team
|
|
684
|
-
- \`community\` - Community-reviewed plugin
|
|
685
|
-
- \`unverified\` - New or unreviewed plugin
|
|
686
|
-
|
|
687
|
-
### Skip Security (Not Recommended)
|
|
688
|
-
\`\`\`bash
|
|
689
|
-
ccjk market install <plugin-id> --skip-verification
|
|
690
|
-
\`\`\`
|
|
691
|
-
|
|
692
|
-
## Configuration
|
|
693
|
-
|
|
694
|
-
### Plugin Settings
|
|
695
|
-
\`\`\`bash
|
|
696
|
-
# Configure plugin
|
|
697
|
-
ccjk market config <plugin-id> --set key=value
|
|
698
|
-
|
|
699
|
-
# View plugin config
|
|
700
|
-
ccjk market config <plugin-id> --list
|
|
701
|
-
|
|
702
|
-
# Reset plugin config
|
|
703
|
-
ccjk market config <plugin-id> --reset
|
|
704
|
-
\`\`\`
|
|
705
|
-
|
|
706
|
-
### Global Settings
|
|
707
|
-
\`\`\`bash
|
|
708
|
-
# Set default registry
|
|
709
|
-
ccjk market registry set <url>
|
|
710
|
-
|
|
711
|
-
# Enable auto-updates
|
|
712
|
-
ccjk market settings --auto-update true
|
|
713
|
-
|
|
714
|
-
# Set security level
|
|
715
|
-
ccjk market settings --security-level strict
|
|
716
|
-
\`\`\`
|
|
717
|
-
|
|
718
|
-
## Plugin Development
|
|
719
|
-
|
|
720
|
-
### Create a Plugin
|
|
721
|
-
\`\`\`bash
|
|
722
|
-
ccjk market create <plugin-name>
|
|
723
|
-
\`\`\`
|
|
724
|
-
|
|
725
|
-
### Publish to Marketplace
|
|
726
|
-
\`\`\`bash
|
|
727
|
-
ccjk market publish
|
|
728
|
-
\`\`\`
|
|
729
|
-
|
|
730
|
-
### Plugin Manifest Example
|
|
731
|
-
\`\`\`json
|
|
732
|
-
{
|
|
733
|
-
"packageId": "my-plugin",
|
|
734
|
-
"name": "My Plugin",
|
|
735
|
-
"version": "1.0.0",
|
|
736
|
-
"description": "A useful MCP plugin",
|
|
737
|
-
"author": "Your Name",
|
|
738
|
-
"license": "MIT",
|
|
739
|
-
"keywords": ["mcp", "plugin"],
|
|
740
|
-
"mcpServer": {
|
|
741
|
-
"command": "node",
|
|
742
|
-
"args": ["dist/server.js"]
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
|
-
\`\`\`
|
|
746
|
-
|
|
747
|
-
## Troubleshooting
|
|
748
|
-
|
|
749
|
-
### Installation Issues
|
|
750
|
-
\`\`\`bash
|
|
751
|
-
# Clear cache and retry
|
|
752
|
-
ccjk market cache clear
|
|
753
|
-
ccjk market install <plugin-id>
|
|
754
|
-
|
|
755
|
-
# Verbose installation
|
|
756
|
-
ccjk market install <plugin-id> --verbose
|
|
757
|
-
\`\`\`
|
|
758
|
-
|
|
759
|
-
### Dependency Conflicts
|
|
760
|
-
\`\`\`bash
|
|
761
|
-
# Check dependencies
|
|
762
|
-
ccjk market deps <plugin-id>
|
|
763
|
-
|
|
764
|
-
# Force resolve conflicts
|
|
765
|
-
ccjk market install <plugin-id> --force-deps
|
|
766
|
-
\`\`\`
|
|
767
|
-
|
|
768
|
-
### Rollback
|
|
769
|
-
\`\`\`bash
|
|
770
|
-
# Rollback to previous version
|
|
771
|
-
ccjk market rollback <plugin-id>
|
|
772
|
-
|
|
773
|
-
# Rollback to specific version
|
|
774
|
-
ccjk market rollback <plugin-id>@1.0.0
|
|
775
|
-
\`\`\`
|
|
776
|
-
|
|
777
|
-
## Best Practices
|
|
778
|
-
|
|
779
|
-
1. **Review Before Install**: Always check plugin ratings and reviews
|
|
780
|
-
2. **Keep Updated**: Regularly update plugins for security patches
|
|
781
|
-
3. **Minimal Plugins**: Only install plugins you actively use
|
|
782
|
-
4. **Backup Config**: Export your plugin configuration before major changes
|
|
783
|
-
5. **Report Issues**: Help improve the ecosystem by reporting bugs
|
|
784
|
-
|
|
785
|
-
## Integration with Claude Code
|
|
786
|
-
|
|
787
|
-
The marketplace integrates directly with Claude Code's MCP system:
|
|
788
|
-
|
|
789
|
-
\`\`\`bash
|
|
790
|
-
# Installed plugins are automatically available in Claude Code
|
|
791
|
-
claude --mcp-list # Shows marketplace-installed plugins
|
|
792
|
-
|
|
793
|
-
# Plugins can be used in conversations
|
|
794
|
-
# Example: Using a database plugin
|
|
795
|
-
"Connect to my PostgreSQL database and show tables"
|
|
796
|
-
\`\`\`
|
|
797
|
-
`
|
|
798
|
-
};
|
|
799
|
-
|
|
800
|
-
const browserSkill = {
|
|
801
|
-
id: "browser-automation",
|
|
802
|
-
name: {
|
|
803
|
-
"en": "Browser Automation",
|
|
804
|
-
"zh-CN": "\u6D4F\u89C8\u5668\u81EA\u52A8\u5316"
|
|
805
|
-
},
|
|
806
|
-
description: {
|
|
807
|
-
"en": "Zero-config headless browser automation for AI agents",
|
|
808
|
-
"zh-CN": "\u96F6\u914D\u7F6E\u7684 AI \u4EE3\u7406\u6D4F\u89C8\u5668\u81EA\u52A8\u5316\u5DE5\u5177"
|
|
809
|
-
},
|
|
810
|
-
category: "dev",
|
|
811
|
-
triggers: ["/browser", "/web", "/browse"],
|
|
812
|
-
enabled: true,
|
|
813
|
-
version: "1.0.0",
|
|
814
|
-
author: "CCJK",
|
|
815
|
-
tags: ["browser", "automation", "web", "scraping", "testing"],
|
|
816
|
-
template: `# Browser Automation Skill
|
|
817
|
-
|
|
818
|
-
## Overview
|
|
819
|
-
This skill provides zero-config headless browser automation powered by agent-browser.
|
|
820
|
-
|
|
821
|
-
## Quick Start
|
|
822
|
-
|
|
823
|
-
### Open a URL
|
|
824
|
-
\`\`\`bash
|
|
825
|
-
ccjk browser open https://example.com
|
|
826
|
-
\`\`\`
|
|
827
|
-
|
|
828
|
-
### Get Page Snapshot (AI-optimized)
|
|
829
|
-
\`\`\`bash
|
|
830
|
-
ccjk browser snapshot -i # Interactive elements only
|
|
831
|
-
ccjk browser snapshot -c # Compact output
|
|
832
|
-
\`\`\`
|
|
833
|
-
|
|
834
|
-
### Interact with Elements
|
|
835
|
-
\`\`\`bash
|
|
836
|
-
ccjk browser click @e1 # Click by ref
|
|
837
|
-
ccjk browser fill @e2 "text" # Fill input
|
|
838
|
-
ccjk browser get text @e3 # Get text content
|
|
839
|
-
\`\`\`
|
|
840
|
-
|
|
841
|
-
### Screenshots
|
|
842
|
-
\`\`\`bash
|
|
843
|
-
ccjk browser screenshot # Viewport
|
|
844
|
-
ccjk browser screenshot --full # Full page
|
|
845
|
-
ccjk browser screenshot output.png # Custom path
|
|
846
|
-
\`\`\`
|
|
847
|
-
|
|
848
|
-
### Wait for Conditions
|
|
849
|
-
\`\`\`bash
|
|
850
|
-
ccjk browser wait 2000 # Wait 2 seconds
|
|
851
|
-
ccjk browser wait @e1 # Wait for element
|
|
852
|
-
ccjk browser wait --text "Success" # Wait for text
|
|
853
|
-
\`\`\`
|
|
854
|
-
|
|
855
|
-
## Common Workflows
|
|
856
|
-
|
|
857
|
-
### Login Flow
|
|
858
|
-
\`\`\`bash
|
|
859
|
-
ccjk browser open https://app.example.com/login
|
|
860
|
-
ccjk browser snapshot -i
|
|
861
|
-
ccjk browser fill @e1 "username"
|
|
862
|
-
ccjk browser fill @e2 "password"
|
|
863
|
-
ccjk browser click @e3
|
|
864
|
-
ccjk browser wait --text "Dashboard"
|
|
865
|
-
\`\`\`
|
|
866
|
-
|
|
867
|
-
### Form Submission
|
|
868
|
-
\`\`\`bash
|
|
869
|
-
ccjk browser open https://example.com/form
|
|
870
|
-
ccjk browser snapshot -i
|
|
871
|
-
ccjk browser fill @e1 "John Doe"
|
|
872
|
-
ccjk browser fill @e2 "john@example.com"
|
|
873
|
-
ccjk browser click @e3 # Submit button
|
|
874
|
-
ccjk browser wait --text "Thank you"
|
|
875
|
-
\`\`\`
|
|
876
|
-
|
|
877
|
-
### Web Scraping
|
|
878
|
-
\`\`\`bash
|
|
879
|
-
ccjk browser open https://example.com/products
|
|
880
|
-
ccjk browser snapshot --json > products.json
|
|
881
|
-
\`\`\`
|
|
882
|
-
|
|
883
|
-
## Session Management
|
|
884
|
-
|
|
885
|
-
### Parallel Sessions
|
|
886
|
-
\`\`\`bash
|
|
887
|
-
ccjk browser --session s1 open site-a.com
|
|
888
|
-
ccjk browser --session s2 open site-b.com
|
|
889
|
-
ccjk browser session list
|
|
890
|
-
\`\`\`
|
|
891
|
-
|
|
892
|
-
## Debug Mode
|
|
893
|
-
\`\`\`bash
|
|
894
|
-
ccjk browser open example.com --headed # Show browser window
|
|
895
|
-
\`\`\`
|
|
896
|
-
|
|
897
|
-
## Element References
|
|
898
|
-
|
|
899
|
-
The snapshot command returns elements with refs like \`@e1\`, \`@e2\`, etc.
|
|
900
|
-
Use these refs to interact with specific elements:
|
|
901
|
-
|
|
902
|
-
- \`@e1\` - First interactive element
|
|
903
|
-
- \`@e2\` - Second interactive element
|
|
904
|
-
- etc.
|
|
905
|
-
|
|
906
|
-
## Tips for AI Agents
|
|
907
|
-
|
|
908
|
-
1. Always run \`snapshot -i\` first to get interactive elements
|
|
909
|
-
2. Use refs from snapshot output for interactions
|
|
910
|
-
3. Wait for page loads with \`wait --text\` or \`wait @ref\`
|
|
911
|
-
4. Use \`--json\` for programmatic parsing
|
|
912
|
-
5. Close browser when done to free resources
|
|
913
|
-
`
|
|
914
|
-
};
|
|
915
|
-
|
|
916
|
-
const workflowSkill = {
|
|
917
|
-
id: "workflow-automation",
|
|
918
|
-
name: {
|
|
919
|
-
"en": "Workflow Automation",
|
|
920
|
-
"zh-CN": "\u5DE5\u4F5C\u6D41\u81EA\u52A8\u5316"
|
|
921
|
-
},
|
|
922
|
-
description: {
|
|
923
|
-
"en": "Subagent-driven development workflow with two-stage review",
|
|
924
|
-
"zh-CN": "Subagent \u9A71\u52A8\u7684\u4E24\u9636\u6BB5\u5BA1\u67E5\u5F00\u53D1\u5DE5\u4F5C\u6D41"
|
|
925
|
-
},
|
|
926
|
-
category: "dev",
|
|
927
|
-
triggers: ["/workflow", "/wf", "/flow"],
|
|
928
|
-
enabled: true,
|
|
929
|
-
version: "1.0.0",
|
|
930
|
-
author: "CCJK",
|
|
931
|
-
tags: ["workflow", "subagent", "review", "automation", "ci"],
|
|
932
|
-
template: `# Workflow Automation Skill
|
|
933
|
-
|
|
934
|
-
## Overview
|
|
935
|
-
|
|
936
|
-
This skill provides Subagent-driven development workflows with automatic two-stage review.
|
|
937
|
-
Inspired by Anthropic's Superpowers architecture for autonomous agent collaboration.
|
|
938
|
-
|
|
939
|
-
## Core Concepts
|
|
940
|
-
|
|
941
|
-
### Two-Stage Review
|
|
942
|
-
1. **Draft Stage**: Subagents work on tasks in parallel
|
|
943
|
-
2. **Review Stage**: Automated quality checks and validation
|
|
944
|
-
3. **Finalize Stage**: Merge approved changes
|
|
945
|
-
|
|
946
|
-
### Workflow States
|
|
947
|
-
- \`idle\` \u2192 \`planning\` \u2192 \`executing\` \u2192 \`reviewing\` \u2192 \`finalizing\` \u2192 \`completed\`
|
|
948
|
-
|
|
949
|
-
## Quick Start
|
|
950
|
-
|
|
951
|
-
### Create a Workflow
|
|
952
|
-
\`\`\`bash
|
|
953
|
-
ccjk workflow create "Implement user authentication"
|
|
954
|
-
\`\`\`
|
|
955
|
-
|
|
956
|
-
### Start Workflow Execution
|
|
957
|
-
\`\`\`bash
|
|
958
|
-
ccjk workflow start <workflow-id>
|
|
959
|
-
\`\`\`
|
|
960
|
-
|
|
961
|
-
### Check Workflow Status
|
|
962
|
-
\`\`\`bash
|
|
963
|
-
ccjk workflow status <workflow-id>
|
|
964
|
-
ccjk workflow list
|
|
965
|
-
\`\`\`
|
|
966
|
-
|
|
967
|
-
## Task Management
|
|
968
|
-
|
|
969
|
-
### Add Tasks to Workflow
|
|
970
|
-
\`\`\`bash
|
|
971
|
-
ccjk workflow task add <workflow-id> "Create login component"
|
|
972
|
-
ccjk workflow task add <workflow-id> "Add authentication API" --depends-on task-1
|
|
973
|
-
\`\`\`
|
|
974
|
-
|
|
975
|
-
### Task Priorities
|
|
976
|
-
\`\`\`bash
|
|
977
|
-
ccjk workflow task add <workflow-id> "Fix security bug" --priority critical
|
|
978
|
-
ccjk workflow task add <workflow-id> "Add tests" --priority high
|
|
979
|
-
\`\`\`
|
|
980
|
-
|
|
981
|
-
### View Task Dependencies
|
|
982
|
-
\`\`\`bash
|
|
983
|
-
ccjk workflow tasks <workflow-id> --graph
|
|
984
|
-
\`\`\`
|
|
985
|
-
|
|
986
|
-
## Subagent Scheduling
|
|
987
|
-
|
|
988
|
-
### Automatic Scheduling
|
|
989
|
-
The scheduler automatically:
|
|
990
|
-
- Assigns tasks to available subagents
|
|
991
|
-
- Respects task dependencies
|
|
992
|
-
- Balances workload across agents
|
|
993
|
-
- Handles failures with retry logic
|
|
994
|
-
|
|
995
|
-
### Manual Assignment
|
|
996
|
-
\`\`\`bash
|
|
997
|
-
ccjk workflow assign <task-id> <subagent-id>
|
|
998
|
-
\`\`\`
|
|
999
|
-
|
|
1000
|
-
### View Subagent Status
|
|
1001
|
-
\`\`\`bash
|
|
1002
|
-
ccjk workflow agents
|
|
1003
|
-
ccjk workflow agent <agent-id> --tasks
|
|
1004
|
-
\`\`\`
|
|
1005
|
-
|
|
1006
|
-
## Review System
|
|
1007
|
-
|
|
1008
|
-
### Automatic Review
|
|
1009
|
-
When tasks complete, the system automatically:
|
|
1010
|
-
1. Runs requirement verification
|
|
1011
|
-
2. Performs code quality checks
|
|
1012
|
-
3. Validates test coverage
|
|
1013
|
-
4. Checks for security issues
|
|
1014
|
-
|
|
1015
|
-
### Review Results
|
|
1016
|
-
\`\`\`bash
|
|
1017
|
-
ccjk workflow review <workflow-id>
|
|
1018
|
-
ccjk workflow review <task-id> --detailed
|
|
1019
|
-
\`\`\`
|
|
1020
|
-
|
|
1021
|
-
### Manual Review Override
|
|
1022
|
-
\`\`\`bash
|
|
1023
|
-
ccjk workflow approve <task-id>
|
|
1024
|
-
ccjk workflow reject <task-id> --reason "Missing tests"
|
|
1025
|
-
\`\`\`
|
|
1026
|
-
|
|
1027
|
-
## Quality Checks
|
|
1028
|
-
|
|
1029
|
-
### Built-in Checks
|
|
1030
|
-
- **Naming Conventions**: camelCase, PascalCase validation
|
|
1031
|
-
- **Code Structure**: Function length, nesting depth
|
|
1032
|
-
- **Error Handling**: Try-catch coverage
|
|
1033
|
-
- **Documentation**: JSDoc/TSDoc presence
|
|
1034
|
-
- **Style**: Consistent formatting
|
|
1035
|
-
|
|
1036
|
-
### Custom Checks
|
|
1037
|
-
\`\`\`bash
|
|
1038
|
-
ccjk workflow check add "No console.log" --pattern "console\\.log"
|
|
1039
|
-
ccjk workflow check add "Max file size" --max-lines 500
|
|
1040
|
-
\`\`\`
|
|
1041
|
-
|
|
1042
|
-
## Workflow Templates
|
|
1043
|
-
|
|
1044
|
-
### Feature Development
|
|
1045
|
-
\`\`\`bash
|
|
1046
|
-
ccjk workflow create --template feature "Add dark mode"
|
|
1047
|
-
\`\`\`
|
|
1048
|
-
|
|
1049
|
-
### Bug Fix
|
|
1050
|
-
\`\`\`bash
|
|
1051
|
-
ccjk workflow create --template bugfix "Fix login timeout"
|
|
1052
|
-
\`\`\`
|
|
1053
|
-
|
|
1054
|
-
### Refactoring
|
|
1055
|
-
\`\`\`bash
|
|
1056
|
-
ccjk workflow create --template refactor "Migrate to TypeScript"
|
|
1057
|
-
\`\`\`
|
|
1058
|
-
|
|
1059
|
-
## Events and Hooks
|
|
1060
|
-
|
|
1061
|
-
### Available Events
|
|
1062
|
-
- \`workflow:created\`
|
|
1063
|
-
- \`workflow:started\`
|
|
1064
|
-
- \`task:assigned\`
|
|
1065
|
-
- \`task:completed\`
|
|
1066
|
-
- \`review:passed\`
|
|
1067
|
-
- \`review:failed\`
|
|
1068
|
-
- \`workflow:completed\`
|
|
1069
|
-
|
|
1070
|
-
### Add Hooks
|
|
1071
|
-
\`\`\`bash
|
|
1072
|
-
ccjk workflow hook add task:completed "npm test"
|
|
1073
|
-
ccjk workflow hook add review:passed "npm run lint"
|
|
1074
|
-
\`\`\`
|
|
1075
|
-
|
|
1076
|
-
## Best Practices
|
|
1077
|
-
|
|
1078
|
-
### 1. Break Down Large Tasks
|
|
1079
|
-
Split complex features into smaller, independent tasks that can run in parallel.
|
|
1080
|
-
|
|
1081
|
-
### 2. Define Clear Dependencies
|
|
1082
|
-
Use \`--depends-on\` to ensure tasks run in the correct order.
|
|
1083
|
-
|
|
1084
|
-
### 3. Set Appropriate Priorities
|
|
1085
|
-
- \`critical\`: Security fixes, blocking issues
|
|
1086
|
-
- \`high\`: Important features, bugs
|
|
1087
|
-
- \`medium\`: Regular development
|
|
1088
|
-
- \`low\`: Nice-to-have improvements
|
|
1089
|
-
|
|
1090
|
-
### 4. Review Before Merge
|
|
1091
|
-
Always check review results before finalizing:
|
|
1092
|
-
\`\`\`bash
|
|
1093
|
-
ccjk workflow review <workflow-id> --summary
|
|
1094
|
-
\`\`\`
|
|
1095
|
-
|
|
1096
|
-
### 5. Use Templates
|
|
1097
|
-
Create custom templates for recurring workflow patterns.
|
|
1098
|
-
|
|
1099
|
-
## Integration with Git
|
|
1100
|
-
|
|
1101
|
-
### Automatic Branch Management
|
|
1102
|
-
\`\`\`bash
|
|
1103
|
-
ccjk workflow create "Feature X" --branch feature/x
|
|
1104
|
-
\`\`\`
|
|
1105
|
-
|
|
1106
|
-
### Worktree Support
|
|
1107
|
-
Each subagent can work in isolated git worktrees:
|
|
1108
|
-
\`\`\`bash
|
|
1109
|
-
ccjk workflow start <id> --worktree
|
|
1110
|
-
\`\`\`
|
|
1111
|
-
|
|
1112
|
-
## Troubleshooting
|
|
1113
|
-
|
|
1114
|
-
### Stuck Workflow
|
|
1115
|
-
\`\`\`bash
|
|
1116
|
-
ccjk workflow diagnose <workflow-id>
|
|
1117
|
-
ccjk workflow retry <task-id>
|
|
1118
|
-
\`\`\`
|
|
1119
|
-
|
|
1120
|
-
### Cancel Workflow
|
|
1121
|
-
\`\`\`bash
|
|
1122
|
-
ccjk workflow cancel <workflow-id>
|
|
1123
|
-
ccjk workflow cancel <workflow-id> --force
|
|
1124
|
-
\`\`\`
|
|
1125
|
-
|
|
1126
|
-
### View Logs
|
|
1127
|
-
\`\`\`bash
|
|
1128
|
-
ccjk workflow logs <workflow-id>
|
|
1129
|
-
ccjk workflow logs <task-id> --tail 100
|
|
1130
|
-
\`\`\`
|
|
1131
|
-
`
|
|
1132
|
-
};
|
|
1133
|
-
|
|
1134
|
-
const BUILTIN_SKILLS = [
|
|
1135
|
-
cloudSyncSkill,
|
|
1136
|
-
browserSkill,
|
|
1137
|
-
marketplaceSkill,
|
|
1138
|
-
workflowSkill
|
|
1139
|
-
];
|
|
1140
|
-
function getBuiltinSkill(id) {
|
|
1141
|
-
return BUILTIN_SKILLS.find((s) => s.id === id);
|
|
1142
|
-
}
|
|
1143
|
-
function getBuiltinSkills() {
|
|
1144
|
-
return [...BUILTIN_SKILLS];
|
|
1145
|
-
}
|
|
1146
|
-
function isBuiltinSkill(id) {
|
|
1147
|
-
return BUILTIN_SKILLS.some((s) => s.id === id);
|
|
1148
|
-
}
|
|
1149
|
-
let registry$1 = null;
|
|
1150
|
-
function ensureSkillsDir() {
|
|
1151
|
-
if (!existsSync(CCJK_SKILLS_DIR)) {
|
|
1152
|
-
mkdirSync(CCJK_SKILLS_DIR, { recursive: true });
|
|
1153
|
-
}
|
|
1154
|
-
}
|
|
1155
|
-
function getRegistry$1() {
|
|
1156
|
-
if (!registry$1) {
|
|
1157
|
-
registry$1 = loadRegistry$1();
|
|
1158
|
-
}
|
|
1159
|
-
return registry$1;
|
|
1160
|
-
}
|
|
1161
|
-
function loadRegistry$1() {
|
|
1162
|
-
ensureSkillsDir();
|
|
1163
|
-
const skills = /* @__PURE__ */ new Map();
|
|
1164
|
-
const categories = /* @__PURE__ */ new Map();
|
|
1165
|
-
for (const skill of BUILTIN_SKILLS) {
|
|
1166
|
-
skills.set(skill.id, skill);
|
|
1167
|
-
const categorySkills = categories.get(skill.category) || [];
|
|
1168
|
-
categorySkills.push(skill.id);
|
|
1169
|
-
categories.set(skill.category, categorySkills);
|
|
1170
|
-
}
|
|
1171
|
-
const files = readdirSync(CCJK_SKILLS_DIR).filter((f) => f.endsWith(".json"));
|
|
1172
|
-
for (const file of files) {
|
|
1173
|
-
try {
|
|
1174
|
-
const content = readFileSync(join(CCJK_SKILLS_DIR, file), "utf-8");
|
|
1175
|
-
const skill = JSON.parse(content);
|
|
1176
|
-
skills.set(skill.id, skill);
|
|
1177
|
-
const categorySkills = categories.get(skill.category) || [];
|
|
1178
|
-
categorySkills.push(skill.id);
|
|
1179
|
-
categories.set(skill.category, categorySkills);
|
|
1180
|
-
} catch {
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1183
|
-
return {
|
|
1184
|
-
skills,
|
|
1185
|
-
categories,
|
|
1186
|
-
lastUpdated: /* @__PURE__ */ new Date()
|
|
1187
|
-
};
|
|
1188
|
-
}
|
|
1189
|
-
function refreshRegistry$1() {
|
|
1190
|
-
registry$1 = loadRegistry$1();
|
|
1191
|
-
}
|
|
1192
|
-
function getAllSkills() {
|
|
1193
|
-
return Array.from(getRegistry$1().skills.values());
|
|
1194
|
-
}
|
|
1195
|
-
function getSkill(id) {
|
|
1196
|
-
return getRegistry$1().skills.get(id);
|
|
1197
|
-
}
|
|
1198
|
-
function searchSkills(options) {
|
|
1199
|
-
let skills = getAllSkills();
|
|
1200
|
-
if (options.category) {
|
|
1201
|
-
skills = skills.filter((s) => s.category === options.category);
|
|
1202
|
-
}
|
|
1203
|
-
if (options.enabled !== void 0) {
|
|
1204
|
-
skills = skills.filter((s) => s.enabled === options.enabled);
|
|
1205
|
-
}
|
|
1206
|
-
if (options.tags && options.tags.length > 0) {
|
|
1207
|
-
skills = skills.filter(
|
|
1208
|
-
(s) => s.tags && options.tags.some((tag) => s.tags.includes(tag))
|
|
1209
|
-
);
|
|
1210
|
-
}
|
|
1211
|
-
if (options.query) {
|
|
1212
|
-
const query = options.query.toLowerCase();
|
|
1213
|
-
skills = skills.filter(
|
|
1214
|
-
(s) => s.id.toLowerCase().includes(query) || s.name.en.toLowerCase().includes(query) || s.name["zh-CN"].toLowerCase().includes(query) || s.triggers.some((t) => t.toLowerCase().includes(query))
|
|
1215
|
-
);
|
|
1216
|
-
}
|
|
1217
|
-
if (options.limit) {
|
|
1218
|
-
skills = skills.slice(0, options.limit);
|
|
1219
|
-
}
|
|
1220
|
-
return skills;
|
|
1221
|
-
}
|
|
1222
|
-
function addSkill(skill) {
|
|
1223
|
-
ensureSkillsDir();
|
|
1224
|
-
try {
|
|
1225
|
-
const filePath = join(CCJK_SKILLS_DIR, `${skill.id}.json`);
|
|
1226
|
-
writeFileAtomic(filePath, JSON.stringify(skill, null, 2));
|
|
1227
|
-
refreshRegistry$1();
|
|
1228
|
-
return {
|
|
1229
|
-
skillId: skill.id,
|
|
1230
|
-
success: true,
|
|
1231
|
-
path: filePath
|
|
1232
|
-
};
|
|
1233
|
-
} catch (error) {
|
|
1234
|
-
return {
|
|
1235
|
-
skillId: skill.id,
|
|
1236
|
-
success: false,
|
|
1237
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
1238
|
-
};
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1241
|
-
function removeSkill(id) {
|
|
1242
|
-
const filePath = join(CCJK_SKILLS_DIR, `${id}.json`);
|
|
1243
|
-
if (existsSync(filePath)) {
|
|
1244
|
-
unlinkSync(filePath);
|
|
1245
|
-
refreshRegistry$1();
|
|
1246
|
-
return true;
|
|
1247
|
-
}
|
|
1248
|
-
return false;
|
|
1249
|
-
}
|
|
1250
|
-
function setSkillEnabled(id, enabled) {
|
|
1251
|
-
const skill = getSkill(id);
|
|
1252
|
-
if (!skill)
|
|
1253
|
-
return false;
|
|
1254
|
-
skill.enabled = enabled;
|
|
1255
|
-
addSkill(skill);
|
|
1256
|
-
return true;
|
|
1257
|
-
}
|
|
1258
|
-
function exportSkills(skillIds) {
|
|
1259
|
-
const skills = skillIds ? skillIds.map((id) => getSkill(id)).filter(Boolean) : getAllSkills();
|
|
1260
|
-
return {
|
|
1261
|
-
version: "1.0.0",
|
|
1262
|
-
exportedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1263
|
-
skills
|
|
1264
|
-
};
|
|
1265
|
-
}
|
|
1266
|
-
function importSkills(data) {
|
|
1267
|
-
return data.skills.map((skill) => addSkill(skill));
|
|
1268
|
-
}
|
|
1269
|
-
const BATCH_TEMPLATES = {
|
|
1270
|
-
typescript: {
|
|
1271
|
-
category: "dev",
|
|
1272
|
-
skills: [
|
|
1273
|
-
{
|
|
1274
|
-
id: "ts-debug",
|
|
1275
|
-
name: { "en": "TypeScript Debug", "zh-CN": "TypeScript \u8C03\u8BD5" },
|
|
1276
|
-
description: { "en": "Debug TypeScript code", "zh-CN": "\u8C03\u8BD5 TypeScript \u4EE3\u7801" },
|
|
1277
|
-
triggers: ["/ts-debug", "/tsd"],
|
|
1278
|
-
templateFile: "ts-debug.md",
|
|
1279
|
-
tags: ["typescript", "debug"]
|
|
1280
|
-
},
|
|
1281
|
-
{
|
|
1282
|
-
id: "ts-refactor",
|
|
1283
|
-
name: { "en": "TypeScript Refactor", "zh-CN": "TypeScript \u91CD\u6784" },
|
|
1284
|
-
description: { "en": "Refactor TypeScript code", "zh-CN": "\u91CD\u6784 TypeScript \u4EE3\u7801" },
|
|
1285
|
-
triggers: ["/ts-refactor", "/tsr"],
|
|
1286
|
-
templateFile: "ts-refactor.md",
|
|
1287
|
-
tags: ["typescript", "refactor"]
|
|
1288
|
-
},
|
|
1289
|
-
{
|
|
1290
|
-
id: "ts-test",
|
|
1291
|
-
name: { "en": "TypeScript Test", "zh-CN": "TypeScript \u6D4B\u8BD5" },
|
|
1292
|
-
description: { "en": "Generate TypeScript tests", "zh-CN": "\u751F\u6210 TypeScript \u6D4B\u8BD5" },
|
|
1293
|
-
triggers: ["/ts-test", "/tst"],
|
|
1294
|
-
templateFile: "ts-test.md",
|
|
1295
|
-
tags: ["typescript", "testing"]
|
|
1296
|
-
},
|
|
1297
|
-
{
|
|
1298
|
-
id: "ts-type-check",
|
|
1299
|
-
name: { "en": "TypeScript Type Check", "zh-CN": "TypeScript \u7C7B\u578B\u68C0\u67E5" },
|
|
1300
|
-
description: { "en": "Fix TypeScript type errors", "zh-CN": "\u4FEE\u590D TypeScript \u7C7B\u578B\u9519\u8BEF" },
|
|
1301
|
-
triggers: ["/ts-type", "/tstc"],
|
|
1302
|
-
templateFile: "ts-type-check.md",
|
|
1303
|
-
tags: ["typescript", "types"]
|
|
1304
|
-
},
|
|
1305
|
-
{
|
|
1306
|
-
id: "ts-migrate",
|
|
1307
|
-
name: { "en": "TypeScript Migration", "zh-CN": "TypeScript \u8FC1\u79FB" },
|
|
1308
|
-
description: { "en": "Migrate JS to TypeScript", "zh-CN": "\u4ECE JS \u8FC1\u79FB\u5230 TypeScript" },
|
|
1309
|
-
triggers: ["/ts-migrate", "/tsm"],
|
|
1310
|
-
templateFile: "ts-migrate.md",
|
|
1311
|
-
tags: ["typescript", "migration"]
|
|
1312
|
-
}
|
|
1313
|
-
]
|
|
1314
|
-
},
|
|
1315
|
-
python: {
|
|
1316
|
-
category: "dev",
|
|
1317
|
-
skills: [
|
|
1318
|
-
{
|
|
1319
|
-
id: "py-debug",
|
|
1320
|
-
name: { "en": "Python Debug", "zh-CN": "Python \u8C03\u8BD5" },
|
|
1321
|
-
description: { "en": "Debug Python code", "zh-CN": "\u8C03\u8BD5 Python \u4EE3\u7801" },
|
|
1322
|
-
triggers: ["/py-debug", "/pyd"],
|
|
1323
|
-
templateFile: "py-debug.md",
|
|
1324
|
-
tags: ["python", "debug"]
|
|
1325
|
-
},
|
|
1326
|
-
{
|
|
1327
|
-
id: "py-refactor",
|
|
1328
|
-
name: { "en": "Python Refactor", "zh-CN": "Python \u91CD\u6784" },
|
|
1329
|
-
description: { "en": "Refactor Python code", "zh-CN": "\u91CD\u6784 Python \u4EE3\u7801" },
|
|
1330
|
-
triggers: ["/py-refactor", "/pyr"],
|
|
1331
|
-
templateFile: "py-refactor.md",
|
|
1332
|
-
tags: ["python", "refactor"]
|
|
1333
|
-
},
|
|
1334
|
-
{
|
|
1335
|
-
id: "py-test",
|
|
1336
|
-
name: { "en": "Python Test", "zh-CN": "Python \u6D4B\u8BD5" },
|
|
1337
|
-
description: { "en": "Generate Python tests", "zh-CN": "\u751F\u6210 Python \u6D4B\u8BD5" },
|
|
1338
|
-
triggers: ["/py-test", "/pyt"],
|
|
1339
|
-
templateFile: "py-test.md",
|
|
1340
|
-
tags: ["python", "testing"]
|
|
1341
|
-
}
|
|
1342
|
-
]
|
|
1343
|
-
},
|
|
1344
|
-
seo: {
|
|
1345
|
-
category: "seo",
|
|
1346
|
-
skills: [
|
|
1347
|
-
{
|
|
1348
|
-
id: "seo-meta",
|
|
1349
|
-
name: { "en": "SEO Meta Optimization", "zh-CN": "SEO \u5143\u6570\u636E\u4F18\u5316" },
|
|
1350
|
-
description: { "en": "Optimize meta tags for SEO", "zh-CN": "\u4F18\u5316 SEO \u5143\u6807\u7B7E" },
|
|
1351
|
-
triggers: ["/seo-meta", "/meta"],
|
|
1352
|
-
templateFile: "seo-meta.md",
|
|
1353
|
-
tags: ["seo", "meta"]
|
|
1354
|
-
},
|
|
1355
|
-
{
|
|
1356
|
-
id: "seo-sitemap",
|
|
1357
|
-
name: { "en": "Sitemap Generator", "zh-CN": "\u7AD9\u70B9\u5730\u56FE\u751F\u6210" },
|
|
1358
|
-
description: { "en": "Generate XML sitemap", "zh-CN": "\u751F\u6210 XML \u7AD9\u70B9\u5730\u56FE" },
|
|
1359
|
-
triggers: ["/sitemap", "/seo-sitemap"],
|
|
1360
|
-
templateFile: "seo-sitemap.md",
|
|
1361
|
-
tags: ["seo", "sitemap"]
|
|
1362
|
-
},
|
|
1363
|
-
{
|
|
1364
|
-
id: "seo-schema",
|
|
1365
|
-
name: { "en": "Schema Markup", "zh-CN": "\u7ED3\u6784\u5316\u6570\u636E\u6807\u8BB0" },
|
|
1366
|
-
description: { "en": "Add structured data markup", "zh-CN": "\u6DFB\u52A0\u7ED3\u6784\u5316\u6570\u636E\u6807\u8BB0" },
|
|
1367
|
-
triggers: ["/schema", "/seo-schema"],
|
|
1368
|
-
templateFile: "seo-schema.md",
|
|
1369
|
-
tags: ["seo", "schema"]
|
|
1370
|
-
},
|
|
1371
|
-
{
|
|
1372
|
-
id: "seo-cwv",
|
|
1373
|
-
name: { "en": "Core Web Vitals", "zh-CN": "\u6838\u5FC3\u7F51\u9875\u6307\u6807" },
|
|
1374
|
-
description: { "en": "Optimize Core Web Vitals", "zh-CN": "\u4F18\u5316\u6838\u5FC3\u7F51\u9875\u6307\u6807" },
|
|
1375
|
-
triggers: ["/cwv", "/seo-cwv"],
|
|
1376
|
-
templateFile: "seo-cwv.md",
|
|
1377
|
-
tags: ["seo", "performance"]
|
|
1378
|
-
}
|
|
1379
|
-
]
|
|
1380
|
-
},
|
|
1381
|
-
devops: {
|
|
1382
|
-
category: "devops",
|
|
1383
|
-
skills: [
|
|
1384
|
-
{
|
|
1385
|
-
id: "devops-docker",
|
|
1386
|
-
name: { "en": "Docker Setup", "zh-CN": "Docker \u914D\u7F6E" },
|
|
1387
|
-
description: { "en": "Set up Docker configuration", "zh-CN": "\u914D\u7F6E Docker" },
|
|
1388
|
-
triggers: ["/docker", "/devops-docker"],
|
|
1389
|
-
templateFile: "devops-docker.md",
|
|
1390
|
-
tags: ["devops", "docker"]
|
|
1391
|
-
},
|
|
1392
|
-
{
|
|
1393
|
-
id: "devops-ci",
|
|
1394
|
-
name: { "en": "CI Pipeline", "zh-CN": "CI \u6D41\u6C34\u7EBF" },
|
|
1395
|
-
description: { "en": "Set up CI pipeline", "zh-CN": "\u914D\u7F6E CI \u6D41\u6C34\u7EBF" },
|
|
1396
|
-
triggers: ["/ci", "/devops-ci"],
|
|
1397
|
-
templateFile: "devops-ci.md",
|
|
1398
|
-
tags: ["devops", "ci"]
|
|
1399
|
-
},
|
|
1400
|
-
{
|
|
1401
|
-
id: "devops-deploy",
|
|
1402
|
-
name: { "en": "Deploy Script", "zh-CN": "\u90E8\u7F72\u811A\u672C" },
|
|
1403
|
-
description: { "en": "Create deployment script", "zh-CN": "\u521B\u5EFA\u90E8\u7F72\u811A\u672C" },
|
|
1404
|
-
triggers: ["/deploy", "/devops-deploy"],
|
|
1405
|
-
templateFile: "devops-deploy.md",
|
|
1406
|
-
tags: ["devops", "deploy"]
|
|
1407
|
-
},
|
|
1408
|
-
{
|
|
1409
|
-
id: "devops-monitor",
|
|
1410
|
-
name: { "en": "Monitoring Setup", "zh-CN": "\u76D1\u63A7\u914D\u7F6E" },
|
|
1411
|
-
description: { "en": "Set up monitoring", "zh-CN": "\u914D\u7F6E\u76D1\u63A7" },
|
|
1412
|
-
triggers: ["/monitor", "/devops-monitor"],
|
|
1413
|
-
templateFile: "devops-monitor.md",
|
|
1414
|
-
tags: ["devops", "monitoring"]
|
|
1415
|
-
}
|
|
1416
|
-
]
|
|
1417
|
-
}
|
|
1418
|
-
};
|
|
1419
|
-
function createBatchSkills(options) {
|
|
1420
|
-
const results = [];
|
|
1421
|
-
if (options.lang) {
|
|
1422
|
-
const template = BATCH_TEMPLATES[options.lang];
|
|
1423
|
-
if (template) {
|
|
1424
|
-
for (const skillDef of template.skills) {
|
|
1425
|
-
const skill = {
|
|
1426
|
-
...skillDef,
|
|
1427
|
-
category: template.category,
|
|
1428
|
-
enabled: true,
|
|
1429
|
-
version: "1.0.0",
|
|
1430
|
-
template: `# ${skillDef.name.en}
|
|
1431
|
-
|
|
1432
|
-
${skillDef.description.en}
|
|
1433
|
-
|
|
1434
|
-
This is a placeholder template.`
|
|
1435
|
-
};
|
|
1436
|
-
results.push(addSkill(skill));
|
|
1437
|
-
}
|
|
1438
|
-
}
|
|
1439
|
-
}
|
|
1440
|
-
if (options.seo) {
|
|
1441
|
-
const template = BATCH_TEMPLATES.seo;
|
|
1442
|
-
for (const skillDef of template.skills) {
|
|
1443
|
-
const skill = {
|
|
1444
|
-
...skillDef,
|
|
1445
|
-
category: template.category,
|
|
1446
|
-
enabled: true,
|
|
1447
|
-
version: "1.0.0",
|
|
1448
|
-
template: `# ${skillDef.name.en}
|
|
1449
|
-
|
|
1450
|
-
${skillDef.description.en}
|
|
1451
|
-
|
|
1452
|
-
This is a placeholder template.`
|
|
1453
|
-
};
|
|
1454
|
-
results.push(addSkill(skill));
|
|
1455
|
-
}
|
|
1456
|
-
}
|
|
1457
|
-
if (options.devops) {
|
|
1458
|
-
const template = BATCH_TEMPLATES.devops;
|
|
1459
|
-
for (const skillDef of template.skills) {
|
|
1460
|
-
const skill = {
|
|
1461
|
-
...skillDef,
|
|
1462
|
-
category: template.category,
|
|
1463
|
-
enabled: true,
|
|
1464
|
-
version: "1.0.0",
|
|
1465
|
-
template: `# ${skillDef.name.en}
|
|
1466
|
-
|
|
1467
|
-
${skillDef.description.en}
|
|
1468
|
-
|
|
1469
|
-
This is a placeholder template.`
|
|
1470
|
-
};
|
|
1471
|
-
results.push(addSkill(skill));
|
|
1472
|
-
}
|
|
1473
|
-
}
|
|
1474
|
-
return results;
|
|
1475
|
-
}
|
|
1476
|
-
function getBatchCategories() {
|
|
1477
|
-
return Object.keys(BATCH_TEMPLATES);
|
|
1478
|
-
}
|
|
1479
|
-
|
|
1480
326
|
const PREDEFINED_GROUPS = [
|
|
1481
327
|
// TypeScript Development Group
|
|
1482
328
|
{
|
|
@@ -2538,7 +1384,7 @@ async function handleAddProvider() {
|
|
|
2538
1384
|
defaultValue: true
|
|
2539
1385
|
});
|
|
2540
1386
|
if (setAsDefault) {
|
|
2541
|
-
const { switchToProvider } = await import('./codex.mjs').then(function (n) { return n.
|
|
1387
|
+
const { switchToProvider } = await import('./codex.mjs').then(function (n) { return n.Q; });
|
|
2542
1388
|
const switched = await switchToProvider(provider.id);
|
|
2543
1389
|
if (switched) {
|
|
2544
1390
|
console.log(ansis.green(i18n.t("multi-config:profileSetAsDefault", { name: provider.name })));
|
|
@@ -2733,7 +1579,7 @@ ${i18n.t("codex:copyingProvider", { name: provider.name })}`));
|
|
|
2733
1579
|
defaultValue: false
|
|
2734
1580
|
});
|
|
2735
1581
|
if (setAsDefault) {
|
|
2736
|
-
const { switchToProvider } = await import('./codex.mjs').then(function (n) { return n.
|
|
1582
|
+
const { switchToProvider } = await import('./codex.mjs').then(function (n) { return n.Q; });
|
|
2737
1583
|
const switched = await switchToProvider(copiedProvider.id);
|
|
2738
1584
|
if (switched) {
|
|
2739
1585
|
console.log(ansis.green(i18n.t("multi-config:profileSetAsDefault", { name: copiedProvider.name })));
|
|
@@ -4089,4 +2935,4 @@ function showStatus(type, message) {
|
|
|
4089
2935
|
console.log(STATUS[type](message));
|
|
4090
2936
|
}
|
|
4091
2937
|
|
|
4092
|
-
export {
|
|
2938
|
+
export { getContinueProviderPresets as $, getRegistry as A, importGroups as B, isGroupEnabled as C, refreshRegistry as D, removeGroup as E, searchGroups as F, isAiderInstalled as G, getAiderVersion as H, installAider as I, ensureAiderDir as J, readAiderConfig as K, writeAiderConfig as L, configureAiderApi as M, getAiderModelPresets as N, runAider as O, configureIncrementalManagement as P, addProviderToExisting as Q, editExistingProvider as R, deleteProviders as S, validateProviderData as T, CodexUninstaller as U, ensureContinueDir as V, isContinueConfigured as W, readContinueConfig as X, writeContinueConfig as Y, addContinueModel as Z, removeContinueModel as _, getPluginInfo as a, configureContinueApi as a0, addContinueMcpServer as a1, addContinueCustomCommand as a2, enableContinueContextProvider as a3, syncSkillsToContinue as a4, getToolConfigPath as a5, getToolDir as a6, isToolInstalled as a7, getToolVersion as a8, getToolStatus as a9, getAllToolsStatus as aa, getInstalledTools as ab, installTool as ac, getToolInfo as ad, getAllToolsInfo as ae, getToolsByCategory as af, formatToolStatus as ag, getRecommendedTools as ah, runHealthCheck as ai, displayHealthReport as aj, runDoctor as ak, MenuBuilder as al, showQuickMenu as am, confirm as an, showStatus as ao, codexProviderManager as ap, codexConfigSwitch$1 as aq, codexUninstaller as ar, listPlugins as b, enablePlugin as c, discoverPlugins as d, ensurePluginsDir as e, disablePlugin as f, getLoadedPlugins as g, getPluginWorkflows as h, getPluginAgents as i, getPluginMcpServices as j, getPluginOutputStyles as k, loadPlugin as l, getPluginSkills as m, initializePlugins as n, addGroup as o, disableGroup as p, enableGroup as q, readPluginConfig as r, ensureGroupsDir as s, exportGroups as t, unloadPlugin as u, getAllGroups as v, writePluginConfig as w, getEnabledAgents as x, getEnabledSkillIds as y, getGroup as z };
|