@planu/cli 4.1.0 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/config/license-plans.json +65 -361
  3. package/dist/engine/hooks/git-hook-generator.js +31 -0
  4. package/dist/tools/git/hook-ops.js +53 -9
  5. package/dist/tools/tool-registry/group-infra.js +22 -0
  6. package/package.json +8 -7
  7. package/dist/engine/escalator/index.d.ts +0 -5
  8. package/dist/engine/escalator/index.js +0 -5
  9. package/dist/engine/freeze/retro-audit.d.ts +0 -6
  10. package/dist/engine/freeze/retro-audit.js +0 -24
  11. package/dist/engine/heal/backup.d.ts +0 -9
  12. package/dist/engine/heal/backup.js +0 -21
  13. package/dist/engine/idioma-validator/index.d.ts +0 -17
  14. package/dist/engine/idioma-validator/index.js +0 -89
  15. package/dist/engine/saga/index.d.ts +0 -4
  16. package/dist/engine/saga/index.js +0 -4
  17. package/dist/engine/spec-state-machine/index.d.ts +0 -3
  18. package/dist/engine/spec-state-machine/index.js +0 -2
  19. package/dist/engine/spec-summary-html/dashboard-renderer.d.ts +0 -6
  20. package/dist/engine/spec-summary-html/dashboard-renderer.js +0 -333
  21. package/dist/engine/triagier/index.d.ts +0 -5
  22. package/dist/engine/triagier/index.js +0 -5
  23. package/dist/engine/universal-rules/index.d.ts +0 -5
  24. package/dist/engine/universal-rules/index.js +0 -6
  25. package/dist/testing/cassette/index.d.ts +0 -23
  26. package/dist/testing/cassette/index.js +0 -26
  27. package/dist/tools/domain-bundle-handler.d.ts +0 -37
  28. package/dist/tools/domain-bundle-handler.js +0 -71
  29. package/dist/tools/figma/rules-file.d.ts +0 -5
  30. package/dist/tools/figma/rules-file.js +0 -45
  31. package/dist/tools/heal-planu-root.d.ts +0 -8
  32. package/dist/tools/heal-planu-root.js +0 -144
  33. package/dist/tools/opencode-host-adapter.d.ts +0 -3
  34. package/dist/tools/opencode-host-adapter.js +0 -33
  35. package/dist/tools/plan-team-distribution.d.ts +0 -3
  36. package/dist/tools/plan-team-distribution.js +0 -71
  37. package/dist/tools/reconcile-status-json.d.ts +0 -4
  38. package/dist/tools/reconcile-status-json.js +0 -209
  39. package/dist/tools/register-all-tools.d.ts +0 -8
  40. package/dist/tools/register-all-tools.js +0 -239
  41. package/dist/tools/tool-registry/group-analysis-monitoring.d.ts +0 -3
  42. package/dist/tools/tool-registry/group-analysis-monitoring.js +0 -942
  43. package/dist/tools/tool-registry/group-integrations.d.ts +0 -3
  44. package/dist/tools/tool-registry/group-integrations.js +0 -1046
  45. package/dist/tools/tool-registry/group-misc.d.ts +0 -3
  46. package/dist/tools/tool-registry/group-misc.js +0 -1367
  47. package/dist/tools/tool-registry/group-platform.d.ts +0 -3
  48. package/dist/tools/tool-registry/group-platform.js +0 -1681
  49. package/dist/tools/tool-registry/group-session-knowledge.d.ts +0 -3
  50. package/dist/tools/tool-registry/group-session-knowledge.js +0 -1416
  51. package/dist/tools/tool-registry/group-spec-ops.d.ts +0 -3
  52. package/dist/tools/tool-registry/group-spec-ops.js +0 -917
  53. package/dist/tools/workspace-overview.d.ts +0 -4
  54. package/dist/tools/workspace-overview.js +0 -316
  55. package/dist/transports/middleware/index.d.ts +0 -9
  56. package/dist/transports/middleware/index.js +0 -7
  57. package/dist/transports/middleware/with-sandbox.d.ts +0 -21
  58. package/dist/transports/middleware/with-sandbox.js +0 -68
  59. package/dist/types/heal.d.ts +0 -18
  60. package/dist/types/heal.js +0 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## [4.1.2] - 2026-05-21
