@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.
- package/dist/VibeControlsRoot.js +86 -78
- package/dist/VibeControlsRoot.js.map +1 -1
- package/dist/VibeControlsRoutes.js +168 -125
- package/dist/VibeControlsRoutes.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js +174 -0
- package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js.map +1 -0
- package/dist/components/agent-manager/AgentManagerChatPane.js +149 -94
- package/dist/components/agent-manager/AgentManagerChatPane.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerMessageItem.js +52 -41
- package/dist/components/agent-manager/AgentManagerMessageItem.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerMessageList.js +22 -15
- package/dist/components/agent-manager/AgentManagerMessageList.js.map +1 -1
- package/dist/components/agents/OpenInEditorMenu.js +241 -0
- package/dist/components/agents/OpenInEditorMenu.js.map +1 -0
- package/dist/components/agents/VibeOpenInEditorMenu.js +20 -0
- package/dist/components/agents/VibeOpenInEditorMenu.js.map +1 -0
- package/dist/components/agents/idePresets.js +148 -0
- package/dist/components/agents/idePresets.js.map +1 -0
- package/dist/components/agents/index.js +3 -0
- package/dist/components/ai/AIPlanPanel.js +332 -0
- package/dist/components/ai/AIPlanPanel.js.map +1 -0
- package/dist/components/analytics/index.js +2 -2
- package/dist/components/assistant/AssistantMessageItem.js +55 -47
- package/dist/components/assistant/AssistantMessageItem.js.map +1 -1
- package/dist/components/audit/AuditExportButton.js +87 -41
- package/dist/components/audit/AuditExportButton.js.map +1 -1
- package/dist/components/gitops/CIDurationChart.js +11 -11
- package/dist/components/security/SecurityEmptyState.js +33 -0
- package/dist/components/security/SecurityEmptyState.js.map +1 -0
- package/dist/components/security/SecurityEvidenceList.js +42 -0
- package/dist/components/security/SecurityEvidenceList.js.map +1 -0
- package/dist/components/security/SecurityFindingsTable.js +201 -0
- package/dist/components/security/SecurityFindingsTable.js.map +1 -0
- package/dist/components/security/SecurityHeaderStrip.js +67 -0
- package/dist/components/security/SecurityHeaderStrip.js.map +1 -0
- package/dist/components/security/SecurityLifecycleStepper.js +66 -0
- package/dist/components/security/SecurityLifecycleStepper.js.map +1 -0
- package/dist/components/security/SecurityProviderDrawer.js +112 -0
- package/dist/components/security/SecurityProviderDrawer.js.map +1 -0
- package/dist/components/security/SecurityTabPanel.js +105 -0
- package/dist/components/security/SecurityTabPanel.js.map +1 -0
- package/dist/components/security/gql.js +128 -0
- package/dist/components/security/gql.js.map +1 -0
- package/dist/components/security/index.js +8 -0
- package/dist/components/security/types.js +80 -0
- package/dist/components/security/types.js.map +1 -0
- package/dist/components/settings/IdePreferencesSection.js +66 -0
- package/dist/components/settings/IdePreferencesSection.js.map +1 -0
- package/dist/components/shared/PageSkeleton.js +88 -0
- package/dist/components/shared/PageSkeleton.js.map +1 -0
- package/dist/constants/pluginCatalog.js +20 -8
- package/dist/constants/pluginCatalog.js.map +1 -1
- package/dist/generated/wspace-operations.js +1350 -1262
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/hooks/useToggleAgentBookmark.js +32 -0
- package/dist/hooks/useToggleAgentBookmark.js.map +1 -0
- package/dist/index.js +10 -10
- package/dist/pages/AgentDetailsPage.js +25 -25
- package/dist/pages/AgentDetailsPage.js.map +1 -1
- package/dist/pages/AgentsPage.js +326 -327
- package/dist/pages/AgentsPage.js.map +1 -1
- package/dist/pages/AnalyticsPage.js +425 -420
- package/dist/pages/AnalyticsPage.js.map +1 -1
- package/dist/pages/CatalogDetailPage.js +258 -249
- package/dist/pages/CatalogDetailPage.js.map +1 -1
- package/dist/pages/CatalogPage.js +22 -22
- package/dist/pages/CatalogPage.js.map +1 -1
- package/dist/pages/ComponentDetailPage.js +30 -30
- package/dist/pages/ComponentDetailPage.js.map +1 -1
- package/dist/pages/ComponentsPage.js +23 -23
- package/dist/pages/ComponentsPage.js.map +1 -1
- package/dist/pages/LogsPage.js +107 -0
- package/dist/pages/LogsPage.js.map +1 -0
- package/dist/pages/NoteDetailsPage.js +12 -12
- package/dist/pages/NoteDetailsPage.js.map +1 -1
- package/dist/pages/SessionDetailsPage.js +12 -12
- package/dist/pages/SessionDetailsPage.js.map +1 -1
- package/dist/pages/SessionsPage.js +158 -136
- package/dist/pages/SessionsPage.js.map +1 -1
- package/dist/pages/SettingsPage.js +60 -52
- package/dist/pages/SettingsPage.js.map +1 -1
- package/dist/pages/TargetDetailsPage.js +18 -18
- package/dist/pages/TargetDetailsPage.js.map +1 -1
- package/dist/pages/TargetsPage.js +328 -331
- package/dist/pages/TargetsPage.js.map +1 -1
- package/dist/pages/TemplateDetailPage.js +17 -17
- package/dist/pages/TemplateDetailPage.js.map +1 -1
- package/dist/pages/TemplatesPage.js +17 -17
- package/dist/pages/TemplatesPage.js.map +1 -1
- package/dist/pages/VibeDetailsPage.js +552 -535
- package/dist/pages/VibeDetailsPage.js.map +1 -1
- package/dist/pages/VibesPage.js +321 -296
- package/dist/pages/VibesPage.js.map +1 -1
- package/dist/pages/ai/AIBookmarksPage.js +184 -0
- package/dist/pages/ai/AIBookmarksPage.js.map +1 -0
- package/dist/pages/ai/AIPage.js +138 -109
- package/dist/pages/ai/AIPage.js.map +1 -1
- package/dist/services/planApi.js +18 -0
- package/dist/services/planApi.js.map +1 -0
- package/dist/store/vibeControlsStore.js +20 -2
- package/dist/store/vibeControlsStore.js.map +1 -1
- package/dist/translations/en.js +30 -1
- package/dist/translations/en.js.map +1 -1
- 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",
|
|
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
|
-
[
|
|
145
|
-
packageName:
|
|
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
|
-
[
|
|
151
|
-
packageName:
|
|
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
|
|
158
|
-
return
|
|
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,
|
|
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"}
|