tribunal-kit 6.0.0 → 7.0.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/.agent/.manifest.json +78 -0
- package/.agent/ARCHITECTURE.md +19 -241
- package/.agent/agents/accessibility-reviewer.md +23 -16
- package/.agent/agents/ai-code-reviewer.md +25 -21
- package/.agent/agents/anti-pattern-reviewer.md +12 -7
- package/.agent/agents/api-architect.md +1 -0
- package/.agent/agents/backend-specialist.md +23 -22
- package/.agent/agents/cloud-engineer.md +1 -0
- package/.agent/agents/code-archaeologist.md +1 -0
- package/.agent/agents/complexity-reviewer.md +10 -7
- package/.agent/agents/database-architect.md +3 -2
- package/.agent/agents/db-latency-auditor.md +6 -2
- package/.agent/agents/debugger.md +3 -2
- package/.agent/agents/dependency-reviewer.md +1 -0
- package/.agent/agents/devops-engineer.md +9 -8
- package/.agent/agents/documentation-writer.md +6 -5
- package/.agent/agents/explorer-agent.md +1 -0
- package/.agent/agents/frontend-reviewer.md +21 -17
- package/.agent/agents/frontend-specialist.md +23 -20
- package/.agent/agents/game-developer.md +1 -0
- package/.agent/agents/interaction-reviewer.md +10 -5
- package/.agent/agents/logic-reviewer.md +3 -0
- package/.agent/agents/minimalist-reviewer.md +6 -0
- package/.agent/agents/mobile-developer.md +7 -6
- package/.agent/agents/mobile-reviewer.md +14 -13
- package/.agent/agents/orchestrator.md +3 -0
- package/.agent/agents/penetration-tester.md +1 -0
- package/.agent/agents/performance-optimizer.md +6 -5
- package/.agent/agents/performance-reviewer.md +6 -6
- package/.agent/agents/pipeline-reviewer.md +144 -0
- package/.agent/agents/precedence-reviewer.md +1 -0
- package/.agent/agents/product-manager.md +1 -0
- package/.agent/agents/product-owner.md +1 -0
- package/.agent/agents/product-reviewer.md +12 -7
- package/.agent/agents/project-planner.md +3 -0
- package/.agent/agents/qa-automation-engineer.md +50 -43
- package/.agent/agents/resilience-reviewer.md +1 -0
- package/.agent/agents/schema-reviewer.md +1 -0
- package/.agent/agents/security-auditor.md +24 -24
- package/.agent/agents/seo-specialist.md +33 -23
- package/.agent/agents/sql-reviewer.md +5 -4
- package/.agent/agents/supervisor-agent.md +12 -2
- package/.agent/agents/swarm-worker-contracts.md +13 -13
- package/.agent/agents/swarm-worker-registry.md +51 -51
- package/.agent/agents/system-architect.md +1 -0
- package/.agent/agents/test-coverage-reviewer.md +25 -22
- package/.agent/agents/test-engineer.md +12 -11
- package/.agent/agents/throughput-optimizer.md +45 -40
- package/.agent/agents/type-safety-reviewer.md +5 -4
- package/.agent/agents/ui-ux-auditor.md +6 -4
- package/.agent/agents/ui-visual-auditor.md +3 -0
- package/.agent/agents/ux-reviewer.md +11 -6
- package/.agent/agents/visual-reviewer.md +11 -6
- package/.agent/agents/vitals-reviewer.md +5 -4
- package/.agent/history/memory/.memory.idx +3716 -1
- package/.agent/history/memory/MEMORY.md +246 -1
- package/.agent/mcp_config.json +1 -6
- package/.agent/routing_index.json +2034 -263
- package/.agent/rules/GEMINI.md +12 -10
- package/.agent/rules/GEMINI_PLANNER.md +19 -21
- package/.agent/scripts/_colors.js +52 -54
- package/.agent/scripts/_utils.js +52 -53
- package/.agent/scripts/auto_preview.js +39 -43
- package/.agent/scripts/bundle_analyzer.js +47 -60
- package/.agent/scripts/case_law_manager.js +200 -294
- package/.agent/scripts/checklist.js +73 -94
- package/.agent/scripts/cicd_validator.js +305 -0
- package/.agent/scripts/compile_router.py +4 -111
- package/.agent/scripts/context_broker.js +317 -412
- package/.agent/scripts/contract_engine.js +402 -0
- package/.agent/scripts/dependency_analyzer.js +112 -124
- package/.agent/scripts/graph_builder.js +75 -103
- package/.agent/scripts/graph_visualizer.js +10 -12
- package/.agent/scripts/graph_zoom.js +38 -55
- package/.agent/scripts/guardrail_engine.js +195 -145
- package/.agent/scripts/impact_classifier.js +55 -30
- package/.agent/scripts/inner_loop_validator.js +108 -159
- package/.agent/scripts/integrity_manifest.js +59 -67
- package/.agent/scripts/lint_runner.js +65 -75
- package/.agent/scripts/marathon_harness.js +131 -208
- package/.agent/scripts/migrate_skills_frontmatter.py +4 -63
- package/.agent/scripts/minify_context.js +29 -33
- package/.agent/scripts/minimal_change_engine.js +95 -87
- package/.agent/scripts/mutation_runner.js +46 -62
- package/.agent/scripts/pipeline_engine.js +320 -209
- package/.agent/scripts/prompt_compiler.js +118 -93
- package/.agent/scripts/schema_validator.js +73 -121
- package/.agent/scripts/security_scan.js +88 -117
- package/.agent/scripts/session_manager.js +52 -69
- package/.agent/scripts/signal_detector.js +24 -22
- package/.agent/scripts/skill_evolution.js +184 -245
- package/.agent/scripts/skill_integrator.js +35 -48
- package/.agent/scripts/socratic_gate_policy.js +15 -12
- package/.agent/scripts/strengthen_skills.js +29 -33
- package/.agent/scripts/swarm_dispatcher.js +120 -151
- package/.agent/scripts/test_runner.js +54 -56
- package/.agent/scripts/token_budget_broker.js +9 -7
- package/.agent/scripts/trace_engine.js +126 -0
- package/.agent/scripts/verify_all.js +76 -93
- package/.agent/scripts/visual_audit.js +16 -21
- package/.agent/skill_topic_map.json +237 -0
- package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
- package/.agent/skills/60fps-animation/SKILL.md +7 -0
- package/.agent/skills/accessible-animation/SKILL.md +5 -1
- package/.agent/skills/adapt/SKILL.md +7 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
- package/.agent/skills/agent-organizer/SKILL.md +1 -0
- package/.agent/skills/agentic-patterns/SKILL.md +33 -25
- package/.agent/skills/agentic-workflows-2026/SKILL.md +80 -0
- package/.agent/skills/ai-app-hardening/SKILL.md +59 -0
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
- package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
- package/.agent/skills/animation-systems/SKILL.md +11 -10
- package/.agent/skills/antfu-conventions/SKILL.md +7 -2
- package/.agent/skills/api-patterns/SKILL.md +14 -10
- package/.agent/skills/api-security-auditor/SKILL.md +15 -14
- package/.agent/skills/app-builder/SKILL.md +1 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
- package/.agent/skills/apple-design/SKILL.md +8 -7
- package/.agent/skills/architecture/SKILL.md +3 -2
- package/.agent/skills/audit-and-fix/SKILL.md +8 -5
- package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
- package/.agent/skills/backend-security-expert/SKILL.md +1 -0
- package/.agent/skills/baseline-ui/SKILL.md +8 -7
- package/.agent/skills/bash-linux/SKILL.md +1 -0
- package/.agent/skills/behavioral-modes/SKILL.md +1 -0
- package/.agent/skills/better-colors/SKILL.md +11 -7
- package/.agent/skills/better-typography/SKILL.md +30 -16
- package/.agent/skills/better-ui/SKILL.md +17 -10
- package/.agent/skills/bolder/SKILL.md +6 -0
- package/.agent/skills/brainstorming/SKILL.md +6 -4
- package/.agent/skills/browser-native-ai/SKILL.md +5 -4
- package/.agent/skills/build-primitive/SKILL.md +5 -0
- package/.agent/skills/building-native-ui/SKILL.md +1 -0
- package/.agent/skills/cicd-pro/SKILL.md +2 -1
- package/.agent/skills/clarify/SKILL.md +19 -14
- package/.agent/skills/clean-code/SKILL.md +16 -15
- package/.agent/skills/cloud-architect/SKILL.md +1 -0
- package/.agent/skills/cobejs/SKILL.md +7 -9
- package/.agent/skills/code-review-checklist/SKILL.md +1 -0
- package/.agent/skills/codebase-design/SKILL.md +7 -2
- package/.agent/skills/colorize/SKILL.md +8 -3
- package/.agent/skills/compact-landing/SKILL.md +8 -3
- package/.agent/skills/company-logos/SKILL.md +6 -0
- package/.agent/skills/config-validator/SKILL.md +10 -9
- package/.agent/skills/containerization-pro/SKILL.md +6 -5
- package/.agent/skills/context-engineering-pro/SKILL.md +70 -0
- package/.agent/skills/create-design-md/SKILL.md +13 -5
- package/.agent/skills/critique/SKILL.md +10 -8
- package/.agent/skills/csharp-developer/SKILL.md +1 -0
- package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
- package/.agent/skills/database-design/SKILL.md +2 -1
- package/.agent/skills/delight/SKILL.md +6 -0
- package/.agent/skills/deployment-procedures/SKILL.md +2 -1
- package/.agent/skills/design-lab/SKILL.md +5 -0
- package/.agent/skills/devops-engineer/SKILL.md +3 -2
- package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
- package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
- package/.agent/skills/distill/SKILL.md +7 -2
- package/.agent/skills/documentation-templates/SKILL.md +3 -2
- package/.agent/skills/domain-modeling/SKILL.md +12 -4
- package/.agent/skills/duckdb-analytical-sql/SKILL.md +59 -0
- package/.agent/skills/edge-ai-mobile/SKILL.md +50 -0
- package/.agent/skills/edge-computing/SKILL.md +9 -8
- package/.agent/skills/emil-design-eng/SKILL.md +43 -27
- package/.agent/skills/error-resilience/SKILL.md +34 -16
- package/.agent/skills/expo-router-v4/SKILL.md +81 -0
- package/.agent/skills/extract-design-system/SKILL.md +12 -11
- package/.agent/skills/fabel-protocol/SKILL.md +24 -17
- package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
- package/.agent/skills/fixing-metadata/SKILL.md +24 -13
- package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
- package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
- package/.agent/skills/frontend-design/SKILL.md +21 -13
- package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
- package/.agent/skills/game-design-expert/SKILL.md +1 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
- package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
- package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
- package/.agent/skills/git-pro/SKILL.md +10 -9
- package/.agent/skills/github-operations/SKILL.md +2 -1
- package/.agent/skills/gpt-taste/SKILL.md +7 -0
- package/.agent/skills/gsap-core/SKILL.md +26 -22
- package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
- package/.agent/skills/gsap-performance/SKILL.md +4 -3
- package/.agent/skills/gsap-plugins/SKILL.md +34 -33
- package/.agent/skills/gsap-react/SKILL.md +9 -8
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
- package/.agent/skills/gsap-timeline/SKILL.md +18 -15
- package/.agent/skills/gsap-utils/SKILL.md +25 -24
- package/.agent/skills/harden/SKILL.md +9 -3
- package/.agent/skills/harness-protocol/SKILL.md +1 -0
- package/.agent/skills/i18n-localization/SKILL.md +10 -9
- package/.agent/skills/impeccable/SKILL.md +5 -0
- package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
- package/.agent/skills/improve-ui/SKILL.md +12 -5
- package/.agent/skills/intelligent-routing/SKILL.md +7 -6
- package/.agent/skills/knowledge-graph/SKILL.md +1 -0
- package/.agent/skills/landing-page/SKILL.md +1 -0
- package/.agent/skills/lint-and-validate/SKILL.md +9 -4
- package/.agent/skills/llm-engineering/SKILL.md +55 -54
- package/.agent/skills/local-first/SKILL.md +20 -19
- package/.agent/skills/local-first-architecture/SKILL.md +6 -1
- package/.agent/skills/lottie-animation/SKILL.md +7 -3
- package/.agent/skills/marquee-loop/SKILL.md +1 -0
- package/.agent/skills/masked-reveal/SKILL.md +17 -4
- package/.agent/skills/mcp-builder/SKILL.md +13 -10
- package/.agent/skills/micro-interaction/SKILL.md +20 -5
- package/.agent/skills/mobile-design/SKILL.md +26 -15
- package/.agent/skills/monorepo-management/SKILL.md +3 -2
- package/.agent/skills/morphing-icons/SKILL.md +16 -6
- package/.agent/skills/motion-engineering/SKILL.md +19 -15
- package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
- package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
- package/.agent/skills/observability/SKILL.md +45 -44
- package/.agent/skills/opentelemetry-observability/SKILL.md +59 -0
- package/.agent/skills/page-transition-animation/SKILL.md +6 -3
- package/.agent/skills/parallel-agents/SKILL.md +7 -2
- package/.agent/skills/performance-profiling/SKILL.md +24 -13
- package/.agent/skills/plan-writing/SKILL.md +1 -0
- package/.agent/skills/platform-engineer/SKILL.md +3 -2
- package/.agent/skills/platform-engineering-opentofu/SKILL.md +68 -0
- package/.agent/skills/playwright-ai-e2e/SKILL.md +60 -0
- package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
- package/.agent/skills/polish/SKILL.md +13 -12
- package/.agent/skills/powershell-windows/SKILL.md +1 -0
- package/.agent/skills/pricing-page/SKILL.md +8 -3
- package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
- package/.agent/skills/progressive-blur/SKILL.md +9 -4
- package/.agent/skills/project-idioms/SKILL.md +1 -0
- package/.agent/skills/property-based-testing/SKILL.md +58 -0
- package/.agent/skills/python-patterns/SKILL.md +1 -0
- package/.agent/skills/python-pro/SKILL.md +1 -0
- package/.agent/skills/quieter/SKILL.md +6 -0
- package/.agent/skills/react-doctor/SKILL.md +6 -0
- package/.agent/skills/react-specialist/SKILL.md +32 -28
- package/.agent/skills/readme-builder/SKILL.md +1 -0
- package/.agent/skills/realtime-patterns/SKILL.md +34 -33
- package/.agent/skills/red-team-tactics/SKILL.md +1 -0
- package/.agent/skills/redesign-skill/SKILL.md +6 -0
- package/.agent/skills/review-animations/SKILL.md +5 -2
- package/.agent/skills/review-animations/STANDARDS.md +37 -23
- package/.agent/skills/rust-pro/SKILL.md +1 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
- package/.agent/skills/server-management/SKILL.md +1 -0
- package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
- package/.agent/skills/shape/SKILL.md +9 -2
- package/.agent/skills/skill-creator/SKILL.md +1 -0
- package/.agent/skills/soft-skill/SKILL.md +6 -0
- package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
- package/.agent/skills/sql-pro/SKILL.md +1 -0
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/.agent/skills/svg-animation/SKILL.md +16 -7
- package/.agent/skills/swiftui-expert/SKILL.md +1 -0
- package/.agent/skills/swiss-design/SKILL.md +5 -0
- package/.agent/skills/system-design-pro/SKILL.md +1 -0
- package/.agent/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
- package/.agent/skills/taste-skill/SKILL.md +6 -0
- package/.agent/skills/tdd-workflow/SKILL.md +5 -0
- package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
- package/.agent/skills/testing-patterns/SKILL.md +123 -115
- package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
- package/.agent/skills/thinking-protocol/SKILL.md +3 -0
- package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
- package/.agent/skills/transitions-dev/SKILL.md +19 -6
- package/.agent/skills/trend-researcher/SKILL.md +1 -0
- package/.agent/skills/typescript-advanced/SKILL.md +23 -18
- package/.agent/skills/typeset/SKILL.md +10 -1
- package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
- package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
- package/.agent/skills/ui-skills-root/SKILL.md +39 -38
- package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
- package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
- package/.agent/skills/vector-search-pgvector/SKILL.md +78 -0
- package/.agent/skills/vue-expert/SKILL.md +22 -19
- package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
- package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
- package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
- package/.agent/skills/web-quality-audit/SKILL.md +5 -0
- package/.agent/skills/webapp-testing/SKILL.md +14 -13
- package/.agent/skills/webgpu-performance/SKILL.md +1 -0
- package/.agent/skills/whimsy-injector/SKILL.md +9 -5
- package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
- package/.agent/skills/zero-trust-passkeys/SKILL.md +90 -0
- package/.agent/templates/DESIGN.md +119 -110
- package/.agent/templates/design-tokens.json +9 -6
- package/.agent/workflows/acf.md +1 -0
- package/.agent/workflows/api-tester.md +1 -0
- package/.agent/workflows/audit.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/changelog.md +1 -0
- package/.agent/workflows/contract.md +60 -0
- package/.agent/workflows/create.md +1 -0
- package/.agent/workflows/debug.md +1 -0
- package/.agent/workflows/deploy.md +1 -0
- package/.agent/workflows/enhance.md +1 -0
- package/.agent/workflows/fix-ci.md +89 -0
- package/.agent/workflows/fix.md +1 -0
- package/.agent/workflows/generate.md +1 -0
- package/.agent/workflows/marathon.md +1 -0
- package/.agent/workflows/migrate.md +1 -0
- package/.agent/workflows/minimal.md +9 -7
- package/.agent/workflows/orchestrate.md +1 -0
- package/.agent/workflows/performance-benchmarker.md +1 -0
- package/.agent/workflows/pipeline.md +26 -21
- package/.agent/workflows/plan.md +1 -0
- package/.agent/workflows/preview.md +1 -0
- package/.agent/workflows/refactor.md +3 -2
- package/.agent/workflows/review-ai.md +4 -3
- package/.agent/workflows/review.md +1 -0
- package/.agent/workflows/session.md +1 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/strengthen-skills.md +1 -0
- package/.agent/workflows/super-prompt.md +1 -0
- package/.agent/workflows/swarm.md +15 -3
- package/.agent/workflows/test.md +8 -7
- package/.agent/workflows/tribunal-backend.md +3 -2
- package/.agent/workflows/tribunal-cicd.md +104 -0
- package/.agent/workflows/tribunal-database.md +1 -0
- package/.agent/workflows/tribunal-frontend.md +8 -6
- package/.agent/workflows/tribunal-full.md +15 -14
- package/.agent/workflows/tribunal-mobile.md +6 -5
- package/.agent/workflows/tribunal-performance.md +1 -0
- package/.agent/workflows/tribunal-speed.md +1 -0
- package/.agent/workflows/tribunal-ui.md +29 -21
- package/.agent/workflows/ui-ux-pro-max.md +19 -15
- package/CONTRIBUTING.md +3 -3
- package/README.md +160 -88
- package/SECURITY.md +11 -11
- package/bin/mcp-server.js +512 -233
- package/bin/tribunal-kit.js +29 -30
- package/bin/wrapper.js +45 -48
- package/dist/cli.js +26 -0
- package/dist/commands/case.js +2 -0
- package/dist/commands/contract.js +440 -0
- package/dist/commands/memory.js +3 -2
- package/dist/commands/native.js +36 -0
- package/dist/commands/status.js +6 -0
- package/dist/esm/index.mjs +32 -0
- package/dist/index.d.ts +58 -3
- package/package.json +20 -16
- package/scripts/benchmark.js +62 -86
- package/scripts/changelog.js +67 -73
- package/scripts/fix-vbc.js +13 -15
- package/scripts/fix-vbc.ps1 +2 -118
- package/scripts/stress_benchmark.js +358 -0
- package/scripts/sync-version.js +71 -41
- package/scripts/validate-payload.js +23 -30
- package/scripts/visual_audit.js +23 -13
|
@@ -9,28 +9,28 @@
|
|
|
9
9
|
* node .agent/scripts/auto_preview.js restart
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
'use strict';
|
|
13
13
|
|
|
14
|
-
const fs = require(
|
|
15
|
-
const path = require(
|
|
16
|
-
const { spawn } = require(
|
|
17
|
-
const net = require(
|
|
14
|
+
const fs = require('fs');
|
|
15
|
+
const path = require('path');
|
|
16
|
+
const { spawn } = require('child_process');
|
|
17
|
+
const net = require('net');
|
|
18
18
|
|
|
19
|
-
const PID_FILE =
|
|
19
|
+
const PID_FILE = '.preview.pid';
|
|
20
20
|
const DEFAULT_PORT = 3000;
|
|
21
21
|
const TIMEOUT_SECONDS = 30;
|
|
22
22
|
|
|
23
|
-
const { GREEN, RED, YELLOW, BOLD, RESET } = require(
|
|
23
|
+
const { GREEN, RED, YELLOW, BOLD, RESET } = require('./colors.js');
|
|
24
24
|
|
|
25
25
|
function findStartCommand() {
|
|
26
|
-
const pkgPath = path.resolve(
|
|
26
|
+
const pkgPath = path.resolve('package.json');
|
|
27
27
|
if (!fs.existsSync(pkgPath)) return { cmd: [], found: false };
|
|
28
28
|
|
|
29
29
|
try {
|
|
30
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath,
|
|
30
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
31
31
|
const scripts = pkg.scripts || {};
|
|
32
|
-
if (scripts.dev) return { cmd: [
|
|
33
|
-
if (scripts.start) return { cmd: [
|
|
32
|
+
if (scripts.dev) return { cmd: ['npm', 'run', 'dev'], found: true };
|
|
33
|
+
if (scripts.start) return { cmd: ['npm', 'run', 'start'], found: true };
|
|
34
34
|
} catch {
|
|
35
35
|
// Ignore
|
|
36
36
|
}
|
|
@@ -38,13 +38,13 @@ function findStartCommand() {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
function getPortFromEnv() {
|
|
41
|
-
const envPath = path.resolve(
|
|
41
|
+
const envPath = path.resolve('.env');
|
|
42
42
|
if (fs.existsSync(envPath)) {
|
|
43
43
|
try {
|
|
44
|
-
const data = fs.readFileSync(envPath,
|
|
45
|
-
for (const line of data.split(
|
|
46
|
-
if (line.trim().startsWith(
|
|
47
|
-
return parseInt(line.split(
|
|
44
|
+
const data = fs.readFileSync(envPath, 'utf8');
|
|
45
|
+
for (const line of data.split('\n')) {
|
|
46
|
+
if (line.trim().startsWith('PORT=')) {
|
|
47
|
+
return parseInt(line.split('=')[1].trim(), 10);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
} catch {}
|
|
@@ -53,36 +53,36 @@ function getPortFromEnv() {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
function isPortOpen(port) {
|
|
56
|
-
return new Promise(
|
|
56
|
+
return new Promise(resolve => {
|
|
57
57
|
const client = new net.Socket();
|
|
58
58
|
client.setTimeout(1000);
|
|
59
59
|
client
|
|
60
|
-
.once(
|
|
60
|
+
.once('connect', () => {
|
|
61
61
|
client.destroy();
|
|
62
62
|
resolve(true);
|
|
63
63
|
})
|
|
64
|
-
.once(
|
|
64
|
+
.once('timeout', () => {
|
|
65
65
|
client.destroy();
|
|
66
66
|
resolve(false);
|
|
67
67
|
})
|
|
68
|
-
.once(
|
|
68
|
+
.once('error', () => {
|
|
69
69
|
resolve(false);
|
|
70
70
|
})
|
|
71
|
-
.connect(port,
|
|
71
|
+
.connect(port, 'localhost');
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
function readPid() {
|
|
76
76
|
if (fs.existsSync(PID_FILE)) {
|
|
77
77
|
try {
|
|
78
|
-
return parseInt(fs.readFileSync(PID_FILE,
|
|
78
|
+
return parseInt(fs.readFileSync(PID_FILE, 'utf8').trim(), 10);
|
|
79
79
|
} catch {}
|
|
80
80
|
}
|
|
81
81
|
return null;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
function writePid(pid) {
|
|
85
|
-
fs.writeFileSync(PID_FILE, String(pid),
|
|
85
|
+
fs.writeFileSync(PID_FILE, String(pid), 'utf8');
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
function clearPid() {
|
|
@@ -107,18 +107,16 @@ async function startServer() {
|
|
|
107
107
|
console.log(
|
|
108
108
|
` This project has no package.json, or its package.json has no 'dev' or 'start' script.`,
|
|
109
109
|
);
|
|
110
|
-
console.log(
|
|
111
|
-
` Add a script to package.json, or start your server manually.`,
|
|
112
|
-
);
|
|
110
|
+
console.log(` Add a script to package.json, or start your server manually.`);
|
|
113
111
|
return;
|
|
114
112
|
}
|
|
115
113
|
|
|
116
|
-
console.log(`${BOLD}Starting: ${cmd.join(
|
|
114
|
+
console.log(`${BOLD}Starting: ${cmd.join(' ')}${RESET}`);
|
|
117
115
|
// Adjust command for windows (npm.cmd instead of npm)
|
|
118
|
-
const executable = process.platform ===
|
|
116
|
+
const executable = process.platform === 'win32' ? `${cmd[0]}.cmd` : cmd[0];
|
|
119
117
|
|
|
120
118
|
const proc = spawn(executable, cmd.slice(1), {
|
|
121
|
-
stdio:
|
|
119
|
+
stdio: 'pipe',
|
|
122
120
|
detached: true,
|
|
123
121
|
});
|
|
124
122
|
|
|
@@ -135,19 +133,17 @@ async function startServer() {
|
|
|
135
133
|
console.log(`\n${GREEN}✅ Server started${RESET}`);
|
|
136
134
|
console.log(` URL: http://localhost:${port}`);
|
|
137
135
|
console.log(` PID: ${proc.pid}`);
|
|
138
|
-
console.log(` Command: ${cmd.join(
|
|
136
|
+
console.log(` Command: ${cmd.join(' ')}`);
|
|
139
137
|
console.log(`\nStop with: node .agent/scripts/auto_preview.js stop`);
|
|
140
138
|
return;
|
|
141
139
|
}
|
|
142
|
-
process.stdout.write(
|
|
143
|
-
await new Promise(
|
|
140
|
+
process.stdout.write('.');
|
|
141
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
144
142
|
}
|
|
145
143
|
|
|
146
|
-
console.log(
|
|
147
|
-
`\n${RED}❌ Server did not start within ${TIMEOUT_SECONDS}s${RESET}`,
|
|
148
|
-
);
|
|
144
|
+
console.log(`\n${RED}❌ Server did not start within ${TIMEOUT_SECONDS}s${RESET}`);
|
|
149
145
|
try {
|
|
150
|
-
process.kill(proc.pid,
|
|
146
|
+
process.kill(proc.pid, 'SIGTERM');
|
|
151
147
|
} catch {}
|
|
152
148
|
clearPid();
|
|
153
149
|
}
|
|
@@ -159,7 +155,7 @@ function stopServer() {
|
|
|
159
155
|
return;
|
|
160
156
|
}
|
|
161
157
|
try {
|
|
162
|
-
process.kill(pid,
|
|
158
|
+
process.kill(pid, 'SIGTERM');
|
|
163
159
|
console.log(`${GREEN}✅ Server stopped (PID ${pid})${RESET}`);
|
|
164
160
|
} catch {
|
|
165
161
|
console.log(`${YELLOW}Process ${pid} was not running${RESET}`);
|
|
@@ -181,7 +177,7 @@ async function showStatus() {
|
|
|
181
177
|
|
|
182
178
|
async function main() {
|
|
183
179
|
const args = process.argv.slice(2);
|
|
184
|
-
const actions = new Set([
|
|
180
|
+
const actions = new Set(['start', 'stop', 'status', 'restart']);
|
|
185
181
|
|
|
186
182
|
if (args.length < 1 || !actions.has(args[0])) {
|
|
187
183
|
console.log(`Usage: node auto_preview.js [start|stop|status|restart]`);
|
|
@@ -189,15 +185,15 @@ async function main() {
|
|
|
189
185
|
}
|
|
190
186
|
|
|
191
187
|
const action = args[0];
|
|
192
|
-
if (action ===
|
|
188
|
+
if (action === 'start') {
|
|
193
189
|
await startServer();
|
|
194
|
-
} else if (action ===
|
|
190
|
+
} else if (action === 'stop') {
|
|
195
191
|
stopServer();
|
|
196
|
-
} else if (action ===
|
|
192
|
+
} else if (action === 'status') {
|
|
197
193
|
await showStatus();
|
|
198
|
-
} else if (action ===
|
|
194
|
+
} else if (action === 'restart') {
|
|
199
195
|
stopServer();
|
|
200
|
-
await new Promise(
|
|
196
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
201
197
|
await startServer();
|
|
202
198
|
}
|
|
203
199
|
}
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
* node .agent/scripts/bundle_analyzer.js . --threshold 500
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
'use strict';
|
|
18
18
|
|
|
19
|
-
const fs = require(
|
|
20
|
-
const path = require(
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
21
|
|
|
22
22
|
const {
|
|
23
23
|
YELLOW,
|
|
@@ -33,21 +33,21 @@ const {
|
|
|
33
33
|
fail,
|
|
34
34
|
warn,
|
|
35
35
|
skip,
|
|
36
|
-
} = require(
|
|
36
|
+
} = require('./_colors');
|
|
37
37
|
|
|
38
|
-
const { loadJson, runCommand } = require(
|
|
38
|
+
const { loadJson, runCommand } = require('./_utils');
|
|
39
39
|
|
|
40
40
|
const HEAVY_PACKAGES = {
|
|
41
|
-
moment:
|
|
42
|
-
lodash:
|
|
43
|
-
rxjs:
|
|
44
|
-
|
|
45
|
-
firebase:
|
|
46
|
-
|
|
47
|
-
three:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
antd:
|
|
41
|
+
moment: 'Use date-fns or dayjs instead (~2KB vs ~230KB)',
|
|
42
|
+
lodash: 'Import specific functions: lodash/debounce instead of full lodash',
|
|
43
|
+
rxjs: 'Import specific operators to enable tree-shaking',
|
|
44
|
+
'aws-sdk': 'Use @aws-sdk/client-* v3 modular imports',
|
|
45
|
+
firebase: 'Use modular imports: firebase/auth, firebase/firestore',
|
|
46
|
+
'chart.js': 'Register only needed components',
|
|
47
|
+
three: 'Import specific modules from three/examples/jsm/',
|
|
48
|
+
'@mui/material': 'Ensure babel-plugin-import or modular imports',
|
|
49
|
+
'@mui/icons-material': 'Import specific icons, never the barrel',
|
|
50
|
+
antd: 'Use modular imports with babel-plugin-import',
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
function formatSize(sizeBytes) {
|
|
@@ -57,27 +57,27 @@ function formatSize(sizeBytes) {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
function detectBundler(projectRoot) {
|
|
60
|
-
const pkg = loadJson(path.join(projectRoot,
|
|
60
|
+
const pkg = loadJson(path.join(projectRoot, 'package.json'));
|
|
61
61
|
if (!pkg) return null;
|
|
62
62
|
|
|
63
63
|
const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
|
|
64
64
|
|
|
65
|
-
if (deps.vite) return
|
|
66
|
-
if (deps.next) return
|
|
67
|
-
if (deps.webpack) return
|
|
65
|
+
if (deps.vite) return 'vite';
|
|
66
|
+
if (deps.next) return 'next';
|
|
67
|
+
if (deps.webpack) return 'webpack';
|
|
68
68
|
|
|
69
69
|
if (
|
|
70
|
-
fs.existsSync(path.join(projectRoot,
|
|
71
|
-
fs.existsSync(path.join(projectRoot,
|
|
70
|
+
fs.existsSync(path.join(projectRoot, 'webpack.config.js')) ||
|
|
71
|
+
fs.existsSync(path.join(projectRoot, 'webpack.config.ts'))
|
|
72
72
|
) {
|
|
73
|
-
return
|
|
73
|
+
return 'webpack';
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
return null;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
function findDistDir(projectRoot) {
|
|
80
|
-
const candidates = [
|
|
80
|
+
const candidates = ['dist', 'build', '.next', 'out', 'public/build'];
|
|
81
81
|
for (const c of candidates) {
|
|
82
82
|
const d = path.join(projectRoot, c);
|
|
83
83
|
if (fs.existsSync(d) && fs.statSync(d).isDirectory()) return d;
|
|
@@ -118,7 +118,7 @@ function analyzeDist(distDir) {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
function checkHeavyDependencies(projectRoot) {
|
|
121
|
-
const pkg = loadJson(path.join(projectRoot,
|
|
121
|
+
const pkg = loadJson(path.join(projectRoot, 'package.json'));
|
|
122
122
|
if (!pkg) return [];
|
|
123
123
|
|
|
124
124
|
const deps = Object.keys(pkg.dependencies || {});
|
|
@@ -133,14 +133,14 @@ function checkHeavyDependencies(projectRoot) {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
function runBuild(projectRoot) {
|
|
136
|
-
const pkg = loadJson(path.join(projectRoot,
|
|
136
|
+
const pkg = loadJson(path.join(projectRoot, 'package.json'));
|
|
137
137
|
if (pkg && (!pkg.scripts || !pkg.scripts.build)) {
|
|
138
138
|
skip("No 'build' script found in package.json");
|
|
139
139
|
return true;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
const elapsed = timer();
|
|
143
|
-
const result = runCommand(
|
|
143
|
+
const result = runCommand('npm', ['run', 'build'], {
|
|
144
144
|
cwd: projectRoot,
|
|
145
145
|
timeout: 300000,
|
|
146
146
|
});
|
|
@@ -152,9 +152,9 @@ function runBuild(projectRoot) {
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
fail(`Build failed ${DIM}(${formatMs(ms)})${RESET}`);
|
|
155
|
-
const output = (result.stdout +
|
|
155
|
+
const output = (result.stdout + '\n' + result.stderr).trim();
|
|
156
156
|
if (output) {
|
|
157
|
-
for (const line of output.split(
|
|
157
|
+
for (const line of output.split('\n').slice(0, 10)) {
|
|
158
158
|
console.log(` ${line}`);
|
|
159
159
|
}
|
|
160
160
|
}
|
|
@@ -169,18 +169,14 @@ function main() {
|
|
|
169
169
|
let threshold = 250;
|
|
170
170
|
|
|
171
171
|
for (let i = 0; i < args.length; i++) {
|
|
172
|
-
if (args[i] ===
|
|
173
|
-
else if (args[i] ===
|
|
172
|
+
if (args[i] === '--build') buildFlag = true;
|
|
173
|
+
else if (args[i] === '--threshold' && i + 1 < args.length) {
|
|
174
174
|
threshold = parseInt(args[++i], 10);
|
|
175
|
-
} else if (args[i] ===
|
|
176
|
-
console.log(
|
|
177
|
-
"Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]",
|
|
178
|
-
);
|
|
175
|
+
} else if (args[i] === '-h' || args[i] === '--help') {
|
|
176
|
+
console.log('Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]');
|
|
179
177
|
process.exit(0);
|
|
180
|
-
} else if (args[i].startsWith(
|
|
181
|
-
console.log(
|
|
182
|
-
"Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]",
|
|
183
|
-
);
|
|
178
|
+
} else if (args[i].startsWith('-')) {
|
|
179
|
+
console.log('Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]');
|
|
184
180
|
process.exit(1);
|
|
185
181
|
} else if (!targetPath) {
|
|
186
182
|
targetPath = args[i];
|
|
@@ -188,9 +184,7 @@ function main() {
|
|
|
188
184
|
}
|
|
189
185
|
|
|
190
186
|
if (!targetPath) {
|
|
191
|
-
console.log(
|
|
192
|
-
"Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]",
|
|
193
|
-
);
|
|
187
|
+
console.log('Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]');
|
|
194
188
|
process.exit(1);
|
|
195
189
|
}
|
|
196
190
|
|
|
@@ -202,15 +196,15 @@ function main() {
|
|
|
202
196
|
|
|
203
197
|
const bundler = detectBundler(projectRoot);
|
|
204
198
|
console.log(
|
|
205
|
-
banner(
|
|
199
|
+
banner('bundle_analyzer.js', {
|
|
206
200
|
Project: projectRoot,
|
|
207
|
-
Bundler: bundler ||
|
|
201
|
+
Bundler: bundler || 'auto-detect',
|
|
208
202
|
Threshold: `${threshold}KB`,
|
|
209
203
|
}),
|
|
210
204
|
);
|
|
211
205
|
|
|
212
206
|
if (buildFlag) {
|
|
213
|
-
console.log(sectionHeader(
|
|
207
|
+
console.log(sectionHeader('Building Project'));
|
|
214
208
|
if (!runBuild(projectRoot)) {
|
|
215
209
|
process.exit(1);
|
|
216
210
|
}
|
|
@@ -223,25 +217,19 @@ function main() {
|
|
|
223
217
|
let distResult = null;
|
|
224
218
|
|
|
225
219
|
if (!distDir) {
|
|
226
|
-
skip(
|
|
227
|
-
skip(
|
|
220
|
+
skip('No build output directory found (dist/, build/, .next/, out/)');
|
|
221
|
+
skip('Run with --build to create a build first, or build manually');
|
|
228
222
|
} else {
|
|
229
|
-
console.log(
|
|
230
|
-
sectionHeader(
|
|
231
|
-
`Bundle Size Analysis (${path.relative(projectRoot, distDir)}/)`,
|
|
232
|
-
),
|
|
233
|
-
);
|
|
223
|
+
console.log(sectionHeader(`Bundle Size Analysis (${path.relative(projectRoot, distDir)}/)`));
|
|
234
224
|
distResult = analyzeDist(distDir);
|
|
235
|
-
console.log(
|
|
236
|
-
`\n Total bundle size: ${BOLD}${formatSize(distResult.total)}${RESET}`,
|
|
237
|
-
);
|
|
225
|
+
console.log(`\n Total bundle size: ${BOLD}${formatSize(distResult.total)}${RESET}`);
|
|
238
226
|
|
|
239
227
|
const thresholdBytes = threshold * 1024;
|
|
240
228
|
console.log(`\n ${BOLD}Top files by size:${RESET}`);
|
|
241
229
|
let count = 0;
|
|
242
230
|
for (const [filepath, size] of distResult.files) {
|
|
243
231
|
if (count++ >= 10) break;
|
|
244
|
-
const sizeStr = formatSize(size).padStart(10,
|
|
232
|
+
const sizeStr = formatSize(size).padStart(10, ' ');
|
|
245
233
|
if (size > thresholdBytes) {
|
|
246
234
|
warn(`${sizeStr} ${filepath}`);
|
|
247
235
|
} else {
|
|
@@ -250,8 +238,7 @@ function main() {
|
|
|
250
238
|
}
|
|
251
239
|
|
|
252
240
|
const largeJs = distResult.files.filter(
|
|
253
|
-
([f, s]) =>
|
|
254
|
-
(f.endsWith(".js") || f.endsWith(".mjs")) && s > thresholdBytes,
|
|
241
|
+
([f, s]) => (f.endsWith('.js') || f.endsWith('.mjs')) && s > thresholdBytes,
|
|
255
242
|
);
|
|
256
243
|
if (largeJs.length > 0) {
|
|
257
244
|
console.log(
|
|
@@ -260,14 +247,14 @@ function main() {
|
|
|
260
247
|
}
|
|
261
248
|
}
|
|
262
249
|
|
|
263
|
-
console.log(sectionHeader(
|
|
250
|
+
console.log(sectionHeader('Dependency Weight Check'));
|
|
264
251
|
if (heavy.length > 0) {
|
|
265
252
|
for (const [pkgName, suggestion] of heavy) {
|
|
266
253
|
warn(`'${pkgName}' is a heavy dependency`);
|
|
267
254
|
console.log(` → ${suggestion}`);
|
|
268
255
|
}
|
|
269
256
|
} else {
|
|
270
|
-
ok(
|
|
257
|
+
ok('No known-heavy packages detected');
|
|
271
258
|
}
|
|
272
259
|
|
|
273
260
|
// ━━━ Summary ━━━ (reuses cached distResult instead of re-scanning)
|
|
@@ -286,7 +273,7 @@ function main() {
|
|
|
286
273
|
if (heavy.length > 0) {
|
|
287
274
|
warn(`${heavy.length} heavy dependency suggestion(s) — see above`);
|
|
288
275
|
} else if (distResult && heavy.length === 0) {
|
|
289
|
-
ok(
|
|
276
|
+
ok('No optimization suggestions');
|
|
290
277
|
}
|
|
291
278
|
console.log();
|
|
292
279
|
}
|