@planu/cli 4.1.1 → 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 (59) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/config/license-plans.json +65 -361
  3. package/dist/tools/git/hook-ops.js +23 -9
  4. package/dist/tools/tool-registry/group-infra.js +22 -0
  5. package/package.json +7 -7
  6. package/dist/engine/escalator/index.d.ts +0 -5
  7. package/dist/engine/escalator/index.js +0 -5
  8. package/dist/engine/freeze/retro-audit.d.ts +0 -6
  9. package/dist/engine/freeze/retro-audit.js +0 -24
  10. package/dist/engine/heal/backup.d.ts +0 -9
  11. package/dist/engine/heal/backup.js +0 -21
  12. package/dist/engine/idioma-validator/index.d.ts +0 -17
  13. package/dist/engine/idioma-validator/index.js +0 -89
  14. package/dist/engine/saga/index.d.ts +0 -4
  15. package/dist/engine/saga/index.js +0 -4
  16. package/dist/engine/spec-state-machine/index.d.ts +0 -3
  17. package/dist/engine/spec-state-machine/index.js +0 -2
  18. package/dist/engine/spec-summary-html/dashboard-renderer.d.ts +0 -6
  19. package/dist/engine/spec-summary-html/dashboard-renderer.js +0 -333
  20. package/dist/engine/triagier/index.d.ts +0 -5
  21. package/dist/engine/triagier/index.js +0 -5
  22. package/dist/engine/universal-rules/index.d.ts +0 -5
  23. package/dist/engine/universal-rules/index.js +0 -6
  24. package/dist/testing/cassette/index.d.ts +0 -23
  25. package/dist/testing/cassette/index.js +0 -26
  26. package/dist/tools/domain-bundle-handler.d.ts +0 -37
  27. package/dist/tools/domain-bundle-handler.js +0 -71
  28. package/dist/tools/figma/rules-file.d.ts +0 -5
  29. package/dist/tools/figma/rules-file.js +0 -45
  30. package/dist/tools/heal-planu-root.d.ts +0 -8
  31. package/dist/tools/heal-planu-root.js +0 -144
  32. package/dist/tools/opencode-host-adapter.d.ts +0 -3
  33. package/dist/tools/opencode-host-adapter.js +0 -33
  34. package/dist/tools/plan-team-distribution.d.ts +0 -3
  35. package/dist/tools/plan-team-distribution.js +0 -71
  36. package/dist/tools/reconcile-status-json.d.ts +0 -4
  37. package/dist/tools/reconcile-status-json.js +0 -209
  38. package/dist/tools/register-all-tools.d.ts +0 -8
  39. package/dist/tools/register-all-tools.js +0 -239
  40. package/dist/tools/tool-registry/group-analysis-monitoring.d.ts +0 -3
  41. package/dist/tools/tool-registry/group-analysis-monitoring.js +0 -942
  42. package/dist/tools/tool-registry/group-integrations.d.ts +0 -3
  43. package/dist/tools/tool-registry/group-integrations.js +0 -1046
  44. package/dist/tools/tool-registry/group-misc.d.ts +0 -3
  45. package/dist/tools/tool-registry/group-misc.js +0 -1367
  46. package/dist/tools/tool-registry/group-platform.d.ts +0 -3
  47. package/dist/tools/tool-registry/group-platform.js +0 -1681
  48. package/dist/tools/tool-registry/group-session-knowledge.d.ts +0 -3
  49. package/dist/tools/tool-registry/group-session-knowledge.js +0 -1416
  50. package/dist/tools/tool-registry/group-spec-ops.d.ts +0 -3
  51. package/dist/tools/tool-registry/group-spec-ops.js +0 -917
  52. package/dist/tools/workspace-overview.d.ts +0 -4
  53. package/dist/tools/workspace-overview.js +0 -316
  54. package/dist/transports/middleware/index.d.ts +0 -9
  55. package/dist/transports/middleware/index.js +0 -7
  56. package/dist/transports/middleware/with-sandbox.d.ts +0 -21
  57. package/dist/transports/middleware/with-sandbox.js +0 -68
  58. package/dist/types/heal.d.ts +0 -18
  59. package/dist/types/heal.js +0 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
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
+
1
12
  ## [4.1.1] - 2026-05-21
2
13
 
3
14
  ### 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",
