dashclaw 1.7.1 → 1.8.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/README.md +320 -1
- package/dashclaw.js +226 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Full reference for the DashClaw SDK (Node.js). For Python, see the [Python SDK docs](../sdk-python/README.md).
|
|
4
4
|
|
|
5
|
-
Install, configure, and instrument your AI agents with
|
|
5
|
+
Install, configure, and instrument your AI agents with 78+ methods across action recording, behavior guard, context management, session handoffs, security scanning, policy testing, compliance, task routing, and more.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -608,6 +608,100 @@ Add an entry to an existing thread.
|
|
|
608
608
|
|
|
609
609
|
---
|
|
610
610
|
|
|
611
|
+
## Automation Snippets
|
|
612
|
+
|
|
613
|
+
Save, search, and reuse code snippets across agent sessions.
|
|
614
|
+
|
|
615
|
+
### claw.saveSnippet(snippet)
|
|
616
|
+
Save or update a reusable code snippet. Upserts on name.
|
|
617
|
+
|
|
618
|
+
**Parameters:**
|
|
619
|
+
| Parameter | Type | Required | Description |
|
|
620
|
+
|-----------|------|----------|-------------|
|
|
621
|
+
| name | string | Yes | Snippet name (unique per org) |
|
|
622
|
+
| code | string | Yes | The snippet code |
|
|
623
|
+
| description | string | No | What this snippet does |
|
|
624
|
+
| language | string | No | Programming language |
|
|
625
|
+
| tags | string[] | No | Tags for categorization |
|
|
626
|
+
|
|
627
|
+
**Returns:** `Promise<{snippet: Object, snippet_id: string}>`
|
|
628
|
+
|
|
629
|
+
**Example:**
|
|
630
|
+
```javascript
|
|
631
|
+
await claw.saveSnippet({
|
|
632
|
+
name: 'fetch-with-retry',
|
|
633
|
+
code: 'async function fetchRetry(url, n = 3) { ... }',
|
|
634
|
+
language: 'javascript',
|
|
635
|
+
tags: ['fetch', 'retry'],
|
|
636
|
+
});
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
### claw.getSnippet(snippetId)
|
|
640
|
+
Fetch a single snippet by ID.
|
|
641
|
+
|
|
642
|
+
**Parameters:**
|
|
643
|
+
| Parameter | Type | Required | Description |
|
|
644
|
+
|-----------|------|----------|-------------|
|
|
645
|
+
| snippetId | string | Yes | The snippet ID |
|
|
646
|
+
|
|
647
|
+
**Returns:** `Promise<{snippet: Object}>`
|
|
648
|
+
|
|
649
|
+
**Example:**
|
|
650
|
+
```javascript
|
|
651
|
+
const { snippet } = await claw.getSnippet('sn_abc123');
|
|
652
|
+
console.log(snippet.name, snippet.language);
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
### claw.getSnippets(filters?)
|
|
656
|
+
Search and list snippets.
|
|
657
|
+
|
|
658
|
+
**Parameters:**
|
|
659
|
+
| Parameter | Type | Required | Description |
|
|
660
|
+
|-----------|------|----------|-------------|
|
|
661
|
+
| search | string | No | Search name/description |
|
|
662
|
+
| tag | string | No | Filter by tag |
|
|
663
|
+
| language | string | No | Filter by language |
|
|
664
|
+
| limit | number | No | Max results |
|
|
665
|
+
|
|
666
|
+
**Returns:** `Promise<{snippets: Object[], total: number}>`
|
|
667
|
+
|
|
668
|
+
**Example:**
|
|
669
|
+
```javascript
|
|
670
|
+
const { snippets } = await claw.getSnippets({ language: 'javascript' });
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
### claw.useSnippet(snippetId)
|
|
674
|
+
Mark a snippet as used (increments use_count).
|
|
675
|
+
|
|
676
|
+
**Parameters:**
|
|
677
|
+
| Parameter | Type | Required | Description |
|
|
678
|
+
|-----------|------|----------|-------------|
|
|
679
|
+
| snippetId | string | Yes | Snippet ID |
|
|
680
|
+
|
|
681
|
+
**Returns:** `Promise<{snippet: Object}>`
|
|
682
|
+
|
|
683
|
+
**Example:**
|
|
684
|
+
```javascript
|
|
685
|
+
await claw.useSnippet('sn_abc123');
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
### claw.deleteSnippet(snippetId)
|
|
689
|
+
Delete a snippet.
|
|
690
|
+
|
|
691
|
+
**Parameters:**
|
|
692
|
+
| Parameter | Type | Required | Description |
|
|
693
|
+
|-----------|------|----------|-------------|
|
|
694
|
+
| snippetId | string | Yes | Snippet ID |
|
|
695
|
+
|
|
696
|
+
**Returns:** `Promise<{deleted: boolean, id: string}>`
|
|
697
|
+
|
|
698
|
+
**Example:**
|
|
699
|
+
```javascript
|
|
700
|
+
await claw.deleteSnippet('sn_abc123');
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
---
|
|
704
|
+
|
|
611
705
|
## Agent Messaging
|
|
612
706
|
|
|
613
707
|
### claw.sendMessage(params)
|
|
@@ -640,6 +734,231 @@ Push multiple data categories in a single request. Accepts connections, memory,
|
|
|
640
734
|
|
|
641
735
|
---
|
|
642
736
|
|
|
737
|
+
## Policy Testing
|
|
738
|
+
|
|
739
|
+
Run guardrails tests, generate compliance proof reports, and import policy packs.
|
|
740
|
+
|
|
741
|
+
### claw.testPolicies()
|
|
742
|
+
Run guardrails tests against all active policies. Returns pass/fail results per policy.
|
|
743
|
+
|
|
744
|
+
**Returns:** `Promise<{ results: Object[], total: number, passed: number, failed: number }>`
|
|
745
|
+
|
|
746
|
+
**Example:**
|
|
747
|
+
```javascript
|
|
748
|
+
const report = await claw.testPolicies();
|
|
749
|
+
console.log(`${report.passed}/${report.total} policies passed`);
|
|
750
|
+
for (const r of report.results.filter(r => !r.passed)) {
|
|
751
|
+
console.log(`FAIL: ${r.policy} — ${r.reason}`);
|
|
752
|
+
}
|
|
753
|
+
```
|
|
754
|
+
|
|
755
|
+
### claw.getProofReport(options?)
|
|
756
|
+
Generate a compliance proof report summarizing guard decisions, policy evaluations, and audit evidence.
|
|
757
|
+
|
|
758
|
+
**Parameters:**
|
|
759
|
+
| Parameter | Type | Required | Description |
|
|
760
|
+
|-----------|------|----------|-------------|
|
|
761
|
+
| format | string | No | Output format: "json" (default) or "md" |
|
|
762
|
+
|
|
763
|
+
**Returns:** `Promise<{ report: Object|string }>`
|
|
764
|
+
|
|
765
|
+
### claw.importPolicies({ pack?, yaml? })
|
|
766
|
+
Import a policy pack or raw YAML. Admin only. Replaces or merges into active policies.
|
|
767
|
+
|
|
768
|
+
**Parameters:**
|
|
769
|
+
| Parameter | Type | Required | Description |
|
|
770
|
+
|-----------|------|----------|-------------|
|
|
771
|
+
| pack | string | No | Named policy pack: enterprise-strict, smb-safe, startup-growth, development |
|
|
772
|
+
| yaml | string | No | Raw YAML policy definition |
|
|
773
|
+
|
|
774
|
+
**Returns:** `Promise<{ imported: number, policies: Object[] }>`
|
|
775
|
+
|
|
776
|
+
---
|
|
777
|
+
|
|
778
|
+
## Compliance Engine
|
|
779
|
+
|
|
780
|
+
Map policies to regulatory frameworks, run gap analysis, and generate compliance reports.
|
|
781
|
+
|
|
782
|
+
### claw.mapCompliance(framework)
|
|
783
|
+
Map active policies to framework controls. Returns a control-by-control coverage matrix.
|
|
784
|
+
|
|
785
|
+
**Parameters:**
|
|
786
|
+
| Parameter | Type | Required | Description |
|
|
787
|
+
|-----------|------|----------|-------------|
|
|
788
|
+
| framework | string | Yes | Target framework: soc2, iso27001, gdpr, nist-ai-rmf, imda-agentic |
|
|
789
|
+
|
|
790
|
+
**Returns:** `Promise<{ framework: string, controls: Object[], coverage_pct: number }>`
|
|
791
|
+
|
|
792
|
+
**Example:**
|
|
793
|
+
```javascript
|
|
794
|
+
const { controls, coverage_pct } = await claw.mapCompliance('soc2');
|
|
795
|
+
console.log(`SOC 2 coverage: ${coverage_pct}%`);
|
|
796
|
+
for (const ctrl of controls.filter(c => !c.covered)) {
|
|
797
|
+
console.log(`Gap: ${ctrl.id} — ${ctrl.name}`);
|
|
798
|
+
}
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
### claw.analyzeGaps(framework)
|
|
802
|
+
Run gap analysis with remediation plan. Identifies missing controls and suggests policy changes.
|
|
803
|
+
|
|
804
|
+
**Parameters:**
|
|
805
|
+
| Parameter | Type | Required | Description |
|
|
806
|
+
|-----------|------|----------|-------------|
|
|
807
|
+
| framework | string | Yes | Target framework: soc2, iso27001, gdpr, nist-ai-rmf, imda-agentic |
|
|
808
|
+
|
|
809
|
+
**Returns:** `Promise<{ framework: string, gaps: Object[], remediation_plan: Object[] }>`
|
|
810
|
+
|
|
811
|
+
### claw.getComplianceReport(framework, options?)
|
|
812
|
+
Generate a full compliance report and save a point-in-time snapshot.
|
|
813
|
+
|
|
814
|
+
**Parameters:**
|
|
815
|
+
| Parameter | Type | Required | Description |
|
|
816
|
+
|-----------|------|----------|-------------|
|
|
817
|
+
| framework | string | Yes | Target framework |
|
|
818
|
+
| options.format | string | No | Output format: "json" (default) or "md" |
|
|
819
|
+
|
|
820
|
+
**Returns:** `Promise<{ report: Object|string, snapshot_id: string }>`
|
|
821
|
+
|
|
822
|
+
### claw.listFrameworks()
|
|
823
|
+
List all available compliance frameworks with metadata.
|
|
824
|
+
|
|
825
|
+
**Returns:** `Promise<{ frameworks: Object[] }>`
|
|
826
|
+
|
|
827
|
+
### claw.getComplianceEvidence(options?)
|
|
828
|
+
Get live guard decision evidence for compliance audits. Returns timestamped decision records.
|
|
829
|
+
|
|
830
|
+
**Parameters:**
|
|
831
|
+
| Parameter | Type | Required | Description |
|
|
832
|
+
|-----------|------|----------|-------------|
|
|
833
|
+
| options.window | string | No | Time window: "7d" (default), "30d", "90d" |
|
|
834
|
+
|
|
835
|
+
**Returns:** `Promise<{ evidence: Object[], window: string, total: number }>`
|
|
836
|
+
|
|
837
|
+
---
|
|
838
|
+
|
|
839
|
+
## Task Routing
|
|
840
|
+
|
|
841
|
+
Route tasks to agents based on capabilities, availability, and workload. Manage the agent pool and monitor routing health.
|
|
842
|
+
|
|
843
|
+
### claw.listRoutingAgents(filters?)
|
|
844
|
+
List registered routing agents with optional status filter.
|
|
845
|
+
|
|
846
|
+
**Parameters:**
|
|
847
|
+
| Parameter | Type | Required | Description |
|
|
848
|
+
|-----------|------|----------|-------------|
|
|
849
|
+
| filters.status | string | No | Filter by status: available, busy, offline |
|
|
850
|
+
|
|
851
|
+
**Returns:** `Promise<{ agents: Object[], total: number }>`
|
|
852
|
+
|
|
853
|
+
### claw.registerRoutingAgent(agent)
|
|
854
|
+
Register a new agent in the routing pool.
|
|
855
|
+
|
|
856
|
+
**Parameters:**
|
|
857
|
+
| Parameter | Type | Required | Description |
|
|
858
|
+
|-----------|------|----------|-------------|
|
|
859
|
+
| name | string | Yes | Agent display name |
|
|
860
|
+
| capabilities | string[] | No | List of skills/capabilities |
|
|
861
|
+
| maxConcurrent | number | No | Max concurrent tasks (default: 1) |
|
|
862
|
+
| endpoint | string | No | Agent callback endpoint URL |
|
|
863
|
+
|
|
864
|
+
**Returns:** `Promise<{ agent: Object, agent_id: string }>`
|
|
865
|
+
|
|
866
|
+
### claw.getRoutingAgent(agentId)
|
|
867
|
+
Get a single routing agent with current metrics.
|
|
868
|
+
|
|
869
|
+
**Parameters:**
|
|
870
|
+
| Parameter | Type | Required | Description |
|
|
871
|
+
|-----------|------|----------|-------------|
|
|
872
|
+
| agentId | string | Yes | The routing agent ID |
|
|
873
|
+
|
|
874
|
+
**Returns:** `Promise<{ agent: Object, metrics: Object }>`
|
|
875
|
+
|
|
876
|
+
### claw.updateRoutingAgentStatus(agentId, status)
|
|
877
|
+
Update a routing agent's availability status.
|
|
878
|
+
|
|
879
|
+
**Parameters:**
|
|
880
|
+
| Parameter | Type | Required | Description |
|
|
881
|
+
|-----------|------|----------|-------------|
|
|
882
|
+
| agentId | string | Yes | The routing agent ID |
|
|
883
|
+
| status | string | Yes | New status: available, busy, offline |
|
|
884
|
+
|
|
885
|
+
**Returns:** `Promise<{ agent: Object }>`
|
|
886
|
+
|
|
887
|
+
### claw.deleteRoutingAgent(agentId)
|
|
888
|
+
Remove an agent from the routing pool.
|
|
889
|
+
|
|
890
|
+
**Parameters:**
|
|
891
|
+
| Parameter | Type | Required | Description |
|
|
892
|
+
|-----------|------|----------|-------------|
|
|
893
|
+
| agentId | string | Yes | The routing agent ID |
|
|
894
|
+
|
|
895
|
+
**Returns:** `Promise<{ deleted: boolean, id: string }>`
|
|
896
|
+
|
|
897
|
+
### claw.listRoutingTasks(filters?)
|
|
898
|
+
List routing tasks with optional filters.
|
|
899
|
+
|
|
900
|
+
**Parameters:**
|
|
901
|
+
| Parameter | Type | Required | Description |
|
|
902
|
+
|-----------|------|----------|-------------|
|
|
903
|
+
| filters.status | string | No | Filter by status: pending, assigned, completed, failed |
|
|
904
|
+
| filters.agent_id | string | No | Filter by assigned agent |
|
|
905
|
+
| filters.limit | number | No | Max results (default: 50) |
|
|
906
|
+
| filters.offset | number | No | Pagination offset |
|
|
907
|
+
|
|
908
|
+
**Returns:** `Promise<{ tasks: Object[], total: number }>`
|
|
909
|
+
|
|
910
|
+
### claw.submitRoutingTask(task)
|
|
911
|
+
Submit a task for automatic routing to the best available agent.
|
|
912
|
+
|
|
913
|
+
**Parameters:**
|
|
914
|
+
| Parameter | Type | Required | Description |
|
|
915
|
+
|-----------|------|----------|-------------|
|
|
916
|
+
| title | string | Yes | Task title |
|
|
917
|
+
| description | string | No | Detailed description |
|
|
918
|
+
| requiredSkills | string[] | No | Skills needed to handle this task |
|
|
919
|
+
| urgency | string | No | low, medium, high, critical (default: medium) |
|
|
920
|
+
| timeoutSeconds | number | No | Task timeout in seconds |
|
|
921
|
+
| maxRetries | number | No | Max retry attempts on failure |
|
|
922
|
+
| callbackUrl | string | No | URL to notify on completion |
|
|
923
|
+
|
|
924
|
+
**Returns:** `Promise<{ task: Object, task_id: string, assigned_agent: Object|null }>`
|
|
925
|
+
|
|
926
|
+
**Example:**
|
|
927
|
+
```javascript
|
|
928
|
+
const { task_id, assigned_agent } = await claw.submitRoutingTask({
|
|
929
|
+
title: 'Analyze quarterly metrics',
|
|
930
|
+
description: 'Pull Q4 data and generate summary report',
|
|
931
|
+
requiredSkills: ['data-analysis', 'reporting'],
|
|
932
|
+
urgency: 'high',
|
|
933
|
+
timeoutSeconds: 600,
|
|
934
|
+
callbackUrl: 'https://hooks.example.com/task-done',
|
|
935
|
+
});
|
|
936
|
+
console.log(`Task ${task_id} assigned to ${assigned_agent?.name ?? 'queue'}`);
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
### claw.completeRoutingTask(taskId, result?)
|
|
940
|
+
Mark a routing task as completed with optional result payload.
|
|
941
|
+
|
|
942
|
+
**Parameters:**
|
|
943
|
+
| Parameter | Type | Required | Description |
|
|
944
|
+
|-----------|------|----------|-------------|
|
|
945
|
+
| taskId | string | Yes | The task ID |
|
|
946
|
+
| result | Object | No | Task result data |
|
|
947
|
+
|
|
948
|
+
**Returns:** `Promise<{ task: Object }>`
|
|
949
|
+
|
|
950
|
+
### claw.getRoutingStats()
|
|
951
|
+
Get aggregate routing statistics (throughput, latency, agent utilization).
|
|
952
|
+
|
|
953
|
+
**Returns:** `Promise<{ stats: Object }>`
|
|
954
|
+
|
|
955
|
+
### claw.getRoutingHealth()
|
|
956
|
+
Get routing system health status and diagnostics.
|
|
957
|
+
|
|
958
|
+
**Returns:** `Promise<{ healthy: boolean, agents: Object, tasks: Object, latency: Object }>`
|
|
959
|
+
|
|
960
|
+
---
|
|
961
|
+
|
|
643
962
|
## Error Handling
|
|
644
963
|
|
|
645
964
|
All SDK methods throw on non-2xx responses. Errors include `status` (HTTP code) and `details` (when available).
|
package/dashclaw.js
CHANGED
|
@@ -3,20 +3,23 @@
|
|
|
3
3
|
* Full-featured agent toolkit for the DashClaw platform.
|
|
4
4
|
* Zero-dependency ESM SDK — requires Node 18+ (native fetch).
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* 78+ methods across 16+ categories:
|
|
7
7
|
* - Action Recording (7)
|
|
8
8
|
* - Loops & Assumptions (7)
|
|
9
9
|
* - Signals (1)
|
|
10
10
|
* - Dashboard Data (9)
|
|
11
11
|
* - Session Handoffs (3)
|
|
12
12
|
* - Context Manager (7)
|
|
13
|
-
* - Automation Snippets (
|
|
13
|
+
* - Automation Snippets (5)
|
|
14
14
|
* - User Preferences (6)
|
|
15
15
|
* - Daily Digest (1)
|
|
16
16
|
* - Security Scanning (2)
|
|
17
17
|
* - Agent Messaging (9)
|
|
18
18
|
* - Behavior Guard (2)
|
|
19
19
|
* - Bulk Sync (1)
|
|
20
|
+
* - Policy Testing (3)
|
|
21
|
+
* - Compliance Engine (5)
|
|
22
|
+
* - Task Routing (10)
|
|
20
23
|
*/
|
|
21
24
|
|
|
22
25
|
class DashClaw {
|
|
@@ -1138,7 +1141,7 @@ class DashClaw {
|
|
|
1138
1141
|
}
|
|
1139
1142
|
|
|
1140
1143
|
// ══════════════════════════════════════════════
|
|
1141
|
-
// Category 7: Automation Snippets (
|
|
1144
|
+
// Category 7: Automation Snippets (5 methods)
|
|
1142
1145
|
// ══════════════════════════════════════════════
|
|
1143
1146
|
|
|
1144
1147
|
/**
|
|
@@ -1176,6 +1179,15 @@ class DashClaw {
|
|
|
1176
1179
|
return this._request(`/api/snippets?${params}`, 'GET');
|
|
1177
1180
|
}
|
|
1178
1181
|
|
|
1182
|
+
/**
|
|
1183
|
+
* Fetch a single snippet by ID.
|
|
1184
|
+
* @param {string} snippetId - The snippet ID
|
|
1185
|
+
* @returns {Promise<{snippet: Object}>}
|
|
1186
|
+
*/
|
|
1187
|
+
async getSnippet(snippetId) {
|
|
1188
|
+
return this._request(`/api/snippets/${snippetId}`, 'GET');
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1179
1191
|
/**
|
|
1180
1192
|
* Mark a snippet as used (increments use_count).
|
|
1181
1193
|
* @param {string} snippetId - The snippet ID
|
|
@@ -1524,6 +1536,217 @@ class DashClaw {
|
|
|
1524
1536
|
return this._request(`/api/guard?${params}`, 'GET');
|
|
1525
1537
|
}
|
|
1526
1538
|
|
|
1539
|
+
// ══════════════════════════════════════════════════════════
|
|
1540
|
+
// Category 14: Policy Testing (3 methods)
|
|
1541
|
+
// ══════════════════════════════════════════════════════════
|
|
1542
|
+
|
|
1543
|
+
/**
|
|
1544
|
+
* Run guardrails tests against all active policies for this org.
|
|
1545
|
+
* @returns {Promise<{success: boolean, total_policies: number, total_tests: number, passed: number, failed: number, details: Object[]}>}
|
|
1546
|
+
*/
|
|
1547
|
+
async testPolicies() {
|
|
1548
|
+
return this._request('/api/policies/test', 'POST', {
|
|
1549
|
+
agent_id: this.agentId,
|
|
1550
|
+
});
|
|
1551
|
+
}
|
|
1552
|
+
|
|
1553
|
+
/**
|
|
1554
|
+
* Generate a compliance proof report from active policies.
|
|
1555
|
+
* @param {Object} [options]
|
|
1556
|
+
* @param {string} [options.format='json'] - 'json' or 'md'
|
|
1557
|
+
* @returns {Promise<Object|string>}
|
|
1558
|
+
*/
|
|
1559
|
+
async getProofReport(options = {}) {
|
|
1560
|
+
const params = new URLSearchParams();
|
|
1561
|
+
if (options.format) params.set('format', options.format);
|
|
1562
|
+
return this._request(`/api/policies/proof?${params}`, 'GET');
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
/**
|
|
1566
|
+
* Import a policy pack or raw YAML into the org's guard policies.
|
|
1567
|
+
* Requires admin role.
|
|
1568
|
+
* @param {Object} options
|
|
1569
|
+
* @param {string} [options.pack] - Pack name: enterprise-strict, smb-safe, startup-growth, development
|
|
1570
|
+
* @param {string} [options.yaml] - Raw YAML string of policies to import
|
|
1571
|
+
* @returns {Promise<{imported: number, skipped: number, errors: string[], policies: Object[]}>}
|
|
1572
|
+
*/
|
|
1573
|
+
async importPolicies({ pack, yaml } = {}) {
|
|
1574
|
+
return this._request('/api/policies/import', 'POST', { pack, yaml });
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
// ══════════════════════════════════════════════════════════
|
|
1578
|
+
// Category 15: Compliance Engine (5 methods)
|
|
1579
|
+
// ══════════════════════════════════════════════════════════
|
|
1580
|
+
|
|
1581
|
+
/**
|
|
1582
|
+
* Map active policies to a compliance framework's controls.
|
|
1583
|
+
* @param {string} framework - Framework ID: soc2, iso27001, gdpr, nist-ai-rmf, imda-agentic
|
|
1584
|
+
* @returns {Promise<Object>} Compliance map with controls, coverage, and gaps
|
|
1585
|
+
*/
|
|
1586
|
+
async mapCompliance(framework) {
|
|
1587
|
+
return this._request(`/api/compliance/map?framework=${encodeURIComponent(framework)}`, 'GET');
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
/**
|
|
1591
|
+
* Run gap analysis on a compliance framework mapping.
|
|
1592
|
+
* @param {string} framework - Framework ID
|
|
1593
|
+
* @returns {Promise<Object>} Gap analysis with remediation plan and risk assessment
|
|
1594
|
+
*/
|
|
1595
|
+
async analyzeGaps(framework) {
|
|
1596
|
+
return this._request(`/api/compliance/gaps?framework=${encodeURIComponent(framework)}`, 'GET');
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
/**
|
|
1600
|
+
* Generate a full compliance report (markdown or JSON) and save a snapshot.
|
|
1601
|
+
* @param {string} framework - Framework ID
|
|
1602
|
+
* @param {Object} [options]
|
|
1603
|
+
* @param {string} [options.format='json'] - 'json' or 'md'
|
|
1604
|
+
* @returns {Promise<Object>}
|
|
1605
|
+
*/
|
|
1606
|
+
async getComplianceReport(framework, options = {}) {
|
|
1607
|
+
const params = new URLSearchParams({ framework });
|
|
1608
|
+
if (options.format) params.set('format', options.format);
|
|
1609
|
+
return this._request(`/api/compliance/report?${params}`, 'GET');
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1612
|
+
/**
|
|
1613
|
+
* List available compliance frameworks.
|
|
1614
|
+
* @returns {Promise<{frameworks: Object[]}>}
|
|
1615
|
+
*/
|
|
1616
|
+
async listFrameworks() {
|
|
1617
|
+
return this._request('/api/compliance/frameworks', 'GET');
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1620
|
+
/**
|
|
1621
|
+
* Get live compliance evidence from guard decisions and action records.
|
|
1622
|
+
* @param {Object} [options]
|
|
1623
|
+
* @param {string} [options.window='30d'] - Time window (e.g., '7d', '30d', '90d')
|
|
1624
|
+
* @returns {Promise<{evidence: Object}>}
|
|
1625
|
+
*/
|
|
1626
|
+
async getComplianceEvidence(options = {}) {
|
|
1627
|
+
const params = new URLSearchParams();
|
|
1628
|
+
if (options.window) params.set('window', options.window);
|
|
1629
|
+
return this._request(`/api/compliance/evidence?${params}`, 'GET');
|
|
1630
|
+
}
|
|
1631
|
+
|
|
1632
|
+
// ══════════════════════════════════════════════════════════
|
|
1633
|
+
// Category 16: Task Routing (10 methods)
|
|
1634
|
+
// ══════════════════════════════════════════════════════════
|
|
1635
|
+
|
|
1636
|
+
/**
|
|
1637
|
+
* List routing agents registered in this org.
|
|
1638
|
+
* @param {Object} [filters]
|
|
1639
|
+
* @param {string} [filters.status] - Filter by status: available, busy, offline
|
|
1640
|
+
* @returns {Promise<{agents: Object[]}>}
|
|
1641
|
+
*/
|
|
1642
|
+
async listRoutingAgents(filters = {}) {
|
|
1643
|
+
const params = new URLSearchParams();
|
|
1644
|
+
if (filters.status) params.set('status', filters.status);
|
|
1645
|
+
return this._request(`/api/routing/agents?${params}`, 'GET');
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
/**
|
|
1649
|
+
* Register an agent for task routing.
|
|
1650
|
+
* @param {Object} agent
|
|
1651
|
+
* @param {string} agent.name - Agent name
|
|
1652
|
+
* @param {Array} [agent.capabilities] - Skills/capabilities (strings or {skill, priority} objects)
|
|
1653
|
+
* @param {number} [agent.maxConcurrent=3] - Max concurrent tasks
|
|
1654
|
+
* @param {string} [agent.endpoint] - Webhook endpoint for task dispatch
|
|
1655
|
+
* @returns {Promise<{agent: Object}>}
|
|
1656
|
+
*/
|
|
1657
|
+
async registerRoutingAgent(agent) {
|
|
1658
|
+
return this._request('/api/routing/agents', 'POST', agent);
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
/**
|
|
1662
|
+
* Get a single routing agent by ID.
|
|
1663
|
+
* @param {string} agentId - Routing agent ID
|
|
1664
|
+
* @returns {Promise<{agent: Object, metrics: Object[]}>}
|
|
1665
|
+
*/
|
|
1666
|
+
async getRoutingAgent(agentId) {
|
|
1667
|
+
return this._request(`/api/routing/agents/${encodeURIComponent(agentId)}`, 'GET');
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
/**
|
|
1671
|
+
* Update routing agent status.
|
|
1672
|
+
* @param {string} agentId - Routing agent ID
|
|
1673
|
+
* @param {string} status - New status: available, busy, offline
|
|
1674
|
+
* @returns {Promise<{agent: Object}>}
|
|
1675
|
+
*/
|
|
1676
|
+
async updateRoutingAgentStatus(agentId, status) {
|
|
1677
|
+
return this._request(`/api/routing/agents/${encodeURIComponent(agentId)}`, 'PATCH', { status });
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
/**
|
|
1681
|
+
* Unregister (delete) a routing agent.
|
|
1682
|
+
* @param {string} agentId - Routing agent ID
|
|
1683
|
+
* @returns {Promise<{deleted: Object}>}
|
|
1684
|
+
*/
|
|
1685
|
+
async deleteRoutingAgent(agentId) {
|
|
1686
|
+
return this._request(`/api/routing/agents/${encodeURIComponent(agentId)}`, 'DELETE');
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1689
|
+
/**
|
|
1690
|
+
* List routing tasks with optional filters.
|
|
1691
|
+
* @param {Object} [filters]
|
|
1692
|
+
* @param {string} [filters.status] - Filter by status
|
|
1693
|
+
* @param {string} [filters.assignedTo] - Filter by assigned agent
|
|
1694
|
+
* @param {number} [filters.limit=50] - Max results
|
|
1695
|
+
* @returns {Promise<{tasks: Object[]}>}
|
|
1696
|
+
*/
|
|
1697
|
+
async listRoutingTasks(filters = {}) {
|
|
1698
|
+
const params = new URLSearchParams();
|
|
1699
|
+
if (filters.status) params.set('status', filters.status);
|
|
1700
|
+
if (filters.assignedTo) params.set('assigned_to', filters.assignedTo);
|
|
1701
|
+
if (filters.limit) params.set('limit', String(filters.limit));
|
|
1702
|
+
return this._request(`/api/routing/tasks?${params}`, 'GET');
|
|
1703
|
+
}
|
|
1704
|
+
|
|
1705
|
+
/**
|
|
1706
|
+
* Submit a task for auto-routing to the best available agent.
|
|
1707
|
+
* @param {Object} task
|
|
1708
|
+
* @param {string} task.title - Task title
|
|
1709
|
+
* @param {string} [task.description] - Task description
|
|
1710
|
+
* @param {string[]} [task.requiredSkills] - Skills needed to complete this task
|
|
1711
|
+
* @param {string} [task.urgency='normal'] - Urgency: low, normal, high, critical
|
|
1712
|
+
* @param {number} [task.timeoutSeconds=3600] - Timeout in seconds
|
|
1713
|
+
* @param {number} [task.maxRetries=2] - Max retry attempts
|
|
1714
|
+
* @param {string} [task.callbackUrl] - Webhook URL for task completion callback
|
|
1715
|
+
* @returns {Promise<{task: Object, routing: Object}>}
|
|
1716
|
+
*/
|
|
1717
|
+
async submitRoutingTask(task) {
|
|
1718
|
+
return this._request('/api/routing/tasks', 'POST', task);
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
/**
|
|
1722
|
+
* Complete a routing task.
|
|
1723
|
+
* @param {string} taskId - Task ID
|
|
1724
|
+
* @param {Object} [result]
|
|
1725
|
+
* @param {boolean} [result.success=true] - Whether task succeeded
|
|
1726
|
+
* @param {Object} [result.result] - Task result data
|
|
1727
|
+
* @param {string} [result.error] - Error message if failed
|
|
1728
|
+
* @returns {Promise<{task: Object, routing: Object}>}
|
|
1729
|
+
*/
|
|
1730
|
+
async completeRoutingTask(taskId, result = {}) {
|
|
1731
|
+
return this._request(`/api/routing/tasks/${encodeURIComponent(taskId)}/complete`, 'POST', result);
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
/**
|
|
1735
|
+
* Get routing statistics for the org.
|
|
1736
|
+
* @returns {Promise<{agents: Object, tasks: Object, routing: Object}>}
|
|
1737
|
+
*/
|
|
1738
|
+
async getRoutingStats() {
|
|
1739
|
+
return this._request('/api/routing/stats', 'GET');
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
/**
|
|
1743
|
+
* Get routing system health status.
|
|
1744
|
+
* @returns {Promise<{status: string, agents: Object, tasks: Object}>}
|
|
1745
|
+
*/
|
|
1746
|
+
async getRoutingHealth() {
|
|
1747
|
+
return this._request('/api/routing/health', 'GET');
|
|
1748
|
+
}
|
|
1749
|
+
|
|
1527
1750
|
// ─── Bulk Sync ────────────────────────────────────────────
|
|
1528
1751
|
|
|
1529
1752
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dashclaw",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Full-featured agent toolkit for the DashClaw platform.
|
|
3
|
+
"version": "1.8.0",
|
|
4
|
+
"description": "Full-featured agent toolkit for the DashClaw platform. 78+ methods for action recording, context management, session handoffs, security scanning, behavior guard, compliance, task routing, bulk sync, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|