2
+
3
+ ### Bug Fixes
4
+ - Remove unused legacy Planu files from the runtime surface and keep license tool registration strict.
5
+ - Restore missing OAuth MCP registrations for `start_oauth_flow`, `oauth_status`, and `configure_oauth`.
6
+ - Harden generated Git hooks so changed-file JSON generation avoids awk portability failures and integer parsing warnings.
7
+
8
+ ### Tests
9
+ - Add hook-generation coverage for portable post-commit changed-file handling.
10
+
11
+
12
+ ## [4.1.1] - 2026-05-21
13
+
14
+ ### Features
15
+ - Enforce dependency freshness as a blocking pre-push gate for lockfile drift, high/critical vulnerabilities, and outdated direct dependencies.
16
+ - Add the same pnpm dependency freshness guard to Planu-generated pre-push hooks.
17
+
18
+ ### Tests
19
+ - Add coverage for the dependency freshness script and generated hook contents.
20
+
21
+
1
22
  ## [4.1.0] - 2026-05-21
2
23
 
3
24
  ### Features
@@ -18,510 +18,214 @@
18
18
  }
19
19
  },
20
20
  "freeTools": [
21
- "add_comment",
22
- "analyze_performance_impact",
23
- "analyze_spec_size",
24
- "approval_status",
25
- "capture_idea",
26
- "check_config_health",
27
- "check_parallel_safety",
28
- "check_spec_lock",
29
- "check_versions",
30
- "clarify_requirements",
31
- "configure_figma",
32
- "configure_telemetry",
33
- "consult_docs",
34
- "create_rule",
35
- "create_skill",
36
- "create_spec",
37
- "delete_decision",
38
- "delete_pattern",
39
- "delete_project",
40
- "delete_spec",
41
- "detect_drift",
42
- "discard_idea",
43
- "estimate",
44
- "export_specs_markdown",
45
- "facilitate",
46
- "filesystem_hooks_status",
47
- "generate_docs",
48
- "generate_execution_plan",
49
- "generate_spec_dashboard",
50
- "generate_tests",
51
- "heal_spec_docs",
52
- "init_constitution",
53
- "init_project",
54
- "learn_pattern",
55
- "list_backlog",
56
- "list_comments",
57
- "list_lessons",
58
- "list_locks",
59
- "list_registered_projects",
60
- "list_specs",
61
- "list_templates",
62
- "lock_spec",
63
- "log_lesson",
64
- "manage_git",
65
- "manage_trash",
66
- "planu_status",
67
- "pr_status",
68
- "promote_idea",
69
- "record_actual",
70
- "register_project_path",
71
- "registry_install",
72
- "registry_search",
73
- "search_specs",
74
- "search_suggestions",
75
- "session_checkpoint",
76
- "session_handoff",
77
- "set_locale",
78
- "set_work_mode",
79
- "skill_install",
80
- "skill_search",
81
- "slack_status",
82
- "submit_feedback",
83
- "suggest_criteria",
84
- "suggest_stack",
85
- "summarize_spec",
86
- "analytics_report",
87
- "bump_spec_version",
88
- "observatory_insights",
89
- "manage_drift",
90
- "tdd_scaffold",
91
- "token_usage",
92
- "tokens",
93
- "triage_request",
94
- "unlock_spec",
95
- "unregister_project_path",
96
- "update_status",
97
- "update_status_batch",
98
- "validate",
99
- "worker_status",
100
- "security_scan",
101
- "set_context_profile",
102
- "get_context_profile",
103
- "list_context_profiles",
104
- "detect_project_dna",
105
- "preview_hooks",
106
- "configure_sentry",
107
- "sentry_status",
108
- "generate_pr_description",
109
- "configure_supabase",
110
- "supabase_status",
111
- "preview_release_notes",
112
- "discover_skills_from_registries",
113
- "start_oauth_flow",
114
- "oauth_status",
115
- "scan_crash_risks",
116
- "compliance_gate_status",
117
- "audit_schema_type_parity",
118
- "check_update_status",
119
- "enable_auto_update",
120
- "configure_tdd_policy",
121
- "generate_edge_tests",
122
- "tdd_status",
123
- "autopilot_audit",
124
- "configure_permissions",
125
- "install_plugins"
126
- ],
127
- "proTools": [
128
21
  "activate_group",
129
- "add_figma_file",
130
22
  "agent_run_history",
131
- "agent_swarm_status",
132
- "analyze_breaking_changes",
133
- "analyze_code_impact",
134
- "analyze_figma_flows",
23
+ "analyze_performance_impact",
135
24
  "analyze_spec_dependencies",
136
- "apply_domain_bundle",
137
- "apply_merge",
138
- "apply_migration_cleanup",
139
- "apply_template",
140
- "approve_checkpoint",
25
+ "approval_status",
141
26
  "approve_spec",
142
- "approve_testimonial",
143
27
  "architecture_lint",
144
- "archive_spec_context",
145
28
  "assess_merge_risk",
146
29
  "assign_role",
147
- "audit",
148
30
  "audit_claude_config",
149
31
  "audit_log_export",
32
+ "audit_schema_type_parity",
150
33
  "audit_specs_drift",
151
- "audit_stack",
152
34
  "audit_trail",
153
- "auto_fix_health",
154
- "auto_fix_validation",
155
- "auto_reconcile",
156
- "auto_remediate_compliance",
157
- "bootstrap_project_intelligence",
158
- "bootstrap_skills",
159
- "branch_spec",
160
- "bulk_import",
161
- "bulk_project_operations",
162
- "calibrate_estimates",
163
- "capture_learning",
35
+ "bump_spec_version",
164
36
  "challenge_spec",
165
- "characterize_legacy_code",
166
- "check_api_compatibility",
167
- "check_auto_promotion",
168
37
  "check_compliance",
169
- "check_figma_design_drift",
38
+ "check_config_health",
39
+ "check_parallel_safety",
170
40
  "check_readiness",
171
41
  "check_spec_accuracy",
172
- "code_change_compliance",
173
- "code_graph_status",
42
+ "check_update_status",
43
+ "check_versions",
44
+ "clarify_requirements",
174
45
  "compliance_coverage_report",
175
46
  "compliance_gap_analysis",
47
+ "compliance_gate_status",
176
48
  "compliance_score_report",
177
- "compress_spec_history",
178
49
  "config_health",
179
50
  "configure_approval_policy",
180
- "configure_auto_promotion",
181
- "configure_autopilot",
182
- "configure_checkpoint_policy",
183
- "configure_code_graph",
184
51
  "configure_compliance",
185
- "configure_crash_rules",
186
52
  "configure_deploy_target",
187
- "configure_drift_monitoring",
188
- "configure_figma_webhook",
189
- "configure_filesystem_hooks",
190
- "configure_hooks",
191
- "configure_llm_providers",
192
53
  "configure_memory",
193
54
  "configure_oauth",
194
55
  "configure_observability",
195
- "configure_release_notes",
196
56
  "configure_roles",
197
- "configure_skill_registries",
198
- "configure_slack",
199
- "configure_spec_hooks",
200
57
  "configure_squad",
58
+ "configure_tdd_policy",
59
+ "configure_telemetry",
201
60
  "configure_webhook",
202
61
  "configure_workers",
62
+ "consult_docs",
203
63
  "context_budget",
204
- "context_budget_config",
205
- "context_window_status",
206
- "contribute_context",
207
64
  "convert_to_bdd",
208
- "cookbook_apply",
209
- "cookbook_contribute",
210
- "cookbook_get",
211
- "cookbook_list",
212
- "cookbook_search",
213
65
  "coverage_gap_analyzer",
214
- "create_pr_from_spec",
215
- "create_release",
216
- "critical_path_analyzer",
66
+ "create_rule",
67
+ "create_skill",
68
+ "create_spec",
217
69
  "data_governance",
218
70
  "data_retention_policy",
219
- "debt_forecast",
220
71
  "decompose_spec",
221
72
  "define_spec_lint_rule",
222
73
  "define_ui_contract",
223
74
  "delete_spec_lint_rule",
224
- "dependency_health",
225
- "dependency_impact_report",
226
75
  "deploy_spec",
227
76
  "deploy_status",
228
- "design_schema",
229
77
  "detect_agent",
230
- "detect_contradictions",
231
- "detect_deprecations",
232
- "detect_duplication",
233
- "detect_hyrum_risks",
234
- "diff_spec_versions",
235
- "disable_spec_hook",
78
+ "detect_drift",
236
79
  "discover_docs_url",
237
80
  "discover_mcps",
238
81
  "discover_registry",
239
- "doc_compliance_report",
240
- "drift_alert_rules",
241
- "drift_summary_report",
242
- "e2e_test_status",
243
82
  "ears_lint",
244
83
  "ecosystem_status",
245
- "elicit_requirements",
246
- "enable_spec_hook",
247
- "enrich_specs_from_figma",
84
+ "enable_auto_update",
85
+ "estimate",
248
86
  "estimate_ai_cost",
249
- "estimation_accuracy_report",
250
87
  "eval_rule",
251
88
  "eval_skill",
252
- "event_contracts",
253
89
  "export_audit_trail",
254
- "export_gherkin",
255
- "export_session",
256
90
  "export_spec",
257
- "export_spec_bundle",
258
- "export_specs_csv",
259
91
  "expose_spec_as_prompt",
260
- "extract_figma_design_tokens",
261
- "extract_lessons_from_text",
262
- "figma_status",
263
- "figma_visual_diff_report",
264
- "fix_crash_risks",
265
- "flag_spec_gap",
266
- "force_status_analytics",
92
+ "facilitate",
267
93
  "gc_data_projects",
268
- "generate_adr",
269
- "generate_annotations",
270
94
  "generate_api_client",
271
95
  "generate_attestation",
272
96
  "generate_automation_guide",
273
97
  "generate_batch_script",
274
- "generate_changelog",
275
98
  "generate_checklist",
276
- "generate_ci",
277
99
  "generate_compliance_report",
278
100
  "generate_compliance_tests",
279
101
  "generate_diagram",
102
+ "generate_docs",
280
103
  "generate_docs_site",
281
- "generate_e2e_tests",
282
- "generate_figma_e2e_tests",
283
- "generate_figma_rules_file",
284
- "generate_hooks_for_stack",
104
+ "generate_edge_tests",
105
+ "generate_execution_plan",
285
106
  "generate_ide_config",
286
- "generate_infrastructure",
287
107
  "generate_orchestration_script",
288
- "generate_planu_ci",
289
108
  "generate_proposal",
290
- "generate_release_notes",
291
- "generate_rls_spec",
292
109
  "generate_rules",
293
110
  "generate_skill",
294
- "generate_spec_from_api",
295
- "generate_spec_from_commit_range",
296
- "generate_spec_from_design",
297
- "generate_spec_from_diff",
111
+ "generate_spec_dashboard",
298
112
  "generate_spec_from_issue",
299
- "generate_spec_from_pr",
300
- "generate_specs_from_figma_file",
301
- "generate_steering_file",
302
113
  "generate_sub_agent",
303
- "generate_teammate_prompt",
114
+ "generate_tests",
304
115
  "generate_validation_schema",
305
- "get_figma_context_for_spec",
306
- "git_diff_to_spec_impact",
307
- "global_rules_status",
308
116
  "graph_specs",
309
117
  "guided_tour",
310
- "heal_planu_root",
311
- "health_check_all",
312
- "hook_status",
313
- "housekeeping_sweep",
314
- "import_figma_project",
315
- "import_gherkin",
316
- "import_spec",
317
- "import_spec_bundle",
318
- "inject_component_context",
319
- "inject_criteria",
320
- "inject_quality_gates",
118
+ "heal_spec_docs",
119
+ "init_constitution",
120
+ "init_project",
321
121
  "integrate_pm",
322
122
  "issue_reviewer_token",
323
- "knowledge_gap_detector",
324
- "knowledge_summary",
123
+ "learn_pattern",
325
124
  "legal_compliance_report",
326
- "link_pr_to_spec",
327
- "list_domain_bundles",
328
- "list_figma_files",
329
- "list_figma_frames",
330
- "list_figma_responsive_frames",
331
125
  "list_groups",
332
- "list_pending_checkpoints",
333
- "list_sessions",
334
- "list_spec_bindings",
335
- "list_spec_hooks",
126
+ "list_registered_projects",
336
127
  "list_spec_lint_rules",
337
128
  "list_spec_prompts",
338
- "list_spec_prs",
339
- "list_steering_files",
340
- "list_storybook_components",
341
- "list_tech_debt",
342
- "list_testimonials",
129
+ "list_specs",
343
130
  "living_reconcile_spec",
344
- "living_spec_coverage",
345
- "living_spec_status",
346
- "living_spec_watch",
347
- "llm_provider_status",
348
- "log_decision",
349
131
  "manage_context",
350
- "manage_global_rules",
351
- "manage_hooks",
132
+ "manage_git",
352
133
  "manage_plugins",
353
- "manage_scope",
354
- "mark_as_spec_source",
355
134
  "memory_status",
356
- "merge_hooks",
357
- "merge_preview",
358
- "merge_spec_branch",
359
- "migrate_tech",
360
135
  "multi_agent_review",
361
136
  "onboarding_checklist",
362
137
  "onboarding_progress",
363
- "optimize_context",
364
- "opencode_host_adapter",
365
- "optimize_spec_scheduling",
366
138
  "orchestrate",
367
- "orchestrate_agents",
368
- "orchestrate_runtime",
139
+ "oauth_status",
369
140
  "outbound_webhook_status",
370
141
  "package_handoff",
371
142
  "paradigm_report",
372
- "parallel_efficiency_score",
373
- "plan_mode",
374
- "plan_team_distribution",
375
- "plan_upgrade",
376
- "planu_session_checkpoint",
143
+ "planu_status",
377
144
  "publish_registry",
378
145
  "quick_start",
379
- "reality_check",
380
146
  "recommend_model",
381
147
  "reconcile_hooks",
382
- "reconcile_interactive_question_hooks",
383
148
  "reconcile_rules",
384
149
  "reconcile_skills",
385
150
  "reconcile_spec",
386
151
  "reconcile_universal_rules",
387
152
  "red_team",
388
- "refactor_with_safety_net",
389
- "register_api_surface",
153
+ "register_project_path",
154
+ "registry_install",
390
155
  "registry_login",
391
156
  "registry_logout",
392
157
  "registry_publish",
158
+ "registry_search",
393
159
  "registry_whoami",
394
- "reject_checkpoint",
395
- "remove_figma_file",
396
- "remove_figma_webhook",
397
- "remove_slack",
398
160
  "remove_webhook",
399
161
  "render_spec_for_provider",
400
162
  "repair_frontmatter_drift",
401
- "reply_comment",
402
163
  "request_changes",
403
- "request_context",
404
- "require_checkpoint",
405
- "resolve_comment",
406
- "resolve_drift_violations",
407
- "resolve_feedback",
408
- "resolve_sync_conflict",
409
- "resolve_tech_debt",
410
- "restore_archived_context",
411
- "restore_session",
412
164
  "reverse_engineer",
413
- "reverse_engineer_tests",
414
- "review_pr",
415
165
  "rewrite_criteria_ears",
416
- "rollback_release",
417
166
  "run_mutation_hints",
418
167
  "run_spec_lint",
419
- "run_validation_loop",
420
168
  "scaffold_plugin",
421
169
  "scan_orphan_spec_refs",
422
170
  "scan_project",
423
- "seams_detector",
424
171
  "search_all_projects",
425
- "security_check",
426
172
  "security_report",
427
- "security_scan_pro",
428
- "semantic_decision_search",
429
- "semantic_search",
430
- "sentry_error_to_spec",
431
- "sentry_errors_report",
432
- "similar_problems_finder",
433
- "simplicity_metric",
434
- "simulate_parallel_execution",
435
- "slack_notify",
173
+ "set_locale",
174
+ "set_work_mode",
175
+ "skill_install",
176
+ "skill_search",
436
177
  "solid_check",
437
- "spec_obesity_healer",
438
- "smart_merge_conflict_resolver",
439
- "snapshot_spec_hashes",
440
178
  "spec_coverage",
441
- "spec_diff",
442
- "spec_effectiveness_score",
443
- "spec_health_check",
444
- "spec_history",
445
- "spec_quality_score",
446
- "spec_usage_report",
447
- "spec_version_history",
448
- "split_spec",
179
+ "spec_obesity_healer",
449
180
  "squad_status",
450
- "start_hooks",
181
+ "ssr_back_migration",
182
+ "start_oauth_flow",
451
183
  "start_onboarding",
452
- "stop_hooks",
453
- "suggest_deletions",
454
184
  "suggest_mcp_server",
455
185
  "suggest_mcps",
456
- "suggest_spec_update",
186
+ "suggest_stack",
457
187
  "suggest_token_optimizer",
458
188
  "suggest_tooling",
459
- "sustainability_score",
189
+ "summarize_spec",
460
190
  "sync_ai_configs",
461
- "sync_code_to_spec",
462
- "sync_figma_changes",
463
- "sync_figma_code_connect",
464
- "sync_figma_tokens_to_code",
465
- "sync_spec_from_code",
466
191
  "sync_spec_state",
467
- "sync_spec_to_code",
468
- "sync_storybook_components",
469
- "sync_supabase_schema",
470
- "team_analytics",
471
- "tech_debt_budget",
472
- "tech_debt_report",
192
+ "tdd_scaffold",
193
+ "tdd_status",
473
194
  "telemetry_health",
474
- "test_spec_hook",
475
- "three_way_merge",
476
- "token_intelligence",
477
195
  "token_optimizer_status",
478
- "token_savings_report",
479
- "track_tech_debt",
480
- "type_safety_gate",
481
196
  "transform_code",
482
- "triage_feedback",
483
- "update_project_dna",
197
+ "triage_request",
198
+ "type_safety_gate",
199
+ "unregister_project_path",
484
200
  "update_registry",
485
- "validate_annotations",
201
+ "update_status",
202
+ "update_status_batch",
203
+ "validate",
486
204
  "validate_api_contract",
487
205
  "validate_browser",
488
206
  "validate_criteria_quality",
489
207
  "validate_docs_registry",
490
- "validate_team_results",
491
- "validate_token_consistency",
492
208
  "validate_workflow",
493
- "velocity_report",
494
- "velocity_trend",
495
- "verify_spec_compliance",
496
- "version_spec",
497
209
  "verify_integrations",
498
- "visual_spec_diff",
499
- "watch_spec_drift",
500
- "workload_distribution",
501
- "workspace_alerts",
502
- "workspace_health",
503
- "workspace_overview",
504
- "workspace_report",
505
- "workspace_search",
506
- "project_overview",
507
- "reconcile_status_json",
508
- "ssr_back_migration"
210
+ "verify_spec_compliance",
211
+ "worker_status"
509
212
  ],
