@burdenoff/microfe-vibecontrols 2026.521.3 → 2026.522.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 (105) hide show
  1. package/dist/VibeControlsRoot.js +86 -78
  2. package/dist/VibeControlsRoot.js.map +1 -1
  3. package/dist/VibeControlsRoutes.js +168 -125
  4. package/dist/VibeControlsRoutes.js.map +1 -1
  5. package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js +174 -0
  6. package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js.map +1 -0
  7. package/dist/components/agent-manager/AgentManagerChatPane.js +149 -94
  8. package/dist/components/agent-manager/AgentManagerChatPane.js.map +1 -1
  9. package/dist/components/agent-manager/AgentManagerMessageItem.js +52 -41
  10. package/dist/components/agent-manager/AgentManagerMessageItem.js.map +1 -1
  11. package/dist/components/agent-manager/AgentManagerMessageList.js +22 -15
  12. package/dist/components/agent-manager/AgentManagerMessageList.js.map +1 -1
  13. package/dist/components/agents/OpenInEditorMenu.js +241 -0
  14. package/dist/components/agents/OpenInEditorMenu.js.map +1 -0
  15. package/dist/components/agents/VibeOpenInEditorMenu.js +20 -0
  16. package/dist/components/agents/VibeOpenInEditorMenu.js.map +1 -0
  17. package/dist/components/agents/idePresets.js +148 -0
  18. package/dist/components/agents/idePresets.js.map +1 -0
  19. package/dist/components/agents/index.js +3 -0
  20. package/dist/components/ai/AIPlanPanel.js +332 -0
  21. package/dist/components/ai/AIPlanPanel.js.map +1 -0
  22. package/dist/components/analytics/index.js +2 -2
  23. package/dist/components/assistant/AssistantMessageItem.js +55 -47
  24. package/dist/components/assistant/AssistantMessageItem.js.map +1 -1
  25. package/dist/components/audit/AuditExportButton.js +87 -41
  26. package/dist/components/audit/AuditExportButton.js.map +1 -1
  27. package/dist/components/gitops/CIDurationChart.js +11 -11
  28. package/dist/components/security/SecurityEmptyState.js +33 -0
  29. package/dist/components/security/SecurityEmptyState.js.map +1 -0
  30. package/dist/components/security/SecurityEvidenceList.js +42 -0
  31. package/dist/components/security/SecurityEvidenceList.js.map +1 -0
  32. package/dist/components/security/SecurityFindingsTable.js +201 -0
  33. package/dist/components/security/SecurityFindingsTable.js.map +1 -0
  34. package/dist/components/security/SecurityHeaderStrip.js +67 -0
  35. package/dist/components/security/SecurityHeaderStrip.js.map +1 -0
  36. package/dist/components/security/SecurityLifecycleStepper.js +66 -0
  37. package/dist/components/security/SecurityLifecycleStepper.js.map +1 -0
  38. package/dist/components/security/SecurityProviderDrawer.js +112 -0
  39. package/dist/components/security/SecurityProviderDrawer.js.map +1 -0
  40. package/dist/components/security/SecurityTabPanel.js +105 -0
  41. package/dist/components/security/SecurityTabPanel.js.map +1 -0
  42. package/dist/components/security/gql.js +128 -0
  43. package/dist/components/security/gql.js.map +1 -0
  44. package/dist/components/security/index.js +8 -0
  45. package/dist/components/security/types.js +80 -0
  46. package/dist/components/security/types.js.map +1 -0
  47. package/dist/components/settings/IdePreferencesSection.js +66 -0
  48. package/dist/components/settings/IdePreferencesSection.js.map +1 -0
  49. package/dist/components/shared/PageSkeleton.js +88 -0
  50. package/dist/components/shared/PageSkeleton.js.map +1 -0
  51. package/dist/constants/pluginCatalog.js +20 -8
  52. package/dist/constants/pluginCatalog.js.map +1 -1
  53. package/dist/generated/wspace-operations.js +1350 -1262
  54. package/dist/generated/wspace-operations.js.map +1 -1
  55. package/dist/generated/wspace-types.js.map +1 -1
  56. package/dist/hooks/useToggleAgentBookmark.js +32 -0
  57. package/dist/hooks/useToggleAgentBookmark.js.map +1 -0
  58. package/dist/index.js +10 -10
  59. package/dist/pages/AgentDetailsPage.js +25 -25
  60. package/dist/pages/AgentDetailsPage.js.map +1 -1
  61. package/dist/pages/AgentsPage.js +326 -327
  62. package/dist/pages/AgentsPage.js.map +1 -1
  63. package/dist/pages/AnalyticsPage.js +425 -420
  64. package/dist/pages/AnalyticsPage.js.map +1 -1
  65. package/dist/pages/CatalogDetailPage.js +258 -249
  66. package/dist/pages/CatalogDetailPage.js.map +1 -1
  67. package/dist/pages/CatalogPage.js +22 -22
  68. package/dist/pages/CatalogPage.js.map +1 -1
  69. package/dist/pages/ComponentDetailPage.js +30 -30
  70. package/dist/pages/ComponentDetailPage.js.map +1 -1
  71. package/dist/pages/ComponentsPage.js +23 -23
  72. package/dist/pages/ComponentsPage.js.map +1 -1
  73. package/dist/pages/LogsPage.js +107 -0
  74. package/dist/pages/LogsPage.js.map +1 -0
  75. package/dist/pages/NoteDetailsPage.js +12 -12
  76. package/dist/pages/NoteDetailsPage.js.map +1 -1
  77. package/dist/pages/SessionDetailsPage.js +12 -12
  78. package/dist/pages/SessionDetailsPage.js.map +1 -1
  79. package/dist/pages/SessionsPage.js +158 -136
  80. package/dist/pages/SessionsPage.js.map +1 -1
  81. package/dist/pages/SettingsPage.js +60 -52
  82. package/dist/pages/SettingsPage.js.map +1 -1
  83. package/dist/pages/TargetDetailsPage.js +18 -18
  84. package/dist/pages/TargetDetailsPage.js.map +1 -1
  85. package/dist/pages/TargetsPage.js +328 -331
  86. package/dist/pages/TargetsPage.js.map +1 -1
  87. package/dist/pages/TemplateDetailPage.js +17 -17
  88. package/dist/pages/TemplateDetailPage.js.map +1 -1
  89. package/dist/pages/TemplatesPage.js +17 -17
  90. package/dist/pages/TemplatesPage.js.map +1 -1
  91. package/dist/pages/VibeDetailsPage.js +552 -535
  92. package/dist/pages/VibeDetailsPage.js.map +1 -1
  93. package/dist/pages/VibesPage.js +321 -296
  94. package/dist/pages/VibesPage.js.map +1 -1
  95. package/dist/pages/ai/AIBookmarksPage.js +184 -0
  96. package/dist/pages/ai/AIBookmarksPage.js.map +1 -0
  97. package/dist/pages/ai/AIPage.js +138 -109
  98. package/dist/pages/ai/AIPage.js.map +1 -1
  99. package/dist/services/planApi.js +18 -0
  100. package/dist/services/planApi.js.map +1 -0
  101. package/dist/store/vibeControlsStore.js +20 -2
  102. package/dist/store/vibeControlsStore.js.map +1 -1
  103. package/dist/translations/en.js +30 -1
  104. package/dist/translations/en.js.map +1 -1
  105. package/package.json +4 -4