@@ -219,19 +219,33 @@ function buildPostCommitDriftScript() {
219
219
  '[ -z "$CHANGED" ] && exit 0',
220
220
  '',
221
221
  '# Build JSON array of file paths',
222
- 'FILES_JSON=$(echo "$CHANGED" | awk \'',
223
- ' BEGIN { printf "[" }',
224
- ' NR > 1 { printf "," }',
225
- // eslint-disable-next-line no-useless-escape
226
- ' { gsub(/"/, "\\\\\""); printf "\\"%s\\"", $0 }',
227
- ' END { printf "]" }',
228
- "')",
222
+ 'FILES_JSON="["',
223
+ 'FIRST=1',
224
+ 'while IFS= read -r FILE_PATH; do',
225
+ ' ESCAPED=$(printf \'%s\' "$FILE_PATH" | sed \'s/\\\\/\\\\\\\\/g; s/"/\\\\"/g\')',
226
+ ' if [ "$FIRST" -eq 0 ]; then',
227
+ ' FILES_JSON="$FILES_JSON,"',
228
+ ' fi',
229
+ ' FILES_JSON="$FILES_JSON\\"$ESCAPED\\""',
230
+ ' FIRST=0',
231
+ 'done <<PLANU_CHANGED_FILES',
232
+ '$CHANGED',
233
+ 'PLANU_CHANGED_FILES',
234
+ 'FILES_JSON="$FILES_JSON]"',
229
235
  '',
230
236
  "TS=$(date -u '+%Y-%m-%dT%H:%M:%SZ' 2>/dev/null || date -u)",
231
237
  '',
232
238
  '# Check for drift-worthy files (dep manifests or uncommon extensions)',
233
- 'HAS_DEP=$(echo "$CHANGED" | grep -cE \'(^|/)(package\\.json|go\\.mod|requirements\\.txt|Cargo\\.toml|pom\\.xml|build\\.gradle|pyproject\\.toml|Gemfile|composer\\.json)$\' 2>/dev/null || echo 0)',
234
- "HAS_EXT=$(echo \"$CHANGED\" | grep -oE '\\.[a-zA-Z]+$' | grep -cvE '\\.(ts|tsx|js|jsx|mjs|cjs|json|md|mdx|sh|bash|txt|yaml|yml|toml|lock|sum|mod|py|go|rs|java|kt|rb|php|cs|dart|swift|html|css|scss|vue|svelte|env|sql|xml|csv)$' 2>/dev/null || echo 0)",
239
+ 'if echo "$CHANGED" | grep -qE \'(^|/)(package\\.json|go\\.mod|requirements\\.txt|Cargo\\.toml|pom\\.xml|build\\.gradle|pyproject\\.toml|Gemfile|composer\\.json)$\' 2>/dev/null; then',
240
+ ' HAS_DEP=1',
241
+ 'else',
242
+ ' HAS_DEP=0',
243
+ 'fi',
244
+ "if echo \"$CHANGED\" | grep -oE '\\.[a-zA-Z]+$' | grep -qvE '\\.(ts|tsx|js|jsx|mjs|cjs|json|md|mdx|sh|bash|txt|yaml|yml|toml|lock|sum|mod|py|go|rs|java|kt|rb|php|cs|dart|swift|html|css|scss|vue|svelte|env|sql|xml|csv)$' 2>/dev/null; then",
245
+ ' HAS_EXT=1',
246
+ 'else',
247
+ ' HAS_EXT=0',
248
+ 'fi',
235
249
  '',
236
250
  '# Only write if there is something worth processing',
237
251
  'if [ "$HAS_DEP" -gt 0 ] || [ "$HAS_EXT" -gt 0 ]; then',
@@ -14,6 +14,9 @@ import { safe, safeLicensed, safeTracked } from '../safe-handler.js';
14
14
  import { handleActivateLicense, handleDeactivateLicense } from '../activate-license.js';
15
15
  import { handleLicenseStatus } from '../license-status.js';
16
16
  import { LicenseStatusOutputSchema } from '../schemas/index.js';
17
+ // ── OAuth tools (register-oauth-tools.ts / register-configure-oauth-tool.ts) ─
18
+ import { handleStartOAuthFlow, handleOAuthStatus, StartOAuthFlowInputSchema, OAuthStatusInputSchema, } from '../oauth-handler.js';
19
+ import { handleConfigureOAuth } from '../configure-oauth-handler.js';
17
20
  // ── Usage tools (register-usage-tools.ts) ────────────────────────────────────
18
21
  import { handleUsageStats } from '../usage-stats.js';
19
22
  import { handleUsageReport } from '../usage-report.js';
@@ -126,6 +129,25 @@ export function registerInfraGroupTools(server) {
126
129
  outputSchema: LicenseStatusOutputSchema,
127
130
  annotations: { title: 'License Status', readOnlyHint: true },
128
131
  }, safe(async (args) => handleLicenseStatus(args)));
132
+ // ── OAuth tools ────────────────────────────────────────────────────────────
133
+ server.registerTool('start_oauth_flow', {
134
+ description: 'Start guided OAuth setup for supported integrations such as Figma, GitHub, Sentry, or Supabase.',
135
+ inputSchema: StartOAuthFlowInputSchema,
136
+ annotations: { title: 'Start OAuth Flow', readOnlyHint: false },
137
+ }, safeLicensed('start_oauth_flow', async (args) => handleStartOAuthFlow(args)));
138
+ server.registerTool('oauth_status', {
139
+ description: 'Show which OAuth-backed integrations are connected for this project.',
140
+ inputSchema: OAuthStatusInputSchema,
141
+ annotations: { title: 'OAuth Status', readOnlyHint: true },
142
+ }, safeLicensed('oauth_status', async (args) => handleOAuthStatus(args)));
143
+ server.registerTool('configure_oauth', {
144
+ description: 'Inspect Planu MCP OAuth/API-key auth status or test a bearer token without exposing secrets.',
145
+ inputSchema: {
146
+ action: z.enum(['status', 'test']).describe('Action: status | test'),
147
+ token: z.string().max(4096).optional().describe('Bearer token to test when action=test'),
148
+ },
149
+ annotations: { title: 'Configure OAuth', readOnlyHint: true },
150
+ }, safe(async (args) => handleConfigureOAuth(args)));
129
151
  // ── Usage tools ────────────────────────────────────────────────────────────
130
152
  server.registerTool('usage_stats', {
131
153
  description: 'View your Planu usage statistics — tool calls, top tools, remaining daily calls. ' +