@vibe-assurance/cli 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/mcp/tools.js +242 -2
package/package.json
CHANGED
package/src/mcp/tools.js
CHANGED
|
@@ -179,7 +179,7 @@ const tools = [
|
|
|
179
179
|
properties: {
|
|
180
180
|
type: {
|
|
181
181
|
type: 'string',
|
|
182
|
-
enum: ['CR', 'RISK', 'VULNERABILITY', 'REPORT', 'POLICY', 'PLAN', 'ARCHITECTURE', 'CONFIG'],
|
|
182
|
+
enum: ['CR', 'RISK', 'VULNERABILITY', 'REPORT', 'POLICY', 'PLAN', 'ARCHITECTURE', 'CONFIG', 'SOP'],
|
|
183
183
|
description: 'Type of artifact'
|
|
184
184
|
},
|
|
185
185
|
artifactId: {
|
|
@@ -304,7 +304,7 @@ const tools = [
|
|
|
304
304
|
properties: {
|
|
305
305
|
type: {
|
|
306
306
|
type: 'string',
|
|
307
|
-
enum: ['CR', 'RISK', 'VULNERABILITY', 'REPORT', 'POLICY', 'PLAN', 'ARCHITECTURE', 'CONFIG'],
|
|
307
|
+
enum: ['CR', 'RISK', 'VULNERABILITY', 'REPORT', 'POLICY', 'PLAN', 'ARCHITECTURE', 'CONFIG', 'SOP'],
|
|
308
308
|
description: 'Filter by artifact type. Use "PLAN" to find strategic plans.'
|
|
309
309
|
},
|
|
310
310
|
status: {
|
|
@@ -672,6 +672,246 @@ const tools = [
|
|
|
672
672
|
handler: async ({ vulId, ...updates }) => {
|
|
673
673
|
return await api.put(`/api/mcp/vulnerabilities/${vulId}`, updates);
|
|
674
674
|
}
|
|
675
|
+
},
|
|
676
|
+
|
|
677
|
+
// ============================================================================
|
|
678
|
+
// SOP MANAGEMENT TOOLS (CR-2026-054)
|
|
679
|
+
// ============================================================================
|
|
680
|
+
|
|
681
|
+
{
|
|
682
|
+
name: 'vibe_list_sops',
|
|
683
|
+
description: 'List all Standard Operating Procedures (SOPs) for the project. SOPs define step-by-step procedures for operational tasks.',
|
|
684
|
+
inputSchema: {
|
|
685
|
+
type: 'object',
|
|
686
|
+
properties: {
|
|
687
|
+
status: {
|
|
688
|
+
type: 'string',
|
|
689
|
+
enum: ['Draft', 'Active', 'Completed', 'Closed'],
|
|
690
|
+
description: 'Filter by SOP status'
|
|
691
|
+
},
|
|
692
|
+
category: {
|
|
693
|
+
type: 'string',
|
|
694
|
+
description: 'Filter by category (e.g., "Security", "HR", "SDLC", "Change Management")'
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
},
|
|
698
|
+
handler: async (params = {}) => {
|
|
699
|
+
const query = new URLSearchParams();
|
|
700
|
+
if (params.status) query.set('status', params.status);
|
|
701
|
+
if (params.category) query.set('category', params.category);
|
|
702
|
+
const queryString = query.toString();
|
|
703
|
+
const path = queryString ? `/api/mcp/sops?${queryString}` : '/api/mcp/sops';
|
|
704
|
+
return await api.get(path);
|
|
705
|
+
}
|
|
706
|
+
},
|
|
707
|
+
|
|
708
|
+
{
|
|
709
|
+
name: 'vibe_store_sop',
|
|
710
|
+
description: 'Create a new Standard Operating Procedure (SOP). SOPs define step-by-step procedures for operational tasks like onboarding, offboarding, access reviews, etc.',
|
|
711
|
+
inputSchema: {
|
|
712
|
+
type: 'object',
|
|
713
|
+
properties: {
|
|
714
|
+
sopId: {
|
|
715
|
+
type: 'string',
|
|
716
|
+
description: 'Unique SOP ID (e.g., "SOP-001", "SOP-SDLC-001")'
|
|
717
|
+
},
|
|
718
|
+
title: {
|
|
719
|
+
type: 'string',
|
|
720
|
+
description: 'Title of the SOP (e.g., "Employee Onboarding Checklist")'
|
|
721
|
+
},
|
|
722
|
+
content: {
|
|
723
|
+
type: 'string',
|
|
724
|
+
description: 'Full SOP content in markdown format'
|
|
725
|
+
},
|
|
726
|
+
status: {
|
|
727
|
+
type: 'string',
|
|
728
|
+
enum: ['Draft', 'Active', 'Completed', 'Closed'],
|
|
729
|
+
description: 'SOP status (default: Active)'
|
|
730
|
+
},
|
|
731
|
+
metadata: {
|
|
732
|
+
type: 'object',
|
|
733
|
+
description: 'Additional metadata (e.g., category, version, owner)',
|
|
734
|
+
additionalProperties: true
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
required: ['sopId', 'title', 'content']
|
|
738
|
+
},
|
|
739
|
+
handler: async (params) => {
|
|
740
|
+
return await api.post('/api/mcp/sops', params);
|
|
741
|
+
}
|
|
742
|
+
},
|
|
743
|
+
|
|
744
|
+
{
|
|
745
|
+
name: 'vibe_get_sop',
|
|
746
|
+
description: 'Get a specific SOP by ID with full content.',
|
|
747
|
+
inputSchema: {
|
|
748
|
+
type: 'object',
|
|
749
|
+
properties: {
|
|
750
|
+
sopId: {
|
|
751
|
+
type: 'string',
|
|
752
|
+
description: 'The SOP ID to retrieve (e.g., "SOP-001")'
|
|
753
|
+
}
|
|
754
|
+
},
|
|
755
|
+
required: ['sopId']
|
|
756
|
+
},
|
|
757
|
+
handler: async ({ sopId }) => {
|
|
758
|
+
return await api.get(`/api/mcp/sops/${sopId}`);
|
|
759
|
+
}
|
|
760
|
+
},
|
|
761
|
+
|
|
762
|
+
{
|
|
763
|
+
name: 'vibe_update_sop',
|
|
764
|
+
description: 'Update an existing SOP\'s content, status, or metadata.',
|
|
765
|
+
inputSchema: {
|
|
766
|
+
type: 'object',
|
|
767
|
+
properties: {
|
|
768
|
+
sopId: {
|
|
769
|
+
type: 'string',
|
|
770
|
+
description: 'The SOP ID to update'
|
|
771
|
+
},
|
|
772
|
+
title: {
|
|
773
|
+
type: 'string',
|
|
774
|
+
description: 'Updated title'
|
|
775
|
+
},
|
|
776
|
+
content: {
|
|
777
|
+
type: 'string',
|
|
778
|
+
description: 'Updated content'
|
|
779
|
+
},
|
|
780
|
+
status: {
|
|
781
|
+
type: 'string',
|
|
782
|
+
enum: ['Draft', 'Active', 'Completed', 'Closed'],
|
|
783
|
+
description: 'Updated status'
|
|
784
|
+
},
|
|
785
|
+
metadata: {
|
|
786
|
+
type: 'object',
|
|
787
|
+
description: 'Updated metadata'
|
|
788
|
+
}
|
|
789
|
+
},
|
|
790
|
+
required: ['sopId']
|
|
791
|
+
},
|
|
792
|
+
handler: async ({ sopId, ...updates }) => {
|
|
793
|
+
return await api.put(`/api/mcp/sops/${sopId}`, updates);
|
|
794
|
+
}
|
|
795
|
+
},
|
|
796
|
+
|
|
797
|
+
// ============================================================================
|
|
798
|
+
// POLICY MANAGEMENT TOOLS (CR-2026-054)
|
|
799
|
+
// ============================================================================
|
|
800
|
+
|
|
801
|
+
{
|
|
802
|
+
name: 'vibe_list_policies',
|
|
803
|
+
description: 'List all policies for the project. Policies define organizational rules and guidelines.',
|
|
804
|
+
inputSchema: {
|
|
805
|
+
type: 'object',
|
|
806
|
+
properties: {
|
|
807
|
+
status: {
|
|
808
|
+
type: 'string',
|
|
809
|
+
enum: ['Draft', 'Active', 'Completed', 'Closed'],
|
|
810
|
+
description: 'Filter by policy status'
|
|
811
|
+
},
|
|
812
|
+
category: {
|
|
813
|
+
type: 'string',
|
|
814
|
+
description: 'Filter by category (e.g., "Security", "HR", "SDLC")'
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
},
|
|
818
|
+
handler: async (params = {}) => {
|
|
819
|
+
const query = new URLSearchParams();
|
|
820
|
+
if (params.status) query.set('status', params.status);
|
|
821
|
+
if (params.category) query.set('category', params.category);
|
|
822
|
+
const queryString = query.toString();
|
|
823
|
+
const path = queryString ? `/api/mcp/policies?${queryString}` : '/api/mcp/policies';
|
|
824
|
+
return await api.get(path);
|
|
825
|
+
}
|
|
826
|
+
},
|
|
827
|
+
|
|
828
|
+
{
|
|
829
|
+
name: 'vibe_store_policy',
|
|
830
|
+
description: 'Create a new policy document. Policies define organizational rules and guidelines for security, HR, SDLC, etc.',
|
|
831
|
+
inputSchema: {
|
|
832
|
+
type: 'object',
|
|
833
|
+
properties: {
|
|
834
|
+
policyId: {
|
|
835
|
+
type: 'string',
|
|
836
|
+
description: 'Unique policy ID (e.g., "POL-001", "POL-SEC-001")'
|
|
837
|
+
},
|
|
838
|
+
title: {
|
|
839
|
+
type: 'string',
|
|
840
|
+
description: 'Title of the policy (e.g., "Information Security Policy")'
|
|
841
|
+
},
|
|
842
|
+
content: {
|
|
843
|
+
type: 'string',
|
|
844
|
+
description: 'Full policy content in markdown format'
|
|
845
|
+
},
|
|
846
|
+
status: {
|
|
847
|
+
type: 'string',
|
|
848
|
+
enum: ['Draft', 'Active', 'Completed', 'Closed'],
|
|
849
|
+
description: 'Policy status (default: Active)'
|
|
850
|
+
},
|
|
851
|
+
metadata: {
|
|
852
|
+
type: 'object',
|
|
853
|
+
description: 'Additional metadata (e.g., category, version, owner)',
|
|
854
|
+
additionalProperties: true
|
|
855
|
+
}
|
|
856
|
+
},
|
|
857
|
+
required: ['policyId', 'title', 'content']
|
|
858
|
+
},
|
|
859
|
+
handler: async (params) => {
|
|
860
|
+
return await api.post('/api/mcp/policies', params);
|
|
861
|
+
}
|
|
862
|
+
},
|
|
863
|
+
|
|
864
|
+
{
|
|
865
|
+
name: 'vibe_get_policy',
|
|
866
|
+
description: 'Get a specific policy by ID with full content.',
|
|
867
|
+
inputSchema: {
|
|
868
|
+
type: 'object',
|
|
869
|
+
properties: {
|
|
870
|
+
policyId: {
|
|
871
|
+
type: 'string',
|
|
872
|
+
description: 'The policy ID to retrieve (e.g., "POL-001")'
|
|
873
|
+
}
|
|
874
|
+
},
|
|
875
|
+
required: ['policyId']
|
|
876
|
+
},
|
|
877
|
+
handler: async ({ policyId }) => {
|
|
878
|
+
return await api.get(`/api/mcp/policies/${policyId}`);
|
|
879
|
+
}
|
|
880
|
+
},
|
|
881
|
+
|
|
882
|
+
{
|
|
883
|
+
name: 'vibe_update_policy',
|
|
884
|
+
description: 'Update an existing policy\'s content, status, or metadata.',
|
|
885
|
+
inputSchema: {
|
|
886
|
+
type: 'object',
|
|
887
|
+
properties: {
|
|
888
|
+
policyId: {
|
|
889
|
+
type: 'string',
|
|
890
|
+
description: 'The policy ID to update'
|
|
891
|
+
},
|
|
892
|
+
title: {
|
|
893
|
+
type: 'string',
|
|
894
|
+
description: 'Updated title'
|
|
895
|
+
},
|
|
896
|
+
content: {
|
|
897
|
+
type: 'string',
|
|
898
|
+
description: 'Updated content'
|
|
899
|
+
},
|
|
900
|
+
status: {
|
|
901
|
+
type: 'string',
|
|
902
|
+
enum: ['Draft', 'Active', 'Completed', 'Closed'],
|
|
903
|
+
description: 'Updated status'
|
|
904
|
+
},
|
|
905
|
+
metadata: {
|
|
906
|
+
type: 'object',
|
|
907
|
+
description: 'Updated metadata'
|
|
908
|
+
}
|
|
909
|
+
},
|
|
910
|
+
required: ['policyId']
|
|
911
|
+
},
|
|
912
|
+
handler: async ({ policyId, ...updates }) => {
|
|
913
|
+
return await api.put(`/api/mcp/policies/${policyId}`, updates);
|
|
914
|
+
}
|
|
675
915
|
}
|
|
676
916
|
];
|
|
677
917
|
|