@@ -0,0 +1,128 @@
1
+ import { gql as e } from "@apollo/client";
2
+ //#region src/components/security/gql.ts
3
+ var t = e`
4
+ query SecurityStatus($vibeId: ID!) {
5
+ securityStatus(vibeId: $vibeId) {
6
+ vibeId
7
+ policyLevel
8
+ lastScanAt
9
+ perStage
10
+ totals {
11
+ critical
12
+ high
13
+ medium
14
+ low
15
+ info
16
+ }
17
+ }
18
+ }
19
+ `, n = e`
20
+ query AllSecurityScans($filter: SecurityScanFilterInput, $pagination: SecurityPaginationInput) {
21
+ allSecurityScans(filter: $filter, pagination: $pagination) {
22
+ items {
23
+ id
24
+ vibeId
25
+ stage
26
+ status
27
+ conclusion
28
+ providerName
29
+ startedAt
30
+ finishedAt
31
+ durationMs
32
+ summary {
33
+ critical
34
+ high
35
+ medium
36
+ low
37
+ info
38
+ }
39
+ evidence {
40
+ id
41
+ type
42
+ sha256
43
+ sizeBytes
44
+ downloadUrl
45
+ }
46
+ }
47
+ total
48
+ hasMore
49
+ }
50
+ }
51
+ `, r = e`
52
+ query SecurityFindings(
53
+ $filter: SecurityFindingFilterInput
54
+ $pagination: SecurityPaginationInput
55
+ ) {
56
+ securityFindings(filter: $filter, pagination: $pagination) {
57
+ items {
58
+ id
59
+ fingerprint
60
+ ruleId
61
+ title
62
+ severity
63
+ category
64
+ file
65
+ line
66
+ packageName
67
+ packageVersion
68
+ fixedVersion
69
+ status
70
+ remediation
71
+ redactedSample
72
+ firstSeenAt
73
+ lastSeenAt
74
+ }
75
+ total
76
+ hasMore
77
+ }
78
+ }
79
+ `, i = e`
80
+ query SecurityProviders {
81
+ securityProviders {
82
+ id
83
+ pluginName
84
+ providerName
85
+ stage
86
+ toolVersion
87
+ isDefault
88
+ enabled
89
+ }
90
+ }
91
+ `, a = e`
92
+ mutation RunSecurityScan($vibeId: ID!, $stage: SecurityStage!) {
93
+ runSecurityScan(vibeId: $vibeId, stage: $stage) {
94
+ id
95
+ status
96
+ stage
97
+ }
98
+ }
99
+ `, o = e`
100
+ mutation SetSecurityProvider($input: SetSecurityProviderInput!) {
101
+ setSecurityProvider(input: $input) {
102
+ id
103
+ stage
104
+ providerName
105
+ isDefault
106
+ }
107
+ }
108
+ `, s = e`
109
+ mutation UpdateSecurityFindingStatus($id: ID!, $status: SecurityFindingStatus!) {
110
+ updateSecurityFindingStatus(id: $id, status: $status) {
111
+ id
112
+ status
113
+ }
114
+ }
115
+ `, c = e`
116
+ mutation CreateSecurityException($input: CreateSecurityExceptionInput!) {
117
+ createSecurityException(input: $input) {
118
+ id
119
+ findingId
120
+ expiresAt
121
+ status
122
+ }
123
+ }
124
+ `;
125
+ //#endregion
126
+ export { n as ALL_SECURITY_SCANS_QUERY, c as CREATE_SECURITY_EXCEPTION_MUTATION, a as RUN_SECURITY_SCAN_MUTATION, r as SECURITY_FINDINGS_QUERY, i as SECURITY_PROVIDERS_QUERY, t as SECURITY_STATUS_QUERY, o as SET_SECURITY_PROVIDER_MUTATION, s as UPDATE_FINDING_STATUS_MUTATION };
127
+
128
+ //# sourceMappingURL=gql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gql.js","names":[],"sources":["../../../src/components/security/gql.ts"],"sourcesContent":["/**\n * Inline Apollo `gql` documents for the security lifecycle.\n *\n * These are duplicated in src/operations/wspace/vibecontrols/{queries,mutations}/security.graphql\n * for future codegen. Once the svc publishes the security schema to Hive\n * Cloud and the microfe regenerates types, switch this file's exports to\n * the codegen-emitted hooks from `src/generated/*` and remove the gql\n * tags here.\n */\nimport { gql } from '@apollo/client';\n\nexport const SECURITY_STATUS_QUERY = gql`\n query SecurityStatus($vibeId: ID!) {\n securityStatus(vibeId: $vibeId) {\n vibeId\n policyLevel\n lastScanAt\n perStage\n totals {\n critical\n high\n medium\n low\n info\n }\n }\n }\n`;\n\nexport const ALL_SECURITY_SCANS_QUERY = gql`\n query AllSecurityScans($filter: SecurityScanFilterInput, $pagination: SecurityPaginationInput) {\n allSecurityScans(filter: $filter, pagination: $pagination) {\n items {\n id\n vibeId\n stage\n status\n conclusion\n providerName\n startedAt\n finishedAt\n durationMs\n summary {\n critical\n high\n medium\n low\n info\n }\n evidence {\n id\n type\n sha256\n sizeBytes\n downloadUrl\n }\n }\n total\n hasMore\n }\n }\n`;\n\nexport const SECURITY_FINDINGS_QUERY = gql`\n query SecurityFindings(\n $filter: SecurityFindingFilterInput\n $pagination: SecurityPaginationInput\n ) {\n securityFindings(filter: $filter, pagination: $pagination) {\n items {\n id\n fingerprint\n ruleId\n title\n severity\n category\n file\n line\n packageName\n packageVersion\n fixedVersion\n status\n remediation\n redactedSample\n firstSeenAt\n lastSeenAt\n }\n total\n hasMore\n }\n }\n`;\n\nexport const SECURITY_PROVIDERS_QUERY = gql`\n query SecurityProviders {\n securityProviders {\n id\n pluginName\n providerName\n stage\n toolVersion\n isDefault\n enabled\n }\n }\n`;\n\nexport const RUN_SECURITY_SCAN_MUTATION = gql`\n mutation RunSecurityScan($vibeId: ID!, $stage: SecurityStage!) {\n runSecurityScan(vibeId: $vibeId, stage: $stage) {\n id\n status\n stage\n }\n }\n`;\n\nexport const SET_SECURITY_PROVIDER_MUTATION = gql`\n mutation SetSecurityProvider($input: SetSecurityProviderInput!) {\n setSecurityProvider(input: $input) {\n id\n stage\n providerName\n isDefault\n }\n }\n`;\n\nexport const UPDATE_FINDING_STATUS_MUTATION = gql`\n mutation UpdateSecurityFindingStatus($id: ID!, $status: SecurityFindingStatus!) {\n updateSecurityFindingStatus(id: $id, status: $status) {\n id\n status\n }\n }\n`;\n\nexport const CREATE_SECURITY_EXCEPTION_MUTATION = gql`\n mutation CreateSecurityException($input: CreateSecurityExceptionInput!) {\n createSecurityException(input: $input) {\n id\n findingId\n expiresAt\n status\n }\n }\n`;\n"],"mappings":";;AAWA,IAAa,IAAwB,CAAG;;;;;;;;;;;;;;;;GAkB3B,IAA2B,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkC9B,IAA0B,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8B7B,IAA2B,CAAG;;;;;;;;;;;;GAc9B,IAA6B,CAAG;;;;;;;;GAUhC,IAAiC,CAAG;;;;;;;;;GAWpC,IAAiC,CAAG;;;;;;;GASpC,IAAqC,CAAG"}
@@ -0,0 +1,8 @@
1
+ import "./SecurityEmptyState.js";
2
+ import "./SecurityEvidenceList.js";
3
+ import "./SecurityFindingsTable.js";
4
+ import "./SecurityHeaderStrip.js";
5
+ import "./types.js";
6
+ import "./SecurityLifecycleStepper.js";
7
+ import "./SecurityProviderDrawer.js";
8
+ import "./SecurityTabPanel.js";
@@ -0,0 +1,80 @@
1
+ //#region src/components/security/types.ts
2
+ var e = [
3
+ {
4
+ id: "REPO_ONBOARD",
5
+ slug: "repo-onboard",
6
+ label: "01 Onboard"
7
+ },
8
+ {
9
+ id: "DEVELOPER_LOCAL",
10
+ slug: "developer-local",
11
+ label: "02 Local"
12
+ },
13
+ {
14
+ id: "PULL_REQUEST_FAST",
15
+ slug: "pull-request-fast",
16
+ label: "03 PR fast"
17
+ },
18
+ {
19
+ id: "PULL_REQUEST_DEEP",
20
+ slug: "pull-request-deep",
21
+ label: "04 PR deep"
22
+ },
23
+ {
24
+ id: "MAIN_MERGE",
25
+ slug: "main-merge",
26
+ label: "05 Merge"
27
+ },
28
+ {
29
+ id: "BUILD",
30
+ slug: "build",
31
+ label: "06 Build"
32
+ },
33
+ {
34
+ id: "PACKAGE_PUBLISH",
35
+ slug: "package-publish",
36
+ label: "07 Publish"
37
+ },
38
+ {
39
+ id: "DEPLOY_PREVIEW",
40
+ slug: "deploy-preview",
41
+ label: "08 Preview"
42
+ },
43
+ {
44
+ id: "DEPLOY_ALPHA",
45
+ slug: "deploy-alpha",
46
+ label: "09 Alpha"
47
+ },
48
+ {
49
+ id: "PROMOTE_PROD",
50
+ slug: "promote-prod",
51
+ label: "10 Prod gate"
52
+ },
53
+ {
54
+ id: "RUNTIME_CONTINUOUS",
55
+ slug: "runtime-continuous",
56
+ label: "11 Runtime"
57
+ },
58
+ {
59
+ id: "SCHEDULED_RESCAN",
60
+ slug: "scheduled-rescan",
61
+ label: "12 Rescan"
62
+ },
63
+ {
64
+ id: "INCIDENT_RESPONSE",
65
+ slug: "incident-response",
66
+ label: "13 Incident"
67
+ },
68
+ {
69
+ id: "ARCHIVE_OFFBOARD",
70
+ slug: "archive-offboard",
71
+ label: "14 Archive"
72
+ }
73
+ ], t = new Map(e.map((e) => [e.id, e]));
74
+ function n(e) {
75
+ return e?.lastRun ? e.lastRun.status === "RUNNING" || e.lastRun.status === "QUEUED" ? "in-progress" : e.conclusion === "PASS" ? "passed" : e.conclusion === "WARN" ? "warn" : e.conclusion === "FAIL" ? "failed" : "skipped" : "never-run";
76
+ }
77
+ //#endregion
78
+ export { e as ALL_STAGES, t as STAGE_BY_ID, n as deriveStageStatus };
79
+
80
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/components/security/types.ts"],"sourcesContent":["/**\n * Security-tab local types. These mirror the wspace-vibecontrols-svc\n * GraphQL schema; once that schema is published to Hive Cloud and the\n * microfe regenerates codegen, the typed hooks/types from\n * src/generated/* replace these.\n */\n\nexport type SecurityStage =\n | 'REPO_ONBOARD'\n | 'DEVELOPER_LOCAL'\n | 'PULL_REQUEST_FAST'\n | 'PULL_REQUEST_DEEP'\n | 'MAIN_MERGE'\n | 'BUILD'\n | 'PACKAGE_PUBLISH'\n | 'DEPLOY_PREVIEW'\n | 'DEPLOY_ALPHA'\n | 'PROMOTE_PROD'\n | 'RUNTIME_CONTINUOUS'\n | 'SCHEDULED_RESCAN'\n | 'INCIDENT_RESPONSE'\n | 'ARCHIVE_OFFBOARD';\n\nexport const ALL_STAGES: readonly { id: SecurityStage; slug: string; label: string }[] = [\n { id: 'REPO_ONBOARD', slug: 'repo-onboard', label: '01 Onboard' },\n { id: 'DEVELOPER_LOCAL', slug: 'developer-local', label: '02 Local' },\n { id: 'PULL_REQUEST_FAST', slug: 'pull-request-fast', label: '03 PR fast' },\n { id: 'PULL_REQUEST_DEEP', slug: 'pull-request-deep', label: '04 PR deep' },\n { id: 'MAIN_MERGE', slug: 'main-merge', label: '05 Merge' },\n { id: 'BUILD', slug: 'build', label: '06 Build' },\n { id: 'PACKAGE_PUBLISH', slug: 'package-publish', label: '07 Publish' },\n { id: 'DEPLOY_PREVIEW', slug: 'deploy-preview', label: '08 Preview' },\n { id: 'DEPLOY_ALPHA', slug: 'deploy-alpha', label: '09 Alpha' },\n { id: 'PROMOTE_PROD', slug: 'promote-prod', label: '10 Prod gate' },\n { id: 'RUNTIME_CONTINUOUS', slug: 'runtime-continuous', label: '11 Runtime' },\n { id: 'SCHEDULED_RESCAN', slug: 'scheduled-rescan', label: '12 Rescan' },\n { id: 'INCIDENT_RESPONSE', slug: 'incident-response', label: '13 Incident' },\n { id: 'ARCHIVE_OFFBOARD', slug: 'archive-offboard', label: '14 Archive' },\n];\n\nexport const STAGE_BY_ID = new Map(ALL_STAGES.map((s) => [s.id, s]));\n\nexport type SecurityScanStatus =\n | 'QUEUED'\n | 'RUNNING'\n | 'SUCCEEDED'\n | 'FAILED'\n | 'ERRORED'\n | 'CANCELLED';\n\nexport type SecurityScanConclusion = 'PASS' | 'WARN' | 'FAIL' | 'SKIPPED';\nexport type SecuritySeverity = 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW' | 'INFO';\nexport type SecurityFindingCategory =\n | 'SECRET'\n | 'VULN'\n | 'SAST'\n | 'LICENSE'\n | 'POLICY'\n | 'CONFIG'\n | 'SUPPLYCHAIN';\nexport type SecurityFindingStatus = 'OPEN' | 'ACCEPTED' | 'FIXED' | 'FALSE_POSITIVE' | 'SUPPRESSED';\nexport type SecurityPolicyLevel = 'ADVISORY' | 'WARN' | 'BLOCK';\n\nexport interface SecuritySummary {\n critical: number;\n high: number;\n medium: number;\n low: number;\n info: number;\n}\n\nexport interface SecurityScanRun {\n id: string;\n vibeId: string;\n stage: SecurityStage;\n status: SecurityScanStatus;\n conclusion?: SecurityScanConclusion | null;\n providerName: string;\n startedAt?: string | null;\n finishedAt?: string | null;\n durationMs?: number | null;\n summary: SecuritySummary;\n evidence?: SecurityEvidenceRow[];\n}\n\nexport interface SecurityEvidenceRow {\n id: string;\n type: string;\n sha256: string;\n sizeBytes: number;\n downloadUrl?: string | null;\n}\n\nexport interface SecurityFindingRow {\n id: string;\n fingerprint: string;\n ruleId: string;\n title: string;\n severity: SecuritySeverity;\n category: SecurityFindingCategory;\n file?: string | null;\n line?: number | null;\n packageName?: string | null;\n packageVersion?: string | null;\n fixedVersion?: string | null;\n status: SecurityFindingStatus;\n remediation?: string | null;\n redactedSample?: string | null;\n firstSeenAt: string;\n lastSeenAt: string;\n}\n\nexport interface SecurityProviderRow {\n id: string;\n pluginName: string;\n providerName: string;\n stage: SecurityStage;\n toolVersion: string;\n isDefault: boolean;\n enabled: boolean;\n}\n\nexport interface SecurityStatusPayload {\n vibeId: string;\n policyLevel: SecurityPolicyLevel;\n lastScanAt?: string | null;\n perStage: Record<string, { lastRun?: SecurityScanRun; conclusion?: SecurityScanConclusion }>;\n totals: SecuritySummary;\n}\n\nexport type StageNodeStatus =\n | 'never-run'\n | 'in-progress'\n | 'passed'\n | 'warn'\n | 'failed'\n | 'skipped';\n\nexport function deriveStageStatus(\n stage: SecurityStatusPayload['perStage'][string]\n): StageNodeStatus {\n if (!stage?.lastRun) return 'never-run';\n if (stage.lastRun.status === 'RUNNING' || stage.lastRun.status === 'QUEUED') return 'in-progress';\n if (stage.conclusion === 'PASS') return 'passed';\n if (stage.conclusion === 'WARN') return 'warn';\n if (stage.conclusion === 'FAIL') return 'failed';\n return 'skipped';\n}\n"],"mappings":";AAuBA,IAAa,IAA4E;CACvF;EAAE,IAAI;EAAgB,MAAM;EAAgB,OAAO;EAAc;CACjE;EAAE,IAAI;EAAmB,MAAM;EAAmB,OAAO;EAAY;CACrE;EAAE,IAAI;EAAqB,MAAM;EAAqB,OAAO;EAAc;CAC3E;EAAE,IAAI;EAAqB,MAAM;EAAqB,OAAO;EAAc;CAC3E;EAAE,IAAI;EAAc,MAAM;EAAc,OAAO;EAAY;CAC3D;EAAE,IAAI;EAAS,MAAM;EAAS,OAAO;EAAY;CACjD;EAAE,IAAI;EAAmB,MAAM;EAAmB,OAAO;EAAc;CACvE;EAAE,IAAI;EAAkB,MAAM;EAAkB,OAAO;EAAc;CACrE;EAAE,IAAI;EAAgB,MAAM;EAAgB,OAAO;EAAY;CAC/D;EAAE,IAAI;EAAgB,MAAM;EAAgB,OAAO;EAAgB;CACnE;EAAE,IAAI;EAAsB,MAAM;EAAsB,OAAO;EAAc;CAC7E;EAAE,IAAI;EAAoB,MAAM;EAAoB,OAAO;EAAa;CACxE;EAAE,IAAI;EAAqB,MAAM;EAAqB,OAAO;EAAe;CAC5E;EAAE,IAAI;EAAoB,MAAM;EAAoB,OAAO;EAAc;CAC1E,EAEY,IAAc,IAAI,IAAI,EAAW,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAkGpE,SAAgB,EACd,GACiB;AAMjB,QALK,GAAO,UACR,EAAM,QAAQ,WAAW,aAAa,EAAM,QAAQ,WAAW,WAAiB,gBAChF,EAAM,eAAe,SAAe,WACpC,EAAM,eAAe,SAAe,SACpC,EAAM,eAAe,SAAe,WACjC,YALqB"}
@@ -0,0 +1,66 @@
1
+ import { useVibeControlsStore as e } from "../../store/vibeControlsStore.js";
2
+ import { IDE_PRESETS as t, getIdePreset as n } from "../agents/idePresets.js";
3
+ import { SectionCard as r, SelectField as i } from "./SettingsForm.js";
4
+ import { useI18n as a } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
5
+ import { Trash2 as o } from "lucide-react";
6
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
+ //#region src/components/settings/IdePreferencesSection.tsx
8
+ function l() {
9
+ let { t: l } = a(), u = (e, t) => {
10
+ let n = l(e);
11
+ return n === e ? t : n;
12
+ }, d = e((e) => e.preferredIdeCommand), f = e((e) => e.setPreferredIdeCommand), p = e((e) => e.vibeIdeOverrides), m = e((e) => e.clearVibeIdeOverride), h = Object.entries(p);
13
+ return /* @__PURE__ */ c(r, {
14
+ title: u("settings.idePreferences", "Code Editor"),
15
+ children: [/* @__PURE__ */ s(i, {
16
+ label: u("settings.preferredIde", "Default IDE"),
17
+ value: d ?? "",
18
+ onChange: (e) => f(e || null),
19
+ options: [{
20
+ value: "",
21
+ label: u("settings.preferredIdeNone", "VS Code (built-in default)")
22
+ }, ...t.map((e) => ({
23
+ value: e.command,
24
+ label: e.label
25
+ }))],
26
+ description: u("settings.preferredIdeDesc", "Used by \"Open in editor\" on every Vibe. Per-Vibe overrides take precedence.")
27
+ }), /* @__PURE__ */ c("div", {
28
+ className: "mt-4",
29
+ children: [/* @__PURE__ */ s("div", {
30
+ className: "text-xs font-medium text-text-secondary mb-1",
31
+ children: u("settings.perVibeOverrides", "Per-Vibe overrides")
32
+ }), h.length === 0 ? /* @__PURE__ */ s("div", {
33
+ className: "text-xs text-text-secondary italic",
34
+ children: u("settings.perVibeOverridesEmpty", "No overrides set. From any Vibe page, use the editor menu → set as default.")
35
+ }) : /* @__PURE__ */ s("ul", {
36
+ className: "divide-y divide-border-default border border-border-default rounded-md",
37
+ children: h.map(([e, t]) => {
38
+ let r = n(t);
39
+ return /* @__PURE__ */ c("li", {
40
+ className: "flex items-center justify-between px-3 py-2 text-sm",
41
+ children: [/* @__PURE__ */ c("div", {
42
+ className: "min-w-0",
43
+ children: [/* @__PURE__ */ s("div", {
44
+ className: "font-mono text-xs truncate text-text-primary",
45
+ children: e
46
+ }), /* @__PURE__ */ c("div", {
47
+ className: "text-xs text-text-secondary",
48
+ children: ["→ ", r?.label ?? t]
49
+ })]
50
+ }), /* @__PURE__ */ s("button", {
51
+ type: "button",
52
+ onClick: () => m(e),
53
+ title: u("settings.removeOverride", "Remove override"),
54
+ className: "p-1 rounded hover:bg-bg-sunken text-text-secondary",
55
+ children: /* @__PURE__ */ s(o, { className: "w-3.5 h-3.5" })
56
+ })]
57
+ }, e);
58
+ })
59
+ })]
60
+ })]
61
+ });
62
+ }
63
+ //#endregion
64
+ export { l as IdePreferencesSection };
65
+
66
+ //# sourceMappingURL=IdePreferencesSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdePreferencesSection.js","names":[],"sources":["../../../src/components/settings/IdePreferencesSection.tsx"],"sourcesContent":["/**\n * IdePreferencesSection\n *\n * Settings card for the user's default IDE + per-Vibe override list.\n * Reads/writes the zustand store (`vibeControlsStore.preferredIdeCommand`\n * + `vibeIdeOverrides`) so it works offline; the BE mirrors live in\n * `UserPreferences.preferredIdeCommand` / `vibeIdeOverrides` and hydrate\n * on next sign-in once the GraphQL ops include the new fields.\n */\n\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Trash2 } from 'lucide-react';\nimport { SectionCard, SelectField } from './SettingsForm';\nimport { IDE_PRESETS, getIdePreset } from '@/components/agents/idePresets';\nimport { useVibeControlsStore } from '@/store/vibeControlsStore';\n\nexport function IdePreferencesSection() {\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const preferredIdeCommand = useVibeControlsStore((s) => s.preferredIdeCommand);\n const setPreferredIdeCommand = useVibeControlsStore((s) => s.setPreferredIdeCommand);\n const vibeIdeOverrides = useVibeControlsStore((s) => s.vibeIdeOverrides);\n const clearVibeIdeOverride = useVibeControlsStore((s) => s.clearVibeIdeOverride);\n\n const overrideEntries = Object.entries(vibeIdeOverrides);\n\n return (\n <SectionCard title={tr('settings.idePreferences', 'Code Editor')}>\n <SelectField\n label={tr('settings.preferredIde', 'Default IDE')}\n value={preferredIdeCommand ?? ''}\n onChange={(v) => setPreferredIdeCommand(v || null)}\n options={[\n { value: '', label: tr('settings.preferredIdeNone', 'VS Code (built-in default)') },\n ...IDE_PRESETS.map((p) => ({ value: p.command, label: p.label })),\n ]}\n description={tr(\n 'settings.preferredIdeDesc',\n 'Used by \"Open in editor\" on every Vibe. Per-Vibe overrides take precedence.'\n )}\n />\n\n <div className=\"mt-4\">\n <div className=\"text-xs font-medium text-text-secondary mb-1\">\n {tr('settings.perVibeOverrides', 'Per-Vibe overrides')}\n </div>\n {overrideEntries.length === 0 ? (\n <div className=\"text-xs text-text-secondary italic\">\n {tr(\n 'settings.perVibeOverridesEmpty',\n 'No overrides set. From any Vibe page, use the editor menu → set as default.'\n )}\n </div>\n ) : (\n <ul className=\"divide-y divide-border-default border border-border-default rounded-md\">\n {overrideEntries.map(([vibeId, cmd]) => {\n const preset = getIdePreset(cmd);\n return (\n <li key={vibeId} className=\"flex items-center justify-between px-3 py-2 text-sm\">\n <div className=\"min-w-0\">\n <div className=\"font-mono text-xs truncate text-text-primary\">{vibeId}</div>\n <div className=\"text-xs text-text-secondary\">→ {preset?.label ?? cmd}</div>\n </div>\n <button\n type=\"button\"\n onClick={() => clearVibeIdeOverride(vibeId)}\n title={tr('settings.removeOverride', 'Remove override')}\n className=\"p-1 rounded hover:bg-bg-sunken text-text-secondary\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </SectionCard>\n );\n}\n"],"mappings":";;;;;;;AAgBA,SAAgB,IAAwB;CACtC,IAAM,EAAE,SAAM,GAAS,EACjB,KAAM,GAAa,MAAqB;EAC5C,IAAM,IAAI,EAAE,EAAI;AAChB,SAAO,MAAM,IAAM,IAAW;IAG1B,IAAsB,GAAsB,MAAM,EAAE,oBAAoB,EACxE,IAAyB,GAAsB,MAAM,EAAE,uBAAuB,EAC9E,IAAmB,GAAsB,MAAM,EAAE,iBAAiB,EAClE,IAAuB,GAAsB,MAAM,EAAE,qBAAqB,EAE1E,IAAkB,OAAO,QAAQ,EAAiB;AAExD,QACE,kBAAC,GAAD;EAAa,OAAO,EAAG,2BAA2B,cAAc;YAAhE,CACE,kBAAC,GAAD;GACE,OAAO,EAAG,yBAAyB,cAAc;GACjD,OAAO,KAAuB;GAC9B,WAAW,MAAM,EAAuB,KAAK,KAAK;GAClD,SAAS,CACP;IAAE,OAAO;IAAI,OAAO,EAAG,6BAA6B,6BAA6B;IAAE,EACnF,GAAG,EAAY,KAAK,OAAO;IAAE,OAAO,EAAE;IAAS,OAAO,EAAE;IAAO,EAAE,CAClE;GACD,aAAa,EACX,6BACA,gFACD;GACD,CAAA,EAEF,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAG,6BAA6B,qBAAqB;IAClD,CAAA,EACL,EAAgB,WAAW,IAC1B,kBAAC,OAAD;IAAK,WAAU;cACZ,EACC,kCACA,8EACD;IACG,CAAA,GAEN,kBAAC,MAAD;IAAI,WAAU;cACX,EAAgB,KAAK,CAAC,GAAQ,OAAS;KACtC,IAAM,IAAS,EAAa,EAAI;AAChC,YACE,kBAAC,MAAD;MAAiB,WAAU;gBAA3B,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAgD;QAAa,CAAA,EAC5E,kBAAC,OAAD;QAAK,WAAU;kBAAf,CAA6C,MAAG,GAAQ,SAAS,EAAU;UACvE;UACN,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAqB,EAAO;OAC3C,OAAO,EAAG,2BAA2B,kBAAkB;OACvD,WAAU;iBAEV,kBAAC,GAAD,EAAQ,WAAU,eAAgB,CAAA;OAC3B,CAAA,CACN;QAbI,EAaJ;MAEP;IACC,CAAA,CAEH;KACM"}
@@ -0,0 +1,88 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ //#region src/components/shared/PageSkeleton.tsx
3
+ function n({ width: t = "w-full", height: n = "h-4", className: r = "" }) {
4
+ return /* @__PURE__ */ e("div", { className: `animate-pulse rounded bg-muted ${t} ${n} ${r}` });
5
+ }
6
+ function r({ count: r = 6, rowClassName: i = "" }) {
7
+ return /* @__PURE__ */ e("div", {
8
+ className: "space-y-2",
9
+ "aria-hidden": "true",
10
+ children: Array.from({ length: r }).map((r, a) => /* @__PURE__ */ t("div", {
11
+ className: `flex items-center gap-3 rounded-md border border-border-subtle bg-bg-surface px-3 py-3 ${i}`,
12
+ children: [
13
+ /* @__PURE__ */ e(n, {
14
+ width: "w-8",
15
+ height: "h-8",
16
+ className: "rounded-full"
17
+ }),
18
+ /* @__PURE__ */ t("div", {
19
+ className: "flex-1 space-y-2",
20
+ children: [/* @__PURE__ */ e(n, { width: "w-1/3" }), /* @__PURE__ */ e(n, {
21
+ width: "w-1/2",
22
+ height: "h-3"
23
+ })]
24
+ }),
25
+ /* @__PURE__ */ e(n, {
26
+ width: "w-16",
27
+ height: "h-6"
28
+ })
29
+ ]
30
+ }, a))
31
+ });
32
+ }
33
+ function i({ count: r = 6, columns: i = 3 }) {
34
+ return /* @__PURE__ */ e("div", {
35
+ className: `grid grid-cols-1 gap-3 ${i === 4 ? "sm:grid-cols-2 lg:grid-cols-4" : i === 2 ? "sm:grid-cols-2" : "sm:grid-cols-2 lg:grid-cols-3"}`,
36
+ "aria-hidden": "true",
37
+ children: Array.from({ length: r }).map((r, i) => /* @__PURE__ */ t("div", {
38
+ className: "rounded-md border border-border-subtle bg-bg-surface p-4 space-y-3",
39
+ children: [
40
+ /* @__PURE__ */ e(n, {
41
+ width: "w-2/3",
42
+ height: "h-5"
43
+ }),
44
+ /* @__PURE__ */ e(n, {
45
+ width: "w-full",
46
+ height: "h-3"
47
+ }),
48
+ /* @__PURE__ */ e(n, {
49
+ width: "w-1/2",
50
+ height: "h-3"
51
+ })
52
+ ]
53
+ }, i))
54
+ });
55
+ }
56
+ function a({ header: a, variant: o = "rows", count: s = 6 }) {
57
+ return /* @__PURE__ */ t("div", {
58
+ className: "space-y-4",
59
+ role: "status",
60
+ "aria-label": "Loading content",
61
+ children: [a, o === "cards" ? /* @__PURE__ */ e(i, { count: s }) : o === "detail" ? /* @__PURE__ */ t("div", {
62
+ className: "space-y-3",
63
+ children: [
64
+ /* @__PURE__ */ e(n, {
65
+ width: "w-1/3",
66
+ height: "h-6"
67
+ }),
68
+ /* @__PURE__ */ e(n, {
69
+ width: "w-2/3",
70
+ height: "h-3"
71
+ }),
72
+ /* @__PURE__ */ e(n, {
73
+ width: "w-full",
74
+ height: "h-3"
75
+ }),
76
+ /* @__PURE__ */ e(n, {
77
+ width: "w-3/4",
78
+ height: "h-3"
79
+ }),
80
+ /* @__PURE__ */ e(r, { count: Math.max(s - 2, 3) })
81
+ ]
82
+ }) : /* @__PURE__ */ e(r, { count: s })]
83
+ });
84
+ }
85
+ //#endregion
86
+ export { a as PageSkeleton, n as SkeletonLine };
87
+
88
+ //# sourceMappingURL=PageSkeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageSkeleton.js","names":[],"sources":["../../../src/components/shared/PageSkeleton.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\ninterface SkeletonLineProps {\n width?: string;\n height?: string;\n className?: string;\n}\n\nexport function SkeletonLine({\n width = 'w-full',\n height = 'h-4',\n className = '',\n}: SkeletonLineProps) {\n return <div className={`animate-pulse rounded bg-muted ${width} ${height} ${className}`} />;\n}\n\ninterface SkeletonRowsProps {\n count?: number;\n rowClassName?: string;\n}\n\nexport function SkeletonRows({ count = 6, rowClassName = '' }: SkeletonRowsProps) {\n return (\n <div className=\"space-y-2\" aria-hidden=\"true\">\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n className={`flex items-center gap-3 rounded-md border border-border-subtle bg-bg-surface px-3 py-3 ${rowClassName}`}\n >\n <SkeletonLine width=\"w-8\" height=\"h-8\" className=\"rounded-full\" />\n <div className=\"flex-1 space-y-2\">\n <SkeletonLine width=\"w-1/3\" />\n <SkeletonLine width=\"w-1/2\" height=\"h-3\" />\n </div>\n <SkeletonLine width=\"w-16\" height=\"h-6\" />\n </div>\n ))}\n </div>\n );\n}\n\ninterface SkeletonCardsProps {\n count?: number;\n columns?: number;\n}\n\nexport function SkeletonCards({ count = 6, columns = 3 }: SkeletonCardsProps) {\n const gridCols =\n columns === 4\n ? 'sm:grid-cols-2 lg:grid-cols-4'\n : columns === 2\n ? 'sm:grid-cols-2'\n : 'sm:grid-cols-2 lg:grid-cols-3';\n return (\n <div className={`grid grid-cols-1 gap-3 ${gridCols}`} aria-hidden=\"true\">\n {Array.from({ length: count }).map((_, i) => (\n <div key={i} className=\"rounded-md border border-border-subtle bg-bg-surface p-4 space-y-3\">\n <SkeletonLine width=\"w-2/3\" height=\"h-5\" />\n <SkeletonLine width=\"w-full\" height=\"h-3\" />\n <SkeletonLine width=\"w-1/2\" height=\"h-3\" />\n </div>\n ))}\n </div>\n );\n}\n\ninterface PageSkeletonProps {\n header?: ReactNode;\n variant?: 'rows' | 'cards' | 'detail';\n count?: number;\n}\n\nexport function PageSkeleton({ header, variant = 'rows', count = 6 }: PageSkeletonProps) {\n return (\n <div className=\"space-y-4\" role=\"status\" aria-label=\"Loading content\">\n {header}\n {variant === 'cards' ? (\n <SkeletonCards count={count} />\n ) : variant === 'detail' ? (\n <div className=\"space-y-3\">\n <SkeletonLine width=\"w-1/3\" height=\"h-6\" />\n <SkeletonLine width=\"w-2/3\" height=\"h-3\" />\n <SkeletonLine width=\"w-full\" height=\"h-3\" />\n <SkeletonLine width=\"w-3/4\" height=\"h-3\" />\n <SkeletonRows count={Math.max(count - 2, 3)} />\n </div>\n ) : (\n <SkeletonRows count={count} />\n )}\n </div>\n );\n}\n"],"mappings":";;AAQA,SAAgB,EAAa,EAC3B,WAAQ,UACR,YAAS,OACT,eAAY,MACQ;AACpB,QAAO,kBAAC,OAAD,EAAK,WAAW,kCAAkC,EAAM,GAAG,EAAO,GAAG,KAAe,CAAA;;AAQ7F,SAAgB,EAAa,EAAE,WAAQ,GAAG,kBAAe,MAAyB;AAChF,QACE,kBAAC,OAAD;EAAK,WAAU;EAAY,eAAY;YACpC,MAAM,KAAK,EAAE,QAAQ,GAAO,CAAC,CAAC,KAAK,GAAG,MACrC,kBAAC,OAAD;GAEE,WAAW,0FAA0F;aAFvG;IAIE,kBAAC,GAAD;KAAc,OAAM;KAAM,QAAO;KAAM,WAAU;KAAiB,CAAA;IAClE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAc,OAAM,SAAU,CAAA,EAC9B,kBAAC,GAAD;MAAc,OAAM;MAAQ,QAAO;MAAQ,CAAA,CACvC;;IACN,kBAAC,GAAD;KAAc,OAAM;KAAO,QAAO;KAAQ,CAAA;IACtC;KATC,EASD,CACN;EACE,CAAA;;AASV,SAAgB,EAAc,EAAE,WAAQ,GAAG,aAAU,KAAyB;AAO5E,QACE,kBAAC,OAAD;EAAK,WAAW,0BANhB,MAAY,IACR,kCACA,MAAY,IACV,mBACA;EAEgD,eAAY;YAC/D,MAAM,KAAK,EAAE,QAAQ,GAAO,CAAC,CAAC,KAAK,GAAG,MACrC,kBAAC,OAAD;GAAa,WAAU;aAAvB;IACE,kBAAC,GAAD;KAAc,OAAM;KAAQ,QAAO;KAAQ,CAAA;IAC3C,kBAAC,GAAD;KAAc,OAAM;KAAS,QAAO;KAAQ,CAAA;IAC5C,kBAAC,GAAD;KAAc,OAAM;KAAQ,QAAO;KAAQ,CAAA;IACvC;KAJI,EAIJ,CACN;EACE,CAAA;;AAUV,SAAgB,EAAa,EAAE,WAAQ,aAAU,QAAQ,WAAQ,KAAwB;AACvF,QACE,kBAAC,OAAD;EAAK,WAAU;EAAY,MAAK;EAAS,cAAW;YAApD,CACG,GACA,MAAY,UACX,kBAAC,GAAD,EAAsB,UAAS,CAAA,GAC7B,MAAY,WACd,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KAAc,OAAM;KAAQ,QAAO;KAAQ,CAAA;IAC3C,kBAAC,GAAD;KAAc,OAAM;KAAQ,QAAO;KAAQ,CAAA;IAC3C,kBAAC,GAAD;KAAc,OAAM;KAAS,QAAO;KAAQ,CAAA;IAC5C,kBAAC,GAAD;KAAc,OAAM;KAAQ,QAAO;KAAQ,CAAA;IAC3C,kBAAC,GAAD,EAAc,OAAO,KAAK,IAAI,IAAQ,GAAG,EAAE,EAAI,CAAA;IAC3C;OAEN,kBAAC,GAAD,EAAqB,UAAS,CAAA,CAE5B"}
@@ -14,7 +14,7 @@ var n = "@vibecontrols/vibe-plugin-session-manager", r = [
14
14
  "@vibecontrols/vibe-plugin-session-tmux",
15
15
  "@vibecontrols/vibe-plugin-session-wezterm",
16
16
  "@vibecontrols/vibe-plugin-session-zellij"
17
- ], i = "@vibecontrols/vibe-plugin-tool-git", a = "@vibecontrols/vibe-plugin-tool-graphiql", o = {
17
+ ], i = "@vibecontrols/vibe-plugin-plan", a = "@vibecontrols/vibe-plugin-plan-plannotator", o = "@vibecontrols/vibe-plugin-tool-git", s = "@vibecontrols/vibe-plugin-tool-graphiql", c = {
18
18
  [e]: {
19
19
  packageName: e,
20
20
  displayName: "AI Orchestrator",
@@ -141,21 +141,33 @@ var n = "@vibecontrols/vibe-plugin-session-manager", r = [
141
141
  description: "Zellij multiplexer provider with workspace layouts.",
142
142
  category: "session-provider"
143
143
  },
144
- [i]: {
145
- packageName: i,
144
+ [o]: {
145
+ packageName: o,
146
146
  displayName: "Visual Git (Ungit)",
147
147
  description: "Ungit visual git client. Required for the Git UI sub-tab.",
148
148
  category: "vcs"
149
149
  },
150
- [a]: {
151
- packageName: a,
150
+ [s]: {
151
+ packageName: s,
152
152
  displayName: "GraphQL Playground",
153
153
  description: "GraphiQL-powered GraphQL playground.",
154
154
  category: "api-playground"
155
+ },
156
+ [i]: {
157
+ packageName: i,
158
+ displayName: "Plan Orchestrator",
159
+ description: "Routes plan sessions to a registered provider (Plannotator etc.).",
160
+ category: "plan-core"
161
+ },
162
+ [a]: {
163
+ packageName: a,
164
+ displayName: "Plannotator",
165
+ description: "Wraps the upstream plannotator CLI for plan review inside vibecontrols.",
166
+ category: "plan-provider"
155
167
  }
156
168
  };
157
- function s(e) {
158
- return o[e] ?? {
169
+ function l(e) {
170
+ return c[e] ?? {
159
171
  packageName: e,
160
172
  displayName: e.replace("@vibecontrols/vibe-plugin-", ""),
161
173
  description: "VibeControls agent plugin.",
@@ -163,6 +175,6 @@ function s(e) {
163
175
  };
164
176
  }
165
177
  //#endregion
166
- export { e as AI_CORE_PACKAGE, t as AI_PROVIDER_PACKAGES, i as GIT_PACKAGE, a as GRAPHQL_PLAYGROUND_PACKAGE, n as SESSION_MANAGER_PACKAGE, r as SESSION_PROVIDER_PACKAGES, s as getPluginMeta };
178
+ export { e as AI_CORE_PACKAGE, t as AI_PROVIDER_PACKAGES, o as GIT_PACKAGE, s as GRAPHQL_PLAYGROUND_PACKAGE, i as PLAN_META_PACKAGE, a as PLAN_PLANNOTATOR_PACKAGE, n as SESSION_MANAGER_PACKAGE, r as SESSION_PROVIDER_PACKAGES, l as getPluginMeta };
167
179
 
168
180
  //# sourceMappingURL=pluginCatalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pluginCatalog.js","names":[],"sources":["../../src/constants/pluginCatalog.ts"],"sourcesContent":["/**\n * Plugin catalog — UI-facing metadata for vibecontrols-agent plugins.\n *\n * Source of truth for install state is the agent's profile-prefixed\n * `/api/profiles/<profile>/plugins/available` endpoint (proxied via\n * GraphQL `agentPlugins`). This module only mirrors the display\n * metadata the UI needs when prompting a user to install.\n */\n\nexport interface PluginMeta {\n packageName: string;\n displayName: string;\n description: string;\n category:\n | 'ai-core'\n | 'ai-provider'\n | 'session-core'\n | 'session-provider'\n | 'tunnel'\n | 'vcs'\n | 'api-playground'\n | 'tool';\n}\n\n// ── AI ─────────────────────────────────────────────────────────────────────\n\nexport const AI_CORE_PACKAGE = '@vibecontrols/vibe-plugin-ai';\n\n/**\n * Supported AI provider harnesses. Eight orchestrator-backed providers we\n * ship + validate end-to-end (claude, codex, gemini, opencode + cursor,\n * openrouter, minimax, ollama added 2026.507). The wider set in\n * `PLUGIN_CATALOG` below is retained for `getPluginMeta` lookups so legacy\n * installs still resolve display metadata, but the picker + gate only\n * offer the supported eight. See ~/products/dev/platform/context/ai-plugins/\n * PROVIDERS.md for the full status matrix.\n */\nexport const AI_PROVIDER_PACKAGES = [\n '@vibecontrols/vibe-plugin-ai-claude',\n '@vibecontrols/vibe-plugin-ai-codex',\n '@vibecontrols/vibe-plugin-ai-gemini',\n '@vibecontrols/vibe-plugin-ai-opencode',\n '@vibecontrols/vibe-plugin-ai-cursor',\n '@vibecontrols/vibe-plugin-ai-openrouter',\n '@vibecontrols/vibe-plugin-ai-minimax',\n '@vibecontrols/vibe-plugin-ai-ollama',\n] as const;\n\n/**\n * Full set of supported AI packages including the orchestrator. Useful for\n * server-side allow-listing or detection scans that need to recognise an\n * installed plugin even if the UI doesn't currently offer it.\n */\nexport const SUPPORTED_AI_PACKAGES = [AI_CORE_PACKAGE, ...AI_PROVIDER_PACKAGES] as const;\n\n// ── Sessions ───────────────────────────────────────────────────────────────\n\nexport const SESSION_MANAGER_PACKAGE = '@vibecontrols/vibe-plugin-session-manager';\n\nexport const SESSION_PROVIDER_PACKAGES = [\n '@vibecontrols/vibe-plugin-session-tmux',\n '@vibecontrols/vibe-plugin-session-wezterm',\n '@vibecontrols/vibe-plugin-session-zellij',\n] as const;\n\n// ── VCS & API Playground ───────────────────────────────────────────────────\n\nexport const GIT_PACKAGE = '@vibecontrols/vibe-plugin-tool-git';\nexport const GRAPHQL_PLAYGROUND_PACKAGE = '@vibecontrols/vibe-plugin-tool-graphiql';\n\n// ── Metadata map ───────────────────────────────────────────────────────────\n\nexport const PLUGIN_CATALOG: Record<string, PluginMeta> = {\n [AI_CORE_PACKAGE]: {\n packageName: AI_CORE_PACKAGE,\n displayName: 'AI Orchestrator',\n description: 'Routes prompts and sessions across installed AI provider plugins.',\n category: 'ai-core',\n },\n '@vibecontrols/vibe-plugin-ai-claude': {\n packageName: '@vibecontrols/vibe-plugin-ai-claude',\n displayName: 'Claude Code',\n description: 'Anthropic Claude Code agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-codex': {\n packageName: '@vibecontrols/vibe-plugin-ai-codex',\n displayName: 'OpenAI Codex',\n description: 'OpenAI Codex CLI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-copilot': {\n packageName: '@vibecontrols/vibe-plugin-ai-copilot',\n displayName: 'GitHub Copilot',\n description: 'GitHub Copilot agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-gemini': {\n packageName: '@vibecontrols/vibe-plugin-ai-gemini',\n displayName: 'Google Gemini',\n description: 'Google Gemini / Vertex AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-opencode': {\n packageName: '@vibecontrols/vibe-plugin-ai-opencode',\n displayName: 'OpenCode',\n description: 'OpenCode agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-cursor': {\n packageName: '@vibecontrols/vibe-plugin-ai-cursor',\n displayName: 'Cursor',\n description: 'Cursor agent provider (CLI + SDK).',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-openrouter': {\n packageName: '@vibecontrols/vibe-plugin-ai-openrouter',\n displayName: 'OpenRouter',\n description: 'OpenRouter aggregator (300+ models, SDK only).',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-minimax': {\n packageName: '@vibecontrols/vibe-plugin-ai-minimax',\n displayName: 'Minimax',\n description: 'Minimax provider (CLI + Anthropic-compatible SDK).',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-ollama': {\n packageName: '@vibecontrols/vibe-plugin-ai-ollama',\n displayName: 'Ollama',\n description: 'Ollama Cloud + self-hosted (CLI + SDK).',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-aider': {\n packageName: '@vibecontrols/vibe-plugin-ai-aider',\n displayName: 'Aider',\n description: 'Aider AI pair-programmer provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-crush': {\n packageName: '@vibecontrols/vibe-plugin-ai-crush',\n displayName: 'Crush',\n description: 'Crush AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-goose': {\n packageName: '@vibecontrols/vibe-plugin-ai-goose',\n displayName: 'Goose',\n description: 'Block Goose AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-pi': {\n packageName: '@vibecontrols/vibe-plugin-ai-pi',\n displayName: 'Pi',\n description: 'Pi AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-plandex': {\n packageName: '@vibecontrols/vibe-plugin-ai-plandex',\n displayName: 'Plandex',\n description: 'Plandex AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-amp': {\n packageName: '@vibecontrols/vibe-plugin-ai-amp',\n displayName: 'Amp',\n description: 'Sourcegraph Amp AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-openai-compat': {\n packageName: '@vibecontrols/vibe-plugin-ai-openai-compat',\n displayName: 'OpenAI-compatible',\n description: 'Bring-your-own OpenAI-compatible endpoint provider.',\n category: 'ai-provider',\n },\n [SESSION_MANAGER_PACKAGE]: {\n packageName: SESSION_MANAGER_PACKAGE,\n displayName: 'Session Manager',\n description: 'Unified session manager that routes across tmux / WezTerm / Zellij.',\n category: 'session-core',\n },\n '@vibecontrols/vibe-plugin-session-tmux': {\n packageName: '@vibecontrols/vibe-plugin-session-tmux',\n displayName: 'tmux',\n description: 'tmux terminal multiplexer provider (lightweight, universal).',\n category: 'session-provider',\n },\n '@vibecontrols/vibe-plugin-session-wezterm': {\n packageName: '@vibecontrols/vibe-plugin-session-wezterm',\n displayName: 'WezTerm',\n description: 'WezTerm multiplexer provider with rich rendering.',\n category: 'session-provider',\n },\n '@vibecontrols/vibe-plugin-session-zellij': {\n packageName: '@vibecontrols/vibe-plugin-session-zellij',\n displayName: 'Zellij',\n description: 'Zellij multiplexer provider with workspace layouts.',\n category: 'session-provider',\n },\n [GIT_PACKAGE]: {\n packageName: GIT_PACKAGE,\n displayName: 'Visual Git (Ungit)',\n description: 'Ungit visual git client. Required for the Git UI sub-tab.',\n category: 'vcs',\n },\n [GRAPHQL_PLAYGROUND_PACKAGE]: {\n packageName: GRAPHQL_PLAYGROUND_PACKAGE,\n displayName: 'GraphQL Playground',\n description: 'GraphiQL-powered GraphQL playground.',\n category: 'api-playground',\n },\n};\n\nexport function getPluginMeta(packageName: string): PluginMeta {\n return (\n PLUGIN_CATALOG[packageName] ?? {\n packageName,\n displayName: packageName.replace('@vibecontrols/vibe-plugin-', ''),\n description: 'VibeControls agent plugin.',\n category: 'tool',\n }\n );\n}\n"],"mappings":";AA0BA,IAAa,IAAkB,gCAWlB,IAAuB;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAOoC,CAAkB,GAAG,EAAqB;AAI/E,IAAa,IAA0B,6CAE1B,IAA4B;CACvC;CACA;CACA;CACD,EAIY,IAAc,sCACd,IAA6B,2CAI7B,IAA6C;EACvD,IAAkB;EACjB,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,uCAAuC;EACrC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,sCAAsC;EACpC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,wCAAwC;EACtC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,uCAAuC;EACrC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,yCAAyC;EACvC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,uCAAuC;EACrC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,2CAA2C;EACzC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,wCAAwC;EACtC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,uCAAuC;EACrC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,sCAAsC;EACpC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,sCAAsC;EACpC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,sCAAsC;EACpC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,mCAAmC;EACjC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,wCAAwC;EACtC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,oCAAoC;EAClC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,8CAA8C;EAC5C,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;EACA,IAA0B;EACzB,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,0CAA0C;EACxC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,6CAA6C;EAC3C,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,4CAA4C;EAC1C,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;EACA,IAAc;EACb,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;EACA,IAA6B;EAC5B,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACF;AAED,SAAgB,EAAc,GAAiC;AAC7D,QACE,EAAe,MAAgB;EAC7B;EACA,aAAa,EAAY,QAAQ,8BAA8B,GAAG;EAClE,aAAa;EACb,UAAU;EACX"}
1
+ {"version":3,"file":"pluginCatalog.js","names":[],"sources":["../../src/constants/pluginCatalog.ts"],"sourcesContent":["/**\n * Plugin catalog — UI-facing metadata for vibecontrols-agent plugins.\n *\n * Source of truth for install state is the agent's profile-prefixed\n * `/api/profiles/<profile>/plugins/available` endpoint (proxied via\n * GraphQL `agentPlugins`). This module only mirrors the display\n * metadata the UI needs when prompting a user to install.\n */\n\nexport interface PluginMeta {\n packageName: string;\n displayName: string;\n description: string;\n category:\n | 'ai-core'\n | 'ai-provider'\n | 'plan-core'\n | 'plan-provider'\n | 'session-core'\n | 'session-provider'\n | 'tunnel'\n | 'vcs'\n | 'api-playground'\n | 'tool';\n}\n\n// ── AI ─────────────────────────────────────────────────────────────────────\n\nexport const AI_CORE_PACKAGE = '@vibecontrols/vibe-plugin-ai';\n\n/**\n * Supported AI provider harnesses. Eight orchestrator-backed providers we\n * ship + validate end-to-end (claude, codex, gemini, opencode + cursor,\n * openrouter, minimax, ollama added 2026.507). The wider set in\n * `PLUGIN_CATALOG` below is retained for `getPluginMeta` lookups so legacy\n * installs still resolve display metadata, but the picker + gate only\n * offer the supported eight. See ~/products/dev/platform/context/ai-plugins/\n * PROVIDERS.md for the full status matrix.\n */\nexport const AI_PROVIDER_PACKAGES = [\n '@vibecontrols/vibe-plugin-ai-claude',\n '@vibecontrols/vibe-plugin-ai-codex',\n '@vibecontrols/vibe-plugin-ai-gemini',\n '@vibecontrols/vibe-plugin-ai-opencode',\n '@vibecontrols/vibe-plugin-ai-cursor',\n '@vibecontrols/vibe-plugin-ai-openrouter',\n '@vibecontrols/vibe-plugin-ai-minimax',\n '@vibecontrols/vibe-plugin-ai-ollama',\n] as const;\n\n/**\n * Full set of supported AI packages including the orchestrator. Useful for\n * server-side allow-listing or detection scans that need to recognise an\n * installed plugin even if the UI doesn't currently offer it.\n */\nexport const SUPPORTED_AI_PACKAGES = [AI_CORE_PACKAGE, ...AI_PROVIDER_PACKAGES] as const;\n\n// ── Sessions ───────────────────────────────────────────────────────────────\n\nexport const SESSION_MANAGER_PACKAGE = '@vibecontrols/vibe-plugin-session-manager';\n\nexport const SESSION_PROVIDER_PACKAGES = [\n '@vibecontrols/vibe-plugin-session-tmux',\n '@vibecontrols/vibe-plugin-session-wezterm',\n '@vibecontrols/vibe-plugin-session-zellij',\n] as const;\n\n// ── Plan ──────────────────────────────────────────────────────────────────\n\nexport const PLAN_META_PACKAGE = '@vibecontrols/vibe-plugin-plan';\nexport const PLAN_PLANNOTATOR_PACKAGE = '@vibecontrols/vibe-plugin-plan-plannotator';\n\nexport const PLAN_PROVIDER_PACKAGES = [PLAN_PLANNOTATOR_PACKAGE] as const;\n\n// ── VCS & API Playground ───────────────────────────────────────────────────\n\nexport const GIT_PACKAGE = '@vibecontrols/vibe-plugin-tool-git';\nexport const GRAPHQL_PLAYGROUND_PACKAGE = '@vibecontrols/vibe-plugin-tool-graphiql';\n\n// ── Metadata map ───────────────────────────────────────────────────────────\n\nexport const PLUGIN_CATALOG: Record<string, PluginMeta> = {\n [AI_CORE_PACKAGE]: {\n packageName: AI_CORE_PACKAGE,\n displayName: 'AI Orchestrator',\n description: 'Routes prompts and sessions across installed AI provider plugins.',\n category: 'ai-core',\n },\n '@vibecontrols/vibe-plugin-ai-claude': {\n packageName: '@vibecontrols/vibe-plugin-ai-claude',\n displayName: 'Claude Code',\n description: 'Anthropic Claude Code agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-codex': {\n packageName: '@vibecontrols/vibe-plugin-ai-codex',\n displayName: 'OpenAI Codex',\n description: 'OpenAI Codex CLI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-copilot': {\n packageName: '@vibecontrols/vibe-plugin-ai-copilot',\n displayName: 'GitHub Copilot',\n description: 'GitHub Copilot agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-gemini': {\n packageName: '@vibecontrols/vibe-plugin-ai-gemini',\n displayName: 'Google Gemini',\n description: 'Google Gemini / Vertex AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-opencode': {\n packageName: '@vibecontrols/vibe-plugin-ai-opencode',\n displayName: 'OpenCode',\n description: 'OpenCode agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-cursor': {\n packageName: '@vibecontrols/vibe-plugin-ai-cursor',\n displayName: 'Cursor',\n description: 'Cursor agent provider (CLI + SDK).',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-openrouter': {\n packageName: '@vibecontrols/vibe-plugin-ai-openrouter',\n displayName: 'OpenRouter',\n description: 'OpenRouter aggregator (300+ models, SDK only).',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-minimax': {\n packageName: '@vibecontrols/vibe-plugin-ai-minimax',\n displayName: 'Minimax',\n description: 'Minimax provider (CLI + Anthropic-compatible SDK).',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-ollama': {\n packageName: '@vibecontrols/vibe-plugin-ai-ollama',\n displayName: 'Ollama',\n description: 'Ollama Cloud + self-hosted (CLI + SDK).',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-aider': {\n packageName: '@vibecontrols/vibe-plugin-ai-aider',\n displayName: 'Aider',\n description: 'Aider AI pair-programmer provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-crush': {\n packageName: '@vibecontrols/vibe-plugin-ai-crush',\n displayName: 'Crush',\n description: 'Crush AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-goose': {\n packageName: '@vibecontrols/vibe-plugin-ai-goose',\n displayName: 'Goose',\n description: 'Block Goose AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-pi': {\n packageName: '@vibecontrols/vibe-plugin-ai-pi',\n displayName: 'Pi',\n description: 'Pi AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-plandex': {\n packageName: '@vibecontrols/vibe-plugin-ai-plandex',\n displayName: 'Plandex',\n description: 'Plandex AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-amp': {\n packageName: '@vibecontrols/vibe-plugin-ai-amp',\n displayName: 'Amp',\n description: 'Sourcegraph Amp AI agent provider.',\n category: 'ai-provider',\n },\n '@vibecontrols/vibe-plugin-ai-openai-compat': {\n packageName: '@vibecontrols/vibe-plugin-ai-openai-compat',\n displayName: 'OpenAI-compatible',\n description: 'Bring-your-own OpenAI-compatible endpoint provider.',\n category: 'ai-provider',\n },\n [SESSION_MANAGER_PACKAGE]: {\n packageName: SESSION_MANAGER_PACKAGE,\n displayName: 'Session Manager',\n description: 'Unified session manager that routes across tmux / WezTerm / Zellij.',\n category: 'session-core',\n },\n '@vibecontrols/vibe-plugin-session-tmux': {\n packageName: '@vibecontrols/vibe-plugin-session-tmux',\n displayName: 'tmux',\n description: 'tmux terminal multiplexer provider (lightweight, universal).',\n category: 'session-provider',\n },\n '@vibecontrols/vibe-plugin-session-wezterm': {\n packageName: '@vibecontrols/vibe-plugin-session-wezterm',\n displayName: 'WezTerm',\n description: 'WezTerm multiplexer provider with rich rendering.',\n category: 'session-provider',\n },\n '@vibecontrols/vibe-plugin-session-zellij': {\n packageName: '@vibecontrols/vibe-plugin-session-zellij',\n displayName: 'Zellij',\n description: 'Zellij multiplexer provider with workspace layouts.',\n category: 'session-provider',\n },\n [GIT_PACKAGE]: {\n packageName: GIT_PACKAGE,\n displayName: 'Visual Git (Ungit)',\n description: 'Ungit visual git client. Required for the Git UI sub-tab.',\n category: 'vcs',\n },\n [GRAPHQL_PLAYGROUND_PACKAGE]: {\n packageName: GRAPHQL_PLAYGROUND_PACKAGE,\n displayName: 'GraphQL Playground',\n description: 'GraphiQL-powered GraphQL playground.',\n category: 'api-playground',\n },\n [PLAN_META_PACKAGE]: {\n packageName: PLAN_META_PACKAGE,\n displayName: 'Plan Orchestrator',\n description: 'Routes plan sessions to a registered provider (Plannotator etc.).',\n category: 'plan-core',\n },\n [PLAN_PLANNOTATOR_PACKAGE]: {\n packageName: PLAN_PLANNOTATOR_PACKAGE,\n displayName: 'Plannotator',\n description: 'Wraps the upstream plannotator CLI for plan review inside vibecontrols.',\n category: 'plan-provider',\n },\n};\n\nexport function getPluginMeta(packageName: string): PluginMeta {\n return (\n PLUGIN_CATALOG[packageName] ?? {\n packageName,\n displayName: packageName.replace('@vibecontrols/vibe-plugin-', ''),\n description: 'VibeControls agent plugin.',\n category: 'tool',\n }\n );\n}\n"],"mappings":";AA4BA,IAAa,IAAkB,gCAWlB,IAAuB;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAOoC,CAAkB,GAAG,EAAqB;AAI/E,IAAa,IAA0B,6CAE1B,IAA4B;CACvC;CACA;CACA;CACD,EAIY,IAAoB,kCACpB,IAA2B,8CAM3B,IAAc,sCACd,IAA6B,2CAI7B,IAA6C;EACvD,IAAkB;EACjB,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,uCAAuC;EACrC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,sCAAsC;EACpC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,wCAAwC;EACtC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,uCAAuC;EACrC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,yCAAyC;EACvC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,uCAAuC;EACrC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,2CAA2C;EACzC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,wCAAwC;EACtC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,uCAAuC;EACrC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,sCAAsC;EACpC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,sCAAsC;EACpC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,sCAAsC;EACpC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,mCAAmC;EACjC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,wCAAwC;EACtC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,oCAAoC;EAClC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,8CAA8C;EAC5C,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;EACA,IAA0B;EACzB,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,0CAA0C;EACxC,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,6CAA6C;EAC3C,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACD,4CAA4C;EAC1C,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;EACA,IAAc;EACb,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;EACA,IAA6B;EAC5B,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;EACA,IAAoB;EACnB,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;EACA,IAA2B;EAC1B,aAAa;EACb,aAAa;EACb,aAAa;EACb,UAAU;EACX;CACF;AAED,SAAgB,EAAc,GAAiC;AAC7D,QACE,EAAe,MAAgB;EAC7B;EACA,aAAa,EAAY,QAAQ,8BAA8B,GAAG;EAClE,aAAa;EACb,UAAU;EACX"}