213
+ "proTools": ["audit", "design_schema", "generate_adr", "security_check"],
510
214
  "alwaysAllowed": [
511
215
  "activate_license",
216
+ "configure_compliance_gate",
512
217
  "deactivate_license",
218
+ "fix_schema_type_parity",
513
219
  "license_status",
514
- "usage_stats",
515
- "usage_report",
516
- "tool_usage_report",
220
+ "pin_version",
517
221
  "start_dashboard",
518
- "stop_dashboard",
519
222
  "start_webhook",
223
+ "stop_dashboard",
520
224
  "stop_webhook",
521
- "webhook_status",
522
- "configure_compliance_gate",
523
- "fix_schema_type_parity",
524
- "pin_version"
225
+ "tool_usage_report",
226
+ "usage_report",
227
+ "usage_stats",
228
+ "webhook_status"
525
229
  ],
526
230
  "variantMapping": {
527
231
  "Planu Pro": "pro",
@@ -66,6 +66,37 @@ if command -v planu >/dev/null 2>&1; then
66
66
  planu detect-drift --project-id "${projectId}" --mode quick 2>/dev/null || true
67
67
  fi
68
68
 
69
+ if command -v pnpm >/dev/null 2>&1 && [ -f "package.json" ] && [ -f "pnpm-lock.yaml" ]; then
70
+ echo "[Planu] Checking dependency freshness..."
71
+ pnpm install --frozen-lockfile --ignore-scripts >/dev/null || {
72
+ echo "ERROR: package.json and pnpm-lock.yaml are not synchronized."
73
+ echo "Run: pnpm install --lockfile-only --ignore-scripts"
74
+ exit 1
75
+ }
76
+ pnpm audit --audit-level=high || {
77
+ echo "ERROR: High or critical dependency vulnerabilities found."
78
+ echo "Run: pnpm audit and update the affected packages before pushing."
79
+ exit 1
80
+ }
81
+ OUTDATED_JSON="$(mktemp)"
82
+ OUTDATED_ERR="$(mktemp)"
83
+ set +e
84
+ pnpm outdated --format=json >"\${OUTDATED_JSON}" 2>"\${OUTDATED_ERR}"
85
+ OUTDATED_STATUS=$?
86
+ set -e
87
+ if [ "\${OUTDATED_STATUS}" -gt 1 ]; then
88
+ echo "ERROR: Failed to query dependency freshness from the registry."
89
+ cat "\${OUTDATED_ERR}"
90
+ rm -f "\${OUTDATED_JSON}" "\${OUTDATED_ERR}"
91
+ exit 1
92
+ fi
93
+ node -e "const fs=require('fs');const raw=fs.readFileSync(process.argv[1],'utf8').trim();const data=raw?JSON.parse(raw):{};const count=Array.isArray(data)?data.length:Object.keys(data).length;if(count>0){console.error('ERROR: Outdated dependencies found. Run: bash scripts/check-updates.sh --apply, pnpm update, or update intentionally before pushing.');process.exit(1)}" "\${OUTDATED_JSON}" || {
94
+ rm -f "\${OUTDATED_JSON}" "\${OUTDATED_ERR}"
95
+ exit 1
96
+ }
97
+ rm -f "\${OUTDATED_JSON}" "\${OUTDATED_ERR}"
98
+ fi
99
+
69
100
  echo "[Planu] Pre-push checks complete."
70
101
  `;
71
102
  }